Установка сервера · 15 min read · Oct 26, 2025

Как установить сервер Standard Notes на Rocky Linux 9

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

Этот учебник научит вас, как самостоятельно разместить сервер стандартных заметок на машине с Rocky Linux 9. Вы также узнаете, как активировать платные тарифы на сервере бесплатно и как включить загрузку файлов.

Предварительные требования

  • Сервер с Rocky Linux 9 с как минимум 2 ГБ ОЗУ.
  • Пользователь без прав root с правами sudo.
  • Полностью квалифицированное доменное имя, указывающее на сервер. Для нашего учебника мы будем использовать домен standardnotes.example.com. Вам понадобятся еще два доменных имени: одно для файлового сервера и второе для веб-приложения. Мы будем использовать домен snotes-files.example.com для файлового сервера и snotes-web.example.com для веб-приложения.
  • Все обновлено. $ sudo dnf update
  • Несколько пакетов, которые нужны вашей системе. $ sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils Некоторые из этих пакетов могут уже быть установлены на вашей системе.

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

Перед установкой любых пакетов первым шагом является настройка брандмауэра для открытия портов для HTTP и HTTPS. Rocky Linux использует брандмауэр Firewalld. Проверьте статус брандмауэра.

$ sudo firewall-cmd --state
running

Брандмауэр работает с различными зонами, и публичная зона является той, которую мы будем использовать по умолчанию. Перечислите все службы и порты, активные на брандмауэре.

$ sudo firewall-cmd --zone=public --list-all

Он должен показать следующий вывод.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Откройте порты HTTP и HTTPS в брандмауэре.

$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Проверьте статус брандмауэра еще раз.

$ sudo firewall-cmd --zone=public --list-all

Вы должны увидеть аналогичный вывод.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Сделайте все изменения постоянными и перезагрузите брандмауэр, чтобы применить изменения.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

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

Установите официальный репозиторий Docker.

$ sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Установите Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Включите и запустите демон Docker.

$ sudo systemctl enable docker --now

Проверьте статус службы Docker.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:35:00 UTC; 5s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 23273 (dockerd)
      Tasks: 9
     Memory: 34.0M
        CPU: 176ms
     CGroup: /system.slice/docker.service
             ??23273 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Apr 16 23:35:00 standard-notes systemd[1]: Starting Docker Application Container Engine...
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.050964934Z" level=info msg="Starting up"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.083526973Z" level=info msg="Loading containers: start."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.654481705Z" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.772647844Z" level=info msg="Loading containers: done."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793814339Z" level=info msg="Docker daemon" commit=60b9add containerd-snapshotter=false storage-driver=overlay2 version=26.0.1
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793962347Z" level=info msg="Daemon has completed initialization"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.827030005Z" level=info msg="API listen on /run/docker.sock"
Apr 16 23:35:00 standard-notes systemd[1]: Started Docker Application Container Engine.

Добавьте вашего системного пользователя в группу Docker, чтобы избежать использования sudo для выполнения команд Docker.

$ sudo usermod -aG docker $(whoami)

Войдите снова на сервер после выхода, чтобы применить изменения.

Проверьте изменения.

$ groups
navjot wheel docker

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

Rocky Linux 9 поставляется со старой версией Nginx. Вам нужно использовать официальный репозиторий Nginx, чтобы установить последнюю версию.

Создайте и откройте файл /etc/yum.repos.d/nginx.repo для редактирования.

$ sudo nano /etc/yum.repos.d/nginx.repo

Вставьте следующий код в него.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

После завершения сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Мы будем использовать основную версию Nginx и, следовательно, включили основной репозиторий в приведенном выше файле, установив enabled=1 в разделе mainline вместо стабильного. Вы можете выбрать любой из них.

Установите Nginx.

$ sudo dnf install nginx -y

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

$ nginx -v
nginx version: nginx/1.25.5

Включите и запустите службу Nginx.

$ sudo systemctl enable nginx --now

Проверьте статус службы.

$ sudo systemctl status nginx
? nginx.service - nginx - высокопроизводительный веб-сервер
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:41:23 UTC; 6s ago
       Docs: http://nginx.org/en/docs/
    Process: 4886 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4887 (nginx)
      Tasks: 3 (limit: 10819)
     Memory: 3.1M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??4887 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4888 "nginx: worker process"
             ??4889 "nginx: worker process"

Apr 16 23:41:23 standard-notes systemd[1]: Starting nginx - высокопроизводительный веб-сервер...
Apr 16 23:41:23 standard-notes systemd[1]: Started nginx - высокопроизводительный веб-сервер.

Шаг 4 - Установка SSL

Нам нужно установить Certbot для генерации SSL-сертификата. Мы будем использовать установщик пакетов Snapd для этого. Поскольку Rocky Linux не поставляется с ним, установите установщик Snapd. Он требует репозиторий EPEL (Дополнительные пакеты для корпоративного Linux) для работы.

Установите репозиторий EPEL.

$ sudo dnf install epel-release -y

Установите пакет Snapd.

$ sudo dnf install snapd -y

Включите и запустите службу Snap.

$ sudo systemctl enable snapd --now

Установите пакет Snap core и убедитесь, что ваша версия Snapd обновлена.

$ sudo snap install core && sudo snap refresh core

Создайте необходимые ссылки для работы Snapd.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Установите Certbot.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot может быть запущена, создав символическую ссылку на директорию /usr/bin.

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

Проверьте версию Certbot.

$ certbot --version
certbot 2.10.0

Запустите следующую команду для генерации SSL-сертификата.

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

Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/standardnotes.example.com на вашем сервере.

Нам нужно сделать то же самое для поддомена Files.

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

И в последний раз для веб-приложения.

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

Сгенерируйте сертификат Diffie-Hellman group.

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

Проверьте службу планировщика обновления Certbot.

$ systemctl list-timers

Вы найдете snap.certbot.renew.service как одну из запланированных служб.

NEXT                        LEFT          LAST                        PASSED      UNIT                        ACTIVATES                   ----------------------------------------------------------------------------------------------------------------------------------  
Wed 2024-04-17 00:00:00 UTC 5min left   Tue 2024-04-16 23:29:44 UTC 24min ago    logrotate.timer              logrotate.service
Wed 2024-04-17 00:31:26 UTC 36min left  -                           -            dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-17 11:00:00 UTC 11h left    -                           -            snap.certbot.renew.timer     snap.certbot.renew.service

Сделайте пробный запуск процесса, чтобы проверить, работает ли обновление SSL.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, вы готовы. Ваш сертификат будет автоматически обновляться.

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

Убедитесь, что вы находитесь в домашнем каталоге вашей системы.

$ cd ~

Создайте рабочий каталог для сервера Standard Notes и переключитесь на него.

$ mkdir standardnotes
$ cd ~/standardnotes

Скачайте файл примера окружения из репозитория Standard Notes на GitHub.

$ wget https://raw.githubusercontent.com/standardnotes/server/main/.env.sample

Создайте рабочий файл окружения из загруженного файла примера.

$ cp .env.sample .env

Вам понадобятся три ключа аутентификации и шифрования для настройки файла .env. Выполните следующую команду, чтобы сгенерировать три отдельных ключа и скопировать их вывод.

$ openssl rand -hex 32

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

$ openssl rand -hex 12

Откройте файл окружения для редактирования.

$ nano .env

Выберите надежный пароль для базы данных и добавьте его в переменную DB_PASSWORD.

######
# DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=changeme
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
# CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
# KEYS #
########

AUTH_JWT_SECRET=
AUTH_SERVER_ENCRYPTION_SERVER_KEY=
VALET_TOKEN_SECRET=

Добавьте ранее сгенерированные ключи и поместите их против трех переменных в разделе KEYS.

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

AUTH_SERVER_DISABLE_USER_REGISTRATION=true

Добавьте следующую переменную, чтобы определить URL-адрес файлов Standard Notes.

PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

Полный файл .env должен выглядеть следующим образом.

######
# DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
# CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
# KEYS #
########

AUTH_JWT_SECRET=52b354ad5d8f11c995b4eed33870a1a7afbbc84b8da61e0b583660b075d0390c
AUTH_SERVER_ENCRYPTION_SERVER_KEY=fce4fe78972c3407be47127aee57d67e86b84afb628020b7ab6999edb3c905f1
VALET_TOKEN_SECRET=50aad911a283f252713139667b6475ac105280a220e009e05f733cf785630ce5

AUTH_SERVER_DISABLE_USER_REGISTRATION=true
PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено, после завершения.

Скачайте скрипт инициализации Localstack из репозитория GitHub.

$ wget https://raw.githubusercontent.com/standardnotes/server/main/docker/localstack_bootstrap.sh

Дайте скрипту разрешения на выполнение.

$ chmod +x localstack_bootstrap.sh

Скачайте файл Docker Compose для сервера Standard Notes из репозитория GitHub.

$ wget https://raw.githubusercontent.com/standardnotes/server/main/docker-compose.example.yml

