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.
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?
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! 🙂