Coder¶
GitHub · ghcr.io/coder/coder:v2.30.4
Open-Source-Plattform fuer standardisierte Remote-Entwicklungsumgebungen. Auf dem OVH-Server laeuft ausschliesslich das Control Plane (coderd) mit Web-UI, API und integriertem Terraform-Provisioner. Die eigentlichen Workspaces werden extern provisioniert — entweder als Hetzner Cloud VMs (on-demand) oder als Docker-Container direkt auf dem Management-Server.
Noch nicht produktiv
Dieser Stack ist noch nicht deployed.
Zugang¶
| URL | https://coder.novabrands.org |
| Ersteinrichtung | Erster Benutzer wird automatisch Admin |
| API-Healthcheck | https://coder.novabrands.org/api/v2/buildinfo |
Container-Konfiguration¶
| Container | Image | Netzwerke | Memory Limit |
|---|---|---|---|
coder |
ghcr.io/coder/coder:v2.30.4 |
proxy, coder-backend, coder-socket-proxy | 1536 MB |
coder-db |
postgres:18.3-alpine |
coder-backend | 512 MB |
coder-socket-proxy |
tecnativa/docker-socket-proxy:0.3.0 |
coder-socket-proxy | 64 MB |
Wichtige Umgebungsvariablen (coder)¶
| Variable | Wert |
|---|---|
CODER_HTTP_ADDRESS |
0.0.0.0:7080 |
CODER_ACCESS_URL |
https://coder.novabrands.org |
CODER_WILDCARD_ACCESS_URL |
`` (deaktiviert) |
DOCKER_HOST |
tcp://coder-socket-proxy:2375 |
HCLOUD_TOKEN |
Hetzner Cloud API Token (aus .env) |
CODER_PG_CONNECTION_URL |
postgresql://coder:***@coder-db/coder |
Volumes¶
| Volume | Mountpunkt | Inhalt |
|---|---|---|
coder-pgdata |
/var/lib/postgresql |
Datenbankdaten (Workspaces, Templates, Users) |
Architektur¶
OVH RISE-S (Management Server)
coderd (Control Plane)
+ built-in Provisioner
+ Terraform (hcloud)
|
+-- coder-socket-proxy --> /var/run/docker.sock
| (read/write, kein Swarm/Services/Secrets)
|
+-- Lokale Docker-Container (Container-Workspaces)
|
| Agent-Verbindung (HTTPS)
|
Hetzner Cloud VMs (on-demand Workspaces)
+ Coder Agent
+ code-server / VS Code
+ Dev-Tools, Repos
Netzwerk¶
Coder haengt in drei Netzwerken: proxy (Traefik), coder-backend (PostgreSQL) und coder-socket-proxy (Docker Socket Proxy). Der Socket-Proxy ist strikt vom Traefik-Socket-Proxy getrennt.
Traefik-Labels:
- Entrypoint:
websecure(443, TLS via Let's Encrypt) - Interner Port:
7080 - Middlewares:
coder-headers(X-Forwarded-Proto, HSTS) - Kein Rate-Limiting — WebSocket-Traffic fuer Terminal/IDE-Zugriff vertraegt kein striktes Rate-Limiting
Docker Socket Proxy (Coder)¶
Coder bekommt einen eigenen Socket-Proxy mit Schreibzugriff fuer die Container-Provisionierung. Dieser ist strikt vom Traefik-Proxy getrennt (Principle of Least Privilege).
| Berechtigung | Traefik-Proxy | Coder-Proxy |
|---|---|---|
| CONTAINERS | Lesen | Lesen + Schreiben |
| IMAGES | Nein | Ja |
| NETWORKS | Lesen | Lesen + Schreiben |
| VOLUMES | Nein | Ja |
| EXEC | Nein | Ja |
| SERVICES / TASKS | Nein | Nein |
| POST (Schreibzugriff) | Nein | Ja |
Workspace-Templates¶
Template 1: Hetzner Cloud VM (on-demand)¶
Erstellt eine dedizierte VM pro Workspace auf Hetzner Cloud. Ideal fuer groessere Projekte oder wenn Isolation wichtig ist.
- Terraform Provider:
hetznercloud/hcloud - Server-Typ konfigurierbar (z.B. CX22, CX32)
- Automatisches Start/Stop — Kosten nur bei Nutzung
- Eigenes Volume fuer persistente Daten
- Referenz-Template:
ntimo/coder-hetzner-cloud-template
Template 2: Docker-Container lokal¶
Erstellt Container direkt auf dem OVH-Server. Schnellster Start (kein VM-Boot), keine Zusatzkosten.
- Terraform Provider:
kreuzwerker/docker - Docker-Zugriff ueber
coder-socket-proxy(DOCKER_HOST=tcp://coder-socket-proxy:2375) - Geteilte Ressourcen — nutzt den freien Headroom des Servers (~53 GB RAM frei)
Workspace-Networking¶
Coder hat einen eingebauten DERP/STUN-Relay-Server fuer Peer-to-Peer-Verbindungen zwischen Clients und Workspaces. Funktioniert out-of-the-box ohne Extra-Setup. Optional koennen Workspaces dem Tailnet beitreten (Coder-Agent mit Tailscale-Integration).
Ersteinrichtung¶
# 1. https://coder.novabrands.org oeffnen
# 2. Ersten Admin-Account erstellen (erster User wird automatisch Admin)
# 3. Template importieren:
# Templates -> Create Template -> Hetzner-Cloud-Vorlage hochladen
# 4. Hetzner-API-Token als Template-Variable konfigurieren
# 5. Ersten Workspace erstellen und SSH-Verbindung testen
Wartung und Betrieb¶
Updates¶
# Image-Tag in docker-compose.yml aktualisieren, dann:
docker compose pull coder
docker compose up -d coder
Coder fuehrt DB-Migrationen automatisch beim Start aus. Vor Major-Updates Release-Notes pruefen.
Datenbank-Backup¶
docker exec coder-db pg_dump \
-U coder -d coder --format=custom \
--file=/tmp/coder.dump
docker cp coder-db:/tmp/coder.dump ./db-dumps/coder.dump
Logs pruefen¶
Troubleshooting¶
"Workspace agent is not connected":
- Pruefen ob die Workspace-VM/der Container erreichbar ist
CODER_ACCESS_URLmuss von den Workspaces aus erreichbar sein (oeffentliche URL)- Firewall auf der Workspace-VM pruefen (Port 443 ausgehend muss offen sein)
Terraform-Fehler bei Workspace-Erstellung: