如何使用 Docker Compose 安装 Memos 自托管笔记应用

news2025/1/17 6:02:16

简介

Memos是一个自托管的开源笔记应用程序,专为个人组织和信息管理而设计。它允许用户高效地创建、存储和管理笔记,提供如Markdown支持、用户友好的界面和注重隐私的设计等功能。Memos可以在各种平台上运行,但使用Docker Compose可以简化部署过程,使其易于设置和维护。

  • 隐私优先方法: Memos确保所有用户数据保持私密和安全,允许用户控制他们的信息。
  • Markdown支持: 用户可以使用广泛的Markdown语法以纯文本形式创建笔记,便于轻松格式化和组织。
  • 轻量级架构: 使用Go和React.js构建的Memos旨在轻量级,确保快速性能和最小资源使用。
  • 可定制功能: 用户可以通过定制服务器名称、图标、描述和系统样式来个性化他们的体验。
  • 开源: Memos完全开源,允许用户为其开发做出贡献,并根据需要定制应用程序。
  • 免费使用: Memos的所有功能均可免费使用,没有隐藏费用或订阅。
  • 数据持久性: 笔记保存在SQLite数据库文件中,确保即使在应用程序关闭后也能保留数据。
  • 用户友好界面: Memos提供了一个直观的界面,使其易于捕捉和管理笔记。
  • 多设备可访问性: 用户可以从各种设备访问他们的笔记,增强了便利性和灵活性。
  • 协作功能: Memos允许轻松共享笔记,促进用户之间的协作。

image.png

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

https://img-blog.csdnimg.cn/img_convert/4c16271f125adea69da6ed9e7b2a4226.png

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

https://img-blog.csdnimg.cn/img_convert/414570cd3da48d4cc4bf51489992000b.png

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

https://img-blog.csdnimg.cn/img_convert/c8afbeb764459a37a8451dd2ed8eeff1.png

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

https://img-blog.csdnimg.cn/img_convert/ea5814f1d1068ca9fa2bb94631cfbdf1.png

  • 到此为止,我们的云服务器就远程连接上了。

使用Docker Compose安装Memos

要使用Docker Compose安装Memos,你需要创建一个docker-compose.yml文件,该文件定义了运行应用程序所需的服务、网络和卷。以下是两种部署Memos的配置:一个使用SQLite,另一个使用PostgreSQL。

1 创建 docker-compose.yml

touch docker-compose.yml

2 使用SQLite的Memos

以下docker-compose.yml文件使用SQLite作为数据库设置Memos:

services:
  memos:
    image: neosmemo/memos:stable
    container_name: memos
    user: root
    restart: unless-stopped
    volumes:
      - ./memos/:/var/opt/memos
    ports:
		  - 5230:5230

配置说明:

  • services: 这一节定义了Docker将运行的服务。这里,我们有一个名为memos的单一服务。
  • image: 指定要使用的Docker镜像,在这种情况下是neosmemo/memos:stable
  • container_name: 为容器分配一个名称,以便于管理。
  • user: 以root用户身份运行容器。
  • restart: 配置重启策略。unless-stopped意味着容器将在没有明确停止的情况下重启。
  • networks: 将服务连接到名为traefik-net的外部网络,这对于路由很有用。
  • volumes: 将本地目录(./memos/)映射到容器的数据存储目录(/var/opt/memos),确保数据持久性。

3 使用PostgreSQL数据库的Memos

如果你更喜欢使用PostgreSQL作为数据库,你可以使用以下配置。这是在你有很多笔记需要一个强大的数据库时的情况。以下是带有doc的Memos数据库选项。

services:
  memos:
    image: neosmemo/memos:stable
    container_name: memos
    restart: unless-stopped
    volumes:
      - ./memos/:/var/opt/memos
    ports:
		  - 5230:5230
    environment:
      MEMOS_DRIVER: postgres
      MEMOS_DSN: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@memos-db:5432/${POSTGRES_DB}?sslmode=disable
    depends_on:
      memos-db:
        condition: service_healthy

  memos-db:
    image: postgres:16.1-alpine
    volumes:
      - ./memos-db:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}
      interval: 5s
      timeout: 5s
      retries: 5
    restart: on-failure:5

