Dieser Blog ist mein persönlicher Blick auf die Welt der Programmierung – mit Themen zu #Webentwicklung und #Gamedev. Hier gibt's Wissen ohne Werbung – kompakt und in Textform. Für alle, die lieber lesen statt vorspulen.

Appwrite Update mit Portainer

Am 31. Januar 2025 / von Nick / in Allgemein / 2 Min. Lesedauer

Das Update einer Appwrite-Instanz, die über Portainer als Stack verwaltet wird, erfordert einige manuelle Schritte, um sicherzustellen, dass alle Einstellungen und Daten erhalten bleiben. In dieser Anleitung erfährst du, wie du deine Appwrite-Installation sicher auf eine neue Version aktualisierst.

Natürlich solltest du vor jedem Update ein Backup machen. Der GitHub User Meldrion hat dazu ein tolles Snippet geschrieben.

  • Erstelle auf dem Server einen Ordner “appwrite-update”
  • Darin erstellst du einen weiteren Ordner namens “appwrite”
  • Unter appwrite-update/appwrite erstellst du eine docker-compose.yml und eine .env
  • Kopiere die Inhalte aus dem Stack in die docker-compose.yml und die ENV Variablen in die .env
  • Fahre sämtliche Container aus dem Stack herunter
  • Im Verzeichnis appwrite-update führst du dann den Update Befehl aus. Bspw. auf 1.6.0
docker run -it --rm \\
    --volume /var/run/docker.sock:/var/run/docker.sock \\
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \\
    --entrypoint="install" \\
    appwrite/appwrite:1.6.0
  • Überprüfe danach die docker-compose.yml und die .env. Sehr wahrscheinlich wurden dabei die MariaDB Credentials überschrieben, ggf. auch das allgemeine Secret. Überschreibe diese wieder mit den Daten aus Portainer.
  • Wechsle nun in das appwrite-update/appwrite Verzeichnis und führe, falls nötig, den Migrations Befehl aus
    • Informationen zum Migrations-Befehl findest du in der Appwrite Doku
docker compose exec appwrite migrate
  • Anschließend kannst du die finalen Daten aus der docker-compose.yml und der .env zurück in deinen Portainer Stack übertragen und den Stack neu deployen
  • Dann nur noch die Container des Stacks wieder starten und fertig!