docker 部署 joplin server进行文档同步

本文详细指导如何在本地服务器通过Docker搭建JoplinServer,配置多端同步,涉及docker-compose、数据库设置、邮件服务和Nginx代理,适用于Windows/Mac/Linux用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Joplin 是一个开源的笔记工具,拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端,可惜暂时还没有web版本的。

多端同步功能是笔记工具最重要的功能。只有实现了多端同步,我们才能在工作电脑和手机之间无缝切换笔记体验。
Joplin 在同步上做得不错,支持 Dropbox、OneDrive 和 AWS s3,支持 WebDAV 协议,我也曾直接使用Nextcloud的webdav进行同步,也支持自家的 Joplin Server。

本文介绍如何在自己的服务器上利用docker搭建 Joplin Server,并配置好 Joplin Desktop 的同步功能。

首先需要安装docker和docker-compose,这个还请各位大佬找找别的文档,很容易搞定,本文只介绍joplin server 部署的部分

joplin server 部署

docker-compose文件

首先看下官方文档

官方dokcer-compose.yml文件示例

当然官方文档是缺少一些重要参数的,本文中做说明,在文档的joplinserver的容器启动时还需要下面的环境变量

- APP_PORT=22300  //这个是默认的端口
- APP_BASE_URL=https://joplin.XXX.space  //这是你后续nginx代理后要访问这个服务时要用的域名
// //数据库名称,和db容器一致即可
- DB_CLIENT=pg  //数据库类型,
- POSTGRES_PASSWORD=sadassss6  
- POSTGRES_DATABASE=joplin  
- POSTGRES_USER=joplin
- POSTGRES_PORT=5432
- POSTGRES_HOST=postgres_db
//下面是邮件服务,当你容器启动后,修改密码系统会给您发邮件确认,这里如果不配置,会发不了邮件,密码也就改不成功
- MAILER_ENABLED=true   
- MAILER_HOST=smtp.exmail.qq.com  //我用的是企业微信邮箱,所以这里是这样的,按邮件服务商的设置即可
- MAILER_PORT=465
- MAILER_SECURITY=tls  //这里的tls好像一定要小写
//下面这些,也不知道是不是必须的,反正都写上吧
- MAILER_AUTH_USER=service@32323e.com
- MAILER_AUTH_PASSWORD=322222222
- MAILER_NOREPLY_NAME=service@32323e.com
- MAILER_NOREPLY_EMAIL= service@32323e.com
- SUPPORT_EMAIL=sservice@32323e.come
- SUPPORT_NAME=service
- BUSINESS_EMAIL=service@32323e.com

完整的文件内容如下

version: '3'
services:
    postgres_db:
        image: postgres:13
        container_name: postgres_db
        volumes:
            - ./postgres:/var/lib/postgresql
        ports:
            - 5432:5432
        restart: unless-stopped
        environment:
            - POSTGRES_PASSWORD=rrrrrrr
            - POSTGRES_USER=joplin
            - POSTGRES_DB=joplin
    joplin_server:
        image: joplin/server:latest
        container_name: joplin_server
        depends_on:
            - postgres_db
        ports:
            - 22300:22300
        restart: unless-stopped
        environment:
            - APP_PORT=22300
            - APP_BASE_URL=https://joplin.rrr.rr
            - DB_CLIENT=pg
            - POSTGRES_PASSWORD=rrrrrrr
            - POSTGRES_DATABASE=joplin
            - POSTGRES_USER=joplin
            - POSTGRES_PORT=5432
            - POSTGRES_HOST=postgres_db
            - MAILER_ENABLED=true
            - MAILER_HOST=smtp.exmail.qq.com
            - MAILER_PORT=465
            - MAILER_SECURITY=tls
            - MAILER_AUTH_USER=service@rrr.space
            - MAILER_AUTH_PASSWORD=3ErrrrrraVFq
            - MAILER_NOREPLY_NAME=service@rrr.space
            - MAILER_NOREPLY_EMAIL= service@rrr.space
            - SUPPORT_EMAIL=service@rrr.space
            - SUPPORT_NAME=service
            - BUSINESS_EMAIL=service@rrr.space
  

文件放在系统的用户目录下,然后执行
docker-compose up -d
然后访问ip:22300,即可看到页面

这时由于你的代理还没有设置,可能会不让你访问

如果需要以Ip+ 端口的形式先访问,可以将上面环境变量的APP_BASE_URL改成http://ip:22300,注意,一定要写端口号,而且端口号后面不能有斜杠/

打开页面后,使用默认的账户名 admin@localhost 和密码 admin 登录,然后修改账号和密码即可。
如果你的邮箱配置正确,会收到修改密码的确认邮件。

nginx的配置

为了启用nginx,需要添加nginx,
并且需要在购买域名的地方申请一个ssl证书,然后下载下来,
再起一个nginx的doker容器就可以了,

 proxy:
    image: nginx
    container_name: nginx_proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/certs:/etc/nginx/certs:ro
      - ./nginx/vhost.d:/etc/nginx/vhost.d
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/temp_dir:/usr/share/nginx/temp_dir
      - ./nginx/cache:/usr/share/nginx/cache
      - /var/run/docker.sock:/tmp/docker.sock:ro

在certs的文件夹下,放入两个证书文件,并且在下面的joplin_ng.conf种设置证书文件路径。
在nginx.conf的文件的http{}里面填写下面一句话,这句话让nginx去conf.d文件夹下面加载全部配置文件。
include /etc/nginx/conf.d/*.conf;
conf.d文件夹填加一个新的文件,joplin_ng.conf,里面内容如下

server {
  listen 443 ssl ; 
  ssl_certificate certs/joplin.rrr.rr.pem; 
  ssl_certificate_key certs/joplin.rrr.rr.key;
  server_name joplin.rrr.rr ;
  location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection $connection_upgrade;
        client_max_body_size 100m;
        proxy_pass http://服务器本地IP:22300;
  } 
}   

配置文件设置完成后,进入容器内部执行
nginx -t 检查配置文件正确性
nginx -s reload执行重新加载配置文件

配置 joplin Desktop

登录进入 https://your-sample-url/login ,使用默认的账户名 admin@localhost 和密码 admin 登录,然后修改账号和密码即可。

服务器 URL 保持和 .env 配置文件中的 APP_BASE_URL 配置相同。

Joplin Server 支持多个客户端同步,可以把每个客户端的内容同步到不同的服务器目录。不同的目录可以在 Joplin Server 后台看到。如果你只有一个客户端,那么随便填写一个英文字符串就好。

参考文档:
部署的时候参考了很多文档,最终整理文档时参考了以下文章
https://zhuanlan.zhihu.com/p/352413230
https://blog.youkuaiyun.com/monokai/article/details/114009792
https://github.com/laurent22/joplin/tree/dev/packages/server
https://zhuanlan.zhihu.com/p/430521274

<think>嗯,用户想开发一个日记管理应用,我需要先理清开发步骤。首先,确定需求是关键。用户可能想要记录文字、图片、视频,还要有搜索和分类功能。然后选择技术栈,前端可以用React Native或Flutter实现跨平台,后端的话Node.js或Django都不错。数据库方面,关系型如PostgreSQL适合结构化数据,NoSQL如MongoDB更适合灵活存储。数据安全很重要,必须加密存储和传输,比如用AES加密日记内容,SSL/TLS保护传输。身份验证可以用OAuth 2.0或JWT。功能实现上,前端需要富文本编辑器,可能需要用draft-js或Quill。后端API设计RESTful或GraphQL,文件存储用云服务如AWS S3。测试阶段要单元测试、集成测试,还要考虑性能优化,比如数据库索引和缓存。部署可以用Docker和Kubernetes,监控用Prometheus。维护方面持续收集反馈,定期更新。另外,用户可能想要Markdown支持、心情追踪或者导出功能,这些可以作为扩展功能。还要注意隐私保护,确保数据安全,符合GDPR等法规。推荐资源的话,官方文档、开源项目参考,比如Joplin的加密日记实现。最后,生成相关问题帮助用户深入思考,比如数据加密方法或身份验证方案选择。</think>### 开发日记管理应用程序指南 #### 1. 需求分析与功能设计 - **核心功能**: - 文字/多媒体日记:支持文本、图片、音频、视频录入$^{[1]}$ - 智能搜索:基于时间戳、标签、关键词的检索功能$^{[2]}$ - 数据加密:采用AES-256加密算法保护日记内容$^{[3]}$ - 多设备同步:通过WebDAV协议实现跨平台同步$^{[4]}$ #### 2. 技术选型建议 ```mermaid graph TD A[前端] --> B[React Native/iOS Swift] A --> C[Flutter] D[后端] --> E[Node.js+Express] D --> F[Python+Django] G[数据库] --> H[PostgreSQL] G --> I[MongoDB] ``` #### 3. 安全架构实现 $$ \begin{aligned} &\text{加密流程}: \\ &C = E(K, P) \quad \text{其中} \\ &P \in \{0,1\}^n \ (\text{明文}), \\ &K \in \{0,1\}^{256} \ (\text{密钥}), \\ &C \in \{0,1\}^n \ (\text{密文}) \end{aligned} $$ #### 4. 开发步骤 1. **环境搭建**: ```bash # Node.js环境示例 npm install express mongoose bcrypt jsonwebtoken ``` 2. **数据库设计**: ```javascript // MongoDB Schema示例 const diarySchema = new Schema({ title: { type: String, required: true }, content: { type: String, encrypted: true }, created_at: { type: Date, default: Date.now } }); ``` 3. **功能开发**: - 富文本编辑器集成(推荐Quill.js) - 文件分块上传实现(使用Multer中间件) - 生物特征认证(iOS FaceID/Android指纹) #### 5. 测试与部署 - **测试策略**: ```python # 单元测试示例 def test_encryption(): plaintext = "秘密日记" cipher = AES.new(key, AES.MODE_GCM) assert decrypt(ciphertext) == plaintext ``` - **部署方案**: ```dockerfile # Docker部署配置 FROM node:16 WORKDIR /app COPY package*.json ./ RUN npm ci CMD ["node", "server.js"] ``` #### 6. 推荐开发资源 1. [Diary.js开源项目](https://github.com/diaryjs/diary-core)(MIT协议) 2. 《应用程序加密实践》(O'Reilly, 2022)[^5] 3. [Firebase实时数据库文档](https://firebase.google.com/docs/database)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值