配置说明:

  • memos服务与SQLite配置类似,但包括PostgreSQL的环境变量。
  • depends_on: 确保memos-db服务在memos服务之前启动。
  • environment: 设置PostgreSQL连接的环境变量,包括数据库名称、用户和密码。
  • memos-db服务运行一个PostgreSQL数据库,有一个健康检查以确保在Memos服务启动之前它已经准备好。

4 创建一个.env文件

对于PostgreSQL配置,在与你的docker-compose.yml文件相同的目录中创建一个.env文件,以定义环境变量:

POSTGRES_DB=memos
POSTGRES_USER=memos
POSTGRES_PASSWORD=memos

你可以根据需要更改数据库详细信息。

5 启动Docker Compose文件

要启动Memos应用程序,请在包含docker-compose.yml文件的目录中运行以下命令:

docker compose up -d

此命令将下载必要的Docker镜像,创建容器,并以分离模式启动服务。

启动后可以查看容器运行状态:

docker compose ps

6 访问Memos UI并创建你的第一个用户

一旦容器运行,你可以通过在Web浏览器中导航到 http://your_ip:5230 来访问Memos Web界面。你将看到一个注册屏幕,你可以在其中创建你的第一个用户帐户。

然后Memos UI将如下所示:

image.png

然后你有设置区域,你可以在其中将外观从浅色更改为深色,添加用户或启用SSO。

image.png

结论

使用Docker Compose设置Memos提供了一种直接部署自托管笔记应用程序的方法。通过使用SQLite或PostgreSQL,用户可以选择最适合他们需求的数据库。所提供的配置允许轻松定制和扩展,使Memos成为个人组织和笔记管理的灵活解决方案。

相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP,全称超文本传输协议,是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的,采用的一问一答的模式,即发一个请求,返回一个响应。 Q:什…

小程序项目的基本组成结构

分类介绍 项目根目录下的文件及文件夹 pages文件夹 用来存放所有小程序的页面,其中每个页面都由4个基本文件组成,它们分别是: .js文件:页面的脚本文件,用于存放页面的数据、事件处理函数等 .json文件:…

【uni-app 微信小程序】新版本发布提示用户进行更新

