文章列表
新闻详情

OpenResty 实时对战游戏<幸运武侠>服务器部署文档

329
发表时间:2025-10-26 21:20作者:掌柜的
OpenResty 实时对战游戏服务器部署文档

OpenResty 实时对战游戏服务器部署文档

幸运武侠 - 塔防游戏服务器部署指南

基于 OpenResty 的高性能实时对战服务器

⚡⚡⚡ 快速导航:本部署文档仅支持 Linux 操作系统(推荐 Ubuntu)。请从第 2 章节开始按照本文档操作。

📋 OpenResty 快速部署清单

按照以下步骤完成部署,勾选已完成的项目:

1. 基础环境安装

  • 安装宝塔面板
  • 安装 Nginx OpenResty 1.25.3.2/1.27.1.2
  • 安装 Redis 7.4.3
  • 安装 Node.js v16.x(用于机器人服务)

2. 项目部署

  • 上传项目代码到 /home/TowerDefense_Server/
  • 配置 SSL 证书(生产环境)或使用 HTTP(开发环境)
  • 修改配置文件中的域名:
    • 编辑 conf/nginxGame.conf(生产)或 nginxGameDev.conf(开发)
    • 第 166 行:修改 DOMAIN = 'yourdomain.com'
    • 第 170 行:设置 RELEASE = true(生产)或 false(开发)
  • 运行一键安装脚本:sudo ./main_openresty/install_dependencies.sh

3. 启动服务

  • 启动游戏服务:
    cd /home/TowerDefense_Server/main_openresty
    ./reloadGame.sh       # 生产环境
    # 或
    ./reloadGameDev.sh    # 开发环境
  • 配置机器人服务(宝塔面板 → 网站 → Node项目):
    • 项目路径:/home/TowerDefense_Server/main_openresty/ops/robots_nodejs
    • 启动文件:dist/scripts/index.js
    • Node 版本:16
    • 运行用户:root
    • 启动模式:npm start

4. 验证和优化

  • 验证服务运行:ps aux | grep nginx 和 ps aux | grep "node dist/scripts"
  • 开放防火墙端口:7443, 7444, 6379
  • 配置备份策略(可选)
  • 配置监控报警(可选)


1. 系统环境要求

1.1 支持的操作系统

Linux 系统

推荐版本:

  • Debian 12 或 Ubuntu 22.04 或 Ubuntu 24.04
  • OpenCloud-9 (腾讯云)
  • Alibaba-Cloud-3 (阿里云)

兼容版本:

  • Debian 10+
  • Ubuntu 18.04+
  • CentOS 9
  • 统信 UOS 20
  • 麒麟 V10SP3

1.2 服务器配置要求

最低配置:

  • CPU: 2 核心
  • 内存: 2GB
  • 硬盘: 40GB
  • 网络: 3Mbps

推荐配置(生产环境):

  • CPU: 4+ 核心
  • 内存: 8GB+
  • 硬盘: 100GB SSD
  • 网络: 10Mbps+

1.3 必要的系统权限

# 使用 root 权限登录服务器
sudo su root

2. 安装宝塔面板

2.1 安装宝塔面板

请访问宝塔官方网站查看详细的安装指南:

根据您的操作系统(Linux/Windows),按照宝塔官方文档完成面板的安装和初始化配置。

2.2 安全组端口开放

在宝塔面板或云服务器控制台,确保以下端口已开放:

端口协议说明
8888TCP宝塔面板端口
7443TCPHTTPS API 接口
7444TCPWSS WebSocket 连接
6379TCPRedis 数据库(注意配置远程访问的安全机制)
22TCPSSH 远程连接
80TCPHTTP(如需要)
443TCPHTTPS(如需要)

3. 安装必要组件

3.1 安装 Nginx OpenResty

  1. 进入宝塔面板
  2. 点击左侧菜单 "软件商店"
  3. 搜索 "nginx" 或 "openresty"
  4. 找到 "Nginx (OpenResty) 1.25.3.2/1.27.1.2"
  5. 点击 "安装"
  6. 安装完成后点击 "设置"
  7. 确认 OpenResty 版本为 1.25.3.2/1.27.1.2 或以上

3.2 安装 Redis

  1. 在宝塔软件商店搜索 "Redis"
  2. 找到 "Redis 7.4.3"
  3. 点击 "安装"
  4. 安装完成后点击 "设置"
  5. 确认 Redis 服务运行状态为 "运行中"

3.3 验证安装

# 检查 OpenResty 版本
/www/server/nginx/bin/openresty -V

# 应输出类似:
# nginx version: openresty/1.27.1.2
# built by gcc 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
# built with OpenSSL 1.1.1w   11 Sep 2023
# TLS SNI support enabled
# configure arguments: ...

# 检查 Redis 是否运行
redis-cli ping
# 应输出: PONG

OpenResty 1.27.1.2 特性

OpenResty 1.27.1.2 版本包含以下重要特性:

  • LuaJIT 2.1 - 高性能 Lua 解释器
  • ngx_lua 0.10.28 - Lua 模块版本
  • OpenSSL 1.1.1w - SSL/TLS 支持
  • HTTP/2 和 HTTP/3 - 支持最新 HTTP 协议
  • Stream Lua - 支持 TCP/UDP 代理
  • Redis 模块 - 原生 Redis 客户端支持

宝塔编译的 OpenResty 包含以下模块:

  • ngx_devel_kit - 开发工具包
  • echo-nginx-module - 回显模块
  • xss-nginx-module - XSS 防护模块
  • set-misc-nginx-module - Set 模块扩展
  • encrypted-session-nginx-module - 加密会话模块
  • srcache-nginx-module - 缓存模块
  • headers-more-nginx-module - 增强的头模块
  • array-var-nginx-module - 数组变量模块
  • memc-nginx-module - Memcached 模块
  • redis2-nginx-module - Redis 客户端
  • redis-nginx-module - Redis 客户端(旧版)
  • ngx_stream_lua - Stream Lua 模块
  • rds-json-nginx-module - JSON 响应模块
  • rds-csv-nginx-module - CSV 响应模块
  • ngx_cache_purge - 缓存清理
  • nginx-sticky-module-ng - 会话保持模块
  • image_filter - 图片过滤模块

4. 项目代码部署

4.1 上传项目代码

将项目代码文件拖拽上传到宝塔 "文件" 中:

# 创建项目目录
mkdir -p /home/TowerDefense_Server
cd /home/TowerDefense_Server

# 如果使用 Git,克隆项目
git clone <your-repository-url> .

# 或使用 FTP/SFTP 上传项目文件

4.2 设置目录权限

# 设置项目目录所有权为 www 用户
chown -R www:www /home/TowerDefense_Server

# 设置执行权限
chmod +x /home/TowerDefense_Server/main_openresty/reloadGame.sh
chmod +x /home/TowerDefense_Server/main_openresty/reloadGameDev.sh

4.3 检查项目目录结构

确认以下目录和文件存在:

/home/TowerDefense_Server/
└── main_openresty/
   ├── apis/   # API 接口
   ├── battle/   # 战斗系统
   ├── conf/   # 配置文件
   ├── handler/   # 业务处理
   ├── libs/   # 库文件
   ├── logic/   # 业务逻辑
   ├── logs/   # 日志目录
   ├── ops/   # 运维脚本
   ├── reloadGame.sh   # 生产环境重启脚本
   └── reloadGameDev.sh   # 开发环境重启脚本

5. SSL 证书配置

根据您的需求选择以下三种方式之一:

方式一:宝塔面板自动申请 Let's Encrypt 免费证书 ⭐ 推荐

步骤 1:添加网站

  1. 进入宝塔面板 → "网站" → "添加站点"
  2. 填写以下信息:
    • 域名: yourdomain.com(填写您的实际域名)
    • 备注: 游戏服务器
    • FTP: 不创建
    • 数据库: 不创建
  3. 点击 "提交"

步骤 2:申请 SSL 证书

  1. 在网站列表中,点击您刚添加的网站右侧的 "设置"
  2. 切换到 "SSL" 标签
  3. 选择 "Let's Encrypt"
  4. 勾选 "强制 HTTPS"(生产环境推荐)
  5. 点击 "申请" 或 "续签"
  6. 等待证书申请完成(约 1-2 分钟)

步骤 3:配置证书路径

证书安装完成后,宝塔会在以下路径创建证书:

/www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.pem
/www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.key

步骤 4:修改游戏服务器配置

编辑 /home/TowerDefense_Server/main_openresty/conf/nginxGame.conf:

-- 第 187-188 行,修改为您的域名
ssl_certificate /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.pem;
ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.key;

自动续期配置

宝塔可以设置计划任务:自动处理 Let's Encrypt 证书续期,证书有效期为 90 天,每 5 天自动检查续期。


方式二:手动上传自有证书

步骤 1:准备证书文件

您需要准备两个文件:

  • yourdomain.com.pem - 证书文件
  • yourdomain.com.key - 私钥文件

步骤 2:上传证书

# 创建证书目录
mkdir -p /www/server/panel/vhost/cert/yourdomain.com

# 上传证书文件到此目录
# yourdomain.com.pem
# yourdomain.com.key

步骤 3:配置证书路径

编辑 /home/TowerDefense_Server/main_openresty/conf/nginxGame.conf:

-- 第 187-188 行
ssl_certificate /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.pem;
ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.key;

方式三:开发环境使用 HTTP ⚠️ 仅开发环境

如果您不想配置 SSL(仅用于开发测试),可以修改配置为 HTTP:

修改开发环境配置

编辑 /home/TowerDefense_Server/main_openresty/conf/nginxGameDev.conf:

# 第 202 行,修改前
listen 7443 ssl;

# 修改后
listen 7443;

# 第 233 行,修改前   
listen 7444 ssl reuseport;

# 修改后
listen 7444 reuseport;

注释掉 SSL 相关配置

在 nginxGameDev.conf 中注释掉以下部分(约第 186-196 行):

# SSL 证书配置 - 开发环境不需要
# ssl_certificate /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.pem;
# ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.key;
# ... 其他 SSL 配置 ...

修改访问地址

-- 第 166-168 行,在 init_by_lua_block 中
DOMAIN = 'your-server-ip'   -- 或您的域名
PORT = 7444
HOST = DOMAIN .. ':' .. PORT .. '/lua/web_socket'

