7 Installation mit Docker Compose
Ralf Warmuth edited this page 2026-08-30 21:44:09 +02:00

Server mit Docker Compose installieren

Diese Anleitung beschreibt den empfohlenen Serverbetrieb mit fertigen Registry-Images. Der Dienst ist für ein vertrauenswürdiges LAN und einen vorgeschalteten HTTPS-Reverse-Proxy gedacht.

Zielbild

Der Stack besteht aus:

  • web: Django und Gunicorn,
  • worker: Hintergrundjobs mit FreeCADCmd,
  • db: PostgreSQL,
  • storage/: Revisionen, Projektstände, Artefakte und Fertigungsdateien,
  • staticfiles/: neu erzeugbare statische Webdateien.

Web und Worker verwenden getrennte Images, müssen aber immer aus demselben Commit stammen. Der Worker enthält FreeCAD 1.1.1.

Voraussetzungen

  • Linux-Server mit Docker Engine und Docker Compose Plugin,
  • Zugriff auf Git-Server und Image-Registry,
  • DNS-Name und empfohlen ein HTTPS-Reverse-Proxy,
  • ausreichend Speicher für unveränderliche Revisionen und große Worker- Images,
  • Installationsverzeichnis, im Beispiel /opt/freecad-plm.

Vor der Installation:

docker version
docker compose version
df -h /opt

Repository holen

git clone ssh://forgejo@home.schumbi.de/ralf/freecad-plm.git /opt/freecad-plm
cd /opt/freecad-plm
cp .env.example .env

Alternativ kann das Repository per HTTPS gelesen werden. Die Compose-Datei und .env.example gehören zur gewählten Anwendungsversion und sollten nicht aus unterschiedlichen Commits gemischt werden.

Image-Version wählen

Nach einem erfolgreichen Forgejo-Build die vollständige Commit-SHA verwenden:

PLM_WEB_IMAGE=git.home.schumbi.de/ralf/freecad-plm-web:<vollständige-commit-sha>
PLM_WORKER_IMAGE=git.home.schumbi.de/ralf/freecad-plm-worker:<vollständige-commit-sha>

latest kann für einen ersten Test praktisch sein, ist aber kein nachvollziehbarer Produktionsstand.

.env konfigurieren

Mindestens:

DJANGO_SECRET_KEY=replace-with-a-long-random-secret
DJANGO_ALLOWED_HOSTS=plm.example.local,localhost,127.0.0.1
DJANGO_CSRF_TRUSTED_ORIGINS=https://plm.example.local
DJANGO_SECURE_SSL_REDIRECT=0
DJANGO_SECURE_HSTS_SECONDS=0
DJANGO_SESSION_COOKIE_SECURE=1
DJANGO_CSRF_COOKIE_SECURE=1

POSTGRES_PASSWORD=replace-with-a-strong-database-password

PLM_HTTP_PORT=8000
PLM_WEB_IMAGE=git.home.schumbi.de/ralf/freecad-plm-web:<commit-sha>
PLM_WORKER_IMAGE=git.home.schumbi.de/ralf/freecad-plm-worker:<commit-sha>
PLM_USER=plm
PLM_UID=1000
PLM_GID=1000
FREECADCMD_COMMAND=freecadcmd

Wichtig:

  • DJANGO_ALLOWED_HOSTS enthält die Namen, unter denen der Server aufgerufen wird.
  • DJANGO_CSRF_TRUSTED_ORIGINS enthält vollständige HTTPS-Origins.
  • PLM_USER=plm passt zum Runtime-User der Images.
  • .env enthält Geheimnisse und gehört weder ins Git noch ins Wiki.

Upload- und ZIP-Limits stehen vollständig in .env.example. Passe sie nur bewusst an Reverse-Proxy-Limit, freien Plattenplatz und erwartete CAD-Größen an.

Die optionale Bambuddy-Konfiguration wird separat unter Bambuddy anbinden erklärt.

Verzeichnisse anlegen

mkdir -p storage staticfiles
sudo chown -R 1000:1000 storage staticfiles

storage/ und PostgreSQL sind die gemeinsam zu sichernden Nutzdaten. staticfiles/ kann der Webcontainer neu erzeugen.

Compose-Konfiguration prüfen

docker compose -f docker-compose.image.yml config --quiet

Bei einem Fehler zuerst Pflichtvariablen in .env korrigieren. Nicht mit leeren Ersatzwerten produktiv starten.

Start

docker compose -f docker-compose.image.yml pull
docker compose -f docker-compose.image.yml up -d

Der Webcontainer führt Migrationen und collectstatic aus. Der Worker wartet auf den gesunden Webdienst, damit er nicht gegen eine noch unmigrierte Datenbank startet.

Ersten Administrator einrichten

docker compose -f docker-compose.image.yml exec web \
  python manage.py setup_plm_roles
docker compose -f docker-compose.image.yml exec web \
  python manage.py createsuperuser

Danach unter /login/ anmelden. Benutzer, Rollen und Tokens werden unter Erster Start und Verwaltung erklärt.

Reverse Proxy

Der Proxy muss mindestens weitergeben:

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-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;

Uploadgröße passend konfigurieren, zum Beispiel:

client_max_body_size 512m;

Nach Änderungen an .env Web und Worker neu erstellen:

docker compose -f docker-compose.image.yml up -d --force-recreate web worker

Installation verifizieren

docker compose -f docker-compose.image.yml ps
docker compose -f docker-compose.image.yml exec web python manage.py check
docker compose -f docker-compose.image.yml exec worker freecadcmd --version
docker compose -f docker-compose.image.yml logs --tail=100 web worker

Erwartet:

  • Datenbank und Web sind healthy.
  • Worker läuft.
  • Migrationen enden ohne Fehler.
  • FreeCAD-Ausgabe beginnt mit FreeCAD 1.1.1.
  • HTTPS-URL zeigt die PLM-Anmeldung.

Weiterführende Betriebsseiten