Гид по технологиям

Как самостоятельно развернуть Standard Notes на Ubuntu 22.04

• 10 min read • DevOps • Обновлено 23 Nov 2025
Standard Notes — самостоятельный сервер на Ubuntu 22.04
Standard Notes — самостоятельный сервер на Ubuntu 22.04

Логотип Standard Notes и схема архитектуры сервера

Краткое введение

Standard Notes — это открытое и полностью зашифрованное приложение для заметок. Оно доступно в бесплатной и платной версиях и поддерживает как облачный хостинг, так и самостоятельный хостинг на вашем сервере. При самостоятельном хостинге вы храните и синхронизируете заметки между устройствами через собственный сервер. Приложения Standard Notes доступны для всех настольных операционных систем и мобильных платформ.

В этом руководстве описаны все шаги, необходимые для развёртывания и поддержки самостоятельного сервера Standard Notes на Ubuntu 22.04. Кроме базовой установки вы узнаете, как включить платные функции и загрузку файлов, настроить SSL, обеспечить безопасность и организовать резервное копирование.

Важные определения

  • Self-host: запуск сервиса на собственном сервере под вашим контролем.
  • Files server: отдельный поддомен и сервис для хранения пользовательских загруженных файлов.
  • .env: файл окружения с конфигурацией сервера.

Основные идеи из руководства

  • Используйте Docker Compose v2 (команда docker compose).
  • Nginx выполняет роль обратного прокси и разграничивает TLS/HTTP.
  • Certbot (snap) генерирует и обновляет сертификаты Let’s Encrypt.
  • Доступ к загрузке файлов требует прав на каталог uploads и ручного задания квоты.

Требования

  • Сервер с Ubuntu 22.04 и минимум 2 ГБ оперативной памяти. Рекомендовано 4 ГБ+ для стабильной работы в продакшне.
  • Ненулевой (не root) пользователь с правами sudo.
  • UFW (Uncomplicated Firewall) включён и настроен.
  • Два полностью квалифицированных доменных имени (FQDN): одно для приложения (в примере standardnotes.example.com), второе для файлового сервера (в примере snotes-files.example.com).
  • Система обновлена: выполните
$ sudo apt update && sudo apt upgrade

Примечание: во всём руководстве сохраняйте оригинальные пути к файлам и имена, если вы хотите точно повторить все команды.

Шаг 1 — Настройка брандмауэра

Прежде чем устанавливать пакеты, разрешите HTTP/HTTPS через UFW.

Проверка статуса UFW:

$ sudo ufw status

Пример вывода:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Разрешите HTTP и HTTPS:

$ sudo ufw allow http
$ sudo ufw allow https

Проверьте ещё раз:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Совет по безопасности: запретите доступ по SSH по паролю и включите аутентификацию по ключам, затем ограничьте доступ по IP, если это применимо.

Шаг 2 — Установка Docker и Docker Compose

Добавьте официальный GPG-ключ Docker:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

Добавьте репозиторий Docker:

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите индексы пакетов и установите Docker и плагин Compose v2:

$ sudo apt update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Важно: этот туториал использует Docker Compose v2, поэтому команда будет выглядеть как docker compose (без дефиса).

Чтобы не использовать sudo постоянно, добавьте текущего пользователя в группу docker:

$ sudo usermod -aG docker ${USER}

Примените изменения группы (выполните выход и повторный вход в сессию) или:

$ su - $(USER)

Проверьте установку:

$ docker --version
$ docker compose version

Шаг 3 — Установка Nginx

Ubuntu 22.04 может поставлять старую версию Nginx, поэтому мы подключим официальный репозиторий Nginx для стабильной ветки.

Импорт ключа подписи Nginx:

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Добавьте репозиторий стабильной версии:

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Обновите индексы и установите Nginx:

$ sudo apt update
$ sudo apt install nginx

Проверьте версию:

$ nginx -v
nginx version: nginx/1.22.0

Совет: для продакшн-систем рассмотрите использование автоматизированного менеджмента конфигураций (Ansible, Terraform) для воспроизводимости.

Шаг 4 — Установка SSL с Certbot (Snap)

Для TLS мы будем использовать Certbot из snap, чтобы получать актуальную версию.

Обновите core snap и установите Certbot:

$ sudo snap install core
$ sudo snap install --classic certbot

Создайте символьную ссылку, чтобы запускать certbot как /usr/bin/certbot:

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Генерация сертификата для основного домена:

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d standardnotes.example.com

Аналогично для файлового поддомена:

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d snotes-files.example.com

Создайте параметр Diffie-Hellman (dhparam) для повышения стойкости TLS:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Чтобы Certbot мог автоматически останавливать и перезапускать Nginx при обновлении сертификатов, добавьте хуки в файлы конфигурации обновления Let’s Encrypt:

Откройте файл:

$ sudo nano /etc/letsencrypt/renewal/standardnotes.example.com.conf

Вставьте внизу:

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Повторите для snotes-files.example.com.

Проверьте dry-run обновления:

$ sudo certbot renew --dry-run

Если ошибок нет — автоматическое обновление сертификатов настроено.

Важно: если вы используете прокси перед Nginx (например, Cloudflare в режиме reverse proxy), порядок действий с Certbot может отличаться.

Шаг 5 — Загрузка и настройка Standard Notes

Перейдите в домашнюю директорию и клонируйте репозиторий Standalone:

$ cd ~
$ git clone --single-branch --branch main https://github.com/standardnotes/standalone.git
$ cd standalone

Создайте конфигурационные файлы по умолчанию:

$ ./server.sh setup

Генерация ключей и секретов

Standard Notes требует несколько секретов. Вы можете генерировать их с помощью openssl:

$ openssl rand -hex 32

Откройте файл .env и отредактируйте основные переменные. Например:

$ nano .env

NODE_ENV=production
..
AUTH_JWT_SECRET=c0f5bcf6f0f0dcca5b9078c3095e4255a055dfd6376b376733af0e50483cc629
..
DB_USERNAME=std_notes_user
DB_PASSWORD=changeme123
..
VALET_TOKEN_SECRET=977c978ca1d5ea22fe2fda65058905b191f724e33db6e47d0a41e034a082cb3b
..
FILES_SERVER_URL=https://snotes-files.example.com

Сохраните и закройте файл.

Далее отредактируйте docker/auth.env:

$ nano docker/auth.env

JWT_SECRET=54deb1b0b2499e8d875b0d5266dabef9003e13c1787a959a94e339363c10e56e
LEGACY_JWT_SECRET=c36aae01803a616213f22422b6d3f998a2beb2cb53af8b95bf578a8a3d046cec
..
PSEUDO_KEY_PARAMS_KEY=ea09d3f9122b49c653524cd2285a45fee88beb94f9b76d4d25420b521b080fcd
..
ENCRYPTION_SERVER_KEY=04decf379fbe3bb48cf95dbb5997031418b308e724a25d88cb0b2ed6da725efe

Сохраните.

Совет: храните секреты в менеджере секретов (Vault, AWS Secrets Manager) для продакшна и не коммитьте их в Git.

Шаг 6 — Запуск Standard Notes

Запустите сервер:

$ ./server.sh start

Процесс может занять несколько минут — Docker загрузит образы и создаст контейнеры, выполнит миграции БД.

Просмотр логов:

$ ./server.sh logs

Остановить вывод логов: Ctrl+C.

Проверка статуса контейнеров:

$ ./server.sh status

Пример вывода:

Services State:
NAME                                  COMMAND                  SERVICE                    STATUS              PORTS
api-gateway-standalone                "./wait-for.sh auth …"   api-gateway                running             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
auth-standalone                       "./wait-for.sh db 33…"   auth                       running
auth-worker-standalone                "./wait-for.sh db 33…"   auth-worker                running
cache-standalone                      "docker-entrypoint.s…"   cache                      running             6379/tcp
db-standalone                         "docker-entrypoint.s…"   db                         running             3306/tcp
files-standalone                      "./wait-for.sh db 33…"   files                      running             0.0.0.0:3125->3000/tcp, :::3125->3000/tcp
syncing-server-js-standalone          "./wait-for.sh db 33…"   syncing-server-js          running
syncing-server-js-worker-standalone   "./wait-for.sh db 33…"   syncing-server-js-worker   running

