Skip to main content

Docker Deployment

Deploy ArchiCore using Docker Compose.

Quick Start

1. Clone Configuration

mkdir archicore && cd archicore

2. Create docker-compose.yml

version: '3.8'

services:
archicore:
image: archicore/archicore:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://archicore:password@postgres:5432/archicore
- REDIS_URL=redis://redis:6379
- QDRANT_URL=http://qdrant:6333
- JWT_SECRET=${JWT_SECRET}
- JINA_API_KEY=${JINA_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
depends_on:
- postgres
- redis
- qdrant
restart: unless-stopped

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

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

qdrant:
image: qdrant/qdrant:latest
volumes:
- qdrant_data:/qdrant/storage
restart: unless-stopped

volumes:
postgres_data:
redis_data:
qdrant_data:

3. Create .env File

# .env
JWT_SECRET=your-very-secure-secret-key-at-least-32-chars
JINA_API_KEY=jina_xxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx

# Optional
GITHUB_CLIENT_ID=your-github-oauth-id
GITHUB_CLIENT_SECRET=your-github-oauth-secret

4. Start Services

docker compose up -d

5. Verify

# Check status
docker compose ps

# View logs
docker compose logs -f archicore

# Test health
curl http://localhost:3000/health

Production Setup

With Nginx Reverse Proxy

# docker-compose.prod.yml
version: '3.8'

services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
depends_on:
- archicore
restart: unless-stopped

archicore:
image: archicore/archicore:latest
expose:
- "3000"
# ... rest of config

nginx.conf

events {
worker_connections 1024;
}

http {
upstream archicore {
server archicore:3000;
}

server {
listen 80;
server_name archicore.yourdomain.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name archicore.yourdomain.com;

ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;

location / {
proxy_pass http://archicore;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}
}

Updating

# Pull latest images
docker compose pull

# Restart with new images
docker compose up -d

# Clean old images
docker image prune -f

Backup

Database Backup

docker compose exec postgres pg_dump -U archicore archicore > backup.sql

Full Backup

# Stop services
docker compose stop

# Backup volumes
docker run --rm -v archicore_postgres_data:/data -v $(pwd):/backup alpine \
tar czf /backup/postgres_backup.tar.gz /data

# Start services
docker compose start

Troubleshooting

Container won't start

# Check logs
docker compose logs archicore

# Common issues:
# - Missing environment variables
# - Database not ready (add healthcheck)
# - Port already in use

Database connection failed

# Verify postgres is running
docker compose ps postgres

# Test connection
docker compose exec archicore nc -zv postgres 5432

Out of memory

Increase Docker memory limit or reduce concurrent operations in config.