Redmine einfach mit Docker-Images installieren

English Deutsch

Hinweis: Siehe auch diesen Folgebeitrag zur Verwendung von Custom Themes in diesem Setup und diesen Folgebeitrag zum Backup von Redmine mit diesem Setup.

Dieses Tutorial zeigt dir Schritt für Schritt die einfachste Methode, eine frische Redmine-Installation einzurichten, die ich bisher gefunden habe. Die Befehle wurden auf Ubuntu 18.04 getestet, sollten aber mit minimalen Änderungen auch auf anderen DEB-basierten Distributionen funktionieren

Docker & Docker-Compose installieren

Bitte folge der Anleitung in Docker und docker-compose unter Ubuntu in 30 Sekunden installieren

Verzeichnis & docker-compose-Konfiguration erstellen

Wir installieren Redmine in /var/lib/redmine, welches die Datenverzeichnisse und das docker-compose-Skript hostet.

create_redmine_dirs.sh
# Verzeichnisse erstellen
sudo mkdir /var/lib/redmine
sudo mkdir -p /var/lib/redmine/redmine_data /var/lib/redmine/mariadb_data
# Korrekte Berechtigungen für die Verzeichnisse setzen
sudo chown -R $USER:docker /var/lib/redmine
sudo chown -R 1001:1001 /var/lib/redmine/redmine_data /var/lib/redmine/mariadb_data

Als Nächstes erstellen wir /var/lib/redmine/docker-compose.yml.

Es gibt einige Dinge, die du hier ändern musst:

Beachte, dass du REDMINE_PASSWORD nicht ändern musst — beim ersten Login wird Redmine dich ohnehin zwingen, das Passwort zu ändern.

docker-compose.redmine.yml
services:
  mariadb:
    image: 'bitnami/mariadb:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - '/var/lib/redmine/mariadb_data:/bitnami'
  redmine:
    image: 'bitnami/redmine:latest'
    environment:
      - REDMINE_USERNAME=admin
      - REDMINE_PASSWORD=redmineadmin
      - [email protected]
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=25
      - [email protected]
      - SMTP_PASSWORD=yourGmailPassword
    ports:
      - '3718:3000'
    volumes:
      - '/var/lib/redmine/redmine_data:/bitnami'
    depends_on:
      - mariadb

systemd-Service einrichten

Als Nächstes konfigurieren wir den systemd-Service in /etc/systemd/system/redmine.service.

Setze User=... auf deinen aktuellen Benutzer im [Service]-Abschnitt.

redmine.service
[Unit]
Description=Redmine
Requires=docker.service
After=docker.service

[Service]
Restart=always
User=uli
Group=docker
# Container herunterfahren (falls laufend) wenn Unit gestoppt wird
ExecStartPre=/usr/local/bin/docker-compose -f /var/lib/redmine/docker-compose.yml down -v
; Container starten wenn Unit gestartet wird
ExecStart=/usr/local/bin/docker-compose -f /var/lib/redmine/docker-compose.yml up
; Container stoppen wenn Unit gestoppt wird
ExecStop=/usr/local/bin/docker-compose -f /var/lib/redmine/docker-compose.yml down -v

[Install]
WantedBy=multi-user.target

Nach dem Erstellen der Datei können wir den redmine-Service aktivieren und starten:

enable_start_redmine.sh
sudo systemctl enable redmine
sudo systemctl start redmine

Die Ausgabe von sudo systemctl start redmine sollte leer sein. Falls sie es nicht ist:

systemd_start_error.txt
Job for redmine.service failed because the control process exited with error code.
See "systemctl status redmine.service" and "journalctl -xe" for details.

debuge das Problem mit journalctl -xe und journalctl -e

Der erste Start dauert normalerweise etwa 3 Minuten, also hol dir eine Tasse Kaffee.

Nun kannst du prüfen, ob Redmine läuft mit

check_redmine_wget.sh
wget -qO- http://localhost:3718/

(falls du die Port-Konfiguration zuvor geändert hast, musst du deinen Custom-Port in der URL verwenden).

Wenn es funktioniert hat, wird eine große HTML-Ausgabe angezeigt, die endet mit

redmine_index_sample.html
[...]
<div id="footer">
  <div class="bgl"><div class="bgr">
    Powered by <a href="https://www.redmine.org/">Redmine</a> &copy; 2006-2018 Jean-Philippe Lang
  </div></div>
</div>
</div>
</div>

</body>
</html>

Falls die Ausgabe leer ist, versuche wget -O- http://localhost:3718/ um die Fehlermeldung zu sehen

nginx-Reverse-Proxy einrichten (optional aber empfohlen)

Wir verwenden nginx, um die Anfragen von einer bestimmten Domain weiterzuleiten (Apache zu verwenden ist, falls du es bereits nutzt, auch möglich, aber es würde den Rahmen dieses Tutorials sprengen, dies zu beschreiben). Installiere es mit

install_nginx.sh
sudo apt -y install nginx

Zuerst benötigst du einen Domainnamen mit konfiguriertem DNS. Für dieses Beispiel nehmen wir an, dass dein Domainname redmine.techoverflow.net ist! Du musst ihn durch deinen Domainnamen ersetzen!

Zuerst erstellen wir die Konfigurationsdatei in /etc/nginx/sites-enabled/redmine.conf. Ersetze redmine.techoverflow.net durch deinen Domainnamen! Wenn du einen anderen Port als 3718 verwendest, ersetze diesen ebenfalls.

