Files
sanguo_vnpy_v2/docker/deploy-synology.sh
T
claude_dev 918bbed0fc fix: 修复登录500错误和移除明文密码提示
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service)
- 移除登录页面上的明文密码提示
- 改进前端错误处理,避免数据加载失败导致登录显示错误
2026-07-02 12:23:55 +08:00

283 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
# Sanguo VeighNa Synology NAS 快速部署脚本
# 用于在 Synology NAS 上快速部署和配置
set -e
# ============================================
# 颜色定义
# ============================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# ============================================
# 日志函数
# ============================================
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# ============================================
# 打印 Banner
# ============================================
print_banner() {
cat << "EOF"
╔════════════════════════════════════════════════════════════╗
║ ║
║ _____ ____ ____ _ _____ _ ___ _ ║
| __ \ / __ \ / __ \ | ||_ _|__ _| | |_ _|___| |
| |__) | | | | | | |_| | |/ _` | |_____|| | _ \ |
| ___/| | | | | | |_ | | (_| | |_____| | || |||
|_| | |__| | \___/\__| |\_____|_| |___||_||_|
\____/ ║
║ ║
║ Synology NAS 部署脚本 v1.0.0 ║
║ ║
╚════════════════════════════════════════════════════════════╝
EOF
}
# ============================================
# 检查权限
# ============================================
check_permission() {
log_step "检查执行权限..."
if [ "$EUID" -ne 0 ]; then
log_error "请使用 sudo 运行此脚本"
echo "用法: sudo bash deploy-synology.sh"
exit 1
fi
log_info "权限检查通过"
}
# ============================================
# 加载配置
# ============================================
load_config() {
log_step "加载配置..."
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 设置默认值
DATA_DIR=${DATA_DIR:-/volume1/docker/stock/sanguo_vnpy}
HTTP_PORT=${HTTP_PORT:-8000}
WS_PORT=${WS_PORT:-8080}
TZ=${TZ:-Asia/Shanghai}
# 尝试加载 .env 文件
if [ -f "$SCRIPT_DIR/.env" ]; then
log_info "从 .env 文件加载配置..."
source "$SCRIPT_DIR/.env"
else
log_warn ".env 文件不存在,使用默认配置"
if [ -f "$SCRIPT_DIR/.env.example" ]; then
log_info "从 .env.example 创建 .env 文件..."
cp "$SCRIPT_DIR/.env.example" "$SCRIPT_DIR/.env"
log_warn "请编辑 .env 文件配置您的环境"
log_info "配置完成后重新运行此脚本"
exit 0
fi
fi
log_info "配置加载完成"
log_info "数据目录: $DATA_DIR"
log_info "HTTP 端口: $HTTP_PORT"
log_info "WebSocket 端口: $WS_PORT"
log_info "时区: $TZ"
}
# ============================================
# 检查 Docker
# ============================================
check_docker() {
log_step "检查 Docker 环境..."
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装"
log_info "请在 DSM 中安装 Container Manager 套件"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose 未安装"
exit 1
fi
log_info "Docker 环境检查通过"
}
# ============================================
# 创建数据目录
# ============================================
create_directories() {
log_step "创建数据目录..."
# 主目录
mkdir -p "$DATA_DIR"
# 子目录
mkdir -p "$DATA_DIR/data"
mkdir -p "$DATA_DIR/logs"
mkdir -p "$DATA_DIR/config"
mkdir -p "$DATA_DIR/temp"
mkdir -p "$DATA_DIR/redis"
mkdir -p "$DATA_DIR/nginx"
mkdir -p "$DATA_DIR/nginx/ssl"
# 设置权限
chmod -R 755 "$DATA_DIR"
log_info "数据目录创建完成: $DATA_DIR"
}
# ============================================
# 备份现有数据
# ============================================
backup_data() {
log_step "检查是否需要备份..."
if [ -d "$DATA_DIR/data" ] && [ "$(ls -A $DATA_DIR/data 2>/dev/null)" ]; then
BACKUP_DIR="/volume1/Backup"
mkdir -p "$BACKUP_DIR"
BACKUP_FILE="$BACKUP_DIR/vnpy_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
log_warn "检测到现有数据,创建备份..."
tar czf "$BACKUP_FILE" -C "$DATA_DIR" .
log_info "备份已创建: $BACKUP_FILE"
log_info "备份大小: $(du -h $BACKUP_FILE | cut -f1)"
else
log_info "未检测到现有数据,跳过备份"
fi
}
# ============================================
# 构建 Docker 镜像
# ============================================
build_image() {
log_step "构建 Docker 镜像..."
cd "$SCRIPT_DIR"
log_info "开始构建(这可能需要几分钟)..."
docker-compose build
log_info "Docker 镜像构建完成"
}
# ============================================
# 启动服务
# ============================================
start_services() {
log_step "启动服务..."
cd "$SCRIPT_DIR"
# 停止现有服务(如果有)
if docker-compose ps | grep -q "Up"; then
log_warn "检测到运行中的服务,先停止..."
docker-compose down
fi
# 启动服务
log_info "启动服务..."
docker-compose up -d
log_info "服务启动完成"
}
# ============================================
# 检查服务状态
# ============================================
check_status() {
log_step "检查服务状态..."
cd "$SCRIPT_DIR"
# 等待服务启动
sleep 5
# 检查容器状态
docker-compose ps
echo ""
log_info "检查服务日志(最后 20 行):"
docker-compose logs --tail=20 vnpy
}
# ============================================
# 显示访问信息
# ============================================
show_access_info() {
log_step "部署完成!"
echo ""
echo "=========================================="
log_info "访问地址:"
echo ""
echo " HTTP: http://$(hostname -I | awk '{print $1}'):$HTTP_PORT"
echo " WebSocket: ws://$(hostname -I | awk '{print $1}'):$WS_PORT"
echo ""
log_info "默认登录凭据:"
echo ""
echo " 用户名: admin"
echo " 密码: admin123"
echo ""
log_warn "重要提示:"
echo " 1. 请立即修改默认密码"
echo " 2. 数据目录: $DATA_DIR"
echo " 3. 查看日志: docker-compose logs -f"
echo " 4. 停止服务: docker-compose down"
echo "=========================================="
echo ""
}
# ============================================
# 主函数
# ============================================
main() {
print_banner
echo ""
check_permission
load_config
check_docker
create_directories
backup_data
build_image
start_services
check_status
show_access_info
log_info "部署脚本执行完成!"
}
# ============================================
# 信号处理
# ============================================
trap 'log_error "脚本被中断"; exit 1' SIGINT SIGTERM
# ============================================
# 执行主函数
# ============================================
main "$@"