# Docker Deployment ## Overview This guide covers deploying AxonHub using Docker and Docker Compose. Docker provides an isolated, reproducible environment that simplifies deployment and scaling. ## Quick Start ### 1. Clone the Repository ```bash git clone https://github.com/looplj/axonhub.git cd axonhub ``` ### 2. Configure Environment Copy the example configuration file: ```bash cp config.example.yml config.yml ``` Edit `config.yml` with your settings: ```yaml # config.yml server: port: 8090 name: "AxonHub" db: dialect: "sqlite3" dsn: "file:axonhub.db?cache=shared&_fk=1" log: level: "info" encoding: "json" ``` ### 3. Start Services ```bash docker-compose up -d ``` ### 4. Verify Deployment Check service status: ```bash docker-compose ps ``` Access the application: - Web interface: http://localhost:8090 - Default admin: admin@example.com / admin123 ## Docker Compose Configuration ### Basic docker-compose.yml ```yaml version: '3.8' services: axonhub: image: looplj/axonhub:latest ports: - "8090:8090" volumes: - ./config.yml:/app/config.yml - axonhub_data:/app/data environment: - AXONHUB_SERVER_PORT=8090 - AXONHUB_DB_DIALECT=sqlite3 - AXONHUB_DB_DSN=file:axonhub.db?cache=shared&_fk=1 restart: unless-stopped volumes: axonhub_data: ``` ### Production Configuration ```yaml version: '3.8' services: axonhub: image: looplj/axonhub:latest ports: - "8090:8090" volumes: - ./config.yml:/app/config.yml - axonhub_data:/app/data - ./logs:/app/logs environment: - AXONHUB_SERVER_PORT=8090 - AXONHUB_DB_DIALECT=postgres - AXONHUB_DB_DSN=postgres://axonhub:password@postgres:5432/axonhub - AXONHUB_LOG_LEVEL=warn - AXONHUB_LOG_OUTPUT=file - AXONHUB_LOG_FILE_PATH=/app/logs/axonhub.log depends_on: - postgres restart: unless-stopped postgres: image: postgres:15 environment: - POSTGRES_DB=axonhub - POSTGRES_USER=axonhub - POSTGRES_PASSWORD=password volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped volumes: axonhub_data: postgres_data: ``` ## Database Options ### SQLite (Development) ```yaml axonhub: environment: - AXONHUB_DB_DIALECT=sqlite3 - AXONHUB_DB_DSN=file:axonhub.db?cache=shared&_fk=1 ``` ### PostgreSQL (Production) ```yaml axonhub: environment: - AXONHUB_DB_DIALECT=postgres - AXONHUB_DB_DSN=postgres://user:pass@host:5432/axonhub ``` ### MySQL (Production) ```yaml axonhub: environment: - AXONHUB_DB_DIALECT=mysql - AXONHUB_DB_DSN=user:pass@tcp(host:3306)/axonhub?charset=utf8mb4&parseTime=True ``` ## Environment Variables ### Server Configuration ```bash AXONHUB_SERVER_PORT=8090 AXONHUB_SERVER_NAME="AxonHub" AXONHUB_SERVER_DEBUG=false AXONHUB_SERVER_REQUEST_TIMEOUT="30s" AXONHUB_SERVER_LLM_REQUEST_TIMEOUT="600s" ``` ### Database Configuration ```bash AXONHUB_DB_DIALECT="postgres" AXONHUB_DB_DSN="postgres://user:pass@host:5432/axonhub" AXONHUB_DB_DEBUG=false ``` ### Logging Configuration ```bash AXONHUB_LOG_LEVEL="info" AXONHUB_LOG_ENCODING="json" AXONHUB_LOG_OUTPUT="stdio" ``` ## Security Considerations ### Network Security ```yaml axonhub: networks: - axonhub_network ports: - "127.0.0.1:8090:8090" # Bind to localhost only networks: axonhub_network: driver: bridge ``` ### Secrets Management Use Docker secrets or environment files: ```bash # .env file DB_PASSWORD=your-secure-password API_KEY_SECRET=your-api-key-secret ``` ```yaml axonhub: env_file: - .env ``` ## Monitoring and Logging ### Health Checks ```yaml axonhub: healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8090/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s ``` ### Log Collection ```yaml axonhub: logging: driver: "json-file" options: max-size: "10m" max-file: "3" ``` ## Scaling ### Horizontal Scaling ```yaml axonhub: deploy: replicas: 3 resources: limits: memory: 1G cpus: '0.5' reservations: memory: 512M cpus: '0.25' ``` ### Load Balancer Setup ```yaml services: axonhub: image: looplj/axonhub:latest deploy: replicas: 3 networks: - axonhub_network nginx: image: nginx:alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - axonhub networks: - axonhub_network ``` ## Backup and Recovery ### Database Backup ```yaml services: backup: image: postgres:15 volumes: - ./backup:/backup - postgres_data:/var/lib/postgresql/data command: | bash -c ' pg_dump -h postgres -U axonhub axonhub > /backup/axonhub-$(date +%Y%m%d).sql ' depends_on: - postgres environment: - PGPASSWORD=password ``` ### Volume Backup ```bash # Backup data volume docker run --rm -v axonhub_data:/source -v $(pwd)/backup:/backup alpine \ tar czf /backup/axonhub-data-$(date +%Y%m%d).tar.gz -C /source . # Restore data volume docker run --rm -v axonhub_data:/target -v $(pwd)/backup:/backup alpine \ tar xzf /backup/axonhub-data-20231110.tar.gz -C /target ``` ## Troubleshooting ### Common Issues **Container fails to start** - Check Docker logs: `docker-compose logs axonhub` - Verify configuration file permissions - Ensure database connection is working **Port conflicts** - Change the exposed port in docker-compose.yml - Check if another service is using port 8090 **Database connection issues** - Verify database credentials - Check network connectivity between containers - Ensure database container is running ### Debug Mode Enable debug logging for troubleshooting: ```yaml axonhub: environment: - AXONHUB_SERVER_DEBUG=true - AXONHUB_LOG_LEVEL=debug ``` ## Next Steps - [Configuration Guide](configuration.md) - [OpenAI API](../api-reference/openai-api.md) - [Anthropic API](../api-reference/anthropic-api.md) - [Gemini API](../api-reference/gemini-api.md) - [Architecture Documentation](../architecture/erd.md)