预览

安装

已安装docker compose

新建目录memos,新建文件docker-compose.yml

 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
version: "3.0"
services:
  memos:
    image: ghcr.io/usememos/memos:0.18.0
    container_name: memos
    restart: always
    volumes:
      - ./memos/:/var/opt/memos
    environment:
      - MEMOS_DRIVER=mysql
      - MEMOS_DSN=root:password@tcp(db:3306)/memos_prod
    command: ["--metric=false"]
    depends_on:
      - db

  db:
    image: mysql:8.2.0
    container_name: mysql
    restart: always
    env_file: .db.env
    volumes:
      - ./mysql_data:/var/lib/mysql

  caddy:
    image: caddy:2.7.5
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy/site:/srv
      - ./caddy/caddy_data:/data
      - ./caddy/caddy_config:/config
    depends_on:
      - memos

创建.db.env,修改为自己的数据库密码

1
2
3
4
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=memos_prod
MYSQL_USER=yourusername
MYSQL_PASSWORD=yourpassword

创建Caddyfile,memos修改为你的域名

1
2
3
memos.com {
    reverse_proxy memos:5230
}

执行docker-compose up -d启动

配置

访问域名打开网站,设置一个管理员账户

自定义css

修改发文字体为其他

1
2
3
4
5
6
7
8
@font-face {
  font-family: 'font';
  src: url('https://www.font.woff') format('woff');
}

.memo-content-text {
  font-family: 'font', sans-serif;
}

配置 Cloudflare R2 存储

详细教程Configuring Cloudflare R2 Storage - Memos

存储路径处可以设置{year}/{month}/{timestamp}_{filename}以文件夹方式存储保存在R2上的内容

使用

1.tag使用

支持#hello #hello/haha后面加一个空格即可

备份

自托管最重要的就是数据备份了,写了个简单的脚本,利用mysqldump导出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
BACKUPPASS="setBACKUPPASS"

BACKUPDIR="/path/to/backup"

# 使用 mysqldump 备份
echo "开始备份"
docker exec mysql bash -c 'mysqldump -u root --password="password" --no-tablespaces "memos_prod"' > $BACKUPDIR/memos-db-$(date '+%F').sql
echo "备份完成"

#加密文件
echo "开始加密"
7z a -p$BACKUPPASS -mhe=on $BACKUPDIR/memos-db-$(date '+%F').7z $BACKUPDIR/memos-db-$(date '+%F').sql
echo "加密完成"

导入

如果你使用 Docker 运行 MySQL 容器,你可以通过以下步骤导入数据。假设你已经使用 docker run 启动了一个 MySQL 容器。

  1. 将 SQL 文件复制到容器内部: 在执行导入之前,需要将备份的 SQL 文件复制到 MySQL 容器内。使用以下命令将文件复制到容器:

    docker cp $BACKUPDIR/memos-db-日期.sql mysql容器名称:/tmp/memos-db-日期.sql

    请将 mysql容器名称 替换为你实际运行的 MySQL 容器的名称。

  2. 进入容器: 使用以下命令进入 MySQL 容器的命令行界面:

    docker exec -it mysql容器名称 bash

  3. 使用 MySQL 命令行工具导入数据: 进入容器后,在容器的命令行中使用以下命令导入数据:

    mysql -u root -p 目标数据库名称 < /tmp/memos-db-日期.sql

    请将 目标数据库名称 替换为你要导入数据的实际数据库名称。

    系统会提示你输入 MySQL 用户的密码,输入后即可执行导入。

  4. 退出容器: 导入完成后,使用以下命令退出容器的命令行界面:

    exit

这样,你的备份数据应该已成功导入到 MySQL 容器中的指定数据库中。确保路径和文件名与实际情况相匹配,并替换相关的容器名称和数据库名称。

来自ChatGPT,太强大了,blog很多没有必要写了🫡

FAQ

  1. 由于众所周知的网络问题,国内拉取镜像可能会失败,可以执行
1
echo -e '\ndocker pull togettoyou/ghcr.io.usememos.memos:0.17.1\ndocker tag togettoyou/ghcr.io.usememos.memos:0.17.1 ghcr.io/usememos/memos:0.17.1' | bash

详见:[hub-mirror] 请求执行任务 · Issue #1515 · togettoyou/hub-mirror · GitHub


参考

Self-Hosting - Memos

搭建个人 Memos 服务

Moe Memos

快捷指令

Getting Started • Zettelkasten Method