Поиск по сайту:

Как установить стандартный сервер Notes на Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker и Docker Compose
  4. Шаг 3. Установите Nginx
  5. Шаг 4. Установите SSL
  6. Шаг 5. Загрузите и настройте стандартные заметки
  7. Шаг 6. Запустите стандартный сервер Notes
  8. Шаг 7. Настройка Nginx
  9. Шаг 8. Используйте стандартные примечания
  10. Шаг 9. Включите платные функции
  11. Шаг 10. Настройте сервер для загрузки файлов
  12. Шаг 11. Проверка загрузки файлов
  13. Заключение

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

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

Предпосылки

  • A server running Ubuntu 22.04 with a minimum of 2 GB of RAM.

  • A non-root user with sudo privileges.

  • The Uncomplicated Firewall(UFW) is enabled and running.

  • A Fully Qualified domain name pointed to the server. For our tutorial, we will be using the domain standardnotes.example.com. You will need another domain name for your file server. We will be using the domain snotes-files.example.com.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    

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

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

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

$ 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)

Шаг 2. Установите Docker и Docker Compose

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

$ 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

Обновите систему, чтобы включить репозиторий Dockers.

$ sudo apt update

Установите Докер.

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

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

Docker работает с повышенными привилегиями, поэтому вам придется часто использовать sudo для запуска команд. Лучше всего добавить свою учетную запись пользователя Linux в группу пользователей docker.

$ sudo usermod -aG docker ${USER}

Переменная $ {USER} выбирает текущую системную учетную запись, вошедшую в систему. Если вы не вошли в систему с пользователем, которому хотите предоставить привилегии, замените $ {USER} на имя пользователя.

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

$ su - $(USER)

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

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

Импортировать ключ подписи Nginxs.

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

Добавьте репозиторий для стабильной версии Nginx.

$ 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

Обновите системные репозитории.

$ sudo apt update

Установите Нгинкс.

$ sudo apt install nginx

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

$ nginx -v
nginx version: nginx/1.22.0

Шаг 4 — Установите SSL

Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена.

$ sudo snap install core

Установите Сертбот.

$ sudo snap install --classic certbot

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

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

Выполните следующую команду, чтобы сгенерировать SSL-сертификат.

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

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

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

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

Создайте групповой сертификат Диффи-Хеллмана.

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

Откройте файл /etc/letsencrypt/renewal/standardnotes.example.com.conf для редактирования.

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

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

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

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

Повторите тот же шаг для поддомена файлов, отредактировав файл /etc/letsencrypt/renewal/snotes-files.example.com.conf.

Мы создали сертификат SSL, используя автономную опцию Certbot. Он запускает свой веб-сервер для создания сертификата, что означает, что Nginx должен быть отключен во время обновления. Команды pre_hook и post_hook запускаются до и после обновления, чтобы автоматически закрыть и перезапустить сервер Nginx, не требуя ручного вмешательства.

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

$ sudo certbot renew --dry-run

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

Шаг 5. Загрузите и настройте стандартные заметки

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

$ cd ~

Клонируйте репозиторий Standard Notes Standalone.

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

Перейдите в загруженный каталог.

$ cd standalone

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

$ ./server.sh setup

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

$ 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

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

Затем откройте файл docker/auth.env.

$ nano  docker/auth.env

Измените значения следующих переменных.

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

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

Шаг 6. Запустите стандартный сервер 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

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

Шаг 7 — Настройте 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 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;
}

Сохраните файл, нажав 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 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;
}

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

$ sudo nginx -t

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

$ sudo systemctl restart nginx

Шаг 8 — Используйте стандартные заметки

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

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

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

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

Шаг 9. Включите платные функции

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

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

$ cd ~/standardnotes
$ bash ./server.sh create-subscription 

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

Шаг 10. Настройте сервер для загрузки файлов

Загрузка файлов — это платная функция Standard Notes. Мы включили пользовательский URL-адрес API для загрузки файлов. Но они все равно не будут работать. Чтобы заставить их работать, нам нужно предоставить соответствующие разрешения для каталога загрузки. Загрузки хранятся в каталоге ~/standardnotes/data/uploads. Выполните следующие команды, чтобы изменить разрешения.

$ chmod -R 775 data
$ mkdir -p data/uploads
$ sudo chmod -R 755 data/uploads
$ sudo chown -R 1001.1001 data/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 |
| standard_notes_db  |
+--------------------+
2 rows in set (0.00 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=""));

Здесь 10737418240 относится к общему количеству байтов, что соответствует 10 ГБ. Вы можете изменить этот номер на все, что вам нужно.

Выйдите из оболочки MySQL и контейнера базы данных.

mysql > exit

Шаг 11. Тестирование загрузки файлов

Войдите в веб-приложение Standard Notes и щелкните значок вложения в верхней строке.

Нажмите кнопку Загрузить файлы и выберите файл, который хотите загрузить. Файл будет успешно загружен, и вы сможете увидеть его в списке, снова щелкнув значок.

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

Щелкните ссылку Прикрепить к заметке, чтобы добавить изображение в заметку. Остальные опции говорят сами за себя.

Заключение

На этом мы завершаем наше руководство по установке и настройке сервера Standard Notes на компьютере с Ubuntu 22.04. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.