# 使用 docker 部署 memos 服务

# memos 介绍

从时间线上来说,flomo 浮墨笔记 (opens new window) 出现的时间更早;memos (opens new window) 的 UI 设计、产品思路,和其有高度相似的地方;

flomo产品介绍

我个人倾向于 memos 是对 flomo 的“翻版”,flomo 本身是 SaaS,相关的软件没有没有开源,且本身足够简单,工具属性强烈,被模仿是非常正常的……这也是创业者,选择工具类软件进行创业,所不得不面对的一个问题……

# 使用 docker-compose 部署

memos 的版本可以在 memos on dockerhub (opens new window) 查看;

新建 docker-compose.yml 文件;

输入以下内容:

version: "3.6"

services:
  memos:
    image: neosmemo/memos:0.12.2 # 指定版本,根据需要自行修改
    container_name: memos # container 名称
    volumes:
      - /home/ubuntu/memos_data/:/var/opt/memos # 挂载目录,避免 container 重启后数据丢失
    ports:
      - 5230:5230 # 开放端口

1
2
3
4
5
6
7
8
9
10
11

# 设置 nginx 反向代理

配置文件样例

server {
    listen 443 ssl http2; # 开启 http2
    server_name memos.ryantech.ltd; # 配置为您需要的域名

    ssl_certificate cert/memos.ryantech.ltd.pem;
    ssl_certificate_key cert/memos.ryantech.ltd.key;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_stapling on; # 开启 ssl stapling
    ssl_stapling_verify on;
    ssl_trusted_certificate cert/memos.ryantech.ltd.pem; # 和 ssl_certificate 保持一致

    add_header Strict-Transport-Security "max-age=31536000"; # HSTS 设置

    # 开启 gzip 压缩,降低对带宽的占用
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 配置反向代理
    location / {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:5230; # 端口设置为 memos container 对外开放的端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 4096M; # 允许上传的文件的最大大小,这里设置为 4GB
    }
}

# 配置 https 跳转
server {
    listen 80;
    server_name memos.ryantech.ltd;
    rewrite ^(.*)$ https://$host$1; # 将所有 HTTP 请求通过 rewrite 指令重定向到 HTTPS
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# 备份和恢复

备份的方法有 2 种:

  1. 使用 memos 提供的备份功能进行配置
  2. 备份前面挂载的宿主机的文件目录即可

这里推荐使用第二种,memos 运行产生的数据全部存放在前面映射的文件夹下;以前面的 docker-compose.yml 为例,只需要压缩 /home/ubuntu/memos_data/ 这个文件夹即可;

恢复的方法,即传输备份的文件夹到新主机上,再让 docker-compose.yml 中的文件映射到新的文件夹下,启动新的 container 即完成恢复;