feat: 项目初始化及当前全部内容提交
This commit is contained in:
Executable
+398
@@ -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
|
||||
Reference in New Issue
Block a user