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

掌柜的
2025-10-26

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 12Ubuntu 22.04Ubuntu 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

阅读94
分享
写评论...