services: web: build: . command: gunicorn pobsync_server.wsgi:application --bind 0.0.0.0:8000 --workers ${POBSYNC_GUNICORN_WORKERS:-2} --timeout ${POBSYNC_GUNICORN_TIMEOUT:-120} restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_SQLITE_PATH: "/var/lib/pobsync/pobsync.sqlite3" ports: - "${POBSYNC_WEB_BIND:-0.0.0.0}:8010:8000" volumes: - pobsync_state:/opt/pobsync - pobsync_db:/var/lib/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 scheduler: build: . command: python manage.py run_pobsync_scheduler --loop --interval 60 restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_SQLITE_PATH: "/var/lib/pobsync/pobsync.sqlite3" volumes: - pobsync_state:/opt/pobsync - pobsync_db:/var/lib/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 worker: build: . command: python manage.py run_pobsync_worker --loop --interval 15 restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_SQLITE_PATH: "/var/lib/pobsync/pobsync.sqlite3" volumes: - pobsync_state:/opt/pobsync - pobsync_db:/var/lib/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 web-mariadb: profiles: ["mariadb"] build: . command: gunicorn pobsync_server.wsgi:application --bind 0.0.0.0:8000 --workers ${POBSYNC_GUNICORN_WORKERS:-2} --timeout ${POBSYNC_GUNICORN_TIMEOUT:-120} restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_DB_ENGINE: "mariadb" POBSYNC_DB_HOST: "db" POBSYNC_DB_NAME: "pobsync" POBSYNC_DB_USER: "pobsync" POBSYNC_DB_PASSWORD: "pobsync" depends_on: db: condition: service_healthy ports: - "${POBSYNC_WEB_BIND:-0.0.0.0}:8010:8000" volumes: - pobsync_state:/opt/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 scheduler-mariadb: profiles: ["mariadb"] build: . command: python manage.py run_pobsync_scheduler --loop --interval 60 restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_DB_ENGINE: "mariadb" POBSYNC_DB_HOST: "db" POBSYNC_DB_NAME: "pobsync" POBSYNC_DB_USER: "pobsync" POBSYNC_DB_PASSWORD: "pobsync" depends_on: db: condition: service_healthy volumes: - pobsync_state:/opt/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 worker-mariadb: profiles: ["mariadb"] build: . command: python manage.py run_pobsync_worker --loop --interval 15 restart: unless-stopped environment: POBSYNC_DJANGO_DEBUG: "${POBSYNC_DJANGO_DEBUG:-0}" POBSYNC_DJANGO_SECRET_KEY: "${POBSYNC_DJANGO_SECRET_KEY:-dev-only-change-me}" POBSYNC_DJANGO_ALLOWED_HOSTS: "${POBSYNC_DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}" POBSYNC_HOME: "/opt/pobsync" POBSYNC_DB_ENGINE: "mariadb" POBSYNC_DB_HOST: "db" POBSYNC_DB_NAME: "pobsync" POBSYNC_DB_USER: "pobsync" POBSYNC_DB_PASSWORD: "pobsync" depends_on: db: condition: service_healthy volumes: - pobsync_state:/opt/pobsync - ${POBSYNC_BACKUP_ROOT:-./backups}:/backups healthcheck: test: ["CMD", "python", "manage.py", "check"] interval: 30s timeout: 10s retries: 3 db: profiles: ["mariadb"] image: mariadb:11 restart: unless-stopped environment: MARIADB_DATABASE: "pobsync" MARIADB_USER: "pobsync" MARIADB_PASSWORD: "pobsync" MARIADB_ROOT_PASSWORD: "pobsync-root" volumes: - mariadb_data:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 5s timeout: 5s retries: 20 volumes: pobsync_state: pobsync_db: mariadb_data: