debug
This commit is contained in:
@@ -143,6 +143,7 @@ git pull --ff-only origin main
|
|||||||
|
|
||||||
- 整套部署命令建议统一使用 `root`
|
- 整套部署命令建议统一使用 `root`
|
||||||
- 不建议用 `www` 执行部署脚本
|
- 不建议用 `www` 执行部署脚本
|
||||||
|
- 但前端 `npm install` 和 `npm run build` 会由脚本自动切到仓库属主执行
|
||||||
|
|
||||||
原因:
|
原因:
|
||||||
|
|
||||||
@@ -158,6 +159,13 @@ git pull --ff-only origin main
|
|||||||
|
|
||||||
这些都属于 `root` 口径,不适合 `www` 用户执行。
|
这些都属于 `root` 口径,不适合 `www` 用户执行。
|
||||||
|
|
||||||
|
补充说明:
|
||||||
|
|
||||||
|
- 脚本入口仍然是 `root`
|
||||||
|
- 但国外机的一键脚本内部会自动识别仓库属主
|
||||||
|
- 然后把前端构建切到仓库属主执行
|
||||||
|
- 这样可以避免把 `node_modules`、`dist`、源码目录权限烧成 `root`
|
||||||
|
|
||||||
最稳的执行方式:
|
最稳的执行方式:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -229,6 +237,7 @@ nvm use 20
|
|||||||
|
|
||||||
- 国外机器如果要构建前端,必须先确保 `nvm` 可用
|
- 国外机器如果要构建前端,必须先确保 `nvm` 可用
|
||||||
- 一键部署脚本会调用 `nvm install 20` 和 `nvm use 20`
|
- 一键部署脚本会调用 `nvm install 20` 和 `nvm use 20`
|
||||||
|
- 前端构建由仓库属主执行,不是由 `root` 直接执行
|
||||||
- 如果你用 `root` 执行脚本,而 `nvm` 实际装在别的用户目录下:
|
- 如果你用 `root` 执行脚本,而 `nvm` 实际装在别的用户目录下:
|
||||||
- 不需要改成 `www` 执行脚本
|
- 不需要改成 `www` 执行脚本
|
||||||
- 直接在 `install_overseas_quick.conf` 里填写:
|
- 直接在 `install_overseas_quick.conf` 里填写:
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ BASE_DIR="/opt/domaincheck"
|
|||||||
DOMAINCHECK_DIR="${BASE_DIR}/domainCheck"
|
DOMAINCHECK_DIR="${BASE_DIR}/domainCheck"
|
||||||
DOMAIN_API_DIR="${BASE_DIR}/domain-api"
|
DOMAIN_API_DIR="${BASE_DIR}/domain-api"
|
||||||
DOMAIN_WEB_DIR="${BASE_DIR}/domain-web"
|
DOMAIN_WEB_DIR="${BASE_DIR}/domain-web"
|
||||||
|
REPO_OWNER=""
|
||||||
|
REPO_OWNER_HOME=""
|
||||||
|
|
||||||
if [[ "${DB_PASSWORD}" == "CHANGE_ME_DB_PASSWORD" ]]; then
|
if [[ "${DB_PASSWORD}" == "CHANGE_ME_DB_PASSWORD" ]]; then
|
||||||
echo "请先修改配置文件中的必填项:DB_PASSWORD"
|
echo "请先修改配置文件中的必填项:DB_PASSWORD"
|
||||||
@@ -47,8 +49,21 @@ if [[ ! -d "${REPO_DIR}/.git" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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 "已检测到仓库目录:${REPO_DIR}"
|
||||||
echo "当前脚本不会执行任何 Git 命令。"
|
echo "当前脚本不会执行任何 Git 命令。"
|
||||||
|
echo "仓库属主:${REPO_OWNER}"
|
||||||
echo "如需更新代码,请先手动切到仓库属主完成 git pull,再重新执行本脚本。"
|
echo "如需更新代码,请先手动切到仓库属主完成 git pull,再重新执行本脚本。"
|
||||||
|
|
||||||
mkdir -p "${BASE_DIR}"
|
mkdir -p "${BASE_DIR}"
|
||||||
@@ -112,52 +127,53 @@ cat >"${DOMAIN_WEB_DIR}/.env.production" <<EOF
|
|||||||
VITE_API_BASE_URL=https://${API_DOMAIN}/api/v1
|
VITE_API_BASE_URL=https://${API_DOMAIN}/api/v1
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cd "${DOMAIN_WEB_DIR}"
|
chown "${REPO_OWNER}:${REPO_OWNER}" "${DOMAIN_WEB_DIR}/.env.production"
|
||||||
NODE_READY=false
|
|
||||||
|
|
||||||
|
cd "${DOMAIN_WEB_DIR}"
|
||||||
|
run_as_repo_owner "
|
||||||
|
set -euo pipefail
|
||||||
|
cd '${DOMAIN_WEB_DIR}'
|
||||||
|
NODE_READY=false
|
||||||
resolve_nvm_dir() {
|
resolve_nvm_dir() {
|
||||||
local candidate
|
local candidate
|
||||||
for candidate in \
|
for candidate in \
|
||||||
"${NODE_NVM_DIR}" \
|
'${NODE_NVM_DIR}' \
|
||||||
"${NVM_DIR:-}" \
|
\"\${NVM_DIR:-}\" \
|
||||||
"/root/.nvm" \
|
'${REPO_OWNER_HOME}/.nvm' \
|
||||||
"/home/www/.nvm" \
|
'/home/www/.nvm' \
|
||||||
"/www/server/nvm" \
|
'/www/server/nvm' \
|
||||||
"/usr/local/nvm"
|
'/usr/local/nvm'
|
||||||
do
|
do
|
||||||
if [[ -n "${candidate}" && -s "${candidate}/nvm.sh" ]]; then
|
if [[ -n \"\${candidate}\" && -s \"\${candidate}/nvm.sh\" ]]; then
|
||||||
echo "${candidate}"
|
echo \"\${candidate}\"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
if RESOLVED_NVM_DIR=\"\$(resolve_nvm_dir)\"; then
|
||||||
if RESOLVED_NVM_DIR="$(resolve_nvm_dir)"; then
|
export NVM_DIR=\"\${RESOLVED_NVM_DIR}\"
|
||||||
export NVM_DIR="${RESOLVED_NVM_DIR}"
|
source \"\${NVM_DIR}/nvm.sh\"
|
||||||
# shellcheck disable=SC1090
|
echo '检测到 nvm:'\"\${NVM_DIR}\"
|
||||||
source "${NVM_DIR}/nvm.sh"
|
nvm install '${NODE_VERSION}'
|
||||||
echo "检测到 nvm:${NVM_DIR}"
|
nvm use '${NODE_VERSION}'
|
||||||
nvm install "${NODE_VERSION}"
|
|
||||||
nvm use "${NODE_VERSION}"
|
|
||||||
NODE_READY=true
|
NODE_READY=true
|
||||||
elif command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
|
elif command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
|
||||||
echo "未检测到 nvm,改用系统已安装的 node/npm"
|
echo '未检测到 nvm,改用系统已安装的 node/npm'
|
||||||
echo "当前 node 版本:$(node -v)"
|
echo '当前 node 版本:'\"\$(node -v)\"
|
||||||
NODE_READY=true
|
NODE_READY=true
|
||||||
fi
|
fi
|
||||||
|
if [[ \"\${NODE_READY}\" != 'true' ]]; then
|
||||||
if [[ "${NODE_READY}" != "true" ]]; then
|
echo '未找到可用的 Node 运行环境。'
|
||||||
echo "未找到可用的 Node 运行环境。"
|
echo '请执行以下任一方案后重试:'
|
||||||
echo "请执行以下任一方案后重试:"
|
echo '1. 为仓库属主安装 nvm,并确保 ~/.nvm/nvm.sh 存在'
|
||||||
echo "1. 用 root 安装 nvm,并确保 /root/.nvm/nvm.sh 存在"
|
echo '2. 在 install_overseas_quick.conf 中填写 NODE_NVM_DIR,例如:/home/www/.nvm'
|
||||||
echo "2. 在 install_overseas_quick.conf 中填写 NODE_NVM_DIR,例如:/home/www/.nvm"
|
echo '3. 预先安装系统全局 node 和 npm'
|
||||||
echo "3. 预先安装系统全局 node 和 npm"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
npm install
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
|
"
|
||||||
|
|
||||||
cp "${DOMAIN_API_DIR}/deploy/multi-region/templates/domaincheck-api.env.example" /etc/default/domaincheck-api
|
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
|
sed -i "s#^DOMAIN_ROOT=.*#DOMAIN_ROOT=${DOMAINCHECK_DIR}#" /etc/default/domaincheck-api
|
||||||
|
|||||||
Reference in New Issue
Block a user