跳转至

使用阿里云 ECS 搭建自己的 Leanote 云笔记服务

Leanote(中文名 “蚂蚁笔记”),横跨 Windows、MacOS、Android、iOS、Linux 多平台,支持富文本和 Markdown 文本格式,自由度非常之高,你可以让笔记内容玩出新花样来。除了主打的笔记同步、编辑功能外,还支持开设博客,展示你公开的笔记内容。总体来说 Leanote 使用起来挺顺手,最重要一点,这个笔记是开源的

下面将基于阿里云 ECS 服务端搭建 Leanote 云笔记服务器的步骤分享出来,给需要使用私人云笔记的筒子们。详细安装请参考官方文档:《Leanote 源码版详细安装教程 Mac and Linux》。

1. Golang 安装

$ cd /usr/local/src
$ wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz
$ tar zvxf go1.10.1.linux-amd64.tar.gz -C /usr/local/software/
$ mv /usr/local/software/go /usr/local/software/go-1.10.1
$ su steven
$ mkdir -p /data/LeaNote/bin
$ ln -s /usr/local/software/go-1.10.1/bin/* /data/LeaNote/bin

2. 获取 Revel 和 Leanote 的源码

2.1 方法 1 (推荐方法):

请下载 leante-all-master.zip。解压后,将 src 文件夹复制到 /data/LeaNote/gopackage/。

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

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

2.2 方法 2

该方法使用 Golang 的 go get 来下载包, 这个命令会调用 git, 所以必须先安装 git。

# ubuntu 下安装 git
$ sudo apt-get install git-core openssh-server openssh-client

# centos 下安装git
$ sudo yum install git

获取 Revel 和 Leanote:

打开终端, 以下命令会下载 Revel 和 Leanote 及依赖包, 时间可能会有点久, 请耐心等待。

$> go get github.com/revel/cmd/revel
$> go get github.com/leanote/leanote/app

下载完成后,Leanote 的源码在 /data/LeaNote/gopackage/src/github.com/leanote/leanote 下。

3. 安装 Mongodb

3.1 安装 Mongodb

Mongodb 官网 下载相应系统的最新版安装包,或者从以下链接下载旧版本:

$ cd /usr/local/src
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.4.tgz
$ tar -xzvf mongodb-linux-x86_64-3.6.4.tgz
$ cd mongodb-linux-x86_64-3.6.4
$ su root
$ cp /usr/local/src/mongodb-linux-x86_64-3.6.4 /usr/local/software
$ mv /usr/local/software/mongodb-linux-x86_64-3.6.4 /usr/local/software/mongodb-linux-3.6.4
$ su steven
$ vi ~/.bashrc
export PATH="/usr/local/software/mongodb-3.6.4/bin:$PATH"

3.2 测试 Mongodb 安装

# 先在 /data/LeaNote 下新建一个目录 mongodata 存放 Mongodb 数据:
$ mkdir -p /data/LeaNote/mongodb/data

# 用以下命令启动 mongod:
$ mongod --dbpath /data/LeaNote/mongodb/data

# 这时 mongod 已经启动,重新打开一个终端, 键入 mongo 进入交互程序:
$> mongo
> show dbs
admin  0.000GB
local  0.000GB

Mongodb 安装到此为止, 下面为 Mongodb 导入 Leanote 初始数据。

4. 导入初始数据

leanote 初始数据在 /data/LeaNote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data 中。

打开终端, 输入以下命令导入数据:

$ mongorestore -h localhost -d leanote --dir /data/LeaNote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data

现在在 mongodb 中已经新建了 leanote 数据库, 可用命令查看下 Leanote 有多少张”表”:

$ mongo
> show dbs     # 查看数据库
admin    0.000GB
config   0.000GB
leanote  0.001GB
local    0.000GB
> use leanote     # 切换到 leanote
switched to db leanote
> show collections     # 查看表
albums
attachs
blog_comments
....
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 (仅供体验使用)

5. 配置 Leanote

Leanote 的配置存储在文件 /data/LeaNote/gopackage/src/github.com/leanote/leanote/conf/app.conf 中。

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

其它的配置可暂时保持不变, 若需要配置数据库信息, 请参照 Leanote 问题汇总

6. 运行 Leanote

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

新开一个窗口, 运行:

$ revel run github.com/leanote/leanote

# leanote 切入后台运行
$ nohup revel run github.com/leanote/leanote 2>&1 &

恭喜你, 打开浏览器输入: http://localhost:9000 体验 Leanote 吧!

7. Leanote 其他配置

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

7.1 为 mongodb 数据库添加用户

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

mognodb v2 与 v3 创建用户命令有所不同。

  • mongodb v2 创建用户如下:
# 首先切换到leanote数据库下
> use leanote;
# 添加一个用户root, 密码是abc123
> db.addUser("root", "abc123");
{
    "_id" : ObjectId("53688d1950cc1813efb9564c"),
    "user" : "root",
    "readOnly" : false,
    "pwd" : "e014bfea4a9c3c27ab34e50bd1ef0955"
}
# 测试下是否正确
> db.auth("root", "abc123");
1 # 返回1表示正确
  • mongodb v3 创建用户如下:
# 首先切换到leanote数据库下
> use leanote;
# 添加一个用户root, 密码是abc123
> db.createUser({
    user: 'root',
    pwd: 'abc123',
    roles: [{role: 'dbOwner', db: 'leanote'}]
});
# 测试下是否正确
> db.auth("root", "abc123");
1 # 返回1表示正确

用户添加好后重新运行下 mongodb,并开启权限验证. 在 mongod 的终端按 ctrl+c 即可退出 mongodb。

启动 mongodb:

$ mongod --dbpath /data/LeaNote/mongodb/data --auth

还要修改配置文件 : (修改 leanote/conf/app.conf)

db.host=localhost
db.port=27017
db.dbname=leanote # required
db.username=root # if not exists, please leave blank
db.password=abc123 # if not exists, please leave blank

7.2 Mongodb 设置后台运行

Mongodb 安装完成后,我们通常通过 mongod --dbpath /usr/local/mongo/data 让 mongodb 启动,但是我们关闭 shell,mongodb 就停止运行了。如果想在后台运行,启动时只需添加 –fork 函数即可。可以在日志路径后面添加 –logappend,防止日志被删除。

$ mongod --fork --dbpath=/data/LeaNote/mongodb/data --logpath=/data/LeaNote/mongodb/logs/mongodb.log --logappend

7.3 Mongodb 设置开机启动

当我们把服务器关闭,重启之后,发现 mongodb 又停止了,有没有开机就启动的方法呢?我们把上面代码放到 /etc/rc.local,中,就可以了。

具体操作步骤:

# 在 /etc/rc.local 添加以下代码
/usr/local/software/mongodb-3.6.4/bin/mongod --fork --dbpath=/data/LeaNote/mongodb/data --logpath=/data/LeaNote/mongodb/logs/mongodb.log --logappend

下次重启就可以直接运行 mongodb 了!

7.4 为 Leanote 配置 https

1. 生成 SSL 证书

可以在网上买一个, 或者自己做一个。这里有一个 shell 脚本可以自动生成证书: (cert.sh)

#!/bin/sh

# create self-signed server certificate:

read -p "Enter your domain [www.example.com]: " DOMAIN

echo "Create server key..."

openssl genrsa -des3 -out $DOMAIN.key 1024

echo "Create server certificate signing request..."

SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"

openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr

echo "Remove password..."

mv $DOMAIN.key $DOMAIN.origin.key
openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key

echo "Sign SSL certificate..."

openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt

假设得到了两个文件: a.com.crt, a.com.key

2. 配置 Nginx

假设 Leanote 运行的端口是 9000, 域名为 a.com, 那么 nginx.conf 可以配置如下:

upstream leanote_app {
    server localhost:9000;
}

server {
    listen  80;
    listen  443;
    server_name  note.shenweiyan.cn;
    ssl on;
    client_max_body_size 30M;
    index index.html index.htm index.php default.html default.htm default.php;
    ssl_certificate   ../cert/leanote/note.shenweiyan.cn.crt;
    ssl_certificate_key  ../cert/leanote/note.shenweiyan.cn.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;

    #rewrite ^/(.*) https://note.shenweiyan.cn/$1 permanent;

    location / {
        proxy_pass         http://leanote_app;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    access_log  logs/leanote_access.log;
    error_log   logs/leanote_error.log;
}

最后,执行 nginx -s reload 重启 nginx 服务,打开 https://note.shenweiyan.cn 即可看到 leanote 的 index 主页。

7.5 Leanote 配置开机启动

虽然通过命令让 Leanote 进程进入后台运行了,但是一旦重启还是要手动开启,略麻烦,这时可以自己新建 _.sh 脚本文件,将命令写入脚本文件里,然后在 rc.local 配置文件中运行 _.sh 脚本文件就能实现开机启动 Leanote 服务端。

可以参考我的 *.sh 写法:

#!/bin/bash
mongod --fork --dbpath=/data/LeaNote/mongodb/data --logpath=/data/LeaNote/mongodb/logs/mongodb.log --logappend
nohup revel run github.com/leanote/leanote 2>&1 &
sstr=$(echo -e $str)
echo "$sstr"

若脚本文件命名为 run.sh,且存放在 /root/gopackage 目录里,可以编辑 rc.local 配置文件 /etc/rc.local,加入下面的命令然后保存即可:

source /etc/profile
/root/gopackage/run.sh

参考资料: