Установка 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 | Токен от BotFather | 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz |
| ADMIN_IDS | Ваш Telegram ID | 123456789 |
| 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
Что нужно изменить:
- Раскомментируйте строку external: true (уберите # в начале)
- Удалите строку 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;
}
Вставьте новые блоки СТРОГО ПЕРЕД этим последним блоком. Порядок в конце файла должен быть:
- Закрывающая скобка } блока sub.remna.xyz
- Новый блок для hooks домена
- Новый блок для cabinet домена
- Блок с ssl_reject_handshake on (самый последний!)

Вставляемые блоки (замените 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. Синхронизация и первый вход
- Откройте бота в Telegram -> Админ панель -> Remnawave -> Синхронизация -> Синхронизировать всех
- Откройте веб-панель в браузере: https://cabinet.vash.domain
- Нажмите кнопку входа через Telegram (Login Widget)
- Вы автоматически получите роль 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. Добавляйте только домен кабинета, без протокола и слеша. |
Последнее редактирование: