Raspberry Pi 3 Model B (Raspbian) 搭建 Leanote 云笔记

可能由于编译环境的差异,官方提供的二进制文件存在无法发送邮件的bug(VPS和树莓派都出现了这个问题),所以采取先用源码方式运行,运行过程中会编译产生二进制文件,再用该文件替换二进制包中的二进制文件,最终还是以二进制方式运行

一、新建安装路径

1
2
mkdir /root/leanote
cd /root/leanote

二、安装编译环境

#安装Golang

leanote要求Golang的版本在1.7以上,树莓派官方源是1.7.4

1
2
apt-get
apt-get install golang

#在 /root/leanote 下新建一个目录 gopackage,用于存放go的包和编译后的文件

1
mkdir /root/leanote/gopackage

#编辑/etc/profile文件,配置环境变量

1
vi /etc/profile

在末尾添加以下代码:

1
2
3
export GOROOT=/usr/lib/go
export GOPATH=/root/leanote/gopackage
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

保存修改后,执行以下命令使环境变量生效:

1
source /etc/profile

#获取Revel的二进制文件和Leanote的源码

下载 leanote-all-master.zip。解压后,将src文件夹复制到 /root/leanote/gopackage/

1
2
3
wget https://github.com/leanote/leanote-all/archive/master.zip
unzip master.zip
cp -r leanote-all-master/src/ /root/leanote/gopackage/

使用如下命令生成revel二进制文件(稍后运行 Leanote 需要用到):

1
go install github.com/revel/cmd/revel

三、安装、测试Mongodb并将Leanote初始数据导入Mongodb

1. 安装Mongodb

树莓派官方源mongodb版本为2.4.14,有2G的存储容量限制

1
2
apt-get
apt-get install mongodb

2. 测试Mongodb

在 /root/leanote 下新建一个目录 data,用于存放Mongodb数据:

1
mkdir /root/leanote/data

用以下命令启动 mongodb :

1
mongod --dbpath /root/leanote/data

这时 mongodb 已经启动,重新打开一个终端(B),键入 mongo 进入交互程序:

1
2
3
> show dbs;  #查看数据库
admin 0.000GB
local 0.000GB

3. 导入Leanote源码包内的初始数据

重新打开一个终端(C), 输入以下命令导入初始数据:

1
mongorestore -h localhost -d leanote --dir /root/leanote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data

可在终端B中用命令查看Leanote有多少张表:

1
2
3
4
5
6
7
8
9
10
11
12
> show dbs;  #查看数据库
admin 0.000GB
leanote 0.001GB
local 0.000GB
> use leanote #切换到leanote数据库
switched to db leanote
> show collections #查看表
files
has_share_notes
note_content_histories
note_contents
....

初始数据的 users 表中已有2个用户:

user1 username: admin,password: abc123 (管理员,只有该用户才有权管理后台,请在部署成功后登录网页后台及时修改密码)
user2 username: demo@leanote.com,password: demo@leanote.com (仅供体验使用)

四、配置Leanote

Leanote的配置文件存储在 conf/app.conf 中。

请务必修改app.secret一项,在若干个随机位置处,将字符修改成一个其他的值,否则会有安全隐患!

由于这台VPS之前安装过portainer,所以 Leannote 默认的9000端口被占用了(可通过命令netstat -tunlp查看端口占用情况),需要将http.port=9000改为未被占用的端口,如9001,然后将site.url=http://localhost:9000中的url改为http://raspberrypi:9001(域名配置好后需改为域名)。其它的配置可暂时保持不变, 若需要配置数据库信息, 请参照 Leanote问题汇总。

五、源码方式运行Leanote

注意: 在此之前请确保 Mongodb 已在运行!

可在终端C执行以下命令运行Leanote

1
revel run github.com/leanote/leanote

运行成功后会在/root/leanote/gopackage/bin/revel.d/github.com/leanote/leanote文件夹生成leanote的二进制文件,名为leanote,将这个文件拷贝到另一个地方保存

恭喜你, 打开浏览器输入: http://VPS的IP地址:9001 体验 Leanote 吧!

六、获取leanote的二进制安装包

#下载

Leanote github站点获取相应系统最新版二进制安装包的下载链接

wget http://sourceforge.net/projects/leanote-bin/files/2.6.1/leanote-linux-arm-v2.6.1.bin.tar.gz

#解压

1
tar -xzvf leanote-linux-arm-v2.6.1.bin.tar.gz

