蚂蚁笔记 Leanote 自行搭建指南
By 辞峡烟斜
笔记应用,兜兜转转好多年,最初一开始用为知免费版再到为知收费版、Evernote 国际免费版、Joplin。使用 Joplin 也有大半年多,优点尚且不论,其他小毛病譬如 Markdown 编辑器窗口光标定位跟打出的字不在同一位置、一直没有 Web 端(有第三方但未能成功)、同步不方便等就不说了,都能忍。最近因为数据再一次同步丢失,忍不可忍,必须换掉它。想着为知可以自建了,结果试用了一下,搭建完成,等了老半天(应以几个小时算)终于可以登录了,输入用户名和密码,出现登录错误。官方帮助文档倒是都提及了,但我依步骤做还是没解决,那就算了,弃之,体验性不好。最后决定改用 Leanote 。虽然评价有好有坏,但至少目前符合我的使用需求,搭建一步成功,界面、使用体验都不错,各平台客户端都有,同步基本没问题,数据备份可自行搞定,就是官方一直没有网页剪藏(可复制粘贴变相解决),但是已经够用就行了。以下记录搭建和使用过程。
自建 docker 镜像
新建leanote-docker-build
目录,下有两文件:Dockerfile
和run.sh
。
配置Dockerfile
文件
Dockerfile
文件内容如下:
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
内容如下:
#!/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
文件内容如下:
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:10m;
ssl_session_timeout 30m;
#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 100m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
配置install-leanote_inPCC.sh
文件
安装执行文件install-leanote_inPCC.sh
内容如下:
#!/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 笔记。如下图示:


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
文件内容如下:
#!/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
项添加自动定期备份:
18 04 * * * /home/litad/ltdZiao/1syncData/00_DataBaKUP/06leanoteserver/docker_inPCC/leanote_data_autobak_inPCC.sh
即可。