158 lines
2.9 KiB
Markdown
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.
|