-- 第 170 行
RELEASE = false   -- 开发环境设为 false

6. 配置游戏服务器

6.1 修改服务器配置

编辑配置文件(生产环境用 nginxGame.conf,开发环境用 nginxGameDev.conf):

cd /home/TowerDefense_Server/main_openresty
vi conf/nginxGame.conf   # 或 nginxGameDev.conf

修改域名配置(第 166 行)

-- init_by_lua_block 中
DOMAIN = 'yourdomain.com'   -- 改为您的域名或服务器 IP

修改端口配置(第 167 行)

PORT = 7444   -- WebSocket 端口

修改服务器地址(第 168 行)

HOST = DOMAIN .. ':' .. PORT .. '/lua/web_socket'

修改环境模式(第 170 行)

RELEASE = true   -- 生产环境设为 true
RELEASE = false   -- 开发环境设为 false

配置微信(可选,第 172-174 行)

-- 微信小程序配置
APPID = "your-appid"
SECRET = "your-secret"

配置 Lua 包路径(第 161 行)⚠️ 重要

必须使用绝对路径!

在宝塔环境中,nginx 启动时使用 -p 选项指定项目前缀,而配置文件中的相对路径可能无法正常工作。因此,所有路径都必须使用绝对路径。

检查并确认 lua_package_path 是否包含正确的项目路径:

lua_package_path "/usr/local/share/lua/5.1/?.lua;
/usr/local/share/lua/5.1/resty/?.lua;
/usr/local/openresty/site/lualib/?.lua;
/home/TowerDefense_Server/main_openresty/libs/?.lua;
/home/TowerDefense_Server/main_openresty/libs/resty/mail/?.lua;
/home/TowerDefense_Server/main_openresty/libs/resty/?.lua;
/home/TowerDefense_Server/main_openresty/apis/?.lua;
/home/TowerDefense_Server/main_openresty/handler/?.lua;
/home/TowerDefense_Server/main_openresty/battle/?.lua;
/home/TowerDefense_Server/main_openresty/logic/?.lua;
/home/TowerDefense_Server/main_openresty/conf/?.lua;
/home/TowerDefense_Server/main_openresty/apis/?.lua;;";

说明:

  • 所有路径必须是完整绝对路径,不能使用相对路径
  • 路径分隔符使用 /
  • 最后一个路径后面有两个分号 ;; 表示结束
  • 如果您将项目部署到其他目录,请修改所有相关路径

🔍 配置文件检查清单

修改配置后,请检查以下内容:

# 检查 nginx 配置是否正确
cd /home/TowerDefense_Server/main_openresty
nginx -t -c conf/nginxGame.conf   # 生产环境
# 或
nginx -t -c conf/nginxGameDev.conf   # 开发环境

# 应输出:syntax is ok 和 test is successful
关键检查项
  • DOMAIN 变量已修改为您的域名或 IP
  • RELEASE 变量设置正确(true/false)
  • SSL 证书路径正确(生产环境)
  • lua_package_path 包含所有必要的路径
  • 所有路径都是绝对路径

6.2 locationHTTP.conf 配置说明

该文件包含了所有 HTTP API 接口的路由配置,无需修改,已包含:

  • 登录相关接口
  • 用户相关接口
  • 好友相关接口
  • 战斗相关接口
  • 商店相关接口
  • 邮件相关接口
  • 等等...

7. 安装 Lua 依赖库

OpenResty 的 Lua 依赖需要同时使用两种包管理器:

  • OPM(OpenResty Package Manager) - 用于安装 OpenResty 专用库
  • LuaRocks - 用于安装通用 Lua 库
特性OPMLuaRocks
官方支持✅ OpenResty 官方❌ 第三方
安装简单✅ 更简单⚠️ 需要配置
库数量⚠️ 较少✅ 很丰富
用途OpenResty 专用库通用 Lua 库

说明:项目需要同时使用两种包管理器安装不同类别的依赖库。

快速安装(推荐)

项目提供了一个一键安装脚本,可以自动安装所有依赖:

# 进入项目目录
cd /home/TowerDefense_Server/main_openresty

# 运行安装脚本
sudo ./install_dependencies.sh

该脚本会自动完成以下操作:

  1. 安装系统依赖(curl, wget, gnupg, ca-certificates, luarocks)
  2. 安装 OPM(OpenResty Package Manager)
  3. 配置 LuaRocks
  4. 使用 OPM 安装 OpenResty 专用库(4个库)
  5. 使用 LuaRocks 安装通用 Lua 库(7个库)
  6. 验证安装结果

手动安装:如果您需要手动安装,请继续阅读下面的详细步骤。

7.1 安装 OPM(推荐)

OPM 是 OpenResty 官方提供的包管理器,使用更简单。

步骤 1:安装依赖

# 安装依赖(确保 curl 和 gnupg 已安装)
sudo apt update
sudo apt install -y curl wget gnupg ca-certificates

步骤 2:添加 OpenResty 仓库

# 导入 OpenResty GPG 密钥
curl -fsSL https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty.gpg
wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty.gpg

# 添加 OpenResty APT 仓库
# Ubuntu 24.04
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/openresty.list > /dev/null

# Ubuntu 22.04 或其他版本
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] https://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list

# 更新软件包索引
sudo apt update

步骤 3:安装 OPM

# 安装 openresty-opm
sudo apt install -y openresty-opm

步骤 4:使用 OPM 搜索和安装库

# 搜索可用的库
sudo opm search http
sudo opm search jwt
sudo opm search logger

# 安装特定的库
sudo opm get xiedacon/lua-resty-logger
sudo opm get xiedacon/lua-utility
sudo opm get xiedacon/lua-fs-module
sudo opm get xiedacon/lua-resty-config

# 查看已安装的库
opm list

7.2 安装 LuaRocks

LuaRocks 用于安装通用 Lua 库,这些库在 OPM 中可能不可用。

安装 LuaRocks

# Ubuntu/Debian
sudo apt-get install -y luarocks

# CentOS
sudo yum install -y luarocks

配置 LuaRocks

# 查找 LuaJIT 路径
which luajit
# 通常输出: /usr/local/openresty/luajit/bin/luajit

# 配置 LuaRocks 使用正确的 LuaJIT
luarocks config lua_interpreter /usr/local/openresty/luajit/bin/luajit
luarocks config lua_version 5.1

7.3 安装项目所需的库

项目需要分别使用 OPM 和 LuaRocks 安装不同的库:

使用 OPM 安装的库

# 安装 OpenResty 专用库(使用 OPM)
sudo opm get xiedacon/lua-resty-logger
sudo opm get xiedacon/lua-utility
sudo opm get xiedacon/lua-fs-module
sudo opm get xiedacon/lua-resty-config

# 查看已安装的 OPM 库
opm list

使用 LuaRocks 安装的库

使用 LuaRocks 安装通用 Lua 库:

# 安装 lua-resty-http(HTTP 客户端库)
sudo luarocks install lua-resty-http

# 安装 lua-resty-jwt(JWT 认证库)
sudo luarocks install lua-resty-jwt

# 安装 lua-resty-openssl(OpenSSL 绑定库)
sudo luarocks install lua-resty-openssl

# 安装 luautf8(UTF-8 字符串处理库)
sudo luarocks install luautf8

# 安装 lua-resty-validation(参数验证库)
sudo luarocks install lua-resty-validation

# 安装 lua-resty-reqargs(请求参数解析库)
sudo luarocks install lua-resty-reqargs

# 安装 luasocket(Socket 库,某些依赖需要)
sudo luarocks install luasocket

7.4 验证安装

# 验证 OPM 安装的库
opm list

# 应该看到通过 OPM 安装的库:
# xiedacon/lua-resty-logger
# xiedacon/lua-utility
# xiedacon/lua-fs-module
# xiedacon/lua-resty-config

# 验证 LuaRocks 安装的库
luarocks list

# 应该看到通过 LuaRocks 安装的库:
# lua-resty-http (版本 0.17.2-0)
# lua-resty-jwt (版本 0.2.3-0)
# lua-resty-openssl (版本 1.6.1-1)
# lua-resty-validation (版本 2.7-1)
# lua-resty-reqargs (版本 1.4-1)
# luasocket (版本 3.1.0-1)
# luautf8 (版本 0.1.6-1)

注意:不同版本的依赖库可能会有所不同,请根据实际输出来确认。确保 OPM 和 LuaRocks 的库都已正确安装。


8. 启动游戏服务

8.1 开发环境启动

# 进入项目目录
cd /home/TowerDefense_Server/main_openresty

# 确保脚本有执行权限
chmod +x reloadGameDev.sh

# 执行重启脚本
./reloadGameDev.sh

8.2 生产环境启动

# 进入项目目录
cd /home/TowerDefense_Server/main_openresty

# 确保脚本有执行权限
chmod +x reloadGame.sh

# 执行重启脚本
./reloadGame.sh

8.3 启动脚本功能说明

脚本会执行以下操作:

  1. 停止旧的 Nginx 进程
    • 优雅关闭现有 OpenResty 服务
  2. 清理 Redis 消息队列
    • 清除所有 rqc.* 开头的消息队列
  3. 备份日志文件
    • 将所有日志文件备份到 logs/{logtype}/ 目录
    • 文件名包含时间戳
  4. 检查 Nginx 配置
    • 验证配置文件语法是否正确
    • 如果配置错误会中止启动
  5. 启动 Nginx
    • 使用新的配置文件启动 OpenResty
  6. 启动机器人服务(开发环境)
    • 编译 TypeScript
    • 后台启动机器人服务

8.4 确认服务启动成功

# 检查 Nginx 进程
ps aux | grep nginx

# 检查 Redis 连接
redis-cli ping

# 检查机器人进程(开发环境)
ps aux | grep "node dist/scripts/index.js"

# 查看最近日志
tail -f /home/TowerDefense_Server/main_openresty/logs/nginx_debug.log

9. 配置机器人服务

9.1 安装 Node.js

方式一:在宝塔面板安装 Node.js 项目管理器(推荐)

  1. 进入宝塔面板 → "网站" → "Node项目"
  2. 点击 "添加 Node 项目"
  3. 填写项目信息:
    • 项目名称: robots
    • 项目路径: /home/TowerDefense_Server/main_openresty/ops/robots_nodejs
    • 启动文件: dist/scripts/index.js(编译后的文件)
    • Node 版本: 16(支持 v16.19.0, v16.20.2 或 v22.18.0)
    • 启动模式: npm start(自动从 package.json 获取)
    • 包管理器: npm
    • 运行用户: root(⚠️ 统一使用 root 用户,避免启动多个服务)
  4. 点击 "提交"

重要说明:
由于宝塔启动 Node.js 的用户和项目脚本启动的用户不同,如果使用其他用户(如 www),重启机器人服务时会启动两个不同的服务实例,导致资源浪费和潜在冲突。因此,机器人服务需要统一设置为 root 用户启动。

方式二:手动安装

# 使用 NodeSource 安装
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

# 验证安装
node -v   # 应输出 v16.x.x
npm -v   # 应输出 8.x.x

9.2 配置机器人项目

项目目录结构

项目位于:/home/TowerDefense_Server/main_openresty/ops/robots_nodejs

# 进入机器人项目目录
cd /home/TowerDefense_Server/main_openresty/ops/robots_nodejs

# 查看目录结构
ls -la

安装依赖

# 安装项目依赖
npm install

# 验证 package.json
cat package.json

启动配置

启动选项会自动从 package.json 文件中获取:

{
   "scripts": {
   "start": "rimraf dist && tsc && node dist/scripts/index.js"
   }
}

说明:

  • rimraf dist - 清理旧的编译文件
  • tsc - 编译 TypeScript 到 JavaScript
  • node dist/scripts/index.js - 运行编译后的代码

9.3 配置启动环境

机器人服务在 reloadGameDev.sh 中已配置自动启动。如果需要手动配置,可以参考:

编辑 /home/TowerDefense_Server/main_openresty/ops/robots_nodejs/scripts/index.ts:

// 开发环境配置
if (args.includes('dev')) {
   selfGlobal.isDev = true;
   endIdx = 10;
   logger.setLogFile('robot.log');
   netCfg.wsUrl = 'wss://yourdomain.com:7444/lua/web_socket';
   netCfg.httpUrl = 'https://yourdomain.com:7443';
} else {
   // 生产环境配置
   selfGlobal.isDev = false;
   netCfg.wsUrl = 'wss://yourdomain.com:7444/lua/web_socket';
   netCfg.httpUrl = 'https://yourdomain.com:7443';
}

9.4 独立部署机器人(推荐使用内网IP)

如果需要将机器人部署到独立的服务器:

步骤 1:克隆项目到新服务器

# 在新服务器上
mkdir -p /home/robot-server
cd /home/robot-server

# 克隆或上传项目代码

步骤 2:修改配置

编辑 scripts/index.ts,修改服务器地址:

// 修改目标服务器地址
netCfg.wsUrl = 'wss://game-server-domain.com:7444/lua/web_socket';
netCfg.httpUrl = 'https://game-server-domain.com:7443';

步骤 3:启动机器人服务

# 安装依赖
npm install

# 编译并启动
npm start

# 或使用 PM2 管理
pm2 start dist/scripts/index.js --name robot-server
pm2 save

10. 服务验证和测试

10.1 检查服务状态

# 检查 Nginx/OpenResty 进程
ps aux | grep nginx | grep -v grep

# 检查 Redis 是否运行
redis-cli ping
# 应输出: PONG

# 检查机器人进程(开发环境)
ps aux | grep "node dist/scripts/index.js" | grep -v grep

# 检查端口监听
netstat -tlnp | grep -E '7443|7444|6379'

10.2 测试 HTTP API 接口

推荐使用 APIPOST 测试:

  • 导入项目 API 文档
  • 测试各个接口功能

使用 curl 测试:

# 测试登录接口
curl -X POST https://yourdomain.com:7443/login \
   -H "Content-Type: application/json" \
   -d '{"openid":"test123","nickname":"测试","avatar":"","password":"","isRobot":false}'

10.3 测试 WebSocket 连接

连接地址:

wss://yourdomain.com:7444/lua/web_socket

10.4 查看日志

查看实时日志:

# HTTP API 日志
tail -f /home/TowerDefense_Server/main_openresty/logs/access_https.log

# WebSocket 日志
tail -f /home/TowerDefense_Server/main_openresty/logs/access_wss.log

# 调试日志
tail -f /home/TowerDefense_Server/main_openresty/logs/debug_https.log

# Nginx 错误日志
tail -f /home/TowerDefense_Server/main_openresty/logs/nginx_error.log

10.5 日志文件说明

日志文件说明
access_https.logHTTP API 访问日志
access_wss.logWebSocket 访问日志
debug_https.logHTTP 调试日志
debug_wss.logWebSocket 调试日志
nginx_debug.logNginx 调试日志
nginx_error.logNginx 错误日志
rooms/房间日志(按日期分目录)

11. 常见问题排查

11.1 服务无法访问

症状

  • 无法访问 https://yourdomain.com:7443
  • 浏览器提示连接失败

