Status: Dieses Dokument beschreibt den lokalen Mac-Auto-Deploy. Die Produktions-Site
sinchat.delqhi.comläuft seit der Migration auf der OCI VMsin-supabase. Für Produktions-Deploys siehedocs/OPENSIN-CHAT-DEPLOYMENT.mdundscripts/deploy-production.sh. Ein Auto-Deploy fürsin-supabaseist noch einzurichten.
Dieses Setup sorgt dafür, dass die lokale OpenSIN-Chat-Instanz automatisch
aktualisiert wird, sobald etwas auf den main-Branch gepusht wird.
Der Mac prüft per cron (oder launchd) in einem festen Intervall, ob es neue
Commits auf origin/main gibt. Falls ja:
git reset --hard origin/main(Code aktualisieren)docker compose build --no-cache(Image frisch bauen — wichtig fürs Frontend-Bundle)docker compose up -d(Container neu starten)- Healthcheck gegen
http://localhost:43939/api/ping
Das Skript dazu: scripts/auto-deploy.sh.
Warum
--no-cache? Ohne diesen Schalter darf Docker den Frontend-Build-Layer aus dem Cache wiederverwenden. Dann läuftyarn buildnicht erneut und das alte JS-Bundle bleibt im Image — genau das war der ursprüngliche Bug.
cd /pfad/zu/OpenSIN-Chat
chmod +x scripts/auto-deploy.sh./scripts/auto-deploy.sh
# Ausgabe und Log prüfen:
cat logs/auto-deploy.logcrontab -e öffnen und hinzufügen (alle 3 Minuten):
*/3 * * * * /pfad/zu/OpenSIN-Chat/scripts/auto-deploy.sh >> /pfad/zu/OpenSIN-Chat/logs/cron.log 2>&1Hinweis macOS:
cronbraucht ggf. "Full Disk Access" für/usr/sbin/cronin den Systemeinstellungen → Datenschutz & Sicherheit, sonst scheitertdocker.
Datei ~/Library/LaunchAgents/com.opensin.autodeploy.plist anlegen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.opensin.autodeploy</string>
<key>ProgramArguments</key>
<array>
<string>/pfad/zu/OpenSIN-Chat/scripts/auto-deploy.sh</string>
</array>
<key>StartInterval</key>
<integer>180</integer>
<key>StandardOutPath</key>
<string>/pfad/zu/OpenSIN-Chat/logs/launchd.out.log</string>
<key>StandardErrorPath</key>
<string>/pfad/zu/OpenSIN-Chat/logs/launchd.err.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</dict>
</plist>Laden:
launchctl load ~/Library/LaunchAgents/com.opensin.autodeploy.plist
# Status prüfen:
launchctl list | grep opensinEntladen (zum Stoppen):
launchctl unload ~/Library/LaunchAgents/com.opensin.autodeploy.plistDas Skript funktioniert ohne Anpassung, lässt sich aber über Env-Vars steuern:
| Variable | Standard | Bedeutung |
|---|---|---|
OPENSIN_REPO_DIR |
Auto (Skript-Pfad) | Repo-Wurzel |
OPENSIN_BRANCH |
main |
Branch, der deployt wird |
OPENSIN_COMPOSE_FILE |
docker-opensin/docker-compose.yml |
compose-Datei |
OPENSIN_HEALTH_URL |
http://localhost:43939/api/ping |
Healthcheck-URL |
OPENSIN_LOG_FILE |
<repo>/logs/auto-deploy.log |
Logdatei |
- Online immer noch alt nach Deploy? Zuerst prüfen ob ein rogue Node-Prozess
Port 3001 blockiert:
lsof -i :3001 -P -n. Wenn dortnode *:3001 (LISTEN)steht (nicht Docker/OrbStack), wurde ein manuellesnode index.jsaus/server/gestartet. Töten mitkill <PID>, dann Docker und Cloudflared neustarten. Danach Browser Hard-Reload (Cmd+Shift+R). - 502 Bad Gateway auf sinchat.delqhi.com? Produktion läuft auf
sin-supabase— siehedocs/OPENSIN-CHAT-DEPLOYMENT.md. Lokal: prüfen obrestart: alwaysfehlt (docker ps | grep opensin-chat). Fix:docker update --restart always opensin-chat && docker start opensin-chat. docker: command not foundim cron-Log?PATHim launchd-plist bzw. cron ergänzen (Docker Desktop liegt oft unter/usr/local/bin).- Build dauert lange / blockiert? Der
flock-Lock verhindert überlappende Läufe — ein zweiter cron-Tick wird übersprungen, bis der Build fertig ist. - Logs ansehen:
tail -f logs/auto-deploy.log