Как установить стандартный сервер Notes на Ubuntu 22.04
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker и Docker Compose
- Шаг 3. Установите Nginx
- Шаг 4. Установите SSL
- Шаг 5. Загрузите и настройте стандартные заметки
- Шаг 6. Запустите стандартный сервер Notes
- Шаг 7. Настройка Nginx
- Шаг 8. Используйте стандартные примечания
- Шаг 9. Включите платные функции
- Шаг 10. Настройте сервер для загрузки файлов
- Шаг 11. Проверка загрузки файлов
- Заключение
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 domainsnotes-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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.