Как установить стандартный сервер Notes в Rocky Linux 9
На этой странице
- Предварительные условия
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker и Docker Compose.
- Шаг 3. Установите Nginx.
- Шаг 4. Установите SSL
- Шаг 5. Загрузите и настройте стандартные заметки
- Шаг 6. Запустите стандартный сервер Notes
Шаг 7. Установите стандартное веб-приложение Notes
- Установить Git
- Установите NodeJS
- Установить пряжу
- Установите менеджер пакетов PM2.
- Установите веб-приложение
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
Установите Докер.
$ 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
в разделе основной версии вместо стабильной. Вы можете выбрать любой из них.
Установите Нгинкс.
$ 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 - high performance web server
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 - high performance web server...
Apr 16 23:41:23 standard-notes systemd[1]: Started nginx - high performance web server.
Шаг 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 и убедитесь, что ваша версия 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
Установите Сертбот.
$ 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 -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 -d snotes-files.example.com
И наконец, снова о веб-приложении.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d snotes-web.example.com
Создайте сертификат группы Диффи-Хеллмана.
$ 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. Загрузите и настройте стандартные заметки
Убедитесь, что вы находитесь в домашнем каталоге вашей системы.
$ cd ~
Создайте рабочий каталог для Standard Notes Server и переключитесь на него.
$ 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-адрес стандартных файлов заметок.
PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com
Полный файл .env
должен выглядеть следующим образом.
######
# DB #
######
DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=<YourDBPassword>
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 на основе загруженного примера файла компоновки.
$ 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=<YourDBPassword>
- MYSQL_PASSWORD=<YourDBPassword>
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. Запустите стандартный сервер Notes
Выполните следующую команду, чтобы запустить сервер.
$ docker compose up -d
Выполнение этой команды займет несколько минут. За это время процесс извлечет все соответствующие образы Docker и создаст контейнеры для всех сервисов. Он также заполнит базу данных и выполнит соответствующие миграции. Загрузка ЦП может резко возрасти на пару минут, но вскоре она должна снизиться.
Журналы сервера Standard Notes можно найти в каталоге logs
. Вы можете проверить журналы процессов, используя следующую команду.
$ tail -f logs/*.log
Нажмите Ctrl + C, чтобы выйти из журналов. Вы можете проверить состояние запущенных контейнеров, используя любую из следующих команд.
$ docker compose ps
OR
$ 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
Стандартные заметки по умолчанию используют порт 3000. Если вы настроили другой порт в файле .env
, вам следует обновить его с помощью приведенной выше команды.
Шаг 7. Установите стандартное веб-приложение Notes
Вы можете использовать существующее веб-приложение Standard Notes или разместить свое. В нашем руководстве мы будем размещать веб-приложение Standard Notes самостоятельно.
Установить 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. Установите его с помощью 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. Используйте стандартные заметки
Если вы откроете URL-адрес https://standardnotes.example.com
в своем браузере, вы увидите следующий вывод.
Это означает, что ваш сервер запущен и работает. Чтобы использовать стандартные заметки, вам необходимо использовать официальные приложения. В нашем руководстве мы будем использовать их веб-приложение, но метод останется одинаковым для настольных и мобильных приложений.
Откройте URL-адрес https://snotes-web.example.com
, чтобы получить доступ к веб-приложению. Нажмите ссылку Создать бесплатную учетную запись в левом нижнем углу страницы и введите свой адрес электронной почты и пароль. Нажмите кнопку Дополнительные функции, снимите флажок с параметра «Пользовательский сервер синхронизации» и введите URL-адрес https://standardnotes.example.com
в поле коробка.
Нажмите кнопку Далее, чтобы продолжить. Вам будет предложено ввести пароль еще раз.
После входа в систему вы можете начать создавать заметки и использовать приложение.
Шаг 11 – Включите платные функции
На данный момент мы включили базовую функциональность приложения Standard Notes. Однако вы можете активировать некоторые платные серверные функции, а Standard Notes позволяет делать их бесплатно. При этом не будут активированы дополнительные функции на стороне клиента, такие как суперзаметки и вложенные теги. Вы можете приобрести подписку со значительной скидкой в рамках плана Standard Notes Offline, чтобы активировать их.
Вам необходимо запустить следующую команду из каталога Standard Notes, чтобы включить дополнительные функции на стороне сервера в локальном приложении.
$ cd ~/standardnotes
$ docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
'INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);' \
"
$ docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
'INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\"), subscription_id=1, subscription_type=\"regular\";' \
"
Перезагрузите веб-приложение, и платные функции должны быть активированы для вашей учетной записи. Чтобы активировать функции на стороне клиента, откройте настройки приложения, выберите меню Основные >> Автономная активация и введите код активации, который вы получили при покупке автономного плана.
Шаг 12. Настройте сервер для загрузки файлов.
Загрузка файлов — это платная функция Standard Notes, которая не будет работать без приобретения автономного плана. Мы включили собственный URL-адрес API для загрузки файлов. Но они все равно не будут работать. Чтобы они работали, нам нужно предоставить соответствующие разрешения каталогу загрузок. Загрузки хранятся в каталоге ~/standardnotes/uploads
. Выполните следующие команды, чтобы изменить разрешения.
$ sudo chmod -R 775 data
$ sudo chmod -R 755 uploads
$ sudo chown -R 1001.1001 uploads
Теперь Standard Notes устанавливает нулевой лимит загрузки для каждого пользователя. Это означает, что ни один пользователь не сможет загружать файлы, если ему не будет предоставлена квота вручную. Поэтому последним шагом в обеспечении работоспособности загрузки файлов является включение файловой квоты для платной учетной записи пользователя. Мы можем сделать это, выполнив SQL-запрос внутри контейнера базы данных.
Войдите в оболочку MySQL внутри контейнера базы данных.
$ docker exec -it db-standalone mysql -u std_notes_user -p
Enter password:
Внутри оболочки MySQL давайте проверим список баз данных.
mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| standard_notes_db |
+--------------------+
3 rows in set (0.01 sec)
Переключитесь на базу данных Standard Notes.
mysql > use standard_notes_db;
Выполните следующую команду SQL, чтобы добавить квоту на файлы размером 10 ГБ для платного пользователя, активированного выше.
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 "));
Здесь 10737418240 относится к общему количеству байтов, что соответствует 10 ГБ. Вы можете изменить этот номер на все, что вам нужно.
Выйдите из оболочки MySQL и контейнера базы данных.
mysql > exit
Шаг 13. Обновите стандартный сервер Notes и веб-приложение.
Первым шагом в обновлении Standard Notes Server является остановка и удаление существующих контейнеров.
$ cd ~/standardnotes
$ docker compose stop
$ docker compose remove --orphans
Загрузите последние версии .env
, localstack_bootstrap.sh
и файлы компоновки Docker из репозитория GitHub. Внесите необходимые изменения и замените существующие файлы обновленными.
Запустите контейнеры Сервера еще раз.
$ docker compose up -d
Обновленный сервер синхронизации запущен.
Перейдите в каталог веб-приложения.
$ cd ~/snotes-app
Перейдите в корневой каталог веб-приложения.
$ cd packages/web
Остановить существующий процесс.
$ pm2 stop api
Вернитесь в основной каталог приложения.
$ cd ~/snotes-app
Загрузите последние изменения из репозитория GitHub.
$ git pull
Вернитесь в веб-каталог.
$ cd packages/web
Запустите процесс.
$ pm2 start api
Ваше веб-приложение должно быть обновлено.
Заключение
На этом завершается наше руководство по установке и настройке сервера Standard Notes на компьютере с Rocky Linux 9. Если у вас есть вопросы, задавайте их в комментариях ниже.