# VPS-Infrastruktur — bujour.de > IONOS EU-VPS · Docker Compose + Caddy · Stand: Juni 2026 --- ## Übersicht Der VPS läuft mit Docker Compose als Orchestrierung. Caddy übernimmt als Reverse Proxy automatisch TLS (Let's Encrypt) für alle Dienste — kein certbot, kein manuelles Zertifikatsmanagement. Alle Dienste hängen im externen Docker-Netzwerk `proxy`. Caddy erreicht sie über den Container-Namen. --- ## Verzeichnisstruktur ``` ~/stacks/ ├── caddy/ │ ├── compose.yaml │ └── Caddyfile ├── forgejo/ │ └── compose.yaml └── checkpoint/ ├── compose.yaml └── .env ← Secrets, nicht im Git ~/apps/ └── checkpoint/ ← geklontes Repo, Build-Quelle ``` --- ## Docker-Netzwerk ```bash docker network create proxy ``` Externes Netzwerk `proxy` — einmalig angelegt, von allen Stacks referenziert. --- ## Caddy (Reverse Proxy + TLS) **Stack:** `~/stacks/caddy/` ```yaml # compose.yaml services: caddy: image: caddy:2 container_name: caddy restart: unless-stopped ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config networks: - proxy ``` ``` # Caddyfile git.bujour.de { reverse_proxy forgejo:3000 } cpe.bujour.info { reverse_proxy checkpoint:8000 } ``` **Caddy neu laden** (nach Caddyfile-Änderung): ```bash cd ~/stacks/caddy docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile ``` --- ## Forgejo (Git) **Stack:** `~/stacks/forgejo/` **URL:** https://git.bujour.de **SSH:** Port 2222 ```yaml services: forgejo: image: codeberg.org/forgejo/forgejo:10 container_name: forgejo restart: unless-stopped environment: - USER_UID=1000 - USER_GID=1000 volumes: - forgejo_data:/data networks: - proxy expose: - "3000" ports: - "2222:22" ``` --- ## Neuen Dienst hinzufügen 1. `mkdir ~/stacks//` 2. `compose.yaml` erstellen — `expose` statt `ports`, Netzwerk `proxy` (external) 3. Eintrag in `~/stacks/caddy/Caddyfile` ergänzen 4. Caddy neu laden 5. `docker compose up -d` im neuen Stack-Verzeichnis --- ## Nützliche Befehle ```bash # Status aller Container docker ps # Logs eines Dienstes docker logs -f # Container neu starten docker compose restart # Image neu bauen und Container ersetzen docker compose build docker compose up -d ``` --- ## SSH-Schlüssel VPS → Forgejo Schlüsselpaar auf dem VPS für unbeaufsichtigtes `git pull`: ```bash ssh-keygen -t ed25519 -C "vps-checkpoint" -f ~/.ssh/id_ed25519_forgejo ``` `~/.ssh/config`: ``` Host git.bujour.de HostName git.bujour.de User git Port 2222 IdentityFile ~/.ssh/id_ed25519_forgejo ``` Öffentlichen Schlüssel in Forgejo unter Einstellungen → SSH-Schlüssel eintragen.