排查步骤

  1. 检查防火墙
    # 检查端口是否开放
    sudo ufw status
    # 或
    sudo firewall-cmd --list-all
  2. 检查 Nginx 进程
    ps aux | grep nginx
    # 如果没有进程,需要启动服务
  3. 检查 Nginx 配置
    cd /home/TowerDefense_Server/main_openresty
    nginx -t -c conf/nginxGame.conf
  4. 检查错误日志
    tail -50 logs/nginx_error.log
  5. 检查安全组(云服务器)
    • 阿里云:安全组 → 入方向规则
    • 腾讯云:安全组 → 入站规则

11.2 Redis 连接失败

症状

  • 游戏日志显示 Redis 连接失败
  • 错误信息:Connection refused

排查步骤

  1. 检查 Redis 服务状态
    # 宝塔面板检查
    # 或命令行检查
    systemctl status redis
    redis-cli ping
  2. 检查 Redis 端口
    netstat -tlnp | grep 6379
  3. 检查 Redis 配置
    # 查看 Redis 配置文件
    cat /etc/redis/redis.conf | grep -E 'bind|port|protected-mode'
  4. 重启 Redis
    # 宝塔面板操作
    # 或命令行操作
    sudo systemctl restart redis

11.3 Lua 模块加载失败

症状

  • Nginx 错误日志显示:failed to require "xxx"
  • 错误信息:module 'xxx' not found
  • 错误信息:lua entry thread aborted: runtime error

排查步骤

  1. 检查 lua_package_path 配置 ⚠️ 最关键
    # 编辑配置文件
    vi /home/TowerDefense_Server/main_openresty/conf/nginxGame.conf
    
    # 确认第 161 行的路径包含所有必要路径,且使用绝对路径

    重要说明:路径必须是绝对路径,不能使用相对路径或 $prefix 变量。宝塔的 nginx 启动时使用 -p 选项,相对路径无法正确解析。

  2. 验证路径是否正确
    # 检查所有路径是否都存在
    ls -la /home/TowerDefense_Server/main_openresty/libs/
    ls -la /home/TowerDefense_Server/main_openresty/apis/
    ls -la /home/TowerDefense_Server/main_openresty/handler/
    ls -la /home/TowerDefense_Server/main_openresty/battle/
    ls -la /home/TowerDefense_Server/main_openresty/logic/
    ls -la /home/TowerDefense_Server/main_openresty/conf/
  3. 检查文件是否存在
    # 检查库文件
    ls -la /home/TowerDefense_Server/main_openresty/libs/
    
    # 检查是否缺少某个模块
    find /home/TowerDefense_Server/main_openresty -name "*.lua"
  4. 重新安装 Lua 依赖
    # 重新安装依赖库
    sudo luarocks install lua-resty-http
    sudo luarocks install lua-resty-jwt
    sudo luarocks install luautf8
  5. 检查文件权限
    chown -R www:www /home/TowerDefense_Server/main_openresty
  6. 查看详细错误日志
    # 查看 nginx 错误日志
    tail -100 /home/TowerDefense_Server/main_openresty/logs/nginx_error.log
    
    # 查看调试日志
    tail -100 /home/TowerDefense_Server/main_openresty/logs/debug_https.log

11.4 机器人服务无法启动

症状

  • 机器人进程不存在
  • 日志显示机器人连接失败
  • 发现机器人服务被启动了多个实例

排查步骤

  1. 检查是否启动多个服务实例
    # 检查机器人进程
    ps aux | grep "node dist/scripts/index.js" | grep -v grep
    
    # 如果发现有多个进程,需要停止所有进程
    pkill -f "node dist/scripts/index.js"
  2. 检查运行用户是否统一
    # 检查宝塔 Node.js 项目的运行用户
    # 在宝塔面板 → 网站 → Node项目 → 查看 robots 项目的配置
    # 确认运行用户是否为 root
    
    # 检查文件的所有者
    ls -la /home/TowerDefense_Server/main_openresty/ops/robots_nodejs/

    重要:机器人服务的运行用户必须统一设置为 root,避免宝塔和脚本启动不同用户导致的多实例问题。

  3. 检查 Node.js 版本
    node -v
    # 应输出 v16.x.x
  4. 检查依赖安装
    cd /home/TowerDefense_Server/main_openresty/ops/robots_nodejs
    npm list --depth=0
  5. 检查配置文件
    # 检查服务器地址配置
    cat scripts/index.ts | grep "wsUrl\|httpUrl"
  6. 手动启动测试
    cd /home/TowerDefense_Server/main_openresty/ops/robots_nodejs
    npm run dev
  7. 查看机器人日志
    tail -50 robot.log

11.5 其他常见问题

关闭 Lua 脚本缓存会破坏单例 ⚠️ 重要

问题现象:

  • Lua 模块每次请求都创建新实例
  • Redis 连接无法复用
  • 全局状态无法保持
  • 性能严重下降

原因说明:

默认开启 Lua 脚本缓存(lua_code_cache on):

  • 修改代码后需要重新编译 LuaJIT 二进制字节码
  • Lua 模块(如 redis.lua)在首次 require 后会被缓存到 package.loaded
  • 后续 require 直接返回缓存,确保单例模式

关闭缓存(lua_code_cache off)后:

  • 每次请求都会重新加载 Lua 代码(包括 require 的模块)
  • package.loaded 缓存失效
  • 每次 require "redis" 都会执行模块文件并返回新实例
  • 破坏单例:Redis 连接、全局状态等无法共享

