Skip to content

Commit 259b992

Browse files
authored
Merge pull request #16 from Lean-zh/rex/dev
update lean4game doc
2 parents 5b74eb5 + 99dde17 commit 259b992

1 file changed

Lines changed: 85 additions & 30 deletions

File tree

docs/projects/lean4game.md

Lines changed: 85 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
本篇介绍如何用 Lean4Game 添加 Lean4 游戏。这类互动游戏不仅利于 Lean 本身的学习,还能促进对学科知识的理解,让关联的学科群体对 Lean 有更直观的认识。
55

6-
当前部署了 NNG4 游戏[nng4.leanprover.cn](https://nng4.leanprover.cn) ,可在线体验,后续计划写一个李代数入门的(mark 开坑)
6+
当前部署了 NNG4 在线游戏(托管 @rexwzh )[nng4.leanprover.cn](https://nng4.leanprover.cn) ,可在线体验。
77

88
### 相关项目与资源
99

@@ -85,7 +85,7 @@ nvm use node
8585
# 下载 Lean4Game
8686
git clone https://github.com/leanprover-community/lean4game.git
8787
cd lean4game
88-
# 安装依赖
88+
# 安装依赖 (必须加上 --force 以解决依赖冲突)
8989
npm install --force
9090
```
9191

@@ -99,7 +99,12 @@ export VITE_CLIENT_DEFAULT_LANGUAGE=zh
9999

100100
其中 `PORT` 为运行 Lean 代码的后端端口,默认是 `8080``CLIENT_PORT` 为前端访问端口,默认是 `3000``VITE_CLIENT_DEFAULT_LANGUAGE` 为界面语言,默认为 `en`
101101

102-
执行 `npm start` 启动游戏,如果看到以下页面,就表示访问成功:
102+
执行 `npm start` 启动游戏。该命令会同时启动三个服务:
103+
- **Server**: 后端 Lean 代码执行环境(8080 端口)。
104+
- **Relay**: WebSocket 中继服务。
105+
- **Client**: 前端 Vite 界面(3000 端口)。
106+
107+
如果看到以下页面,就表示访问成功:
103108

104109
![20240623121710](https://qiniu.wzhecnu.cn/PicBed6/picgo/20240623121710.png)
105110

@@ -109,62 +114,105 @@ export VITE_CLIENT_DEFAULT_LANGUAGE=zh
109114

110115
### Nginx 配置
111116

112-
如果一切顺利,访问 `http://localhost:3000/#/g/local/GameSkeleton` 会看到 “Hello World” 的界面:
117+
假设服务启动在 3000 端口(且后端通过 8080 端口或 websocket 通信),我们需要配置 Nginx 来反向代理这些服务。
113118

114-
![20240623130158](https://qiniu.wzhecnu.cn/PicBed6/picgo/20240623130158.png)
119+
以下是一个完整的生产环境配置示例,包含两部分:
120+
1. **游戏主站** (`lean4game.leanprover.cn`):代理到本地服务,支持 WebSocket。
121+
2. **游戏跳转** (`nng4.leanprover.cn`):将特定子域名重定向到具体的游戏路径。
115122

116-
假设服务启动在 3000 端口,可以将域名 `game.leanprover.cn` 配置为游戏主页面,参考配置如下:
123+
```nginx
124+
# WebSocket 支持所必需的配置
125+
map $http_upgrade $connection_upgrade {
126+
default upgrade;
127+
'' close;
128+
}
129+
130+
# 1. 游戏主站配置
131+
server {
132+
listen 80;
133+
server_name lean4game.leanprover.cn;
134+
rewrite ^(.*)$ https://$host$1 permanent;
135+
}
117136
118-
```bash
119137
server {
120138
listen 443 ssl;
121-
ssl_certificate /etc/letsencrypt/live/game.leanprover.cn/fullchain.pem;
122-
ssl_certificate_key /etc/letsencrypt/live/game.leanprover.cn/privkey.pem;
123-
server_name game.leanprover.cn;
139+
server_name lean4game.leanprover.cn;
140+
141+
# SSL 证书配置 (请替换为实际路径)
142+
ssl_certificate cert/leanprover.cn/fullchain.pem;
143+
ssl_certificate_key cert/leanprover.cn/privkey.pem;
144+
145+
# SSL 优化配置
146+
ssl_session_cache shared:le_nginx_SSL:10m;
147+
ssl_session_timeout 1440m;
148+
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
149+
ssl_prefer_server_ciphers on;
150+
124151
location / {
125-
proxy_pass http://localhost:3000;
126-
proxy_set_header Upgrade $http_upgrade;
127-
proxy_set_header Connection "Upgrade";
128-
proxy_set_header Host $host;
129-
proxy_read_timeout 86400;
130-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
152+
# 代理到本地服务端口 (例如 frp 映射的端口或本地 3000)
153+
proxy_pass http://127.0.0.1:3110;
154+
131155
proxy_ssl_server_name on;
156+
proxy_set_header Host $host;
157+
proxy_set_header Connection $connection_upgrade;
132158
proxy_http_version 1.1;
133159
chunked_transfer_encoding off;
134160
proxy_buffering off;
135161
proxy_cache off;
162+
proxy_set_header X-Forwarded-For $remote_addr;
136163
proxy_set_header X-Forwarded-Proto $scheme;
137-
client_max_body_size 0;
164+
proxy_set_header Upgrade $http_upgrade;
138165
}
139166
}
140-
```
141167
142-
为简化输入,可以为游戏单独配置一个子域名进行跳转,例如 `nng4.leanprover.cn`
168+
# 2. 特定游戏重定向 (例如 NNG4)
169+
server {
170+
listen 80;
171+
server_name nng4.leanprover.cn;
172+
rewrite ^(.*)$ https://$host$1 permanent;
173+
}
143174
144-
```bash
145175
server {
146-
listen 443 ssl;
147-
ssl_certificate /etc/letsencrypt/live/nng4.leanprover.cn/fullchain.pem;
148-
ssl_certificate_key /etc/letsencrypt/live/nng4.leanprover.cn/privkey.pem;
176+
listen 443 ssl;
149177
server_name nng4.leanprover.cn;
150-
return 301 https://game.leanprover.cn/#/g/local/NNG4;
178+
179+
ssl_certificate cert/leanprover.cn/fullchain.pem;
180+
ssl_certificate_key cert/leanprover.cn/privkey.pem;
181+
182+
# 重定向到具体的游戏路径
183+
return 301 https://lean4game.leanprover.cn/#/g/local/NNG4;
151184
}
152185
```
153186

154-
这样只需访问 nng4.leanprover.cn,而不需要输入后面的一长串 URI。
187+
这样配置后:
188+
- 访问 `lean4game.leanprover.cn` 将进入游戏大厅或主界面。
189+
- 访问 `nng4.leanprover.cn` 将直接跳转到自然数游戏 (NNG4)。
155190

156191

157192
<!-- 通常,对 `client/` 或 `relay/` 中文件的任何更改都会导致服务器自动重新启动。
158193
159-
在生产环境中,可以执行 `npm run build` 在 `client/dist` 下构建代码,再启动服务
194+
在生产环境中,推荐的启动流程如下
160195
196+
```bash
197+
# 构建所有组件 (Server, Relay, Client)
161198
npm run build
162-
npm run start_client
163-
npm run production
164199
165-
这里似乎存在 bug
200+
# 启动生产环境中继器 (会自动管理 Server 进程)
201+
npm run production
202+
```
166203
-->
167204

205+
## 本地开发技巧
206+
207+
如果你正在修改 `lean4game/server` 中的代码,并希望 NNG4 使用本地的服务器逻辑而非远程仓库版本,请在 NNG4 目录下执行:
208+
209+
```bash
210+
lake update -Klean4game.local
211+
lake build
212+
```
213+
214+
这样可以方便地调试游戏引擎的功能。
215+
168216
## 游戏修改指南
169217

170218
本节以 NNG4 为例,介绍游戏文件结构和如何添加游戏内容。
@@ -396,7 +444,14 @@ Statement
396444

397445
## 游戏翻译
398446

399-
通过使用 lean-i18n 和 i18next,可以为游戏添加多语言支持。TODO Ref: https://github.com/leanprover-community/lean4game/blob/main/doc/translate.md
447+
通过使用 lean-i18n 和 i18next,可以为游戏添加多语言支持。详细流程如下:
448+
449+
1. **生成模板**:在游戏目录下运行 `lake build`,会自动生成 `.i18n/en/Game.pot` 模板文件。
450+
2. **翻译文件**:使用 Poedit 等工具打开 `.pot` 文件,进行翻译并保存为目标语言的 `.po` 文件(例如 `.i18n/zh/Game.po`)。
451+
3. **导出 JSON**:运行 `lake exe i18n --export-json`,将翻译导出为服务器所需的 JSON 格式。
452+
4. **前端翻译**:对于 lean4game 框架本身的界面翻译,可以查看 `lean4game/client/public/locales` 目录。可以使用 `npm run translate` 扫描前端代码中的新字符串。
453+
454+
更多详情请参考 [translate.md](https://github.com/leanprover-community/lean4game/blob/main/doc/translate.md)
400455

401456
---
402457

0 commit comments

Comments
 (0)