搭建Memos作为私人笔记


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

如何搭建

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

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

docker-compose

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

version: "3"

services:
  blog:
    ...
  memos:
    image: neosmemo/memos:latest
    container_name: "memos"
    ports:
      - 127.0.0.1:8005:5230
    volumes:
      - ./memos:/var/opt/memos
    network_mode: bridge

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

nginx和https配置

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

/etc/nginx/
├── nginx.conf
├── conf.d
│   ├── default.conf
│   ├── upsteam.conf
│   ├── blog.conf
│   ├── cloud.conf
│   ├── ...
│   ├── memos.conf
│   └── ssl
│       ├── xxx.com.conf
  • 使用 HTTPS 连接

    server {
        listen       80;
        listen  [::]:80;
        server_name  xxx.com *.xxx.com;
    
        location / {
            return 301 https://$host$request_uri;
        }
        location ^~ /.well-known/acme-challenge {
            alias /home/xxx/app/acme.sh/xxx.com/.well-known/acme-challenge;
        }
    }
  • 添加 upstream

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

    server {
        listen       443 ssl;
        listen       [::]:443 ssl;
        server_name  memos.xxx.com;
        include      /etc/nginx/conf.d/ssl/xxx.com.conf;
    
        access_log  /home/xxx/app/logs/memos_nginx_access.log;
        error_log   /home/xxx/app/logs/memos_nginx_error.log;
    
        location / {
            proxy_pass       http://memos.xxx.com;
            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;
        }
    }
  • 添加DNS记录: 到 CloudFlare 添加一个 memosCNAME 记录到 cname.xxx.com, 等待一分钟即可

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

    docker 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, 添加了这一部分的实现

FAQ

重置密码

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

  • 拷贝到本地

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

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

    这时候密码会被设置成 secret

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

    └──╼ 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

加载评论