feat: 添加域名一键部署脚本

This commit is contained in:
2026-03-18 00:07:59 +08:00
parent 5f77e1da3a
commit 035923a634
+252
View File
@@ -0,0 +1,252 @@
#!/bin/bash
# Author: huazhongmin
# Created: 2026-03-17
# Purpose: 域名一键部署脚本 - 支持 SSL 证书申请、前端、后端、nginx 配置部署
# 情绪博物馆 - 域名部署脚本
# 域名:lifescript.happylifeos.com
# 使用方法:bash deploy-to-prod.sh [ssl|frontend|admin|life-script|backend|nginx|all]
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
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_section() {
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} $1"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
}
# 服务器配置
SERVER_IP="101.200.208.45"
USERNAME="root"
DOMAIN="lifescript.happylifeos.com"
# SSL 证书申请
deploy_ssl() {
log_section "申请 SSL 证书"
if [ ! -f "tools/deploy-ssl-cert.py" ]; then
log_error "SSL 证书脚本不存在:tools/deploy-ssl-cert.py"
return 1
fi
log_info "在服务器上执行 SSL 证书申请..."
scp tools/deploy-ssl-cert.py ${USERNAME}@${SERVER_IP}:/tmp/deploy-ssl-cert.py
ssh ${USERNAME}@${SERVER_IP} "python3 /tmp/deploy-ssl-cert.py"
if [ $? -eq 0 ]; then
log_info "✅ SSL 证书申请完成"
return 0
else
log_error "❌ SSL 证书申请失败"
return 1
fi
}
# 部署后端
deploy_backend() {
log_section "部署后端服务"
if [ ! -f "backend-single/deploy.sh" ]; then
log_error "后端部署脚本不存在"
return 1
fi
log_info "执行后端部署..."
cd backend-single
bash deploy.sh remote
local result=$?
cd ..
if [ $result -eq 0 ]; then
log_info "✅ 后端部署完成"
return 0
else
log_error "❌ 后端部署失败"
return 1
fi
}
# 部署前端
deploy_frontend() {
log_section "部署用户前端"
if [ ! -f "web/deploy.sh" ]; then
log_error "前端部署脚本不存在"
return 1
fi
log_info "执行前端部署..."
cd web
bash deploy.sh
local result=$?
cd ..
if [ $result -eq 0 ]; then
log_info "✅ 前端部署完成"
return 0
else
log_error "❌ 前端部署失败"
return 1
fi
}
# 部署管理后台
deploy_admin() {
log_section "部署管理后台"
if [ ! -f "web-admin/deploy.sh" ]; then
log_error "管理后台部署脚本不存在"
return 1
fi
log_info "执行管理后台部署..."
cd web-admin
bash deploy.sh
local result=$?
cd ..
if [ $result -eq 0 ]; then
log_info "✅ 管理后台部署完成"
return 0
else
log_error "❌ 管理后台部署失败"
return 1
fi
}
# 部署 Life-Script
deploy_life_script() {
log_section "部署 Life-Script"
if [ ! -f "life-script/deploy.sh" ]; then
log_error "Life-Script 部署脚本不存在"
return 1
fi
log_info "执行 Life-Script 部署..."
cd life-script
bash deploy.sh
local result=$?
cd ..
if [ $result -eq 0 ]; then
log_info "✅ Life-Script 部署完成"
return 0
else
log_error "❌ Life-Script 部署失败"
return 1
fi
}
# 部署 Nginx 配置
deploy_nginx() {
log_section "部署 Nginx 配置"
if [ ! -f "conf/emotion-museum.conf" ]; then
log_error "Nginx 配置文件不存在"
return 1
fi
log_info "上传 Nginx 配置文件..."
scp conf/emotion-museum.conf ${USERNAME}@${SERVER_IP}:/etc/nginx/sites-available/${DOMAIN}.conf
log_info "启用站点配置..."
ssh ${USERNAME}@${SERVER_IP} "ln -snf /etc/nginx/sites-available/${DOMAIN}.conf /etc/nginx/sites-enabled/${DOMAIN}.conf"
log_info "移除默认配置(如果存在冲突)..."
ssh ${USERNAME}@${SERVER_IP} "rm -f /etc/nginx/sites-enabled/default"
log_info "验证 Nginx 配置..."
if ssh ${USERNAME}@${SERVER_IP} "nginx -t"; then
log_info "Nginx 配置验证通过"
ssh ${USERNAME}@${SERVER_IP} "systemctl reload nginx"
log_info "✅ Nginx 配置重载完成"
return 0
else
log_error "❌ Nginx 配置验证失败"
return 1
fi
}
# 主程序
main() {
DEPLOY_TYPE="${1:-all}"
log_section "情绪博物馆 - 域名部署"
log_info "域名:https://${DOMAIN}"
log_info "部署类型:${DEPLOY_TYPE}"
log_info "部署时间:$(date '+%Y-%m-%d %H:%M:%S')"
case "$DEPLOY_TYPE" in
ssl)
deploy_ssl
;;
backend)
deploy_backend
;;
frontend)
deploy_frontend
;;
admin)
deploy_admin
;;
life-script)
deploy_life_script
;;
nginx)
deploy_nginx
;;
all)
deploy_ssl
deploy_nginx
deploy_backend
deploy_frontend
deploy_admin
deploy_life_script
;;
*)
log_error "无效的部署类型:$DEPLOY_TYPE"
echo "使用方法:bash deploy-to-prod.sh [ssl|backend|frontend|admin|life-script|nginx|all]"
exit 1
;;
esac
log_section "部署完成"
if [ "$DEPLOY_TYPE" = "all" ] || [ "$DEPLOY_TYPE" = "ssl" ]; then
log_info "📋 验证 SSL 证书:运行 python3 tools/deploy-ssl-cert.py --verify"
fi
if [ "$DEPLOY_TYPE" = "all" ] || [ "$DEPLOY_TYPE" = "nginx" ]; then
log_info "🌐 访问地址:"
log_info " 用户前端:https://${DOMAIN}/"
log_info " 管理后台:https://${DOMAIN}/emotion-museum-admin/"
log_info " Life-Script: https://${DOMAIN}/life-script/"
log_info " API 地址:https://${DOMAIN}/api"
log_info " WebSocket: wss://${DOMAIN}/ws"
fi
}
main "$@"