Files
workphone-sdk/sdk/scripts/deploy_nas_rsync.sh
Manus AI 42fe10401a 1
1
2026-05-24 17:50:04 +08:00

67 lines
2.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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「登录门户」勿占用同端口。"