开源永久免费的 Memos 服务搭建
预览
安装
已安装
docker
compose
新建目录memos
,新建文件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
,修改为自己的数据库密码
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=memos_prod
MYSQL_USER=yourusername
MYSQL_PASSWORD=yourpassword
创建Caddyfile
,memos
修改为你的域名
执行docker-compose up -d
启动
配置
访问域名打开网站,设置一个管理员账户
自定义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
导出
#!/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 容器。
- 将 SQL 文件复制到容器内部: 在执行导入之前,需要将备份的 SQL 文件复制到 MySQL 容器内。使用以下命令将文件复制到容器:
docker cp $BACKUPDIR/memos-db-日期.sql mysql容器名称:/tmp/memos-db-日期.sql
请将 mysql容器名称
替换为你实际运行的 MySQL 容器的名称。
- 进入容器: 使用以下命令进入 MySQL 容器的命令行界面:
docker exec -it mysql容器名称 bash
- 使用 MySQL 命令行工具导入数据: 进入容器后,在容器的命令行中使用以下命令导入数据:
mysql -u root -p 目标数据库名称 < /tmp/memos-db-日期.sql
请将 目标数据库名称
替换为你要导入数据的实际数据库名称。
系统会提示你输入 MySQL 用户的密码,输入后即可执行导入。
- 退出容器: 导入完成后,使用以下命令退出容器的命令行界面:
exit
这样,你的备份数据应该已成功导入到 MySQL 容器中的指定数据库中。确保路径和文件名与实际情况相匹配,并替换相关的容器名称和数据库名称。
来自ChatGPT,太强大了,blog很多没有必要写了🫡
FAQ
- 由于众所周知的网络问题,国内拉取镜像可能会失败,可以执行
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