Deploy
No need to clone the full repository. Download three small files and you’re ready to go.
1. Download the Compose Files
Create a directory and download the compose file, Caddyfile, and environment template:
mkdir memghost && cd memghost
# Docker Compose filecurl -fsSLO https://code.usshaws.com/rob/memghost/raw/branch/main/deploy/docker-compose.yml
# Caddy reverse proxy configcurl -fsSLO https://code.usshaws.com/rob/memghost/raw/branch/main/deploy/Caddyfile
# Environment templatecurl -fsSL https://code.usshaws.com/rob/memghost/raw/branch/main/deploy/.env.example -o .envOr copy the files manually from the deploy/ directory in the repository.
2. Configure
Edit the .env file with your settings:
# Required — change these before startingDB_PASSWORD=your-secure-passwordJWT_SECRET_KEY=$(openssl rand -hex 32)
# Your domain (Caddy auto-provisions HTTPS for public domains)SITE_ADDRESS=home.example.com3. Start the Stack
Core only
The base stack includes the database, API, frontend, and Caddy reverse proxy:
docker compose --profile standalone up -dWith AI
Add the ai profile to include Ollama for AI chat agents and semantic search:
# Enable AI in your .envsed -i 's/AI_ENABLED=false/AI_ENABLED=true/' .env
docker compose --profile standalone --profile ai up -dAfter first start, pull the AI models (one-time, ~5 GB total):
docker compose exec ollama ollama pull nomic-embed-textdocker compose exec ollama ollama pull qwen3:8bEverything
All features: AI agents, text-to-speech, and speech-to-text:
# Enable all features in your .envsed -i 's/AI_ENABLED=false/AI_ENABLED=true/' .envsed -i 's/AI_TTS_ENABLED=false/AI_TTS_ENABLED=true/' .envsed -i 's/AI_STT_ENABLED=false/AI_STT_ENABLED=true/' .env
docker compose --profile standalone --profile ai --profile voice up -dThen pull the AI models:
docker compose exec ollama ollama pull nomic-embed-textdocker compose exec ollama ollama pull qwen3:8b4. Wait for Readiness
The migrate service runs database migrations automatically on first start. Watch the logs until the API is ready:
docker compose logs -f apiLook for Starting application... in the output. The first start takes a moment while the migrate service runs.
Stopping the Stack
docker compose --profile standalone downTo also remove the database volume (wipes all data):
docker compose --profile standalone down -vUpdating
Pull the latest images and restart:
docker compose pulldocker compose --profile standalone up -dMigrations run automatically on startup, so schema changes are applied when the API container restarts.
Using Your Own Reverse Proxy
If you already run Traefik, nginx, or another reverse proxy, skip the standalone profile and route traffic directly to the API and web containers. See the comments at the bottom of docker-compose.yml for the routing rules:
| Path | Target |
|---|---|
/api/* | api:8080 |
/events/* | api:8080 |
/tts/* | api:8080 |
/stt/* | api:8080 |
/mcp/* | api:8080 |
/themes/* | api:8080 |
/* | web:3000 |