Page: Rus: Pre-configure the server to run the Universa node
2019-11-21 11:11
Нода Universa: предварительная конфигурация сервера
В настоящем документе описана процедура конфигурации сервера Linux для запуска на нём программного обеспечения Universa Node.
Сервер должен соответствовать требованиям к ОС и аппаратному обеспечению, указанным на Портале владельцев нод.
Необходимые пакеты
Последняя версия репозитория PostgreSQL
Сконфигурируйте источники APT PostgreSQL 10, как описано здесь.
Обязательные пакеты
Установите обязательные пакеты, необходимые для запуска и обслуживания ноды Universa.
apt-get install apache2-utils build-essential check-postgres curl dirmngr git haveged libpam-systemd libpq-dev libssl-dev lsb-release netfilter-persistent nginx-light postgresql postgresql-client pgtop rsync sudo wget vim hdparm net-tools
Java
Установка Oracle JDK из webupd более недоступна в связи с изменением лицензии Oracle. Есть два варианта:
Зарегистрируйтесь на сайте Oracle, скачайте и установите tar.gz-архив для Linux x64.
Установите пакет
openjdk-11-jdk
из репозитория Debian stretch-backports.
УСТАРЕВШИЙ МЕТОД
Установите webupd8.org пакеты Oracle Java для Debian:
su -
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java8-installer oracle-java8-set-default binfmt-support
exit
Откройте файл /etc/java-8-oracle/security/java.security
в текстовом редакторе. Измените строчку:
securerandom.source=file:/dev/random
на:
securerandom.source=file:/dev/./urandom
Сохраните изменения и закройте текстовый редактор. Подробнее смотрите здесь.
В случае OpenJDK 11 необходимо отредактировать файл /etc/java-11-openjdk/security/java.security
.
Другие пакеты
Рекомендуемые, но не обязательные пакеты:
cryptsetup
– для защиты частных ключей и других конфиденциальных данных, или вообще всей базы PostgreSQL, в зашифрованном разделе LUKS.certbot
– для получения бесплатных SSL-сертификатов для HTTP-сервера Nginx.
Nginx
Образцы conf-файлов конфигурации можно найти в приложенном архиве файлов конфигурации Nginx, где вместо фактического домена указано DOMAIN
.
Рекомендуется, чтобы каждая внешняя нода использовала свой персональный домен. Настоятельно рекомендуем использовать CloudFlare для защиты ноды, HTTPS и так далее. Для шифрования трафика между CloudFlare и нодой рекомендуем бесплатные SSL сертификаты “Let’s Encrypt” – для этого необходимо установить пакет certbot
.
Распакуйте образцы файлов из архива в /etc/nginx
, измените доменное имя (везде, где оно встречается), отредактируйте пути к SSL сертификатам, сгенерируйте dhparam, создайте символическую ссылку и перезагрузите Nginx:
ln -s /etc/nginx/sites-available/universa_node /etc/nginx/sites-enabled
openssl dhparam -out /etc/nginx/dhparam.pem 4096
nginx -t && nginx -s reload
Получение SSL сертификата при помощи certbot
При настройке ноды на использование бесплатных SSL сертификатов Let’s Encrypt необходимо принять следующие меры предосторожности:
До того, как вы получите первый SSL сертификат для своего узла, вы не можете использовать строку 8443 ssl
в конфигурационном файле Nginx (поскольку сертификата ещё нет), поэтому закомментируйте её на время.
Отредактируйте следующую команду, указав ваш домен, и получите сертификаты:
certbot certonly -d #{domain} --webroot -w /var/www/letsencrypt
После успешного выполнения раскомментируйте секцию, связанную с SSL, в файле Nginx и ещё раз перезапустите Nginx (service nginx reload
).
Дополнительная конфигурация
PostgreSQL
После установки всех пакетов создайте пользователя баз данных, от имени которого будет работать ПО Universa, пароль и название базы данных выберите по своему усмотрению.
CREATE USER universa PASSWORD '<PASSWORD>';
CREATE DATABASE universa_node WITH OWNER=universa;
Добавьте следующую строку в файл pg_hba.conf
; отредактируйте её, если вы изменили имя пользователя или базы данных:
local universa_node universa md5
Настройка postgresql.conf
Увеличьте число одновременных подключений в файле /etc/postgresql/10/main/postgresql.conf
:
max_connections = 500
Also, configure the memory-related settings, depending on your server RAM and disk type, so you have to change the numbers (refer to http://pgtune.leopard.in.ua/ and PostgreSQL documentation):
Кроме того, задайте настройки, относящиеся к памяти, с учётом объёма ОЗУ и типа диска вашего сервера, а также измените цифры (см. http://pgtune.leopard.in.ua/ и документацию PostgreSQL):
shared_buffers = 196MB
work_mem = 64MB
maintenance_work_mem = 256MB
max_wal_size = 8GB
Перезапустите сервер:
systemctl restart postgresql.service
Подготовьте специального пользователя для запуска службы
Добавьте пользователя deploy
для ноды. Обязательно используйте именно такое имя:
useradd -m -s /bin/bash deploy
Включите просмотр журналов systemd:
usermod -a -G systemd-journal deploy
Включите службу systemd для пользователя:
loginctl enable-linger deploy
Подготовьте файл службы systemd /home/deploy/.config/systemd/user/java.service
:
[Unit]
Description=Universa Java daemon
After=network.target
[Service]
StandardOutput=journal+console
StandardError=journal+console
Type=simple
WorkingDirectory=/home/deploy/universad/current
ExecStart=/usr/bin/java -jar /home/deploy/universad/current/app/uninode.jar -c /home/deploy/universad/current
TimeoutStartSec=15s
ExecStop=/bin/kill -TERM $MAINPID
TimeoutStopSec=10s
Restart=always
[Install]
WantedBy=default.target
Перезапустите systemd и запустите службу:
systemctl --user daemon-reload
systemctl --user enable java
Если вы настраиваете частную тестовую сеть и сразу несколько нод, то, с помощью утилиты uniclient подготовьте ключи для всех нод сети; в примере ниже используются 10 нод (для одной ноды понадобится только один ключ):
for n in $(seq 1 10); do uniclient -g node_$(printf "%04d" $n); done
Подготовьте конфигурацию в формате YAML, согласно примеру для первой ноды (node_number: 1
). Необходимо поменять домен node-1-test.example.com
и IP-адрес.
---
http_client_port: 2052
http_client_listen:
- 127.0.0.1
http_server_port: 2082
udp_server_port: 2700
database: jdbc:postgresql://localhost:5432/universa_node?user=universa&password=<PASSWORD>
node_number: 1
public_host: node-1-test.example.com
node_name: node-1-test.example.com
ip:
- 1.2.3.4
ipv6:
- 1111:2222:33:4::5555
Скомпилируйте .jar-файлы Universa-ноды в Gradle-конфигурации multi-jar:
gradle :universa_node:buildMultiJar -x test
Загрузите файлы .jar от ноды Universa в директорию ~/universad/current/app
.
Загрузите публичные ключи всех нод в ~/universad/current/config/keys
.
Загрузите файлы конфигурации всех нод в ~/universad/current/config/nodes
.
Загрузите файл конфигурации настраиваемой ноды в ~/universad/shared/config/config.yaml
.
Загрузите приватный ключ в директорию ~/universad/current/tmp
– для безопасности можно расположить её на файловой системе tmpfs или ramfs.
Теперь мы готовы запустить ноду как службу systemd:
systemctl --user start java
Доступ к сконфигурированной сети
Чтобы получить доступ к сконфигурированным нодам или сети, вам понадобится какое-то клиентское ПО вроде uniclient. Если вы настраиваете частную сеть (а не используете Mainnet), для доступа к сети такому клиенту наверняка понадобится файл сетевой топологии. Используйте приложенное приложение Topology builder, чтобы сгенерировать такой файл для вашей сети.
Полезные команды для управления
Чтобы проверить статус процесса:
systemctl --user status java
Чтобы просмотреть журнал в реальном времени («следовать» за логом, “follow”):
journalctl -f --user-unit java
Дополнительные настройки только для удалённо управляемых нод
SSH
Подготовьте файл authorized_keys
и добавьте в него приложенные публичные ключи SSH для пользователь deploy
(в вашей системе могут использоваться authorized_keys2
).
mkdir -m 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Сгенерируйте пару ключей SSH для пользователя deploy
:
ssh-keygen
Если вы управляете несколькими нодами, достаточно создать ключ один раз и скопировать его на другие ноды.
Файрволл и открытые порты
Должны быть открыты следующие порты:
tcp 22 или другой нестандартный порт, используемый sshd
tcp 80
tcp 8080
tcp 8443
tcp 2052
tcp 2082
udp 2700