Установка Bedolaga Bot + Cabinet на сервер с Remnawave

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

Remna

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

Установка Bedolaga Bot + Cabinet на сервер с Remnawave (скрипт e-games) 🚀



Инструкция для установки Telegram-бота BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot и веб-панели Cabinet BEDOLAGA-DEV/bedolaga-cabinet на сервер, где уже установлена панель Remnawave скриптом e-games.

⚠️ Внимание! Инструкция актуальна для:
  • Панель Remnawave установлена скриптом e-games
  • Nginx работает внутри Docker-контейнера (remnawave-nginx)
  • Конфиг nginx лежит в /opt/remnawave/nginx.conf
  • Docker-compose панели лежит в /opt/remnawave/docker-compose.yml
  • Бот и панель на одном сервере



📋 Предварительные требования​


  • Сервер с Linux (Ubuntu), панель Remnawave установлена через скрипт e-games
  • API токен сгенерированный в панели Remnawave — полные права, максимальный срок
  • Токен Telegram-бота — создать в @BotFather
  • Ваш Telegram ID — узнать у @userinfobot
  • Два домена/субдомена, указывающих на IP сервера
  • Несколько сикрет токенов — сгенерировать заранее через:
    Bash:
    openssl rand -hex 32

🔑 Ключевые параметры​


ПараметрОписаниеПример
BOT_TOKENТокен от BotFather1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
ADMIN_IDSВаш Telegram ID123456789
WEBHOOK-доменДля получения обновлений от Telegram и платежекwebhuk.vash.domain
CABINET-доменДля веб-кабинета ботаcabinet.vash.domain
REMNAWAVE_API_KEYВАШ_API КЛЮЧ ИЗ ПАНЕЛИДлинный API ключ созданный руками в панели ремны



Шаг 1. Подготовка сертификатов 🔐


Создайте A-записи для двух поддоменов, направив их на IP вашего сервера.

Выпустите сертификаты средствами скрипта e-games:

Запускаем:

Bash:
remnawave_reverse

Выбираем: 9. Управление сертификатами домена -> 2. Сгенерировать новые сертификаты для другого домена -> Метод: ACME HTTP-01 (один домен, без wildcard)

Выпустите сертификаты на оба поддомена по очереди. Это пропишет перевыпуск сертификатов в cron, и они будут обновляться автоматически вместе с сертификатами панели.



Шаг 2. Клонируем файлы проекта 📥


Bash:
git clone https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
cd remnawave-bedolaga-telegram-bot



Шаг 3. Подготовка директорий 📁


Bash:
mkdir -p ./logs ./data ./data/backups ./data/referral_qr ./locales ./uploads
sudo chown -R 1000:1000 ./logs ./data ./locales ./uploads
sudo chmod -R u+rwX,go+rX ./logs ./data ./locales ./uploads



Шаг 4. Создаем конфиг .env (минимальный) 📝


⚠️ ВАЖНО: НЕ копируйте .env.example!

Файл .env.example содержит сотни строк с параметрами отключенных платежных систем (YooKassa, CryptoBot, Freekassa и др.). При копировании Pydantic парсит пустые строки типа YOOKASSA_SHOP_ID= как пустую строку "", а не как None. Проверка в коде "if self.YOOKASSA_SHOP_ID is not None" возвращает True для пустой строки, и бот пытается использовать незаполненные параметры — получаем ошибки валидации и бот не стартует.

Правильно: создайте минимальный .env с нуля, где для отключенных платежек указаны ТОЛЬКО флаги _ENABLED=false без параметров.

Bash:
nano .env

Вставьте следующее содержимое (замените значения в угловых скобках на свои):

Код:
# ===== TELEGRAM BOT =====
BOT_TOKEN=#ВАШ_ТОКЕН_ИЗ_BOTFATHER !!!!!!!!!!!!!!!!!!!
ADMIN_IDS=#ВАШ_TELEGRAM_ID !!!!!!!!!!!!!!!!!!!!!!!!!
SUPPORT_USERNAME=@support  # Не обязательно заполнять !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

