Docker Deployment
Containerized deployment with bind mounts for persistence.
Dockerfile
FROM python:3.12-slim
WORKDIR /app
# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Install SQLite with FTS5
RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
# Copy application
COPY . .
# Create data directory
RUN mkdir -p /data
EXPOSE 8090
ENV MNEMOSYNE_DATA_DIR=/data
CMD ["python", "-m", "mnemosyne"]
docker-compose.yml
version: "3.8"
services:
mnemosyne:
build: .
ports:
- "8090:8090"
volumes:
- mnemosyne-data:/data
environment:
- MNEMOSYNE_DATA_DIR=/data
- OPENAI_API_KEY=***
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
mnemosyne-data:
Run
docker-compose up -d
Health Check
curl http://localhost:8090/health
Backup Volume
# Create backup
docker run --rm -v mnemosyne-data:/data -v $(pwd):/backup alpine tar czf /backup/mnemosyne-backup.tar.gz -C /data .
# Restore
docker run --rm -v mnemosyne-data:/data -v $(pwd):/backup alpine tar xzf /backup/mnemosyne-backup.tar.gz -C /data
Bind Mount vs Named Volume
Use named volumes (as shown above) for production. Bind mounts to host directories work for development but can cause permission issues.
Related Pages
Deployment Overview
Overview of Mnemosyne deployment options: Docker, Fly.io, systemd services, and cron jobs. Choose th...
Deploy to Fly.io
Step-by-step guide to deploying Mnemosyne on Fly.io: app setup, persistent volumes, configuration se...
Backups
Implement backup strategies for Mnemosyne: SQLite file snapshots, incremental backups, automated res...
Mnemosyne