Wie man ein vernünftiges Upgrade von Mastodon dockerized macht, habe ich lange Zeit nicht wirklich verstanden. Wie es nun richtig geht, möchte ich an dem Beispiel meiner Instanz kurz zeigen.
Vorbereitung
Zu aller erst gehe ich in das Verzeichnis meiner Mastodon-Installation. Dort rufe ich die YAML-Datei docker-compose.yml auf.
1 |
# nano docker-compose.yml |
Diese beinhaltet welche Container benötigt werden und wie diese miteinander in Verbindung stehen. Damit beim Start der Docker-Installation nicht alle Container neu gebaut werden müssen, kommentiere ich build: in web, steaming und sidekiq ein. Weiterhin füge ich in der Zeile image: in den zuvor erwähnten drei Sektionen hinter tootsuite/mastodon die gewünschte Version (:v3.2.2) ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
version: '3' services: db: restart: always image: postgres:9.6-alpine shm_size: 256mb networks: - internal_network healthcheck: test: ["CMD", "pg_isready", "-U", "postgres"] volumes: - ./postgres:/var/lib/postgresql/data redis: restart: always image: redis:5.0-alpine networks: - internal_network healthcheck: test: ["CMD", "redis-cli", "ping"] volumes: - ./redis:/data # es: # restart: always # image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3 # environment: # - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # networks: # - internal_network # healthcheck: # test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] # volumes: # - ./elasticsearch:/usr/share/elasticsearch/data web: # build: . image: tootsuite/mastodon:v3.2.2 restart: always env_file: .env.production command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" networks: - external_network - internal_network healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:3000/health || exit 1"] ports: - "127.0.0.1:3000:3000" depends_on: - db - redis # - es volumes: - ./public/system:/mastodon/public/system streaming: # build: . image: tootsuite/mastodon:v3.2.2 restart: always env_file: .env.production command: node ./streaming networks: - external_network - internal_network healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1"] ports: - "127.0.0.1:4000:4000" depends_on: - db - redis sidekiq: # build: . image: tootsuite/mastodon:v3.2.2 restart: always env_file: .env.production command: bundle exec sidekiq depends_on: - db - redis networks: - external_network - internal_network volumes: - ./public/system:/mastodon/public/system ## Uncomment to enable federation with tor instances along with adding the following ENV variables ## http_proxy=http://privoxy:8118 ## ALLOW_ACCESS_TO_HIDDEN_SERVICE=true # tor: # image: sirboops/tor # networks: # - external_network # - internal_network # # privoxy: # image: sirboops/privoxy # volumes: # - ./priv-config:/opt/config # networks: # - external_network # - internal_network networks: external_network: internal_network: internal: true |
Neue Container bauen
Über den Befehl
1 |
# docker-compose build |
werden nun die neuen erforderlichen Container zur aktuellen Version (v3.2.2) gebaut.
Start der neuen Mastodon-Version
Mit
1 |
# docker-compose up -d |
werden nun alle Container in das System geladen und die Docker-Installation neu gestartet.
Datenbank anpassen
Abschließend wird die Datenbank an die Mastodon-Version angepasst.
1 |
# docker-compose run --rm web rails db:migrate |
Dies ist zwingend erforderlich, da Mastodon sonst mit Fehlern läuft.
Docker aufräumen
Zum Schluss wird Docker aufgeräumt, um ungenutzte Docker-Images und -Container loszuwerden. Das ist sehr wichtig, da sonst die Images und Container alter Versionen weiter vorgehalten werden und so unnötig große Mengen an Speicher blockieren und nicht freigegeben werden können.
1 |
# docker system prune -a |
Viel Spaß!