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
+240
View File
@@ -0,0 +1,240 @@
#!/bin/bash
# 情绪博物馆快速部署脚本
# 适用于服务器快速部署
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_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检查系统环境
check_system() {
log_step "检查系统环境..."
# 检查操作系统
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
log_info "检测到Linux系统"
elif [[ "$OSTYPE" == "darwin"* ]]; then
log_info "检测到macOS系统"
else
log_warn "未知操作系统: $OSTYPE"
fi
# 检查Docker
if ! command -v docker &> /dev/null; then
log_error "Docker未安装,正在安装..."
install_docker
else
log_info "Docker已安装: $(docker --version)"
fi
# 检查Docker Compose
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose未安装,正在安装..."
install_docker_compose
else
log_info "Docker Compose已安装: $(docker-compose --version)"
fi
}
# 安装Docker
install_docker() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Ubuntu/Debian
if command -v apt-get &> /dev/null; then
log_info "在Ubuntu/Debian上安装Docker..."
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# CentOS/RHEL
elif command -v yum &> /dev/null; then
log_info "在CentOS/RHEL上安装Docker..."
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
fi
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 添加用户到docker组
sudo usermod -aG docker $USER
log_warn "请重新登录以使docker组权限生效"
else
log_error "请手动安装Docker: https://docs.docker.com/get-docker/"
exit 1
fi
}
# 安装Docker Compose
install_docker_compose() {
log_info "安装Docker Compose..."
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
}
# 配置防火墙
configure_firewall() {
log_step "配置防火墙..."
if command -v ufw &> /dev/null; then
log_info "配置UFW防火墙..."
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8848/tcp # Nacos
sudo ufw allow 9000/tcp # Gateway
log_info "防火墙配置完成"
elif command -v firewall-cmd &> /dev/null; then
log_info "配置firewalld防火墙..."
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=8848/tcp
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --reload
log_info "防火墙配置完成"
else
log_warn "未检测到防火墙,请手动开放端口: 80, 443, 8848, 9000"
fi
}
# 优化系统参数
optimize_system() {
log_step "优化系统参数..."
# 增加文件描述符限制
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
# 优化内核参数
cat << EOF | sudo tee -a /etc/sysctl.conf
# 情绪博物馆优化参数
vm.max_map_count=262144
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.core.netdev_max_backlog=5000
EOF
sudo sysctl -p
log_info "系统参数优化完成"
}
# 创建SSL证书目录
setup_ssl() {
log_step "设置SSL证书..."
mkdir -p deploy/nginx/ssl
# 生成自签名证书(仅用于测试)
if [ ! -f "deploy/nginx/ssl/emotion-museum.crt" ]; then
log_info "生成自签名SSL证书..."
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout deploy/nginx/ssl/emotion-museum.key \
-out deploy/nginx/ssl/emotion-museum.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=EmotionMuseum/CN=emotion-museum.com"
log_warn "已生成自签名证书,生产环境请使用正式证书"
fi
}
# 设置环境变量
setup_environment() {
log_step "设置环境变量..."
# 创建.env文件
cat > .env << EOF
# 数据库配置
MYSQL_ROOT_PASSWORD=123456
MYSQL_DATABASE=emotion_museum
MYSQL_USER=emotion
MYSQL_PASSWORD=emotion123
# Redis配置
REDIS_PASSWORD=
# Nacos配置
NACOS_AUTH_ENABLE=false
# 应用配置
SPRING_PROFILES_ACTIVE=docker
TZ=Asia/Shanghai
# Coze API配置 (与开发环境一致)
COZE_API_TOKEN=pat_GCR4qKzqpf90wMCvKsldMrB18KG3QsLDci65bZthssKsbLxu8X70BKYumleDcabO
EOF
log_info "环境变量配置完成"
log_warn "请编辑.env文件,设置正确的Coze API Token"
}
# 主部署流程
main() {
echo "🚀 开始快速部署情绪博物馆..."
echo ""
check_system
configure_firewall
optimize_system
setup_ssl
setup_environment
log_step "开始容器部署..."
chmod +x deploy.sh
./deploy.sh
echo ""
log_info "🎉 快速部署完成!"
echo ""
echo "📝 后续步骤:"
echo "1. 编辑.env文件,设置正确的Coze API Token"
echo "2. 如需HTTPS,请替换deploy/nginx/ssl/目录下的证书文件"
echo "3. 根据需要修改deploy/nginx/conf.d/emotion-museum.conf中的域名"
echo "4. 重启服务: docker-compose restart"
echo ""
echo "🔗 访问地址:"
echo " HTTP: http://$(hostname -I | awk '{print $1}')"
echo " HTTPS: https://$(hostname -I | awk '{print $1}') (自签名证书)"
echo ""
}
# 处理命令行参数
case "${1:-}" in
"install-docker")
install_docker
;;
"install-compose")
install_docker_compose
;;
"setup-ssl")
setup_ssl
;;
"setup-env")
setup_environment
;;
*)
main
;;
esac