"refactor(backend): 移除未使用的redis、socket.io和sqlite3依赖"包括:
- `backend/.env.production`:生产环境变量配置 - `backend/ecosystem.config.js`:PM2生态系统配置文件 - `scripts/nginx-aijianhua.conf`:Nginx配置文件 - `scripts/server-deploy.sh`:服务器部署脚本 - `scripts/sync-to-server.sh`:代码同步脚本 - `docs/生产环境部署指南.md`:生产环境部署指南文档 同时移除了`package.json`中不再使用的依赖项:- `redis`- `socket.io` - `sqlite3`这些更改将有助于简化生产环境的部署流程,并确保服务能够稳定运行。```
This commit is contained in:
119
scripts/nginx-aijianhua.conf
Normal file
119
scripts/nginx-aijianhua.conf
Normal file
@@ -0,0 +1,119 @@
|
||||
# 爱鉴花小程序后端API服务Nginx配置
|
||||
# 域名: wapi.aijianhua.com
|
||||
# SSL证书配置
|
||||
|
||||
upstream aijianhua_backend {
|
||||
server 127.0.0.1:3330;
|
||||
keepalive 64;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name wapi.aijianhua.com;
|
||||
|
||||
# HTTP重定向到HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name wapi.aijianhua.com;
|
||||
|
||||
# SSL证书配置 - 需要替换为实际证书路径
|
||||
ssl_certificate /etc/nginx/ssl/wapi.aijianhua.com.crt;
|
||||
ssl_certificate_key /etc/nginx/ssl/wapi.aijianhua.com.key;
|
||||
|
||||
# SSL优化配置
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 10m;
|
||||
ssl_session_tickets off;
|
||||
|
||||
# 安全头
|
||||
add_header X-Frame-Options DENY;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
|
||||
|
||||
# 静态文件服务配置
|
||||
location /uploads/ {
|
||||
alias /data/nodejs/aijianhua/uploads/;
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
|
||||
# 安全限制
|
||||
client_max_body_size 50M;
|
||||
|
||||
# 防盗链
|
||||
valid_referers none blocked server_names ~(\.aijianhua\.com$);
|
||||
if ($invalid_referer) {
|
||||
return 403;
|
||||
}
|
||||
}
|
||||
|
||||
# API代理配置
|
||||
location /api/ {
|
||||
proxy_pass http://aijianhua_backend;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# 超时配置
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
|
||||
# 缓冲区配置
|
||||
proxy_buffering on;
|
||||
proxy_buffer_size 16k;
|
||||
proxy_buffers 4 32k;
|
||||
|
||||
# 禁用缓存
|
||||
proxy_cache off;
|
||||
}
|
||||
|
||||
# Swagger文档
|
||||
location /api-docs/ {
|
||||
proxy_pass http://aijianhua_backend/api-docs/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
# 健康检查
|
||||
location /health {
|
||||
proxy_pass http://aijianhua_backend/health;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
# 根路径重定向到API文档
|
||||
location = / {
|
||||
return 302 /api-docs;
|
||||
}
|
||||
|
||||
# 日志配置
|
||||
access_log /var/log/nginx/aijianhua_access.log main;
|
||||
error_log /var/log/nginx/aijianhua_error.log warn;
|
||||
}
|
||||
|
||||
# 安全配置
|
||||
# 禁止访问隐藏文件
|
||||
location ~ /\.(?!well-known) {
|
||||
deny all;
|
||||
}
|
||||
|
||||
# 禁止访问敏感文件
|
||||
location ~* \.(env|git|sql|bak|old|orig|save|swp)$ {
|
||||
deny all;
|
||||
}
|
||||
85
scripts/server-deploy.sh
Normal file
85
scripts/server-deploy.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 爱鉴花后端服务器部署脚本
|
||||
# 在CentOS服务器上执行
|
||||
|
||||
SERVER_DIR="/data/nodejs/aijianhua"
|
||||
LOG_DIR="$SERVER_DIR/logs"
|
||||
UPLOAD_DIR="$SERVER_DIR/uploads"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}🚀 开始部署爱鉴花后端服务...${NC}"
|
||||
|
||||
# 检查Node.js是否安装
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo -e "${RED}❌ Node.js 未安装,请先安装 Node.js${NC}"
|
||||
echo "安装命令: curl -fsSL https://rpm.nodesource.com/setup_18.x | bash - && yum install -y nodejs"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查PM2是否安装
|
||||
if ! command -v pm2 &> /dev/null; then
|
||||
echo -e "${YELLOW}⚠️ PM2 未安装,正在安装...${NC}"
|
||||
npm install -g pm2
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}❌ PM2 安装失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✅ PM2 安装成功${NC}"
|
||||
fi
|
||||
|
||||
# 创建必要的目录
|
||||
mkdir -p "$LOG_DIR" "$UPLOAD_DIR"
|
||||
echo -e "${GREEN}✅ 创建日志和上传目录${NC}"
|
||||
|
||||
# 进入项目目录
|
||||
cd "$SERVER_DIR"
|
||||
|
||||
# 安装生产依赖
|
||||
echo -e "${YELLOW}📦 安装生产依赖...${NC}"
|
||||
npm install --production
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}❌ 依赖安装失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ 依赖安装完成${NC}"
|
||||
|
||||
# 停止现有服务(如果存在)
|
||||
echo -e "${YELLOW}🛑 停止现有服务...${NC}"
|
||||
pm2 delete aijianhua-backend 2>/dev/null || true
|
||||
|
||||
# 启动服务
|
||||
echo -e "${YELLOW}🚀 启动服务...${NC}"
|
||||
pm2 start ecosystem.config.js
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 服务启动成功${NC}"
|
||||
|
||||
# 设置开机自启
|
||||
pm2 startup
|
||||
pm2 save
|
||||
|
||||
echo -e "${GREEN}📊 服务状态:${NC}"
|
||||
pm2 status
|
||||
|
||||
echo -e "${GREEN}🌐 服务信息:${NC}"
|
||||
echo " 服务名称: aijianhua-backend"
|
||||
echo " 运行端口: 3330"
|
||||
echo " 环境: production"
|
||||
echo " API文档: https://wapi.aijianhua.com/api-docs"
|
||||
echo " 健康检查: https://wapi.aijianhua.com/health"
|
||||
|
||||
else
|
||||
echo -e "${RED}❌ 服务启动失败${NC}"
|
||||
echo "查看日志: tail -f $LOG_DIR/error.log"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}🎉 部署完成!${NC}"
|
||||
62
scripts/sync-to-server.sh
Normal file
62
scripts/sync-to-server.sh
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 爱鉴花后端服务同步脚本
|
||||
# 将本地代码同步到CentOS服务器
|
||||
|
||||
SERVER="www.jiebanke.com"
|
||||
SERVER_USER="root"
|
||||
SERVER_DIR="/data/nodejs/aijianhua"
|
||||
LOCAL_DIR="e:/vue/aijianhua/backend"
|
||||
|
||||
# 需要排除的文件和目录
|
||||
exclude_list=(
|
||||
"--exclude=.env"
|
||||
"--exclude=.env.development"
|
||||
"--exclude=.env.example"
|
||||
"--exclude=node_modules/"
|
||||
"--exclude=uploads/"
|
||||
"--exclude=database.sqlite"
|
||||
"--exclude=*.log"
|
||||
"--exclude=.git/"
|
||||
"--exclude=.idea/"
|
||||
"--exclude=*.bat"
|
||||
"--exclude=*.sh"
|
||||
)
|
||||
|
||||
echo "🚀 开始同步爱鉴花后端代码到服务器..."
|
||||
echo "📁 服务器: $SERVER"
|
||||
echo "📂 目标目录: $SERVER_DIR"
|
||||
echo "📦 本地目录: $LOCAL_DIR"
|
||||
echo ""
|
||||
|
||||
# 检查rsync是否安装
|
||||
if ! command -v rsync &> /dev/null; then
|
||||
echo "❌ rsync 未安装,请先安装 rsync"
|
||||
echo "Ubuntu/Debian: sudo apt-get install rsync"
|
||||
echo "CentOS/RHEL: sudo yum install rsync"
|
||||
echo "macOS: brew install rsync"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 执行同步
|
||||
rsync -avz --delete \
|
||||
"${exclude_list[@]}" \
|
||||
-e "ssh -p 22" \
|
||||
"$LOCAL_DIR/" \
|
||||
"$SERVER_USER@$SERVER:$SERVER_DIR/"
|
||||
|
||||
# 检查同步结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ""
|
||||
echo "✅ 同步完成!"
|
||||
echo "📋 下一步操作:"
|
||||
echo " 1. 登录服务器: ssh $SERVER_USER@$SERVER"
|
||||
echo " 2. 进入目录: cd $SERVER_DIR"
|
||||
echo " 3. 安装依赖: npm install --production"
|
||||
echo " 4. 启动服务: pm2 start ecosystem.config.js"
|
||||
echo " 5. 保存配置: pm2 save"
|
||||
else
|
||||
echo ""
|
||||
echo "❌ 同步失败,请检查网络连接和服务器配置"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user