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