171 lines
4.2 KiB
Bash
171 lines
4.2 KiB
Bash
|
|
#!/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 "$@"
|