128 lines
3.7 KiB
YAML
128 lines
3.7 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: geoip-redis
|
|
restart: unless-stopped
|
|
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
|
|
ports:
|
|
- "127.0.0.1:6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
networks:
|
|
- geoip-network
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 3s
|
|
retries: 3
|
|
|
|
geoip-ban:
|
|
build: .
|
|
container_name: geoip-ban-generator
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${FLASK_PORT:-5000}:${FLASK_PORT:-5000}"
|
|
environment:
|
|
- FLASK_HOST=0.0.0.0
|
|
- FLASK_PORT=${FLASK_PORT:-5000}
|
|
- FLASK_DEBUG=${FLASK_DEBUG:-False}
|
|
- SECRET_KEY=${SECRET_KEY:-change-me-in-production}
|
|
- APP_NAME=${APP_NAME:-GeoIP Ban Generator}
|
|
- LOGO_URL=${LOGO_URL:-}
|
|
- LOGO_LINK=${LOGO_LINK:-/}
|
|
- FOOTER_TEXT=${FOOTER_TEXT:-© 2026 GeoIP Ban Generator}
|
|
- FOOTER_LINK=${FOOTER_LINK:-}
|
|
- FOOTER_LINK_TEXT=${FOOTER_LINK_TEXT:-Documentation}
|
|
- MAXMIND_PRIMARY_URL=${MAXMIND_PRIMARY_URL:-https://github.com/P3TERX/GeoLite.mmdb/releases/download/2026.02.07/GeoLite2-Country.mmdb}
|
|
- MAXMIND_FALLBACK_URL=${MAXMIND_FALLBACK_URL:-https://git.io/GeoLite2-Country.mmdb}
|
|
- MAXMIND_UPDATE_INTERVAL_DAYS=${MAXMIND_UPDATE_INTERVAL_DAYS:-7}
|
|
- MAXMIND_AUTO_UPDATE=${MAXMIND_AUTO_UPDATE:-True}
|
|
- CACHE_ENABLED=${CACHE_ENABLED:-True}
|
|
- CACHE_TTL_SECONDS=${CACHE_TTL_SECONDS:-3600}
|
|
|
|
# Redis configuration
|
|
- REDIS_HOST=redis
|
|
- REDIS_PORT=6379
|
|
- REDIS_DB=${REDIS_DB:-0}
|
|
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
- REDIS_ENABLED=${REDIS_ENABLED:-true}
|
|
- REDIS_CACHE_TTL=${REDIS_CACHE_TTL:-86400}
|
|
|
|
volumes:
|
|
- geoip_data:/app/geoip_db
|
|
networks:
|
|
- geoip-network
|
|
depends_on:
|
|
redis:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:${FLASK_PORT:-5000}/"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
|
|
geoip-scheduler:
|
|
build: .
|
|
container_name: geoip-scheduler
|
|
restart: unless-stopped
|
|
environment:
|
|
- MAXMIND_PRIMARY_URL=${MAXMIND_PRIMARY_URL:-https://github.com/P3TERX/GeoLite.mmdb/releases/download/2026.02.07/GeoLite2-Country.mmdb}
|
|
- MAXMIND_FALLBACK_URL=${MAXMIND_FALLBACK_URL:-https://git.io/GeoLite2-Country.mmdb}
|
|
- MAXMIND_UPDATE_INTERVAL_DAYS=${MAXMIND_UPDATE_INTERVAL_DAYS:-7}
|
|
- SCHEDULER_ENABLED=${SCHEDULER_ENABLED:-true}
|
|
- SCAN_INTERVAL=${SCAN_INTERVAL:-30d}
|
|
- SCAN_TIME=${SCAN_TIME:-02:00}
|
|
- SCAN_ON_STARTUP=${SCAN_ON_STARTUP:-true}
|
|
- CACHE_MAX_AGE_HOURS=${CACHE_MAX_AGE_HOURS:-720}
|
|
- PARALLEL_WORKERS=${PARALLEL_WORKERS:-8}
|
|
|
|
# Redis configuration (for cache invalidation after scan)
|
|
- REDIS_HOST=redis
|
|
- REDIS_PORT=6379
|
|
- REDIS_DB=${REDIS_DB:-0}
|
|
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
- REDIS_ENABLED=${REDIS_ENABLED:-true}
|
|
|
|
volumes:
|
|
- geoip_data:/app/geoip_db
|
|
networks:
|
|
- geoip-network
|
|
command: python scheduler.py
|
|
depends_on:
|
|
- geoip-ban
|
|
- redis
|
|
|
|
geoip-precache:
|
|
build: .
|
|
container_name: geoip-precache
|
|
restart: "no"
|
|
environment:
|
|
- REDIS_HOST=redis
|
|
- REDIS_PORT=6379
|
|
- REDIS_DB=${REDIS_DB:-0}
|
|
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
|
- REDIS_ENABLED=true
|
|
volumes:
|
|
- geoip_data:/app/geoip_db
|
|
networks:
|
|
- geoip-network
|
|
command: python precache_configs.py
|
|
depends_on:
|
|
- redis
|
|
- geoip-ban
|
|
profiles:
|
|
- tools
|
|
|
|
volumes:
|
|
geoip_data:
|
|
driver: local
|
|
redis_data:
|
|
driver: local
|
|
|
|
networks:
|
|
geoip-network:
|
|
driver: bridge
|