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.