在NAS上搭建免费开源的个人云笔记Joplin服务器

2024-07-16 17:30:15 27点赞 225收藏 56评论

老婆是印象笔记的资深用户,早在2016年就买了十年会员,当时价格还比较优惠,十年的会员费用也就几百块。会员现在还有两年到期,对应的高级账户现在的价格已经到了14元/月,于是我开始寻找替代品。经过一番搜索,锁定了Joplin。

Joplin是一款开源的笔记应用,支持同一账户多平台的同步,包括Windows、macOS、Linux、Android和iOS,满足了不同用户的需求。他还支持Markdown格式,使得笔记排版更加灵活,同时支持插入图片、附件等多种媒体类型,不断更新的各种插件也能满足各种个性化的需求。

在参考了什么值得买上的两位大神的文章之后(文章1 文章2),我信心满满的准备照猫画虎,没成想原本以为挺简单的搭建过程折腾了好几天(我太菜了),每一步都精准的踩到坑里。所以这篇文章的步骤会写得很详细,避免值友们绕路。

我的nas是威联通的453Bmini,固件版本是5.1.7.2770,不同的设备和固件版本在设置上可能会有所区别。以我浅显的理解,Joplin服务器的数据是存在另外一个数据库里的,所以在nas上需要做的大概有3件事情:1. 安装开源数据库应用程序PostgreSQL、2. 安装Joplin Server、3. 设置反向代理。前两个需要在docker中拉取应用,后一个在nas控制台设置。


拉取docker应用

上一次在容器里安装应用大概是半年前,但这次按照之前的操作总是提示失败。在网上搜索才知道6月初国内就无法访问dockerhub和所有的国内镜像站了。在网上了解到拉取docker应用的两种方法:一个是添加新的镜像站,具体说明见这里;一个是在提取镜像的时候在docker名称栏开头写入dockerpull.com/,例如,要下载postgres和joplin两个docker,可按照如下方法来提取镜像:

在Container Station界面的右上角找到“浏览”按钮,点击这个按钮右侧的箭头展开菜单,选择“提取映像”

提取映像提取映像

在弹出的对话框中的“映像”一栏填入“dockerpull.com/joplin/server:latest”或“dockerpull.com/postgres:latest”来分别提取postgres和joplin server的映像,输入后点击“提取”按钮等待下载完成。

提取joplin server映像提取joplin server映像提取postgres映像提取postgres映像

部署postgres数据库容器

下载完毕后,在左侧点击“映像”,先来部署postgres数据库,点击postgres对应的docker右侧的三角箭头按钮:

部署postgres数据库部署postgres数据库

在弹出的对话框中选择“下一步”

创建容器创建容器

在“名称”栏给这个docker起个名字,这里填入“postgres_joplin”,然后点击“高级设置”

设置容器名称设置容器名称

弹出高级设置对话框后,点击左侧“网络”,在“主机”栏填入与容器端口相同的5432

网络设置网络设置

点击左侧“环境”,点击右上角“添加新变量”,这里需要添加4个环境变量:

变量:POSTGRES_DATABASE

值:joplin

变量:POSTGRES_USER

值:joplin

变量:POSTGRES_PASSWORD

值:joplin

变量:TZ

值:Asia/Shanghai

添加环境变量添加环境变量

点击左侧“存储”,在这里设置数据库存储的位置,点击右上角“添加卷”右侧的箭头,在展开的菜单中选择“绑定装在主机路径”

设置存储路径1设置存储路径1

点击右侧的文件夹图标,选择需要保存的路径位置,然后把默认值的容器路径复制到新建的路径中,最后删除默认的存储映射

设置存储路径2设置存储路径2

最后点击“应用”、下一步“”、“完成”,即完成了postgres容器的创建。


部署Joplin Server容器

与postgres相同,在Container Station中的左侧点击“映像”,找到之前下载的joplin server,点击对应右侧的三角按钮

部署joplin server部署joplin server

点击“下一步”

创建joplin容器创建joplin容器

输入一个名称,这里输入“joplin”,然后点击“高级设置”

设置容器名称设置容器名称

点击左侧“网络”,点击“新发布端口”,“主机”和“容器”栏都填入22300

设置网络设置网络

点击左侧“环境”,点击右上角“添加新变量”,这里需要添加9个环境变量:

变量:APP_BASE_URL

值:https://你的域名:访问端口

变量:APP_PORT

值:22300

变量:DB_CLIENT

值:pg

变量:POSTGRES_DATABASE

值:joplin

变量:POSTGRES_USER

值:joplin

变量:POSTGRES_PASSWORD

值:joplin

变量:POSTGRES_PORT

值:5432

变量:POSTGRES_HOST

值:nas的ip地址

变量:TZ

值:Asia/Shanghai

添加环境变量添加环境变量

最后点击“应用”、下一步“”、“完成”,即完成了joplin server容器的创建。


设置反向代理

前面设置的端口都是指容器端口,设置反向代理的作用是:当从指定域名访问nas的指定端口时,转发到对应的容器端口上,具体操作如下:

