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
0 5 * * * certbot renew -q --cert-name domain.de --renew-hook "systemctl restart nginx.service"