[FAQ] С чего начать? Требования и установка Remnowave

Статус
Закрыто для дальнейших ответов.

Remna

Administrator
Команда форума

Remnawave: Полное руководство по запуску панели управления прокси-серверами​



Введение: Что такое Remnawave и зачем она нужна​

В экосистеме современных прокси-решений административная панель — это не просто "веб-интерфейс", а центральный узел управления бизнесом. От её выбора зависит масштабируемость, безопасность клиентов, удобство биллинга и, в конечном счёте, репутация проекта.
Remnawave — это современная панель управления прокси-серверами, разработанная как ответ на ограничения существующих решений (3X-UI, Hiddify, Marzban и PasarGuard). Её ключевые отличия:
  • Промышленная архитектура. Разделение на независимые компоненты: панель управления (API + веб-интерфейс) и ноды (Xray-core). Это позволяет масштабировать инфраструктуру горизонтально, добавляя новые серверы для трафика без остановки панели.
  • Высокая производительность. Оптимизированный стек способен обрабатывать до 10 000 активных сессий на одной ноде при корректной настройке.
  • Безопасность по умолчанию. API-first подход, изоляция компонентов, обязательный reverse proxy и строгая аутентификация между панелью и нодами.
  • Экосистема. Активно развивающаяся интеграция с платёжными системами, Telegram-ботами для продажи подписок и мониторингом.
Remnawave создана для тех, кто строит коммерческий или серьёзный некоммерческий проект и готов инвестировать время в правильную архитектуру вместо быстрых, но хрупких решений.



Архитектурный принцип​

Remnawave состоит из двух функционально независимых частей:
  1. Панель (Core) — управляет пользователями, конфигурациями, базой данных, предоставляет API и веб-интерфейс.
  2. Нода (Node) — непосредственно пропускает пользовательский трафик через Xray-core.
⚠️ Важно: Для продакшена рекомендуется размещать панель управления и ноды на отдельных серверах! Совмещение компонентов на одном хосте допустимо для небольших проектов, тестовых контурах, однако в этом случае отсутствует изоляция ролей и единая точка отказа сохраняется: проблемы с нодой могут повлиять на доступность панели, а компрометация сервера затронет как трафик, так и управляющую инфраструктуру.



Минимальные и рекомендуемые ресурсы​

КомпонентМинимумРекомендовано (продакшен)Примечание
Панель2 CPU / 2 ГБ RAM4 CPU / 4 ГБ RAMБД PostgreSQL требует отдельного внимания к I/O
Нода1 CPU / 1 ГБ RAM2 CPU / 2 ГБ RAMЗависит от количества одновременных подключений!
Диск (панель)20 ГБ SSD40+ ГБ NVMeБД и логи растут со временем
Диск (нода)10 ГБ HDD/SSD20 ГБ HDD/SSDЛоги трафика при включённом логировании



Что потребуется перед установкой​

  • Приобрести два и более сервера (VPS/VDS) у надёжного хостера. Рекомендуется выбирать разные дата-центры и, желательно, разные юрисдикции для панели и нод. Специально для вас мы подготовили список самых выгодных хостингов, подробнее читайте в нашей статье Выбор хостинга (VPS/VDS сервера, домены)
  • Приобрести доменное имя (для панели управления, подписок, нод).
  • Немного терпения и понимания базовых процессов Linux.
Для комфортной работы вам понадобится домен и минимум 3–4 поддомена. example.com — пример названия вашего домена.
  • panel.example.com — веб-панель управления
  • sub.example.com — страница подписок для клиентов
  • node.example.com — основная нода (можно использовать и основной домен для Reality/SelfSteal)
  • По желанию: отдельные поддомены под каждую ноду (de1.example.com, nl1.example.com и т.д.)
После покупки домена зайдите в настройки DNS и создайте A-записи для всех поддоменов, указав IP-адрес вашего VPS.
📖 Читайте отдельную статью Выбор хостинга (VPS/VDS сервера, домены)



