Pixelfed
Die Alternative zu Instagram.
git clone https://github.com/pixelfed/pixelfed
Das Docker Image erstellen
cd /opt/pixelfed
docker build . -t pixelfed:{Current Date} -f contrib/docker/Dockerfile.apache
ersetze {Current Date}
mit dem aktuellen datum: Beispielsweise:
<code>docker build . -t pixelfed:20210125 -f contrib/docker/Dockerfile.apache</code>
Damit erhalten die Images Tags damit diese später besser identifiziert werden können.
docker-compose.yml erstellen
Folgende Datei als docker-compose.yml Datei abspeichern. Alternativ ist ein abspeichern in docker-compose.override.yml möglich. Dies verhindert ein reset der Einstellungen, wenn mit git pull die neuen Dateien heruntergeladen werden. Trotzdem müssen beide Dateien vorhanden sein. (docker-compose.yml und docker-compose.override.yml)
docker-compose.yml
version: '3'
services:
pixelfed:
image: pixelfed:20210125 #replace with the tag you just made
restart: unless-stopped
ports:
- "8080:80" #80 is the port inside the container, 8080 is the port outside
env_file:
- ./.env
volumes:
-./pixelfed-storage:/var/www/storage/;
- ./app-bootstrap:/var/www/bootstrap/;
- ./.env:/var/www/.env
networks:
- web
- pixelfed
db:
image: mysql:8.0 # You can probably also get it to work with mariadb
restart: unless-stopped
networks:
- pixelfed
command: --default-authentication-plugin=mysql_native_password
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_DATABASE=pixelfed
- MYSQL_USER=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_RANDOM_ROOT_PASSWORD=true
worker:
image: pixelfed:20210125 #replace with the tag you just made
restart: unless-stopped
env_file:
- ./.env
volumes:
- "pixelfed-storage:/var/www/storage"
- "app-bootstrap:/var/www/bootstrap"
networks:
- web # Required for ActivityPub
- pixelfed
command: gosu www-data php artisan horizon
redis:
image: redis:5-alpine
restart: unless-stopped
volumes:
- "redis-data:/data"
networks:
- pixelfed
volumes:
redis-data:
app-bootstrap:
pixelfed-storage:
db-data:
networks:
pixelfed:
internal: true
web:
external: true</code></pre></div>
.env Datei erstellen für die Einstellungen der Instanz
Nun die nötige .env Datei erstellen. Entsprechende Einträge ändern. Diese habe Markiert, den Rest so lassen wie er ist.
.env
APP_NAME="PixelDroid testing instance"
APP_ENV=production
APP_KEY= #leer lassen, wird später erstellt!
APP_DEBUG=false
#change this and the following 3 to your own domain
APP_URL=https://testing.pixeldroid.org #durch eigene Domain ersetzen
APP_DOMAIN="testing.pixeldroid.org" #durch eigene Domain ersetzen
ADMIN_DOMAIN="testing.pixeldroid.org" #durch eigene Domain ersetzen
SESSION_DOMAIN="testing.pixeldroid.org" #durch eigene Domain ersetzen
TRUST_PROXIES="*"
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=pixelfed
DB_USERNAME=pixelfed
DB_PASSWORD= CHANGE_ME #passwort generieren und einfügen
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_SCHEME=tcp
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="pixelfed@example.com"
MAIL_FROM_NAME="Pixelfed"
OPEN_REGISTRATION=true
ENFORCE_EMAIL_VERIFICATION=true
PF_MAX_USERS=1000
MAX_PHOTO_SIZE=64000
MAX_CAPTION_LENGTH=150
MAX_ALBUM_LENGTH=4
MAX_ACCOUNT_SIZE=10000000
IMAGE_QUALITY=100
ACTIVITY_PUB=true
AP_REMOTE_FOLLOW=true
AP_INBOX=true
PF_COSTAR_ENABLED=false
HORIZON_EMBED=true
OAUTH_ENABLED=true
Ordnerstruktur
Nun sollte die Ordnerstruktur so aussehen:
pixelfed_docker_compose
pixelfed/
.env
docker-compose.yml
Erstmaliges starten der Container
Nun wird das Netzwerk erstellt,welches in der docker-compose.yml
eingerichtet wurde:
docker network create web
docker-compose up -d
ausführen. Dadurch werden die Container so gestartet, wie sie in der Docker-Kompositionsdatei konfiguriert wurden.
Dann werden wir den Schlüssel generieren, den wir in der .env
Datei benötigen:
docker-compose exec app php artisan key:generate
Ausgabe mit ja beantworten.
Nun überprüfen, ob ein Schlüssel in der .env-Datei generiert wurde.
Starten wir nun den Container neu, mit dem wir gerade die .env
Datei, Stellen Sie sicher, dass die neue .env
Datei is taken into account (config:cache
) and do the database migration.
docker-compose restart app
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan migrate
Wenn eine Abfrage erscheint, diese mit „ja“ beantworten.
Nginx einrichten
Nun gilt es Nginx einzurichten, damit die Webseite erreichbar ist. Zuerst im /etc/nginx/sites-available
eine Datei erstellen pixelfed.conf. Dort folgenden Inhalt einfügen und ggf. anpassen.
server {
listen 80;
listen [::]:80;
server_name pixelfed.yourdomain.tld;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
server_name pixelfed.yourdomain.tld;
listen [::]:443 ssl;
listen 443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/pixelfed.yourdomain.tld/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/pixelfed.yourdomain.tld/privkey.pem; # managed by Certbot
client_max_body_size 100M;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_x_forwarded_host;
proxy_set_header X-Forwarded-Port $http_x_forwarded_port;
proxy_redirect off;
proxy_pass http://127.0.0.1:8080;
}
}
Danach ein ln-s /etc/nginx/sites-available/pixelfed.conf /etc/nginx/sites-enabled/pixelfed.conf
Nun muss das Zertifikat erstellt werden für diese neue Domain, damit die SSL Verschlüsselung funktioniert.
sudo certbot -d pixelfed.yourdomain.tld
Danach müssten die passenden Zertifikate in /etc/letsencrypt/live/pixelfed.yourdomain.tld/ liegen.
Vor dem Start des Containers und einem Neustart von Nginx sollte drauf geachtet werden, das der Wert client_max_body_size größer ist als der Wert, der in der .env Datei angegeben ist.
Danach Nginx neu starten (sudo systemctl restart nginx), oder (sudo nginx -s reload).
Ersteinrichtung beenden
Jetzt sollten man in der Lage sein, über die eingerichtete Domain auf Pixelfed zugreifen zu können. Überprüft ob alles in Ordnung ist, wenn ja, muss der erste Nutzer erstellt werden. Dieser wird dann zum Administrator ernannt.
Dazu in den Ordner wechseln, in dem sich die Datei docker-compose befindet, und folgendes ausführen:
docker-compose exec app php artisan user:create
Die Antworten folgendermaßen beantworten:
Make this user an admin? (yes/no) [no]:
> yes
Manually verify email address? (yes/no) [no]:
> yes
Are you sure you want to create this user? (yes/no) [no]:
> yes
Oauth und API Zugriff einrichten
Damit der API Zugriff überhaupt funktioniert, muss erstens OAUTH_ENABLED=true
in der .env eingestellt sein, das ist bereits geschehen. Nun sind noch folgende Schritte notwendig.
docker-compose exec app php artisan passport:keys
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan route:cache
docker-compose exec app php artisan passport:client --personal
Pixelfed Instanz aktualisieren
Hier die nötigen Befehle um Pixelfed zu akualisieren.
cd /opt/pixelfed_source
git checkout dev
git pull origin dev
git checkout dev
docker build . -t pixelfed:todaysdate -f contrib/docker/Dockerfile.apache
Um die innerhalb von docker-compose verwendeten Images zu aktualisieren, ersetze die Versionsnummer mit der aktuellen verfügbaren, danach diese herunterladen, Beispiel (docker pull mysql:8.0 redis:5-alpine
)
Normalerweise würde man hier docker-compose pull verwenden, um alle zu erhalten, aber da ein angepasstes Image verwendet wird und anders getaggt wird, klappt das auf dem einfachen Wege nicht.
Als Nächstes wollen wir das neue Image verwenden: Bearbeiten Sie einfach die Datei docker-compose.yml und ersetzen Sie das alte Image durch das neue, das wir gerade erstellt haben. Falls eine docker-compose.override.yml verwendet wird, diese abändern.
Lassen Sie uns nun alle unsere Container löschen und neu erstellen, sodass wir die neuesten Versionen verwenden, die wir gerade erstellt haben. Dabei wird keines der benannten Volumes gelöscht, in denen sich die Daten befinden (denken Sie daran, dass die Container bei Docker keine Daten speichern, sondern nur die Anwendung, sodass beim Löschen der Container keine Daten gelöscht werden)
docker-compose down
docker-compose up -d
Pixelfed ist jetzt auf dem neuesten Stand, aber wir müssen noch von der vorherigen Version zu dieser migrieren, dazu immer folgendes ausführen.
docker-compose exec app php artisan migrate
Je nachdem von welcher Pixelfed Version man ein Update macht, müssen Sie weitere Befehle ausführt werden. In den Versionshinweisen findet man dazu mehr Informationen.
docker-compose exec app composer install
docker-compose exec app php artisan migrate --force
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan route:cache
docker-compose exec app php artisan instance:actor