Проверка здоровье-сёрвиса:

$ curl http://localhost:3000/healthcheck
OK

Если вы изменяли порт в .env, замените 3000 на ваш порт.

Шаг 7 — Конфигурация Nginx

Откройте основной конфиг Nginx и добавьте строку для увеличения bucket size (это помогает при длинных именах серверов):

$ sudo nano /etc/nginx/nginx.conf

Добавьте перед include /etc/nginx/conf.d/*.conf;:

server_names_hash_bucket_size  64;

Создайте файл конфигурации для основного домена:

$ sudo nano /etc/nginx/conf.d/standardnotes.conf

Вставьте (замените domain на свой):

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name standardnotes.example.com;

    client_max_body_size 50M;

    access_log  /var/log/nginx/standardnotes.access.log;
    error_log   /var/log/nginx/standardnotes.error.log;

    ssl_certificate      /etc/letsencrypt/live/standardnotes.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/standardnotes.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/standardnotes.example.com/chain.pem;
    
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_cache off;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  standardnotes.example.com;
    return 301   https://$host$request_uri;
}

Создайте конфигурацию для файлового поддомена:

$ sudo nano /etc/nginx/conf.d/files-standardnotes.conf

Вставьте:

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name snotes-files.example.com;

    client_max_body_size 50M;

    access_log  /var/log/nginx/files-standardnotes.access.log;
    error_log   /var/log/nginx/files-standardnotes.error.log;

    ssl_certificate      /etc/letsencrypt/live/snotes-files.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/snotes-files.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/snotes-files.example.com/chain.pem;
    
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:3125;
        proxy_cache off;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  snotes-files.example.com;
    return 301   https://$host$request_uri;
}

Проверьте конфигурацию:

$ sudo nginx -t

Перезапустите Nginx:

$ sudo systemctl restart nginx

Совет: на продакшне включите ограничение rate limiting и HTTP security headers (HSTS, X-Frame-Options и др.).

Шаг 8 — Использование Standard Notes

Откройте в браузере https://standardnotes.example.com — вы должны увидеть интерфейс приложения.

Для доступа через официальный веб-клиент откройте https://app.standardnotes.com, создайте аккаунт и укажите свой сервер в настройках Advanced features:

  • Нажмите Create free account и заполните email и пароль.
  • В Advanced features снимите галочку Custom sync server и введите https://standardnotes.example.com.

Форма создания аккаунта в Standard Notes с указанием сервера синхронизации

После входа можно создавать заметки и тестировать синхронизацию.

Шаг 9 — Активация платных функций для self-host аккаунта

Стандартно платные функции нельзя напрямую оплатить на self-host инстансе. Однако сервер поддерживает создание подписки вручную (donation/activation). Выполните:

$ cd ~/standardnotes
$ bash ./server.sh create-subscription [email protected]

После этого перезагрузите веб-приложение — платные функции должны активироваться для указанного аккаунта.

Примечание: это активирует платные функции локально, но не списывает средства через официальный платёжный шлюз.

Шаг 10 — Настройка загрузки файлов

Загрузка файлов — платная функция и требует настройки файлового хранилища и квоты.

Настройка прав на каталог uploads:

$ chmod -R 775 data
$ mkdir -p data/uploads
$ sudo chmod -R 755 data/uploads
$ sudo chown -R 1001.1001 data/uploads

Объяснение: контейнеры в Docker часто работают под определёнными UID/GID. В образе Standard Notes UID 1001 используется для файлового сервиса, поэтому chown делает папку доступной контейнеру.

По умолчанию квота загрузки у пользователей равна нулю. Чтобы предоставить, например, 10 ГБ используйте SQL-запрос внутри контейнера database:

Войдите в MySQL внутри контейнера:

$ docker exec -it db-standalone mysql -u std_notes_user -p
Enter password:

Переключитесь в базу данных Standard Notes:

mysql > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| standard_notes_db  |
+--------------------+
2 rows in set (0.00 sec)

mysql > use standard_notes_db;

Добавьте настройку квоты 10 ГБ (значение в байтах = 10737418240):

mysql> INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="[email protected]"));

Значение 10737418240 = 10 ГБ. Измените при необходимости.

Выйдите:

mysql > exit

Шаг 11 — Тестирование загрузок

В веб-интерфейсе Standard Notes нажмите на иконку вложений в верхней панели.

Иконка вложений Standard Notes для загрузки файлов

Выберите Upload files и загрузите файл. После успешной загрузки вы увидите файл в списке:

Список загруженных файлов в интерфейсе Standard Notes

Нажмите на три точки рядом с файлом для дополнительных опций:

Меню опций файла в Standard Notes: прикрепить, скачать, удалить

Безопасность и жёсткое укрепление

  1. Обновления и патчи
    • Регулярно обновляйте систему, Docker и образы контейнеров.
  2. Минимизация прав
    • Не запускайте дополнительные сервисы на том же хосте.
    • Ограничивайте привилегии пользователей и контейнеров.
  3. TLS
    • Используйте только TLS 1.2/1.3 и strong cipher suite (как в конфигурации Nginx выше).
    • Периодически проверяйте результат на SSL Labs.
  4. Защита SSH
    • Отключите вход по паролю, включите fail2ban и ограничьте доступ по IP.
  5. Мониторинг логов
    • Собирать логи контейнеров и Nginx (ELK/EFK/Prometheus+Grafana).
  6. Резервное копирование секретов
    • Храните .env и ключи в зашифрованном хранилище вне сервера.

Резервное копирование и восстановление

Резервируйте:

  • Данные MySQL (volume контейнера db-standalone). Используйте mysqldump:
$ docker exec -i db-standalone mysqldump -u std_notes_user -p standard_notes_db > standard_notes_db.sql
  • Файлы uploads (data/uploads): копируйте или rsync на удалённый бэкап-сервер.
  • Docker volumes: можно экспортировать с помощью docker run –rm –volumes-from.

Восстановление базы:

$ docker exec -i db-standalone mysql -u std_notes_user -p standard_notes_db < standard_notes_db.sql

План восстановления: проверяйте процедуру восстановления в тестовой среде минимум раз в квартал.

Обслуживание и обновление

Общий порядок обновления:

  1. Сделайте бэкап базы и файлов uploads.
  2. Остановите сервисы: ./server.sh stop или остановите контейнеры.
  3. Обновите репозиторий standalone (git pull) и обновите .env, если изменились переменные.
  4. ./server.sh start и проверьте логи.

Минимизация простоев: используйте временный maintenance page и уведомите пользователей.

Устранение неполадок — Частые ошибки и решения

  • Сервер возвращает 502 Bad Gateway

    • Проверьте, запущен ли сервис на порту 3000: curl http://localhost:3000/healthcheck
    • Просмотрите логи контейнера и Nginx.
  • Certbot не может получить challenge

    • Временно остановите Nginx и запустите certbot (или используйте webroot-плагин).
    • Проверьте DNS A-запись домена.
  • Проблемы с правами при загрузке файлов

    • Проверьте владельца и права на data/uploads (должны соответствовать UID контейнера 1001).
  • Проблемы с JWT/сессиями

    • Перегенерируйте секреты и перезапустите все сервисы (внеся изменения в .env и docker/auth.env).

Критерии приёмки

  • Сервис доступен по HTTPS на standardnotes.example.com и snotes-files.example.com.
  • curl http://localhost:3000/healthcheck возвращает OK.
  • Пользователь может зарегистрироваться и синхронизировать заметки через официальные клиенты.
  • Загруженные файлы сохраняются в data/uploads и доступны пользователю.
  • Автоматическое обновление сертификатов certbot renew –dry-run проходит без ошибок.

Роль-based чек-листы

Администратор:

  • Настроить DNS и UFW.
  • Установить Docker и Nginx.
  • Настроить Certbot и Nginx конфигурацию.

DevOps:

  • Настроить CI/CD для обновлений контейнеров.
  • Настроить мониторинг и алерты.
  • Настроить резервное копирование и тесты восстановления.

Пользователь:

  • Создать аккаунт и проверить синхронизацию заметок.
  • Проверить загрузку и доступ к файлам.

Сценарии отказа и откат

  1. Откат конфигурации .env
    • Используйте версионирование файлов конфигурации и храните зашифрованные копии.
  2. Восстановление БД
    • Восстановите с mysqldump и перезапустите сервисы.
  3. Откат образов Docker
    • docker compose pull; docker compose up –no-deps –build с нужной версией образа.

Советы по производительности

  • Увеличьте память контейнеров и выделите больше CPU под базу данных для больших баз.
  • Используйте внешний Redis (если используется) и выделенный диск для MySQL.
  • Настройте лог-ротацию и ограничьте размер логов.

Миграция с облачного Standard Notes на self-host

  1. Создайте резервную копию данных в облаке через официальные инструменты (экспорт заметок).
  2. Импортируйте записи в локальный сервер через API/клиент.
  3. Проверьте шифрование и ключи — пользователи должны сохранить свои пароли/ключи.

Совместимость и ограничения

  • Самостоятельный инстанс не интегрируется с официальной платёжной системой Standard Notes.
  • Некоторые расширенные функции, завязанные на облачные сервисы, могут работать иначе.

Мини-методология развертывания (пошаговый чек-лист)

  1. Подготовка сервера: обновление, создание пользователя, SSH.
  2. Настройка UFW и DNS.
  3. Установка Docker и Nginx.
  4. Получение SSL сертификата.
  5. Клонирование репозитория Standard Notes.
  6. Настройка .env и секретов.
  7. Запуск ./server.sh start и проверка статуса.
  8. Настройка Nginx виртуальных хостов.
  9. Настройка прав для uploads и присвоение квот.
  10. Тестирование и мониторинг.

Частые вопросы

Как обновить Standard Notes до новой версии?

Обновите репозиторий standalone (git pull), выполните ./server.sh stop, затем ./server.sh start. Перед обновлением сделайте бэкап базы и файлов.

Как дать пользователю индивидуальную квоту на загрузку файлов?

Добавьте запись в таблицу subscription_settings как описано в шаге 10, указав значение в байтах. Для 10 ГБ используйте 10737418240.

Можно ли использовать S3 вместо локальной папки uploads?

Да. Для масштабируемого хранилища рекомендуется S3-совместимый бэкенд; потребуется корректировать конфигурацию файлового сервера и переменные окружения.

Как восстановить забытый секрет AUTH_JWT_SECRET?

Смените секрет в .env и соответствующие значения в docker/auth.env, затем перезапустите сервисы. Учтите, что смена JWT-секрета может разлогинить всех пользователей и потребовать повторной авторизации.

Glossary — краткие определения

  • JWT: компактный формат токенов для передачи данных о сессии.
  • FQDN: полностью квалифицированное доменное имя.
  • TLS: протокол шифрования для сетевых соединений.

Социальный превью

OG title: Standard Notes — самостоятельный сервер на Ubuntu 22.04 OG description: Подробное руководство: Docker, Nginx, Certbot, платные функции и загрузка файлов. Быстрая пошаговая инструкция для self-host.

Короткое объявление (анонс для рассылки, 100–200 слов)

Разверните Standard Notes под своим контролем: пошаговое руководство по установке на Ubuntu 22.04 с использованием Docker, Nginx и Certbot. Вы научитесь настраивать SSL, запускать сервисы, активировать платные функции для self-host аккаунта и включать загрузку файлов с выдачей квоты. Включены рекомендации по безопасности, резервному копированию, обновлениям и устранению неполадок. Подойдёт для DevOps-инженеров и системных администраторов, желающих держать личные заметки под полным контролем.

Заключение

Вы успешно развернули Standard Notes на Ubuntu 22.04. Руководство описывает полный цикл: от подготовки сервера до включения платных функций и загрузки файлов. Если остались вопросы — задавайте их в комментариях или используйте официальные репозитории и форумы Standard Notes.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро