feat: 项目初始化及当前全部内容提交

This commit is contained in:
2025-07-15 17:37:50 +08:00
parent ec817067f1
commit e78f192d34
622 changed files with 75174 additions and 383 deletions
+398
View File
@@ -0,0 +1,398 @@
#!/bin/bash
# 情绪博物馆服务器一键安装脚本
# 适用于全新的Linux服务器
# 支持 Ubuntu/Debian/CentOS/RHEL
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 配置变量
PACKAGE_URL="https://github.com/your-repo/releases/download/v1.0.0/emotion-museum-1.0.0-20250713_111829.tar.gz"
PACKAGE_SHA256="900d585f575b1619e74296496e2fe22f2c2e71b6ad8901d7cab82634765cc10d"
INSTALL_DIR="/opt/emotion-museum"
SERVICE_USER="emotion"
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"
}
# 检查是否为root用户
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "此脚本需要root权限运行"
echo "请使用: sudo $0"
exit 1
fi
}
# 检测操作系统
detect_os() {
if [[ -f /etc/os-release ]]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
else
log_error "无法检测操作系统"
exit 1
fi
log_info "检测到操作系统: $OS $VER"
}
# 更新系统包
update_system() {
log_step "更新系统包..."
if [[ "$OS" == *"Ubuntu"* ]] || [[ "$OS" == *"Debian"* ]]; then
apt-get update
apt-get upgrade -y
apt-get install -y curl wget git unzip
elif [[ "$OS" == *"CentOS"* ]] || [[ "$OS" == *"Red Hat"* ]]; then
yum update -y
yum install -y curl wget git unzip
else
log_warn "未知的操作系统,请手动安装必要的软件包"
fi
}
# 安装Docker
install_docker() {
log_step "安装Docker..."
if command -v docker &> /dev/null; then
log_info "Docker已安装: $(docker --version)"
return
fi
# 使用官方安装脚本
curl -fsSL https://get.docker.com | sh
# 启动Docker服务
systemctl start docker
systemctl enable docker
# 创建docker组并添加用户
groupadd -f docker
log_info "Docker安装完成"
}
# 安装Docker Compose
install_docker_compose() {
log_step "安装Docker Compose..."
if command -v docker-compose &> /dev/null; then
log_info "Docker Compose已安装: $(docker-compose --version)"
return
fi
# 下载Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 创建软链接
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
log_info "Docker Compose安装完成"
}
# 配置防火墙
configure_firewall() {
log_step "配置防火墙..."
if command -v ufw &> /dev/null; then
# Ubuntu/Debian UFW
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
log_info "UFW防火墙配置完成"
elif command -v firewall-cmd &> /dev/null; then
# CentOS/RHEL firewalld
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
log_info "firewalld防火墙配置完成"
else
log_warn "未检测到防火墙,请手动配置"
fi
}
# 创建服务用户
create_service_user() {
log_step "创建服务用户..."
if id "$SERVICE_USER" &>/dev/null; then
log_info "用户 $SERVICE_USER 已存在"
else
useradd -r -s /bin/bash -d "$INSTALL_DIR" "$SERVICE_USER"
usermod -aG docker "$SERVICE_USER"
log_info "用户 $SERVICE_USER 创建完成"
fi
}
# 下载部署包
download_package() {
log_step "下载部署包..."
# 创建安装目录
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"
# 下载部署包
if [[ -n "$PACKAGE_URL" ]]; then
log_info "从URL下载部署包..."
wget -O emotion-museum.tar.gz "$PACKAGE_URL"
else
log_error "请提供部署包URL或手动上传部署包到 $INSTALL_DIR"
echo "手动上传后请运行: $0 --install-only"
exit 1
fi
# 验证校验和
if [[ -n "$PACKAGE_SHA256" ]]; then
echo "$PACKAGE_SHA256 emotion-museum.tar.gz" | sha256sum -c
if [[ $? -eq 0 ]]; then
log_info "部署包校验通过"
else
log_error "部署包校验失败"
exit 1
fi
fi
# 解压部署包
tar -xzf emotion-museum.tar.gz
rm emotion-museum.tar.gz
# 查找解压后的目录
EXTRACT_DIR=$(find . -maxdepth 1 -type d -name "emotion-museum-*" | head -n 1)
if [[ -n "$EXTRACT_DIR" ]]; then
mv "$EXTRACT_DIR"/* .
rmdir "$EXTRACT_DIR"
fi
# 设置权限
chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR"
chmod +x *.sh
log_info "部署包下载和解压完成"
}
# 配置环境
configure_environment() {
log_step "配置环境..."
cd "$INSTALL_DIR"
# 复制环境变量模板
if [[ ! -f .env ]]; then
cat > .env << 'EOF'
# 数据库配置
MYSQL_ROOT_PASSWORD=EmotionMuseum2024!
MYSQL_DATABASE=emotion_museum
MYSQL_USER=emotion
MYSQL_PASSWORD=EmotionDB2024!
# Redis配置
REDIS_PASSWORD=
# Nacos配置
NACOS_AUTH_ENABLE=false
# 应用配置
SPRING_PROFILES_ACTIVE=docker
TZ=Asia/Shanghai
# Coze API配置 (与开发环境一致)
COZE_API_TOKEN=pat_GCR4qKzqpf90wMCvKsldMrB18KG3QsLDci65bZthssKsbLxu8X70BKYumleDcabO
EOF
fi
log_info "环境配置完成"
log_warn "请编辑 $INSTALL_DIR/.env 文件,设置正确的Coze API Token"
}
# 创建系统服务
create_systemd_service() {
log_step "创建系统服务..."
cat > /etc/systemd/system/emotion-museum.service << EOF
[Unit]
Description=Emotion Museum Application
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=$INSTALL_DIR
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
User=$SERVICE_USER
Group=$SERVICE_USER
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable emotion-museum
log_info "系统服务创建完成"
}
# 启动服务
start_services() {
log_step "启动服务..."
cd "$INSTALL_DIR"
# 切换到服务用户执行
sudo -u "$SERVICE_USER" ./deploy.sh
log_info "服务启动完成"
}
# 验证部署
verify_deployment() {
log_step "验证部署..."
sleep 30 # 等待服务启动
# 检查服务状态
cd "$INSTALL_DIR"
sudo -u "$SERVICE_USER" ./manage.sh status
# 健康检查
sudo -u "$SERVICE_USER" ./manage.sh health
log_info "部署验证完成"
}
# 显示部署信息
show_deployment_info() {
local server_ip=$(curl -s ifconfig.me 2>/dev/null || echo "unknown")
echo ""
log_info "🎉 情绪博物馆部署完成!"
echo ""
echo "📱 访问地址:"
echo " 前端应用: http://$server_ip"
echo " API网关: http://$server_ip:9000"
echo " Nacos: http://$server_ip:8848/nacos (nacos/nacos)"
echo ""
echo "📁 安装目录: $INSTALL_DIR"
echo "👤 服务用户: $SERVICE_USER"
echo ""
echo "🔧 管理命令:"
echo " cd $INSTALL_DIR"
echo " sudo -u $SERVICE_USER ./manage.sh status # 查看状态"
echo " sudo -u $SERVICE_USER ./manage.sh logs # 查看日志"
echo " sudo -u $SERVICE_USER ./manage.sh restart # 重启服务"
echo ""
echo "⚠️ 重要提醒:"
echo " 1. 请编辑 $INSTALL_DIR/.env 文件,设置正确的Coze API Token"
echo " 2. 生产环境请修改数据库密码"
echo " 3. 建议配置HTTPS证书"
echo ""
}
# 主安装流程
main_install() {
echo "🚀 开始安装情绪博物馆..."
echo ""
check_root
detect_os
update_system
install_docker
install_docker_compose
configure_firewall
create_service_user
download_package
configure_environment
create_systemd_service
start_services
verify_deployment
show_deployment_info
}
# 仅安装(假设部署包已存在)
install_only() {
echo "🚀 开始安装情绪博物馆(跳过下载)..."
echo ""
check_root
detect_os
update_system
install_docker
install_docker_compose
configure_firewall
create_service_user
# 检查部署包是否存在
if [[ ! -f "$INSTALL_DIR/deploy.sh" ]]; then
log_error "部署包不存在,请先上传部署包到 $INSTALL_DIR"
exit 1
fi
configure_environment
create_systemd_service
start_services
verify_deployment
show_deployment_info
}
# 显示帮助信息
show_help() {
echo "情绪博物馆服务器安装脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --install-only 仅安装(跳过下载,假设部署包已存在)"
echo " --help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 # 完整安装(包括下载)"
echo " $0 --install-only # 仅安装(跳过下载)"
echo ""
}
# 处理命令行参数
case "${1:-}" in
"--install-only")
install_only
;;
"--help")
show_help
;;
"")
main_install
;;
*)
echo "未知选项: $1"
show_help
exit 1
;;
esac