在/root/leanote/leanote/bin文件夹中有leanote的二进制文件,名为leanote-linux-arm,将其重命名,再将之前保存的源码产生的二进制文件转移至该文件夹并重命名为leanote-linux-arm

#将源码方式的data文件夹重命名后新建data文件夹

1
mkdir /root/leanote/data

#导入Leanote二进制包内的初始数据

1
2
mongod --dbpath /root/leanote/data
mongorestore -h localhost -d leanote --dir /root/leanote/leanote/mongodb_backup/leanote_install_data

七、为mongodb数据库添加用户

按上述方法启动 Mongodb 是没有权限控制的,如果你的 Leanote 服务器暴露在外网, 任何人都可以访问并修改你的 Mongodb,这是极其危险的,请务必为 Mongodb 添加用户名和密码并以 auth 启动

不像 mysql 有 root 用户,mongodb 初始是没有用户的,这样很不安全,所以要为 leanote 数据库新建一个用户来连接 leanote 数据库(注意,并不是为 leanote 的表 users 新建用户, 而是新建一个连接 leanote 数据库的用户)

1. mongodb v3 创建用户方法如下:

#首先切换到leanote数据库下

1
> use leanote;

#添加一个用户root, 密码是abc123

1
2
3
4
5
> db.createUser({
user: 'root',
pwd: 'abc123',
roles: [{role: 'dbOwner', db: 'leanote'}]
});

#测试下是否正确

1
> db.auth("root", "abc123");

返回1表示正确

2. mongodb v2 创建用户方法如下:

#首先切换到leanote数据库下

1
> use leanote;

#添加一个用户root, 密码是abc123

1
2
3
4
5
6
7
> db.addUser("root", "abc123");
{
"_id" : ObjectId("53688d1950cc1813efb9564c"),
"user" : "root",
"readOnly" : false,
"pwd" : "e014bfea4a9c3c27ab34e50bd1ef0955"
}

#测试下是否正确

1
> db.auth("root", "abc123");

返回1表示正确

3. 修改配置文件 conf/app.conf

db.username=root # if not exists, please leave blank
db.password=abc123 # if not exists, please leave blank

八、设置开机后台运行

断开与服务器连接之后,mongodb & leanote 就停止工作了,我们需要设置下后台运行,同时还要设置随系统启动

1. mongodb

#修改/etc/mongodb.conf配置文件

dbpath=/root/leanote/data  #数据存储路径
logpath=/var/log/mongodb/mongodb.log  #日志存储路径
logappend=true  #防止日志被删除
auth = true  #启用验证

#启动时添加–fork函数实现后台运行 ,添加–config函数按指定配置文件运行

1
/usr/bin/mongod --fork --config /etc/mongodb.conf

在 /etc/rc.local 文件中添加上述命令即可实现开机后台运行

2. leanote

自建 .sh 脚本文件,将启动命令写入脚本文件里,然后在 /etc/rc.local 文件中运行 .sh 脚本文件就能实现开机启动 Leanote 服务端了

*.sh 脚本文件可以参考我的写法:

#!/bin/bash
nohup /bin/bash /root/leanote/leanote/bin/run.sh >> /var/log/leanote.log 2>&1 &

将脚本文件命名为 lnstart.sh,赋予可执行权限并存放在 /root/leanote/leanote/bin 目录里,再编辑 /etc/rc.local 文件:

1
2
chmod +x /root/leanote/leanote/bin/lnstart.sh
vi /etc/rc.local

加入下面的命令然后保存即可:

1
sh /root/leanote/leanote/bin/lnstart.sh

九、网页后台设置

1. 修改管理员用户名和密码

用默认的管理员账户(用户名:admin;密码:abc123)登录网页后台,右上角点下拉箭头→个人中心→账户信息

2. 修改管理员邮件地址

这个要去数据库里面改:

打开终端,键入 mongo 进入交互程序:

1
2
3
4
5
> use leanote  #切换到leanote数据库
switched to db leanote
> db.auth("root", "abc123"); #登录leanote数据库用户(换成自己设置的用户名和密码)
1
> db.users.update({"Email" :"admin@leanote.com"},{$set:{"Email":"xxx@xxx.com"}}) #更改默认邮箱地址为自己的邮箱地址

如果服务器位于国外,为避免墙带来的干扰,建议使用国外邮箱
附上删除用户指令(这个也是webUI无法完成需要进数据库改的)> db.users.remove({“Username”: “用户名”})

3. 找回消失的“后台管理”

