Joplin是一个开源(mianfei)笔记应用,支持 markdown 语法,横跨 mac/ios 等各个平台。通常 Joplin 有三种同步方式:
方式 | 优点 | 缺点 |
---|---|---|
Joplin官方云 | 省心,稳定 | 数据不安全,要付钱 |
公网S3/网盘同步 | 省心,稳定 | 数据不安全,可能要付钱 |
Joplin自建云同步 | 数据相安全,成本较低 | 操作复杂 |
这里就选择了第三种看起来比较复杂的方式。借助 docker,服务安装门槛已经大大降低;cloudflare,则可以更加方便地进行网络端口映射。
0. 准备工作
- 一张 visa/mastercard 的信用卡,用于购买下面三种服务
- 一台 linux 服务器,可以是运行在自己家里的 linux 服务器,也可以是从云服务厂商购买的云主机
- 自己的域名,可以从常见域名服务商处购买(假定已买好了域名 example.com)
- cloudflare 域名解析和内网穿透服务
- 基本的 linux 操作
- terminal 的简单使用
- copy & paste 技能
1. Joplin 客户端的安装
Joplin 支持 iOS/OSX 等平台:
- 电脑端 https://joplinapp.org/download/
- iOS端,在 App Store 中搜索 Joplin
2. 在服务器上运行 Joplin Server
2.1 服务器选择
这里需要一个linux服务器,它可以是:
- 本地安装linux的电脑
- Windows也可以,使用WSL:https://learn.microsoft.com/en-us/windows/wsl/install
- 云计算厂商(如amazon/google/azure)提供的云服务器
这里推荐vultr提供的云服务器:
- 价格实惠,最低可以到$2.5 / 月
- 按时计费
- 支持支付宝/微信付款
2.2 docker-compose 运行Joplin Server
Joplin Server的安装配置比较麻烦,这里使用 docker-compose 来简化安装配置过程。可以参考docker 安装教程来安装docker-compose。用docker-compose来运行Joplin Server服务,对应的 docker-compose.yaml 配置文件如下:
version: "3"
services:
database:
image: postgres:13.1
container_name: postgres_joplin
volumes:
- ./postgres:/var/lib/postgresql/data
ports:
- "$POSTGRES_PORT:$POSTGRES_PORT"
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=$POSTGRES_PASSWORD
- POSTGRES_USER=$POSTGRES_USER
- POSTGRES_DB=$POSTGRES_DATABASE
joplin:
image: joplin/server:latest
container_name: joplin
depends_on:
- database
ports:
- "$APP_PORT:$APP_PORT"
restart: unless-stopped
environment:
- APP_BASE_URL=$APP_BASE_URL
- APP_PORT=$APP_PORT
- DB_CLIENT=$DB_CLIENT
- POSTGRES_PASSWORD=$POSTGRES_PASSWORD
- POSTGRES_DATABASE=$POSTGRES_DATABASE
- POSTGRES_USER=$POSTGRES_USER
- POSTGRES_PORT=$POSTGRES_PORT
- POSTGRES_HOST=$POSTGRES_HOST
docker-compose.yaml文件中有一些外部环境变量,如$POSTGRES_PORT
等,它们的值来自于docker-compose.yaml同目录下的.env文件。
POSTGRES_PASSWORD=joplin
POSTGRES_USER=joplin
POSTGRES_DATABASE=joplin
POSTGRES_PORT=5432
POSTGRES_HOST=database
APP_PORT=8087
APP_BASE_URL=https://joplin.example.com
DB_CLIENT=pg
其它说明:
postgres
一定要选择 13.1 版本的,用 latest 可能会导致无法登录。APP_BASE_URL
应该配置为https://joplin.example.com,它是你最终外网访问的地址。
到刚才保存docker-compose.yml的文件夹,运行:
docker-compose up # 直接运行,会打印log,退出terminal就会停掉
docker-compose up -d # 后台运行,不打印log,退出terminal后继续运行
docker-compose down # 关闭Joplin Server和postgres服务
3. 外网访问配置
前面通过 docker-compose 运行了 Joplin Server 服务。但并不能直接配置客户端进行同步,因为网络还没有配置好,客户端找不到Joplin Server连接的入口。这里还需要将 Joplin Server 同步服务暴露到公网。
3.1 域名购买
域名是我们访问互联网的入口,它能够帮我们方便定位服务器的“位置”。我们的Joplin Server也需要域名作为入口。更简单的理解是,我们的手机、电脑得在互联网上找到我们自建的Joplin Server的地址,此时就需要域名作为互联网上的门牌号了。
域名可以在 namecheap 或者 cloudflare 上购买。
- cloudflare购买域名
要使用cloudflare的话,需要一个cloudflare的账户。注册时候要用到visa或者mastercard的信用卡了。
3.2 cloudflare 解析域名
买好域名之后,还要做一个域名解析。其实就是在域名解析服务器上登记一下。
啥是域名解析
解析的意思是说让域名和某个IP对应起来,实际上,整个互联网上机器的连接是用IP地址作为地址的,但是IP地址实在不好给出更多的便于人类记忆的意义,所以就需要域名解析这一过程,将IP地址和域名联系起来。 比如我说我在这个地方,22.3193° N, 114.1694° E。嗯,你要用飞弹来打我,那肯定是足够了。但是单单这个经纬度实际上给不了太多的信息,如果我告诉你这是香港,你就会自然的到更多信息了。这里这个经纬度就是IP地址,而香港就是域名。显然,域名和IP的对应关系是可以更改的。比如说在晚清,香港被割让,就要英属香港;而1997年之后就叫香港特别行政区。这里可以看到cloudflare的计划,0元计划已经能够满足我们大部分需求。
需要到域名提供商上修改域名服务器为cloudflare。修改完成之后,等一会解析就会生效了。
3.3 cloudflare zerotrust做内网穿透
用cloudflare还有一个好处就是白嫖它的内网穿透,用 cloudflare 的 zerotrust 做内网穿透,让整个互联网都能访问到你的服务。这个免费的内网穿透服务,比市面上那些收费的内网穿透盒子什么的不知道高到哪里去了。
1 在控制台上找到 zerotrust 部分,或者直接点开这里
2 找到Access -> Tunnels --> Create a tunnel
3 新建tunnel
4 服务器安装客户端
这里选择用 docker 的方式进行安装。直接拷贝上面命令:
cloudflare客户端docker安装命令
docker run \
--name cloudflare \
--restart always \
-d \
cloudflare/cloudflared:latest \
tunnel \
--no-autoupdate run \
--token xxxxxx # copy from the cloudflare website
5 在 cloudflare 的网页上新建一个内网穿透隧道:
6 填写相关信息
- subdomain: joplin
- domain: example.com # 通过下拉菜单选取
- service: http # 选择http(而非其它)服务
- url: 10.10.10.11:8087 # 前面的ip是客户端宿主机IP,后面是8087是端口,参考docker-compose.yaml中APP_PORT的值
2.4 服务端账户密码修改
服务器端、内网穿透配置已经全部完成,在浏览器中访问: https://joplin.example.com。
这里的joplin就是前面的subdomain,example.com就是domain。
此时还是默认账户名和密码:
- 账户名:admin@localhost
- 密码:admin
登陆后需要修改账户名和密码!登陆后需要修改账户名和密码!登陆后需要修改账户名和密码!
4. 客户端连接
4.1 mac 客户端同步
在这里下载客户端进行安装。
可以看到这里有多种连接方式,这里选择 Joplin Server:
4.2 iOS 客户端同步
打开 Joplin 应用后,找到
,输入:
- 同步目标 Joplin Server
- Joplin 主机 URL 在
.env
中APP_BASE_URL
的值 - Joplin 主机 email 一般是 admin@localhost
- Joplin 主机密码 默认密码是 admin,需要登陆后修改
配置完成之后,则可以点检查同步设定,查看配置结果。
这里显示同步配置成功了,以后打开 Joplin 时候就会自动同步。
总结
本文介绍了用 docker-compose 自建 Joplin Server 的方式,实现了 mac 和 ios 上 Joplin 笔记的同步。为了能够在公网访问,则用 cloudflare 的 zerotrust 服务做了内网穿透,实现了外部数据同步。