feat: add compose deployment baseline
This commit is contained in:
95
deploy/docker-compose.yml
Normal file
95
deploy/docker-compose.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
name: orbit
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.4
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: ${ORBIT_DB_NAME:-orbit}
|
||||
MYSQL_USER: ${ORBIT_DB_USER:?ORBIT_DB_USER is required}
|
||||
MYSQL_PASSWORD: ${ORBIT_DB_PASSWORD:?ORBIT_DB_PASSWORD is required}
|
||||
MYSQL_ROOT_PASSWORD: ${ORBIT_DB_ROOT_PASSWORD:?ORBIT_DB_ROOT_PASSWORD is required}
|
||||
volumes:
|
||||
- orbit-mysql:/var/lib/mysql
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- MYSQL_PWD="$${MYSQL_ROOT_PASSWORD}" mysqladmin ping -h 127.0.0.1 -uroot --silent
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 30
|
||||
start_period: 20s
|
||||
|
||||
migrate:
|
||||
image: ${ORBIT_IMAGE:-orbit:dev}
|
||||
restart: "no"
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
entrypoint: ["/usr/local/bin/orbit-migrate"]
|
||||
command: ["up"]
|
||||
environment:
|
||||
ORBIT_MYSQL_DSN: "root:${ORBIT_DB_ROOT_PASSWORD}@tcp(mysql:3306)/${ORBIT_DB_NAME:-orbit}?parseTime=true&multiStatements=true"
|
||||
|
||||
grant:
|
||||
image: mysql:8.4
|
||||
restart: "no"
|
||||
depends_on:
|
||||
mysql:
|
||||
condition: service_healthy
|
||||
entrypoint: ["/bin/sh", "-ec"]
|
||||
command:
|
||||
- |
|
||||
case "$${ORBIT_DB_NAME}" in *[!A-Za-z0-9_]*|'') echo 'ORBIT_DB_NAME must contain only letters, numbers and underscores' >&2; exit 2;; esac
|
||||
case "$${ORBIT_DB_USER}" in *[!A-Za-z0-9_]*|'') echo 'ORBIT_DB_USER must contain only letters, numbers and underscores' >&2; exit 2;; esac
|
||||
MYSQL_PWD="$${MYSQL_ROOT_PASSWORD}" mysql --protocol=tcp -h mysql -uroot \
|
||||
-e "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '$${ORBIT_DB_USER}'@'%'; \
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON \`$${ORBIT_DB_NAME}\`.* TO '$${ORBIT_DB_USER}'@'%'; \
|
||||
FLUSH PRIVILEGES;"
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${ORBIT_DB_ROOT_PASSWORD:?ORBIT_DB_ROOT_PASSWORD is required}
|
||||
ORBIT_DB_NAME: ${ORBIT_DB_NAME:-orbit}
|
||||
ORBIT_DB_USER: ${ORBIT_DB_USER:?ORBIT_DB_USER is required}
|
||||
|
||||
verify:
|
||||
image: ${ORBIT_IMAGE:-orbit:dev}
|
||||
restart: "no"
|
||||
depends_on:
|
||||
migrate:
|
||||
condition: service_completed_successfully
|
||||
grant:
|
||||
condition: service_completed_successfully
|
||||
entrypoint: ["/usr/local/bin/orbit-admin"]
|
||||
command: ["verify"]
|
||||
environment:
|
||||
ORBIT_MYSQL_DSN: "${ORBIT_DB_USER}:${ORBIT_DB_PASSWORD}@tcp(mysql:3306)/${ORBIT_DB_NAME:-orbit}?parseTime=true&multiStatements=true"
|
||||
|
||||
orbit:
|
||||
image: ${ORBIT_IMAGE:-orbit:dev}
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
depends_on:
|
||||
verify:
|
||||
condition: service_completed_successfully
|
||||
environment:
|
||||
ORBIT_HTTP_ADDR: 0.0.0.0:8080
|
||||
ORBIT_MYSQL_DSN: "${ORBIT_DB_USER}:${ORBIT_DB_PASSWORD}@tcp(mysql:3306)/${ORBIT_DB_NAME:-orbit}?parseTime=true&multiStatements=true"
|
||||
ORBIT_DB_MAX_OPEN: ${ORBIT_DB_MAX_OPEN:-20}
|
||||
ORBIT_DB_MAX_IDLE: ${ORBIT_DB_MAX_IDLE:-5}
|
||||
ORBIT_WORKFLOW_TICK_INTERVAL: ${ORBIT_WORKFLOW_TICK_INTERVAL:-1s}
|
||||
ORBIT_SCHEDULE_TICK_INTERVAL: ${ORBIT_SCHEDULE_TICK_INTERVAL:-1s}
|
||||
ORBIT_RECOVERY_TICK_INTERVAL: ${ORBIT_RECOVERY_TICK_INTERVAL:-2s}
|
||||
ORBIT_RUNTIME_BATCH_LIMIT: ${ORBIT_RUNTIME_BATCH_LIMIT:-100}
|
||||
ORBIT_SHUTDOWN_TIMEOUT: ${ORBIT_SHUTDOWN_TIMEOUT:-10s}
|
||||
ORBIT_WORKER_CONNECTION_LIMIT: ${ORBIT_WORKER_CONNECTION_LIMIT:-128}
|
||||
ORBIT_EVENT_CONNECTION_LIMIT: ${ORBIT_EVENT_CONNECTION_LIMIT:-128}
|
||||
ORBIT_DISPATCH_WORKERS: ${ORBIT_DISPATCH_WORKERS:-4}
|
||||
ORBIT_DISPATCH_CAPACITY: ${ORBIT_DISPATCH_CAPACITY:-128}
|
||||
ORBIT_CONSOLE_QUEUE_ID: ${ORBIT_CONSOLE_QUEUE_ID:-}
|
||||
ORBIT_METRICS_ADDR: ${ORBIT_METRICS_ADDR:-}
|
||||
ports:
|
||||
- "${ORBIT_HTTP_PORT:-8080}:8080"
|
||||
stop_grace_period: 30s
|
||||
|
||||
volumes:
|
||||
orbit-mysql:
|
||||
Reference in New Issue
Block a user