Redmine Server nach Docker

Diese Anleitung befasst sich mit der Migration (m)eines Redmine Server nach Docker. Neben der eigentlichen Migration führe ich auch noch ein Upgrade von V4 auf V5 durch. Wenn Du Dich nur für die Installation von Redmine in docker interessierst, habe ich eine eigene Anleitung geschrieben.

Nach einer umfassenden Internet-Recherche habe ich das Projekt Redmine Server nach Redmine Docker und Upgrade auf Redmine 5.0.x selbst in Angriff genommen. Diese Anleitung ist sicher nicht die einzige oder beste Lösung, wenngleich ich diese mit meinem Live-System erfolgreich vollzogen habe und somit sagen kann, dass sie funktioniert.

Die Befehle, die die alte Installation betreffen, beginnen im Codefenster mit old:/>. Die Befehle, die für die Docker-Installation vorgesehen sind, starten mit new:/>.

Hinweis: Während der gesamten Migration darf es keine Schreibzugriffe auf die Instanz geben, da es sonst zu”Störungen in der Macht” kommen kann.

Vorbereitung des Redmine Server

Vor der “Migration” bringe ich die bestehende Redmine Instanz auf den neuesten Stand. Hinweise, wie dies zügig durchführt wird, gibt es im Wiki von Redmine, allerdings funktionierte das Upgrade nur innerhalb einer Major Version. Hinweise zum Upgrade von Major nach Major, habe ich nicht gefunden und auch nur einige wenige Beiträge auf Stackoverflow & Co.

Backup der Datenbank mit mysqldump

Nach dem Upgrade erstelle ich ein neues Datenbank-Dump.

Hinweis: Das Dumpfile, das ich während des Upgrades erstellt habe bringt nichts, denn die Datenbank wird während des Upgrades durch bundle aktualisiert werden.

old:/> bundle exec rake db:migrate RAILS_ENV=production 
Zsh

Dass relevante Dump muss ich daher erneut auf dem alten Server mit mysqldump erstellen.

old:/> mysqldump -u<redmine-db-user> -P -h host-or-IP redmine_db \
       > redmine_backup-to-import.sql
Zsh

Vorbereitung des neuen Systems

Zur Übertragung des erstellten Dumpfiles gibt es etliche Tools (z.B. scp) und auch viele Wege, wie zum Beispiel: Du kannst die Datei pushen, also vom alten zum neuen Server schieben, oder die Datei pullen, also vom neuen Server aus, vom Alten holen.

Push

old:/> scp dumpfile.sql remote-user@ip-new-server:/remote/dir/
Zsh

Pull

new:/> scp remote-user@ip-old-server:/remote/dir/dumpfile.sql /local/dir/
Zsh

Eine ausgezeichnete Referenz gibt es unter [1].

Egal für welche Variante Du dich entscheidest, das erstellte “old:/>-Dumpfile” wird in die funktionierende Installation von Redmine auf dem new:/> eingespielt.

Bevor das passiert, schreibe ich erneut ein Dump, denn auch hier gilt die Administratoren-Regel: “No Backup, no Mercy”.

Logging

Willst Du den Updateprozess im Nachgang beobachten, dann öffne Dir in einem Extra-Terminal, oder in screen das Logging.

new:/> docker logs redmine-app --follow
Zsh

Datenbank

Das Upgrade von Redmine finder zum großen Teil in der Datenbank statt. Die Anwendung sind neue Dateien, die über die entsprechenden Mechanismen ins System gebracht werden. Dabei werden alte Dateien durch neue ersetzt.

Backup der Datenbank der Docker Installation

Um aus den Container das Dumpfile zu erstellen, wird der mysqldump-Befehl an docker, zur Ausführung übergeben: docker exec. Idealerweise befindest Du Dich in dem Verzeichnis, in dem Du die Sicherung ablegen willst.

new:/> mkdir /opt/containers/redmine/daten/arch
new:/> cd /opt/containers/redmine/daten/arch
Zsh

Um herauszufinden, wie der Datenbank-Container heißt hilft das Kommando: docker ps. In der Standard Docker-Redmine-Installation heißt er redmine-db.

new:/> docker exec redmine-db /usr/bin/mysqldump -u redmine \
       --password=tollesSicheresPasswort123 redmine > redmine.sql
Zsh

Einspielen der alten Datenbank

Das Redmine Upgrade nach docker beginne ich also wie ein Restore, indem ich die alte Datenbank-Version einspiele, was die Lauffähigkeit des Docker-Containers auf new:/> zunächst torpediert. Im zweiten Schritt aktualisiere ich wieder mit docker exec die Datenbank auf die neueste Version.

Ausgangspunkt des DB-Imports ist das Verzeichnis mit dem Dumpfile (.sql).

new:/> docker exec -i redmine-db /usr/bin/mysql -u redmine \
       --password=tollesSicheresPasswort123 redmine \
       < redmine_backup-to-import.sql
Zsh

Hier musst Du darauf achten, welches Dumpfile Du zurückspielst, weshalb ich dieses auch redmine_backup-to-import.sql genannt hatte (siehe oben).

Datenbank Upgrade in der App

Mit dem Datenbank-Update schließe ich den programmatischen Teil des Redmine Upgrades, hin zu docker ab.

new:/> docker exec redmine-app bundle exec rake db:migrate \
       RAILS_ENV=production
Zsh

Dateien übertragen

Zu guter Letzt migriere ich noch die Dateien, mit der Hilfe von tar

XKCD tar

In der alten Instanz wird, unterhalb des zusammenzufassenden Verzeichnisses, tar ausgeführt.

old:/> cd /path/to/redmine/
old:/> tar -cf files.tar files/
Zsh

Das komplette Verzeichnis wird mit einem beliebigen geeigneten Tool auf den neuen Server kopiert, z.B. scp.

old:/> scp files.tar -i /path/to/transfer-key \
       root@<IP-2-new-server>:/opt/containers/redmine/daten/
Zsh

Entpacken geht dann auch ganz einfach wieder mit tar.

new-server:/> docker compose /opt/containers/redmine/docker-compose.yml
              down
new-server:/> cd /opt/containers/redmine/daten/
new-server:/> mv files files_backup
new-server:/> tar -xvf files.tar
Zsh

Zum Anstarten des Containers lässt man dann den detach-Switch -d erstmal weg. Das hilf bei der Behebung von Fehlern doch enorm.

new-server:/> docker compose /opt/containers/redmine/docker-compose.yml up
Zsh

Wenn dann alles läuft nach dem up ein -d und bei Redmine angemeldet. Im Idealfall zeigt die Seite admin/info statt

4.0.9.stable.22174
Zsh

die neue Version an

5.0.5.stable
Zsh

Zusammenfassung

Start » Redmine Server nach Docker

Das Ziel der Anleitung haben wir somit erreicht: Redmine Server nach Docker, mit einem Upgrade des Redmine Major-Releases von 4.0.X nach 5.0.X.

Als Referenz kann mit wenigen Anpassungen auch nur ein Teil der Anleitung verwendet werden, z.B. wenn nur ein Redmine Upgrade gemacht wird, oder nur eine Server nach docker Migration.

Quellen

linuxize.com

Ein Gedanke zu „Redmine Server nach Docker

Schreibe einen Kommentar