Reviewed-on: #17 Reviewed-by: sundapeng <sundp@mail.zgclab.edu.cn> Reviewed-by: xuxt <xuxt@zgclab.edu.cn>
60 lines
1.9 KiB
Bash
Executable File
60 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# 中文提示:确保共享目录与 DNS 相关脚本存在
|
||
DNS_DIR="/private/argus/etc"
|
||
DNS_SCRIPT="${DNS_DIR}/update-dns.sh"
|
||
MASTER_DOMAIN_FILE="${DNS_DIR}/master.argus.com"
|
||
RUNTIME_USER="${ARGUS_RUNTIME_USER:-argus}"
|
||
RUNTIME_UID="${ARGUS_BUILD_UID:-2133}"
|
||
RUNTIME_GID="${ARGUS_BUILD_GID:-2015}"
|
||
MASTER_DATA_DIR="/private/argus/master"
|
||
METRIC_DIR="/private/argus/metric/prometheus"
|
||
|
||
mkdir -p "$DNS_DIR"
|
||
chown -R "$RUNTIME_UID:$RUNTIME_GID" "$DNS_DIR" 2>/dev/null || true
|
||
mkdir -p "$MASTER_DATA_DIR"
|
||
mkdir -p "$METRIC_DIR"
|
||
chown -R "$RUNTIME_UID:$RUNTIME_GID" "$MASTER_DATA_DIR" "$METRIC_DIR" 2>/dev/null || true
|
||
|
||
if [[ -x "$DNS_SCRIPT" ]]; then
|
||
echo "[INFO] Running update-dns.sh before master starts"
|
||
# 中文提示:若脚本存在则执行,保证容器使用 bind 作为 DNS
|
||
"$DNS_SCRIPT" || echo "[WARN] update-dns.sh execution failed"
|
||
else
|
||
echo "[WARN] DNS update script not found or not executable: $DNS_SCRIPT"
|
||
fi
|
||
|
||
# 中文提示:记录 master 当前 IP,供 bind 服务同步
|
||
MASTER_IP=$(ifconfig | grep -A 1 eth0 | grep inet | awk '{print $2}' || true)
|
||
if [[ -n "${MASTER_IP}" ]]; then
|
||
echo "current IP: ${MASTER_IP}"
|
||
echo "${MASTER_IP}" > "$MASTER_DOMAIN_FILE"
|
||
chown "$RUNTIME_UID:$RUNTIME_GID" "$MASTER_DOMAIN_FILE" 2>/dev/null || true
|
||
else
|
||
echo "[WARN] Failed to detect master IP via ifconfig"
|
||
fi
|
||
|
||
WORKERS=${GUNICORN_WORKERS:-4}
|
||
BIND_ADDR=${GUNICORN_BIND:-0.0.0.0:3000}
|
||
EXTRA_OPTS=${GUNICORN_EXTRA_ARGS:-}
|
||
|
||
if [[ -n "$EXTRA_OPTS" ]]; then
|
||
read -r -a EXTRA_ARRAY <<< "$EXTRA_OPTS"
|
||
else
|
||
EXTRA_ARRAY=()
|
||
fi
|
||
|
||
command=(gunicorn --bind "$BIND_ADDR" --workers "$WORKERS")
|
||
if [[ ${#EXTRA_ARRAY[@]} -gt 0 ]]; then
|
||
command+=("${EXTRA_ARRAY[@]}")
|
||
fi
|
||
command+=("app:create_app()")
|
||
|
||
if command -v runuser >/dev/null 2>&1; then
|
||
exec runuser -u "$RUNTIME_USER" -- "${command[@]}"
|
||
else
|
||
printf -v _cmd_str '%q ' "${command[@]}"
|
||
exec su -s /bin/bash -m "$RUNTIME_USER" -c "exec ${_cmd_str}"
|
||
fi
|