Vandee's Blog

28 Oct 2024

还是入坑了 Memos

记录一下 VPS 配置 Memos 和 SSL 证书的配置。当作朋友圈和备忘录,Memos 还是值得玩玩的。

起因

前几天,用 ccbikai/BroadcastChannel 在 Vercel 上部署着玩了一下,用来做极简朋友圈其实效果真的很不错了,但有个问题就是备份和导出。由于这个项目是利用 Telegram Channel 的发布来同步到页面,Telegram 的数据管理就有点麻烦了。

之前在 Memos 大火的时候就一直想玩玩,但是没有服务器。前段时间不想再尝试 Memos 的原因是看到了这两篇文章:Memos完美降级到Memos0.18.2版 | 老张博客从弃用Memos说说开源项目 - 拾月

但是这个项目确实很优秀,而其是开源的,以后有闲工夫了,还可以自己改。作为 flomo 的开源镜像,Memos 的功能性是毋庸置疑的,简洁舒适的界面,可备份的数据库,支持 MD 语法、标签、搜索等等, 通过 API 可以集成到其他项目。

再一个,VPS 每个月 4T 的流量还是要用一用。顺便再熟悉熟悉 Linux 和 SSH,还有 GO。

Memos

几个版本的主要特色:

  • 0.18.2: 最简洁最稳定的版本,首次加入了 timeline 。
  • 0.19.1 增加一键导出所有 memos 到 markdown,侧边栏可折叠,但 bug 比较多。
  • 0.20.1 修复一系列 bugs,在 explore 页面内容太长的会折叠,点击 show more 会跳转到这个单独的 memo 页面。
  • 0.22.X 开始,可以同时过滤多个标签,并显示每个标签下具体的 memo 数量,又移除了折叠。0.22.4 移除了 timeline,替换成了日历。最新的0.22.5 版本取消了一键导出。

对于我这个新用户,没有之前看到的数据迁移和 API 变更带来的困扰,感觉 Memos 还是挺好用的。版本便更之前一定要做好数据库备份。

docker-compose.yml:

version: "3.0"
services:
  memos:
    image: neosmemo/memos:0.18.0 #版本 tag
    restart: always
    depends_on:
      - db
    ports:
      - 5230:5230
    environment:
      - MEMOS_DRIVER=postgres
      - MEMOS_DSN=user=memos password=secret dbname=memosdb host=db sslmode=disable
  db:
    image: postgres:16.1
    restart: unless-stopped
    volumes:
      - "./database:/var/lib/postgresql/data/"
    environment:
      POSTGRES_USER: memos
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: memosdb

ip + 5230 就可以访问了,到这里都很惬意,Nginx 的配置才是让我头痛的开始。由于我还部署了 WeWeRSS,按照官方文档的 Nginx 配置了之后,占用了我的 80 端口,在配置 Memos 的时候一度不知道为什么域名不能直接访问。兜了一大圈,终于发现问题出现端口在这里,把 WeWeRSS 的端口还有 Nginx 的默认欢迎页面端口释放之后,就可以直接利用 Nginx 的反代用域名访问 docker 部署在端口上的项目了。

Nginx 命令:

sudo systemctl restart nginx # 修改了配置文件之后重启服务
sudo vim /etc/nginx/sites-available/conf_name  # 设置配置文件
sudo ln -s /etc/nginx/sites-available/conf_name /etc/nginx/sites-enabled/ # 设置配置文件可用
sudo rm /etc/nginx/sites-enabled/conf_name # 移除配置
sudo nginx -t # 检查配置是否有问题

SSL

在网上找了一大圈,发现一个最简单也最符合现在需求的:Certd,可以在 VPS 上用 docker 部署,一键生成 SSL 证书,还可以定时自动化续签。

# 随便创建一个目录
mkdir certd
# 进入目录
cd certd
# 下载docker-compose.yaml文件,或者手动下载放到certd目录下
wget https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
# 可以根据需要修改里面的配置
# 1.修改镜像版本号【可选】
# 2.配置数据保存路径【可选】
# 3.修改端口号【可选】
vi docker-compose.yaml # 【可选】
# 启动certd
docker compose up -d
# 访问
http://your_server_ip:7001
https://your_server_ip:7002
默认账号密码:admin/123456

按照官方文档,五分钟就生成了 SSL 证书,然后 copy 到 VPS 里,在 Nginx 设置 ssl_certificate 的文件路径。

Nginx 的配置:

