Files
PyGuardian/docker-compose.prod.yml
Andrey K. Choi 4adb00a498
Some checks reported errors
continuous-integration/drone/push Build encountered an error
feat: Complete Docker deployment environment for PyGuardian v2.1.0
🐳 DOCKER DEPLOYMENT INFRASTRUCTURE:

## New Docker Files:
- deployment/docker/Dockerfile.optimized - Multi-stage optimized builds
- docker-compose.prod.yml - Production cluster deployment
- docker-compose.dev.yml - Development environment
- deploy-docker.sh - One-command deployment script
- Makefile.docker - Advanced management commands
- .env.docker - Environment configuration template
- DOCKER_DEPLOYMENT.md - Complete deployment guide

## Container Images:
- pyguardian:controller - Cluster management (200MB)
- pyguardian:agent - Security monitoring (180MB)
- pyguardian:standalone - All-in-one deployment (220MB)
- pyguardian:development - Dev tools + Jupyter (350MB)

## Deployment Modes:
- Standalone: Single container with all features
- Cluster: Controller + scalable agents with JWT auth
- Production: Enterprise deployment with monitoring
- Development: Hot reload + debugging tools

## Key Features:
 Multi-stage Docker builds for optimization
 Privileged containers for system monitoring
 Host networking for firewall integration
 Volume persistence for data/logs/config
 Health checks and auto-restart
 Prometheus monitoring integration
 SSL/TLS support with custom certificates
 Automated backup and restore
 CI/CD ready builds

## Quick Commands:
./deploy-docker.sh standalone          # Quick start
./deploy-docker.sh cluster --scale 3   # Production cluster
make -f Makefile.docker prod-up        # Advanced management
make -f Makefile.docker health         # Health checks

Ready for enterprise Docker deployment! 🚀
2025-11-26 04:42:36 +09:00

243 lines
5.9 KiB
YAML

# PyGuardian Production Docker Compose
# Optimized for production deployment with security and monitoring
version: '3.8'
services:
# PyGuardian Controller
pyguardian-controller:
build:
context: .
dockerfile: deployment/docker/Dockerfile.optimized
target: controller
container_name: pyguardian-controller
hostname: pyguardian-controller
restart: unless-stopped
privileged: true
network_mode: host
volumes:
# Data persistence
- controller_data:/opt/pyguardian/data
- controller_logs:/opt/pyguardian/logs
- controller_config:/opt/pyguardian/config
# System access for monitoring
- /var/log:/var/log:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc:/host/etc:ro
environment:
- PYGUARDIAN_MODE=controller
- PYGUARDIAN_API_HOST=0.0.0.0
- PYGUARDIAN_API_PORT=8443
- PYGUARDIAN_LOG_LEVEL=${LOG_LEVEL:-INFO}
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- CLUSTER_SECRET=${CLUSTER_SECRET}
- PYTHONUNBUFFERED=1
healthcheck:
test: ["CMD", "curl", "-f", "-k", "https://localhost:8443/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
labels:
- "pyguardian.service=controller"
- "pyguardian.version=2.1.0"
# PyGuardian Agent 1
pyguardian-agent-1:
build:
context: .
dockerfile: deployment/docker/Dockerfile.optimized
target: agent
container_name: pyguardian-agent-1
hostname: pyguardian-agent-1
restart: unless-stopped
privileged: true
network_mode: host
volumes:
# Data persistence
- agent1_data:/opt/pyguardian/data
- agent1_logs:/opt/pyguardian/logs
- agent1_config:/opt/pyguardian/config
# System access for monitoring
- /var/log:/var/log:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc:/host/etc:ro
environment:
- PYGUARDIAN_MODE=agent
- CONTROLLER_HOST=${CONTROLLER_HOST:-localhost}
- CONTROLLER_PORT=${CONTROLLER_PORT:-8443}
- CLUSTER_SECRET=${CLUSTER_SECRET}
- PYGUARDIAN_LOG_LEVEL=${LOG_LEVEL:-INFO}
- PYTHONUNBUFFERED=1
depends_on:
pyguardian-controller:
condition: service_healthy
healthcheck:
test: ["CMD", "python3", "/opt/pyguardian/monitor.py"]
interval: 60s
timeout: 15s
retries: 3
start_period: 30s
labels:
- "pyguardian.service=agent"
- "pyguardian.version=2.1.0"
- "pyguardian.agent.id=1"
# PyGuardian Agent 2 (optional)
pyguardian-agent-2:
build:
context: .
dockerfile: deployment/docker/Dockerfile.optimized
target: agent
container_name: pyguardian-agent-2
hostname: pyguardian-agent-2
restart: unless-stopped
privileged: true
network_mode: host
profiles: ["multi-agent"]
volumes:
- agent2_data:/opt/pyguardian/data
- agent2_logs:/opt/pyguardian/logs
- agent2_config:/opt/pyguardian/config
- /var/log:/var/log:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc:/host/etc:ro
environment:
- PYGUARDIAN_MODE=agent
- CONTROLLER_HOST=${CONTROLLER_HOST:-localhost}
- CONTROLLER_PORT=${CONTROLLER_PORT:-8443}
- CLUSTER_SECRET=${CLUSTER_SECRET}
- PYGUARDIAN_LOG_LEVEL=${LOG_LEVEL:-INFO}
- PYTHONUNBUFFERED=1
depends_on:
pyguardian-controller:
condition: service_healthy
healthcheck:
test: ["CMD", "python3", "/opt/pyguardian/monitor.py"]
interval: 60s
timeout: 15s
retries: 3
start_period: 30s
labels:
- "pyguardian.service=agent"
- "pyguardian.version=2.1.0"
- "pyguardian.agent.id=2"
# Monitoring and Metrics (optional)
pyguardian-monitor:
image: prom/prometheus:latest
container_name: pyguardian-monitor
restart: unless-stopped
profiles: ["monitoring"]
ports:
- "9090:9090"
volumes:
- prometheus_data:/prometheus
- ./deployment/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
labels:
- "pyguardian.service=monitoring"
volumes:
# Controller volumes
controller_data:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/controller/data
controller_logs:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/controller/logs
controller_config:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/controller/config
# Agent 1 volumes
agent1_data:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent1/data
agent1_logs:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent1/logs
agent1_config:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent1/config
# Agent 2 volumes
agent2_data:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent2/data
agent2_logs:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent2/logs
agent2_config:
driver: local
driver_opts:
type: none
o: bind
device: /opt/pyguardian/agent2/config
# Monitoring
prometheus_data:
driver: local
# Networks (if not using host networking)
networks:
pyguardian:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16