运维手册
-
要求环境
本教程只适用于以下环境版本,版本不同概不负责
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
为确保本教程具有较长的生命周期,请尽可能保持版本一致
插件
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
缺环境,ubuntu/debian 系统安装 Curl
apt-get update -y apt-get install curl git make -y
你也可以:
apt-get update -y && apt-get install curl -y
搭建
时区
linux开机后先校对时区
apt-get update -y && apt-get install curl -y sudo tzselect //asia //chia //1 //1 //替换以前的配置文件 sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //写入cmos硬件时钟 sudo hwclock --systohc //查看执行结果 sudo date -R
安装
Node.js
当然,NodeBB 是由 Node.js 驱动的,所以需要安装。Node.js 是一个快速发展的平台,因此建议安装当前的 LTS 版本的 Node.js,以使未来的更新变得顺畅。Node.js LTS 计划详细说明了 LTS 发布时间表,包括预计的生命周期结束。
Node.js 可从 NodeSource Ubuntu 二进制分发存储库中获得。
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt-get install -y nodejs npm install --global yarn
验证 Node.js 和 npm 的安装。您应该安装了 16 版的 Node.js,并安装了 6 版的 npm:
node -v npm -v
MongoDB
以下是Ubuntu 官方 MongoDB 安装指南的缩写。如果您遇到问题,请改用该指南。
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list sudo apt-get update sudo apt-get install -y mongodb-org
验证 MongoDB 的安装。你应该有 5.0 版:
mongod --version //db version v5.0
启动
mongod
服务并验证服务状态:sudo systemctl start mongod sudo systemctl status mongod
配置 MongoDB
一般 MongoDB 管理是通过 MongoDB Shell 完成的
mongo
。MongoDB 的默认安装侦听端口27017
并且可以在本地访问。访问外壳:mongo
切换到内置
admin
数据库:use admin
nodebb
创建一个管理用户(与我们稍后创建的用户不同)。<Enter a secure password>
用您自己选择的密码替换占位符。确保<
and>
也不会被遗忘。db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "root", db: "admin" } ] } )
admin
启用授权后,此用户的范围仅限于管理 MongoDB 的数据库。最初创建一个不存在的数据库
use
。添加一个名为的新数据库nodebb
:use nodebb
将创建数据库并将上下文切换到
nodebb
. 接下来创建nodebb
具有适当权限的用户:db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
该
readWrite
权限允许 NodeBB 从nodebb
数据库中存储和检索数据。该clusterMonitor
权限为 NodeBB 提供了对查询数据库服务器统计信息的只读访问权限,这些统计信息随后显示在 NodeBB 管理控制面板 (ACP) 中。退出 Mongo Shell:
quit()
/etc/mongod.conf
通过附加以下行在MongoDB 配置文件中启用数据库授权:vi /etc/mongod.conf
security: authorization: enabled
重新启动 MongoDB 并验证之前创建的管理用户可以连接:
sudo systemctl restart mongod mongo -u admin -p your_password --authenticationDatabase=admin
如果一切配置正确,Mongo Shell 将连接。退出外壳。
NodeBB
安装 NodeBB
首先,我们必须安装它,
git
因为它用于分发 NodeBB:sudo apt-get install -y git
注意:命令
git
和不./nodebb
应该与 root 访问(或提升的权限)一起使用。这将导致 NodeBB 需要访问的文件所有权不同的问题sudo
接下来,将 NodeBB 克隆到适当的位置。这里使用本地
nodebb
目录,但任何目的地都可以:git clone -b v1.19.7 https://github.com/NodeBB/NodeBB.git /home/dandao cd /home/dandao
这会将 NodeBB 存储库从
v1.19.x
分支克隆到nodebb
目录。NodeBB 分支GitHub 页面中提供了替代分支列表,但只有版本化分支是稳定的。NodeBB 附带一个命令行实用程序,它允许执行多种功能。我们将首先使用它来设置 NodeBB。这将从npm安装模块,然后进入 setup 实用程序。
./nodebb setup
将提示一系列问题,括号中为默认值。默认设置是本地服务器在默认端口
4567
上侦听,MongoDB 实例在端口上侦听27017
。当提示输入 mongodb 用户名和密码时,输入nodebb
和您之前配置的密码。确认与数据库的连接后,安装程序将提示初始用户安装程序正在运行。由于这是一个全新的 NodeBB 安装,因此必须配置论坛管理员。输入所需的管理员信息。这将在一条NodeBB Setup Completed
消息中达到高潮。MongoDB username 输入 nodebb Password of your MongoDB database 输入 your_password MongoDB database name (nodebb) 数据库名输入 nodebb Administrator username 输入用户名 Administrator email address 输入 email Password 输入 密码 Confirm Password 重复密码
注意:输入您的站点 URL 时,请确保它正是您计划访问您的站点的位置。如果您打算访问
http://example.org
以打开您的论坛,请准确输入http://example.org
.在 nodebb 目录的根目录下会创建一个配置文件config.json 。如果您需要进行更改,例如更改数据库位置或用于访问数据库的凭据,则可以修改此文件。
最后,您可以使用 cli 实用程序启动 NodeBB:
./nodebb start 启动 ./nodebb stop 停止 ./nodebb help
Nginx
这里推荐安装Nginx Proxy Manager
需要环境sudo apt install python3-pip pip3 --version
安装docker
安装依然使用我们的老伙计-docker,但这次要使用到docker的伙计:docker-compose,使用docker-compose可以帮助我们编排自己的容器,通过一个简单的脚本启动复杂的程序,自动处理依赖项目,从而简化操作。
在自己的Linux(Ubuntu/CentOS 7+)服务器上执行以下命令安装docker, 安装完成后执行第二条命令,启动并设置开机启动docker。
sudo apt-get install -y docker.io systemctl enable --now docker
安装docker-compose
sudo pip install docker-compose
检查
# 查看docker版本 docker -v # 查看docker-compose版本 docker-compose -v
部署Nginx Proxy Manager
创建一个目录用于存放Nginx Proxy Manager的配置和项目文件
mkdir -p /opt/docker/NginxProxyManager && cd /opt/docker/NginxProxyManager
创建一个docker-compose.yml文件
vi docker-compose.yml
粘贴以下内容:
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
按下键盘上的esc键,输入:wq保存退出。 请注意文件间的缩进,如果缩进不正确,可以使用文本编辑器编辑好后上传到服务器上。
启动Nginx Proxy Manager
docker-compose up -d
访问控制页面
使用你的ip:81,如果有防火墙,可以临时放通81的tcp端口。
初始的用户和密码如下:
Email: [email protected] Password: changeme
NodeBB使用
目前,脚本提供了几个选项参数:
-V, --version 输出 NodeBB 版本号 --json-logging 以 JSON 的形式输出日记 --log-level <level> 指定默认显示的日记最低等级,如 `info` -d, --dev 开发模式 (默认日记等级为: `verbose`) -l, --log 同时将日记输出到终端 (console) 中 -c, --config <value> 指定 config 文件的位置 -h, --help 输出使用帮助
NodeBB 指令
本小节旨在介绍 NodeBB 中提供的不同操作指令
启动 NodeBB
./nodebb start
停止 NodeBB
./nodebb stop
重启 NodeBB
./nodebb restart
查看 NodeBB 运行状态
./nodebb status
查看日志
./nodebb log
通过该指令,你可以查看到 NodeBB 运行过程中记录的一些事件,以及错误。
其它
配置 NodeBB
该指令仅供初始化 NodeBB 时使用。如果您对 config.json 进行了修改,那么在执行这条指令时会移除相关的条目。
./nodebb setup
启动 NodeBB 安装服务
启动 NodeBB 的 Web 安装页面来进行直观得进行配置 NodeBB
./nodebb install
编译静态文件
./nodebb build [targets]
如果不指定对象,默认全部编译
可指定的编译对象:对象 | 别名 "plugin static dirs" # 插件静态目录 | staticdirs "requirejs modules" # require载入的js模块 | rjs, modules "client js bundle" # 客户端(浏览器)使用的js | clientjs, clientscript, clientscripts "admin js bundle" # Admin面板使用的js | adminjs, adminscript, adminscripts "javascript" # 全部的 js | js "client side styles" # 客户端样式文件(less,css) | clientcss, clientless, clientstyles, clientstyle "admin control panel styles" # Admin 面板的样式文件 | admincss, adminless, adminstyles, adminstyle, acpcss, acpless, acpstyles, acpstyle "styles" # 全部的样式文件 | css, less, style "templates" # tpl模板文件 | tpl "languages" # 语言文件 | lang, i18n "sounds" # 声音文件 | sound
更新 NodeBB
该指令并不能直接升级 NodeBB ,仅仅是为了 在升级 NodeBB 后对于数据库,本地结构的升级。
该条指令有以下功能:
- 更新 NodeBB 数据库,本地文件结构
- 更新插件 (版本检查 基于 packages.nodebb.org)
- 直接执行指定的升级脚本(用于解决未正确更新的问题)
你也可以只使用他的部分选项以直接使用你想要的功能:
选项: -m, --package 从 defaults 文件更新 package.json -i, --install 更新基础依赖 -p, --plugins 检测插件更新 -s, --schema 更新 NodeBB 数据库结构 -b, --build 重新编译静态资源 -h, --help 输出使用帮助信息
./nodebb upgrade
查看环境信息
该指令用于查看当前系统安装的 NodeBB 版本 以及数据库(Redis,Mongodb)版本
./nodebb info
查看已启用插件列表
$ ./nodebb plugins
启动的同时,查看日记
$ ./nodebb slog
查看管理员操作事件(近10个)
通过该指令,可以很方便得观察到管理员的操作事件,以便在特殊情况下排查是哪个成员,破坏/修改了程序。
$ ./nodebb events
开发者模式
该模式有如下特点:
- 直接启动,附带日记。日记更加详细。
- 插件库直接读取,无需编译。
- 信息更加详细。
- 关闭窗口,进程终止。
需要注意: 开发者模式中读取的插件模板仍然是编译过的模板,所以插件模板如果变动,请先编译模板。
./nodebb --dev start
同时,经过测试发现。依旧支持老版本的启动方式:
./nodebb dev
重置功能
# 参数 使用 ./nodebb reset {-t|-p|-w|-s|-a} -t 主题 [主题名] -p 插件 [插件名] -w 窗口部件 -s 设置 -a 以上所有
插件和主题的标识 (-p & -t) 可以禁用指定插件
例如:./nodebb reset -p nodebb-plugin-mentions
,./nodebb reset -t nodebb-theme-persona
前缀是可选的,例如:./nodebb reset -p markdown
,./nodebb reset -t persona
停用插件
停用所有插件
./nodebb reset -p
停用指定插件
./nodebb reset -p plugin-name
主题
重置至默认主题(Persona)
./nodebb reset -t
重置至指定主题(相当于切换主题)
./nodebb reset -t theme-name
窗口部件
禁用所有的窗口部件
./nodebb reset -w
设置
恢复默认设置
./nodebb reset -s
重置所有
回到初始化状态
./nodebb reset -a
激活插件
该指令将会在下一次NodeBB启动时激活插件。
前缀nodebb-plugin
是可选的./nodebb activate plugin-name
插件
环境依赖
sudo apt-get install sendmail sudo apt install g++ sudo apt install build-essential sudo apt install python3.9 npm install -g node-gyp npm config set python /usr/lib/python3.9
安装
npm install nodebb-plugin-iframely npm i [email protected] npm i [email protected] npm i nodebb-plugin-audio-embed npm install nodebb-plugin-custom-pages npm install nodebb-plugin-markdown-toc npm install nodebb-plugin-question-and-answer npm install nodebb-plugin-tenor-gif npm install nodebb-plugin-reputation-rules npm install nodebb-plugin-mega-colors npm install nodebb-plugin-customize npm i nodebb-plugin-recent-cards npm install [email protected] npm i nodebb-plugin-dbsearch-miraiforum
./nodebb build && ./nodebb restart
数据库备份
对于一个论坛来说,最重要的资源就是数据库,数据丢失会给论坛带来毁灭性打击,所以保证数据安全是站长的第一要务。本文将重点介绍数据库的备份与恢复,最后将给出一个定时自动备份数据库的脚本。
MongoDB 备份与恢复
注意:此处以
MongoDB 5.0.9
为例进行讲解MongoDB
作为NoSQL
数据库的著名代表,其官方文档有这么几个特点:准确、详尽、及时、易读、完善,所以如果出现了本教程没有涵盖到的问题,请参阅官方文档。备份
备份命令如下所示:
mongodump -h localhost -u admin -p yourpassword -o /home/beifen/dandao
命令解释:
- -h:你的MongoDB地址,本机localhost,端口默认不用写
- -u:用户名,如果按照官方教程来做,则用户名为
admin
- -p:密码
- -d:你的数据库名,如果按照官方教程来做,则数据库名为
nodebb
,不写全部备份 - -o:备份文件所保存路径
目录,其内即为数据文件。
恢复
恢复命令如下所示:
mongorestore -h localhost -u admin -p yourpassword --dir /home/beifen/dandao
命令解释:
- -h:你的MongoDB地址,本机localhost,端口默认不用写
- -u:用户名,如果按照官方教程来做,则用户名为
admin
- -p:密码
- -d:你的数据库名,如果按照官方教程来做,则数据库名为
nodebb
,不写全部备份 - --dir:恢复备份文件路径
自动备份
手动备份很麻烦,很不智能,还容易出错,作为一个Geek是不允许这种事情发生的。于是有了下面的自动备份脚本,该脚本将在每天凌晨3点30分自动对数据库进行备份,然后对备份后的数据文件进行压缩打包,之后删除三天前的历史备份档案,只保留最近三天的备份。你最终看到的就是备份目录内只有最近三天的备份文件压缩包。
backup_date=$(date +"%F") #获取日期 cd /home/ #切换到当前用户家目录,你可以换成你的用户目录 mongodump -h localhost -u admin -p yourpassword -o /home/beifen/dandao #导出数据库备份 tar -zcvf /home/beifen/${backup_date}.tar.gz /home/beifen/dandao --remove-files #将导出的备份压缩打包,并以日期命名压缩包 find dump/ -mtime +3 | xargs rm -f #检索三天前的备份压缩包,将之删除 echo $(date +"%F %H:%M:%S") Backup successfully ! >> log.backup #写入日志
- 将上述脚本保存到
/root/script/
目录下,并命名为backup.sh
- 使用命令
chmod u+x /root/script/backup.sh
为脚本添加可执行权限 - 运行命令
crontab -e
打开crontab
的任务添加界面,加入下面这一行:
30 3 * * * /root/script/backup.sh
使用
crontab -l
就可以看到刚才添加的定时任务了。crontab的其他使用方法在此不多做解释,如有其他问题请自行搜索解决。
上传网盘
本地备份还是有风险,这时使用网盘来二次备份
Rclone下载安装
使用脚本在系统上安装 rclone,运行:
curl https://rclone.org/install.sh | sudo bash
初始化配置
安装完成后输入:
rclone config
可以看到:
No remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q> n name> onedrive
输入
n
新建一个配置,name
为你的配置名称,可以自定义,这里我输入的是onedrive
。然后会出现挂载的服务类型,如下:
Option Storage. Type of storage to configure. Choose a number from below, or type in your own value. 1 / 1Fichier \ (fichier) 2 / Akamai NetStorage \ (netstorage) 3 / Alias for an existing remote \ (alias) 4 / Amazon Drive \ (amazon cloud drive) 5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Lyve Cloud, Minio, RackCorp, SeaweedFS, and Tencent COS \ (s3) 6 / Backblaze B2 \ (b2) 7 / Better checksums for other remotes \ (hasher) 8 / Box \ (box) 9 / Cache a remote \ (cache) 10 / Citrix Sharefile \ (sharefile) 11 / Compress a remote \ (compress) 12 / Dropbox \ (dropbox) 13 / Encrypt/Decrypt a remote \ (crypt) 14 / Enterprise File Fabric \ (filefabric) 15 / FTP Connection \ (ftp) 16 / Google Cloud Storage (this is not Google Drive) \ (google cloud storage) 17 / Google Drive \ (drive) 18 / Google Photos \ (google photos) 19 / Hadoop distributed file system \ (hdfs) 20 / Hubic \ (hubic) 21 / In memory object storage system. \ (memory) 22 / Jottacloud \ (jottacloud) 23 / Koofr, Digi Storage and other Koofr-compatible storage providers \ (koofr) 24 / Local Disk \ (local) 25 / Mail.ru Cloud \ (mailru) 26 / Mega \ (mega) 27 / Microsoft Azure Blob Storage \ (azureblob) 28 / Microsoft OneDrive \ (onedrive) 29 / OpenDrive \ (opendrive) 30 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH) \ (swift) 31 / Pcloud \ (pcloud) 32 / Put.io \ (putio) 33 / QingCloud Object Storage \ (qingstor) 34 / SSH/SFTP Connection \ (sftp) 35 / Sia Decentralized Cloud \ (sia) 36 / Storj Decentralized Cloud Storage \ (storj) 37 / Sugarsync \ (sugarsync) 38 / Transparently chunk/split large files \ (chunker) 39 / Union merges the contents of several upstream fs \ (union) 40 / Uptobox \ (uptobox) 41 / Webdav \ (webdav) 42 / Yandex Disk \ (yandex) 43 / Zoho \ (zoho) 44 / http Connection \ (http) 45 / premiumize.me \ (premiumizeme) 46 / seafile \ (seafile) Storage> 28
输入你要挂载的网盘序号,我要挂载的 OneDrive 是
28
,注意:序号不固定,请自行确认
client_id
和client_secret
直接回车默认即可,然后会出现 OneDrive 区域选择,如下:
Option region. Choose national cloud region for OneDrive. Choose a number from below, or type in your own string value. Press Enter for the default (global). 1 / Microsoft Cloud Global \ (global) 2 / Microsoft Cloud for US Government \ (us) 3 / Microsoft Cloud Germany \ (de) 4 / Azure and Office 365 operated by 21Vianet in China \ (cn) region> 1
根据你自己的 OneDrive 版本来,这里我输入
1
选择全球,然后是选择是否进行高级配置,保持默认回车即可:
Edit advanced config? y) Yes n) No (default)
接着是自动配置选择,如下:
Use auto config? * Say Y if not sure * Say N if you are working on a remote or headless machine y) Yes (default) n) No
因为你的服务器并没有图形化界面无法使用浏览器打开网页,这里需要选择
n
,这里需要获取授权码并输入:
Option config_token. For this to work, you will need rclone available on a machine that has a web browser available. For more help and alternate methods see: https://rclone.org/remote_setup/ Execute the following on the machine with the web browser (same rclone version recommended): rclone authorize "onedrive" Then paste the result. Enter a value. config_token>
授权码需要在本地电脑上获取,访问 https://rclone.org/downloads/ 根据你的电脑系统版本下载对应的 Rclone,下载完成后解压,进入存放 Rclone 的目录可以看到
rclone.exe
的可执行程序,在空白处按住shift
键鼠标右击在 Windows 终端打开
或在此处打开 PowerShell 窗口
,执行如下命令:./rclone.exe authorize "onedrive"
浏览器应该会自动打开,如果浏览器没有打开可以根据提示复制地址访问。如果浏览器登录了 OneDrive 的话会直接显示授权确认信息,如果没有登录的话会弹出登录页面,登录 OneDrive 后也会显示授权确认信息。选择
接受
后在本地命令行会显示一串 JSON 格式的授权信息,复制授权信息包括首尾的 {},到 Linux 终端粘贴。然后设置 OneDrive 的连接类型,如下:
Option config_type. Type of connection Choose a number from below, or type in an existing string value. Press Enter for the default (onedrive). 1 / OneDrive Personal or Business \ (onedrive) 2 / Root Sharepoint site \ (sharepoint) / Sharepoint site name or URL 3 | E.g. mysite or https://contoso.sharepoint.com/sites/mysite \ (url) 4 / Search for a Sharepoint site \ (search) 5 / Type in driveID (advanced) \ (driveid) 6 / Type in SiteID (advanced) \ (siteid) / Sharepoint server-relative path (advanced) 7 | E.g. /teams/hr \ (path) config_type> 1
这里输入
1
,然后会显示找到的 OneDrive 账户,如下:
Drive OK? Found drive "root" of type "business" URL: https://xxxxxx-my.sharepoint.com/personal/xxxxxx/Documents y) Yes (default) n) No y/n>
确认无误后输入
y
或者直接回车,接着会显示你选择的配置信息,确认无误后输入y
保存配置。上传OneDrive
环境依赖
apt-get install -y screen
备份
mongodump -h localhost -u admin -p yourpassword -o /home/beifen/dandao
打成压缩包
tar -zcf xxx.tar.gz dandao
运行
//以下任选一即可 screen rclone move /home/beifen onedrive:/dandao -P //上传后删除 screen rclone copy /home/dandao.tar onedrive:/dandao -P //复制 screen rclone sync /home/beifen onedrive:/dandao -P //同步 -P 显示进程详情
这时登录onedrive即可看到看到备份文件