Server-Einrichtung — From Scratch
Vollständige Anleitung zur Einrichtung des Produktions-Servers mit Coolify.
Voraussetzungen
- VPS mit Ubuntu 24.04 LTS (empfohlen: Hetzner CX32, 4 vCPU / 8 GB RAM, ~9 €/Monat)
- Root-SSH-Zugang
- Domain registriert (z.B. saw-sg.de) mit DNS-Verwaltungszugriff
Schritt 1 — VPS bereitstellen
- VPS buchen (Hetzner, Contabo, DigitalOcean, etc.)
- Ubuntu 24.04 LTS als Betriebssystem wählen
- SSH-Key beim Erstellen hinterlegen
- Server-IP notieren
Schritt 2 — Coolify installieren
# Per SSH mit dem Server verbinden
ssh root@<server-ip>
# Coolify installieren (einziger Befehl)
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bashNach der Installation:
- Coolify-UI erreichbar unter:
http://<server-ip>:8000 - Admin-Account anlegen
- Einmaligen Setup-Assistenten durchlaufen
Coolify ist kostenlos
Self-hosted Coolify ist vollständig kostenlos und Open Source (Apache 2.0). Keine versteckten Features hinter einer Paywall.
Schritt 3 — DNS-Records setzen
Im DNS-Dashboard der Domain folgende A-Records anlegen:
| Subdomain | Typ | Ziel |
|---|---|---|
venturo | A | <server-ip> |
api | A | <server-ip> |
docs | A | <server-ip> |
n8n | A | <server-ip> |
DNS-Propagation
DNS-Änderungen brauchen bis zu 24 Stunden. Mit nslookup venturo.saw-sg.de prüfen ob der Record aktiv ist.
Schritt 4 — Datenbank-Services in Coolify anlegen
MySQL 8
- Coolify → New Resource → Database → MySQL
- Einstellungen:
- Name:
venturo-db - MySQL Version:
8.0 - Database:
venturo - Username:
venturo - Password: (sicheres Passwort generieren und notieren)
- Name:
- Deploy klicken
- Zugangsdaten notieren — werden für Backend
.envbenötigt
Redis 7
- Coolify → New Resource → Database → Redis
- Einstellungen:
- Name:
venturo-redis - Redis Version:
7
- Name:
- Deploy klicken
- Hostname notieren — wird für Backend
.envbenötigt
Schritt 5 — Backend-App anlegen
- Coolify → New Resource → Application → Public Repository
- Einstellungen:
| Feld | Wert |
|---|---|
| Repository | https://github.com/marcelstingl/venturo |
| Branch | main |
| Base Directory | backend/ |
| Dockerfile | backend/Dockerfile |
| Domain | https://api.saw-sg.de |
| Port | 80 |
- Post-Deployment Command setzen:
php artisan migrate --force && php artisan config:cache && php artisan route:cache- Environment Variables setzen (Tab "Environment Variables"):
APP_ENV=production
APP_DEBUG=false
APP_URL=https://api.saw-sg.de
APP_KEY= # php artisan key:generate --show
DB_CONNECTION=mysql
DB_HOST=<coolify-mysql-host>
DB_PORT=3306
DB_DATABASE=venturo
DB_USERNAME=venturo
DB_PASSWORD=<dein-mysql-passwort>
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
CACHE_STORE=redis
REDIS_HOST=<coolify-redis-host>
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=<smtp-host> # z.B. Brevo, Mailgun
MAIL_PORT=587
MAIL_USERNAME=<smtp-user>
MAIL_PASSWORD=<smtp-passwort>
MAIL_FROM_ADDRESS=noreply@saw-sg.de
MAIL_FROM_NAME=Venturo
FRONTEND_URL=https://venturo.saw-sg.de
SANCTUM_STATEFUL_DOMAINS=venturo.saw-sg.de
N8N_WEBHOOK_BASE=https://n8n.saw-sg.de/webhook
N8N_WEBHOOK_SECRET=<sicherer-zufallsstring>
ANTHROPIC_API_KEY=sk-ant-<dein-key>
ANTHROPIC_DEFAULT_MODEL=claude-haiku-4-5-20251001
ANTHROPIC_COACH_MODEL=claude-sonnet-4-6Deploy klicken
Einmalig nach dem ersten erfolgreichen Deploy: Stammdaten-Seeder ausführen (Simulations-Vorlagen). Nur nötig bei einer neuen Datenbank — nicht in
start.shautomatisieren, da der Seeder bestehende Templates truncated und überschreiben würde:
docker exec -it <backend-container-name> php artisan db:seed --class=SimulationTemplateSeeder --forceSchritt 6 — Frontend-App anlegen
- Coolify → New Resource → Application → Public Repository
- Einstellungen:
| Feld | Wert |
|---|---|
| Repository | https://github.com/marcelstingl/venturo |
| Branch | main |
| Base Directory | frontend/ |
| Dockerfile | frontend/Dockerfile |
| Domain | https://venturo.saw-sg.de |
| Port | 80 |
- Environment Variables:
VITE_API_BASE_URL=https://api.saw-sg.de- Deploy klicken
Schritt 7 — Docs-App anlegen
- Coolify → New Resource → Application → Public Repository
- Einstellungen:
| Feld | Wert |
|---|---|
| Repository | https://github.com/marcelstingl/venturo |
| Branch | main |
| Base Directory | docs/ |
| Dockerfile | docs/Dockerfile |
| Domain | https://docs.saw-sg.de |
| Port | 80 |
Nicht als reinen Static-Build deployen
Ein Static-Build (Build Command + Publish Directory) liefert VitePresss "Clean URLs" (z.B. /changelog statt /changelog.html) nicht korrekt aus — der Standard-Server kennt nur changelog.html und wirft 404. Das Dockerfile bringt eine eigene nginx-Konfiguration mit try_files $uri $uri.html $uri/ =404; mit, die das korrekt auflöst.
- Deploy klicken
Schritt 8 — SSL aktivieren
Coolify und Traefik übernehmen SSL automatisch via Let's Encrypt.
Voraussetzung: DNS-Records aus Schritt 3 müssen aktiv sein.
In Coolify pro App: Domain → HTTPS aktivieren → Zertifikat wird automatisch ausgestellt.
Schritt 9 — Auto-Deploy einrichten
- In Coolify → App → Webhooks → GitHub-Webhook-URL kopieren
- In GitHub → Repository → Settings → Webhooks → Add webhook
- Payload URL: (aus Coolify kopiert)
- Content type:
application/json - Events: Just the push event
- Save klicken
Ab jetzt: git push origin main → Coolify deployt automatisch.
Verifikation
Nach erfolgreichem Setup alle URLs prüfen:
curl https://api.saw-sg.de/api/v1 # {"status":"ok"}
curl -o /dev/null -w "%{http_code}\n" https://docs.saw-sg.de/changelog # 200 (Clean-URL-Check)
# https://venturo.saw-sg.de → Vue.js App
# https://docs.saw-sg.de → VitePress DocsEmpfohlene Server-Größen
| Option | Specs | Preis/Monat | Geeignet für |
|---|---|---|---|
| Hetzner CX22 | 2 vCPU, 4 GB RAM | ~4,50 € | Entwicklung / Staging |
| Hetzner CX32 | 4 vCPU, 8 GB RAM | ~9 € | Produktion (empfohlen) |
| Hetzner CX42 | 8 vCPU, 16 GB RAM | ~18 € | Bei hoher KI-Last |