跳转至

开源永久免费的 Memos 服务搭建

预览

安装

已安装docker compose

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

docker-compose.yml
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,修改为自己的数据库密码

.db.env
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=memos_prod
MYSQL_USER=yourusername
MYSQL_PASSWORD=yourpassword

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

Caddyfile
memos.com {
    reverse_proxy memos:5230
}

执行docker-compose up -d启动

配置

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

自定义css

修改发文字体为其他

CSS
@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导出

Bash
#!/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 容器的名称。

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

docker exec -it mysql容器名称 bash

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

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

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

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

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

exit

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

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

FAQ

  1. 由于众所周知的网络问题,国内拉取镜像可能会失败,可以执行
Bash
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