nodebb搭建部署历程

虽然可以用docker直接拉镜像,但我很傻逼的直接安装在系统里。这边记录一下碰到的坑及我经常用到的指令,以便后续查看。
其中nodebb搭建步骤可以直接在官方文档中看到十分详细的说明,此处不再赘述。只对个人觉得需要记录的部分:数据库安装、域名相关及服务器上安装证书这三个较为繁琐的部分进行阐述。
nodebb可以选择不同的数据库,我这边使用了默认的mongodb数据库
数据库中分了两个表,一个是用户信息表,一个是缓存信息表。
nodebb里面有一个docker-compose.yml文件,是可以直接用docker-compose的一个指令搭起来的,然而我发现的时候已经走完了所有流程。

mongodb安装

简单安装步骤这边就不详细提了,跟着nodebb的教程安装就行。
最后只需要在nodebb里面填一个能够连上安装的数据库的链接就行。

指令mongod --dbpath ${yourdir}用来运行mongodb
指令mongod --config ${mongod.config} --shutdown用来关闭mongod
指令mongod --config ${mongod.config} -fork -auth &用来开启mongod进程
其中--config是指定mongod.conf(mongodb配置文件)的位置,fork是开启子分支,让mongdb可以后台运行子分支(个人理解)。${mongod.config}默认位置在/etc/mongod.conf中。

域名相关

域名购买这个问题,其实就可以很随心的,不过需要考虑后续会用域名做些什么,比如 申请企业邮箱这种事情,太过于小众的后缀就不能选了(如:.top)

服务器购买的话,这个自己挑就行,看网上大家介绍。

关于dns解析:

dns查询网站
A 是域名解析,一般是用来解析域名指向的服务器ip地址
CNAME是二级域名解析,一般可以指向一级域名,这样动态改变一级域名指向的服务器地址,也无需对CNAME进行更改【CNAME只能指向其他域名,就是输入这个域名,然后转到其他域名对应的ip上】。

如果只是单纯的解析域名让域名指向网站,了解这部分就够了。

服务器上安装证书

在阿里云有教程,跟着教程走一般不出错。
1、先在ngnix目录下新建一个cert(就是在和ngnix.config一级的目录下),将证书秘钥和pem文件上传到cert文件夹下。
2、修改ngnix.config:
找到http的大代码块,然后里面可以有很多server的代码块。
ps:如果该文件中只有listen 80的server,那么在那个server块下面(或上面)另起一个块把下面那堆代码复制上去。
我个人理解是,每个server监听的接口不一样,这样不会弄混。

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate ${证书pem位置};
    ssl_certificate_key ${证书key位置};
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    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";

    }
}

https监听的端口是443
http监听的端口是80,如果访问http,那需要将http强制跳转到https的连接上,所以将监听80的端口的server代码块改成:

server {
    listen 80;
    server_name sanbaxiujiyuan.top www.sanbaxiujiyuan.top;
    return 302 https://$server_name$request_uri;
}

做一个重定向,转到https的连接上去。

当网站出现了网页错误时,会显示40x 50x此类型的错误代码
如果想要自定义出现这些代码的错误页面,那么可以在ngnix上添加自己设计的页面脚本,再在有效监听的server(比如https的443 端口)的代码块中添加以下代码【需要根据实际情况进行修改】:

proxy_intercept_errors on;
error_page   500 502 503 504  /50x.html; 
location = /50x.html {
     root /usr/share/nginx/html;
     internal;
 }

可以很明显看出,该段代码设置了50x错误代码的页面样式
其中error_page后面接的是当网站出现500 502 503 504 这四种错误时,将通过页面/50x.html进行展示。
其中/50x.html页面位置在location中的root后进行了一个定义。

出现问题及解决方法

问题1:

使用指令mongodump -h 107.0.0.1 -d ${databasename} -o backup/mongod/对数据库进行备份,出现报错Unauthorized

详细报错内容

error creating intents to dump: error getting collections for database `xxx`: (Unauthorized) command listCollections requires authentication

解决方法

输入指令如下:mongodump -d test -o ~/backup/mongodb mongodb://${username}:${password}@${mongodb_ip}/?authSource=admin
其中,-d是指定需要备份的数据库,-o是指定备份文件存储位置,最后的url是用来连接上mongodb的路径。

问题2

sendmail not find
如果想用nodebb中的邮箱功能,需要在系统中sudo apt-get install sendmail
[邮箱可以用qq邮箱作为代理]

关于为什么nodebb需要用sendmail这部分需要看源码是怎么实现的。
这边最近看了一波关于邮箱的知识,等答辩结束回来写==

问题3

域名访问会自动跳转到:https://xxxxxx.xx/:${端口号}/
这种情况肯定不是ngnix出现问题,如果是它的问题,那端口号前面就不会有/,且error.log日志里面也会详细报错信息。所以是我nodebb配置写错了。

问题4

nodebb如何迁移到其他服务器?
1、在新服务器上对nodebb进行安装部署[安装文件中有docker-compose.yml文件,可以修改这个文件,把该挂载出来的文件挂载出来就可以了。
2、更新域名dns解析的A
3、在原服务器上对数据进行备份,并将备份导入新服务器中的对应数据库。
4、./nodebb start
5、安装ngnix
6、重新上传未过期证书
7、按本部分对ngnix.config进行修改并补充。
8、service ngnix restart

问题5

网站出问题了,怎么办
学会看日志,日志位置:官方文档有详细解释。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