Leanote自建服务器
Leanote    2019-10-04 11:43:19    2835    0    0
acme   Leanote

    首先说一下,写下这边博文主要是做记录,免得到时候自己都忘记了。顺便也安利一波这款笔记软件,用了几年,感觉还不错。

    先把几个网址贴上,首页在这里可以下载客户端。GitHub地址https://github.com/leanote 说明一下,这是一款开源的笔记。还有一个服务端的下载地址http://leanote.org/ 当然,也可以用GitHub上的自己编译安装。

    这里还有官网的wiki中文安装教程,二进制安装点击这里

    源码安装点击这里

    除了这些以外,数据库用到的是mongodb,官网地址https://www.mongodb.com/,下载地址https://www.mongodb.com/download-center/community 根据自己的发行版选择下载。

    还有一个是wkhtmltopdf https://wkhtmltopdf.org/ 用于笔记内容转换为pdf,下载地址https://wkhtmltopdf.org/downloads.html 根据自己使用的发行版本下载。

    如果需要使用反向代理nginx的话,官网在这里http://nginx.org/ 不同发行版本根据官网提供的下载安装方式下载安装。

这里演示一下Ubuntu18.04发行版下面安装二进制包,而且我就全程以root身份运行安装程序。

通过ssh连接上服务器,浏览器先打开http://leanote.org/#download 获取Leanote的安装包。

在这里,对着Linux 64位的链接右键复制链接地址,接着使用wget获取下载

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

回车后会发现会有几次链接的跳转,然后才会获取到真正的下载链接,而且文件是download,服务器在国外,下载时间有点长,稍等一下就可以了。

