Deployment
Auf dem Server ist das Ziel bewusst anders als lokal:
- kein permanenter Repo-Checkout
- nur Compose-Dateien,
.envundsecrets/ - Images kommen aus der Registry
- ein zentraler Reverse Proxy im Infra-Layer routet Domains und
/api
Zielpfad
Ein möglicher Zielpfad:
/opt/skintogo/
infra/
reverse-proxy/
portainer/
netdata/
dev/
stage/
prod/
Pro Umgebung liegen dort nur:
docker-compose.ymldocker-compose.server.yml.envsecrets/
.env.server.example zeigt die dafür nötigen zusätzlichen Image- und Reverse-Proxy-Variablen.
Serverseitiges Update
Beispiel:
cd /opt/skintogo/prod
docker compose -f docker-compose.yml -f docker-compose.server.yml pull
docker compose -f docker-compose.yml -f docker-compose.server.yml up -d
Auf dem Dev-Server sollen Compose-Kommandos über den Wrapper laufen, siehe Dev-Server.
Erstes Dev-Server-Setup
Wenn unter /opt/skintogo/dev noch nichts liegt:
- Zielpfad anlegen:
sudo mkdir -p /opt/skintogo/dev/secrets
sudo chown -R "$USER":"$USER" /opt/skintogo/dev
- Compose-Dateien in den Zielpfad kopieren:
scp docker-compose.yml docker-compose.server.yml user@dein-server:/opt/skintogo/dev/
-
Auf dem Server in
/opt/skintogo/dev/.enveine Server-Konfiguration auf Basis von.env.server.exampleanlegen. -
Secret-Dateien in
/opt/skintogo/dev/secrets/schreiben, mindestens:
db_passwordjwt_secret
Beispiele:
openssl rand -hex 32 > /opt/skintogo/dev/secrets/jwt_secret
printf '%s' 'ein-starkes-db-passwort' > /opt/skintogo/dev/secrets/db_password
- Externes Reverse-Proxy-Netz anlegen:
docker network create skintogo-reverse-proxy
- Falls die GHCR-Images nicht öffentlich sind, auf dem Server bei GHCR anmelden:
docker login ghcr.io
- Ersten manuellen Testlauf starten:
cd /opt/skintogo/dev
docker compose -f docker-compose.yml -f docker-compose.server.yml pull
docker compose -f docker-compose.yml -f docker-compose.server.yml up -d
docker compose -f docker-compose.yml -f docker-compose.server.yml logs -f
Wichtige Punkte
- Ohne das externe Docker-Netz startet der serverseitige Compose-Stack nicht sauber.
- Ohne zentralen Reverse Proxy laufen die Container zwar intern, aber die Domain ist noch nicht erreichbar.
- Für
devsollte die Server-.envin der RegelFRONTEND_IMAGE=...:latestundBACKEND_IMAGE=...:latestverwenden. - Auf dem Server nicht bauen, sondern gepushte Images ziehen oder für Dev den direkten Deploy verwenden.