This commit is contained in:
Your Name
2026-04-16 22:35:08 +08:00
parent 9aa0d87c4a
commit 6ed4a99143
2 changed files with 53 additions and 28 deletions

View File

@@ -34,6 +34,8 @@ BASE_DIR="/opt/domaincheck"
DOMAINCHECK_DIR="${BASE_DIR}/domainCheck"
DOMAIN_API_DIR="${BASE_DIR}/domain-api"
DOMAIN_WEB_DIR="${BASE_DIR}/domain-web"
REPO_OWNER=""
REPO_OWNER_HOME=""
if [[ "${DB_PASSWORD}" == "CHANGE_ME_DB_PASSWORD" ]]; then
echo "请先修改配置文件中的必填项DB_PASSWORD"
@@ -47,8 +49,21 @@ if [[ ! -d "${REPO_DIR}/.git" ]]; then
exit 1
fi
REPO_OWNER="$(stat -c '%U' "${REPO_DIR}")"
REPO_OWNER_HOME="$(getent passwd "${REPO_OWNER}" | cut -d: -f6)"
if [[ -z "${REPO_OWNER}" || -z "${REPO_OWNER_HOME}" ]]; then
echo "无法识别仓库属主或 HOME${REPO_DIR}"
exit 1
fi
run_as_repo_owner() {
local cmd="$1"
runuser -u "${REPO_OWNER}" -- env HOME="${REPO_OWNER_HOME}" bash -lc "${cmd}"
}
echo "已检测到仓库目录:${REPO_DIR}"
echo "当前脚本不会执行任何 Git 命令。"
echo "仓库属主:${REPO_OWNER}"
echo "如需更新代码,请先手动切到仓库属主完成 git pull再重新执行本脚本。"
mkdir -p "${BASE_DIR}"
@@ -112,52 +127,53 @@ cat >"${DOMAIN_WEB_DIR}/.env.production" <<EOF
VITE_API_BASE_URL=https://${API_DOMAIN}/api/v1
EOF
cd "${DOMAIN_WEB_DIR}"
NODE_READY=false
chown "${REPO_OWNER}:${REPO_OWNER}" "${DOMAIN_WEB_DIR}/.env.production"
cd "${DOMAIN_WEB_DIR}"
run_as_repo_owner "
set -euo pipefail
cd '${DOMAIN_WEB_DIR}'
NODE_READY=false
resolve_nvm_dir() {
local candidate
for candidate in \
"${NODE_NVM_DIR}" \
"${NVM_DIR:-}" \
"/root/.nvm" \
"/home/www/.nvm" \
"/www/server/nvm" \
"/usr/local/nvm"
'${NODE_NVM_DIR}' \
\"\${NVM_DIR:-}\" \
'${REPO_OWNER_HOME}/.nvm' \
'/home/www/.nvm' \
'/www/server/nvm' \
'/usr/local/nvm'
do
if [[ -n "${candidate}" && -s "${candidate}/nvm.sh" ]]; then
echo "${candidate}"
if [[ -n \"\${candidate}\" && -s \"\${candidate}/nvm.sh\" ]]; then
echo \"\${candidate}\"
return 0
fi
done
return 1
}
if RESOLVED_NVM_DIR="$(resolve_nvm_dir)"; then
export NVM_DIR="${RESOLVED_NVM_DIR}"
# shellcheck disable=SC1090
source "${NVM_DIR}/nvm.sh"
echo "检测到 nvm${NVM_DIR}"
nvm install "${NODE_VERSION}"
nvm use "${NODE_VERSION}"
if RESOLVED_NVM_DIR=\"\$(resolve_nvm_dir)\"; then
export NVM_DIR=\"\${RESOLVED_NVM_DIR}\"
source \"\${NVM_DIR}/nvm.sh\"
echo '检测到 nvm'\"\${NVM_DIR}\"
nvm install '${NODE_VERSION}'
nvm use '${NODE_VERSION}'
NODE_READY=true
elif command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
echo "未检测到 nvm改用系统已安装的 node/npm"
echo "当前 node 版本:$(node -v)"
echo '未检测到 nvm改用系统已安装的 node/npm'
echo '当前 node 版本:'\"\$(node -v)\"
NODE_READY=true
fi
if [[ "${NODE_READY}" != "true" ]]; then
echo "未找到可用的 Node 运行环境。"
echo "请执行以下任一方案后重试:"
echo "1. 用 root 安装 nvm并确保 /root/.nvm/nvm.sh 存在"
echo "2. 在 install_overseas_quick.conf 中填写 NODE_NVM_DIR例如/home/www/.nvm"
echo "3. 预先安装系统全局 node 和 npm"
if [[ \"\${NODE_READY}\" != 'true' ]]; then
echo '未找到可用的 Node 运行环境。'
echo '请执行以下任一方案后重试:'
echo '1. 为仓库属主安装 nvm并确保 ~/.nvm/nvm.sh 存在'
echo '2. 在 install_overseas_quick.conf 中填写 NODE_NVM_DIR例如/home/www/.nvm'
echo '3. 预先安装系统全局 node 和 npm'
exit 1
fi
npm install
npm run build
"
cp "${DOMAIN_API_DIR}/deploy/multi-region/templates/domaincheck-api.env.example" /etc/default/domaincheck-api
sed -i "s#^DOMAIN_ROOT=.*#DOMAIN_ROOT=${DOMAINCHECK_DIR}#" /etc/default/domaincheck-api