如何在CentOS 7上设置Leanote服务器

・19 分钟阅读

Leanote是一个免费的轻量级的开源的Evernote替代品,它是用Golang编写的,考虑到用户体验,Leanote为用户提供了许多实用功能,包括跨平台支持按标记语法编写、公开或私人博客、知识收集和共享以及团队协作。

在本文中,我将指导你在Centos7服务器实例上设置Leanote服务器,出于安全考虑,使用let's Encrypt SSL证书和Nginx启用HTTPS support。

前提条件

  • 新部署的CentOS 7服务器实例,假设它的IPv4地址是203.0.113.1 ,
  • 名为leanotesudo用户
  • 机器上的所有软件包都使用EPEL repo更新到最新的稳定状态,这里查看详细信息 ,
  • 指向上面提到的服务器实例的域名leanote.example.com ,

步骤1:创建交换文件

启动新的CentOS 7服务器实例时,始终建议设置交换文件,以确保系统正常运行,例如,创建一个2048MB大小的交换文件适合具有2GB内存的计算机。


sudo dd if=/dev/zero of=/swapfile count=2048 bs=1M
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -m

注意:如果使用的服务器大小不同,则可能需要修改交换文件的大小。

步骤2:获取Leanote 261二进制文件

为64-bit Linux系统下载,并且解压缩Leanote的最新稳定版本:


cd
wget https://sourceforge.net/projects/leanote-bin/files/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz
tar -zxvf leanote-linux-amd64-v2.6.1.bin.tar.gz

步骤3:安装MongoDB Community Edition 4.0

根据Leanote的要求,必须先安装MongoDB NoSQL DBMS,然后才能成功安装Leanote服务器。

设置MongoDB 4.0 YUM repo

按如下方式创建MongoDB 4.0 YUM repo :


cat <<EOF | sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF

使用YUM安装MongoDB 4.0软件包

使用前面创建的MongoDB 4.0 YUM repo安装所有的MongoDB组件和工具:


sudo yum install -y mongodb-org

为MongoDB 4.0配置SELinux

默认情况下,MongoDB在工作时会使用27017端口,如果SELinux在CentOS 7计算机上处于enforcing模式,则不允许使用该端口,使用以下命令确认当前的SELinux模式:

 
sudo getenforce

 

在CentOS 7服务器实例上,默认情况下禁用SELinux ,因此,上述命令的输出将是:

 
Disabled

 

在这种情况下,你可以随意跳过有关配置SELinux的以下说明,并且继续。

但是,如果你正在运行原始的CentOS 7服务器实例(你自己安装的系统),则上述命令的输出为enforcing ,你需要在启动和启用MongoDB服务之前执行以下三种选项之一。

  • 选项1:允许MongoDB使用27017端口

    
    sudo semanage port -a -t mongod_port_t -p tcp 27017
    
    
  • 选项2:禁用SELinux

    
    sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    sudo shutdown -r now
    
    
  • 选项3:将SELinux更改为permissive模式

    
    sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
    sudo shutdown -r now
    
    

启动MongoDB服务,并且使它在系统重新启动后,启动:


sudo systemctl start mongod.service
sudo systemctl enable mongod.service

步骤4:导入初始Leanote数据到MongoDB

使用以下命令将初始Leanote数据导入MongoDB :


rm /home/leanote/leanote/mongodb_backup/leanote_install_data/.DS_Store
mongorestore --host localhost -d leanote --dir /home/leanote/leanote/mongodb_backup/leanote_install_data/

步骤5:启用MongoDB认证

出于安全考虑,你需要在MongoDB服务启动,并且运行后立即启用对MongoDB的访问控制。为此,你需要创建至少两个MongoDB用户帐户: 用户管理员帐户和数据库管理员帐户,你还需要修改MongoDB配置。

输入MongoDB shell :


mongo --host 127.0.0.1:27017

切换到admin数据库:

 
use admin

 

创建名为useradmin的用户管理员,使用密码useradminpassword


db.createUser({ user:"useradmin", pwd:"useradminpassword", roles: [{ role:"userAdminAnyDatabase", db:"admin" }] })

