INBOX/vps-infrastruktur.md
2026-08-07 16:01:24 +02:00

158 lines
2.9 KiB
Markdown

# 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/<dienst>/`
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 <container_name> -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.