Способ №1: Ручная установка (по официальной документации)​

Весь описанный ниже процесс продемонстрирован в видео:


Установите Docker, если он еще не установлен:
Bash:
sudo curl -fsSL https://get.docker.com | sh

Создание каталога проекта
Bash:
mkdir /opt/remnawave && cd /opt/remnawave

Загрузка docker-compose.yml
Bash:
curl -o docker-compose.yml https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/docker-compose-prod.yml

Загрузка .env
Bash:
curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample

Генерация JWT и API секретов​

JWT_AUTH_SECRET и JWT_API_TOKENS_SECRET используются для аутентификации и связанных с ней функций безопасности. Сгенерируйте надёжные ключи:
Bash:
sed -i "s/^JWT_AUTH_SECRET=.*/JWT_AUTH_SECRET=$(openssl rand -hex 64)/" .env && sed -i "s/^JWT_API_TOKENS_SECRET=.*/JWT_API_TOKENS_SECRET=$(openssl rand -hex 64)/" .env

Генерация паролей​

Bash:
sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 64)/" .env && sed -i "s/^WEBHOOK_SECRET_HEADER=.*/WEBHOOK_SECRET_HEADER=$(openssl rand -hex 64)/" .env

⚠️ Важно: Настоятельно рекомендуется изменить пароль PostgreSQL по умолчанию.

Изменение пароля PostgreSQL​

Bash:
pw=$(openssl rand -hex 24) && sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env && sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^\@]*\(@.*\)|\1$pw\2|" .env

Настройка доменов​

Откройте файл .env и обновите следующие переменные:
  • FRONT_END_DOMAIN — доменное имя, под которым будет доступна панель. Пример: panel.yourdomain.com.
  • SUB_PUBLIC_DOMAIN — пока что просто укажите домен панели с /api/sub в конце. Пример: panel.yourdomain.com/api/sub.

Запуск контейнеров​

Bash:
docker compose up -d && docker compose logs -f -t
Через несколько секунд вы должны увидеть примерно такой вывод:

Установка Reverse Proxy (обязательно)​

⚠️ Важно: Для корректной работы панели Remnawave необходим обратный прокси-сервер. Не предоставляйте доступ к сервисам из общедоступного интернета. Используйте только 127.0.0.1 для работы с сервисами Remnawave.
Теперь нужно защитить панель по HTTPS и скрыть внутренний порт. Зачем нужен reverse proxy?
  • Безопасность: SSL-шифрование защищает трафик между вами и панелью.
  • Скрытие порта: внешние пользователи видят только 443 (HTTPS), а не 3000.
  • Дополнительная защита от атак.
Официальная документация предлагает на выбор несколько прокси-серверов. В этом примере мы остановимся на Nginx. (С установкой остальных вариантов можно ознакомиться здесь)

Обзор​

В данном руководстве используется Nginx в качестве обратного прокси для доступа к панели Remnawave. В процессе настройки необходимо:
  • Привязать доменное имя к серверу.
  • Выпустить SSL-сертификат.
  • Настроить Nginx для проксирования запросов к панели Remnawave.
⚠️ Важно: Для продолжения необходим зарегистрированный домен.



Для получения SSL-сертификата рекомендуется использовать acme.sh.
⚠️ Важно: Данный раздел описывает выпуск сертификата только для домена панели управления.

Установка зависимостей​
Bash:
sudo apt-get install cron socat

Установка acme.sh​
Замените EMAIL на ваш адрес электронной почты:
Bash:
curl https://get.acme.sh | sh -s email=EMAIL && source ~/.bashrc

Создание каталога для сертификатов​
Bash:
mkdir -p /opt/remnawave/nginx && cd /opt/remnawave/nginx

