- Restore original HTTPS config in docker-compose files (gunicorn + gevent DOES support SSL) - Add plugin migration step to docker-entrypoint.sh (fixes missing plugin tables on first deploy) - Install only core plugins on bootstrap (backups, computers, endpoints, guides, knowledgebase, machines, network, notifications, printers, slides, tools, warranty) - Set FLASK_ENV=production to disable Werkzeug debugger Bug: bootstrap-plugins.sh installed ALL plugins but didn't run migrations, causing 'Table does not exist' errors. Now installs core plugins only and runs 'flask plugin upgrade-all' after bootstrap. Optional plugins (employees, geenforce, measuringtools, printedparts, usb) can be installed later via Settings > Plugins. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
77 lines
2.0 KiB
YAML
77 lines
2.0 KiB
YAML
# Docker Compose using pre-built frontend
|
|
# Build frontend on host first: cd frontend && npm run build
|
|
# Then: docker compose -f docker-compose.prebuilt.yml build
|
|
|
|
services:
|
|
db:
|
|
image: mysql:8.4
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
|
MYSQL_DATABASE: shopdb_flask
|
|
MYSQL_USER: shopdb
|
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
api:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.prebuilt
|
|
ports:
|
|
- "${API_PORT:-5001}:5001"
|
|
environment:
|
|
- DATABASE_URL=mysql+pymysql://shopdb:${MYSQL_PASSWORD}@db:3306/shopdb_flask
|
|
- SECRET_KEY=${SECRET_KEY}
|
|
- JWT_SECRET_KEY=${JWT_SECRET_KEY}
|
|
- FLASK_ENV=${FLASK_ENV:-production}
|
|
- FLASK_DEBUG=${FLASK_DEBUG:-0}
|
|
- CORS_ORIGINS=${CORS_ORIGINS}
|
|
- SHOPDB_ENV_LABEL=${SHOPDB_ENV_LABEL}
|
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
|
- ZABBIX_URL=${ZABBIX_URL:-}
|
|
- ZABBIX_TOKEN=${ZABBIX_TOKEN:-}
|
|
- COLLECTOR_API_KEY=${COLLECTOR_API_KEY:-}
|
|
- COLLECTOR_API_KEY_ENDPOINTS=${COLLECTOR_API_KEY_ENDPOINTS:-}
|
|
volumes:
|
|
- instance_data:/app/instance
|
|
- ./plugins:/app/plugins:ro
|
|
- ./scripts:/app/scripts:ro
|
|
- ./certs:/app/certs:ro
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
command:
|
|
- gunicorn
|
|
- --bind
|
|
- 0.0.0.0:5001
|
|
- --worker-class
|
|
- gevent
|
|
- --workers
|
|
- "4"
|
|
- --worker-connections
|
|
- "2000"
|
|
- --timeout
|
|
- "60"
|
|
- --access-logfile
|
|
- "-"
|
|
- --access-logformat
|
|
- '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s %(D)sus "%(f)s" "%(a)s"'
|
|
- --error-logfile
|
|
- "-"
|
|
- --certfile
|
|
- /app/certs/server.crt
|
|
- --keyfile
|
|
- /app/certs/server.key
|
|
- wsgi:app
|
|
|
|
volumes:
|
|
db_data:
|
|
instance_data:
|