“NGINX邮件组历史”论坛上线了

🙈 By 单雷, 田畅 2025-02-20

“NGINX邮件组历史”论坛上线了

背景

img

长久以来,forum.nginx.org 作为nginx邮件讨论组的论坛形式,是NJet以及广大的NGINX开发人员交流、讨论的主要资源站点,尤其是方便的搜索能力,使得开发人员可以方便的查询历史讨论信息。但很遗憾,该站点已经下线,F5推出了community.nginx.org, 但并没有把历史数据迁移过来。

OpenNJet因此决定从NGINX email 讨论组的邮件归档中,重构一个论坛,便于开发人员进行搜索历史数据。同时,该论坛直接采用了NJet实现的python应用服务器框架,也是NJet能力的一个证明

设计

部署架构

出于对NJet应用服务器能力的展示要求,NJet选择了基于python语言,django架构的开源论坛软件spirit(https://github.com/nitely/Spirit),不需要采用传统的 nginx 代理+python应用服务器的模式,spirit安装后,将直接在NJet进程内部运行,如下图展示

img

Email archive到论坛的转换模型

受限于spirit的模型, email archive转换为论坛时,不能够根据email进行树状转换,而仅仅实现了一层的扁平转换。举例来说,Email A 首先创建了一个主题的讨论邮件,后续Email B ,C 做了回复, Email D 针对Email C做了回复。所有这4封邮件,会转换为一个topic(即通过邮件A 的subject创建的topic)的讨论,该topic下会存在4条讨论。

论坛的用户直接从邮件的发送者转化而来,发送者的姓名+邮件地址构建为一个唯一用户

配置实例

python环境和spirit项目初始化
安装pyenv 以及建立虚拟环境与安装django-spirit等包

安装与配置数据库

配置njet 使用wsgi启动spirit论坛

Bash  
load_module modules/njt_python_wsgi_module.so;  
python_stack_size 2m;  
http {  
...  
server {  
server_name 192.168.40.40;  
listen 192.168.40.40:80;  
location / {  
root /home/njet/spirit/nginxform;  
wsgi nginxform;  
}  
location /static/ {  
root /home/njet/spirit/nginxform/;  
expires 1y;  
add_header Cache-Control public;  
}  
}  
<br/>...  
}

Njet启动

配置PYTHONPATH 后即可

Bash  
export PYTHONPATH="/home/njet/.pyenv/versions/spirit-env/lib/python3.8/site-packages:/home/njet/spirit/nginxform"  
/usr/local/njet_spirit/sbin/njet -p /usr/local/njet_spirit -c conf/njet.conf

参考说明

1.为什么采用python 应用直接部署在NJet的架构

该部署模式,具备传统的部署模式有部署简便、开发简化、高性能的优势。

部署简便:

避免了proxy+python应用服务器部署架构的由proxy处理静态资源,应用服务器出来动态请求的模型,仅仅一个server就可以利用NJet的高效IO处理静态资源

开发简化:

python应用开发人员,仅仅编写同步调用的代码,无需考虑线程、异步调用, 业务请求就可以得以在NJet内部以类似协程的模型执行,IO操作不会被阻塞,从而实现业务的并行

高性能:

NJet中运行python 应用会比常见的python应用服务器有10倍以上的性能提升

2.当前上线nginx-dev的历史

NGINX email archive从https://mailman.nginx.org/pipermail/nginx-devel/获得

3.从NGINX email archive转换为论坛的脚本,借助于deepseek编写完成,如果有类似的需求,可以联系 njet-user@njet.org.cn 获取

4.Spirit 论坛软件的安装,可以参考其readdocs站点

其支持多种数据库连接,在本项目中,选择了mysql数据库,并选择了基于纯python实现的mysql connector驱动,是因为可以利用NJet特有的“同步编写,异步IO执行能力”

5.请直接访问https://forum.njet.org.cn 访问