Skip to main content

Docker Deployment

Deploy Raven Docs using Docker and Docker Compose.

Prerequisites

  • Docker 20.10+
  • Docker Compose 2.0+
  • 4 GB RAM minimum

Quick Start

1. Clone the Repository

git clone https://github.com/raven-docs/raven-docs.git
cd raven-docs

2. Configure Environment

cp .env.example .env

Edit .env:

# Required
DATABASE_URL=postgresql://raven:password@postgres:5432/ravendocs
REDIS_URL=redis://redis:6379
APP_SECRET=your-secret-key-here-min-32-chars
APP_URL=http://localhost:3000

# Optional
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret

3. Start Services

docker compose up -d

4. Run Migrations

docker compose exec app npm run migrate

5. Access the App

Open http://localhost:3000

Docker Compose Configuration

# docker-compose.yml
version: '3.8'

services:
app:
image: ghcr.io/raven-docs/raven-docs:latest
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- APP_SECRET=${APP_SECRET}
- APP_URL=${APP_URL}
depends_on:
- postgres
- redis
restart: unless-stopped

postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: raven
POSTGRES_PASSWORD: password
POSTGRES_DB: ravendocs
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped

redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped

volumes:
postgres_data:
redis_data:

Production Configuration

With Traefik (HTTPS)

services:
app:
image: ghcr.io/raven-docs/raven-docs:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.ravendocs.rule=Host(`docs.yourdomain.com`)"
- "traefik.http.routers.ravendocs.tls.certresolver=letsencrypt"
environment:
- APP_URL=https://docs.yourdomain.com
# ... rest of config

traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.email=you@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt

External PostgreSQL

services:
app:
environment:
- DATABASE_URL=postgresql://user:pass@your-postgres-host:5432/ravendocs
# Remove postgres service

Backups

Database

# Backup
docker compose exec postgres pg_dump -U raven ravendocs > backup.sql

# Restore
docker compose exec -T postgres psql -U raven ravendocs < backup.sql

Automated Backups

# Add to crontab
0 2 * * * docker compose exec postgres pg_dump -U raven ravendocs | gzip > /backups/raven-$(date +\%Y\%m\%d).sql.gz

Updating

# Pull latest images
docker compose pull

# Restart with new images
docker compose up -d

# Run any new migrations
docker compose exec app npm run migrate

Monitoring

Health Check

curl http://localhost:3000/health

Logs

# All services
docker compose logs -f

# Just the app
docker compose logs -f app

Troubleshooting

Database Connection Failed

Check PostgreSQL is running:

docker compose ps postgres
docker compose logs postgres

Redis Connection Failed

Check Redis is running:

docker compose exec redis redis-cli ping

Out of Memory

Increase Docker memory limit or upgrade server.