server {
  listen 80;
  server_name your_domain_or_server;
  # 在这里重定向HTTP到HTTPS
  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl;
  server_name your_domain_or_server;
  ssl_certificate /your/path/to/fullchain.pem;  # 替换为你的证书路径
  ssl_certificate_key /your/path/to/privkey.pem;  # 替换为你的私钥路径
  location / {
    proxy_pass http://127.0.0.1:5230;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header Host $http_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 Accept-Encoding gzip;
    proxy_buffering off;
    proxy_cache off;
    send_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    proxy_read_timeout 300;
  }
}

后来发现更直接的是直接在 VPS 里使用 certbot。

# 安装
sudo apt update
sudo apt install certbot python3-certbot-nginx
# 申请证书
sudo certbot --nginx -d app1.example.com -d app2.example.com
# --nginx:使用 Nginx 插件,Certbot 会自动修改 Nginx 配置。
# -d:指定你要申请证书的域名,可以一次性为多个域名申请。
# Certbot 会询问一些基本问题:输入电子邮件地址(用于接收证书到期提醒)。同意服务条款(输入 A 同意)。是否愿意 共享你的邮箱 给 EFF(自愿)。询问你是否要 将 HTTP 重定向为 HTTPS:选择 2 将所有 HTTP 请求重定向为 HTTPS(推荐)。
# 自动续签
sudo certbot renew --dry-run

到这里,我终于可以用 https + 域名来访问 Memos 了,但这还不够好玩,不够自定义。

Memos 自定义

自定义 css 和 JavaScript

适用 0.20.X 以上版本

# CSS 部分
/* 隐藏 通知 选项卡 */
#header-inbox {
  display: none;
}
/* 隐藏统计计数器容器 */
.w-auto.border.dark\:border-zinc-800.pl-1.pr-1\.5.rounded-md.flex.justify-between.items-center {
  display: none;
}

Memos.top

eallion/memos.top 这个项目利用 Memos 的 API 获取数据,生成静态页面。设置很简单,作者默认的设计也挺简洁的,CSS 可以自己修改。

分类 Memos 下的文章 - Memos | 一个开源的碎片化笔记工具的不完全指南 顺便找到了作者的一个网站。

到这里,饶了一大圈又回到了用 ccbikai/BroadcastChannel 5 分钟部署的样子🤣。

最后放图:

Memos 的 0.22.4 版本在 explore 页面支持搜索和标签统计,Memos.top 适合从 API 从头设计自己的页面。不想花那么多功夫,把 Memos 的页面保存到 HTML 文件,让 Cursor 随便改了改 CSS。

小结

记录是存在的一种最简单的证明,某种意义上,如果在一个体系或者规则里没有留下痕迹,那么就是不存在的。历史是过往,更是现时的延展,所有的过往,都构成了自己此刻的一部分。一个没有历史的国家也很难有未来。

除去用于维生所需,人每天还有大量能量剩余,有些人多到会溢出,必须加以消磨。有人因此思考自身处境,就有了宗教和艺术。有人因此考虑世界和存在,就有了哲学和科学。有人因此觉察到匆匆的时间之流,意识到自己只是一个个连续的此时此刻在不断流逝,因而想要抓住永恒,于是有了形形色色的创造物。一切都是易逝的,唯有回忆留存,创造物可以记录瞬间,可以唤起回忆,因此它是永恒的表征。溢出的能量让人去创造。而创造就是模仿。

通过模仿实际存在,模仿现实世界,一张画,一座雕塑,都可以对抗这种无尽的消逝。很多年前的某个下午早已过去,早已消逝,早已遗忘,但是通过人为创造物,人们又可以回到那个下午,一切如昨。这件事情很重要,人需要不断确定自己处于连续不断的生命之流里,需要确认自己是一种连续的存在,方法就是在回忆中流畅地沿着时间线回溯到任意一点。而每一点都是曾经的此时此刻,所有的此时此刻加在一起,就是自己存在的证据。

Source: 模仿、游戏和亵渎

我现在的 PKM 体系大头还是在 Wiki,是迭代的原子笔记。Memos 记录闪念,Clip 备份有记录价值的文章。一直考虑过把他们都合在一起,但是 iPhone is iPhone,iPad is iPad,什么都有就等于什么都没有了。

没有记录就没有发生,而记录本身已经是一种反抗 。Internet Archive 好像还在被围攻🤣,Z-library 也是劫后余生。

Tags: VPS Ramble