Несколько нод на одном сервере: изоляция и запуск. Часть 3.

donald

Модератор
Команда форума
Местный
Регистрация
29.09.2025
Сообщения
49
Разворачивание нескольких блокчейн-нód на одном сервере — задача не из тривиальных, но вполне выполнимая.
Главное — обеспечить полную изоляцию окружений, уникальные настройки и порты для каждой нóды, чтобы они не мешали друг другу.
Стандартная ситуация: разные проекты используют одинаковые порты (например, Cosmos SDK‐ноды по умолчанию слушают 26656, 26657 и другие), поэтому при запуске второй нóды без изменений появятся конфликты («порт уже занят»).
В такой ситуации Docker и Docker Compose выручают: каждая нода упакована в свой контейнер с собственными библиотеками и переменными (благодаря этому содержимое контейнеров не конфликтует между собой).

Организация каталогов

Прежде чем поднимать ноды, продумайте файловую структуру на сервере. Обычно создают корневую папку, например [COLOR=rgb(243, 121, 52)]~/nodes/[/COLOR] или [COLOR=rgb(243, 121, 52)]~/validator/[/COLOR], и в ней заводят по каталогу для каждой ноды: например, [COLOR=rgb(243, 121, 52)][SIZE=5]node1/[/SIZE][/COLOR], [COLOR=rgb(243, 121, 52)][SIZE=5]node2/[/SIZE][/COLOR] или назвать по сетям [COLOR=rgb(243, 121, 52)][SIZE=5]cosmos-hub/[/SIZE][/COLOR], [COLOR=rgb(243, 121, 52)][SIZE=5]osmosis/[/SIZE][/COLOR] и т.д. Внутри каждой директории держите конфиг и ключи этой конкретной ноды. Если вы используете Docker, можно предусмотреть в каждой папке и подкаталог[COLOR=rgb(243, 121, 52)][SIZE=5] data/[/SIZE][/COLOR] для монтирования тома с базой данных. Такая организация позволит не путаться: все файлы одной нóды останутся в одном месте. Это поможет быстро делать резервные копии или восстанавливать одну нóду без риска затронуть другие.

Docker и Docker Compose для изоляции

Docker позволяет упаковать каждую ноду в отдельный контейнер со всеми её зависимостями. Например, если для одной ноды требуются Go и curl, а для другой — Python и pip, то в контейнерах эти пакеты не пересекутся и не «замусорят» систему хоста. Контейнеры легче виртуальных машин: они делят ядро ОС хоста и позволяют запустить больше нод на одном сервере при тех же ресурсах.

После установки Docker можно либо использовать готовые образы нод из Docker Hub/Registry, либо собрать свой образ через Dockerfile. Например, если образ ноды называется [COLOR=rgb(243, 121, 52)][SIZE=5]mychain/node:latest[/SIZE][/COLOR], команду запуска можно дать так:
[SIZE=5]docker run -d --name mychain-node \[/SIZE]
-v /home/user/nodes/mychain-node/data:/data \
-p 26657:26657 \

[SIZE=5]mychain/node:latest[/SIZE]

Уникальные порты и конфиги

Ключевой момент — назначить каждой ноде собственные уникальные порты и конфигурации. Стандартные порты для узлов, основанных на Cosmos SDK, например: 26656 (P2P), 26657 (RPC), 26660 (Prometheus) и другие. Если вы запускаете две ноды разных сетей на одном сервере, у обеих окажутся одинаковые порты по умолчанию, и вторая нода упадёт с ошибкой вида «bind: address already in use». Поэтому при установке второй ноды переназначьте порты хотя бы на один из них (например, 27656, 27657 и т.д.).

В Cosmos SDK-проектах порты указываются сразу в трёх файлах: config.toml, app.toml и client.toml. В них меняют значения вроде laddr = "tcp://0.0.0.0:26656" или address = "tcp://0.0.0.0:9090". Изменения можно сделать вручную или автоматизировать командой sed. Важно: запишите, какие порты вы заняли, чтобы не забыть — это избавит от последующей путаницы.

Следите также, чтобы на одном сервере не запускать дважды одну и ту же ноду. Для разных проектов (или тестнета и мейннета одной сети) конфиги могут отличаться — прежде чем запускать, скопируйте папку конфигурации, поменяйте в ней порты и названия, чтобы не было пересечений.

Запуск и перезапуск нод

После того как каталог с конфигом готов и порты заданы, запускайте ноды. Если вы используете Docker Compose, просто перейдите в папку с docker-compose.yml и выполните docker-compose up -d. Это поднимет все сервисы в фоне. Для каждого контейнера Docker предлагает настроить политику перезапуска (restart: unless-stopped или always), чтобы нода автоматически поднималась при падении или перезагрузке сервера.

Если вы не используете контейнеры и ставите ноды нативно, рекомендуется организовать каждый запуск через отдельный systemd-сервис. Тогда можно будет управлять ими как обычными системными службами: sudo systemctl restart mychain-node.service. В этом случае важно, чтобы в описании сервиса прописывались разные бинарники и ключи или указывался параметр --home, указывающий на свою конфигурационную папку.

Важный принцип: изоляция конфигураций обеспечивает минимальное пересечение при перезапуске. Если одна нода падает или перезапускается, другая остаётся нетронутой. Логи можно смотреть отдельно: в Docker есть docker logs <container>, в Compose — docker-compose logs <service>.

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