解决方案:

  1. 生产环境必须保持 lua_code_cache on:
    # 在 nginxGame.conf 中
    lua_code_cache on;   # 生产环境必须是 on
  2. 开发环境可以临时关闭缓存:
    # 仅在开发环境使用
    lua_code_cache off;
  3. 修改代码后如何更新缓存:
    # 重启 Nginx 服务
    cd /home/TowerDefense_Server/main_openresty
    ./reloadGame.sh   # 生产环境
    # 或
    ./reloadGameDev.sh   # 开发环境

SSL 证书问题

# 检查证书文件是否存在
ls -la /www/server/panel/vhost/cert/yourdomain.com/

# 检查证书是否过期
openssl x509 -in /www/server/panel/vhost/cert/yourdomain.com/yourdomain.com.pem -noout -dates

端口被占用

# 查找占用端口的进程
lsof -i :7443
lsof -i :7444

# 杀死占用进程
kill -9 <PID>

权限问题

# 重新设置权限
chown -R www:www /home/TowerDefense_Server/main_openresty
chmod +x /home/TowerDefense_Server/main_openresty/reloadGame.sh
chmod +x /home/TowerDefense_Server/main_openresty/reloadGameDev.sh

12. 日常运维

12.1 重启服务

开发环境

cd /home/TowerDefense_Server/main_openresty
./reloadGameDev.sh

生产环境

cd /home/TowerDefense_Server/main_openresty
./reloadGame.sh

仅重启 Nginx (保持 WebSocket 实时连接不断开)

cd /home/TowerDefense_Server/main_openresty
nginx -p `pwd` -c conf/nginxGame.conf -s reload

12.2 日志管理

查看日志

# 实时查看错误日志
tail -f /home/TowerDefense_Server/main_openresty/logs/nginx_error.log

# 查看访问日志
tail -f /home/TowerDefense_Server/main_openresty/logs/access_https.log

# 查看指定日期的房间日志
ls -la /home/TowerDefense_Server/main_openresty/logs/rooms/
tail -f /home/TowerDefense_Server/main_openresty/logs/rooms/yourdate/

清理日志

启动脚本会自动备份日志,如果需要手动清理:

# 查看日志大小
du -sh /home/TowerDefense_Server/main_openresty/logs/

# 清理旧日志(保留最近 7 天)
find /home/TowerDefense_Server/main_openresty/logs/ -name "*.log" -mtime +7 -delete

12.3 监控报警

使用宝塔监控面板

  1. 进入宝塔面板
  2. 查看 "监控" → "系统监控"
  3. 关注指标:
    • CPU 使用率(应 < 80%)
    • 内存使用率(应 < 85%)
    • 磁盘使用率(应 < 90%)

配置报警

  1. 在宝塔面板设置报警阈值
  2. 配置通知(邮件/短信/微信/钉钉)
  3. 监控以下指标:
    • Nginx 连接数
    • Redis 内存使用
    • 系统负载

12.4 备份策略

备份用户数据

  • 推荐使用宝塔 计划任务 自动备份至 云对象存储空间 (阿里云OSS/腾讯云COS/七牛云KODO)
# 导出 Redis 数据
redis-cli --rdb /backup/redis_$(date +%Y%m%d).rdb

备份配置文件

# 备份配置文件
tar -czf /backup/config_$(date +%Y%m%d).tar.gz \
   /home/TowerDefense_Server/main_openresty/conf/

13. 生产环境注意事项

13.1 性能优化

必须开启 Lua 缓存

绝对不要关闭 lua_code_cache!

在配置文件中确保:

# 第 200 行(或类似位置)
lua_code_cache on;   # 生产环境必须是 on

关闭缓存的危害:

  • 每次请求重新加载代码
  • 无法保证单例模式
  • 性能严重下降
  • Redis 连接无法复用

配置 Worker 进程数

# nginxGame.conf 第 4 行
worker_processes auto;   # 自动根据 CPU 核心数设置

# 或手动指定
worker_processes 4;

优化 Worker 连接数

# nginxGame.conf 第 24 行
worker_connections 51200;   # 每个 worker 最大连接数

13.2 Redis 持久化配置

在生产环境,确保 Redis 已配置持久化:

# 编辑 Redis 配置
vi /etc/redis/redis.conf

# 确认以下配置
save 900 1
save 300 10
save 60 10000

13.3 安全配置

配置 HTTPS 强制跳转

在宝塔面板网站设置中:

  1. 进入网站设置
  2. 切换到 "SSL" 标签
  3. 勾选 "强制 HTTPS"
  4. 保存配置

配置防火墙

# 配置 UFW 防火墙
sudo ufw allow 7443/tcp
sudo ufw allow 7444/tcp
sudo ufw allow 6379/tcp
sudo ufw enable

禁用不必要的端口

# 禁用不需要的端口
sudo ufw deny 80/tcp
sudo ufw deny 443/tcp

附录

A. 目录结构说明

