使用docker搭建memos

使用docker搭建memos

本文将介绍使用docker搭建memos

本文所依赖的memos版本为:Version: v0.24.0

本文所依赖的mysql版本为:8.0.41 MySQL Community Server - GPL

什么是memos

memos是一个开源自托管 轻量级笔记解决方案github地址和官网地址如下:

github地址:github.com/usememos/me...

官网:www.usememos.com

优点:

  • memos是一个开源产品。
  • 可以自托管完全控制自己的数据和隐私。
  • 支持markdown 语法。

使用mysql作为后端存储

memos默认使用sqlite作为存储,虽然sqlite非常轻量,但是性能容易遇到瓶颈,特别是高频写入下会导致性能下降,不适合高并发写操作。所以推荐使用mysql作为后端存储。

使用docker安装mysql 8.0

使用docker启动mysql 8.0容器即可,命令如下:

bash 复制代码
docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

上述命令创建了一个名为mysql8mysql:8.0容器,且映射端口为宿主机3306端口映射进容器的3306端口,-e表示环境变量,MYSQL_ROOT_PASSWORD表示设置mysql root密码,需要将其设置为自己想要的密码即可,--character-set-server--collation-server 表示设置字符编码。

创建完毕后,使用docker inspect mysql8可以查看其容器的ip 地址,配合jq也可以进行查询,例如:

bash 复制代码
docker inspect mysql8 | jq .[0].NetworkSettings.IPAddress

也可以通过宿主机的3306端口进行访问mysql服务器。

在启动memos之前,需要创建相应的数据库,例如:

sql 复制代码
mysql> create database memos_prod;
Query OK, 1 row affected (0.02 sec)

mysql> show create database memos_prod;
+------------+--------------------------------------------------------------------------------------------------------------------------------------+
| Database   | Create Database                                                                                                                      |
+------------+--------------------------------------------------------------------------------------------------------------------------------------+
| memos_prod | CREATE DATABASE `memos_prod` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+------------+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> exit

启动以mysql为后端存储的memos

上述搭建了mysql且创建了相应库之后,便可以进行启动memos容器了,命令如下:

bash 复制代码
docker run -d --name memos-mysql -p 5230:5230 neosmemo/memos:latest --driver mysql --dsn 'root:密码@tcp(主机名)/memos_prod'

其中需要指定--drivermysql,并且指定--dsn为刚刚创建的memos_prod数据库地址,这样启动容器后,便可以访问5230端口进行访问memos了。

不过需要注意的是,默认memos存放附件,因为数据库字段类型为MEDIUMBLOB,导致最多只能存储16M的数据,可以将其修改为LONGBLOB,理论上可以存放4G数据。修改方法如下:

sql 复制代码
mysql> use memos_prod
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> ALTER TABLE resource MODIFY `blob` LONGBLOB;

不仅如此,还需要修改mysql系统变量max_allowed_packet的值,它将用于控制客户端和服务器之间通信允许最大数据包大小,比如将其修改为512M

sql 复制代码
mysql> SET GLOBAL max_allowed_packet = 536870912;
Query OK, 0 rows affected (0.00 sec)

mysql>

数据库备份

若使用数据库作为memos对象存储的话,那么所有的数据都会存放在数据库中,包括图片、视频等,所以对mysql的备份显得非常重要,可以使用mysqldump进行备份,比如,我编写的脚本如下:

bash 复制代码
#!/bin/bash

# 备份memos

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

# 当前时间
readonly nowDate=$(date +"%F_%H_%M_%S")

# 备份目录
readonly backupDirs=$(date +"%Y/%m/%d/")

# 如果目录不存在,则创建目录
if [ ! -d $(date +"%Y-%m") ];then
        mkdir -p ${backupDirs}
fi

# 使用mysqldump进行dump数据
mysqldump memos_prod > ${backupDirs}/memos_prod_${nowDate}.sql

if [ 0 -eq $? ];then
        echo "dump ok"
fi

这样的话,只需要将该脚本放入cron中且定时执行,就可以实现按时备份数据了。

bash 复制代码
00 03 * * * cd /data/memos && bash dump.sh 2>> /dev/null >> /dev/null

总结

总的而言,使用docker安装memos非常简单,只不过需要注意的是mysql需要修改一下resource表的blob类型和max_allowed_packet的环境变量。

定期异地备份是一个非常好的习惯,在备份的时候进行加密数据更好,推荐使用gpg对文件进行加密。

转载:wangli2025.github.io/2025/04/11/...

相关推荐
❀͜͡傀儡师21 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器
老姚---老姚21 小时前
docker常用命令
运维·docker·容器
❀͜͡傀儡师1 天前
docker一键部署HFish蜜罐
运维·docker·容器
DO_Community1 天前
DigitalOcean容器注册表推出多注册表支持功能
服务器·数据库·docker·kubernetes
dnpao1 天前
linux onlyoffice服务向docker容器中添加中文字体
linux·运维·docker
java_logo1 天前
Dify 开源 LLM 应用开发平台企业级 Docker Compose 部署手册
docker·容器·开源·dify部署·dify部署文档·dify部署方案·dify部署教程
jarreyer1 天前
【docker的gpu加速相关问题解决记录】
运维·docker·容器
韭菜钟1 天前
制作自定义Docker镜像并部署使用
运维·docker·容器
椰汁菠萝1 天前
docker部署gitlab
docker·容器·gitlab
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker