| name | heretek-docker-operations |
| description | Docker and container operations for Heretek Swarm. Use when working with Docker Compose, building images, managing services, or debugging container issues. Covers development, staging, and production configurations. |
Heretek Swarm Docker Operations
Architecture
Services
services:
api:
dashboard:
nats:
postgres:
redis:
qdrant:
Ports
- API: 8000 (HTTP), 8001 (gRPC)
- Dashboard: 5173 (dev), 80 (prod)
- NATS: 4222 (client), 8222 (monitoring)
- PostgreSQL: 5432
- Redis: 6379
- Qdrant: 6333
Development Setup
Prerequisites
- Docker Desktop 4.x
- Docker Compose v2.x
- 8GB+ RAM allocated to Docker
Quick Start
git clone <repo-url>
cd heretek-swarm
cp .env.example .env
docker compose up
docker compose up -d
docker compose logs -f api
Initial Setup
docker compose exec api python scripts/run_migrations.py
docker compose exec api python scripts/seed_data.py
cd certs && ./generate.sh
Common Commands
Service Management
docker compose up nats postgres
docker compose down
docker compose down -v
docker compose restart api
docker compose ps
Logs and Debugging
docker compose logs -f
docker compose logs -f api
docker compose logs --tail 100 api
docker stats
Executing Commands
docker compose exec api python scripts/run_migrations.py
docker compose exec api bash
docker compose run --rm api python scripts/seed_data.py
Building Images
Development Build
docker compose build
docker compose build api
docker compose build --no-cache api
Production Build
docker build -t heretek-swarm:latest .
docker tag heretek-swarm:latest registry.example.com/heretek-swarm:latest
docker push registry.example.com/heretek-swarm:latest
Dockerfile Patterns
# Multi-stage build
FROM python:3.11-slim as builder
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --no-dev
FROM python:3.11-slim as runtime
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY backend/ /app/backend/
ENV PATH="/app/.venv/bin:$PATH"
CMD ["python", "-m", "heretek_swarm.api.main"]
Database Operations
PostgreSQL
docker compose exec postgres psql -U postgres -d heretek_swarm
docker compose exec api python scripts/run_migrations.py
docker compose exec postgres pg_dump -U postgres heretek_swarm > backup.sql
docker compose exec -T postgres psql -U postgres heretek_swarm < backup.sql
Redis
docker compose exec redis redis-cli
docker compose exec redis redis-cli FLUSHALL
docker compose exec redis redis-cli MONITOR
Qdrant
curl http://localhost:6333/collections
curl -X PUT http://localhost:6333/collections/memories \
-H 'Content-Type: application/json' \
-d '{"vectors": {"size": 1536, "distance": "Cosine"}}'
NATS Configuration
mTLS Setup
cd certs
./generate.sh
openssl verify -CAfile ca.pem server.pem
JetStream
nats stream ls
nats stream add EVENTS \
--subjects="events.>" \
--storage=file \
--retention=limits \
--max-msgs=1000000
nats pub events.test "Hello World"
Monitoring
curl http://localhost:8222/varz
curl http://localhost:8222/connz
curl http://localhost:8222/routez
Environment Variables
Required Variables
DATABASE_URL=postgresql://postgres:password@postgres:5432/heretek_swarm
REDIS_URL=redis://redis:6379
NATS_URL=nats://nats:4222
QDRANT_URL=http://qdrant:6333
OPENAI_API_KEY=sk-...
HERETEK_API_KEY=...
Development vs Production
DEBUG=true
LOG_LEVEL=DEBUG
RELOAD=true
DEBUG=false
LOG_LEVEL=INFO
RELOAD=false
WORKERS=4
Health Checks
Service Health
curl http://localhost:8000/health
curl http://localhost:8000/health/detailed
docker compose ps
Custom Health Checks
from fastapi import APIRouter
router = APIRouter()
@router.get("/health")
async def health():
return {
"status": "healthy",
"services": {
"database": await check_database(),
"redis": await check_redis(),
"nats": await check_nats(),
"qdrant": await check_qdrant()
}
}
Debugging
Common Issues
-
Port already in use
lsof -i :8000
kill -9 <PID>
-
Container won't start
docker compose logs api
docker compose exec api env
-
Database connection refused
docker compose ps postgres
docker compose exec postgres psql -U postgres
-
NATS connection failed
ls -la certs/
openssl x509 -in certs/server.pem -text -noout
Debug Commands
docker inspect heretek-swarm-api-1
docker top heretek-swarm-api-1
docker compose exec api python scripts/debug.py
docker compose exec nats tcpdump -i eth0 -w /tmp/nats.pcap
Performance Tuning
Resource Limits
services:
api:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
Caching
services:
api:
volumes:
- ./cache:/app/cache
environment:
- CACHE_DIR=/app/cache
Scaling
docker compose up --scale api=3
docker compose up nginx
Security
Secrets Management
docker secret create db_password ./secrets/db_password.txt
services:
api:
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txt
Network Security
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true
services:
nginx:
networks:
- frontend
api:
networks:
- frontend
- backend
CI/CD Integration
GitHub Actions
name: Docker Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build image
run: docker build -t heretek-swarm:test .
- name: Run tests
run: |
docker compose up -d
sleep 30
curl -f http://localhost:8000/health
docker compose down
Backup and Recovery
Backup Strategy
docker compose exec postgres pg_dump -U postgres heretek_swarm > pg_backup.sql
docker compose exec redis redis-cli BGSAVE
docker run --rm -v heretek-swarm_postgres_data:/data -v $(pwd):/backup alpine tar czf /backup/postgres_backup.tar.gz /data
./scripts/backup.sh
Recovery
docker compose exec -T postgres psql -U postgres heretek_swarm < pg_backup.sql
docker compose cp redis_backup.rdb redis:/data/dump.rdb
docker compose restart redis
Gotchas
- Always run migrations first - Container entrypoint runs migrations automatically
- NATS certs expire - Regenerate when docker network changes
- Volume permissions - Use correct user/group IDs
- Resource limits - Set memory limits to prevent OOM
- Health checks - Add health checks for all services
- Log rotation - Configure log rotation in production
- Backup regularly - Automate database backups
- Monitor resources - Watch CPU/memory usage
- Use .dockerignore - Exclude unnecessary files
- Clean up regularly - Remove unused images/volumes
Best Practices
- Use multi-stage builds for smaller images
- Minimize layers in Dockerfiles
- Use specific base image tags (not
latest)
- Implement health checks
- Set resource limits
- Use Docker secrets for sensitive data
- Implement proper logging
- Use Docker Compose profiles for different environments
- Keep containers stateless
- Document service dependencies