注意:用户管理员useradmin应该管理所有的MongoDB用户,所以,选择一个强密码是明智的,

切换到leanote数据库:

 
use leanote

 

创建名为leanoteadmin的数据库管理员,使用密码leanoteadminpassword


db.createUser({ user:"leanoteadmin", pwd:"leanoteadminpassword", roles: [{ role:"dbOwner", db:"leanote" }] })

注意:同样,建议选择鲜为人知的用户名和难以猜测的密码。

创建了MongoDB用户后,你可以确认结果:


use admin
db.auth("useradmin","useradminpassword")

确认数据库管理员:


use leanote
db.auth("leanoteadmin","leanoteadminpassword")

两个将输出1作为确认。

退出MongoDB shell :

 
exit

 

为了将访问控制启用到MongoDB,还需要向MongoDB配置文件/etc/mongod.conf附加两行,如下所示:


sudo bash -c"echo 'security:' >> /etc/mongod.conf"
sudo bash -c"echo ' authorization: enabled' >> /etc/mongod.conf"

重新启动MongoDB服务,以便使修改生效:


sudo systemctl restart mongod.service

从现在开始,你只能使用两个用户帐户来访问和管理MongoDB,useradmin用于管理所有MongoDB用户,leanoteadmin用于管理leanote数据库。

步骤6:配置Leanote

备份Leanote配置文件 /home/leanote/leanote/conf/app.conf


cd /home/leanote/leanote/conf/
cp app.conf app.conf.bak

使用vi编辑器打开Leanote配置文件:

 
vi app.conf

 

逐个查找下列行:


site.url=http://localhost:9000
db.username= # if not exists, please leave it blank
db.password= # if not exists, please leave it blank
app.secret=V85ZzBeTnzpsHyjQX4zukbQ8qqtju9y2aDM55VWxAH9Qop19poekx3xkcDVvrD0y

分别替换它们,如下所示:


site.url=http://leanote.example.com:9000
db.username=leanoteadmin
db.password=leanoteadminpassword
app.secret=E52tyCDBRk39HmhdGYJLBS3etXpnz7DymmxkgHBYxd7Y9muWVVJ5QZNdDEaHV2sA

注意:出于安全目的,app.secret参数的值必须是与原始字符串不同的64-bit随机字符串,确保替换值 E52tyCDBRk39HmhdGYJLBS3etXpnz7DymmxkgHBYxd7Y9muWVVJ5QZNdDEaHV2sA 用你自己的64-bit随机值。

保存和退出:

 
:wq

 
!

步骤7启动Leanote

修改防火墙规则,以便在端口9000上允许入站TCP通信:


sudo firewall-cmd --permanent --add-port=9000/tcp
sudo systemctl reload firewalld.service

使用官方脚本启动Leanote :


cd /home/leanote/leanote/bin
bash run.sh

看到Listening on.. 0.0.0.0:9000后,将你喜爱的网络浏览器指向http://leanote.example.com:9000,开始使用Leanote网站。

使用默认的Leanote管理员帐户登录:

  • 用户名:admin
  • 密码:abc123

为了安全起见,你应该在登录后,立即更改默认密码。

步骤8:启用HTTPS访问

现在,你已经可以使用HTTP协议(一种不太安全的协议)访问Leanote服务器了,为了提高系统安全性,你可以通过在计算机上部署let's Encrypt SSL证书和Nginx反向代理来启用HTTPS

正确设置主机名和完全限定域名(FQDN )

在获得let's Encrypt SSL证书之前,需要正确设置机器上的主机名和FQDN 。

首先,按CTRL +C停止Leanote脚本run.sh

接下来,设置主机名和FQDN,如下所示:


sudo hostnamectl set-hostname leanote
cat <<EOF | sudo tee /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
203.0.113.1 leanote.example.com leanote
EOF

你也可以确认结果,也可以:

 
hostname
hostname -f

 

修改防火墙规则

阻止端口9000上的入站通信,并允许端口上的入站通信用于HTTPHTTPS服务:


sudo firewall-cmd --permanent --remove-port=9000/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld.service

