first
This commit is contained in:
88
domain-api/deploy/multi-region/bootstrap_mainland.sh
Executable file
88
domain-api/deploy/multi-region/bootstrap_mainland.sh
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BASE_DIR="${1:-/opt/domaincheck}"
|
||||
ROLE="${2:-controller}"
|
||||
API_DIR="$BASE_DIR/domain-api"
|
||||
DOMAIN_DIR="$BASE_DIR/domainCheck"
|
||||
SERVICE_NAME="domaincheck-worker"
|
||||
SYNC_AGENT_SERVICE_NAME="domaincheck-sync-agent"
|
||||
ENV_FILE="/etc/default/domaincheck-worker"
|
||||
TEMPLATE_DIR="$API_DIR/deploy/multi-region/templates"
|
||||
|
||||
if [ "$ROLE" != "controller" ] && [ "$ROLE" != "worker" ]; then
|
||||
echo "invalid role: $ROLE"
|
||||
echo "usage: bash deploy/multi-region/bootstrap_mainland.sh /opt/domaincheck [controller|worker]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[1/7] preparing directories"
|
||||
mkdir -p "$BASE_DIR" "$DOMAIN_DIR" "$API_DIR/runtime"
|
||||
|
||||
if [ "$ROLE" = "controller" ]; then
|
||||
mkdir -p /var/lib/domaincheck-runtime-db /var/lib/domaincheck-redis
|
||||
fi
|
||||
|
||||
echo "[2/7] checking python environment"
|
||||
if [ ! -x "$DOMAIN_DIR/.venv/bin/python" ]; then
|
||||
echo "missing python venv: $DOMAIN_DIR/.venv/bin/python"
|
||||
echo "please deploy domainCheck first and create .venv there"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[2.5/7] installing mainland runtime dependencies"
|
||||
"$DOMAIN_DIR/.venv/bin/pip" install -q fastapi uvicorn pydantic-settings psycopg2-binary redis openpyxl python-multipart
|
||||
|
||||
echo "[3/7] fixing runtime permissions"
|
||||
touch "$DOMAIN_DIR/detect_worker.log"
|
||||
chmod 664 "$DOMAIN_DIR/detect_worker.log"
|
||||
|
||||
echo "[4/7] installing worker service"
|
||||
install -m 0644 "$API_DIR/deploy/systemd/domain-worker.service" "/etc/systemd/system/${SERVICE_NAME}.service"
|
||||
if [ "$ROLE" = "controller" ]; then
|
||||
install -m 0644 "$API_DIR/deploy/systemd/domain-sync-agent.service" "/etc/systemd/system/${SYNC_AGENT_SERVICE_NAME}.service"
|
||||
fi
|
||||
|
||||
echo "[4.5/7] preparing environment file"
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
if [ "$ROLE" = "controller" ]; then
|
||||
TEMPLATE_FILE="$TEMPLATE_DIR/domaincheck-worker.controller.env.example"
|
||||
else
|
||||
TEMPLATE_FILE="$TEMPLATE_DIR/domaincheck-worker.worker.env.example"
|
||||
fi
|
||||
install -m 0644 "$TEMPLATE_FILE" "$ENV_FILE"
|
||||
sed -i "s#__BASE_DIR__#${BASE_DIR}#g" "$ENV_FILE"
|
||||
chmod 0644 "$ENV_FILE"
|
||||
echo "created env template: $ENV_FILE"
|
||||
else
|
||||
echo "env file already exists: $ENV_FILE"
|
||||
fi
|
||||
|
||||
echo "[5/7] reloading systemd"
|
||||
systemctl daemon-reload
|
||||
|
||||
if [ "$ROLE" = "controller" ]; then
|
||||
echo "[6/7] controller notes"
|
||||
echo "controller mode selected"
|
||||
echo "please ensure local redis and postgresql_runtime are installed and listening on localhost"
|
||||
echo "sync agent service: ${SYNC_AGENT_SERVICE_NAME}"
|
||||
else
|
||||
echo "[6/7] worker node notes"
|
||||
echo "worker mode selected"
|
||||
echo "this node is expected to connect to mainland redis and runtime-db"
|
||||
fi
|
||||
|
||||
echo "[7/7] summary"
|
||||
echo "mainland bootstrap completed"
|
||||
echo "role: ${ROLE}"
|
||||
echo "service: ${SERVICE_NAME}"
|
||||
echo "next commands:"
|
||||
echo " systemctl enable ${SERVICE_NAME}"
|
||||
echo " systemctl restart ${SERVICE_NAME}"
|
||||
echo " systemctl status ${SERVICE_NAME} --no-pager -l"
|
||||
if [ "$ROLE" = "controller" ]; then
|
||||
echo " systemctl enable ${SYNC_AGENT_SERVICE_NAME}"
|
||||
echo " systemctl restart ${SYNC_AGENT_SERVICE_NAME}"
|
||||
echo " systemctl status ${SYNC_AGENT_SERVICE_NAME} --no-pager -l"
|
||||
fi
|
||||
echo " vi ${ENV_FILE}"
|
||||
Reference in New Issue
Block a user