总结摘要
笔记应用,兜兜转转好多年,最初一开始用为知免费版再到为知收费版、Evernote 国际免费版、Joplin。使用 Joplin 也有大半年多,优点尚且不论,其他小毛病譬如 Markdown 编辑器窗口光标定位跟打出的字不在同一位置、一直没有 Web 端(有第三方但未能成功)、同步不方便等就不说了,都能忍。最近因为数据再一次同步丢失,忍不可忍,必须换掉它。...
笔记应用,兜兜转转好多年,最初一开始用为知免费版再到为知收费版、Evernote 国际免费版、Joplin。使用 Joplin 也有大半年多,优点尚且不论,其他小毛病譬如 Markdown 编辑器窗口光标定位跟打出的字不在同一位置、一直没有 Web 端(有第三方但未能成功)、同步不方便等就不说了,都能忍。最近因为数据再一次同步丢失,忍不可忍,必须换掉它。想着为知可以自建了,结果试用了一下,搭建完成,等了老半天(应以几个小时算)终于可以登录了,输入用户名和密码,出现登录错误。官方帮助文档倒是都提及了,但我依步骤做还是没解决,那就算了,弃之,体验性不好。最后决定改用 Leanote 。虽然评价有好有坏,但至少目前符合我的使用需求,搭建一步成功,界面、使用体验都不错,各平台客户端都有,同步基本没问题,数据备份可自行搞定,就是官方一直没有网页剪藏(可复制粘贴变相解决),但是已经够用就行了。以下记录搭建和使用过程。
Leanote 官网:蚂蚁笔记
Leanote 官网:Github
自建 docker 镜像
新建leanote-docker-build目录,下有两文件:Dockerfile和run.sh。
配置Dockerfile文件
Dockerfile文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FROM mongo : 4.2 . 7 - bionic
MAINTAINER zcw
ENV TZ = Asia / Shanghai
ADD run . sh / root /
RUN set - ex ; \
apt - get update ; \
apt - get install - y -- no - install - recommends wget tar vim ; \
# install font
apt - get install - y xvfb libXrender * libfontconfig * ; \
apt - get install - y \
fonts - arphic - bkai00mp \
fonts - arphic - bsmi00lp \
fonts - arphic - gbsn00lp \
fonts - arphic - gkai00mp \
fonts - arphic - ukai \
fonts - arphic - uming \
ttf - wqy - zenhei \
ttf - wqy - microhei \
xfonts - wqy ; \
rm - rf / var / lib / apt / lists /* ; \
# download wkhtmltopdf
wget https : // github . com / wkhtmltopdf / wkhtmltopdf / releases / download / 0.12 . 4 / wkhtmltox - 0.12 . 4 _linux - generic - amd64 . tar . xz ; \
tar - xvf wkhtmltox - 0.12 . 4 _linux - generic - amd64 . tar . xz ; \
cp wkhtmltox / bin / wkhtmltopdf / usr / local / bin / wkhtmltopdf ; \
chmod + x / usr / local / bin / wkhtmltopdf ; \
rm - rf wkhtmltox wkhtmltox - 0.12 . 4 _linux - generic - amd64 . tar . xz ; \
#download leanote,下载地址后有说明
wget https : // static . axboy . cn / leanote / leanote - linux - amd64 - v2 . 6.1 . bin . tar . gz - O / root / leanote . tar . gz ; \
tar - xzf / root / leanote . tar . gz - C / root / ; \
rm - f / root / leanote . tar . gz ; \
chmod a + x / root / run . sh ; \
chmod a + x / root / leanote / bin / run . sh ; \
echo 'export QT_QPA_PLATFORM=offscreen' >> ~/. bashrc ; \
ln - snf / usr / share / zoneinfo /$ TZ / etc / localtime ; \
echo $ TZ > / etc / timezone
EXPOSE 9000 27017
# CMD ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && /bin/bash /root/run.sh
CMD / bin / bash / root / run . sh
上述第32行地址根据实际情况修改。leanote 最新稳定版本地址可在
http://leanote.org/#download
查看。
配置run.sh文件
run.sh内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
mongod &
# 数据库未导入
if [ ! -f "/data/db/do_not_delete" ] ; then
echo "Initial mongo data"
mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/
echo "do not delete this file" >> /data/db/do_not_delete
chmod 400 /data/db/do_not_delete
fi
# conf不存在
if [ ! -f '/data/leanote/conf/app.conf' ] ; then
mkdir -p /data/leanote/conf/
cp /root/leanote/conf/app.conf /data/leanote/conf/app.conf
echo "first run, replace secret"
oldStr = ` cat /data/leanote/conf/app.conf | grep 'app.secret' `
newStr = app.secret= ` cat /proc/sys/kernel/random/uuid`
sed -i "s/ ${ oldStr } / ${ newStr } /g" /data/leanote/conf/app.conf
sed -i "s/site.url=.* $/site.url=\${SITE_URL} /" /data/leanote/conf/app.conf; # SITE_URL 参数对应下述安装执行文件
fi
cp -n -r /root/leanote /data/
rm -rf /root/leanote/
echo ` date "+%Y-%m-%d %H:%M:%S" ` ' >>>>>> start leanote service'
/data/leanote/bin/run.sh
上述两文件代码主要是参考
https://github.com/axboy/docker-leanote
完整功能版本相应代码,部分已根据需要和习惯自行增加和修改。建好后,在此目录执行如下命令:
docker build -t litanid/leanote:v261l1 .
将新建 docker 镜像文件 litanid/leanote:v261l1 。
docker login后,执行docker push litanid/leanote:v261l1,上传至 docker hub。
在 docker 环境平台搭建运行 Leanote
配置 nginx
首先,配置 DNS 解析,将域名(假设为leanote.yiwan.org)解析到你的主机。然后配置 nginx 网站文件leanote.yiwan.org.conf并启用。
leanote.yiwan.org.conf文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
server {
listen 80 ;
#listen [::]:80;
server_name leanote . yiwan . org ;
rewrite ^ ( .* ) $ https : //$ { server_name } $ 1 permanent ;
# return 301 https://$host$request_uri;
}
server {
listen 443 ssl ;
#listen [::]:443 ssl
server_name leanote . yiwan . org ;
charset utf - 8 ;
access_log / var / log / nginx / host . access . log main ;
#ssl on;
ssl_certificate / home / litad /. ssl / apa - letsencrypt /*. yiwan . org / fullchain . pem ;
ssl_certificate_key / home / litad /. ssl / apa - letsencrypt /*. yiwan . org / key . pem ;
ssl_protocols TLSv1 TLSv1 . 1 TLSv1 . 2 ;
ssl_ciphers ECDHE - RSA - AES128 - GCM - SHA256 : ECDHE : ECDH : AES : HIGH : ! NULL : ! aNULL : ! MD5 : ! ADH : ! RC4 : ! DH : ! DHE ;
ssl_prefer_server_ciphers on ;
ssl_session_cache shared : SSL : 10 m ;
ssl_session_timeout 30 m ;
#zero mean unlimited. you can upload any filesize you want
client_max_body_size 0 ;
underscores_in_headers on ;
location / {
proxy_redirect off ;
proxy_pass http : // 127.0 . 0.1 : 58081 ; #对应下面设置的端口
proxy_set_header Host $ http_host ;
proxy_set_header X - Real - IP $ remote_addr ;
proxy_set_header X - Forwarded - Ssl on ;
proxy_set_header X - Forwarded - For $ proxy_add_x_forwarded_for ;
proxy_set_header X - Forwarded - Proto $ scheme ;
proxy_set_header X - Frame - Options SAMEORIGIN ;
client_max_body_size 100 m ;
client_body_buffer_size 128 k ;
proxy_buffer_size 4 k ;
proxy_buffers 4 32 k ;
proxy_busy_buffers_size 64 k ;
proxy_temp_file_write_size 64 k ;
}
}
配置install-leanote_inPCC.sh文件
安装执行文件install-leanote_inPCC.sh内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env bash
# Provide default variable values
if [ -z " ${ LD_CONTAINER_NAME } " ] ; then
LD_CONTAINER_NAME = "leanote" #定义容器名称
fi
if [ -z " ${ LD_HOST_PORT } " ] ; then
LD_HOST_PORT = 58081 #定义主机端口
fi
if [ -z " ${ LD_SITEURL } " ] ; then
LD_SITEURL = https://leanote.yiwan.org #定义访问域名
fi
if [ -z " ${ LD_HOST_DATA_DIR } " ] ; then
LD_HOST_DATA_DIR = /home/litad/ltdZiao/1syncData/90_Leanote #定义数据目录
mkdir -p ${ LD_HOST_DATA_DIR } /{ db,conf,files,upload} #如之前没有数据目录,则新建
fi
if [ -z " ${ LEANOTE_DOCKER_IMAGE } " ] ; then
LEANOTE_DOCKER_IMAGE = litanid/leanote:v261l1 #定义 docker hub 镜像文件,同第一步匹配
fi
echo "Create or update leanote container"
echo "Container name: ${ LD_CONTAINER_NAME } "
echo "Host port: ${ LD_HOST_PORT } "
echo "Host data dir: ${ LD_HOST_DATA_DIR } "
echo "Stop existing container..."
docker stop ${ LD_CONTAINER_NAME } || true
echo "Remove existing container..."
docker rm ${ LD_CONTAINER_NAME } || true
echo "Update image..."
docker pull ${ LEANOTE_DOCKER_IMAGE }
echo "Start container..."
docker run --name ${ LD_CONTAINER_NAME } \
--restart= always -d \
-v ${ LD_HOST_DATA_DIR } /db:/data/db \
-v ${ LD_HOST_DATA_DIR } /conf:/data/leanote/conf \
-v ${ LD_HOST_DATA_DIR } /files:/data/leanote/files \
-v ${ LD_HOST_DATA_DIR } /upload:/data/leanote/public/upload \
-e SITE_URL = ${ LD_SITEURL } \
-p ${ LD_HOST_PORT } :9000 \
${ LEANOTE_DOCKER_IMAGE }
echo "Done!"
终端下运行此文件,如无错误,则可以打开浏览器,输入https://leanote.yiwan.org后即可访问搭建好的 Leanote 笔记。如下图示:
Web 端首页 Web 端笔记页 Leanote 使用方法以及遇到的问题和解决方法
用户和密码
初始用户有两个:
user1: username: admin, password: abc123 (管理员, 只有该用户才有权管理后台, 登录后一定要记得修改)
user2: username: [email protected] , password: [email protected] (仅供体验使用,不能修改密码)
可自行增加用户。
客户端使用
Leanote 可在多平台使用,从官网下载各平台应用。各平台应用如之前用其他用户登录过,登录选定用户时笔记会和之前用户混合在一起,此时 Android 端请先管理 Leanote app,清空用户数据再重新登录,PC 端登录后请先“强制全量同步”一下(就是用服务端的数据覆盖本地数据)。建议如果可行,尽量用 Web 端登录使用。其他客户端使用时,使用前和使用后,记得先要同步一下,要不然容易造成数据不一致。
修改上传附件大小限制
使用一段时间后,你会发现本地有些笔记无法同步成功,会提示 uplodad 错误。此时一方面要修改上述leanote.yiwan.org.conf文件中的限制文件大小限制,另一方面要登录后台管理更改上传图片、附件等大小限制。当然,首要的是相应目录权限也要先设置好。
更新后无法启动容器
如果更新到新版后, 出现启动后无法访问网站或者是无法启动容器, 可能是 conf 文件与老版本不兼容引起的, 去官方地址
https://github.com/leanote/leanote/tree/master/conf
下载一个最新的配置文件覆盖掉 conf/app.conf 后稍作修改即可。
数据备份
数据还是要定期经常备份,要不然万一丢失了或损坏了,那才是欲哭无泪,叫天不应,叫地不灵。数据无价。
备份脚本leanote_data_autobak_inPCC.sh文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
# Others vars
SOCE_DIR = "/home/litad/ltdZiao/1syncData/90_Leanote/" #需要备份的目录
BACK_DIR = "/home/litad/ltdZiao/1syncData/00_DataBaKUP/06leanoteserver/data/" #备份文件要保存到的目录
DATE = ` date +%Y%m%d%H%M%S`
tar cvjf ${ BACK_DIR } leanote_inPCC_$DATE .tar.bz2 ${ SOCE_DIR }
chown 12078:12078 ${ BACK_DIR } leanote_inPCC_$DATE .tar.bz2 #更改所属用户、用户组
# 删除7天之前的备份文件,但保留日期为1号的文件(用于手动删除)
find ${ BACK_DIR } * -regextype "posix-extended" -not -regex ".*[0-9]{6}01[0-9]{6}\.tar\.bz2 $" -mtime +7 -exec rm {} \;
再设置 crontab 项添加自动定期备份:
1
18 04 * * * /home/litad/ltdZiao/1syncData/00_DataBaKUP/06leanoteserver/docker_inPCC/leanote_data_autobak_inPCC.sh
即可。
参考文章