1 背景

在当今数字时代,笔记软件已经成为我们生活和工作中不可或缺的工具。然而,随着数据安全和隐私保护意识的提升,越来越多的用户开始关注笔记数据的存储位置和访问便捷性。
在众多笔记软件选择中,Joplin 作为一款开源的笔记应用,以其优秀的特性和灵活的部署方式脱颖而出。
对于Joplin,我已经使用3年了,所以强烈推荐有动手能力的同学自己搭建私有云笔记。
2025-01-14T13:01:14.png

为什么选择私有云笔记?

与传统的云笔记服务相比,私有云笔记具有以下优势:

  1. 数据安全性:数据完全由自己掌控,不用担心服务商数据泄露
  2. 隐私保护:笔记内容只存储在自己的服务器上,不会被第三方访问
  3. 成本可控:无需支付高额的存储费用,可以根据需求灵活扩展
  4. 功能自定义:可以根据个人需求进行功能定制和优化

为什么选择 Joplin

让我们来对比一下市面上常见的笔记软件:

  • 有道云笔记

    • 优点:界面友好,功能齐全,中文支持好
    • 缺点:数据存储在第三方服务器,无法私有部署,付费功能较多
  • OneNote

    • 优点:与微软生态集成度高,功能强大
    • 缺点:依赖微软服务,同步有时不稳定,无法私有部署
  • Joplin

    • 优点:

      • 开源免费
      • 支持私有部署
      • 全平台支持(Windows, macOS, Linux, Android, iOS)
      • Markdown 编辑器
      • 端到端加密
      • 插件系统
    • 缺点:

      • 界面相对简单
      • 无web端

2 Joplin Server 部署要求

官方支持情况

Joplin 官方提供了完整的服务器端实现,并支持多种部署方式:

  • Docker 容器化部署(推荐)
  • 源码部署
  • 二进制部署

服务器配置要求

最低配置要求
CPU:1核
内存:1GB
存储:取决于笔记数量,建议至少 20GB
操作系统:支持 Docker 的任何系统

3 部署准备工作

域名准备

  1. 购买域名(如:note.yourdomain.com)
  2. 配置 DNS 解析到服务器 IP
  3. 等待 DNS 生效(通常需要几分钟到几小时)

环境准备

# 安装 Docker
curl -fsSL https://get.docker.com | sh

# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker --version
docker-compose --version

# 安装nginx
sudo apt update
sudo apt install nginx

4 使用 Docker Compose 部署 Joplin Server

首先创建项目目录

mkdir joplin-server
cd joplin-server

创建 docker-compose.yml 文件

可参考官方配置:https://raw.githubusercontent.com/laurent22/joplin/dev/docker-compose.server.yml

version: '3'

services:
    db:
        image: postgres:13
        container_name: postgres_13
        volumes:
                - ./postgresData:/var/lib/postgresql/data
        ports:
                - "127.0.0.1:5432:5432"
        restart: unless-stopped
        environment:
                - POSTGRES_PASSWORD=your_password
                - POSTGRES_USER=joplin
                - POSTGRES_DB=joplin
    app:
        image: joplin/server:latest
        depends_on:
            - db
        container_name: joplin
        ports:
            - "127.0.0.1:22300:22300"
        restart: unless-stopped
        environment:
            - APP_PORT=22300
            - APP_BASE_URL=https://your-domain.com
            - DB_CLIENT=pg
            - POSTGRES_PASSWORD=your_password
            - POSTGRES_DATABASE=joplin
            - POSTGRES_USER=joplin
            - POSTGRES_PORT=5432
            - POSTGRES_HOST=db
        logging:
                driver: "json-file"
                options:
                        max-size: "100m"
                        max-file: "5"

这里会部署两个docker容器,一个是PostgreSQL数据库,一个是Joplin Server,如果你有现成的PostgreSQL数据库,可以把数据库的容器去掉,只保留Joplin Server的容器
这里我就是独立部署,可以参考我的部署示例,并且带邮件的相关配置

services:
  joplin_server:
    image: joplin/server:latest
    container_name: joplin
    ports:
      - "22300:22300"
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - APP_PORT=22300
      - APP_BASE_URL=https://your-domain.com
      - DB_CLIENT=pg
      - POSTGRES_PASSWORD=your_password
      - POSTGRES_DATABASE=joplin
      - POSTGRES_USER=joplin
      - POSTGRES_PORT=5432
      - POSTGRES_HOST=postgresql
      - MAILER_ENABLED=1
      - MAILER_HOST=your_mail_host
      - MAILER_PORT=465
      - MAILER_SECURITY=tls
      - MAILER_AUTH_USER=your_user
      - MAILER_AUTH_PASSWORD=your_password
      - MAILER_NOREPLY_NAME=饭饭's Note Server
      - MAILER_NOREPLY_EMAIL=your_email
    networks:
      - local_network
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"

Nginx反向代理配置

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://joplin_server:22300;
    }

现在已经是 2025 年,请为域名配置 HTTPS 证书,并将 HTTP 流量阻挡或重定向到 HTTPS,以保障数据传输的安全。

启动服务

cd joplin-server
docker-compose up -d

查看资源占用

docker stats

正常资源占用在200m左右,我的服务跑了2年了,占用也才400m
2025-01-14T12:27:58.png

登录修改密码

部署成功并配置好nginx反向代理后,此时访问你的域名会进入joplin的登录页面
yourdomain.com/login
默认情况下,Joplin Server 将设置一个管理员用户:
账户:admin@localhost
密码:admin

我们使用默认的账户密码登录后,在右上角,点个人资料按钮更新管理员账户和密码,建议使用强密码
也可以新建一个账户给自己用
2025-01-14T12:43:26.png

5 客户端配置

1.下载对应平台的客户端,Jopin客户端基本覆盖了全平台

2.下载后客户端后,打开工具-->选项-->同步菜单中进行登录
2025-01-14T12:44:42.png
同步目标:Joplin服务器(BETA)
填写自己刚刚设置的账号密码即可完成登录

6 总结与注意事项

1.安全性考虑:

  • 始终使用 HTTPS
  • 定期更新系统和 Docker 镜像
  • 设置强密码
  • 配置防火墙

2.数据备份:

  • 定期备份 PostgreSQL 数据
  • 备份 Joplin 数据目录
  • 考虑使用自动备份脚本