managarten/scripts/mac-mini
Till JS 4a48182677 feat(monitoring): integrate Promtail for centralized log collection via Loki
Loki was already running but had no log shipper. Adds Promtail to collect
Docker logs from all 66 containers with automatic tier labeling (infra,
auth, core, app, matrix, games) and a Grafana Logs Explorer dashboard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 19:22:44 +02:00
..
launchd feat(monitoring): add alerting stack and maintenance scripts 2026-02-12 13:46:57 +01:00
backup-databases.sh feat(mac-mini): add stability improvements 2026-02-12 13:33:44 +01:00
build-app.sh feat(monitoring): integrate Promtail for centralized log collection via Loki 2026-03-29 19:22:44 +02:00
build-landings.sh feat(infra): add Cloudflare fallback plan + self-hosted landing pages 2026-03-24 12:07:40 +01:00
check-disk-space.sh feat(monitoring): add alerting stack and maintenance scripts 2026-02-12 13:46:57 +01:00
configure-ollama.sh feat: add Ollama memory optimization, LLM metrics, and chat streaming 2026-03-24 09:41:33 +01:00
deploy-v2.sh feat(infra+ui): deploy script v2, schema push, SyncIndicator component 2026-03-28 18:02:06 +01:00
deploy.sh chore: replace all mana-core-auth references with mana-auth 2026-03-28 18:05:31 +01:00
ensure-containers-running.sh chore: replace all mana-core-auth references with mana-auth 2026-03-28 18:05:31 +01:00
health-check.sh refactor: remove local AI services from Mac Mini, GPU-only architecture 2026-03-28 21:23:37 +01:00
init-deploy-tracking.sql feat(infra): add deploy tracking with PostgreSQL, Pushgateway & Grafana dashboard 2026-03-20 17:08:03 +01:00
memory-baseline.sh fix(infra): use DOCKER_CMD variable in memory-baseline.sh 2026-03-29 15:12:44 +02:00
migrate-to-colima.sh fix: make colima migration resilient to TSDB file changes 2026-03-28 22:25:34 +01:00
notifications.env.example feat(mac-mini): add notification system for health checks 2026-01-23 13:18:04 +01:00
push-schemas.sh feat(infra+ui): deploy script v2, schema push, SyncIndicator component 2026-03-28 18:02:06 +01:00
README.md feat(stt): add speech-to-text service for Mac Mini 2026-01-27 01:33:10 +01:00
restart.sh fix(mac-mini): add PATH export for Docker CLI in all scripts 2026-01-23 12:17:24 +01:00
setup-autostart.sh feat(mac-mini): add auto-start and management scripts 2026-01-23 11:48:24 +01:00
setup-cloudflared-service.sh feat: add multi-arch Docker builds and Mac Mini deployment 2026-01-22 19:17:37 +01:00
setup-docker-logging.sh feat(mac-mini): add stability improvements 2026-02-12 13:33:44 +01:00
setup-forgejo-runner.sh feat(infra): add Forgejo runner registration script 2026-03-28 10:11:28 +01:00
setup-forgejo.sh feat(infra): add Forgejo for self-hosted Git + CI/CD 2026-03-28 03:00:50 +01:00
setup-image-gen.sh fix(mana-notify): resolve BullMQ circular import issue 2026-01-29 22:58:47 +01:00
setup-matrix.sh feat(matrix): add self-hosted Matrix infrastructure for GDPR compliance 2026-01-28 00:20:12 +00:00
setup-notifications.sh feat(mac-mini): add notification system for health checks 2026-01-23 13:18:04 +01:00
setup-ssh-client.sh feat: add SSH access via Cloudflare Tunnel 2026-01-22 19:27:39 +01:00
setup-stt.sh fix(stt): add Homebrew to PATH for ffmpeg 2026-01-27 01:52:09 +01:00
setup-tts-bot.sh feat(matrix): add TTS bot for text-to-speech conversion 2026-01-29 16:03:26 +01:00
setup-tts.sh 🌐 feat: add i18n support to 6 web apps 2026-01-29 14:48:35 +01:00
setup-umami-db.sh refactor: change Umami analytics URL from analytics.mana.how to stats.mana.how 2026-01-23 16:11:24 +01:00
startup.sh fix: rewrite startup.sh for Colima (auto-start after reboot) 2026-03-29 19:16:49 +02:00
status.sh refactor: remove local AI services from Mac Mini, GPU-only architecture 2026-03-28 21:23:37 +01:00
stop.sh fix(mac-mini): add PATH export for Docker CLI in all scripts 2026-01-23 12:17:24 +01:00
tune-tcp.sh feat(skilltree): add achievement system with 26 achievements + monetization report 2026-03-24 12:17:43 +01:00
weekly-report.sh feat(monitoring): add alerting stack and maintenance scripts 2026-02-12 13:46:57 +01:00

Mac Mini Server Scripts

Scripts for managing the ManaCore production environment on Mac Mini.

Quick Start (After System Update)

# 1. SSH into Mac Mini (from your local machine)
ssh mac-mini

# 2. Navigate to project
cd ~/projects/manacore-monorepo

# 3. Setup auto-start (only needed once)
./scripts/mac-mini/setup-autostart.sh

# 4. Check status
./scripts/mac-mini/status.sh

Scripts Overview

