- New Build and startup procedures for all services, compliant for both docker, podman and k8s
This commit is contained in:
41
scripts/start.sh
Executable file
41
scripts/start.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROLE="${ROLE:-web}" # web | worker | beat
|
||||
PORT="${PORT:-8080}" # web poort (in k8s vaak 8080)
|
||||
WORKERS="${WORKERS:-1}" # gunicorn workers (web)
|
||||
WORKER_CLASS="${WORKER_CLASS:-gevent}" # web: gevent|sync
|
||||
WORKER_CONN="${WORKER_CONN:-100}" # web: --worker-connections
|
||||
LOGLEVEL="${LOGLEVEL:-info}"
|
||||
MAX_REQ="${MAX_REQUESTS:-1000}"
|
||||
MAX_JITTER="${MAX_REQUESTS_JITTER:-100}"
|
||||
COMPONENT_NAME="${COMPONENT_NAME:-eveai_app}" # component name for dynamic import
|
||||
|
||||
case "$ROLE" in
|
||||
web)
|
||||
echo "[start] role=web component=$COMPONENT_NAME port=$PORT workers=$WORKERS class=$WORKER_CLASS"
|
||||
exec gunicorn -w "$WORKERS" -k "$WORKER_CLASS" \
|
||||
-b "0.0.0.0:${PORT}" --worker-connections "$WORKER_CONN" \
|
||||
--access-logfile - --error-logfile - --log-level "$LOGLEVEL" \
|
||||
--graceful-timeout 25 --timeout 30 --keep-alive 5 \
|
||||
--max-requests "$MAX_REQ" --max-requests-jitter "$MAX_JITTER" \
|
||||
scripts.run:app
|
||||
;;
|
||||
worker)
|
||||
echo "[start] role=worker component=$COMPONENT_NAME"
|
||||
CONCURRENCY="${CELERY_CONCURRENCY:-2}"
|
||||
exec celery -A scripts.run worker \
|
||||
--loglevel="${CELERY_LOGLEVEL:-INFO}" \
|
||||
--concurrency="${CONCURRENCY}" \
|
||||
--max-tasks-per-child="${CELERY_MAX_TASKS_PER_CHILD:-1000}" \
|
||||
--prefetch-multiplier="${CELERY_PREFETCH:-1}" -O fair
|
||||
;;
|
||||
beat)
|
||||
echo "[start] role=beat component=$COMPONENT_NAME"
|
||||
exec celery -A scripts.run beat \
|
||||
--loglevel="${CELERY_LOGLEVEL:-INFO}"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown ROLE=$ROLE" >&2; exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user