Installation von Redmine 3.4 auf Debian 9 mit Puma, Nginx und SSL

Start mit blankem Debian (9).

Essentials installieren

apt update
apt -y install libcurl4-gnutls-dev libmagickwand-dev imagemagick build-essential dirmngr curl nginx postgresql ufw

Benutzer anlegen und SSH Key generieren

User erstellen unter dem Redmine laufen kann. Der Benutzer kommt in die Gruppe sudo, damit bei der Installation von Ruby Gems auch Systemsoftware geändert werden kann. Der Login wird deaktiviert. Außerdem braucht es einen SSH Key um auf die Repos von GitHub zugreifen zu können.

Damit die Startskripte des Users geladen werden muss die Option --login beim Wechsel angegeben werden. Das wird wichtig für die Befehlte von Ruby und Puma.

adduser redmine --add_extra_groups sudo --disable-login
su --login redmine
cd
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/github

Den Public Key zum Github Konto hinzufügen

Benutzer für Datenbank

Erst den Benutzer für die Datenbank erstellen und dann mit diesem Benutzer die Datenbank erstellen.

su postgres
createuser --pwprompt --interactive redmine
exit
su --login redmine
createdb redmine

RVM und Ruby installieren

GPG Key-Server für RVM hinzufügen und RVM und Ruby 2.1.4 installieren

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 2.1.4
rvm use 2.1.4 --default
gem install bundle

Redmine installieren

mkdir redmine
cd redmine
mkdir bin
mkdir etc
mkdir ssh_keys
git clone git@github.com:redmine/redmine.git --branch 3.4-stable redmine-3.4
ln -s /home/redmine/redmineredmine-3.4 current
cd current
cp config/database.yml.example database.yml
nano config/database.yml

Datenbankkonfiguration eintragen

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "<redmine-pgsql-password>"
  encoding: utf8
bundle install --without development test
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=de bundle exec rake redmine:load_default_data

Puma installieren

gem install puma
nano /home/redmine/etc/puma.rb

Die Inhalte dieser Datei einfügen:

https://github.com/jbox-web/redmine_git_hosting/blob/devel/contrib/scripts/puma.rb

nano /home/redmine/bin/server_puma.sh

Die Inhalte dieser Datei einfügen:

https://raw.githubusercontent.com/jbox-web/redmine_git_hosting/devel/contrib/scripts/server_puma.sh

chmod +x /home/redmine/bin/server_puma.sh

Nginx Konfiguration

upstream puma_redmine {
  server        unix:/home/redmine/redmine/tmp/sockets/redmine.sock fail_timeout=0;
  #server        127.0.0.1:3000; #dev mode
}

server {
  server_name   <HOSTNAME>
  listen        0.0.0.0:80;
  root          /home/redmine/redmine;

  access_log    /var/log/nginx/redmine.log;
  error_log     /var/log/nginx/redmine.log;

  location / {
    try_files $uri @ruby;
  }

  location @ruby {
    #proxy_set_header X-Forwarded-Proto https; # unquote if you are in HTTPs
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_read_timeout 300;
    proxy_pass http://puma_redmine;
  }
}

Firewall konfigurieren

ufw enable
ufw allow ssh
ufw allow http
ufw allow https

SSL mit Let's Encrypt

apt install python-certbot-nginx -t stretch-backports
certbot --authenticator nginx --installer nginx

Für ein automatisches Erneuern der Zertifikate kann man einen CronJob setzen.

crontab -e

und dort eintragen

0 5 * * * certbot renew -q --cert-name domain.de --renew-hook "systemctl restart nginx.service"