# ===== БАЗА ДАННЫХ (Docker сам подхватит) =====
DATABASE_MODE=auto
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=remnawave_bot
POSTGRES_USER=remnawave_user
POSTGRES_PASSWORD=secure_password_123 # БД не светит наружу, можно поменять пароль если так будет спокойней, но не обязательно!!!!!!
REDIS_URL=redis://redis:6379/0

# ===== REMNAWAVE API (подключение через Docker сеть) =====
REMNAWAVE_API_URL=http://remnawave:3000
REMNAWAVE_API_KEY=#ВАШ_API_КЛЮЧ_ИЗ_ПАНЕЛИ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
REMNAWAVE_AUTH_TYPE=api_key

# ===== ОПЛАТА =====
TELEGRAM_STARS_ENABLED=true
TELEGRAM_STARS_RATE_RUB=1.79

# Остальные платежки выключены (просто для наглядного примера, не обязательный блок)
TRIBUTE_ENABLED=false
YOOKASSA_ENABLED=false
CRYPTOBOT_ENABLED=false
HELEKET_ENABLED=false
MULENPAY_ENABLED=false
PAL24_ENABLED=false
PLATEGA_ENABLED=false
FREEKASSA_ENABLED=false
KASSA_AI_ENABLED=false
WATA_ENABLED=false
CLOUDPAYMENTS_ENABLED=false

# ===== ПОДПИСКИ =====
SALES_MODE=classic
AVAILABLE_SUBSCRIPTION_PERIODS=30,90,180
AVAILABLE_RENEWAL_PERIODS=30,90,180
PRICE_30_DAYS=10000
PRICE_90_DAYS=30000
PRICE_180_DAYS=180000
TRAFFIC_SELECTION_MODE=fixed
FIXED_TRAFFIC_LIMIT_GB=0
PRICE_TRAFFIC_UNLIMITED=20000
DEFAULT_DEVICE_LIMIT=3

#ИЛИ ЖЕ ВТОРОЙ ВАРИАНТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  ВЫБЕРИ ТОЛЬКО ОДИН ВАРИАНТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# ===== ПОДПИСКИ =====
SALES_MODE=tariffs
TRAFFIC_SELECTION_MODE=fixed
FIXED_TRAFFIC_LIMIT_GB=0
PRICE_TRAFFIC_UNLIMITED=20000
DEFAULT_DEVICE_LIMIT=3


# ===== ТРИАЛ =====
TRIAL_DURATION_DAYS=3
TRIAL_TRAFFIC_LIMIT_GB=10
TRIAL_DEVICE_LIMIT=1

# ===== РЕЖИМ ЗАПУСКА (WEBHOOK) =====
BOT_RUN_MODE=webhook
WEBHOOK_URL=#https://webhuk.vash.domain  ВАШ ДОМЕН ДЛЯ ВЕБ ХУКОВ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WEBHOOK_PATH=/webhook
WEBHOOK_SECRET_TOKEN=# СГЕНЕРИРУЙ ЧЕРЕЗ openssl rand -hex 32 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WEBHOOK_DROP_PENDING_UPDATES=true

# ===== УВЕДОМЛЕНИЯ =====
ADMIN_NOTIFICATIONS_ENABLED=true
ADMIN_NOTIFICATIONS_CHAT_ID=-1001234567890   # Замени на ID твоего канала (-100) или свой личный TG ID !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

# Автоматическая синхронизация пользователей с панелью Remnawave
REMNAWAVE_AUTO_SYNC_ENABLED=true
REMNAWAVE_AUTO_SYNC_TIMES=03:00

# Шаблон описания пользователя в панели Remnawave
REMNAWAVE_USER_DESCRIPTION_TEMPLATE="Bot user: {full_name} {username}"
REMNAWAVE_USER_USERNAME_TEMPLATE="user_{telegram_id}"
REMNAWAVE_USER_DELETE_MODE=delete


# ===== БЕКАПЫ =====
BACKUP_AUTO_ENABLED=true
BACKUP_SEND_CHAT_ID=# П Р И М Е Р !!!!! -100123456789   # Замени на ID твоего канала  или СВОЙ TG ID !!!!!!!!!!!!!!!!!!!!!!!!!!!!
BACKUP_INTERVAL_HOURS=24
BACKUP_TIME=03:00
BACKUP_SEND_ENABLED=true