改完管理员用户名后你会发现“后台管理”选项不见了,别担心,在leanote的配置文件(conf/app.conf)里,把adminUsername=admin一行改成你修改的用户名,重启就好

4. 邮件发送配置

用修改后的管理员账户登录网页后台,右上角点下拉箭头→后台管理→Email→Configuration

这里有一个大坑在于,虽然配置界面给你了一个选项问要不要SSL,但实际上必须要勾选且必须配置一个支持SSL加密的smtp服务器,我用的gmail:

Host: smtp.gmail.com
Port: 465
Username: 完整邮箱地址
Password: 邮箱密码
SSL: 勾选

5. 网页版笔记导出为PDF

要使用此功能,需在服务器上安装wkhtmltopdf,方法如下:

#切换至Leanote安装目录

1
cd /root/leanote

#下载

wkhtmltopdf 官网获取树莓派的deb安装包下载链接

1
wget https://builds.wkhtmltopdf.org/0.12.5-rc/wkhtmltox_0.12.5-0.20180604.140.rc~6f77c46~raspbian.stretch_armhf.deb

#安装

1
dpkg -i wkhtmltox_0.12.5-0.20180604.140.rc~6f77c46~raspbian.stretch_armhf.deb

其间会提示先安装一些依赖包才能进行安装,按提示先安装完依赖包,再执行上述命令

1
apt-get install libfontenc1 libxfont1 x11-common xfonts-encodings xfonts-utils fontconfig libxrender1 xfonts-75dpi xfonts-base gvfs colord glew-utils libvisual-0.4-plugins gstreamer1.0-tools opus-tools qt5-image-formats-plugins qtwayland5 qt5-qmltooling-plugins librsvg2-bin lm-sensors

#测试

1
wkhtmltopdf http://www.jd.com test.pdf

#后台配置

登录网页后台,右上角点下拉箭头→后台管理→Configuration→Export PDF,填写可执行程序的路径(根据自己的情况填写):

/usr/local/bin/wkhtmltopdf

6. 通过网页备份和恢复数据库

登录网页后台,右上角点下拉箭头→后台管理→Data→Mongodb Tool Configuration,修改可执行程序的路径(根据自己的情况填写):

mongodump path(备份程序)

/usr/bin/mongodump

mongorestore path(恢复程序)

/usr/bin/mongorestore

修改好之后就可以在Backup & Restore中备份或恢复数据库了。自己的服务器稳定性肯定是比不上商用的,记得定期备份

十、js代码bug修复

leanote 开源js代码存在网页版笔记文档导航在chrome浏览器中无法跳转的报错和一些其他报错和警告,而商用js代码没有报错只有个别警告

报错存在于以下两个js脚本中:

/root/leanote/leanote/public/js
.
├── dep.min.js
├── markdown-v2.min.js

警告存在于以下一个js脚本中:

/root/leanote/leanote/public/libs/ace
.
├── ace.js

解决办法就是用商用代码替换(替换前建议先备份原有脚本),以下为商用js脚本下载链接:

dep.min.js
markdown-v2.min.js
ace.js

十一、软件更新

1. 源码

#备份app.conf

1
cp /root/leanote/gopackage/src/github.com/leanote/leanote/conf/app.conf /root/leanote/

#进入软件文件夹所在目录

1
cd /root/leanote/gopackage/src/github.com/leanote

#重命名旧版软件文件夹

1
mv leanote leanote_old

#下载

Leanote github站点获取最新版源码安装包的下载链接

1
wget https://github.com/leanote/leanote/archive/2.6.1.tar.gz

#解压

1
tar -xzvf 2.6.1.tar.gz

#重命名新版软件文件夹

1
mv leanote_2.6.1 leanote

按照备份的app.conf修改新的app.conf,revel运行生成二进制文件

2. 二进制

#备份app.conf

1
cp /root/leanote/leanote/conf/app.conf /root/leanote/

#进入软件文件夹所在目录

1
cd /root/leanote

#重命名旧版软件文件夹

1
mv leanote leanote_old

#下载

Leanote github站点获取相应系统最新版二进制安装包的下载链接

1
wget http://sourceforge.net/projects/leanote-bin/files/2.6.1/leanote-linux-arm-v2.6.1.bin.tar.gz

#解压

1
tar -xzvf leanote-linux-arm-v2.6.1.bin.tar.gz

#重命名新版软件文件夹

1
mv leanote_2.6.1 leanote

按照备份的app.conf修改新的app.conf,将revel生成的二进制文件替换原有二进制文件,重启树莓派