Из чего состоит установка: панель, подписка, нода
Remnawave не заменяет Xray, а оркестрирует его. При установке Remnawave вы поднимаете три логические части, физически — набор Docker-контейнеров:
- Панель (backend + админка) — API, база пользователей/хостов/конфигов, веб-интерфейс. Сюда вы заходите руками, здесь генерируются подписки.
- Страница подписки — отдельный контейнер (
remnawave/subscription-page), отдаёт клиенту ссылкуvless:/// base64-конфиг по своему домену. - Нода (
remnanode) — сам Xray, через который реально идёт трафик. Панель раздаёт ей конфигурацию и опрашивает по API.
Принцип, определяющий всю архитектуру: панель — «мозг», нода — «руки». Панель светить в интернет не обязательно (нестандартный домен + IP-фильтр на reverse-proxy), а нода по определению принимает соединения пользователей и потому первой попадает под блокировки. Отсюда и правило разносить их в проде — к нему вернёмся в конце.
Требования перед установкой Remnawave
Чек-лист, без которого установка Remnawave превращается в отладку в проде.
Сервер под панель:
- Linux — Debian 12 или Ubuntu 22.04/24.04 (самые беспроблемные под Docker).
- 2 GB RAM комфортно (1 GB — впритык: backend + Postgres + Redis), 1–2 vCPU, диск от 15–20 GB SSD. Нагрузка на CPU у панели низкая — она не гоняет трафик.
- Docker Engine + плагин
docker composev2. Проверка:docker --version && docker compose version.
Сервер под ноду:
- Отдельный VPS (или тот же — см. FAQ). Упор не в RAM, а в CPU и сетевой канал: ориентир — пара vCPU на несколько сотен активных пользователей, но бутылочное горлышко почти всегда аплинк и лимит трафика у хостера. Нужен «чистый» IP.
Домены и DNS (заранее):
- Домен панели (
admpanel.example.com) и домен подписки (sub.example.com). - A-записи на IP панели. На Cloudflare для ноды и прямых соединений Xray держите серое облако (DNS only) — оранжевый проксирующий режим ломает Reality/прямой TLS.
Порты: на панели свободны 80 и 443 (reverse-proxy выпускает Let's Encrypt). Заранее уберите системный nginx/apache с этих портов.
Честная оговорка: точный состав .env и имена переменных меняются между версиями (в проде сейчас ветка 2.x). Перед боевым запуском сверяйтесь с актуальной документацией Remnawave, а не с копипастой из старых гайдов.
Установка панели Remnawave через Docker
Штатный и единственный способ — Remnawave Docker: нативной сборки под систему нет, и это плюс — обновление и откат сводятся к смене тега образа.
1. Каталог и окружение.
mkdir -p /opt/remnawave && cd /opt/remnawave
# docker-compose.yml и.env.sample берём из официального репозитория Remnawave
cp.env.sample.env
2. Заполните .env. Ключевое (имена сверяйте с версией):
- секреты JWT и токен API — сгенерируйте случайные строки:
openssl rand -hex 32; - креды PostgreSQL:
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB; - домены панели и подписки;
- параметры Redis.
Дефолтные секреты — причина №1 сообщений «кто-то зашёл в мою панель». Не оставляйте их.
3. Запуск.
docker compose up -d
docker compose ps # все сервисы должны быть healthy
docker compose logs -f remnawave # проверяем, прошли ли миграции БД
В типовом стеке поднимаются backend, postgres, redis, контейнер страницы подписки и reverse-proxy (часто Caddy — он сам выпускает Let's Encrypt по домену из конфига). Если фронт на nginx — TLS настраиваете руками (certbot).
Обновление позже: docker compose pull && docker compose up -d — образы подтягиваются по тегу, тома с данными не трогаются.
4. Проверка. Панель открывается по https://admpanel.example.com. 502 или таймаут вместо неё — это почти всегда reverse-proxy или TLS, а не сам Remnawave (разбор ниже).
Первый вход и базовая настройка
После того как контейнеры healthy и домен резолвится:
- Создание админа. На чистой установке страница входа предложит зарегистрировать первого администратора — эндпоинт регистрации в норме доступен, только пока админа нет. Сделайте это сразу, пароль длинный, менеджер паролей обязателен.
- Config profile / inbound. Чтобы клиенты получали рабочие конфиги, заведите профиль Xray (inbound VLESS: Reality/XTLS или XHTTP — по вашей стратегии; сравнение протоколов — в отдельном материале) и хост, который панель отдаёт в подписке.
- Домен подписки. Убедитесь, что страница подписки открывается по своему домену и клиент (Happ, v2rayN, Streisand) успешно импортирует ссылку.
- Тестовый пользователь. Создайте юзера, откройте его подписку в клиенте. Соединения пока не будет — ноды нет, это ожидаемо. Её подключаем следующим шагом.
Установка и подключение ноды
Нода — отдельный контейнер remnanode, привязывается к панели не логином-паролем, а сертификатом, который генерирует сама панель.
1. В панели добавьте ноду: укажите её адрес (IP/домен) и порт. Панель выдаст строку SSL_CERT — это и есть привязка к вашей панели, скопируйте её целиком.
2. На сервере ноды поднимите её стек:
mkdir -p /opt/remnanode && cd /opt/remnanode
# docker-compose.yml с образом remnawave/node
# в.env вставьте SSL_CERT из панели и APP_PORT (порт, на который панель стучится к ноде)
docker compose up -d
docker compose logs -f
3. Откройте порты. Два вида: порт API ноды, к которому подключается панель (задан в APP_PORT), и порты inbound-ов Xray из вашего профиля. Закрытый порт в firewall/security group провайдера — самая частая причина «нода не поднимается»; сам ufw/облачный SG проверяйте отдельно от Docker.
4. Проверка связи. В панели статус ноды меняется на online, в логах ноды видно успешное рукопожатие. После этого тестовый пользователь получает рабочее соединение.
Совмещение: панель и нода спокойно живут на одном VPS для теста, но в проде разносятся — если заблокируют IP ноды, панель с базой пользователей и конфигов должна остаться нетронутой.
Типичные ошибки установки Remnawave
По убыванию частоты:
- Панель не открывается (502 / таймаут / нет HTTPS). В большинстве случаев виноват не Remnawave, а reverse-proxy: не резолвится домен, закрыты
80/443, Let's Encrypt не выпустил сертификат (порт 80 занят nginx/apache). Смотрите логи контейнера Caddy/nginx, а не backend. - Нода в статусе offline.
SSL_CERTскопирован не целиком или от другой панели; закрытAPP_PORTв SG провайдера; неверный адрес ноды; оранжевое облако Cloudflare.docker compose logsна ноде показывает, доходит ли до рукопожатия. - Ошибки миграций БД при старте. Обычно старый том Postgres от другой версии. Не удаляйте прод-данные вслепую: сначала бэкап тома (
docker run --rm -v remnawave_pg:/data... tar), потом разбор несовместимости. - Порты 80/443 заняты.
ss -tlnp | grep -E ':80|:443', затемsystemctl stop nginx apache2до запуска стека. - JWT/сессии слетают. Рассинхрон системного времени — включите NTP:
timedatectl set-ntp true.
Правило отладки: разделяйте слои. «Панель не работает», «нода не подключается» и «клиент не коннектится» — три разные проблемы, лечатся в разных местах.
После установки: заменяемость ноды
Всё online — но устойчивость это ещё не гарантирует, и риск не в самой Remnawave, а в IP ноды. Нода в ДЦ — это статичный адрес из хостинг-диапазона, и под моделью белых списков (пропускается трафик только к «разрешённым» подсетям) такие IP отваливаются целыми /24. Поэтому на этапе установки заложите:
- вторую ноду наготове — переключение хоста в панели делается в пару кликов;
- не завязывать всё на один IP/одну подсеть одного ДЦ;
- разнесённые панель и нода (см. выше), чтобы блок ноды не ронял управление.
Архитектурно устойчивость под белыми списками даёт не ДЦ-IP, а фронт через whitelisted-CDN: клиент ходит на адрес CDN из «белых» подсетей, а тот проксирует до ноды, и блок конкретного IP не убивает подключения. Как поставить Remnawave за CDN и почему для этого нужен XHTTP — отдельные материалы; здесь достаточно спроектировать так, чтобы «наружу» смотрел заменяемый слой, а не единственный сервер.