Reslms

机场订阅管理系统 - 完整部署指南

项目简介:一个基于Node.js和React的TZ信息管理系统,支持多种代理协议的订阅链接管理和节点信息展示。

📋 目录

🔧 系统要求

基础要求

  • Node.js: v16.0.0 或更高版本
  • npm: v8.0.0 或更高版本
  • 操作系统: Windows 10+, Linux (Ubuntu 18.04+, CentOS 7+), macOS 10.15+
  • 内存: 最少 512MB,推荐 1GB+
  • 存储: 最少 500MB 可用空间
  • 网络: 需要访问外网(用于获取订阅信息)

可选要求

  • Docker: 20.10+ (容器化部署)
  • Nginx: 1.18+ (反向代理)
  • PM2: 5.0+ (进程管理)

🚀 快速部署

Windows 一键部署

  1. 下载项目代码

    1
    2
    git clone <项目仓库地址>
    cd reslms
  2. 运行启动脚本

    1
    start.bat

    脚本将自动:

    • 检查Node.js和npm版本
    • 安装所有依赖
    • 启动开发服务器
  3. 访问应用

Linux/macOS 一键部署

  1. 下载项目代码

    1
    2
    git clone <项目仓库地址>
    cd reslms
  2. 添加执行权限并运行

    1
    2
    chmod +x server-start.sh
    ./server-start.sh
  3. 访问应用

    • 前端界面:http://服务器IP:3000
    • 后端API:http://服务器IP:3001
    • 管理后台:http://服务器IP:3000/admin

🔨 手动部署

步骤1:环境准备

安装Node.js (推荐使用nvm)

Linux/macOS:

1
2
3
4
5
6
7
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc

# 安装Node.js
nvm install 18
nvm use 18

Windows:
直接从 Node.js官网 下载安装包

验证安装

1
2
node -v  # 应显示 v16.0.0 或更高
npm -v # 应显示 v8.0.0 或更高

步骤2:项目安装

  1. 安装依赖
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 安装根目录依赖
    npm install

    # 安装前端依赖
    cd frontend
    npm install
    cd ..

    # 安装后端依赖
    cd backend
    npm install
    cd ..

步骤3:环境配置

  1. 创建环境变量文件

    1
    cp docker.env .env
  2. 编辑环境变量

    1
    nano .env

    关键配置项:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 基本配置
    NODE_ENV=production
    PORT=3001

    # 安全配置(生产环境必须修改)
    ADMIN_PASSWORD=your_secure_password_here
    JWT_SECRET=your_jwt_secret_32_chars_minimum
    SESSION_SECRET=your_session_secret_32_chars

    # CORS配置
    CORS_ORIGIN=https://yourdomain.com

    # 数据库配置
    DATABASE_PATH=./data/subscriptions.db
  3. 创建数据目录

    1
    mkdir -p data

步骤4:构建和启动

  1. 构建项目

    1
    npm run build
  2. 启动服务

    1
    2
    3
    4
    5
    6
    # 开发模式
    npm run dev

    # 生产模式
    cd backend
    npm start

🐳 Docker 容器化部署

方法1:使用Docker Compose(推荐)

  1. 准备环境文件

    1
    2
    cp docker.env .env
    # 编辑 .env 文件,设置生产环境配置
  2. 构建和启动

    1
    2
    3
    4
    5
    # 构建项目
    npm run build

    # 启动容器
    docker-compose up -d
  3. 访问应用

方法2:单独使用Docker

  1. 构建镜像

    1
    2
    npm run build
    docker build -t airport-subscription-manager .
  2. 运行容器

    1
    2
    3
    4
    5
    6
    7
    docker run -d \
    --name airport-subscription \
    -p 3001:3001 \
    -v $(pwd)/data:/app/data \
    -v $(pwd)/logs:/app/logs \
    --env-file .env \
    airport-subscription-manager

Docker Compose 配置说明

完整的 docker-compose.yml 包含:

  • Frontend: Nginx提供前端静态文件
  • Backend: Node.js后端API服务
  • Nginx Proxy: 主入口反向代理
  • 数据持久化: 数据库文件和日志文件映射

🏭 生产环境部署

使用PM2进程管理

  1. 全局安装PM2

    1
    npm install -g pm2
  2. 运行PM2部署脚本

    1
    2
    chmod +x pm2.sh
    ./pm2.sh
  3. PM2常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看状态
    pm2 status

    # 查看日志
    pm2 logs

    # 重启应用
    pm2 restart all

    # 停止应用
    pm2 stop all

    # 设置开机自启
    pm2 startup
    pm2 save

手动配置PM2

  1. 创建PM2配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // ecosystem.config.js
    module.exports = {
    apps: [
    {
    name: 'reslms-backend',
    cwd: './backend',
    script: 'npm',
    args: 'start',
    env: {
    NODE_ENV: 'production',
    PORT: 3001
    },
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G'
    }
    ]
    };
  2. 启动PM2

    1
    pm2 start ecosystem.config.js

🌐 Nginx 反向代理配置

基础配置

  1. 安装Nginx

    1
    2
    3
    4
    5
    6
    7
    # Ubuntu/Debian
    sudo apt update
    sudo apt install nginx

    # CentOS
    sudo yum install epel-release
    sudo yum install nginx
  2. 创建站点配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # /etc/nginx/sites-available/airport-subscription
    server {
    listen 80;
    server_name yourdomain.com;

    # 前端静态文件
    location / {
    root /path/to/reslms/frontend/dist;
    try_files $uri $uri/ /index.html;
    }

    # API代理
    location /api/ {
    proxy_pass http://localhost:3001;
    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_cache_bypass $http_upgrade;
    }
    }
  3. 启用站点

    1
    2
    3
    sudo ln -s /etc/nginx/sites-available/airport-subscription /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

SSL配置(HTTPS)

  1. 安装Certbot

    1
    sudo apt install certbot python3-certbot-nginx
  2. 获取SSL证书

    1
    sudo certbot --nginx -d yourdomain.com
  3. 自动续期

    1
    2
    3
    sudo crontab -e
    # 添加以下行
    0 12 * * * /usr/bin/certbot renew --quiet

⚙️ 环境变量配置

完整环境变量说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 基本配置
NODE_ENV=production # 运行环境
PORT=3001 # 后端端口
HOST=0.0.0.0 # 绑定地址

# 安全配置(生产环境必须修改)
ADMIN_PASSWORD=admin123456 # 管理员密码
JWT_SECRET=jwt-secret-32-chars # JWT密钥
SESSION_SECRET=session-secret-32 # 会话密钥

# CORS配置
CORS_ORIGIN=https://yourdomain.com # 允许的源
ADDITIONAL_CORS_ORIGINS=https://admin.yourdomain.com,https://api.yourdomain.com

# 数据库配置
DATABASE_PATH=./data/subscriptions.db # 数据库文件路径
DB_POOL_SIZE=10 # 连接池大小
DB_TIMEOUT=5000 # 查询超时

# 日志配置
LOG_LEVEL=info # 日志级别

# 订阅配置
SUBSCRIPTION_TIMEOUT=8000 # 订阅超时时间
SUBSCRIPTION_RETRY=3 # 重试次数
USER_AGENT=ClashforWindows/0.20.39 # 用户代理

安全配置检查清单

  • 修改默认管理员密码
  • 设置强随机JWT密钥(至少32字符)
  • 设置强随机会话密钥(至少32字符)
  • 配置正确的CORS源
  • 设置合适的日志级别
  • 确保数据库文件权限正确

🔐 安全配置

1. 密码安全

1
2
3
4
5
# 生成强密码
openssl rand -base64 32

# 生成JWT密钥
openssl rand -hex 32

2. 文件权限

1
2
3
4
5
6
# 设置数据目录权限
chmod 755 data/
chmod 644 data/subscriptions.db

# 设置环境文件权限
chmod 600 .env

3. 防火墙配置

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu/Debian (ufw)
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

4. 定期备份

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
mkdir -p $BACKUP_DIR

# 备份数据库
cp data/subscriptions.db $BACKUP_DIR/subscriptions_$DATE.db

# 备份配置文件
cp .env $BACKUP_DIR/env_$DATE.backup

echo "备份完成: $DATE"

🔍 故障排除

常见问题

1. 端口被占用

问题: Error: listen EADDRINUSE :::3001

解决方案:

1
2
3
4
5
6
7
8
9
# 查找占用端口的进程
lsof -i :3001
# 或者 (Windows)
netstat -ano | findstr :3001

# 杀死进程
kill -9 PID
# 或者修改端口
export PORT=8080

2. Node.js版本过低

问题: 应用启动失败,提示语法错误

解决方案:

1
2
3
4
5
6
# 检查版本
node -v

# 使用nvm升级
nvm install 18
nvm use 18

3. 数据库连接失败

问题: Error: SQLITE_CANTOPEN

解决方案:

1
2
3
4
5
6
7
8
9
# 检查数据目录权限
ls -la data/

# 创建数据目录
mkdir -p data
chmod 755 data/

# 检查数据库文件权限
chmod 644 data/subscriptions.db

4. 依赖安装失败

问题: npm install 失败

解决方案:

1
2
3
4
5
6
7
8
9
10
# 清理缓存
npm cache clean --force

# 删除node_modules重新安装
rm -rf node_modules package-lock.json
npm install

# 使用cnpm(中国用户)
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm install

5. 前端访问404

问题: 前端路由无法访问

解决方案:

1
2
3
4
# Nginx配置添加
location / {
try_files $uri $uri/ /index.html;
}

日志分析

查看应用日志

1
2
3
4
5
6
7
8
# PM2日志
pm2 logs

# Docker日志
docker logs container_name

# 直接查看日志文件
tail -f logs/app.log

常见错误日志

  1. 配置错误:

    1
    配置验证失败: 配置项 server.adminPassword 未设置或为空

    检查环境变量文件

  2. 数据库错误:

    1
    数据库初始化失败: SQLITE_CANTOPEN

    检查数据目录权限

  3. 网络错误:

    1
    获取订阅失败: timeout of 8000ms exceeded

    检查网络连接或增加超时时间

📊 维护与监控

1. 健康检查

应用提供健康检查端点:

1
curl http://localhost:3001/api/health

返回格式:

1
2
3
4
5
6
{
"status": "ok",
"timestamp": "2024-01-01T00:00:00.000Z",
"uptime": 3600,
"database": "connected"
}

2. 性能监控

PM2监控

1
2
3
4
5
# 实时监控
pm2 monit

# 生成报告
pm2 report

系统监控

1
2
3
4
5
6
7
8
# 内存使用
free -h

# 磁盘使用
df -h

# CPU使用
top -p $(pgrep node)

3. 日志轮转

创建logrotate配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
# /etc/logrotate.d/airport-subscription
/path/to/reslms/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 nodejs nodejs
postrotate
pm2 reloadLogs
endscript
}

4. 自动更新脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
# update.sh

echo "开始更新应用..."

# 拉取最新代码
git pull origin main

# 安装依赖
npm install
cd frontend && npm install && cd ..
cd backend && npm install && cd ..

# 构建应用
npm run build

# 重启PM2
pm2 restart all

echo "更新完成!"

5. 监控告警

使用PM2监控

1
2
3
4
5
6
# 安装PM2监控模块
pm2 install pm2-server-monit

# 配置告警
pm2 set pm2-server-monit:email your@email.com
pm2 set pm2-server-monit:smtp-host smtp.gmail.com

自定义监控脚本

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
# monitor.sh

# 检查服务状态
if ! curl -f http://localhost:3001/api/health > /dev/null 2>&1; then
echo "服务异常,尝试重启..."
pm2 restart all

# 发送告警邮件
echo "服务已重启" | mail -s "服务告警" admin@yourdomain.com
fi

6. 数据备份策略

每日备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# daily-backup.sh

DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/daily"
RETENTION_DAYS=30

mkdir -p $BACKUP_DIR

# 备份数据库
cp data/subscriptions.db $BACKUP_DIR/subscriptions_$DATE.db

# 压缩备份
gzip $BACKUP_DIR/subscriptions_$DATE.db

# 删除过期备份
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete

echo "备份完成: $DATE"

设置定时任务

1
2
3
4
5
# 编辑crontab
crontab -e

# 添加每日凌晨2点备份
0 2 * * * /path/to/reslms/daily-backup.sh >> /var/log/backup.log 2>&1

📞 技术支持

如遇到部署问题,请检查:

  1. 系统要求: 确保Node.js版本 >= 16.0.0
  2. 网络连接: 确保可以访问外网
  3. 端口占用: 检查3000、3001端口是否被占用
  4. 权限问题: 确保有读写数据目录的权限
  5. 环境变量: 检查.env文件配置是否正确

调试模式启动:

1
DEBUG=* NODE_ENV=development npm run dev

说明

其实上面大部分是由ai生成的,具体的很简单,记录一下怕自己忘了

1.配置文件

1.首先修改frontend/vite.config.ts文件里面的target,使其正确指向后端地址。

2.其次再修改backend/src/config/index.ts文件里面的additionalCorsOrigins,添加前端地址,否则跨域无法访问。

3.运行端口在backend/src/config/index.ts里面的port选项。

2.执行运行代码

1.首先进入frontend文件夹,执行一下命令:

1
npm install&&npm run build:production

2.再进入backend文件夹,依旧执行

1
npm install

3.持久化运行,使用pm2:

1
2
pm2 start npm --name'reslms' -- run dev #pm2启动项目
pm2 logs reslms #查看日志

最后更新: 2025年8月
版本: v1.0.0