下载完成以后使用命令mv重命名(mv命令并不是重命名命令,这个是移动文件命令

 mv download leanote.tar.gz

改一下名字用起来舒服点

tar -zxvf leanote.tar.gz

使用tar命令解压 -zxvf后面的三个参数,z表示通过gzip或者ungip命令处理文件,-x表示从备份文件中还原文件,xz加起来大概的意思就是解压出来的意思f表示指定处理哪个文件,v表示显示解压的过程。

执行完成以后会解压出来一个leanote的目录,这个时候我们还是先将数据库以及wkhtmltopdf安装完成。

新建一个mongodb的文件夹,然后进入该目录中,使用命令

mkdir mongodb
cd mongodb

接着在这个目录中获取数据库的的安装包

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.0.11.tgz

可以使用上面的二进制包,也可以使用deb安装包

wget https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-server_4.0.11_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-mongos_4.0.11_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-tools_4.0.11_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-shell_4.0.11_amd64.deb

上面二者选其一,我这边用deb包,等待下载完成,安装

dpkg -i *.deb​

完成以后使用dpkg -l|grep mongodb-org看一下刚刚安装的包

接着是安装wkhtmltopdf

根据自己的发行版选择安装包。

wget  https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb​

接着还是

dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.deb​

命令安装该工具

但是会发现报错了,这个时候需要处理一下

因为是依赖的问题,使用apt-get install -f进行修复

这个时候离启动leanote还有一步之遥,那就是讲leanote的数据库恢复

现决定leanote的数据库文件放在什么位置,我这边就放在root目录下的leanoteData里面

cd /root/
mkdir leanoteData

接着启动数据库

mongod --dbpath /root/leanoteData/

启动以后会发现数据库进程占用了整个窗口,要结束只要ctrl+c或者新建一个命令窗口。

当然,也可以使用命令setsid来启动数据库

setsid mongod --dbpath /root/leanoteData/

这个时候启动完数据库以后,按一下回车就可以让mongodb后台执行。

这个时候可以使用mongo进行数据库管理

可以在客户端输入show dbs查看数据库的使用情况,因为现在都是空库,所以全部为空,使用exit就可以退出数据库管理,接着就是恢复数据了

mongorestore -h localhost -d leanote --dir leanote/mongodb_backup/leanote_install_data/

mongorestore是用来恢复的,-h是host地址,这里数据库在本机,-d是恢复到哪个数据库,这里恢复到leanote这个数据库,后面的--dir是从哪个目录进行恢复,恢复leanote下面的安装数据。

回车以后需要一点时间,会跑一会儿

这个时候,再使用

sh leanote/bin/run.sh 

看到

表示监听到9000端口就表示已经成功启动了,当然,这个一样是占据了命令行的,一旦Ctrl+c就结束了,同样可以用setsid命令让它后台运行

setsid sh leanote/bin/run.sh

打开浏览器,浏览服务器的ip地址冒号9000就可以查看到了,当然,这个是监听在9000端口的,而且请确认防火墙是否开启了这个端口,如果买的vps,请确认外部的云服务商给你的vps防火墙也放开了该端口的访问。

默认管理员账号admin密码abc123

如果觉得9000不好,想要使用80端口,也是可以的,请确认80端口没有被应用程序占用以后更改leanote目录内,conf目录下的app.conf文件配置参数

修改http.port=80

修改site.url=http://你的域名或者ip地址

80端口是默认的http端口,所以可以不在后面添加端口号,比如我的域名site.url=http://leanote.acme-me.cc

当然,也不建议这么干,现在还是流行反向代理,将配置参数改为原来的,我们这里反向代理使用nginx,现在安装nginx

apt-get install nginx​

安装完成nginx以后,打开浏览器访问服务器的ip或者域名的http服务,看是不是有nginx安装完成的提示。

在这里,来两个比较简单的配置,都是未使用https的。

vi /etc/nginx/conf.d/leanote.conf​

该文件不存在,会新建的,直接粘贴内容

server {
    listen 80;
    location / {
            proxy_pass http://localhost:9000;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            client_max_body_size 1000M;
    }
}

上面这段内容很简单,服务器监听80端口,并将该端口的数据转发给本地ip的9000端口处理 不过注意一下nginx的版本,在/etc/nginx目录下,有一个nginx.conf的配置文件,它里面有两个include配置

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

如果用了上面的配置发现打开的是nginx默认的介绍页面,可以将第二个include注释掉。

做完这个操作,使用nginx -t来测试一下nginx的配置是否正确,如果正确,对nginx服务进行重启。我比较简单粗暴

sudo /etc/init.d/nginx restart

如果vps上有重要业务使用到反代的,别学我这样,这是个错误示范

还有app.conf这个配置文件中的site.url,修改site.url=http://你的域名或者ip地址。

上面这种会将所有的数据都转发给9000端口,如果一台vps上有多个域名的解析,针对不通的域名提供不通的www服务,这样做就有点不合适了,那么做一个针对域名解析吧

再次修改nginx中leanoet.conf的配置

server {
    listen       80;
    server_name leanote.acme-me.cc;
    location / {
        proxy_pass        http://leanote.acme-me.cc;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        client_max_body_size 1000M;
    }
}
upstream leanote.acme-me.cc{
        server 127.0.0.1:9000;
}

大概简单解释一下上面的配置文件意思,因为其中有一些参数其实并不需要的,监听80端口,如果域名是leanote.acme-me.cc的,转发给本地本地地址的9000端口,其中upstream用于负载均衡的模块,client_max_body_size用来表示最大可上传的附件,proxy_set_header用来给请求头中添加参数,其实在leanote中是用不到的。

做到了这里,应该就算是完成了,不过,还有一些细节可以折腾一下。

比如,mongodb并没有设置用户名密码,官方也给了警告,点击这里查看

可以根据官方的文档来操作,记得添加了mongodb数据库的用户名密码,在leanote下的app.conf也要同时进行修改。

不过因为启动的时候mongodb监听的是127.0.0.1端口,也就是监听本地才能管理,我就没有添加,不过这不是一个好习惯,如果你的vps被人入侵进来了,就的确数据很危险了,这个危险更多的是指泄露这一方便。

还有,比如如果我用了反向代理,从80端口访问,但是我9000端口也是开放着的,不是所有的vps服务商都提供防火墙,让你来屏蔽端口,那么怎么办呢?可以使用iptable来完成这个操作。

iptables -I INPUT -p tcp --dport 9000 -j DROP
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 9000 -j ACCEPT

上面那句话是屏蔽tcp访问9000端口,第二句是哪一个ip通过tcp访问本机的9000端口,当然要自己同意一下,如果反代在局域网的另一台服务器上呢?那么把这里的ip地址更改一下,允许反代服务器的ip地址访问这边的9000端口。

还有一些细节的优化,登录后台管理界面,比如说Export PDF配置转换PDF

因为我是使用的deb安装,所以不用填写路径,直接wkhtmltopdf命令就好了

还有Mongodb Tool Configuration配置,这里配置的是mongodb的备份工具,因为我同样使用的是deb安装的,所以直接填写命令

下面的路径,填写绝对路径!!!!

到这里,还有一些小细节,比如说是否开放注册。

还有一点也是很重要的,在leanote的配置文件

app.secret=V85ZzBeTnzpsHyjQX4zukbQ8qqtju9y2aDM55VWxAH9Qop19poekx3xkcDVvrD0y 

这个配置参数,请一定要修改一个或者多个,后面的字符,否则会有安全风险。

然后还有一些细节,比如说,管理员用户的设置adminUsername=admin

因为admin经常被用来扫,所以可以更改一下

然后针对表进行操作,修改表中的admin为system

首先

mongo​​

连接mongodb

接着使用

use leanote​

使用leanote数据库

然后使用

db.users.find();​

这个就不管排版和参数了,先把东西全部查出来。

我们这里修改admin用户名为system

db.users.update({"Username":"admin"},{$set:{"Username":"system"}})​

当然,也可以一次性修改多个,比如把UsernameRaw也修改成admin,然后把Verified改成true,Verified是指邮箱是否验证的,顺便把邮箱也换了

db.users.update({"Username":"system"},{$set:{"UsernameRaw":"system","Verified" : true,"Email" : "[email protected]"}})​

接着再查看一下结果

结果已经发生了变化,不过记得吧leanote的配置参数,修改管理员adminUsername=system

--------------------------------------------------------------------------------------------------------------------------------

更新于2019-08-29,前段时间又是工作事情多,又是出差的,mongodb4.2刚发布的时候就想更新了,但是没有时间,所以进行更新一下。

B站发了视频教程,可以参考一下视频教程

然后针对MongoDB 4.2已经彻底废弃mmapv1存储引擎,要更换存储引擎请参考这里

 

Pre: 通过文件添(增)加Swap空间

Next: 针对Leanote使用的MongoDB存储引擎升级

2835
Table of content