接上回 教你在 Ubuntu 22.04 系统上搭建 NodeBB 开源论坛程序(一),虽然完成了 NodeBB 程序的搭建,但是如果采用 IP+ 端口的方式访问太 low 了,今天我们继续上节内容未完成的内容,继续补充完整剩余步骤。
三、配置反向代理
- 配置反向代理我们使用 nginx 来进行,首先需要在本机安装 nginx 服务器。
sudo apt-get install -y nginx
2. 检测 nginx 是否安装成功,还是采用能否输出版本信息来判断。
nginx -v
3. 使 nginx 启动并且加入开机自启动,最后监测 nginx 运行状态。状态中有关键字:active,说明 nginx 出于运行状态。
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
4. 修改 nginx 配置文件
cd /etc/nginx/sites-available
sudo nano zerr.me
将下面的代码粘贴到 zerr.me 文件中,这会将使用 4567 端口导向使用 80 端口访问,这样就不用在网址后面输入4567 端口号。(注意:网址和 root路径请修改为自己的)
server {
listen 80;
listen [::]:80;
server_name zerr.me;
location ^~ /.well-known/ {
default_type "text/plain";
allow all;
root /var/www/nodebb;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
执行下列命令,使配置文件生效。
cd ../sites-enabled
sudo ln -s ../sites-available/zerr.me
执行下列命令检测配置文件是否有错误,无误的话重启 nginx。
sudo nginx -t
sudo systemctl reload nginx
此时,如果你已经将域名解析到IP,那么就可以通过域名访问。如果未能访问,则还是因为防火墙的原因,使用下列命令开放 80 端口即可。如果之前已经将防火墙彻底关闭,则不会出现该问题。
ufw allow 80
四、使用 HTTPS 访问
上述操作完成后,可以省去输入端口号,但是前面出现了不安全的字符。现在基本上所有的网站都使用 HTTPS 加密访问,所以我们也要为网站添加该功能,申请 SSL 证书,使用 HTTPS 更安全的访问。
- 使用 acme.sh 脚本生成论坛网站的 SSL证书,并手动配置Nginx。
使用 acme 申请证书前,需要停止 nginx 服务,否则会导致证书申请失败。
systemctl stop nginx
输入下列命令,申请证书。(请将域名更换为自己的域名,email 一项请填写自己的 email 邮件地址)
sudo apt-get install socat -y
sudo curl https://get.acme.sh | sh -s email=9823994@qq.com
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d zerr.me --standalone
接下来,我们将证书导入到指定文件夹,比如我们将证书安装到下面路径中:
mkdir -p /var/www/nodebb/ssl
~/.acme.sh/acme.sh --install-cert -d zerr.me \
--key-file /var/www/nodebb/ssl/zerr.me.key \
--fullchain-file /var/www/nodebb/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
打开 nginx 配置文件
cd /etc/nginx/sites-available
sudo nano zerr.me
删除之前的配置文件中的内容,更改为以下 nginx 配置:
server {
listen 80;
listen [::]:80;
server_name zerr.me;
location ^~ /.well-known/ {
default_type "text/plain";
allow all;
root /var/www/nodebb;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name zerr.me;
location ^~ /.well-known/ {
default_type "text/plain";
allow all;
root /var/www/nodebb;
}
ssl_certificate /var/www/nodebb/ssl/fullchain.cer;
ssl_certificate_key /var/www/nodebb/ssl/zerr.me.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
最后我们,再次检查一下 nginx 配置文件是否正确,无误的话重启 nginx,然后打开 443 端口(在这吃了很大亏,一直无法访问,后来才知道是 443 端口没打开,建议搭建之前直接使用命令打开所有常见端口,或者直接关闭防火墙,搭建完成后再按需打开)。
sudo nginx -t
sudo systemctl restart nginx
ufw allow 443
上图可见,可以使用 HTTPS 进行安全访问。
五、将 NodeBB 加入开机自启动进程
NodeBB 在系统重启后不会自动启动,为了防止因系统无故重启,导致 NodeBB 关闭,所以我们需要将 NodeBB 加入到系统开机自启动进程。
- 停止正在运行的 NodeBB 程序
cd /var/www/nodebb
./nodebb stop
2. 新建 nodebb.service systemd 系统进程文件
sudo nano /etc/systemd/system/nodebb.service
3.下面代码粘贴到编辑器中
[Unit]
Description=NodeBB
After=system.slice multi-user.target mongod.service
[Service]
Type=forking
User=nodebb
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb
Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always
[Install]
WantedBy=multi-user.target
根据需要替换你的用户名 User=nodebb 和 WorkingDirectory=/var/www/nodebb 的路径。在这里我选择了在之前的步骤中创建的用户名 nodebb 以及我们选择在其中安装 NodeBB 的路径。
启用自启动 NodeBB 服务。
sudo systemctl enable nodebb
sudo systemctl start nodebb
sudo systemctl status nodebb
可通过执行以下操作启动和停止 NodeBB:
systemctl start nodebb
systemctl stop nodebb
最后,我们输入 reboot,重启启动后,查看是否可以访问 NodeBB 论坛。经过我的测试,再系统重启后可以正常访问论坛,至此,我们就完成了 NodeBB 论坛从环境部署到使用域名访问的全部过程,之后的备份和升级建议大家参考官方升级和备份教程。
参考资料:官方文档、开源论坛软件Nodebb 现代网络社区平台搭建教程。
推荐阅读