# ===== ПРОЧЕЕ =====
DEFAULT_LANGUAGE=ru
LANGUAGE_SELECTION_ENABLED=false
TZ=Europe/Moscow
LOG_LEVEL=INFO
ENABLE_LOGO_MODE=true
REFERRAL_PROGRAM_ENABLED=true
MAINTENANCE_AUTO_ENABLE=true
MAINTENANCE_MONITORING_ENABLED=true
VERSION_CHECK_ENABLED=true

# ===== WEB API (для Cabinet) =====
WEB_API_ENABLED=true
WEB_API_HOST=0.0.0.0
WEB_API_PORT=8080
WEB_API_ALLOWED_ORIGINS=# https://cabinet.vash.domain    В А Ш    Д О М Е Н    К А Б И Н Е Т А !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

# ===== CABINET (веб-панель) =====
CABINET_ENABLED=true
CABINET_URL=# https://cabinet.vash.domain В А Ш    Д О М Е Н    К А Б И Н Е Т А !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CABINET_JWT_SECRET=# СГЕНЕРИРУЙ ЧЕРЕЗ openssl rand -hex 32 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CABINET_ALLOWED_ORIGINS=# https://cabinet.vash.domain    В А Ш    Д О М Е Н    К А Б И Н Е Т А !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CABINET_EMAIL_AUTH_ENABLED=false
CABINET_EMAIL_VERIFICATION_ENABLED=false

💡 Пояснения по ключевым параметрам:​

  • REMNAWAVE_API_URL=http://remnawave:3000 — имя контейнера Remnawave. Узнать его можно командой docker ps | grep remna. Обращение идёт через Docker-сеть, протокол http (не https!)
  • Отключенные платежки — указаны ТОЛЬКО флаги _ENABLED=false. Параметры (YOOKASSA_SHOP_ID, CRYPTOBOT_API_TOKEN и т.д.) не пишем вообще. Pydantic оставит их как None и бот стартует без ошибок валидации.
  • REMNAWAVE_SECRET_KEY — нужен только когда бот на отдельном сервере от панели. В нашей схеме (один сервер, Docker-сеть) не нужен.
  • POSTGRES_PASSWORD=secure_password_123 — дефолтный пароль. База не проброшена наружу (нет ports в docker-compose), доступна только внутри Docker-сети. Для продакшена можно заменить.
  • WEB_API_ALLOWED_ORIGINS и CABINET_ALLOWED_ORIGINS — должны совпадать с доменом кабинета (для CORS).



Шаг 5. Подключаем контейнеры бота к сети Remnawave 🔗


Откройте на редактирование файл docker-compose.local.yml из папки бота.

Bash:
 nano docker-compose.local.yml

Что нужно изменить:
  1. Раскомментируйте строку external: true (уберите # в начале)
  2. Удалите строку driver: bridge из блока remnawave-network (внешняя сеть не требует указания драйвера)

Финальный вид блока networks должен быть:

Код:
networks:
  bot_network:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1350

  remnawave-network:
    name: remnawave-network
    external: true

Важно: имя сети remnawave-network должно точно совпадать с тем, что показала команда docker network ls | grep remna. Если у вас сеть называется иначе — укажите реальное имя.

Также убедитесь, что все сервисы (postgres, redis, bot) подключены к сети remnawave-network. В секции networks каждого сервиса должна быть строка - remnawave-network.

Сохраните файл (Ctrl+O, Enter, Ctrl+X).



Шаг 6. Установка фронтенда личного кабинета Cabinet 🖥️


Скачиваем официальный Docker-образ, создаём временный контейнер, копируем статические файлы на сервер, удаляем временный контейнер:

Bash:
docker pull ghcr.io/bedolaga-dev/bedolaga-cabinet:latest && \
docker create --name tmp_cabinet ghcr.io/bedolaga-dev/bedolaga-cabinet:latest && \
sudo mkdir -p /srv/cabinet && \
sudo docker cp tmp_cabinet:/usr/share/nginx/html/. /srv/cabinet/ && \
docker rm tmp_cabinet

Проверьте результат:

Bash:
ls -la /srv/cabinet/

Должны быть файлы: index.html, папки assets, fonts, miniapp.



Шаг 7. Настраиваем Nginx для бота и кабинета 🌐


7.1. Добавляем сертификаты и статику в docker-compose Remnawave 📦


⚠️ Важно: ВНИМАТЕЛЬНО !!! пропиши верно пути до сертификатов и не забудь пробросить папку внутрь изолированного Docker-контейнера!

НЕ УВЕРЕН? - СДЕЛАЙ БЭКАП!!

Создаём резервную копию:
Bash:
cp /opt/remnawave/docker-compose.yml /opt/remnawave/docker-compose.yml.bak

Если все пошло не по плану - откатись назад и рестартани контейнеры:

Bash:
cp /opt/remnawave/docker-compose.yml.bak /opt/remnawave/docker-compose.yml
cd /opt/remnawave && docker compose up -d --force-recreate remnawave-nginx


Откройте файл docker-compose панели: /opt/remnawave/docker-compose.yml

Bash:
nano /opt/remnawave/docker-compose.yml

Найдите сервис remnawave-nginx. Добавьте в секцию volumes новые строки для сертификатов ваших поддоменов и статики кабинета.

Было:

Код:
  remnawave-nginx:
    image: nginx:1.28
    container_name: remnawave-nginx
    hostname: remnawave-nginx
    <<: [*common, *logging]
    network_mode: host
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН САБКИ/fullchain.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН САБКИ/fullchain.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН САБКИ/privkey.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН САБКИ/privkey.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН ПАНЕЛИ РЕМНЫ/fullchain.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН ПАНЕЛИ РЕМНЫ/fullchain.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН ПАНЕЛИ РЕМНЫ/privkey.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН ПАНЕЛИ РЕМНЫz/privkey.pem:ro

Стало (добавлены 5 новых строк в конец):

Код:
  remnawave-nginx:
    image: nginx:1.28
    container_name: remnawave-nginx
    hostname: remnawave-nginx
    <<: [*common, *logging]
    network_mode: host
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН САБКИ/fullchain.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН САБКИ/fullchain.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН САБКИ/privkey.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН САБКИ/privkey.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН ПАНЕЛИ/fullchain.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН ПАНЕЛИ/fullchain.pem:ro
      - /etc/letsencrypt/live/ТВОЙ ДОМЕН ПАНЕЛИ/privkey.pem:/etc/nginx/ssl/ТВОЙ ДОМЕН ПАНЕЛИ/privkey.pem:ro
      - /etc/letsencrypt/live/ДОМЕН КАБИНЕТА/fullchain.pem:/etc/nginx/ssl/ДОМЕН КАБИНЕТА/fullchain.pem:ro
      - /etc/letsencrypt/live/ДОМЕН КАБИНЕТА/privkey.pem:/etc/nginx/ssl/ДОМЕН КАБИНЕТА/privkey.pem:ro
      - /etc/letsencrypt/live/ДОМЕН ВЕБХУКОВ/fullchain.pem:/etc/nginx/ssl/ДОМЕН ВЕБХУКОВ/fullchain.pem:ro
      - /etc/letsencrypt/live/ДОМЕН ВЕБХУКОВ/privkey.pem:/etc/nginx/ssl/ДОМЕН ВЕБХУКОВ/privkey.pem:ro
      - /srv/cabinet:/srv/cabinet:ro # НЕ ЗАБУДЬ ДОБАВИТЬ В КОНЦЕ! и стереть коммент.!!!!!!!!!!!!!!!!!!!!!!!!!

Замените cabinet-domain и hooks-domain на реальные имена ваших поддоменов.

Сохраните файл.

✅ Сразу проверим синтаксис YAML и структуры Compose!​


Bash:
docker compose -f /opt/remnawave/docker-compose.yml config --quiet
  • Нет вывода = файл валиден.
  • Есть ошибка = будет показано точное место проблемы (строка, отступ, неизвестный ключ).

7.2. Пересоздаём контейнер nginx с новыми volumes 🔁


Обязательно сделайте это ДО проверки nginx -t! Иначе nginx не увидит новые сертификаты и выдаст ошибку "No such file or directory".

Bash:
cd /opt/remnawave && docker compose up -d --force-recreate remnawave-nginx

Проверьте что сертификаты примонтированы:

Bash:
docker exec remnawave-nginx ls -la /etc/nginx/ssl/

Должны увидеть папки для panel, sub и ваших новых поддоменов.

7.3. Добавляем server blocks в nginx.conf 📄


⚠️Важно: Тут можно накосячить и положить nginx - СДЕЛАЙТЕ БЭКАП перед тем как ломать ручками!!!

Делаем бэкап конфига:
Bash:
cp /opt/remnawave/nginx.conf /opt/remnawave/nginx.conf.bak

Если всё пойдет не по плану - откатываемся к дефолтному конфигу и рестартуем веб сервер.!
Bash:
cp /opt/remnawave/nginx.conf.bak /opt/remnawave/nginx.conf
docker exec remnawave-nginx nginx -s reload

Откройте файл: /opt/remnawave/nginx.conf

Bash:
nano /opt/remnawave/nginx.conf

Найдите конец файла. Последний блок выглядит так:

Код:
server {
    listen 443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
}

Вставьте новые блоки СТРОГО ПЕРЕД этим последним блоком. Порядок в конце файла должен быть:
  1. Закрывающая скобка } блока sub.remna.xyz
  2. Новый блок для hooks домена
  3. Новый блок для cabinet домена
  4. Блок с ssl_reject_handshake on (самый последний!)

1785582512885.png

Вставляемые блоки (замените hooks-domain и cabinet-domain на ваши реальные домены):

Код:
# ==========================================
# Домен для вебхуков (hooks)
# ==========================================
server {
    listen 443 ssl;
    http2 on;
    server_name hooks-domain;

    ssl_certificate /etc/nginx/ssl/hooks-domain/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/hooks-domain/privkey.pem;

    client_max_body_size 32m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_buffering off;
        proxy_request_buffering off;
    }
}

# ==========================================
# Домен для кабинета (cabinet)
# ==========================================
server {
    listen 443 ssl;
    http2 on;
    server_name cabinet-domain;

    ssl_certificate /etc/nginx/ssl/cabinet-domain/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/cabinet-domain/privkey.pem;

    root /srv/cabinet;
    index index.html;

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml;

    location /api/ {
        rewrite ^/api/(.*) /$1 break;
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        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;
    }

    location ~* \.(?:js|css|woff2?|ttf|ico|png|jpe?g|svg|webp|gif)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    location / {
        try_files $uri /index.html;
        add_header Cache-Control "no-cache, must-revalidate";
    }
}

Важные моменты:
  • Используйте listen 443 ssl; на одной строке и http2 on; на следующей. Не пишите "listen 443 ssl http2;" в одной строке — это устаревший синтаксис, nginx 1.28 выдаст warning.
  • SSL-пути указываются через /etc/nginx/ssl/... — это пути внутри контейнера, куда примонтированы сертификаты.
  • Блок с ssl_reject_handshake on должен оставаться самым последним — он отклоняет подключения по неизвестным доменам.

7.4. Проверяем и перезапускаем Nginx 🧪


Проверяем конфигурацию:

Bash:
docker exec remnawave-nginx nginx -t

Ожидаемый результат:

Код:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если всё ок — перезагружаем:

Bash:
docker exec remnawave-nginx nginx -s reload



Шаг 8. Настройка Telegram Login Widget 🔑


Откройте @BotFather -> Выберите вашего бота -> Bot Settings -> Login Widget -> Set Domain

Добавьте только домен кабинета (без протокола и слеша): cabinet.vash.domain

НЕ добавляйте домен вебхуков — он не используется для авторизации пользователей.

* При методе авторизация Switch to OAuth 2.0 Login. -Инструкция от пользователя @San: https://remna.xyz/threads/telegram-oidc-avtorizacija-reshenie.12/



Шаг 9. Запуск бота ▶️


Bash:
cd /root/remnawave-bedolaga-telegram-bot
docker compose -f docker-compose.local.yml up -d --build

Проверьте статус контейнеров:

Bash:
docker ps | grep remnawave_bot

Должны быть 3 контейнера со статусом Up:
  • remnawave_bot — бот
  • remnawave_bot_db — PostgreSQL
  • remnawave_bot_redis — Redis

Проверьте логи на наличие ошибок:

Bash:
cd /root/remnawave-bedolaga-telegram-bot && docker compose -f docker-compose.local.yml logs --tail=300 | grep -iE "error|warn|critical|exception|traceback|permission|failed|overcommit"

Ошибок нет? — всё работает, вы молодец. ✅

Смотреть все логи без фильтра:

Bash:
cd /root/remnawave-bedolaga-telegram-bot && docker compose -f docker-compose.local.yml logs

Логи в реальном времени:

Bash:
cd /root/remnawave-bedolaga-telegram-bot && docker compose -f docker-compose.local.yml logs -f




Шаг 10. Синхронизация и первый вход 🔄


  1. Откройте бота в Telegram -> Админ панель -> Remnawave -> Синхронизация -> Синхронизировать всех
  2. Откройте веб-панель в браузере: https://cabinet.vash.domain
  3. Нажмите кнопку входа через Telegram (Login Widget)
  4. Вы автоматически получите роль Superadmin



Шаг 11. Рекомендации для продакшена ⚡


11.1. Redis overcommit_memory 🧠


Redis может падать при нехватке памяти без этой настройки. Это стандартная рекомендация от разработчиков Redis, безопасно для системы.

Bash:
echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

11.2. Автосинхронизация (опционально) 🔄


В .env добавьте:

Код:
REMNAWAVE_AUTO_SYNC_ENABLED=true
REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00

Или выполняйте вручную через бота/кабинет по необходимости.

11.3. Обновление бота в будущем ⬆️


Bash:
cd /root/remnawave-bedolaga-telegram-bot
git pull
docker compose -f docker-compose.local.yml up -d --build

11.4. Как рестартануть бота в случае измений в конфиге .env!!! 🔄


Для безопасного рестарта бота, с сохранением уже имеющихся в БД данных (пользователей, подписок и т.д) выполни:

Bash:
cd /root/remnawave-bedolaga-telegram-bot && docker compose -f docker-compose.local.yml up -d



Решение распространенных проблем 🛠️


ПроблемаРешение
Бот не стартует, ошибки валидации платежекВ .env для отключенных платежек должны быть ТОЛЬКО флаги _ENABLED=false. Не копируйте .env.example — создайте минимальный .env по инструкции выше.
nginx: cannot load certificate "No such file or directory"Сначала добавьте bind mounts в /opt/remnawave/docker-compose.yml, затем пересоздайте контейнер через docker compose up -d --force-recreate remnawave-nginx. Только после этого делайте nginx -t.
nginx: "listen ... http2" directive is deprecatedЗамените "listen 443 ssl http2;" на "listen 443 ssl;" + "http2 on;" на отдельной строке. Это актуальный синтаксис для nginx 1.28+.
PermissionError: /app/localesВыполните: sudo chown -R 1000:1000 locales logs data uploads
network remnawave-network not foundПроверьте имя сети командой docker network ls | grep remna. Укажите реальное имя в docker-compose.local.yml.
Бот не может подключиться к API RemnawaveПроверьте имя контейнера командой docker ps | grep remna. В .env должно быть http://remnawave:3000 (а не remnawave-api). Протокол http, не https.
Веб-панель белый экран / 404Проверьте статику командой ls -la /srv/cabinet/. Должны быть index.html, assets, fonts, miniapp. Также проверьте что WEB_API_ALLOWED_ORIGINS совпадает с доменом кабинета.
Redis WARNING Memory overcommitВыполните: echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
В Telegram Login Widget не принимает доменУбедитесь что добавляете домен через BotFather -> Bot Settings -> Login Widget -> Set Domain. Добавляйте только домен кабинета, без протокола и слеша.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Верх