DevOps и Docker 11 мин чтения 2026-10-08

Организация личных заметок и базы знаний в Memos: развертывание в Docker Compose на VDS с тегами, мобильным клиентом и REST API

Пошаговое руководство по установке сверхлегкого сервиса заметок Memos на VDS: развертывание в Docker Compose, защита Nginx с SSL, синхронизация с мобильными приложениями через API и автоматический бэкап базы SQLite.

Алексей Иванов Проверено инженерами SysKit.ru

Каждый разработчик, системный администратор или вебмастер ежедневно сохраняет десятки разрозненных фрагментов информации: команды терминала, полезные однострочники bash, заметки по архитектуре серверов, ссылки на документацию и списки задач. Чаще всего всё это оседает в «Избранном» в Telegram, превращаясь в неуправляемую свалку сообщений без структуры, либо в тяжелых облачных сервисах вроде Notion, которые требуют постоянного интернета, закрывают доступ к подпискам и хранят конфиденциальные данные на чужих серверах.

Открытая платформа Memos решает эту проблему элегантно и надежно. Это ультралегковесный self-hosted сервис заметок и персональная база знаний с интерфейсом в стиле приватного микроблога. Развернув Memos на собственном VDS-сервере в связке с Docker Compose, вы получаете полный контроль над своими записями, удобное тегирование, поддержку Markdown, мгновенный поиск и синхронизацию со смартфонами через нативные приложения.

Зачем нужен собственный Memos и почему он выигрывает у Notion и Telegram

Концепция Memos строится вокруг идеи персонального «цифрового сада» (Digital Garden) и быстрой фиксации мыслей без сложной иерархии папок:

  • Мгновенное сохранение на лету: Чтобы записать мысль или команду, не нужно создавать отдельный документ, выбирать категорию или настраивать свойства базы. Достаточно открыть поле ввода, набрать текст в формате Markdown и нажать Send.
  • Умная организация через хэштеги: Любое слово с решеткой (например, #docker, #nginx, #devops/ci) мгновенно становится тегом. В боковом меню автоматически строится дерево тегов с подсчетом записей, позволяя мгновенно фильтровать заметки в один клик.
  • Интерактивные чеклисты и вложения: Поддерживаются чекбоксы задач (- [ ] задача), подсветка блоков исходного кода на десятках языков программирования, таблицы и загрузка скриншотов простым перетаскиванием (drag-and-drop).
  • Гибкие уровни приватности: Каждая заметка может иметь статус Private (видна только вам), Protected (доступна авторизованным пользователям вашего инстанса) или Public (открыта для просмотра всем по прямой ссылке, что позволяет использовать Memos как личный публичный микроблог).
  • Тепловая карта активности: Наглядный визуальный календарь на главной странице (по аналогии с GitHub Contributions) мотивирует регулярно фиксировать полезный опыт и отслеживать продуктивность по дням.

Безопасность данных: В отличие от облачных сервисов, база заметок Memos никогда не покидает ваш сервер. Вы можете безопасно хранить внутренние IP-адреса серверов, токены доступа к тестовым стендам и служебные памятки без риска утечки в сторонние облака.

Архитектура и потребление ресурсов: всего 25–30 МБ RAM на Go и SQLite

Главное инженерное достоинство Memos — бескомпромиссная производительность. В то время как популярные аналоги на Node.js или Java (например, Nextcloud Notes или Trillium) требуют от 500 МБ до 1.5 ГБ оперативной памяти, Memos спроектирован на максимально эффективном технологическом стеке:

  1. Бэкенд на Go (Golang): Скомпилированный бинарный файл без тяжелых интерпретаторов потребляет минимальное количество процессорного времени и стартует за доли секунды.
  2. Встроенная СУБД SQLite: По умолчанию все данные хранятся в легковесном файле memos_prod.db с включенным режимом журналирования WAL (Write-Ahead Logging). Это обеспечивает параллельное чтение и запись без блокировок и не требует запуска отдельного тяжелого контейнера с PostgreSQL или MySQL.
  3. Фронтенд на React: Быстрый и отзывчивый интерфейс без перегрузки тяжелыми библиотеками, идеально адаптированный как под десктопные мониторы, так и под мобильные экраны.

В рабочем режиме контейнер Memos потребляет всего 25–35 МБ оперативной памяти, что позволяет без проблем размещать его на самом базовом VDS с 1 ГБ RAM по соседству с другими полезными утилитами, например менеджером закладок Linkwarden или канбан-досками Vikunja.

Боевой манифест Docker Compose с лимитами ресурсов и привязкой к 127.0.0.1

Для развертывания сервиса создадим рабочую директорию на сервере под управлением Ubuntu или Debian. Обратите внимание: официальный образ распространяется в репозитории neosmemo/memos, и для боевой эксплуатации рекомендуется фиксировать проверенный стабильный тег stable.

Создайте рабочую директорию для хранения данных и перейдите в нее:

sudo mkdir -p /opt/memos/data
cd /opt/memos

Создайте файл docker-compose.yml со следующей проверенной конфигурацией. Обратите внимание на директиву портов 127.0.0.1:5230:5230: она изолирует порт сервиса от прямого доступа из интернета, направляя весь внешний трафик исключительно через обратный прокси с HTTPS:

services:
  memos:
    # Официальный стабильный образ от разработчиков
    image: neosmemo/memos:stable
    container_name: memos
    restart: unless-stopped
    volumes:
      # Постоянное хранилище базы SQLite и загруженных медиафайлов
      - ./data:/var/opt/memos
    ports:
      # Безопасная привязка к локальному хосту: порт закрыт от прямого доступа извне
      - "127.0.0.1:5230:5230"
    # Ограничение ресурсов для защиты сервера от утечек памяти
    mem_limit: 256m
    cpus: 0.5

Защита от обхода UFW: Прямая публикация портов вида 5230:5230 заставляет демон Docker вносить правила в таблицу iptables напрямую, игнорируя системный фаервол UFW. Привязка к адресу 127.0.0.1 полностью нейтрализует эту уязвимость.

Запустите контейнер в фоновом режиме:

sudo docker compose up -d

Проверьте, что сервис успешно запустился и отдает статус Up:

sudo docker compose ps
sudo docker compose logs -f memos

Настройка безопасного доступа через Nginx и Caddy с HTTPS

Для безопасного подключения через доменное имя (например, notes.example.com) и автоматического шифрования трафика по протоколу HTTPS настроим обратный прокси. Предварительно создайте в DNS-панели вашего домена запись типа A с именем поддомена (notes), указывающую на публичный IP-адрес вашего VDS.

Вариант 1: Конфигурация Nginx с Certbot

Если на вашем сервере используется классический Nginx (сгенерировать оптимизированный конфиг можно через наш генератор Nginx), установите веб-сервер и плагин Certbot:

sudo apt update && sudo apt install nginx python3-certbot-nginx -y

Создайте конфигурационный файл /etc/nginx/sites-available/memos.conf. Обратите внимание на поддержку WebSocket и увеличенный размер тела запроса client_max_body_size 50M, необходимый для комфортной загрузки фото и вложений:

server {
    listen 80;
    server_name notes.example.com;

    # Максимальный размер загружаемых фото, аудио и документов
    client_max_body_size 50M;

    # Базовые заголовки безопасности
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    location / {
        proxy_pass http://127.0.0.1:5230;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Поддержка постоянных соединений и интерактивных веб-сокетов
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 90s;
    }
}

Активируйте виртуальный хост и проверьте синтаксис:

sudo ln -s /etc/nginx/sites-available/memos.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Выпустите бесплатный доверенный SSL-сертификат Let's Encrypt с автоматическим редиректом с HTTP на HTTPS:

sudo certbot --nginx -d notes.example.com --non-interactive --agree-tos -m admin@example.com --redirect

Работоспособность и срок действия сертификата можно моментально перепроверить через наш онлайн SSL-чекер.

Вариант 2: Автоматический HTTPS в Caddy 2

Если вы используете современный веб-сервер Caddy (создать правила можно в нашем генераторе Caddyfile), автоматический выпуск сертификатов настраивается всего в три строки в /etc/caddy/Caddyfile:

notes.example.com {
    reverse_proxy 127.0.0.1:5230
}

Примените изменения командой sudo systemctl reload caddy.

Первоначальная настройка: права администратора и закрытие свободной регистрации

Откройте в браузере адрес https://notes.example.com. При первом входе Memos предложит зарегистрировать учетную запись. Важный факт: первый созданный пользователь автоматически наделяется правами главного администратора (роль Admin, в версиях до v0.26.0 именовалась как Host).

Порядок первоначальной настройки безопасности:

  1. Сгенерируйте стойкий мастер-пароль длиной от 20 символов с помощью нашего генератора паролей и завершите регистрацию.
  2. В левом нижнем углу интерфейса перейдите в раздел Settings (Настройки).
  3. Перейдите во вкладку System.
  4. Критический шаг: активируйте переключатель Disable user registration (Запретить регистрацию пользователей). Это предотвратит создание аккаунтов посторонними людьми на вашем публичном домене.
  5. Во вкладке Preferences выберите русский язык (Memos полностью локализован на русский язык) и настройте цветовую схему оформления (Auto / Light / Dark).

Многопользовательский режим: Если вам нужно выдать доступ коллегам или членам семьи, вы сможете создавать для них учетные записи вручную через панель администратора Settings → Members → Add Member даже при отключенной свободной регистрации.

Синхронизация с мобильными устройствами: приложение Moe Memos и токены доступа

Одной из ключевых причин популярности Memos является наличие развитой экосистемы клиентских приложений. Вам не нужно каждый раз открывать браузер на телефоне: сервис нативно интегрируется в мобильные операционные системы.

Подключение нативного клиента Moe Memos

Для iOS, iPadOS, macOS и Android разработано великолепное open-source приложение Moe Memos (доступно в App Store, Google Play и F-Droid). Оно поддерживает офлайн-режим, интерактивные виджеты для рабочего стола и системное меню «Поделиться» (Share Sheet).

Для безопасного подключения приложения без ввода основного пароля аккаунта используются персональные токены:

  1. В веб-интерфейсе Memos перейдите в Settings > Access Tokens.
  2. Нажмите кнопку Create, укажите понятное название (например, iPhone Moe Memos) и срок действия токена (например, Never expire для постоянного личного устройства).
  3. Скопируйте сгенерированный токен.
  4. Откройте приложение Moe Memos на телефоне, введите адрес вашего сервера https://notes.example.com и вставьте токен в поле Access Token.

Теперь любая мысль, ссылка или скриншот, отправленные через виджет или приложение на смартфоне, моментально синхронизируются с вашим сервером на VDS.

Установка веб-версии как PWA

Если вы не хотите устанавливать сторонние программы, веб-версия Memos полностью поддерживает стандарт Progressive Web App (PWA). В браузере Safari на iPhone нажмите кнопку Поделиться > На экран «Домой», а в Chrome на Android — Установить приложение. Сервис будет запускаться в полноэкранном режиме с собственной иконкой точно так же, как нативное приложение.

Автоматизация и публикация заметок через REST API, curl и скрипты

Memos спроектирован с упором на API-first подход и документирован по стандарту OpenAPI. Это позволяет использовать сервис не только вручную, но и в качестве централизованного хранилища логов, отчетов и сниппетов из внешних скриптов автоматизации.

Публикация заметок через curl

Чтобы отправить новую заметку прямо из терминала Linux или bash-скрипта деплоя, достаточно выполнить один POST-запрос с заголовком авторизации:

curl -X POST https://notes.example.com/api/v1/memos \
  -H "Authorization: Bearer ВАШ_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Успешно завершен ночной бэкап баз данных на S3 #devops #backups",
    "visibility": "PRIVATE"
  }'

Практические сценарии автоматизации

  • Логирование статусов серверов: Встройте отправку заметок в скрипты резервного копирования или GitHub Actions. В конце пайплайна скрипт отправит красивую заметку со статусом деплоя и ссылкой на коммит.
  • Быстрый ввод с десктопа через Raycast / Alfred: Назначьте глобальную горячую клавишу на ПК (например, Alt + Space), чтобы во всплывающем окне набрать короткую мысль и за долю секунды отправить ее в Memos по API.
  • Исходящие вебхуки (Webhooks): В разделе Settings > Webhooks можно настроить отправку JSON-вебхука на сторонний сервер или наш собственный push-сервер Ntfy при создании заметок с определенными тегами.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Скоростные NVMe VDS

Быстрые NVMe-диски и моментальный отклик позволяют запускать Memos вместе с Nginx даже на минимальном тарифе без задержек.

Конфигурация
1 vCPU 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Корпоративная надежность Tier III

Отказоустойчивая инфраструктура с гарантированным аптаймом для круглосуточного доступа к личной базе знаний из любой точки мира.

Конфигурация
1 vCPU • 2 ГБ RAM • 30 ГБ NVMe • 100 Мбит/с
Идеально для Docker
🟠

Beget — Простота и отказоустойчивость

Установка Docker в один клик, удобная панель управления сервером и бесплатное автоматическое создание ежедневных резервных копий.

Конфигурация
1 vCPU • 1 ГБ RAM • 20 ГБ NVMe • Трафик без лимита

Резервное копирование SQLite-базы, восстановление и безопасное обновление

Все ваши заметки, теги, списки задач и настройки хранятся в едином файле базы данных memos_prod.db, а загруженные изображения и вложения сохраняются непосредственно внутри структуры примонтированного тома /opt/memos/data. Благодаря архитектуре на базе SQLite процедура резервного копирования и миграции на новый сервер выполняется максимально просто.

Создание резервной копии базы данных

Так как SQLite использует режим WAL, простое копирование файла во время активной записи может создать поврежденный снимок. Для создания гарантированно целостной горячей копии прямо на лету используйте встроенную команду утилиты sqlite3:

