Zum Inhalt

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

docker compose logs -f coder 2>&1 | grep -i "provision"

Troubleshooting

"Workspace agent is not connected":

  • Pruefen ob die Workspace-VM/der Container erreichbar ist
  • CODER_ACCESS_URL muss 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:

docker compose logs -f coder 2>&1 | grep -i "provision"
# Hetzner-API-Token pruefen: HCLOUD_TOKEN in .env
# Terraform-Template-Syntax validieren