T18: stack swarm docker — image web+scan, scan_loop.py, mariadb bind-mount server5.saltis.id
- Dockerfile (web) + Dockerfile.scan (scan; sertakan tzdata) + .dockerignore
- scan_loop.py: jadwal skan SCAN_HOURS (0,8,16 lokal via TZ) + skan-awal SCAN_RUN_ON_START; loop tak keluar; tunggu DB siap
- docker-compose.yml → STACK SWARM produksi (mariadb bind mount /data/db/mariadb/databisnisid/data + placement node.hostname == server5.saltis.id; web :5000; scan); image dari registry git.proit.id/proitlab/databisnisid-{web,scan}
- docker-compose.dev.yml: mariadb uji lokal (127.0.0.1:3306) — pengganti docker-compose.yml lama
- SPEC.md §V18/T18; AGENTS.md runbook swarm + dev compose
- .env.example: TZ/SCAN_HOURS/SCAN_RUN_ON_START/MARIADB_*
This commit is contained in:
1 parent
fdb5d0de15
commit
656f26085f
9 files changed
+244
-11
No files matched your search
+77
-6
@@ -1,22 +1,93 @@
|
||||
# Stack Docker Swarm — deploy via `docker stack deploy -c docker-compose.yml databisnisid`
|
||||
#
|
||||
# 3 service: mariadb (storage, internal), web (dashboard gunicorn, publik :5000),
|
||||
# scan (skan get_voters.py pada SCAN_HOURS, waktu lokal TZ).
|
||||
#
|
||||
# Catatan swarm:
|
||||
# - `build:` hanya untuk `docker compose build`; `docker stack deploy` memakai `image:`
|
||||
# (harus dibangun lebih dulu; multi-node perlu registry).
|
||||
# - `env_file` ⊥ didukung stack → environment inline dgn interpolasi `.env`.
|
||||
# - Tanpa `container_name`/`restart:` — pakai `deploy.restart_policy`.
|
||||
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:11
|
||||
container_name: databisnisid-mariadb
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-root}
|
||||
MARIADB_DATABASE: ${MARIADB_DATABASE:-databisnisid}
|
||||
MARIADB_USER: ${MARIADB_USER:-databisnis}
|
||||
MARIADB_PASSWORD: ${MARIADB_PASSWORD:-databisnis}
|
||||
ports:
|
||||
- "127.0.0.1:3306:3306"
|
||||
volumes:
|
||||
- mariadb_data:/var/lib/mysql
|
||||
- /data/db/mariadb/databisnisid/data:/var/lib/mysql
|
||||
networks:
|
||||
- appnet
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
deploy:
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == server5.saltis.id
|
||||
restart_policy:
|
||||
condition: any
|
||||
|
||||
web:
|
||||
image: git.proit.id/proitlab/databisnisid-web:latest
|
||||
environment:
|
||||
VEX_DB_BACKEND: mysql
|
||||
VEX_DB_HOST: mariadb
|
||||
VEX_DB_PORT: "3306"
|
||||
VEX_DB_USER: ${MARIADB_USER:-databisnis}
|
||||
VEX_DB_PASS: ${MARIADB_PASSWORD:-databisnis}
|
||||
VEX_DB_NAME: ${MARIADB_DATABASE:-databisnisid}
|
||||
DASH_HOST: "0.0.0.0" # wajib di container → gunicorn bind terbuka utk ingress
|
||||
DASH_PORT: "5000"
|
||||
DASH_WORKERS: "2"
|
||||
DATABISNIS_API: ${DATABISNIS_API:-https://api.databisnis.id}
|
||||
DASH_LIQUID_TTL: "60"
|
||||
ports:
|
||||
- published: 5000
|
||||
target: 5000
|
||||
networks:
|
||||
- appnet
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import socket,sys;sys.exit(0 if socket.create_connection(('127.0.0.1',5000),5) else 1)"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 20s
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: any
|
||||
|
||||
scan:
|
||||
image: git.proit.id/proitlab/databisnisid-scan:latest
|
||||
command: ["python", "scan_loop.py"]
|
||||
environment:
|
||||
VEX_DB_BACKEND: mysql
|
||||
VEX_DB_HOST: mariadb
|
||||
VEX_DB_PORT: "3306"
|
||||
VEX_DB_USER: ${MARIADB_USER:-databisnis}
|
||||
VEX_DB_PASS: ${MARIADB_PASSWORD:-databisnis}
|
||||
VEX_DB_NAME: ${MARIADB_DATABASE:-databisnisid}
|
||||
TZ: ${TZ:-Asia/Jakarta}
|
||||
SCAN_HOURS: ${SCAN_HOURS:-0,8,16}
|
||||
SCAN_RUN_ON_START: ${SCAN_RUN_ON_START:-1}
|
||||
networks:
|
||||
- appnet
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: any
|
||||
|
||||
networks:
|
||||
appnet:
|
||||
driver: overlay
|
||||
|
||||
# volume khusus stack — jangan pakai mariadb_data (milik docker-compose.dev.yml)
|
||||
volumes:
|
||||
mariadb_data:
|
||||
db_data:
|
||||
Reference in new issue
Block a user