geschätzte Lesezeit 7 Minuten.

2.5
(4)

In der heutigen Anleitung geht es darum, wie man eine Pixelfed Instanz selbst auf einem Linux Server installiert. Pixelfed ist eine Open Source Alternative zu Instagram und ähnlichem.

Was muss bereits installiert sein?

Diese drei Anwendungen sollten bereits auf dem Server vorhanden sein, ansonsten müssten diese installiert werden.

  • docker und docker-compose
  • git
sudo apt update && sudo apt upgrade 
sudo apt install docker-ce docker-compose git

Erste Schritte

Die Dateien von aus dem Repository bei Github herunterladen, dabei wird der Pixelfed Ordner erstellt und alle benötigten Dateien sind dann vorhanden. So gehts:

cd /opt/

Nun Pixelfed in diesem Ordner entpacken:


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:

docker build . -t pixelfed:20210125 -f contrib/docker/Dockerfile.apache

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)

version: '3'
services:
  app:
    image: pixelfed:20210125  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 # we'll be creating a .env file in a bit
    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  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: # I'm using docker volumes here, if you want things to be stored elswhere you can change that here
  redis-data:
  app-bootstrap:
  pixelfed-storage:
  db-data:
networks:
  pixelfed:
    internal: true
  web:
    external: true

.

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

APP_NAME="PixelDroid testing instance"
APP_ENV=production
APP_KEY=  lassen, wird später erstellt!
APP_DEBUG=false
 this and the following 3 to your own domain
APP_URL=https://testing.pixeldroid.org  eigene Domain ersetzen
APP_DOMAIN="testing.pixeldroid.org"  eigene Domain ersetzen
ADMIN_DOMAIN="testing.pixeldroid.org"  eigene Domain ersetzen
SESSION_DOMAIN="testing.pixeldroid.org"  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  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 pixelfed
git pull
docker build . -t pixelfed:20210203 -f contrib/docker/Dockerfile.apache
cd ..

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

Wie fandest du den Post?

Auf einen Stern klicken zum bewerten

durchschnittlich 2.5 / 5. bereits abgestimmt haben: 4

Keine Bewertungen bisher, sei der erste

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Von Lars Müller

Blogger und Fachangestellter für Bäderbetriebe. Fliege in meiner Freizeit mit einer Drohne umher. Absolut interessiert in Sachen Linux, Windows, Serverhosting.

Schreibe einen Kommentar

Consent Management Platform von Real Cookie Banner