#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" INSTALL_ROOT="${GENARRATIVE_PREVIEW_DEPLOYER_INSTALL_ROOT:-/opt/genarrative/preview-deployer}" STATE_ROOT="${GENARRATIVE_PREVIEW_DEPLOYER_STATE_ROOT:-/var/lib/genarrative/preview-deployer}" ENV_FILE="${GENARRATIVE_PREVIEW_DEPLOYER_ENV_FILE:-/etc/genarrative/preview-deployer.env}" UNIT_FILE="${GENARRATIVE_PREVIEW_DEPLOYER_UNIT_FILE:-/etc/systemd/system/genarrative-preview-deployer.service}" if [[ "${EUID}" -ne 0 ]]; then echo "[preview-deployer-install] 必须以 root 执行安装。" >&2 exit 1 fi if [[ ! -f "${ENV_FILE}" ]]; then echo "[preview-deployer-install] 缺少私密配置 ${ENV_FILE};请从 deploy/env/preview-deployer.env.example 创建并填入 Jenkins Token 和控制面口令。" >&2 exit 1 fi cd "${ROOT_DIR}" PREVIEW_DEPLOYER_WEB_BASE=/build/ npm run preview-deployer:web:build cargo build -p preview-deployer-server --release --manifest-path server-rs/Cargo.toml install -d -o jenkins -g jenkins -m 0750 "${INSTALL_ROOT}" "${INSTALL_ROOT}/web" install -d -o jenkins -g jenkins -m 0700 "${STATE_ROOT}" install -o root -g root -m 0755 \ server-rs/target/release/preview-deployer-server \ "${INSTALL_ROOT}/preview-deployer-server" find "${INSTALL_ROOT}/web" -mindepth 1 -delete cp -a apps/preview-deployer-web/dist/. "${INSTALL_ROOT}/web/" chown -R root:root "${INSTALL_ROOT}/web" find "${INSTALL_ROOT}/web" -type d -exec chmod 0755 {} + find "${INSTALL_ROOT}/web" -type f -exec chmod 0644 {} + install -o root -g root -m 0644 \ deploy/systemd/genarrative-preview-deployer.service "${UNIT_FILE}" systemctl daemon-reload systemctl enable --now genarrative-preview-deployer.service curl --fail --silent --show-error --max-time 5 \ --header 'Host: 192.168.35.82' http://127.0.0.1:8410/healthz >/dev/null echo "[preview-deployer-install] 控制服务已安装;请将 deploy/nginx/genarrative-preview-deployer-lan.conf 嵌入内网默认 server 后执行 nginx -t && systemctl reload nginx。"