知识准备 uni.getUpdateManager文档介绍 不支持APP与H5,所以在使用的时候要做好平台类型的判断,如何判断,参考条件编译处理多端差异 代码参考 export const updateApp () > {const updateManager uni.getUpdateManager()updateManag…

LabVIEW断路器检测系统

随着电网技术的快速发展,对电力系统的可靠性和安全性要求不断提高,塑壳断路器作为关键的保护设备,其出厂前的检测非常重要。开发了一种基于LabVIEW软件平台开发的塑壳断路器智能脱扣器检测系统,该系统能够有效提高检测的自动化水平…

ASP.NET Core API 前后端分离跨域

环境准备 数据库: sqlserver 2022 后端: vs2022 ASP.NET Core API .net 8 前端: Hbuilderx bootstrap 5.3.0 jquery v3.7.1 bootstrap-table 1.23.5 完整项目代码下载地址 功能 实现 单张表 的 增 删 改 查 创建数据库和表 create data…

Mac M1 安装数据库

1. Docker下载 由于Sqlserver和达梦等数据库,不支持M系列的芯片,所以我们通过docker安装 下载并安装docker: https://www.docker.com/get-started/ 安装完成后,打开docker 2. SQL Server 安装 2.1 安装 打开终端,执行命令 doc…

进程的管理与控制

一、进程与线程 1. 进程 程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。 进程(Process):是指计算机中已执行的程序,是动态的。 (1)进程的组成…

SQLCipher:SQLite加密工具的实用指南

本文还有配套的精品资源,点击获取 简介:SQLCipher是一个开源工具,用于为SQLite数据库提供透明的数据加密功能,确保数据安全。其工作原理是通过在SQLite的API上增加一层加密层,并使用AES加密算法确保数据在未授权访问…

如何将 JavaWeb 项目部署到云服务器

1. 搭建 Java 部署环境 接下来以 Ubuntu 来进行演示 1.1. apt 包管理工具 apt 就相当于手机上的应用市场 列出所有软件包:apt list 这个命令输出所有包的列表,内容比较多,可以使用 grep 命令过滤输出:apt list |grep "jd…

自动驾驶算法——卡尔曼滤波器平滑感知车道线参数【C++代码实现】

1.算法原理 在工程实践中,由于感知识别到的车道线偶尔存在较大的跳变,导致后端控制算法计算出的控制角度也存在较大的跳变,所以我们需要对感知输入的车道线系数进行平滑处理。 已知卡尔曼滤波算法主要分为以下几大步骤: 感知将车道线以三次螺旋曲线方程 y = c 0 + c 1 x +…

用python替换和循环插入excel的内容

用python替换和循环插入excel的内容 目的: 1.有一个word模板和一个有数据的excel表格 2.需要将excel中的数据经过更改成需要的字符串插入word段落中 3.更改word中的字符串 4.写一个现阶段可以用的程序,并用作以后更新迭代复用。 过程: …

UE5基本数据类型

bool: 表示布尔值,只有两个取值:true 或 false,用于表示逻辑条件。int8: 表示 8 位的有符号整数,范围是 −128−128 到 127127。uint8: 表示 8 位的无符号整数,范围是 00 到 255255。int16: 表示 16 位的有符号整数&am…

【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度

本文介绍如何在编辑器里让物体围绕一个点旋转固定角度,比如上图里的Cube是围绕白色圆盘的中心旋转45度的。 目标: 创建一个在 Unity 编辑器中使用的旋转工具,使开发者能够在编辑模式下快速旋转一个物体。 实现思路: 编辑模式下…

深度学习:从入门到精通的全面学习路径

摘要: 本文详细阐述了深度学习从入门到精通的系统学习路线。从基础数学与编程知识的夯实,到深度学习核心技术栈的深入掌握,包括 TensorFlow 与 PyTorch 等框架的应用;再到各类主流深度学习算法的原理学习与实践,涵盖神…

CC2530传感器应用实例

1.CC2530流水灯实验 //基于CC2530微控制器的程序&#xff0c;用于控制三个LED灯的闪烁。#include <ioCC2530.h>#define uint unsigned int #define uchar unsigned charuint代表无符号整型&#xff0c;uchar代表无符号字符型。#define LED1 P1_0 #define LED2 P1_1 #defi…

深度和法线纹理

屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理&#xff0c;存在以下问题&…

Oracle之表空间迁移

问题背景&#xff1a;一个数据表随着时间的累积&#xff0c;导致所在表空间占用很高&#xff0c;里面历史数据可以清除&#xff0c;保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩&#xff0c;以下sql在表所在用户执行: -- 允许表重新…

非父子通信(扩展)-- event bus 事件总线

创建一个空实例Bus&#xff0c; export default 导出Bus 过程:由A组件对Bus组件进行监听&#xff0c;B组件触发Bus对应的事件&#xff0c;由于A组件进行监听&#xff0c;触发事件之后就会进行A组件的回调&#xff0c;那么就可以将消息发送给A了 在src文件夹下新建utils文件夹&a…

vue深入理解(1)

本文章内容主要来源于《vue.js设计与实现》 视图层框架设计 命令式和声明式 范式上&#xff0c;视图层框架通常分为命令式和范式 JQuery就是典型的命令式框架&#xff0c;命令式框架的一大特点就是关注过程 例子&#xff1a; $(#app) // 获取app.text(hello world) // 设置…

CSDN博客如何修改删除上传的资源

CSDN博客是我用过的最好用的博客&#xff0c;它对用户发布文章的限制比较少&#xff0c;而且还支持用户利用知识创新来获取收益&#xff0c;不象51CTO这种垃圾博客&#xff0c;动不动就给扣分限号。但我发现CSDN也有设计缺陷&#xff0c;虽然其上传资源的入口很好找&#xff0c…