Sicheres Upgrade Mastodon Docker

0
15234
Ship Cargo Vessel Container  - papazachariasa / Pixabay
papazachariasa / Pixabay

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 allererst gehe ich in das Verzeichnis meiner Mastodon-Installation. Dort rufe ich die YAML-Datei docker-compose.yml auf.

# 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.

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

# docker-compose build

werden nun die neuen erforderlichen Container zur aktuellen Version (v3.2.2) gebaut.

Start der neuen Mastodon-Version

Mit

# 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.

# 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.

# docker system prune -a

Viel Spaß!

Kommentieren Sie den Artikel

Bitte bestätige diesen Kommentar!
Bitte den Namen hier eingeben

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.