managarten/scripts/mac-mini
Till JS c866c42a39 fix(startup): add /Users/mana mount to colima start (root cause fix)
The startup script runs `colima delete` on hard shutdown recovery,
wiping the colima.yaml mount config. Then `colima start` only added
/Volumes/ManaData but forgot /Users/mana — causing all file bind-mounts
to appear as empty directories (VirtioFS can't see host files).

This was the root cause of Synapse/SearXNG/Alertmanager/Loki crashing
after the power outage. Now both mounts are always passed explicitly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 18:42:33 +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(startup): add /Users/mana mount to colima start (root cause fix) 2026-03-30 18:42:33 +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