#!/bin/bash # X-Server Mobile 1Panel 静态站点部署脚本 # 使用方法: ./deploy-1panel.sh [server] set -e # ============================================ # 配置 # ============================================ SERVER=${1:-"your-server-ip"} DEPLOY_USER="root" FRONTEND_BUILD_DIR="./frontend/dist" BACKEND_SOURCE_DIR="./backend" # 1Panel 网站目录 REMOTE_ROOT="/www/sites/uniservice-mobile.hnxinyouhe.com/index" # 后端部署目录 REMOTE_BACKEND_DIR="/opt/x-server-mobile/backend" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' 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" } # ============================================ # 检查环境 # ============================================ check_env() { log_info "检查部署环境..." if ! command -v rsync &> /dev/null; then log_error "rsync 未安装,请先安装: apt-get install rsync" exit 1 fi if [ ! -d "$FRONTEND_BUILD_DIR" ]; then log_error "前端构建目录不存在: $FRONTEND_BUILD_DIR" log_info "请先运行: cd frontend && npm install && npm run build" exit 1 fi log_info "✓ 环境检查通过" } # ============================================ # 构建前端 # ============================================ build_frontend() { log_info "构建前端..." cd frontend npm run build cd .. log_info "✓ 前端构建完成" } # ============================================ # 部署前端(上传静态文件) # ============================================ deploy_frontend() { log_info "部署前端到 1Panel 静态站点..." rsync -avz --delete \ --exclude='*.map' \ ${FRONTEND_BUILD_DIR}/ \ ${DEPLOY_USER}@${SERVER}:${REMOTE_ROOT}/ log_info "✓ 前端部署完成" } # ============================================ # 部署后端 # ============================================ deploy_backend() { log_info "部署后端..." # 创建后端目录(如果不存在) ssh ${DEPLOY_USER}@${SERVER} "mkdir -p ${REMOTE_BACKEND_DIR}" rsync -avz \ --exclude='vendor' \ --exclude='runtime' \ --exclude='.git' \ ${BACKEND_SOURCE_DIR}/ \ ${DEPLOY_USER}@${SERVER}:${REMOTE_BACKEND_DIR}/ log_info "✓ 后端部署完成" } # ============================================ # 重启后端容器 # ============================================ restart_backend() { log_info "重启后端容器..." ssh ${DEPLOY_USER}@${SERVER} << 'EOF' cd /opt/x-server-mobile # 停止旧容器 docker-compose -f deploy/docker-compose.prod.yml down # 启动新容器 docker-compose -f deploy/docker-compose.prod.yml up -d # 查看容器状态 docker ps | grep x-server echo "✓ 后端容器重启完成" EOF } # ============================================ # 主流程 # ============================================ main() { echo "==========================================" echo " X-Server Mobile 1Panel 部署脚本" echo "==========================================" echo "" echo "目标服务器: ${SERVER}" echo "" # 检查环境 check_env # 询问是否构建前端 read -p "是否需要构建前端? (y/N): " build_frontend_choice if [[ $build_frontend_choice =~ ^[Yy]$ ]]; then build_frontend fi # 部署前端 deploy_frontend # 询问是否部署后端 read -p "是否需要部署后端? (y/N): " deploy_backend_choice if [[ $deploy_backend_choice =~ ^[Yy]$ ]]; then deploy_backend restart_backend fi echo "" log_info "==========================================" log_info "部署完成!" log_info "==========================================" echo "" echo "访问地址: https://uniservice-mobile.hnxinyouhe.com" echo "" echo "后续步骤:" echo "1. 在 1Panel 面板中找到网站配置" echo "2. 将 deploy/nginx-1panel.conf 的内容添加到 Nginx 配置中" echo "3. 重载 Nginx 配置" echo "" } # 执行主流程 main "$@"