Installation of Redmine on Debian 8 (Jessie)
Using these steps you can install Redmine on Debian 8 using MySQL as database backend, nginx as web server and Unicorn as application server. Redmine will be installed at /srv/redmine/
path.
Debian 8 is the first version of Debian that is using systemd
, all other steps are the same also for older versions of Debian.
System settings
Add user account that will be used for redmine application.
useradd -m -s /bin/bash redmine
RVM
Install required packages
apt-get install curl git
curl -sSL https://rvm.io/mpapis.asc | gpg --import - curl -Lk https://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh # adds rvm to path (instead of re-logging) cd /tmp git clone https://github.com/skaes/rvm-patchsets cd /tmp/rvm-patchsets bash install.sh bash -lc '/usr/local/rvm/bin/rvm install ruby-2.1.5' bash -lc 'rvm use --default 2.1.5'
Database
As a database will be used MySQL server.
apt-get install mysql-server
Then create dedicated user account
mysql -p
CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'Your-Secret-Password'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
Redmine
Download
mkdir /srv/redmine/ mkdir /srv/redmine/run/ cd /srv/redmine/ wget http://www.redmine.org/releases/redmine-3.1.0.tar.gz tar zxvf redmine-3.1.0.tar.gz mv redmine-3.1.0 wwwroot rm redmine-3.1.0.tar.gz
Configure
cd /srv/redmine/wwwroot/config/ cp configuration.yml.example configuration.yml cp database.yml.example database.yml
now edit database.yml
file and change MySQL connection:
production: adapter: mysql2 database: redmine host: localhost username: redmine password: "Your-Secret-Password" encoding: utf8
Install
Install dependencies:
apt-get install make gcc libxml2-dev libxslt-dev libmysql++-dev libmysqlclient-dev libmagickcore-dev libmagickwand-dev libpq-dev imagemagick ruby-dev
cd /srv/redmine/wwwroot bash -lc 'rvm 2.1.5 do gem install bundler' bash -lc 'cd /srv/redmine/wwwroot; RAILS_ENV=production rvm 2.1.5 do bundle install --without development test'
Now make sure that redmine
user can access Redmine files.
chown -R redmine:redmine /srv/redmine/
And following commands should be executed as redmine
user.
su - redmine # login as redmine user bash -lc 'cd /srv/redmine/wwwroot; RAILS_ENV=production rvm 2.1.5 do bundle exec rake generate_secret_token' bash -lc 'cd /srv/redmine/wwwroot; RAILS_ENV=production rvm 2.1.5 do bundle exec rake db:migrate' bash -lc 'cd /srv/redmine/wwwroot; RAILS_ENV=production rvm 2.1.5 do bundle exec rake redmine:load_default_data REDMINE_LANG=en' exit # logout
Log rotation
To enable log rotation create file /etc/logrotate.d/redmine
using this:
echo <<EOF > /etc/logrotate.d/redmine /srv/redmine/wwwroot/log/*.log { rotate 14 daily compress delaycompress copytruncate } EOF
Unicorn
Install unicorn server.
bash -lc 'rvm 2.1.5 do gem install unicorn'
mkdir /etc/unicorn
Add systemd init file /lib/systemd/system/unicorn.service
:
cat <<EOF > /lib/systemd/system/unicorn.service [Unit] Description=Unicorn [Service] Type=simple User=redmine WorkingDirectory=/srv/redmine/wwwroot Environment=RAILS_ENV=production PIDFile=/srv/redmine/run/unicorn.pid ExecStart=/bin/bash -lc 'rvm 2.1.5 do unicorn -D -c /etc/unicorn/redmine.rb -E production' [Install] WantedBy=multi-user.target EOF
and unicorn config file /etc/unicorn/redmine.rb
:
cat <<'EOF' > /etc/unicorn/redmine.rb worker_processes 4 stderr_path '/srv/redmine/wwwroot/log/stderr.log' stdout_path '/srv/redmine/wwwroot/log/stdout.log' listen '/srv/redmine/run/unicorn.sock' pid "/srv/redmine/run/unicorn.pid" timeout 300 preload_app true before_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn master intercepting TERM and sending myself QUIT instead' Process.kill 'QUIT', Process.pid end defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' end defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end EOF
Nginx
Install server:
apt-get install nginx
Add upstream configuration for Unicorn (/etc/nginx/conf.d/unicorn.conf
):
cat <<EOF > /etc/nginx/conf.d/unicorn.conf upstream unicorn { server unix:/srv/redmine/run/unicorn.sock fail_timeout=10s; } EOF
Redmine site configuration /etc/nginx/sites-available/redmine
using hostname my-redmine.company.com
cat <<'EOF' > /etc/nginx/sites-available/redmine server { listen *:80; server_name my-redmine.company.com; index index.html index.htm; access_log /var/log/nginx/redmine.access.log combined; error_log /var/log/nginx/redmine.error.log; location / { proxy_pass http://unicorn; proxy_read_timeout 90; proxy_connect_timeout 90; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } } EOF
and activate the site:
ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/
Start services
systemctl start unicorn.service
systemctl reload nginx.service
Use it
To access newly installed instance open web browser and access it using hostnamed configured in nginx.
During installation was created default administrator with these credentials:
Login | admin |
---|---|
Password | admin |