Выпуск сертификата​
Замените DOMAIN на ваш реальный домен.
⚠️ Важно: Рекомендуем не использовать доменные зоны .ru, .su и .рф, так как ZeroSSL может их не поддерживать. Порт 8443 должен быть открыт!
Bash:
acme.sh --issue --standalone \
-d 'DOMAIN' \
--key-file /opt/remnawave/nginx/privkey.key \
--fullchain-file /opt/remnawave/nginx/fullchain.pem \
--alpn \
--tlsport 8443 \
--reloadcmd "docker exec remnawave-nginx nginx -s reload"

После выпуска сертификата установите его для автообновления:
Bash:
acme.sh --install-cert \
-d 'DOMAIN' \
--key-file /opt/remnawave/nginx/privkey.key \
--fullchain-file /opt/remnawave/nginx/fullchain.pem \
--reloadcmd "docker exec remnawave-nginx nginx -s reload"
Теперь сертификат будет автоматически продлеваться.

Создайте файл /opt/remnawave/nginx/nginx.conf и замените REPLACE_WITH_YOUR_DOMAIN на ваш домен:
NGINX:
upstream remnawave {
    server remnawave:3000;
}

server {
    server_name REPLACE_WITH_YOUR_DOMAIN;

    listen 443 ssl reuseport;
    listen [::]:443 ssl reuseport;

    http2 on;

    location / {
        proxy_http_version 1.1;
        proxy_pass http://remnawave;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    ssl_protocols TLSv1.2 TLSv1.3;

    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:
                 DHE-RSA-CHACHA20-POLY1305;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_certificate "/etc/nginx/ssl/fullchain.pem";
    ssl_certificate_key "/etc/nginx/ssl/privkey.key";
    ssl_trusted_certificate "/etc/nginx/ssl/fullchain.pem";

    ssl_stapling on;
    ssl_stapling_verify on;

    resolver 1.1.1.1
             1.0.0.1
             8.8.8.8
             8.8.4.4
             208.67.222.222
             208.67.220.220 valid=60s;

    resolver_timeout 2s;

    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;

    gzip_types
        application/atom+xml
        application/geo+json
        application/javascript
        application/x-javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rdf+xml
        application/rss+xml
        application/xhtml+xml
        application/xml
        font/eot
        font/otf
        font/ttf
        image/svg+xml
        text/css
        text/javascript
        text/plain
        text/xml;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name _;

    ssl_reject_handshake on;
}

Создайте файл /opt/remnawave/nginx/docker-compose.yml:
YAML:
services:
  remnawave-nginx:
    image: nginx:1.28
    container_name: remnawave-nginx
    hostname: remnawave-nginx

    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
      - ./privkey.key:/etc/nginx/ssl/privkey.key:ro

    restart: always

    ports:
      - "0.0.0.0:443:443"

    networks:
      - remnawave-network

networks:
  remnawave-network:
    name: remnawave-network
    driver: bridge
    external: true

Запуск контейнера Nginx​
Bash:
docker compose up -d && docker compose logs -f -t

Проверка​

Откройте домен в браузере. Если настройка выполнена корректно, откроется страница авторизации Remnawave. На данном этапе нужно будет установить свой пароль панели.
Посмотреть вложение 1

Возможные проблемы​

  • Проверьте DNS-запись.
  • Убедитесь, что открыты порты 443 и 8443.
  • Проверьте успешность выпуска сертификата.
  • Убедитесь, что контейнер remnawave-nginx запущен.
  • Проверьте существование сети remnawave-network.
  • Убедитесь, что в nginx.conf указан правильный домен.



Установка Subscription Page​


⚠️ Bundled-установка означает, что страница подписки будет установлена на том же сервере, где уже работает Remnawave Panel.



Отредактируйте файл /opt/remnawave/.env:
Bash:
cd /opt/remnawave && nano .env
Найдите параметр SUB_PUBLIC_DOMAIN= и измените его на домен страницы подписки. Пример:
INI:
SUB_PUBLIC_DOMAIN=subscription.domain.com
⚠️ Важно: Указывайте только домен без http:// или https://
После изменения перезапустите контейнер панели:
Bash:
cd /opt/remnawave && docker compose down remnawave && docker compose up -d && docker compose logs -f

Создайте каталог и файл docker-compose.yml:
Bash:
mkdir -p /opt/remnawave/subscription && cd /opt/remnawave/subscription && nano docker-compose.yml

YAML:
services:
    remnawave-subscription-page:
        image: remnawave/subscription-page:latest
        container_name: remnawave-subscription-page
        hostname: remnawave-subscription-page
        restart: always

        env_file:
            - .env

        ports:
            - '127.0.0.1:3010:3010'

        networks:
            - remnawave-network

networks:
    remnawave-network:
        driver: bridge
        external: true

Создайте файл .env:
Bash:
mkdir -p /opt/remnawave/subscription && cd /opt/remnawave/subscription && nano .env

В панели Remnawave создайте API-токен: Remnawave Settings → API Tokens

Заполните файл .env:
INI:
APP_PORT=3010
REMNAWAVE_PANEL_URL=http://remnawave:3000
REMNAWAVE_API_TOKEN=API_TOKEN_FROM_REMNAWAVE
Где:
  • APP_PORT — порт контейнера страницы подписки.
  • REMNAWAVE_PANEL_URL — адрес панели Remnawave внутри Docker-сети.
  • REMNAWAVE_API_TOKEN — API-токен, созданный в панели.

Полный список параметров .env​

INI:
APP_PORT=3010

### URL панели Remnawave
### Может быть:
### http://remnawave:3000
### или
### https://panel.example.com

REMNAWAVE_PANEL_URL=http://remnawave:3000

REMNAWAVE_API_TOKEN=API_TOKEN_FROM_REMNAWAVE

# Пользовательский префикс URL
# Например:
# CUSTOM_SUB_PREFIX=sub
#
# Не используйте "/" в начале и конце

CUSTOM_SUB_PREFIX=

# Поддержка ссылок Marzban

MARZBAN_LEGACY_LINK_ENABLED=false
MARZBAN_LEGACY_SECRET_KEY=

# Если используется дополнение
# "Caddy with security"

CADDY_AUTH_API_TOKEN=

Bash:
docker compose up -d && docker compose logs -f

⚠️ Важно: Remnawave и его компоненты не поддерживают работу через подкаталог. Нельзя использовать: location /subscription { ... } Страница подписки должна открываться через отдельный домен или поддомен.
Примеры:
Для кастомного пути используйте параметр CUSTOM_SUB_PREFIX.

Выпуск SSL-сертификата для поддомена подписок​

Bash:
acme.sh --issue --standalone \
-d 'SUBSCRIPTION_PAGE_DOMAIN' \
--key-file /opt/remnawave/nginx/subdomain_privkey.key \
--fullchain-file /opt/remnawave/nginx/subdomain_fullchain.pem \
--alpn \
--tlsport 8443 \
--reloadcmd "docker exec remnawave-nginx nginx -s reload"

Добавление конфигурации в Nginx​

Откройте конфигурацию Nginx:
Bash:
cd /opt/remnawave/nginx && nano nginx.conf
Добавьте новый upstream-блок:
NGINX:
upstream remnawave {
    server remnawave:3000;
}

upstream remnawave-subscription-page {
    server remnawave-subscription-page:3010;
}
Затем добавьте новый server-блок (замените SUBSCRIPTION_PAGE_DOMAIN на ваш домен):
NGINX:
server {
    server_name SUBSCRIPTION_PAGE_DOMAIN;

    listen 443 ssl;
    listen [::]:443 ssl;

    http2 on;

    location / {
        proxy_http_version 1.1;
        proxy_pass http://remnawave-subscription-page;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    ssl_protocols TLSv1.2 TLSv1.3;

    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:
                 DHE-RSA-CHACHA20-POLY1305;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_certificate "/etc/nginx/ssl/subdomain_fullchain.pem";
    ssl_certificate_key "/etc/nginx/ssl/subdomain_privkey.key";
    ssl_trusted_certificate "/etc/nginx/ssl/subdomain_fullchain.pem";

    ssl_stapling on;
    ssl_stapling_verify on;

    resolver 1.1.1.1
             1.0.0.1
             8.8.8.8
             8.8.4.4
             208.67.222.222
             208.67.220.220 valid=60s;

    resolver_timeout 2s;

    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;

    gzip_types
        application/atom+xml
        application/geo+json
        application/javascript
        application/x-javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rdf+xml
        application/rss+xml
        application/xhtml+xml
        application/xml
        font/eot
        font/otf
        font/ttf
        image/svg+xml
        text/css
        text/javascript
        text/plain
        text/xml;
}

Обновление docker-compose Nginx​

Добавьте новые сертификаты в раздел volumes:
YAML:
services:
    remnawave-nginx:
        image: nginx:1.28
        container_name: remnawave-nginx
        hostname: remnawave-nginx

        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
            - ./fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
            - ./privkey.key:/etc/nginx/ssl/privkey.key:ro

            - ./subdomain_fullchain.pem:/etc/nginx/ssl/subdomain_fullchain.pem:ro
            - ./subdomain_privkey.key:/etc/nginx/ssl/subdomain_privkey.key:ro

        restart: always

        ports:
            - '0.0.0.0:443:443'

        networks:
            - remnawave-network

networks:
    remnawave-network:
        name: remnawave-network
        driver: bridge
        external: true

Перезапуск Nginx​

Bash:
docker compose down && docker compose up -d && docker compose logs -f

После завершения настройки страница подписки будет доступна по адресу:
Код:
https://subdomain.domain.com/<shortUuid>
Пример:
Код:
https://subscription.example.com/AbCdEf12

Страница подписки настраивается через: Remnawave Dashboard → Subpage Builder
Доступные возможности:
  • Добавление поддержки различных VPN-клиентов.
  • Изменение текста и инструкций на разных языках.
  • Добавление собственного логотипа.
  • Указание названия компании.
  • Добавление ссылок поддержки.
  • Настройка рекомендуемых приложений.
  • Кастомизация внешнего вида страницы.



Установка Remnawave Node​


Remnawave Node — это лёгкий контейнер, включающий в себя Xray-core.
⚠️ Важно: Панель Remnawave не содержит встроенный Xray-core, поэтому для полноценной работы необходимо установить Remnawave Node на отдельный сервер.



Если Docker ещё не установлен:
Bash:
sudo curl -fsSL https://get.docker.com | sh

Bash:
mkdir /opt/remnanode && cd /opt/remnanode

В панели управления перейдите: Nodes → Management
Нажмите кнопку + и заполните форму создания ноды. Особое внимание обратите на поле Node Port.
Этот порт будет использоваться Remnawave Node для получения внутренних API-запросов от панели Remnawave. В других целях данный порт не используется.
После заполнения формы нажмите Copy docker-compose.yml. Скопированная конфигурация понадобится на следующем этапе.

Bash:
cd /opt/remnanode && nano docker-compose.yml
Вставьте конфигурацию, которую скопировали из панели управления, и сохраните файл.

Bash:
docker compose up -d && docker compose logs -f -t

Вернитесь в карточку создания ноды в панели управления. Нажмите Next, выберите нужный Config Profile, затем нажмите Create.
⚠️ Важно: После завершения настройки рекомендуется ограничить доступ к NODE_PORT через файрвол и разрешить подключения только с IP-адреса панели Remnawave.

Можно подключить дополнительные файлы geosite и geoip, смонтировав их в каталог /usr/local/share/xray/.
⚠️ Важно:
1. В примере используются условные названия файлов geo-zapret.dat и ip-zapret.dat. Реальные названия и категории будут отличаться.
2. Маршрутизация, настроенная на сервере (ноде), влияет только на серверный трафик и не затрагивает клиентские DIRECT-подключения.
3. Не монтируйте весь каталог целиком — это перезапишет стандартные geosite и geoip базы Xray. Подключайте каждый файл отдельно.

Пример docker-compose:
YAML:
services:
    remnanode:
        container_name: remnanode
        hostname: remnanode
        image: remnawave/node:latest
        restart: always
        network_mode: host

        environment:
            - NODE_PORT=2222
            - SECRET_KEY="supersecretkey"

        volumes:
            - './geo-zapret.dat:/usr/local/share/xray/geo-zapret.dat'
            - './ip-zapret.dat:/usr/local/share/xray/ip-zapret.dat'

Пример использования в конфигурации Xray:
JSON:
{
  "routing": {
    "rules": [
      {
        "type": "field",
        "domain": [
          "ext:geo-zapret.dat:zapret"
        ],
        "inboundTag": [
          "VLESS_TCP_REALITY"
        ],
        "outboundTag": "NOT_RU_OUTBOUND"
      },
      {
        "type": "field",
        "ip": [
          "ext:ip-zapret.dat:zapret"
        ],
        "inboundTag": [
          "VLESS_TCP_REALITY"
        ],
        "outboundTag": "NOT_RU_OUTBOUND"
      }
    ]
  }
}

Для хранения логов на хостовой системе подключите директорию:
YAML:
services:
    remnanode:
        container_name: remnanode
        hostname: remnanode
        image: remnawave/node:latest
        restart: always
        network_mode: host

        environment:
            - NODE_PORT=2222
            - SECRET_KEY="supersecretkey"

        volumes:
            - '/var/log/remnanode:/var/log/remnanode'

Пример секции логирования в Xray:
JSON:
{
  "log": {
    "error": "/var/log/remnanode/error.log",
    "access": "/var/log/remnanode/access.log",
    "loglevel": "warning"
  }
}

Создайте каталог для логов и настройте logrotate:
Bash:
mkdir -p /var/log/remnanode
Bash:
sudo apt update && sudo apt install logrotate
Bash:
nano /etc/logrotate.d/remnanode

Содержимое файла:
Код:
/var/log/remnanode/*.log {
      size 50M
      rotate 5
      compress
      missingok
      notifempty
      copytruncate
}

Проверка конфигурации:
Bash:
logrotate -vf /etc/logrotate.d/remnanode

⚠️ Важно: Обязательно настройте ротацию логов, иначе они со временем заполнят весь диск сервера.

⚠️ Важно: Этот раздел необходим только при использовании TLS-транспортов (например, VLESS-Vision-TLS). Для Reality сертификаты не требуются.
Если в конфигурации Xray используются сертификаты, их необходимо смонтировать в контейнер панели Remnawave. Внутри контейнера предусмотрен каталог /var/lib/remnawave/configs/xray/ssl/.

Добавьте volume в docker-compose панели:
YAML:
remnawave:
  image: remnawave/backend:latest
  container_name: remnawave
  hostname: remnawave
  restart: always

  ports:
    - '127.0.0.1:3000:3000'

  env_file:
    - .env

  networks:
    - remnawave-network

  volumes:
    - '/opt/remnawave/nginx:/var/lib/remnawave/configs/xray/ssl'

  depends_on:
    remnawave-db:
      condition: service_healthy
    remnawave-redis:
      condition: service_healthy

После отправки конфигурации на ноду панель автоматически прочитает сертификаты и передаст их в Remnawave Node.

Пример использования сертификатов в Xray:
JSON:
{
  "certificates": [
    {
      "keyFile": "/var/lib/remnawave/configs/xray/ssl/privkey.key",
      "certificateFile": "/var/lib/remnawave/configs/xray/ssl/fullchain.pem"
    }
  ]
}
⚠️ Важно: Обратите внимание на расширения файлов: .key и .pem. Они должны соответствовать реальным сертификатам.

Поздравляем!​

Если вы дошли до этого этапа — вы установили панель, страницу подписок и ноды. Далее можно переходить к настройкам хостов и выдаче подписок клиентам!






Способ №2: Установка скриптами​

Если вы не хотите вручную устанавливать панель, ноды, Subscription Page, Nginx и SSL-сертификаты, можно воспользоваться готовыми автоматическими установщиками.
Оба проекта являются сторонними решениями и не входят в официальную документацию Remnawave.

E-game — Remnawave Reverse Proxy​

Ссылка на проект:
Команда установки:
Bash:
bash <(curl -Ls https://raw.githubusercontent.com/eGamesAPI/remnawave-reverse-proxy/refs/heads/main/install_remnawave.sh)

Что устанавливает:
  • Remnawave Panel
  • Remnawave Node
  • Subscription Page
  • Nginx Reverse Proxy
  • SSL-сертификаты
  • UFW Firewall
  • BBR-оптимизацию сети
  • Маскировку трафика через SelfSteal

Режимы установки:
  • Панель и нода на одном сервере
  • Панель и ноды на разных серверах
⚠️ Важно: Для полноценной установки рекомендуется заранее подготовить домен и несколько поддоменов. Проект поддерживает автоматическую работу с Cloudflare API и ACME-сертификатами.

Плюсы​

  • Максимально автоматизированная установка.
  • Установка панели, ноды и подписочной страницы за один запуск.
  • Автоматическая настройка Reverse Proxy.
  • Автоматическая настройка SSL.
  • Подходит новичкам.
  • Поддерживается режим распределённой инфраструктуры.

Минусы​

  • Большое количество автоматических изменений в системе.
  • Сложнее разбираться в настройках после установки.
  • Обновления зависят от автора скрипта.
  • Для понимания возникающих проблем всё равно желательно знать структуру Remnawave.
⚠️ Важно: Сам автор указывает, что проект создан как образовательный пример по настройке Reverse Proxy и Nginx. Использование осуществляется на свой риск.

DigneZzZ — Remnawave Scripts​

Ссылка на проект: Проект представляет собой набор утилит для автоматизации работы с Remnawave, RemnaNode и сопутствующими сервисами.

Возможности проекта:
  • Установка и обслуживание Remnawave.
  • Установка RemnaNode.
  • Мониторинг сервисов.
  • Управление логами.
  • Автоматическая ротация логов.
  • Дополнительные сетевые инструменты.
  • Интеграция с WARP.
  • Интеграция с Tor.
  • Интеграция с NetBird VPN.

Примеры команд мониторинга:
Bash:
remnawave status
remnanode status
selfsteal status

remnawave logs --follow
docker stats

Плюсы​

  • Более гибкий подход.
  • Большой набор дополнительных инструментов.
  • Удобное сопровождение после установки.
  • Интеграция с WARP и NetBird.
  • Развитая система логирования и мониторинга.

Минусы​

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

Сравнение скриптов​

КритерийE-gameDigneZzZ
Простота установки★★★★★★★★★☆
Автоматизация★★★★★★★★★☆
Гибкость настройки★★★☆☆★★★★★
Подходит новичкам★★★★★★★★★☆
Дополнительные инструменты★★★☆☆★★★★★
Мониторинг и обслуживание★★★☆☆★★★★★

Что выбрать?​

  • Если нужна максимально простая установка "нажал кнопку — получил готовую панель" — выбирайте E-game.
  • Если нужен набор инструментов для дальнейшего администрирования, мониторинга, работы с WARP, Tor и NetBird — выбирайте DigneZzZ.
  • Для первого знакомства с Remnawave проще начать с E-game.
  • Для долгосрочного сопровождения инфраструктуры интереснее выглядит набор скриптов DigneZzZ.

 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Верх