redmine.nginx.conf
server {
  listen 80;
  server_name redmine.techoverflow.net;

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

  location / {
    proxy_pass http://127.0.0.1:3718; # docker-compose forwarded
    proxy_read_timeout 3600s;
    proxy_http_version 1.1;
  }

}

Führe nun sudo nginx -t aus, um zu testen, ob Fehler in der Konfigurationsdatei vorhanden sind. Wenn alles in Ordnung ist, siehst du

nginx_test_output.txt
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Sobald du alle Fehler behoben hast, falls vorhanden, führe sudo service nginx reload aus, um die Konfiguration anzuwenden.

Teste das Setup, indem du deinen Domainnamen im Browser aufrufst. Du solltest die Redmine-Oberfläche sehen:

Redmine-Weboberfläche nach der Installation

Den nginx-Reverse-Proxy mit Let’s Encrypt absichern

Zuerst müssen wir certbot und das certbot nginx-Plugin installieren, um das Zertifikat in nginx zu erstellen & zu installieren:

install_certbot.sh
sudo apt -y install python3-certbot python3-certbot-nginx

Glücklicherweise automatisiert certbot den Großteil des Prozesses der Installation & Konfiguration von SSL und dem Zertifikat. Führe aus

certbot_nginx.sh
sudo certbot --nginx

Es wird dich bitten, deine E-Mail-Adresse einzugeben und den Nutzungsbedingungen zuzustimmen sowie ob du den EFF-Newsletter erhalten möchtest.

Danach wird certbot dich bitten, den korrekten Domainnamen auszuwählen:

certbot_select_names.txt
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: redmine.techoverflow.net
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

In diesem Fall gibt es nur einen Domainnamen (es wird mehr geben, wenn du mehr Domains in nginx aktiv hast!).

Gib daher 1 ein und drücke Enter. certbot wird nun das Zertifikat generieren. Bei Erfolg siehst du

certbot_deploy_output.txt
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/redmine.techoverflow.net.conf

Nun wird dich gefragt, ob alle Anfragen automatisch auf HTTPS umgeleitet werden sollen:

certbot_redirect_choice.txt
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Wähle hier Redirect: Gib 2 ein und drücke Enter. Nun kannst du dich bei Redmine einloggen und die Installation abschließen.

Du musst das Zertifikat alle 3 Monate erneuern, damit es gültig bleibt, und danach sudo service nginx reload ausführen, um das neue Zertifikat zu verwenden. Wenn du dies versäumst, sehen Benutzer Fehlermeldungen über abgelaufene Zertifikate und können nicht leicht auf Redmine zugreifen! Siehe diesen Beitrag für Details, wie man diesen Prozess größtenteils automatisiert!

Redmine einrichten

Gehe zu deinem Domainnamen (wenn du den Anweisungen oben gefolgt bist, sollte dich automatisch auf HTTPS weitergeleitet werden). Klicke oben rechts auf Login und melde dich mit dem Benutzernamen admin und dem Standardpasswort redmineadmin an. Beim ersten Login wirst du aufgefordert, das Passwort in ein neues — und sichereres — Passwort zu ändern.

Ich werde nicht im Detail beschreiben, wie man Redmine für dein Projekt einrichtet. Es gibt jedoch zwei Dinge, die du sofort nach dem ersten Login erledigen solltest:

  1. Konfiguriere den korrekten Domainnamen: Gehe zu Administration -> Settings und setze Host name and path auf deinen Domainnamen, z.B. redmine.techoverflow.net. Setze Protocol auf HTTPS. Du kannst auch einen Custom-Namen für deine Redmine-Installation unter Application Title festlegen
  2. Immer noch unter Administration -> Settings, gehe zum Tab Email Notifications, setze eine geeignete Absender-E-Mail-Adresse unter Emission email address (normalerweise würdest du hier [email protected] verwenden, aber bei einigen SMTP-Anbietern wie GMail möchtest du vielleicht deinen SMTP-Benutzernamen verwenden)
  3. Scrolle zum Ende der Email Notifications-Seite und klicke auf Send a test email, was eine Test-E-Mail an die E-Mail-Adresse des aktuellen Redmine-Benutzers sendet. Sofern du sie nicht geändert hast, ist die Standardadresse die in REDMINE_EMAIL in /var/lib/redmine/docker-compose.yml konfigurierte.

Falls die E-Mail nicht funktioniert, ändere SMTP_...=... in /var/lib/redmine/docker-compose.yml, aber du musst sie auch in /var/lib/redmine/redmine_data/redmine/conf/configuration.yml ändern! Nach den Änderungen starte Redmine neu mit

restart_redmine.sh
sudo systemctl restart redmine

was die neue Konfiguration aus der Konfigurationsdatei verwendet.

Zugriff auf den weitergeleiteten Port mit ufw blockieren (optional)

ufw ist eine einfache Firewall für Ubuntu. Verwende sudo apt install ufw zur Installation und sudo ufw enable zur Aktivierung. Die Standardkonfiguration erlaubt SSH, blockiert aber andere Ports, einschließlich Port 3718 oder einen anderen Custom-Port, den du möglicherweise verwendet hast.

Um sie zu aktivieren, verwende

ufw_enable_and_allow.sh
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

Denk daran, auch alle Ports hinzuzufügen, die du offen haben möchtest. Siehe die ufw-Dokumentation für weitere Informationen.


Check out similar posts by category: Container, Docker, Linux, Project Management