67 lines
2.8 KiB
Bash
Executable File
67 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 从本机(Mac)将 sdk 同步到公司 NAS 并执行 docker compose 部署
|
||
#
|
||
# 使用前请安装 OpenSSH 服务端于 NAS,并开启 Docker/Container Manager。
|
||
#
|
||
# 用法:
|
||
# export NAS_USER=fnvtk # 可选,默认 fnvtk
|
||
# export NAS_HOST=192.168.1.201 # 可选,默认如下
|
||
# export NAS_DIR=/volume1/docker/workphone-sdk # 可选
|
||
# # 若 SSH 用户无 Docker 权限(permission denied docker.sock),先授权(需 DSM 密码):
|
||
# export NAS_SUDO_PASSWORD='你的DSM密码'
|
||
# bash sdk/scripts/deploy_nas_rsync.sh
|
||
#
|
||
# 可选:同步「开发文档」到 NAS 知识库挂载目录(需先在 docker-compose.nas.yml 取消注释挂载)
|
||
# export SYNC_DEV_DOCS=1
|
||
# export NAS_DOCS_DIR=/volume1/docker/workphone-docs
|
||
|
||
set -euo pipefail
|
||
|
||
NAS_HOST="${NAS_HOST:-192.168.1.201}"
|
||
NAS_USER="${NAS_USER:-fnvtk}"
|
||
NAS_DIR="${NAS_DIR:-/volume1/docker/workphone-sdk}"
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
SDK_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
REPO_ROOT="$(cd "$SDK_ROOT/.." && pwd)"
|
||
|
||
if [[ -n "${NAS_SUDO_PASSWORD:-}" ]]; then
|
||
echo ">>> 修正 docker.sock 权限(sudo,与 DSM 登录密码一致)…"
|
||
if ! ssh -o StrictHostKeyChecking=no "${NAS_USER}@${NAS_HOST}" \
|
||
"sudo -S sh -c 'chgrp administrators /var/run/docker.sock && chmod g+rw /var/run/docker.sock && ls -la /var/run/docker.sock'" \
|
||
<<< "$NAS_SUDO_PASSWORD"; then
|
||
echo "sudo 失败:请确认 NAS_SUDO_PASSWORD 为 ${NAS_USER} 的 DSM 登录密码。"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
echo ">>> rsync sdk/ -> ${NAS_USER}@${NAS_HOST}:${NAS_DIR}/"
|
||
ssh "${NAS_USER}@${NAS_HOST}" "mkdir -p '${NAS_DIR}'"
|
||
rsync -avz \
|
||
--exclude '.git' \
|
||
--exclude '__pycache__' \
|
||
--exclude '*.pyc' \
|
||
--exclude 'node_modules' \
|
||
"${SDK_ROOT}/" "${NAS_USER}@${NAS_HOST}:${NAS_DIR}/"
|
||
|
||
if [[ "${SYNC_DEV_DOCS:-0}" == "1" ]]; then
|
||
NAS_DOCS_DIR="${NAS_DOCS_DIR:-/volume1/docker/workphone-docs}"
|
||
echo ">>> rsync 开发文档/ -> ${NAS_USER}@${NAS_HOST}:${NAS_DOCS_DIR}/开发文档/"
|
||
if [[ ! -d "${REPO_ROOT}/开发文档" ]]; then
|
||
echo "未找到 ${REPO_ROOT}/开发文档,跳过。"
|
||
else
|
||
ssh "${NAS_USER}@${NAS_HOST}" "mkdir -p '${NAS_DOCS_DIR}'"
|
||
rsync -avz "${REPO_ROOT}/开发文档/" "${NAS_USER}@${NAS_HOST}:${NAS_DOCS_DIR}/开发文档/"
|
||
fi
|
||
fi
|
||
|
||
echo ">>> 远程构建并启动容器…"
|
||
ssh -o StrictHostKeyChecking=no "${NAS_USER}@${NAS_HOST}" \
|
||
"export PATH=\"/usr/local/bin:\$PATH\" && cd '${NAS_DIR}' && docker compose -f docker-compose.nas.yml up -d --build"
|
||
|
||
echo ""
|
||
echo "部署命令已下发。内网访问地址(将 NAS_HOST 换成实际 IP):"
|
||
echo " 控制台: http://${NAS_HOST}:8880/hub"
|
||
echo " SDK API: http://${NAS_HOST}:8899"
|
||
echo ""
|
||
echo "若页面打不开:检查 NAS 防火墙是否放行 8880、8899; DSM「登录门户」勿占用同端口。"
|