Theme
Self-Host mit Docker
Peacock CMS läuft komplett auf deiner eigenen Hardware — keine Cloud-Abhängigkeit, kein SaaS-Lock-In. Drei Komponenten reichen: Postgres, Redis, der Octane-API-Container. Optional kommen Meilisearch (Volltext-Suche) + MinIO (S3-kompatibler Asset-Store) dazu.
1-Minute-Setup mit install.sh
bash
git clone https://github.com/webhoch-com/peacock
cd peacock
./install.shDas Script:
- Prüft, ob Docker + pnpm + Composer installiert sind (sonst Hinweis-Output).
- Erzeugt
apps/api/.envmit zufälligen DB-/Redis-Credentials +APP_KEY. - Startet die 5 Backing-Services (
docker compose -f infra/docker/docker-compose.yml up -d). - Führt
composer install && php artisan migrateaus. - Seedet einen Demo-Tenant mit drei vorbereiteten Blueprints + einer
welcome-Story. - Druckt den Admin-Login-Token aus, mit dem du dich auf
http://localhost:8000/app/einloggen kannst.
Manuelles Setup (für volle Kontrolle)
bash
# Backing services
docker compose -f infra/docker/docker-compose.yml up -d
# → peacock-postgres (5439), peacock-redis (6389), peacock-minio (9009/9010),
# peacock-meilisearch (7709), peacock-mailpit (1039/8039)
# API
cd apps/api
cp .env.example .env
php artisan key:generate
composer install
php artisan migrate
php artisan db:seed --class=DemoTenantSeeder
# Octane / FrankenPHP
php artisan octane:start --host=127.0.0.1 --port=8000
# Admin (separates Terminal)
cd apps/admin
pnpm install
pnpm dev # → http://127.0.0.1:5173Production-Deploy
Production-docker-compose.yml mountet einen externen Postgres-Volume, härtet Redis (--requirepass) und nutzt nginx als TLS-Terminator vor dem Octane-Container. Der API-Port bleibt auf 127.0.0.1:8050 gebunden, sodass nur nginx Zugriff hat.
Nginx-Snippet auf dem Host:
nginx
location ^~ /v1/ {
proxy_pass http://127.0.0.1:8050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header CF-IPCountry ""; # SSRF-Schutz für Audience-Segments
}Helm-Chart (Kubernetes)
infra/k8s/peacock-chart/ enthält ein produktionsreifes Helm-Chart:
bash
helm install peacock infra/k8s/peacock-chart \
--namespace peacock --create-namespace \
--set api.image=ghcr.io/webhoch-com/peacock-api:latest \
--set ingress.host=peacock.example.com \
--set postgres.password=$(openssl rand -base64 24) \
--set redis.password=$(openssl rand -base64 24)Der Chart deployt: API-Deployment + HPA, Postgres-StatefulSet + PVC, Redis-Deployment, optional Meilisearch + MinIO, Service-Mesh-kompatible Probes (/up, /up?deep=1).
Updates
bash
cd peacock
git pull origin main
( cd apps/api && composer install && php artisan migrate )
docker compose -f infra/docker/docker-compose.yml restart peacock-apiBeim Production-Compose: neues Image pullen + docker compose up -d startet rolling-restart ohne Downtime — die DB-Migrations laufen davor.
Backups
Postgres-Dump täglich um 03:00 lokale Zeit:
bash
docker exec peacock-postgres pg_dump -U peacock peacock | gzip > backups/peacock-$(date +%F).sql.gzbackups/ liegt außerhalb des Container-Volumes — wird vom Host gesichert.
Siehe auch
- Cloud-Variante — gehostet auf
peacock-cms.webhoch.com - Concepts — Datenmodell + Architektur-Überblick
- Security-Audit — letzter Audit-Status