告别印象笔记,使用Leanote自建云笔记
印象笔记广告越来越多,即便VVVIP会员也免不了遭受广告的荼毒,免费用户限制又颇多。本文介绍使用Leanote自建云笔记服务取代印象笔记的方法,一些遇到的问题和解决办法,以及Leanote相比印象笔记的优势与一些不足之处。
0. 前言
印象笔记广告越来越多,即便VVVIP会员也免不了遭受广告的荼毒。而且这些年来markdown编辑器一直很烂,代码复制粘贴经常乱套。遂准备将笔记切换到自建Leanote(蚂蚁笔记)。
本文主要介绍使用Leanote自建云笔记服务取代印象笔记的方法,包括Docker部署,后台设置,笔记导入,反向代理与内网穿透,以及数据备份的方法。并针对Windows客户端无法连接代理问题,Ubuntu启动器添加图标问题给出解决方案。
Leanote网页端:
Leanote(自建服务器)相比于印象笔记优缺点如下:
优点:
- 不限制登录设备数量
- 不限制存储空间
- 没有广告
- 代码排版优秀
- Markdown好用(当然毕竟不如vscode)
- 服务器运行内存小(对比为知笔记自建)
- 部署相对简单(对比WebDev+github+vscode等各种魔法组合)
- 开源,geek可自己定制
缺点:
- 需要服务器成本、域名成本
- 国内建站需要备案访问
- 内网环境外部访问麻烦
- 开源社区维护热情欠佳,github上issue很多都没人管
- 桌面客户端同步稳定性差
- 桌面客户端不支持代理访问(文中有解决方案)
横向对比了一下发现并没有十全十美的笔记,就决定用它了。
注:Leanote官方的笔记托管过了试用期就收费,还有过服务器丢图片的情况,不建议使用。
1. 部署Leanote服务器
虽然网上有很多教程,但是使用Docker搭建的方式是最简单的。鉴于官网的教程只有三行,这里简单写一点。
首先clone leanote-docker这个git repo。
1
2
git clone https://github.com/leanote/leanote-docker.git
git submodule update --init
修改app.conf
与下面相关的部分
1
2
3
4
5
6
7
http.addr=0.0.0.0 # listen on all ip addresses #这里不要修改
http.port=9000 #修改监听端口
site.url=https://your.own.host # 改为反向代理后的地址
# You Must Change It !! About Security!!
app.secret=mustchangeit! # 这里必须改掉,但是docker的教程没有说,官网的教程倒是有
修改docker-compose.yaml
与下面相关的部分,避免database被容器外直接访问(其实不改也可以)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
services:
mongo:
# 增加这一项
networks:
- database_only
leanote:
# 增加这一项
networks:
- public_access
- database_only
# 增加这一项
networks:
public_access: # Provide the access for leanote
database_only: # Provide the communication between leanote and database only
internal: true
注:如果是群辉上面使用docker,则需将下列目录映射的本地目录手动新建:
1
2
3
/data/db
/leanote/src/github.com/leanote/leanote/files
/leanote/src/github.com/leanote/leanote/public/upload
并增加Owner用户组并允许读取/写入,否则mongodb会不断重启。
如果使用默认配置,则直接将.
(即leanote-docker
)目录设置增加Owner用户组即可。
下面可以启动docker了。
1
docker-compose up -d
稍等一会,即可以打开http://localhost:9001
(或者docker机器的内网IP地址)。
2. 设置admin账户
默认的admin账户如下
1
2
用户名: admin
密码: abc123
3. 反向代理&内网穿透
通常我们部署docker,都需要反向代理实现通过域名的外网HTTPS访问。
如果是部署在内网,则需要使用内网穿透。
思考:为什么有外网服务器还要部署在内网?
这里简单讲一个实现内网穿透的思路,之前的文章也有提到过。详细的配置可能要单独整理一篇文章。
3.1 FRP内网穿透
内网机器上安装frpc(可以通过docker的方式安装)。
修改frpc.ini
1
2
3
4
5
6
7
8
9
10
11
[common]
server_addr = ur.own.ip.adr
server_port = 12345
token = setyourowntoken
tcp_mux = true
[Leanote]
type = tcp
local_ip = 127.0.0.1
local_port = 9001
remote_port = 9001
外网服务器上安装frps。
修改frps.ini
1
2
3
4
5
6
7
8
9
10
11
[common]
bind_port = 12345
log_file = ./frps.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# auth token
token = setyourowntoken
max_pool_count = 50
tcp_mux = true
subdomain_host = your.own.domain
3.2 Caddy反向代理(推荐)
Caddy是自动申请证书并将HTTP转化成HTTPS的服务器,配置超简单。
修改Caddyfile
文件
1
2
3
your.own.domain {
reverse_proxy http://127.0.0.1:9001/
}
3.3 Nginx反向代理(较麻烦)
Nginx是生产环境使用的老牌代理服务,配置相对复杂,需要自己申请HTTPS证书。
在 /etc/nginx/conf.d
目录中创建 leanote.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443;
server_name your.own.domain;
ssl on;
ssl_certificate /etc/nginx/conf.d/your.own.domain_chain.crt;
ssl_certificate_key /etc/nginx/conf.d/your.own.domain_key.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 1000M;
location / {
proxy_pass http://127.0.0.1:9001;
}
}
3.4 SSL证书申请
证书申请可以使用这个网站,每次可以申请一年的免费证书。 https://freessl.cn/
4. 客户端下载
官网下载地址: http://app.leanote.com/
Github下载地址: https://github.com/leanote/desktop-app/releases/
iOS移动端: https://itunes.apple.com/app/leanote/id1022302858
Android移动端: https://ali-cdn.leanote.top/apk/Leanote-v1.0-beta.7.apk
4.1 Windows
登录自建服务的时候要填写https://
开头。
2022.9.6更新:
经过不懈努力(人菜瘾大),终于找到代理的设置实际是在needle.js中。
将resource/app/node_modules/needle/lib/needle.js
中的options.proxy
改成'http://proxy.server:port'
即可
详见Leanote APP with proxy (Leanote官方已经不维护了,issue都关了,有人都在PR里面骂上了。)
桌面客户端不能用代理,看github一堆issue也没人管。如果是公司内网(需要代理),就需要Proxifier软件辅助桌面客户端走代理。
官网下载地址:https://www.proxifier.com/
试用版可以试用31天,之后需要花钱购买license。
之后重启Leanote客户端即可正常联网。
4.2 Linux
这里使用了Ubuntu18.04desktop,在Ubuntu下界面和Windows差不多。
在启动器里面增加图标
1
2
cd ~/.local/share/applications
vi leanote.desktop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Desktop Entry]
Encoding=UTF-8
Version=1.5
Comment=cloud based note-taking application
Type=Application
Terminal=false
Name=Leanote
Exec=/home/xxx/leanote/Leanote
Icon=/home/xxx/leanote/leanote.png
StartupNotify=true
Categories=TextEditor;
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true
StartupWMClass=leanote-desktop
未解决问题:侧边栏图标仍无法显示
2022/4/1 更新:问题解决,参考上方ini文件
4.3 iOS
iPad界面: 无论是iPhone还是iPad,界面都不是很好用,只能说凑合看吧。
5. 印象笔记导入
Windows客户端支持导入印象笔记格式(enex)以及html格式:
- html导入的缺点是不能同步时间,部分图片会丢失。
- enex导入的缺点是不能全部导入(会丢文章),部分图片会导入两次。
没有能完美解决的方法,只能手动修改一些重要的文章(累死我了)。
6. 数据备份
mongodump
只能保存数据库的快照,并不能保存上传的文件与图片(在file
目录下)。
数据库升降级还是要用到,不过一般一个服务开起来基本就不会考虑数据库升降级了。
这里推荐使用计划任务crontab -e
备份整个目录(示例):
1
2
3
4
# 每日0点备份
0 0 * * * tar -czf /home/share/leanote_bk/leanote_$(date +%Y%m%d).tar.gz /home/share/leanote
# 每日1点检查并删除7日前备份文件
0 1 * * * find /home/share/leanote_bk/ -type f -mtime +7 -exec rm -f {} \;
脚本示例
1
2
tar -czf /volume1/backup/leanote_bk/leanote_$(date +%Y%m%d).tar.gz /volume1/backup/leanote
find /volume1/backup/leanote_bk/ -type f -mtime +7 -exec rm -f {} \;
7. 总结
虽然Leanote在细节上有很多不足,社区也基本不再维护,但是对于目前的使用场景足够用。
这篇文章虽然不是很完善,但对于想要自建Leanote的朋友来说还是有一些帮助,不足之处也欢迎指正。
一些尚未解决的问题:
- 群晖docker使用wkhtmltopdf将PDF导出的问题。
- Linux客户端侧边栏图标的问题。
2023/12/19 更新:wkhtmltopdf 解决方法:更换docker-compose file中
zxfishhack/leanote
为jim3ma/leanote