Установка сервера · 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 в вашем браузере, вы должны увидеть следующий вывод.

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

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

После входа в систему вы можете начать создавать заметки и использовать приложение.
Шаг 11 - Включение платных функций
На данный момент мы включили базовую функциональность для приложения Standard Notes. Однако вы можете активировать некоторые платные функции на стороне сервера, и Standard Notes позволяет делать это бесплатно. Это не активирует платные функции на стороне клиента, такие как Super Notes и Вложенные теги. Вы можете приобрести сильно уцененную подписку через план Standard Notes Offline, чтобы активировать их.
Вам нужно выполнить следующую команду из директории Standard Notes, чтобы включить платные функции на стороне сервера в саморазмещенном приложении.
$ cd ~/standardnotes
$ docker compose exec db sh -c "MYSQL_PWD=\Get new posts in your inbox
No spam. Unsubscribe anytime.