Создайте рабочий файл Docker compose из загруженного файла примера compose.

$ cp docker-compose.example.yml docker-compose.yml

Откройте его для редактирования.

$ nano docker-compose.yml

Измените значение для MYSQL_ROOT_PASSWORD и MYSQL_PASSWORD на пароль базы данных, который вы выбрали в файле .env ранее. Ваш файл Docker Compose должен выглядеть следующим образом.

services:
  server:
    image: standardnotes/server
    env_file: .env
    container_name: server_self_hosted
    restart: unless-stopped
    ports:
      - 3000:3000
      - 3125:3104
    volumes:
      - ./logs:/var/lib/server/logs
      - ./uploads:/opt/server/packages/files/dist/uploads
    networks:
      - standardnotes_self_hosted

  localstack:
    image: localstack/localstack:3.0
    container_name: localstack_self_hosted
    expose:
      - 4566
    restart: unless-stopped
    environment:
      - SERVICES=sns,sqs
      - HOSTNAME_EXTERNAL=localstack
      - LS_LOG=warn
    volumes:
      - ./localstack_bootstrap.sh:/etc/localstack/init/ready.d/localstack_bootstrap.sh
    networks:
      - standardnotes_self_hosted

  db:
    image: mysql:8
    container_name: db_self_hosted
    environment:
      - MYSQL_DATABASE=standard_notes_db
      - MYSQL_USER=std_notes_user
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
    expose:
      - 3306
    restart: unless-stopped
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/import:/docker-entrypoint-initdb.d
    networks:
      - standardnotes_self_hosted

  cache:
    image: redis:6.0-alpine
    container_name: cache_self_hosted
    volumes:
      - ./data/redis/:/data
    expose:
      - 6379
    restart: unless-stopped
    networks:
      - standardnotes_self_hosted

networks:
  standardnotes_self_hosted:
    name: standardnotes_self_hosted

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено, после завершения. Это завершает загрузку и настройку сервера Standard Notes.

Шаг 6 - Запуск сервера Standard Notes

Запустите следующую команду, чтобы запустить сервер.

$ docker compose up -d

Эта команда займет несколько минут для завершения. В это время процесс загрузит все соответствующие образы Docker и создаст контейнеры для всех служб. Он также заполнит базу данных и выполнит соответствующие миграции. Использование ЦП может резко возрасти на несколько минут, но вскоре должно снизиться.

Вы можете найти журналы сервера Standard Notes в каталоге logs. Вы можете проверить журналы процесса, используя следующую команду.

$ tail -f logs/*.log

Нажмите Ctrl + C, чтобы выйти из журналов. Вы можете проверить статус работающих контейнеров, используя любую из следующих команд.

$ docker compose ps
ИЛИ
$ docker ps

Вы получите аналогичный вывод.

NAME                     IMAGE                       COMMAND                  SERVICE      CREATED          STATUS                   PORTS
cache_self_hosted        redis:6.0-alpine            "docker-entrypoint.s…   cache        16 minutes ago   Up 5 minutes             6379/tcp
db_self_hosted           mysql:8                     "docker-entrypoint.s…   db           16 minutes ago   Up 5 minutes             3306/tcp, 33060/tcp
localstack_self_hosted   localstack/localstack:3.0   "docker-entrypoint.sh"   localstack   16 minutes ago   Up 5 minutes (healthy)   4510-4559/tcp, 4566/tcp, 5678/tcp
server_self_hosted       standardnotes/server        "docker-entrypoint.sh"   server       16 minutes ago   Up 5 minutes             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:3125->3104/tcp, :::3125->3104/tcp

Вы можете проверить состояние сервера, используя следующую команду.

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

Standard Notes по умолчанию использует порт 3000. Если вы настроили другой порт в файле .env, вам следует обновить это в приведенной выше команде.

Шаг 7 - Установка веб-приложения Standard Notes

Вы можете использовать существующее веб-приложение Standard Notes или разместить свое. Для нашего учебника мы будем самостоятельно размещать веб-приложение Standard Notes.

Установка Git

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

$ sudo dnf install git -y

Установка NodeJS

Следующий шаг — установка NodeJS. Мы установим версию Node 18.x LTS для этого. Выполните следующие команды для установки NodeJS.

$ curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
$ sudo dnf install -y nodejs

Подтвердите установку.

$ node --version
v18.20.2

Установка Yarn

Нам также нужен менеджер пакетов Yarn. Установите его с помощью Node.

$ sudo npm install --global yarn

Установка менеджера пакетов PM2.

Нам нужен PM2, чтобы помочь запустить веб-приложение Standard Notes как фоновую службу.

$ sudo npm install --global pm2

Установка веб-приложения

Создайте каталог для веб-приложения и переключитесь на него.

$ cd ~
$ mkdir snotes-app
$ cd ~/snotes-app

Скачайте приложение Standard Notes с GitHub.

$ git clone https://github.com/standardnotes/app.git .

Используйте Yarn для установки зависимостей. Игнорируйте любые предупреждения.

$ yarn install

Соберите пакеты для веб-приложения.

$ yarn build:web

Переключитесь в веб-каталог.

$ cd packages/web

Запустите веб-приложение с помощью PM2.

$ pm2 start "yarn start" --name api

Вы можете проверить статус службы, используя следующую команду.

$ pm2 status
[PM2] Starting /usr/bin/bash in fork_mode (1 instance)
[PM2] Done.
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0  ? api    ? default     ? N/A     ? fork    ? 15090    ? 0s     ? 0    ? online    ? 0%       ? 26.2mb   ? navjot   ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Приложение будет запущено и доступно через порт 3001. Мы будем использовать эту информацию для создания конфигурации Nginx для веб-приложения.

PM2 не перезапускает приложение при перезагрузке. Чтобы сделать это, нам нужно сгенерировать скрипт автозагрузки.

$ pm2 startup

Вы должны получить аналогичный вывод.

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Выполните команду, указанную в выводе.

$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Это создаст и включит файл службы systemd.

Сохраните процесс, чтобы он автоматически запускался при перезагрузке.

$ pm2 save

Шаг 8 - Настройка Nginx

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Создайте и откройте файл /etc/nginx/conf.d/standardnotes.conf для редактирования.

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

Вставьте следующий код в него. Замените standardnotes.example.com на ваше доменное имя. Мы установили значение переменной client_max_body_size на 50 МБ. Вы можете изменить его в соответствии с вашими требованиями.

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  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 off;
  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;
  resolver 8.8.8.8;
  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;
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Вышеуказанный файл предназначен для основного приложения Standard Notes. Далее нам нужно настроить другой файл для поддомена Files.

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

Вставьте следующий код в него. Замените snotes-files.example.com на ваше доменное имя. Мы установили значение переменной client_max_body_size на 50 МБ. Вы можете изменить его в соответствии с вашими требованиями.

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  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 off;
  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;
  resolver 8.8.8.8;
  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 nano /etc/nginx/conf.d/web-standardnotes.conf

Вставьте следующий код в него.

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name snotes-web.example.com;

  client_max_body_size 50M;

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

  ssl_certificate      /etc/letsencrypt/live/snotes-web.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/snotes-web.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/snotes-web.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 off;
  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;
  resolver 8.8.8.8;
  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-web.example.com;
    return 301   https://$host$request_uri;
}

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

$ sudo nginx -t

Перезапустите сервер Nginx, чтобы включить конфигурационные файлы.

$ sudo systemctl restart nginx

Шаг 9 - Настройка SELinux

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

$ sudo setsebool -P httpd_can_network_connect 1

Примените политику, чтобы разрешить Nginx предоставлять доступ к PostgreSQL.

$ sudo setsebool -P httpd_can_network_connect_db 1

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

Если вы откроете URL https://standardnotes.example.com в вашем браузере, вы должны увидеть следующий вывод.

Страница URL Standard Notes

Это означает, что ваш сервер работает. Чтобы использовать Standard Notes, вам нужно будет использовать официальные приложения. Для нашего учебника мы будем использовать их веб-приложение, но метод останется тем же для настольных и мобильных приложений.

Откройте URL https://snotes-web.example.com, чтобы получить доступ к веб-приложению. Нажмите на ссылку Создать бесплатную учетную запись в нижнем левом углу страницы и заполните свой адрес электронной почты и пароль. Нажмите на кнопку Расширенные функции, снимите галочку с опции Пользовательский сервер синхронизации , и заполните URL https://standardnotes.example.com в поле.

Создание учетной записи Standard Notes

Нажмите кнопку Далее, чтобы продолжить. Вам снова будет предложено ввести пароль.

Подтверждение пароля веб-приложения Standard Notes

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

Шаг 11 - Включение платных функций

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

Вам нужно выполнить следующую команду из директории Standard Notes, чтобы включить платные функции на стороне сервера в саморазмещенном приложении.

$ cd ~/standardnotes

$ docker compose exec db sh -c "MYSQL_PWD=\
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.