申请let's Encrypt SSL证书

安装Certbot实用程序:


sudo yum -y install yum-utils
sudo yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install -y certbot

为域leanote.example.com申请let's Encrypt SSL证书:


sudo certbot certonly --standalone --agree-tos --no-eff-email -m admin@example.com -d leanote.example.com

证书和链将按如下方式保存:


/etc/letsencrypt/live/leanote.example.com/fullchain.pem

私钥文件将按如下方式保存:


/etc/letsencrypt/live/leanote.example.com/privkey.pem

默认情况下,let's Encrypt SSL证书将在三个月后,过期,你可以设置一个let's Encrypt作业,如下所示自动续订你的证书:

 
sudo crontab -e

 

按i进入insert模式,然后输入以下行:


0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

保存和退出:

 
:wq

 
!

这个cron工作将尝试每天中午Let's Encrypt 的加密证书。

将Nginx安装为反向代理

使用EPEL Nginx repo安装:


sudo yum install -y nginx

为Leanote创建配置文件:


cat <<EOF | sudo tee /etc/nginx/conf.d/leanote.conf
# Redirect HTTP to HTTPS
server {
 listen 80;
 server_name leanote.example.com;
 return 301 https://$server_name$request_uri;
}

server {

 # Setup HTTPS certificates
 listen 443 default ssl;
 server_name leanote.example.com;
 ssl_certificate /etc/letsencrypt/live/leanote.example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/leanote.example.com/privkey.pem;

 # Proxy to the Leanote server
 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 https;
 proxy_set_header X-Forwarded-Host $http_host;
 proxy_set_header Host $http_host;
 proxy_max_temp_file_size 0;
 proxy_pass http://127.0.0.1:9000;
 proxy_redirect http:// https://;
 }
}
EOF

重新启动Nginx以使你的修改生效:


sudo systemctl daemon-reload
sudo systemctl restart nginx.service
sudo systemctl enable nginx.service

修改Leanote配置文件中的site.url设置:


cd /home/leanote/leanote/conf/
vi app.conf

查找以下行:


site.url=http://leanote.example.com:9000

替换它:


site.url=https://leanote.example.com

保存和退出:

 
:wq

 
!

再次运行Leanote脚本:


cd /home/leanote/leanote/bin
bash run.sh

现在,将你喜爱的网络浏览器指向http://leanote.example.com/,你会发现HTTPS协议被自动激活,你可以使用前面设置的新密码登录admin用户,或者为团队协作注册新用户帐户。

再次按ctrl+c停止Leanote脚本,

步骤9:安装wkhtmltopdf程序

Leanote选择使用wkhtmltopdf程序将HTML页面导出为PDF文件,安装wkhtmltopdf


cd
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
sudo yum localinstall -y wkhtmltox-0.12.5-1.centos7.x86_64.rpm
which wkhtmltopdf

当Leanote启动,并且再次运行时,不要忘记在Leanote Web管理仪表板的Export PDF部分中提交wkhtmltopdf二进制路径/usr/local/bin/wkhtmltopdf

注意:如果在导出的PDF文件中发现无法读取的字符,可以通过向/usr/share/fonts/目录添加必需的字体文件来修复问题。

第10步:使用Supervisor保持Leanote脚本的运行

为了使Leanote站点保持在线,可以使用Supervisor实用程序在Leanote脚本崩溃时自动启动它。

使用YUM安装主管:


sudo yum install -y supervisor

为Leanote创建一个简单的主管.ini文件:


cat <<EOF | sudo tee /etc/supervisord.d/leanote.ini
[program:leanote]
command=bash /home/leanote/leanote/bin/run.sh
directory=/home/leanote/leanote/bin/
priority=999
autostart=true
autorestart=true
user=leanote
redirect_stderr=true
EOF

启动Supervisor服务和Leanote服务:


sudo supervisord -c /etc/supervisord.conf

确认Leanote服务的状态:


sudo supervisorctl status leanote

输出将类似于以下内容:


leanote RUNNING pid 3707, uptime 0:02:36

月月 profile image