joplin 是一款开源笔记应用,全平台适用,支持多种云端同步方式。最近体验了下感觉不错,尤其是可以自行搭建 server 服务端保存数据,适合喜欢管理整个数据流程的人士。下面介绍如何在服务器通过 docker 搭建 joplin server 的方法。

joplin 官网:https://joplinapp.org/
GitHub 主页:https://github.com/laurent22/joplin
各个平台客户端下载:https://joplinapp.org/download/

我的服务器系统平台是 Ubuntu 20.04。

docker 环境安装

首先如果安装过老版的 docker 先卸载:

sudo apt-get remove docker docker-engine docker.io containerd runc

安装基础环境:

 sudo apt-get update
 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

添加 docker 官方 GPG key:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 docker 和 docker-compose:

 sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

docker 配置为非 root 用户,解决执行命令需要 sudo:

sudo groupadd docker
sudo usermod -aG docker $USER
su - ${USER}

配置 docker-compose

通过 docker-compose 可以方便的配置 docker 容器设置及多容器之间数据交互。

新建 joplin 文件夹用来存放配置 docker-compose.yml 以及 .env 环境变量文件,我喜欢放在 opt 路径下:

mkdir /opt/docker/joplin
cd /opt/docker/joplin

新建环境变量文件 .env 内容如下:

APP_BASE_URL=https://joplin.your.site
APP_PORT=22300
# 
DB_CLIENT=postgres
POSTGRES_PASSWORD=PASSWORD
POSTGRES_DATABASE=joplin
POSTGRES_USER=USERNAME
POSTGRES_PORT=5432
POSTGRES_HOST=localhost

上面的配置中需要自行修改几项:

  • APP_BASE_URL 修改为你实际访问 joplin 服务的外网地址,需要提前配置好 dns 映射,我是通过 cloudflare 管理的
  • POSTGRES_PASSWORD 修改数据库密码
  • POSTGRES_USER 修改数据库用户名

新建 docker-compose.yml 内容如下:

version: '3'
services:
    db:
        image: postgres:13
        volumes:
            - ./data/postgres:/var/lib/postgresql/data
        ports:
            - "5432:5432"
        restart: unless-stopped
        environment:
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_DB=${POSTGRES_DATABASE}
        network_mode: host
    app:
        image: joplin/server:latest
        depends_on:
            - db
        ports:
            - "22300:22300"
        restart: unless-stopped
        environment:
            - APP_PORT=${APP_PORT}
            - APP_BASE_URL=${APP_BASE_URL}
            - DB_CLIENT=${DB_CLIENT}
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_DATABASE=${POSTGRES_DATABASE}
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_PORT=${POSTGRES_PORT}
            - POSTGRES_HOST=${POSTGRES_HOST}
        network_mode: host

docker-compose 会自动调用同一路径下的 .env 文件中定义的环境变量。

完成配置后启动容器:

docker-compose up -d

nginx 配置

外网访问上面定义的 url 后,需要通过反向代理将数据流传给 joplin server 端口 22300,我使用的是 nginx 配置如下:

server {
    listen        443 ssl http2;
    listen        [::]:443 ssl http2;
    server_name   joplin.your.site;
    include       my-server/ssl; 加入 ssl 相关配置

    location / {
        proxy_pass          http://127.0.0.1:22300;
        proxy_redirect      off;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    Upgrade           $http_upgrade;
        proxy_set_header    Connection        "upgrade";
        proxy_http_version  1.1;
    }
}

完成后重启 nginx:

systemctl restart nginx

访问

配置好 docker 和 nginx 后就可以访问上面设置的 url 访问 joplin 了,默认会自动创建一个用户 [email protected],密码是 admin

第一次登录进去后最好修改下默认管理员密码,还可以创建多个账户。

如果要适用账户的邮件服务,需要额外配置 SMTP 相关的内容,这里不做介绍,新建账户的激活邮件可以在管理菜单中找到,没有配置邮件服务的话无法发送成功,可以手动将邮件中的账户激活链接发送给别人。

如果登录网址无法访问网页,可能是 docker 配置有问题,可以通过 log 查看是否有报错信息:

docker container list # 查询到容器的 ID
docker logs ID # 通过 joplin 的容器 ID 查询其日志

插件

joplin 桌面版支持安装插件,第三方插件有很多,可以在下面链接查找:Joplin Plugin Repository

参考链接

nstall Docker Engine on Ubuntu
How To Install and Use Docker on Ubuntu 20.04
docker logs
joplin server install
docker-compose.server.yml
.env-sample