mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:41:09 +02:00
- CI: Build Docker images for linux/amd64 + linux/arm64 - CI: Add manacore-web to build matrix - Add docker-compose.macmini.yml for Mac Mini deployment - Add cloudflared-config.yml for Cloudflare Tunnel routing - Add Mac Mini deployment scripts and documentation - Configure Cloudflared as launchd service for auto-start Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5 KiB
5 KiB
Mac Mini Deployment Guide
Production deployment auf Mac Mini M2 via Cloudflare Tunnel.
Domain: mana.how Tunnel ID: bb0ea86d-8253-4a54-838b-107bb7945be9
Architektur
Internet → Cloudflare Tunnel → Mac Mini (Docker) → Apps
↓
mana.how → localhost:5173 (Dashboard)
auth.mana.how → localhost:3001 (Auth API)
chat.mana.how → localhost:3000 (Chat Web)
chat-api.mana.how → localhost:3002 (Chat API)
todo.mana.how → localhost:5188 (Todo Web)
todo-api.mana.how → localhost:3018 (Todo API)
calendar.mana.how → localhost:5186 (Calendar Web)
calendar-api.mana.how → localhost:3016 (Calendar API)
clock.mana.how → localhost:5187 (Clock Web)
clock-api.mana.how → localhost:3017 (Clock API)
Voraussetzungen
- Mac Mini mit Apple Silicon (ARM64)
- Docker Desktop for Mac
- Homebrew
- Cloudflared
Erstmaliges Setup
1. Repository klonen
mkdir -p ~/projects
cd ~/projects
git clone https://github.com/Memo-2023/manacore-monorepo.git
cd manacore-monorepo
2. Cloudflared installieren & konfigurieren
brew install cloudflared
# Bereits erledigt: Tunnel ist erstellt und konfiguriert
# Die Config liegt in: cloudflared-config.yml
3. Cloudflared als Service einrichten
chmod +x scripts/mac-mini/setup-cloudflared-service.sh
./scripts/mac-mini/setup-cloudflared-service.sh
Das Script erstellt einen launchd-Service, der:
- Automatisch beim Login startet
- Bei Abstürzen neu startet
- Logs nach
/tmp/cloudflared.logschreibt
4. Environment konfigurieren
# Template kopieren
cp .env.macmini.example .env.macmini
# Werte eintragen
nano .env.macmini
Wichtige Werte:
POSTGRES_PASSWORD- Sicheres Passwort für PostgreSQLREDIS_PASSWORD- Sicheres Passwort für RedisJWT_SECRET- Für JWT-Token GenerierungAZURE_OPENAI_*- Für Chat AI Features (optional)
5. Container starten
chmod +x scripts/mac-mini/deploy.sh
./scripts/mac-mini/deploy.sh
Tägliche Operationen
Container Status prüfen
docker compose -f docker-compose.macmini.yml ps
Logs anschauen
# Alle Services
docker compose -f docker-compose.macmini.yml logs -f
# Einzelner Service
docker compose -f docker-compose.macmini.yml logs -f mana-core-auth
Neustart aller Services
docker compose -f docker-compose.macmini.yml restart
Update auf neue Images
# Neuste Images pullen
docker compose -f docker-compose.macmini.yml pull
# Container mit neuen Images starten
docker compose -f docker-compose.macmini.yml up -d
# Alte Images aufräumen
docker image prune -f
Cloudflared Service verwalten
# Status prüfen
launchctl list | grep cloudflared
# Logs anschauen
tail -f /tmp/cloudflared.log
# Service stoppen
launchctl unload ~/Library/LaunchAgents/com.cloudflare.cloudflared.plist
# Service starten
launchctl load ~/Library/LaunchAgents/com.cloudflare.cloudflared.plist
Troubleshooting
Container startet nicht
# Logs des Services anschauen
docker compose -f docker-compose.macmini.yml logs <service-name>
# Beispiel
docker compose -f docker-compose.macmini.yml logs mana-core-auth
Datenbank-Probleme
# In PostgreSQL einloggen
docker compose -f docker-compose.macmini.yml exec postgres psql -U postgres
# Datenbanken auflisten
\l
# Zu Datenbank wechseln
\c manacore_auth
Cloudflare Tunnel nicht erreichbar
-
Prüfen ob der Service läuft:
launchctl list | grep cloudflared -
Logs prüfen:
cat /tmp/cloudflared.error.log -
Manuell testen:
cloudflared tunnel --config cloudflared-config.yml run
Health Checks
curl http://localhost:3001/api/v1/health # Auth
curl http://localhost:5173/health # Dashboard
curl http://localhost:3000/health # Chat Web
curl http://localhost:3002/api/v1/health # Chat API
curl http://localhost:5188/health # Todo Web
curl http://localhost:3018/api/health # Todo API
curl http://localhost:5186/health # Calendar Web
curl http://localhost:3016/api/v1/health # Calendar API
curl http://localhost:5187/health # Clock Web
curl http://localhost:3017/api/v1/health # Clock API
CI/CD
Docker Images werden automatisch bei Push zu main gebaut:
- Multi-Arch:
linux/amd64(Hetzner) +linux/arm64(Mac Mini) - Registry:
ghcr.io/memo-2023/<service>:latest
Nach einem neuen Build:
cd ~/projects/manacore-monorepo
git pull
./scripts/mac-mini/deploy.sh
Wichtige Dateien
| Datei | Beschreibung |
|---|---|
docker-compose.macmini.yml |
Docker Compose für Mac Mini |
cloudflared-config.yml |
Cloudflare Tunnel Routing |
.env.macmini |
Environment Variables |
scripts/mac-mini/deploy.sh |
Deployment Script |
scripts/mac-mini/setup-cloudflared-service.sh |
Cloudflared Service Setup |