/home/TowerDefense_Server/
├── main_openresty/   # 主服务器目录
│   ├── apis/   # HTTP API 接口
│   │   ├── login/   # 登录相关
│   │   ├── user/   # 用户相关
│   │   ├── friend/   # 好友相关
│   │   ├── room/   # 房间相关
│   │   ├── shop/   # 商店相关
│   │   └── ...
│   ├── battle/   # 战斗系统
│   │   ├── Hero*.lua   # 英雄配置
│   │   ├── Enemy.lua   # 敌人配置
│   │   ├── Player.lua   # 玩家逻辑
│   │   └── ...
│   ├── handler/   # 业务处理
│   │   ├── centerhandler.lua   # 中心处理
│   │   ├── roomhandler.lua   # 房间处理
│   │   └── ...
│   ├── logic/   # 业务逻辑
│   │   ├── User.lua   # 用户逻辑
│   │   ├── Friend.lua   # 好友逻辑
│   │   └── ...
│   ├── conf/   # 配置文件
│   │   ├── nginxGame.conf   # 生产环境配置
│   │   ├── nginxGameDev.conf   # 开发环境配置
│   │   ├── locationHTTP.conf   # HTTP 路由配置
│   │   ├── locationWS.conf   # WebSocket 路由配置
│   │   ├── ConfigBattle.lua   # 战斗配置
│   │   ├── ConfigGame.lua   # 游戏配置
│   │   └── ...
│   ├── libs/   # 库文件
│   │   ├── redis.lua   # Redis 库
│   │   ├── utils.lua   # 工具库
│   │   └── ...
│   ├── ops/   # 运维脚本
│   │   └── robots_nodejs/   # 机器人服务
│   │   ├── scripts/   # TypeScript 脚本
│   │   ├── package.json   # Node 依赖
│   │   └── ...
│   ├── logs/   # 日志目录
│   │   ├── rooms/   # 房间日志
│   │   ├── nginx_error.log   # 错误日志
│   │   └── ...
│   ├── reloadGame.sh   # 生产环境重启脚本
│   ├── reloadGameDev.sh   # 开发环境重启脚本
│   └── install_dependencies.sh   # Lua 依赖库一键安装脚本

B. 依赖库列表

必需的 Lua 依赖库

项目使用两种包管理器分别安装不同类别的库:

使用 OPM 安装的库(OpenResty 专用)
依赖库安装命令说明
lua-resty-loggeropm get xiedacon/lua-resty-logger日志记录库
lua-utilityopm get xiedacon/lua-utility工具函数库
lua-fs-moduleopm get xiedacon/lua-fs-module文件系统模块
lua-resty-configopm get xiedacon/lua-resty-config配置管理库
使用 LuaRocks 安装的库(通用 Lua 库)
依赖库版本安装命令说明
lua-resty-http0.17.2-0luarocks install lua-resty-httpHTTP 客户端库
lua-resty-jwt0.2.3-0luarocks install lua-resty-jwtJWT 认证库
lua-resty-openssl1.6.1-1luarocks install lua-resty-opensslOpenSSL 绑定库
luautf80.1.6-1luarocks install luautf8UTF-8 字符串处理
lua-resty-validation2.7-1luarocks install lua-resty-validation参数验证库
lua-resty-reqargs1.4-1luarocks install lua-resty-reqargs请求参数解析器
luasocket3.1.0-1luarocks install luasocketSocket 库

验证依赖库安装

# 验证 OPM 安装的库
opm list

# 验证 LuaRocks 安装的库
luarocks list

# 如果缺少某个库,使用相应的包管理器安装
# OPM: opm get [库名]
# LuaRocks: luarocks install [库名]

OpenResty 内置库

以下库由 OpenResty 提供,无需额外安装:

  • cjson - JSON 编码/解码
  • redis - Redis 客户端
  • resty.*** - OpenResty 官方提供的各种 resty 库

C. 配置文件参数详解

nginxGame.conf 关键参数

参数说明默认值
worker_processesWorker 进程数auto
worker_connections每进程最大连接数51200
lua_shared_dict共享内存配置见配置
lua_package_pathLua 模块搜索路径见配置
DOMAIN服务器域名yourdomain.com
PORTWebSocket 端口7444
RELEASE环境模式true

locationHTTP.conf 接口说明

  • /login - 用户登录
  • /getMain - 获取主界面数据
  • /user/* - 用户相关接口
  • /friend/* - 好友相关接口
  • /room/* - 房间相关接口
  • /shop/* - 商店相关接口
  • /mail/* - 邮件相关接口

D. 端口列表

端口协议用途说明
8888TCP宝塔面板宝塔管理入口
7443TCPHTTPS API游戏 HTTP 接口
7444TCPWSSWebSocket 游戏连接
6379TCPRedis数据库端口
22TCPSSH远程管理

E. 相关链接和文档

F. 联系支持

如遇到问题,请:

  1. 查看错误日志
  2. 参考本文档的常见问题章节
  3. 检查配置文件是否正确
  4. 联系@技术支持团队 lishupeng@msvc.com.cn

文档版本: v1.0

最后更新: 2025年10月26日

适用版本: OpenResty 1.25.3.2/1.27.1.2, Redis 7.4.3, Node.js v16.x

分享到:
登录
获取验证码
登录
登录
其他账号登录:
我的收藏
◆
我的资料
◆
购物车
0
留言
◆
回到顶部
◆