在“控制台”——“网络和文件服务”——“网络访问”中,找到“反向代理”标签,点击“添加”

设置反向代理设置反向代理

随便取一个规则名称,自己能分辨就好,这里填入“joplinserver”,来源部分的协议选择https,域名写自己的域名,注意不要“https://”部分,只写www.xxx.com即可,端口号写你从外网连接joplin server时的端口号

反向代理规则1反向代理规则1

目标协议默认http,主机名写“localhost”,端口号填之前设置的joplin server端口号:22300

反向代理规则2反向代理规则2

最后点击“应用”完成反向代理规则的添加。

在路由器或者光猫上设置好端口转发,就可以通过外网连接joplin服务器了。首次登陆默认账号密码分别为:admin@localhostadmin,登录后按照提示修改密码。


  • 如果joplin server的日志提示无法连接到database,先停止joplin server和postgres,然后先启动postgres,等数据库启动完毕后再启动joplin server。

  • 如果joplin server提示time drift too large,可在“控制台”——“常规设置”——“时间”中将默认的服务器改为国内的时间服务器,然后点击“更新”、“应用”即可,例如:ntp.aliyun.com(阿里云时间服务器)、ntp.tencent.com腾讯云时间服务器)等。


通过客户端连接Joplin

PC、Mac和安卓手机端的应用可以在这里下载,iOS端在AppStore中搜索下载。这里以PC端为例,其他类型的客户端设置相同。

首次运行PC端时会弹出同步向导,这里选择底部的自托管选项。如果不小心关闭了这个窗口也不用担心,在软件顶部的“工具”——“选项”——“同步”中也可以进入同步设置页面。

点击这里选择自托管点击这里选择自托管

在弹出的同步设置中,同步目标选择“Joplin服务器”,依次填入服务器地址(含端口)、登录账户的邮箱、密码,点击“应用”即可完成同步设置。

PC端同步设置PC端同步设置

以上就是使用postgres作为数据库的自托管joplin服务器设置的全部过程,希望能对计划搭建个人云笔记的值友们有所帮助。


存在的问题

  • 在PC、安卓、iOS端同步时,如果在PC端建立了一个笔记,安卓和iOS端可以同步看到该笔记,但如果安卓端删除该笔记到回收站,则PC和iOS端不会出现删除动作,而在清空回收站后才会同步删除,反之亦然。

  • 在iOS端删除空笔记本时(即笔记本中没有笔记),会直接彻底删除而不会出现在回收站中。安卓和PC端会先到回收站,清空回收站时才彻底删除。

  • 只有外网可以访问,内网无法访问。

    希望有大神可以帮忙解决上面的问题在NAS上搭建免费开源的个人云笔记Joplin服务器

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
56评论

  • 精彩
  • 最新
  • 其实可以直接使用onedrive或者webdav (比如坚果,或者自己nas的webdav服务)同步。比自己搭建要省力。

    校验提示文案

    提交
    嗯,joplin同步里有webdav选项,但看文章有人说webdav同步效率低什么的,想着既然都折腾了,那就一步到位全都用自己搭的吧 [高兴]

    校验提示文案

    提交
    那就必须要依赖客户端,有时候临时想看个文档还是web方便

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • Joplin最大的BUG是同步的时候,有概率清空所有笔记,被坑了一次。原因大概是同步网络不好,就认为笔记都删了,本地的也一起删····吐血

    校验提示文案

    提交
    我遇到过一次,好像是手机和pc端同时点了手动同步,后面就设置了本地自动备份了 [皱眉]

    校验提示文案

    提交
    想死的心都有······后来我换了思源,感觉也还行

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 昨天折腾了各种评价好的笔记软件,都有各种各样的缺陷:免费的同步麻烦,不折腾同步的收费贵。转了一圈下来,最合适我的居然还是onenote。

    校验提示文案

    提交
    还没怎么了解过onenote,回头试一试 [惊喜]

    校验提示文案

    提交
    是的onenote最好···就是写代码不太友好

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 这记录软件适合程序员,不适合普通用户。
    普通用户还是推荐使用onenote,免费,给予的空间绝对够用,同步也方便。
    也能自己做二次备份。

    校验提示文案

    提交
    不适合普通用户的原因是因为Markdown吗?它有两种视图模式,一个是Markdown,一个是普通视图,就可以根据需要选择。
    不过都准备在NAS上搭服务器了,应该也不是普通用户了吧 [小眼睛]
    如果不想折腾的话,OneNote的确是比较好的选择了。

    校验提示文案

    提交
    收起所有回复
  • 很棒,感谢。装了一直有问题,明天照着修改一下看看。

    校验提示文案

    提交
    我也是折腾了好久,搞一搞有问题就放在那,想起来了又搞一搞

    校验提示文案

    提交
    收起所有回复
  • 写得特别好。特别详细。要是都像你这么手把手就好了!!!真的点赞!!!期待你更多文章!!!要是都这么详细就好了。顺便说一句,不知道是不是这个源是有问题。这个源没成功,然后我换到官方源就成功了。设置还是按你的一点没变。

    校验提示文案

    提交
    绕了好多弯路,发出来帮大家避坑 [脸红]

    校验提示文案

    提交
    碎银子给你,支持一下!

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 之前用webdav同步alist的天翼云。弄是弄好了,后面懒得记笔记了。 [亲亲]

    校验提示文案

    提交
    哈哈哈,自己搭的不花钱,不心疼 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 请问你用qnap内置的反向代理Joplin服务成功了吗?我尝试了很多次都不成功

    校验提示文案

    提交
    我也是反向代理不行,我用的lucky,其他很好用,搭建几年了!

    校验提示文案

    提交
    成功了的,反向代理的操作比较简单,按照文章里的设置试试看,记得设置一下端口转发

    校验提示文案

    提交
    收起所有回复
  • joplin本身支持s3,其次搭这个还不如用思源,功能领先太多了

    校验提示文案

    提交
    诶?那我再试试思源 [高兴]

    校验提示文案

    提交
    刚查了一下思源,界面比joplin好看多了,但是看到这行字了:
    目前自建部署的服务端是 WEB 网页版,在手机、电脑上都是通过浏览器访问使用,功能完整,与客户端并无大差别。但如果你希望使用官方桌面版客户端、Android、iOS 手机版客户端,以及同步功能,则需要开通官方的云服务。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • joplin现在有回收站功能了??

    校验提示文案

    提交
    有的,但是不同终端之间貌似不认识移动到回收站这个操作,在一个终端存在于回收站的笔记,在其他终端还正常显示在笔记本里,从回收站彻底删除才会在其他终端消失。

    校验提示文案

    提交
    收起所有回复
  • Checking for time drift using NTP server: pool.ntp.org:123
    Error: Cannot retrieve the network time from pool.ntp.org:123: Timeout waiting for NTP response.
    根据楼主的办法安装好了之后,joplin server的日志里总是显示以上错误,是什么原因啊。(时间服务器也已经调成阿里的那个了。)

    校验提示文案

    提交
    看起来像是连不上pool.ntp.org这个时间服务器导致的错误,可以试试重启docker看看能不能解决,或者试试添加一个环境变量:MAX_TIME_DRIFT,值为0

    校验提示文案

    提交
    感谢楼主,终于通过添加MAX_TIME_DRIFT变量的方式,成功运行了。

    校验提示文案

    提交
    收起所有回复
  • 不确定是不是因为我的DDNS是在路由器上做的,通过域名访问会提示“此网站无法提供安全连接”,无法打开。另外内网地址访问会有跨域问题,也无法访问 [喜极而泣]

    校验提示文案

    提交
    路由器做了端口转发吗?有些浏览器会拦截非标准端口的链接,看看有没有“仍然访问”的选项

    校验提示文案

    提交
    收起所有回复
  • version: '3'

    services:
    db:
    image: postgres:latest
    volumes:
    - /share/dok/笔记joplin:/var/lib/postgresql/data #更换成自己的储存目录
    ports:
    - "5432:5432" # 左边的端口可以更换,右边不要动!
    restart: unless-stopped
    environment:
    - POSTGRES_PASSWORD=joplin # 改成你自己的密码
    - POSTGRES_USER=joplin # 改成你自己的用户名
    - POSTGRES_DB=joplin
    app:
    image: joplin/server:latest
    depends_on:
    - db
    ports:
    - "22300:22300" # 左边的端口可以更换,右边不要动!
    restart: unless-stopped
    environment:
    - APP_PORT=22300
    - APP_BASE_URL=去看看:端口 # 改成反代的域名
    - DB_CLIENT=pg
    - POSTGRES_PASSWORD=joplin # 与上面的密码对应!
    - POSTGRES_DATABASE=joplin
    - POSTGRES_USER=joplin # 与上面的用户名对应!
    - POSTGRES_PORT=5432 # 与上面右边的对应!
    - POSTGRES_HOST=db

    校验提示文案

    提交
    回头试试,我还是喜欢这种形式的,可以随时修改内容 [献花]

    校验提示文案

    提交
    你好,这个排版是不是有点问题,输入进去显示代码有错误

    校验提示文案

    提交
    收起所有回复
  • 可以用S3,很稳的

    校验提示文案

    提交
  • 腾讯云cos一年才十块不到,比你这样会方便很多

    校验提示文案

    提交
    Cloud的好处是可以分享,s3这些就不行

    校验提示文案

    提交
    想要分享的话我一般直接粘贴到知乎叫他们去看了,知乎也支持md导入。一般是作为本地笔记使用

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • Obsidian

    校验提示文案

    提交
  • 群晖不是自带了Note软件吗 [皱眉]

    校验提示文案

    提交
  • 用 为知笔记好多年了,每年60块

    校验提示文案

    提交
  • 威联通没有公网Ip,https://你的域名:访问端口,和反向代理详细一点指导,多谢!

    校验提示文案

    提交
  • 为知笔记好用!

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
225
扫一下,分享更方便,购买更轻松