搭建Memos作为私人笔记


类似我之前实现的时间轴, 也是一个私人的说说或者是私人的微博,可以用来记录一些临时的想法或者分享某一时刻的精彩瞬间,毕竟数据在自己手上相当酷不是

如何搭建

根据memos文档, 搭建也非常简单, 直接使用 docker 即可

1docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:latest

docker-compose

因为我需要和我之前的搭建好一些服务(Blog, DNS等)统一管理, 所以转成了 docker-compose 配置

 1version: "3"
 2
 3services:
 4  blog:
 5    ...
 6  memos:
 7    image: neosmemo/memos:latest
 8    container_name: "memos"
 9    ports:
10      - 127.0.0.1:8005:5230
11    volumes:
12      - ./memos:/var/opt/memos
13    network_mode: bridge

需要注意的是 ./memos 目录用来作为数据持久化

nginx和https配置

这也是和我之前的服务保持一致, 我的 nginx 配置目录格式如下

 1/etc/nginx/
 2├── nginx.conf
 3├── conf.d
 4│   ├── default.conf
 5│   ├── upsteam.conf
 6│   ├── blog.conf
 7│   ├── cloud.conf
 8│   ├── ...
 9│   ├── memos.conf
10│   └── ssl
11│       ├── xxx.com.conf
  • 使用 HTTPS 连接

     1server {
     2    listen       80;
     3    listen  [::]:80;
     4    server_name  xxx.com *.xxx.com;
     5
     6    location / {
     7        return 301 https://$host$request_uri;
     8    }
     9    location ^~ /.well-known/acme-challenge {
    10        alias /home/xxx/app/acme.sh/xxx.com/.well-known/acme-challenge;
    11    }
    12}
  • 添加 upstream

    1upstream memos.xxx.com {
    2    server 127.0.0.1:8005 max_fails=3 fail_timeout=30s;
    3}
  • 添加 memos.conf

     1server {
     2    listen       443 ssl;
     3    listen       [::]:443 ssl;
     4    server_name  memos.xxx.com;
     5    include      /etc/nginx/conf.d/ssl/xxx.com.conf;
     6
     7    access_log  /home/xxx/app/logs/memos_nginx_access.log;
     8    error_log   /home/xxx/app/logs/memos_nginx_error.log;
     9
    10    location / {
    11        proxy_pass       http://memos.xxx.com;
    12        proxy_redirect   off;
    13        proxy_set_header Host $host;
    14        proxy_set_header X-Real-IP $remote_addr;
    15        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    16    }
    17}
  • 添加DNS记录: 到 CloudFlare 添加一个 memosCNAME 记录到 cname.xxx.com, 等待一分钟即可

  • 添加SSL证书: 如果使用了 CloudFlare, 这一步可以忽略。 因为我很早就建好了一个 acme.sh 服务,现在可以使用它来增加一个证书,首先需要重启 nginx, 生成证书前也可以使用 dig memos.xxx.com 验证 DNS 是否生效, 我这里使用的是 webroot 方式

    1docker exec acme.sh --issue -d xxx.com -d www.xxx.com,memos.xxx.com -w /acme.sh/xxx.com --preferred-chain "ISRG" --server  letsencrypt

    然后重启nginx

移动端支持

既然要记录一些临时的想法,肯定不能只有web平台,否则有了新想法,等打开浏览器,登录,然后输入,这时候想法早没了,虽然 Memos 本身自带的web界面在手机浏览器上也能渲染得很好,但是有一个手机APP还是会更方便一些,目前有一个 memos.moe 可供使用,我也安装使用过,确实流畅,但还有一些基础功能比如资源管理和系统管理没有实现,为此,我自己写了一个 专属APP, 添加了这一部分的实现

memos-app-01.jpg memos-app-02.jpg memos-app-03.jpg memos-app-04.jpg

FAQ

重置密码

升级到 0.12.0 后无法登录,总是提示 Incorrect login credentials, 因为使用的 Docker 部署,找到挂载目录下的 memos_prod.db 文件(请先备份好), 我的机器上没有安装 sqlite, 所以需要

  • 拷贝到本地

    1└──╼ scp xxx:~/app/memos/memos_prod.db ./
  • 然后使用 sqlite 打开文件并手动更新

    1└──╼ sqlite3 memos_prod.db
    2SQLite version 3.32.2 2021-07-12 15:00:17
    3Enter ".help" for usage hints.
    4sqlite> select * from user;
    5...
    6sqlite> update user set password_hash="$2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK" where id=1;
    7sqlite> .quit

    这时候密码会被设置成 secret

  • 覆盖原文件(需要先暂停服务)

    1└──╼ scp ./memos_prod.db xxx:~/app/memos/memos_prod.db

    重启服务,重新登录后修改新密码即可

作者: honmaple
链接: https://honmaple.me/articles/2023/03/搭建Memos作为私人笔记.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论