Pixelfed in Docker-Umgebung

Pixelfed.de läuft seit Beginn in Docker-Containern, jedoch ist das Setup dafür über die Zeit gewachsen und etwas unübersichtlich geworden.

Ich bin jetzt endlich mal dazu gekommen das nochmal sauber zu machen, heraus gekommen ist ein – wie ich finde – recht simples Setup das ich auch mal guten Gewissens veröffentlichen kann.

Um ein eigenes Pixelfed in Docker zu betreiben brauchst Du nur folgende docker-compose.yml, die angepasste env-Datei und ein Frontend-Proxy.

docker-compose.yml

---
version: '2.1'

services:
  app:
    image: zknt/pixelfed
    restart: unless-stopped
    env_file:
      - ./env
    volumes:
      - "app-storage:/var/www/storage"
      - "./env:/var/www/.env"
    depends_on:
      - db
      - redis
    # Damit läuft Pixelfed auf Port 8080 und unterstützt kein SSL.
    # Für eine echte Instant ist ein Frontend-Proxy notwendig!
    ports:
      - "8080:80"

  worker:
    image: zknt/pixelfed
    restart: unless-stopped
    env_file:
      - ./env
    volumes:
      - "app-storage:/var/www/storage"
      - "./env:/var/www/.env"
    entrypoint: /worker-entrypoint.sh
    depends_on:
      - db
      - redis
      - app
    healthcheck:
      test: php artisan horizon:status | grep running
      interval: 60s
      timeout: 5s
      retries: 1

  db:
    image: zknt/mariadb
    restart: unless-stopped
    env_file:
      - ./env
    environment:
      - MYSQL_ROOT_PASSWORD=changeMeForProduction
    volumes:
      - "db-data:/var/lib/mysql"

  redis:
    image: zknt/redis
    restart: unless-stopped
    volumes:
      - "redis-data:/data"

volumes:
  db-data:
  redis-data:
  app-storage:

env

Als env-Datei kommt .env.docker aus dem Pixelfed-Repo zum Einsatz. Einfach als env neben der docker-compose.yml speichern und ausfüllen.

Wichtig dabei: APP_KEY einfach leer lassen, der Key wird beim ersten Start automatisch erzeugt. DB_HOST muss auf "db" gesetzt werden, und vor dem ersten Start in DB_PASSWORD ein zufällig erzeugtes Passwort eintragen.

Soll die Instanz föderieren (und hat ein funktionierendes SSL/HTTPS-Setup) sind die Variablem im Block ab ACTIVITY_PUB anzupassen.

Erster Start

Beim ersten Start muss die Datenbank initialisiert werden, die einzelnen Komponenten warten automatisch aufeinander. Starten mit docker-compose up -d. Es dauert allerdings einige Sekunden bis alles gestartet ist. Mit docker-compose logs -f app kannst Du den Fortschritt beobachten.

Sobald alles durch, in der Instanz übers Web den eigenen Account anlegen, und per docker-compose exec app php artisan user:admin DEINNUTZERNAME Admin-Rechte vergeben.

Zum Schluß

Vergesst nicht ein Backup für die Volumes einzurichten, das E-Mail-Setup vorzunehmen, und den Frontend-Proxy für SSL einzurichten. Ich nehme dafür Traefik.

Und noch ein letzter Hinweis auf den Weg:

Hilfe bei Problemen gibt es auf Mastodon (der offizielle Account ist @pixelfed) oder im IRC auf Freenode, der Channel heisst #pixelfed.

2 Antworten zu “Pixelfed in Docker-Umgebung”

  1. Vielen Dank für die deutsche Anleitung. Leider tritt bei mir bei docker-compose up -d der Fehler auf:

    ERROR: Service „db“ uses an undefined network „back“

    Scheint so, als wären die Networks in der docker-compose.yml nicht definiert. Hast du eine Idee wie ich weiterkomme?

    1. Oh, mein Fehler. Die `networks`-Definitionen im docker-compose.yml sind Überbleibsel meiner traefik-Konfiguration, die hier aber nicht eingebaut ist.
      Es müssen einfach alle networks-Blöcke weg, ich hab den Artikel angepasst. Danke für den Hinweis! 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.