Script Purpose
setup-autostart.sh Configure automatic startup on boot (run once)
setup-stt.sh Setup STT service (Whisper + Voxtral)
startup.sh Main startup script (called by launchd)
health-check.sh Check all services health
status.sh Show full system status
restart.sh Restart all Docker containers
stop.sh Stop all Docker containers
deploy.sh Pull latest images and deploy

First-Time Setup

1. Prerequisites on Mac Mini

# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install required tools
brew install cloudflared git docker

# Install Docker Desktop
# Download from: https://www.docker.com/products/docker-desktop/

2. Clone Repository

mkdir -p ~/projects
cd ~/projects
git clone https://github.com/Memo-2023/manacore-monorepo.git
cd manacore-monorepo

3. Configure Cloudflare Tunnel

# Login to Cloudflare
cloudflared tunnel login

# The tunnel is already created (ID: bb0ea86d-8253-4a54-838b-107bb7945be9)
# Credentials should be at: ~/.cloudflared/bb0ea86d-8253-4a54-838b-107bb7945be9.json

4. Configure Environment

# Copy and edit the environment file
cp .env.macmini.example .env.macmini
nano .env.macmini

5. Enable Auto-Start

# This sets up all launchd services
./scripts/mac-mini/setup-autostart.sh

6. Configure Docker Desktop

Open Docker Desktop and enable:

  • Settings > General > Start Docker Desktop when you sign in

Daily Operations

Check Status

./scripts/mac-mini/status.sh

Run Health Check

./scripts/mac-mini/health-check.sh

Restart Services

# Normal restart
./scripts/mac-mini/restart.sh

# Pull latest images and restart
./scripts/mac-mini/restart.sh --pull

# Force recreate containers
./scripts/mac-mini/restart.sh --force

View Logs

# Startup log
tail -f /tmp/manacore-startup.log

# Health check log
tail -f /tmp/manacore-health.log

# Cloudflare tunnel log
tail -f /tmp/cloudflared.log

# Specific container logs
docker logs -f mana-core-auth
docker logs -f chat-backend

Stop Services

./scripts/mac-mini/stop.sh

LaunchD Services

Three services are configured to run automatically:

Service Label Purpose
Cloudflared com.cloudflare.cloudflared Tunnel to Cloudflare
Docker Startup com.manacore.docker-startup Start containers on boot
Health Check com.manacore.health-check Check every 5 minutes
STT Service com.manacore.stt Speech-to-Text (Whisper + Voxtral)

Manual Service Control

# Check status
launchctl list | grep -E 'cloudflare|manacore'

# Restart a service
launchctl kickstart -k gui/$(id -u)/com.manacore.docker-startup

# Stop a service
launchctl unload ~/Library/LaunchAgents/com.manacore.docker-startup.plist

# Start a service
launchctl load ~/Library/LaunchAgents/com.manacore.docker-startup.plist

Troubleshooting

Docker not starting

# Check if Docker Desktop is running
docker info

# Start Docker Desktop manually
open -a Docker

Cloudflare tunnel not connecting

# Check cloudflared status
pgrep -x cloudflared

# View tunnel logs
tail -50 /tmp/cloudflared.log

# Restart tunnel
launchctl kickstart -k gui/$(id -u)/com.cloudflare.cloudflared

Container health check failing

# Check specific container
docker logs <container-name>

# Restart specific container
docker restart <container-name>

# Check database connectivity
docker exec manacore-postgres pg_isready -U postgres

Services not starting on boot

# Re-run setup
./scripts/mac-mini/setup-autostart.sh

# Check launchd errors
launchctl error <exit-code>

# Verify plist files
plutil ~/Library/LaunchAgents/com.manacore.*.plist

Push Notifications (Optional)

To receive notifications when health checks fail:

  1. Create a topic at ntfy.sh
  2. Add to your shell profile:
    export NTFY_TOPIC=your-topic-name
    
  3. Subscribe on your phone using the ntfy app

URLs

Once running, services are available at:

Service URL
Dashboard https://mana.how
Auth API https://auth.mana.how
Chat https://chat.mana.how
Chat API https://chat-api.mana.how
Todo https://todo.mana.how
Todo API https://todo-api.mana.how
Calendar https://calendar.mana.how
Calendar API https://calendar-api.mana.how
Clock https://clock.mana.how
Clock API https://clock-api.mana.how
STT API http://localhost:3020 (internal only)
SSH ssh mac-mini (via cloudflared)

Native Services (non-Docker)

Ollama (LLM)

Ollama runs natively on Mac Mini for LLM inference:

# Check status
curl http://localhost:11434/api/tags

# List models
ollama list

# Pull a model
ollama pull gemma3:4b

STT Service (Speech-to-Text)

The STT service provides Whisper and Voxtral transcription:

# Setup (first time)
./scripts/mac-mini/setup-stt.sh

# Check status
curl http://localhost:3020/health

# Transcribe audio
curl -X POST http://localhost:3020/transcribe \
  -F "file=@audio.mp3" \
  -F "language=de"

# View logs
tail -f /tmp/manacore-stt.log

Available endpoints:

  • POST /transcribe - Whisper transcription (recommended)
  • POST /transcribe/voxtral - Voxtral transcription
  • POST /transcribe/auto - Auto-select model
  • GET /health - Health check
  • GET /models - List available models