docker-compose.yml•3.57 kB
version: '3.8'
services:
# Main PrintCast MCP Server
printcast:
build:
context: .
dockerfile: Containerfile
container_name: printcast-agent
restart: unless-stopped
ports:
- "8000:8000" # MCP Server
- "5038:5038" # Asterisk AMI
- "5060:5060/udp" # SIP UDP
- "5060:5060/tcp" # SIP TCP
- "10000-10100:10000-10100/udp" # RTP ports
volumes:
- ./config:/app/config
- ./logs:/var/log/printcast
- ./data:/var/lib/printcast
- /var/run/cups:/var/run/cups # CUPS socket
env_file:
- .env
environment:
- ASTERISK_ENABLED=true
- PYTHONUNBUFFERED=1
networks:
- printcast-network
depends_on:
- redis
- postgres
# Redis for caching and task queue
redis:
image: redis:7-alpine
container_name: printcast-redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- printcast-network
command: redis-server --appendonly yes
# PostgreSQL for persistent data
postgres:
image: postgres:15-alpine
container_name: printcast-db
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_DB: printcast
POSTGRES_USER: printcast
POSTGRES_PASSWORD: ${DB_PASSWORD:-printcast123}
volumes:
- postgres-data:/var/lib/postgresql/data
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- printcast-network
# Asterisk PBX (optional, if not using host Asterisk)
asterisk:
image: andrius/asterisk:latest
container_name: printcast-asterisk
restart: unless-stopped
ports:
- "5038:5038" # AMI
- "5060:5060/udp" # SIP
- "5060:5060/tcp" # SIP
- "10000-10100:10000-10100/udp" # RTP
volumes:
- ./config/asterisk:/etc/asterisk
- asterisk-data:/var/lib/asterisk
- asterisk-logs:/var/log/asterisk
networks:
- printcast-network
profiles:
- asterisk
# CUPS print server (optional, if not using host CUPS)
cups:
image: ydkn/cups:latest
container_name: printcast-cups
restart: unless-stopped
ports:
- "631:631"
volumes:
- /var/run/dbus:/var/run/dbus
- cups-data:/etc/cups
environment:
CUPS_USER: admin
CUPS_PASSWORD: ${CUPS_PASSWORD:-admin}
networks:
- printcast-network
profiles:
- printing
# Monitoring with Prometheus
prometheus:
image: prom/prometheus:latest
container_name: printcast-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./config/prometheus:/etc/prometheus
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
networks:
- printcast-network
profiles:
- monitoring
# Grafana for visualization
grafana:
image: grafana/grafana:latest
container_name: printcast-grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
- ./config/grafana:/etc/grafana/provisioning
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin}
GF_INSTALL_PLUGINS: redis-datasource
networks:
- printcast-network
depends_on:
- prometheus
profiles:
- monitoring
networks:
printcast-network:
driver: bridge
volumes:
redis-data:
postgres-data:
asterisk-data:
asterisk-logs:
cups-data:
prometheus-data:
grafana-data: