Reviewed-on: #3
Intranet lokal aufsetzen
1. Docker installieren
Windows + WSL 2 — empfohlen
PowerShell als Administrator:
wsl --install -d Ubuntu-24.04
wsl --update
Windows neu starten und prüfen:
wsl -l -v
Ubuntu muss mit WSL-Version 2 laufen.
Falls Ubuntu-24.04 über wsl --install nicht installiert werden kann, Ubuntu 24.04 alternativ über den Microsoft Store installieren.
Danach Docker Desktop for Windows installieren und das WSL-2-Backend verwenden.
In Docker Desktop:
Settings → Resources → WSL Integration
Integration für Ubuntu aktivieren und in WSL testen:
docker --version
docker compose version
docker run --rm hello-world
Docker Engine nicht zusätzlich innerhalb von WSL installieren, wenn Docker Desktop verwendet wird.
Für bessere Dateisystem-Performance das Repository möglichst im WSL-Dateisystem ablegen, z. B.
~/src/intranet, nicht unter/mnt/c/....
Linux — Ubuntu 24.04 LTS
1. Konfliktierende Pakete entfernen
sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc
2. Voraussetzungen installieren
sudo apt update
sudo apt install ca-certificates curl -y
3. Docker GPG-Key hinzufügen
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
4. Docker-Repository einrichten
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
5. Docker Engine und Compose installieren
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
6. Docker aktivieren und testen
sudo systemctl enable --now docker
sudo docker run --rm hello-world
docker compose version
7. Optional: Docker ohne sudo verwenden
sudo usermod -aG docker $USER
Danach ab- und wieder anmelden.
Debian 13: Das Projekt funktioniert ebenfalls unter Debian. Dafür das Docker-Repository entsprechend auf
linux/debianumstellen:
https://docs.docker.com/engine/install/debian/
macOS
- Docker Desktop for Mac passend für Apple Silicon oder Intel installieren.
- Docker Desktop starten.
- Im Terminal testen:
docker --version
docker compose version
docker run --rm hello-world
Dokumentation:
https://docs.docker.com/desktop/setup/install/mac-install/
2. Lokale Docker-Konfiguration
Im Projektroot müssen folgende Dateien liegen:
Dockerfile
docker-compose.yml
docker-compose.local.yml
web/
Die produktive docker-compose.yml wird lokal nicht verwendet. Dadurch werden insbesondere folgende Produktionsbestandteile nicht gestartet:
schedulerdokploy-network- Strato-SSH
- produktive Scheduler-Secrets
Die lokale Compose-Datei startet ausschließlich:
webdb(PostgreSQL)
Sie verwendet denselben Dockerfile wie Produktion.
Der Web-Container ist lokal unter 127.0.0.1:8080 erreichbar. PostgreSQL wird für pgAdmin unter 127.0.0.1:5432 freigegeben.
Durch den Bind-Mount
./web → /var/www/html
werden Änderungen an PHP, CSS und JavaScript ohne erneuten Image-Build sichtbar. Laufzeitdaten wie Profilbilder und Aushänge liegen weiterhin in lokalen Docker-Volumes.
3. Environment-Variablen anlegen
Im Projektroot eine .env anlegen:
# PostgreSQL
POSTGRES_VERSION=16
DB_NAME=intranet
DB_USER=intranet
DB_PASSWORD=local-dev-password
# Intranet
INTRANET_FQDN=localhost:8080
# Lokale Dummy-Werte für externe Dienste
SMTP_HOST=127.0.0.1
SMTP_PORT=1025
SMTP_USER=local
SMTP_PASSWORD=local
ADMIN_EMAIL=local@example.invalid
SMS_GATEWAY_URL=http://127.0.0.1:9
HA_BASE_URL=http://127.0.0.1:9
HA_TOKEN=local
OPENWEATHER_API_KEY=local
PostgreSQL-Version prüfen
Lokal sollte möglichst dieselbe PostgreSQL-Major-Version wie in Produktion verwendet werden. Wir verwenden PostgreSQL 18.
4. Produktivdatenbank mit pgAdmin sichern
In pgAdmin:
- Produktivserver öffnen.
- Unter Databases die Intranet-Datenbank rechtsklicken.
- Backup… auswählen.
- Datei außerhalb des Repositorys speichern, z. B.
intranet.dump. - Format: Custom wählen.
- Unter Data Options → Do not save:
- Owner: Yes
- Privileges: Yes
- Include CREATE DATABASE statement: No lassen.
- Backup starten.
Der Dump enthält Produktivdaten. Nicht committen oder weitergeben.
5. Lokale Datenbank starten
Im Projektroot:
docker compose -f docker-compose.local.yml up -d db
Status prüfen:
docker compose -f docker-compose.local.yml ps
6. Dump mit pgAdmin importieren
In pgAdmin einen neuen Server registrieren:
Host: localhost
Port: 5432
Maintenance database: intranet
Username: intranet
Password: local-dev-password
Die Werte müssen den Angaben in .env entsprechen.
Danach:
- Lokale Datenbank
intranetrechtsklicken. - Restore… auswählen.
- Format: Custom.
intranet.dumpauswählen.- Unter Data Options → Do not save:
- Owner: Yes
- Privileges: Yes
- Include CREATE DATABASE statement: No
- Clean before restore: No beim ersten Import.
- Restore starten.
Soll die lokale Datenbank später vollständig durch einen neuen Dump ersetzt werden:
docker compose -f docker-compose.local.yml down -v
docker compose -f docker-compose.local.yml up -d db
Danach den Dump erneut importieren.
down -vlöscht neben PostgreSQL auch die übrigen lokalen Intranet-Volumes.
7. Intranet starten
docker compose -f docker-compose.local.yml up -d --build
Aufrufen:
Die Benutzer aus dem importierten Dump können anschließend für den Login verwendet werden.
Die lokale Compose-Datei setzt session.cookie_secure=0, da lokal HTTP statt HTTPS verwendet wird.
Entwicklung
Status:
docker compose -f docker-compose.local.yml ps
Logs:
docker compose -f docker-compose.local.yml logs -f web
Nach Änderungen am Dockerfile neu bauen:
docker compose -f docker-compose.local.yml up -d --build
Normale Änderungen unter web/ benötigen durch den Bind-Mount keinen Rebuild.
Stoppen:
docker compose -f docker-compose.local.yml down
Komplett zurücksetzen:
docker compose -f docker-compose.local.yml down -v