“NGINX邮件组历史”论坛上线了
背景
长久以来,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进程内部运行,如下图展示
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 访问