# Intranet lokal aufsetzen ## 1. Docker installieren ### Windows + WSL 2 — empfohlen PowerShell als Administrator: ```powershell wsl --install -d Ubuntu-24.04 wsl --update ``` Windows neu starten und prüfen: ```powershell 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: ```text Settings → Resources → WSL Integration ``` Integration für Ubuntu aktivieren und in WSL testen: ```bash 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** ```bash sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc ``` **2. Voraussetzungen installieren** ```bash sudo apt update sudo apt install ca-certificates curl -y ``` **3. Docker GPG-Key hinzufügen** ```bash 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** ```bash sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null < **Debian 13:** Das Projekt funktioniert ebenfalls unter Debian. Dafür das Docker-Repository entsprechend auf `linux/debian` umstellen: > --- ### macOS 1. **Docker Desktop for Mac** passend für Apple Silicon oder Intel installieren. 2. Docker Desktop starten. 3. Im Terminal testen: ```bash docker --version docker compose version docker run --rm hello-world ``` Dokumentation: --- ## 2. Lokale Docker-Konfiguration Im Projektroot müssen folgende Dateien liegen: ```text 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: - `scheduler` - `dokploy-network` - Strato-SSH - produktive Scheduler-Secrets Die lokale Compose-Datei startet ausschließlich: - `web` - `db` (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 ```text ./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: ```dotenv # 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: 1. Produktivserver öffnen. 2. Unter **Databases** die Intranet-Datenbank rechtsklicken. 3. **Backup…** auswählen. 4. Datei außerhalb des Repositorys speichern, z. B. `intranet.dump`. 5. **Format: Custom** wählen. 6. Unter **Data Options → Do not save**: - **Owner: Yes** - **Privileges: Yes** 7. **Include CREATE DATABASE statement: No** lassen. 8. **Backup** starten. > Der Dump enthält Produktivdaten. Nicht committen oder weitergeben. --- ## 5. Lokale Datenbank starten Im Projektroot: ```bash docker compose -f docker-compose.local.yml up -d db ``` Status prüfen: ```bash docker compose -f docker-compose.local.yml ps ``` --- ## 6. Dump mit pgAdmin importieren In pgAdmin einen neuen Server registrieren: ```text Host: localhost Port: 5432 Maintenance database: intranet Username: intranet Password: local-dev-password ``` Die Werte müssen den Angaben in `.env` entsprechen. Danach: 1. Lokale Datenbank `intranet` rechtsklicken. 2. **Restore…** auswählen. 3. **Format: Custom**. 4. `intranet.dump` auswählen. 5. Unter **Data Options → Do not save**: - **Owner: Yes** - **Privileges: Yes** 6. **Include CREATE DATABASE statement: No** 7. **Clean before restore: No** beim ersten Import. 8. **Restore** starten. Soll die lokale Datenbank später vollständig durch einen neuen Dump ersetzt werden: ```bash 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 -v` löscht neben PostgreSQL auch die übrigen lokalen Intranet-Volumes. --- ## 7. Intranet starten ```bash 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: ```bash docker compose -f docker-compose.local.yml ps ``` Logs: ```bash docker compose -f docker-compose.local.yml logs -f web ``` Nach Änderungen am `Dockerfile` neu bauen: ```bash docker compose -f docker-compose.local.yml up -d --build ``` Normale Änderungen unter `web/` benötigen durch den Bind-Mount keinen Rebuild. Stoppen: ```bash docker compose -f docker-compose.local.yml down ``` Komplett zurücksetzen: ```bash docker compose -f docker-compose.local.yml down -v ```