跳至正文

搭建开源、轻量级笔记服务 Memos

引言

博客之前曾经写一个一篇关于 Memos 的搭建教程,如今半年过去了,回顾之前的那篇博客,多少感觉内容有些空洞,此次部署将包含更多的详细信息,以及如何解决项目备份的问题。

Memos简介

Memos 开源、轻量级笔记服务。轻松捕捉并分享您的精彩想法。

github 地址:https://github.com/usememos/memos

准备条件

  • VPS
  • 域名

VPS 系统最好为 Ubuntu 或 debian 系统。此教程以不限流量、年付 10 欧的 netcup vps 为例。域名也是来自 netcup 复活节活动是购买的 de 域名,年付 1.32 欧,性价比很高。

环境搭建

这里用最简单的 docker 方式一键部署,登录VPS后,使用 docker 官方脚本先来安装一下 docker 环境。

curl -fsSL https://get.docker.com | sudo sh

安装完成后,通过输入 docker –verison 来确认是否安装成功,弹出版本信息即为成功。

docker --version

部署 memos

1.新建项目目录,在这里以 /var/docker 为 docker 项目的目录,具体的项目会在此目录下创建对应名称的目录。比如 memos ,会新建 /var/docker/memos 项目路径。

mkdir -p /var/docker/memos && cd /var/docker/memos

2.配置 docker-compose 文件,首先通过 nano docker-compose.yml 新建 docker-compose.yml 文件,然后填入以下代码:

services:
  memos:
    image: neosmemo/memos:stable
    container_name: memos
    ports:
      - "5230:5230"
    volumes:
      - /var/docker/memos:/var/opt/memos

键盘点击 ctrl + x,点击 y 保存

3.项目上线,使用下面的命令,部署项目

docker compose up -d

4.输入 docker ps 检测项目是否运行,看到 status 状态为 up,即意味着部署成功。

docker ps

5.浏览器输入 vps ip地址+端口 检测是否可以在浏览器中打开,出现如图所示即为成功。

升级 memos

发布新版本后,如果想要升级,可以按照以下步骤,依次执行如下命令:

  1. 停止并移除容器:docker-compose down
  2. 拉取最新的镜像(如果有更新的话):docker-compose pull
  3. 重新启动容器:docker-compose up -d

这样,你的应用程序就会被更新到最新版本,并且重新部署在 Docker 容器中。

选择存储:数据库、S3还是本地存储?

数据库存储

数据库存储旨在利用SQLite的单文件数据库,使其易于管理并与其他数据集成。事务确保数据一致性,并且对小型二进制文件有好处。然而,它对大型二进制文件的性能很差,增加了数据库大小,并减慢了备份速度,这可能会增加数据库文件中的碎片。

S3云存储

S3是亚马逊提供的云存储服务,可以存储各种类型的文件,并提供高可用性和可扩展性。存储大文件也具有成本效益,使其成为需要存储大量文件的应用程序的好选择。然而,检索文件可能比数据库或本地存储慢,可能需要额外的配置和维护,以及数据传输和请求的额外费用。

本地存储

本地存储是一个简单的数据存储解决方案,可以存储各种类型的文件,并提供高效的数据访问和查询。它适用于中小型文件,不需要额外费用或设置。然而,它的可用空间有限,这取决于设备和文件系统,它不适合大文件或大量文件。它也没有数据库或S3存储那么耐用或可靠。

结论

  • 如果主要使用文本且文件很少,请使用默认的数据库存储。
  • 如果已经拥有S3对象云存储,请将S3配置为备忘录。
  • 如果没有S3并使用大量图像,请使用本地存储。

选择最适合您需求的存储选项。请记住,正确的存储选项可以对应用程序的性能和效率产生很大影响。

备份 memos 数据

其实有很多中备份数据的方法,如果存储的数据不是重要的个人私密文档,可以通过电报进行备份,下面是备份到电报的脚本。(前提需要在电报中配置相对应的电报机器人 token 和获取频道 id)

1.首先在项目路径下输入命令新建 nano backup.sh 文件,然后在文件中输入如下代码,请将 TELEGRAM_CHAT_ID 和 TELEGRAM_BOT_TOKEN 切换为自己电报机器人的 token 和频道 id

该脚本实现的功能为:将备份文件保存在 /var/docker/backup 文件夹中,该文件夹仅保存最近的 4 个备份文件。以防止备份文件占据大量磁盘空间。

#!/bin/bash

# 定义备份文件名和目录
BACKUP_DIR="/var/docker/memos"
BACKUP_FOLDER="/var/docker/backup"
BACKUP_FILE="$BACKUP_FOLDER/memos_backup_$(date +%Y%m%d_%H%M%S).tar.gz"

# 创建备份文件所在目录
mkdir -p "$BACKUP_FOLDER"

# 删除备份文件夹中旧的备份文件,只保留最近的三个备份文件
cd "$BACKUP_FOLDER" && ls -t | tail -n +4 | xargs rm -f

# 创建备份文件
tar -czvf "$BACKUP_FILE" -C "$BACKUP_DIR" .

# 替换以下内容为你的电报群组的 Chat ID 和 BOT Token
TELEGRAM_CHAT_ID=""
TELEGRAM_BOT_TOKEN=""

# 使用 curl 发送文件到电报群组
curl -F document=@"$BACKUP_FILE" "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendDocument?chat_id=$TELEGRAM_CHAT_ID"

2.赋予该 backup.sh 为可执行权限

chmod +x backup.sh

3.命令行输入 bash backup.sh 测试电报能否收到备份文件,成功会在电报中收到类似如下的文件。

4.为了实现自动化备份,我们可以在系统中加入计划任务,命令行输入 crontab -e,首次运行会提示选择编辑器,选择自己习惯的编辑器即可,这里我选择 1 ,用 nano 作为编辑器。

在新弹出的文本框中输入:0 20 * * * /bin/bash /var/docker/memos/backup.sh,这个意思是每天晚上八点执行该脚本。测试的时候,我们先将时间设置为测试的下一分钟,这样就知道脚本能否正常自动执行,待测试没问题,再改为自己设定的时间。

这里需要注意的是,计划时间是以 vps 系统时间为标准,所以如果想要在中国标准时间执行,则需要修改 vps 上的时间。可以通过以下命令进行修改:

sudo timedatectl set-timezone Asia/Shanghai

之后就会按照设定的时间发送备份文件到电报群组中。

如果觉得电报不是很合适,可以用 aws s3 进行备份,这个备份需要提前在 vps 上安装 aws cli 工具,然后在 aws 中配置密钥,在这里我给出大家思路,如果有必要,会专门写一篇博客,来介绍如何将 docker 的数据备份到 aws s3 存储桶中。

好了,今天的分享就到这里,感谢大家的观看。我们下篇博文见,see you 👋

你可能感兴趣的播客文章:

如果你想及时收到关于兔哥博客更多内容,欢迎大家订阅电报频道:兔哥播报  和公共社区:兔哥论坛 。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

标签: