Docker Compose deployment
Recommended for most self-hosted deployments. Includes all services in one configuration.
Prerequisites
- Docker 20.10+
- Docker Compose 2.0+
- 4 GB RAM minimum
Installation
1. Clone the repository
git clone https://github.com/synjar/synjar.git
cd synjar
2. Configure environment
cp .env.example .env
Edit .env with your settings:
# REQUIRED - Generate secure values
JWT_SECRET="$(openssl rand -base64 32)"
# REQUIRED - Get from https://platform.openai.com/api-keys
OPENAI_API_KEY="sk-your-api-key"
# Optional - For production email
SMTP_HOST=smtp.yourprovider.com
SMTP_USER=your-username
SMTP_PASSWORD=your-password
3. Start services
docker-compose up -d
This starts:
- synjar - API server (port 6200)
- postgres - Database (port 6205)
- minio - S3-compatible storage (port 6204)
- mailpit - Email testing (port 6203)
4. Access Synjar
Services
Database (PostgreSQL)
- Port: 6205
- Data:
./data/postgres - Persistent volume for data
Storage (MinIO)
- Port: 6204 (S3 API)
- Console: 6206
- Data:
./data/minio
Email (Mailpit)
- SMTP: 6202
- Web UI: 6203
For production, replace with real SMTP configuration.
Managing services
# View status
docker-compose ps
# View logs
docker-compose logs -f synjar
# Restart a service
docker-compose restart synjar
# Stop all services
docker-compose down
# Stop and remove volumes (DELETES DATA)
docker-compose down -v
Updating
# Pull latest images
docker-compose pull
# Restart with new images
docker-compose up -d
Production considerations
HTTPS
Place a reverse proxy (nginx, Traefik) in front of Synjar:
# docker-compose.override.yml
services:
traefik:
image: traefik:v2
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik:/etc/traefik
External database
For high availability, use an external PostgreSQL:
DATABASE_URL="postgresql://user:pass@your-db-host:5432/synjar"
Backups
Schedule regular backups:
# Database backup
docker-compose exec postgres pg_dump -U synjar > backup.sql
# MinIO backup
mc mirror minio/synjar ./backup/minio/
See Backup guide for detailed procedures.
Troubleshooting
Port conflicts
Edit docker-compose.yml to change port mappings if defaults conflict.
Database connection refused
Wait 30 seconds after docker-compose up for PostgreSQL to initialize.
Out of memory
Increase Docker memory limit or upgrade server RAM.