# Горячий бэкап базы данных без остановки контейнера
sudo sqlite3 /opt/memos/data/memos_prod.db ".backup '/opt/memos-backup-$(date +%F).db'"

Для полного сохранения всех вложений и медиафайлов достаточно создать сжатый архив всей рабочей директории:

sudo tar -czf /opt/memos-full-backup-$(date +%F).tar.gz -C /opt/memos data

Автоматизация ежедневных бэкапов через Cron

Добавьте автоматическое создание архива в системный планировщик cron. Откройте crontab от имени root командой sudo crontab -e и добавьте строку (создание бэкапа каждую ночь в 03:00 и удаление архивов старше 14 дней):

Для автоматизации создадим безопасный скрипт бэкапа /opt/memos/backup.sh, который сначала выполняет атомарный снимок базы без блокировки, а затем упаковывает все файлы:

#!/bin/bash
BACKUP_DIR="/var/backups/memos"
DATE=$(date +%F)
mkdir -p "$BACKUP_DIR"

# 1. Горячий согласованный снимок SQLite БД
sqlite3 /opt/memos/data/memos_prod.db ".backup '$BACKUP_DIR/memos_$DATE.db'"

# 2. Архивирование медиафайлов и данных вместе со снимком БД
tar -czf "$BACKUP_DIR/memos_full_$DATE.tar.gz" -C /opt/memos data "$BACKUP_DIR/memos_$DATE.db" 2>/dev/null
rm -f "$BACKUP_DIR/memos_$DATE.db"

# 3. Удаление копий старше 14 дней
find "$BACKUP_DIR" -name "memos_full_*.tar.gz" -mtime +14 -delete

Сделайте скрипт исполняемым (sudo chmod +x /opt/memos/backup.sh) и добавьте его запуск в sudo crontab -e:

0 3 * * * /opt/memos/backup.sh >/dev/null 2>&1

Безопасное обновление Memos до новой версии

Разработчики Memos регулярно выпускают обновления с оптимизациями и новыми возможностями. Чтобы процедура обновления прошла без риска потери данных, всегда выполняйте предварительное резервное копирование:

# 1. Перейдите в рабочую директорию
cd /opt/memos

# 2. Создайте контрольную точку восстановления
sudo tar -czf /opt/memos-preupdate-$(date +%F).tar.gz -C /opt/memos data

# 3. Скачайте свежий стабильный образ и перезапустите контейнер
sudo docker compose pull
sudo docker compose up -d

# 4. Проверьте журналы контейнера на предмет успешного применения миграций
sudo docker compose logs -f memos

Итоги: идеальный баланс легковесности и приватности

Сервис Memos доказывает, что современное веб-приложение не обязано потреблять гигабайты памяти, чтобы быть удобным и функциональным. Развернув его на собственном VDS всего за 10–15 минут, вы получаете:

  • 100% приватность личных мыслей, команд и паролей от посторонних глаз.
  • Сверхбыстрый поиск и тегирование без тормозов и задержек.
  • Кроссплатформенный доступ со смартфона, планшета и рабочего ноутбука через приложение Moe Memos или PWA.
  • Мощный REST API для автоматизации сбора информации прямо из терминала.

Для комфортной работы связки Memos и Nginx прекрасно подойдет даже самый недорогой VDS с 1 ГБ оперативной памяти и быстрым NVMe-накопителем, доступный у надежных провайдеров из нашего каталога выше.

Инструменты SysKit по теме статьи

Бесплатные утилиты для проверки и диагностики вашего сервера

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Хватит ли базы SQLite для большой базы заметок в Memos?
Да, встроенная база данных SQLite с журналированием WAL легко справляется с десятками тысяч заметок и полнотекстовым поиском при практическом отсутствии нагрузки на процессор. При необходимости Memos поддерживает переключение на внешнюю СУБД PostgreSQL через переменную MEMOS_DRIVER=postgres.
Как ограничить доступ к серверу Memos, чтобы посторонние не могли зарегистрироваться?
После создания первого аккаунта (он автоматически получает права Host/Администратора) перейдите в меню Settings → System и активируйте опцию 'Disable user registration'. Новые пользователи больше не смогут регистрироваться в системе без вашего ведома.
Поддерживает ли Memos вложения, изображения и голосовые заметки?
Да, вы можете прикреплять скриншоты, PDF-документы и аудиофайлы прямо в тело заметки (drag-and-drop или через буфер обмена). Все медиафайлы сохраняются в примонтированный том /var/opt/memos на диске сервера.
Можно ли использовать Memos для совместной командной работы?
Да, каждая заметка имеет три уровня приватности: Private (видна только автору), Protected (видна авторизованным участникам системы) и Public (доступна публично без авторизации, идеальна для ведения личного микро-блога).

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи