装一下 Memos

今天突发奇想心血来潮,想体验一下 Memos Memos:A lightweight, self-hosted memo hub for effortlessly capturing and sharing your ideas. Open source, no tracking, free forever. ,于是翻出来吃灰的那台轻量云服务器,跑跑看看。

按照 Docker Compose - Memos 这个页面的指示,只需要创建一个 docker-compose.yml 文件:

services:
  memos:
    image: neosmemo/memos:stable
    container_name: memos
    volumes:
      - ~/.memos/:/var/opt/memos
    ports:
      - 5230:5230

然后:

docker compose up -d

然后不出所料地爆爆了,原来是 docker.io 没法访问导致的。不过我之前似乎配置了 Docker 镜像啊,很奇怪。

ubuntu@VM-0-6-ubuntu:~/memos$ docker compose up -d [+] Running 1/1 ✘ memos Error Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout e... 15.1s Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

按照腾讯云官方的指导教程,用 nano 编辑 /etc/docker/daemon.json 文件,哎,结果打开一看,怎么已经有了 "https://mirror.ccs.tencentyun.com" 啊。于是sudo docker info 一下看看,结果发现怎么镜像地址是之前错配的中科大的 docker 镜像页面,哎,坏。好像地址爆爆了

于是重启了一下 Docker,然后 Memos 镜像能拉取了,安装还是挺顺利的,用 VS Code 转发一下端口就能访问http://localhost:5230 看到 Memos 的管理页面了。

哎不过发现 瞌睡猫子 NapCat怎么没了,去腾讯云面板一看发现 Docker 容器被暂停了,打开重新登录一下就好了。

然后准备把 https://memos.gengyue.site 用 Nginx 反代一下,这样就能从公网访问 Memos 服务了。

sudo nano /etc/nginx/sites-available/memos

memos

server {
    listen 2095; 
    server_name memos.gengyue.site;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name memos.gengyue.site;

    ssl_certificate /etc/nginx/ssl/cloudflare/gengyue.site.crt;
    ssl_certificate_key /etc/nginx/ssl/cloudflare/gengyue.site.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://127.0.0.1:5230; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

哎,这样一番配置就行了,最起码是跑起来了。然后:

sudo ln -s /etc/nginx/sites-available/memos /etc/nginx/sites-enabled/memos
sudo nginx -t
sudo systemctl reload nginx

好耶😋

哎,然后实践了一下用 #memos 提供的 API 实现了 QQ 机器人自动推送到 Memos 服务,LLM 在这个过程中为#文本自动打上 3 - 5 个标签,虽然有的时候生成的挺离谱的,不过又不是不能用...

不过神秘 #memos 似乎上传图片是先转成 base64 之后上传的,哎,神奇:

async function uploadImage(url) {
  const img = await fetch(url);
  const buffer = Buffer.from(await img.arrayBuffer());

  const res = await fetch(`${MEMOS_URL}/api/v1/attachments`, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      filename: `image_${Date.now()}.jpg`,
      type: img.headers.get("content-type"),
      content: buffer.toString("base64"),
    }),
  });

  return res.json();
}