На странице
  1. База знаний
  2. Панели

Docker-compose

Рабочие compose-файлы бота, панели, кабинета, сабпейджа.

Пруфов: 91Обновлено 17.09.2026Исходник 10 мин чтения

Период 23.08–07.09.2025 — Bedolaga v2.0.x–2.2.x, Remnawave 2.1.x

  • Бот v2.4.2 пруф — postgres15-alpine + redis7-alpine (--maxmemory 256mb --maxmemory-policy allkeys-lru), bot: build:. env DOCKER_ENV, DATABASE_MODE:auto, TZ:Europe/Moscow, volumes logs/data/locales/app-config.json/miniapp/vpn_logo.png, ports WEB_API_PORT:8080, TRIBUTE:8081, YOOKASSA:8082, CRYPTOBOT:8083, PAL24:8084, WATA:8085, HELEKET:8086, network bot_network 172.20.0.0/16.
  • Бот v2.6.x unified пруф — один порт 127.0.0.1:8080:8080, healthcheck curl -f http://localhost:8080/health/unified, сеть remnawave-network external 172.30.0.0/16 пруф.
  • Remnawave панель eGames пруф — remnawave: network_mode: service:remnawave-scheduler, scheduler 127.0.0.1:3000,3001, db postgres16, redis valkey7.2, subscription-page REMNAWAVE_PANEL_URL=http://remnawave-scheduler:3000 APP_PORT=3010, nginx host.
  • Caddy до unified: webhook.domain.com { handle /tribute-webhook* {reverse_proxy localhost:8081} ... /yookassa-webhook→8082 /pal24→8084 /health→8081/health } пруф; selfsteal caddy:2.9.1 network_mode:host пруф; Cloudflare DNS-challenge Dockerfile+Caddyfile пруф; unified api.domain.com {encode gzip zstd; @config path /app-config.json; reverse_proxy localhost:8080} и miniapp.domain.com + webhook.domain.com → remnawave_bot:8080 пруф.
  • Nginx Gy9vin вебхуки пруф; MiniApp v2.4.2 server { listen 80,443 ssl; root /var/www/remnawave-miniapp; location =/miniapp/app-config.json {CORS}; location /miniapp/ {proxy_pass http://remnawave_bot:8080/miniapp/} } пруф; unified upstream remnawave_bot_unified 127.0.0.1:8080 и YooKassa IP allow пруф.

Период 12.11.2025–01.01.2026 — Bedolaga v2.7–2.9.4, Remnawave 2.3–2.4

Бот отдельно (канонический 2.9.x)

services:
  postgres:
    image: postgres:15-alpine
    container_name: remnawave_bot_db
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot}
      POSTGRES_USER: ${POSTGRES_USER:-remnawave_user}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123}
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
    volumes: [postgres_data:/var/lib/postgresql/data]
    networks: [bot_network]
  redis:
    image: redis:7-alpine
    container_name: remnawave_bot_redis
    restart: unless-stopped
    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
    volumes: [redis_data:/data]
    networks: [bot_network]
  bot:
    build: .
    container_name: remnawave_bot
    restart: unless-stopped
    depends_on: {postgres: {condition: service_healthy}, redis: {condition: service_healthy}}
    env_file: [.env]
    environment:
      DOCKER_ENV: "true"
      DATABASE_MODE: "auto"
      POSTGRES_HOST: "postgres"
      POSTGRES_PORT: "5432"
      REDIS_URL: "redis://redis:6379/0"
      TZ: "Europe/Moscow"
    volumes:
      - ./logs:/app/logs:rw
      - ./data:/app/data:rw
      - ./locales:/app/locales:rw
      - ./vpn_logo.png:/app/vpn_logo.png:ro
    ports:
      - "${WEB_API_PORT:-8080}:8080"
    networks: [bot_network]
networks:
  bot_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
          gateway: 172.20.0.1

пруф

Бот с панелью (external сеть панели)

services:
  bot:
    build: .
    networks: [remnawave-network]
networks:
  remnawave-network:
    name: remnawave-network
    external: true

пруф REMNAWAVE_API_URL=http://remnawave:3000.

Subscription-page (отдельно / 2.4.4 с токеном)

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

пруф

  remnawave-subscription-page:
    image: remnawave/subscription-page:latest
    container_name: remnawave-subscription-page
    hostname: remnawave-subscription-page
    restart: always
    depends_on: {remnawave: {condition: service_healthy}}
    environment:
      - REMNAWAVE_PANEL_URL=http://remnawave:3000
      - SUBSCRIPTION_UI_DISPLAY_RAW_KEYS=true
      - APP_PORT=3010
      - META_TITLE="Remnawave Subscription"
      - META_DESCRIPTION="page"
      - REMNAWAVE_API_TOKEN=пупупу
    ports: ['127.0.0.1:3010:3010']
    networks: [remnawave-network]
    logging: {driver: 'json-file', options: {max-size: '30m', max-file: '5'}}

пруф Панель от eGames — compose c postgres-18, remnawave-nginx host-режим, remnawave-network пруф.

Miniapp монтирование

volumes: ["/var/www/remnawave-miniapp:/miniapp:ro"]  # [id=79204](https://t.me/c/2941121338/79204)
./miniapp:/miniapp:ro       # [id=124041](https://t.me/c/2941121338/124041)
./miniapp:/app/miniapp:ro   # [id=124957](https://t.me/c/2941121338/124957)

Caddy selfsteal для ноды (два порта)

{
    https_port {$SELF_STEAL_PORT_TCP}
    https_port {$SELF_STEAL_PORT_XHTTP}
    default_bind 127.0.0.1
    servers {
        listener_wrappers {
            proxy_protocol { allow 127.0.0.1/32 }
            tls
        }
    }
    auto_https disable_redirects
}
:{$SELF_STEAL_PORT_TCP} { tls internal; respond 204 }
:{$SELF_STEAL_PORT_XHTTP} { tls internal; respond 204 }
http://{$SELF_STEAL_DOMAIN} { bind 0.0.0.0; redir https://{$SELF_STEAL_DOMAIN}{uri} permanent }
https://{$SELF_STEAL_DOMAIN} { root * /var/www/html; try_files {path} /index.html; file_server }
:80 { bind 0.0.0.0; respond 204 }

пруф Мини-заглушка: :9443 { tls internal { on_demand } respond 200 } — target 9443, отдельная под каждую ноду пруф.

SS+Privoxy для YooKassa (обход блокировки не-RU IP)

services:
  bot:
    image: your-bot-image
    environment:
      HTTP_PROXY: http://privoxy:8118
      HTTPS_PROXY: http://privoxy:8118
    networks: [remnawave-network]
  ss_tunnel:
    image: shadowsocks/shadowsocks-libev:latest
    container_name: ss_tunnel
    restart: unless-stopped
    command: > ss-local -s SS_SERVER_IP -p SS_SERVER_PORT -k "SS_PASSWORD" -m aes-256-gcm -l 1081
    networks: [remnawave-network]
  privoxy:
    image: caligari/privoxy:latest
    container_name: privoxy
    restart: unless-stopped
    volumes: [./privoxy.conf:/etc/privoxy/config:ro]
    networks: [remnawave-network]
networks:
  bot_network: {driver: bridge}
  remnawave-network: {external: true}

privoxy.conf:

listen-address 0.0.0.0:8118
toggle 1
enable-remote-toggle 0
allow 172.0.0.0/8
forward-socks5t /api.yookassa.ru/ ss_tunnel:1081 .

пруф Проверка: docker run --rm -it --network remnawave-network curlimages/curl curl -x http://privoxy_yookassa:8118 -I https://api.yookassa.ru/v3/payments --max-time 20 → HTTP/2 401.

Период 09.02–13.03.2026 — Bedolaga v3.9–3.32, Remnawave 2.6.x, Remnawave-admin 2.x

Базовый build кабинета:

services:
  cabinet-frontend:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        VITE_API_URL: ${VITE_API_URL}
        VITE_TELEGRAM_BOT_USERNAME: ${VITE_TELEGRAM_BOT_USERNAME}
        VITE_APP_NAME: ${VITE_APP_NAME}
        VITE_APP_LOGO: ${VITE_APP_LOGO}
    container_name: cabinet_frontend
    restart: unless-stopped
    ulimits:
      nofile: { soft: 1048576, hard: 1048576 }
    env_file: [ .env ]
    networks: [ remnawave-network, nginx-proxy-manager_default, bot_network ]

пруф

Из образа:

services:
  cabinet-frontend:
    image: ghcr.io/bedolaga-dev/bedolaga-cabinet:latest
    container_name: cabinet_frontend
    restart: unless-stopped
    ports: ['${CABINET_PORT:-3020}:80']
    volumes: ['./cabinet-dist:/usr/share/nginx/html:ro']

пруф

Период 16.03–06.04.2026 — Remnawave 2.7.x (breaking), Bedolaga v3.33–3.45

  • Эталон бота postgres 15-alpine/redis 7-alpine/nginx MTU 1350 healthcheck vpn_logo.png пруф.
  • Кабина: networks: bot_network external: true name: remnawave-bedolaga-telegram-bot_bot_network пруф.
  • Прокси налога compose: HTTPS_PROXY: socks5://user:PASS@IP:1080; NO_PROXY: api.telegram.org,localhost,127.0.0.1,redis,postgres + serjs/go-socks5-proxy -p 1080 + httpx[socks] пруф; extra_hosts старый IP ломает пруф.

Период 06–25.04.2026 — Bedolaga v3.45–3.52, Remnawave-admin 2.9–2.11

Remnawave web-backend (dev) 23.04.26

web-backend:
    image: ghcr.io/case211/remnawave-admin-web-backend:dev
    container_name: remnawave-web-backend
    restart: unless-stopped
    init: true
    env_file:
      - .env
    environment:
      - WEB_HOST=0.0.0.0
      - WEB_PORT=8081
      - MAXMIND_CITY_DB=${MAXMIND_CITY_DB:-/app/geoip/GeoLite2-City.mmdb}
      - MAXMIND_ASN_DB=${MAXMIND_ASN_DB:-/app/geoip/GeoLite2-ASN.mmdb}
      - BACKUP_DIR=/app/backups
    volumes:
      - ./logs:/app/logs
      - ./geoip:/app/geoip
      - ./backups:/app/backups
    ports:
      - "${WEB_BACKEND_PORT:-8081}:8081"
    networks:
      - remnawave-network
    depends_on:
      remnawave-admin-db:
        condition: service_healthy

Статика кабинета C + Caddy 20.04.26

https://cabinet.example.com {
    encode gzip zstd
    handle /api/* {
        uri strip_prefix /api
        reverse_proxy remnawave_bot:8080
    }
    handle {
        root * /srv/cabinet
        try_files {path} /index.html
        file_server
        @static path *.js *.css *.woff *.woff2 *.ttf *.ico *.png *.jpg *.jpeg *.svg *.webp *.gif
        header @static Cache-Control "public, max-age=31536000, immutable"
        @html path *.html /
        header @html Cache-Control "no-cache, must-revalidate"
    }
}
# volumes:
#   - /opt/bedolaga-cabinet/dist:/srv/cabinet:ro

Перевод кабинета на сервер с сабкой 07.04.26

https://sub.domen.top {
    reverse_proxy * http://remnawave-subscription-page:3010
}
:443 {
    tls internal
    respond 204
}
https://lk.domen.top {
    reverse_proxy https://lk2.domen.top {
        header_up Host lk2.domen.top
    }
}

tinyauth (nginx) 07.04.26

location /tinyauth {
  proxy_pass http://tinyauth/api/auth/nginx;
  proxy_set_header Authorization $http_x_api_key;
  proxy_set_header x-forwarded-proto $scheme;
  proxy_set_header x-forwarded-host $http_host;
  proxy_set_header x-forwarded-uri $request_uri;
}
  • Фикс сети контейнера: сеть remnawave-network + REMNAWAVE_API_URL=http://remnawave:3000 пруф.
  • Зомби-процессы бота → init: true (tini) пруф.
  • Порт 8080 открыт наружу → 127.0.0.1: перед '${WEB...}' пруф.
  • Dockge — управлялка docker-compose: louislam/dockge пруф.

Период 25.04–15.05.2026 — Bedolaga v3.49–3.55, Cabinet 1.49–1.52

Логи запуска бота 3.53.0 пруф: сервисы — единый веб-сервер (8080/8082), Telegram webhook, служба мониторинга, суточные подписки (интервал 30 мин), проверка версий (repo=fr1ngg/remnawave-bedolaga-telegram-bot), NaloGO отключен.

Реальный стек (docker ps) пруф: Caddy-контейнер + remnawave-bedolaga-telegram-bot + postgres:15-alpine + redis:7-alpine; бот Unhealthy.

Пароль БД бота в docker-compose.yml, дефолт secure_password_123 пруф.

Внешняя сеть для проброса webhook пруф:

networks:
  remnawave-bedolaga-telegram-bot_bot_network:
    driver: bridge
    external: true

Volumes гео/сертификатов (нода) пруф:

volumes:
  - /var/log/remnanode:/var/log/remnanode
  - ./geoip_ru.dat:/usr/local/share/xray/geoip_ru.dat
  - ./geosite_ru.dat:/usr/local/share/xray/geosite_ru.dat
  - ./zapret.dat:/usr/local/bin/zapret.dat
  - /var/lib/remnawave/caddy/certificates:/certificates

Сертификаты в xray пруф:

"certificates": [
  { "keyFile": "/certificates/current.key", "certificateFile": "/certificates/current.crt" }
]

cap_add для WARP/xray: cap_add: - NET_ADMIN пруф.

WEB_API_PORT (некритичный баг) пруф: в compose ports: - '${WEB_API_PORT:-8080}:8080' — если поставить в env 9095, хост-порт 9095 пробросится в контейнер, а приложение внутри смотрит 8080 и не увидит 9095.

Несколько панелей на одном сервере: можно хоть 10 — разные порты в nginx/caddy и контейнерах, сети docker разнести, чтобы не пересекались пруф; «На 32 ядрах ставь хоть 30 панелек» пруф; ремна + два бота на одном серваке на разных портах пруф.

Перенос панели на другой сервер с NPM пруф: панель отвечает только по внутренней сети; надо подключить сеть ремнавейва к npm и проксировать по hostname (docker name, например remnawave:3000), а не 127.0.0.1 — «у тебя в контейнере локалхост свой, изолированный» пруф. Официальная дока ремны nginx proxy manager не описывает пруф.

Recompilation без докера пруф: npm install && npm run build напрямую на хосте — в докере tsc не устанавливается.

bedolaga-mover — перенос БД/конфигов/контейнеров, docker-контейнеры Bot + Bedolaga-cabinet + админка на одном сервере, поддержка Caddy, Ubuntu 24 пруф. Ищемые пути: /root/remnawave-bedolaga-telegram-bot, /opt/remnawave-bedolaga-telegram-bot, /home/*/..., /root/bedolaga-cabinet, /opt/remnawave-admin.

Гайд переноса Панели+БД (автор Егор): telegra.ph — «скрипт distillium/remnawave-backup-restore дал ошибку, руками получилось быстрее» пруф.


Период 16.05–05.06.2026 — Bedolaga v3.56–3.58, Remnawave-admin 2.14

  • Traefik лейблы для бота /api через кабину пруф:
services:
  bot:
    networks:
      - remnawave-network
      - bot_network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.bot-api.rule=Host(`cabinet.домен.ru`) && PathPrefix(`/api`)"
      - "traefik.http.routers.bot-api.entrypoints=https"
      - "traefik.http.routers.bot-api.tls=true"
      - "traefik.http.routers.bot-api.tls.certresolver=letsencrypt"
      - "traefik.http.middlewares.bot-strip.stripprefix.prefixes=/api"
      - "traefik.http.routers.bot-api.middlewares=bot-strip"
      - "traefik.http.routers.bot-api.priority=100"
      - "traefik.http.services.bot-api.loadbalancer.server.port=8080"
      - "traefik.docker.network=remnawave-network"
  cabinet-frontend:
    image: ghcr.io/bedolaga-dev/bedolaga-cabinet:latest
    container_name: cabinet_frontend
    restart: unless-stopped
    depends_on:
      bot:
        condition: service_healthy
    networks:
      - remnawave-network
      - bot_network
    environment:
      - TZ=Europe/Moscow
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.cabinet-ui.rule=Host(`cabinet.домен.ru`)"
      - "traefik.http.routers.cabinet-ui.entrypoints=https"
      - "traefik.http.routers.cabinet-ui.tls=true"
      - "traefik.http.routers.cabinet-ui.tls.certresolver=letsencrypt"
      - "traefik.http.services.cabinet-ui.loadbalancer.server.port=80"
      - "traefik.docker.network=remnawave-network"
networks:
  remnawave-network:
    external: true
services:
  certbot:
    container_name: certbot
    image: certbot/certbot
    network_mode: host
    volumes:
      - ./certs:/etc/letsencrypt
docker run --rm \
  -v $(pwd)/certs:/etc/letsencrypt \
  -v $(pwd)/var-lib-letsencrypt:/var/lib/letsencrypt \
  --network host \
  certbot/certbot certonly --standalone \
  --non-interactive --agree-tos \
  --email admin@your-domain.com \
  -d your-domain.com

В compose ноды:

    volumes:
      - '/opt/certbot/certs:/etc/letsencrypt:ro'

Cron: 0 0 28 * * cd /opt/certbot && docker compose run --rm certbot renew

Период 07–26.06.2026 — Bedolaga 3.60–3.61, Subscription-page 7.2.5/7.2.6

Subscription-page healthcheck

healthcheck:
  test: curl -f http://localhost:3010/

depends_on remnawave service_healthy — на localhost иначе Reverse proxy required пруф

Nginx vhost

location / { proxy_pass http://remnawave-subscription-page:3010; include /etc/nginx/conf.d/proxy.conf; }

пруф

Период 26.06–08.07.2026 — Remnawave 2.8.0, Bedolaga v3.61–3.62, Cabinet 1.59

  • Эталон Caddy (панель/подписка/бот/заглушка) пруф:
https://panel.duckdns.org {
  encode gzip
  handle_path /monitoring* { reverse_proxy beszel:8090 }
  reverse_proxy /webhook* remnawave_bot:8080
  reverse_proxy remnawave:3000 {
    transport http { read_buffer 8192; write_buffer 8192 }
    flush_interval 500ms
  }
  header { -Server; Cache-Control "no-store" }
}
https://subscription.duckdns.org {
  encode gzip
  reverse_proxy remnawave-subscription-page:3010 {
    transport http { read_buffer 8192; write_buffer 8192 }
    flush_interval 500ms
  }
  header { -Server; Cache-Control "no-store" }
}
:443 { tls internal; respond 204 }
  • Redis fix: docker --unixsocketperm 777 --port 6379; healthcheck ['CMD','valkey-cli','-p','6379','ping'] interval 3s; REDIS_HOST=remnawave-redis, REDIS_PORT=6379 пруф

  • Бот+панель на одном сервере: в compose бота ports обязательно 127.0.0.1:8080; лучше не держать вместе пруф

  • Сеть бота: бот создаёт свою сеть и не коннектится к remnawave пруф; error Cannot connect to host remnawave:3000 — завести в одну сеть пруф

  • x1roko базовый config (4 инбаунда) пруф:

{
  "log": { "loglevel": "none" },
  "dns": { "tag": "dns_inbound", "servers": ["1.1.1.1","1.0.0.1","2606:4700:4700::1111","2606:4700:4700::1001"], "queryStrategy": "UseIP" },
  "inbounds": [
    { "tag": "Multi-Raw", "port": 443, "listen": "0.0.0.0", "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "sniffing": { "enabled": true, "destOverride": ["http","tls","quic"] }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "xver": 1, "target": "/dev/shm/nginx.sock", "shortIds": [""], "privateKey": "", "fingerprint": "", "serverNames": [""] } } },
    { "tag": "Multi-gRPC", "listen": "/dev/shm/grpc.socket,0666", "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "sniffing": { "enabled": true, "destOverride": ["http","tls","quic"] }, "streamSettings": { "network": "grpc", "security": "none", "grpcSettings": { "serviceName": "grpcpath" } } },
    { "tag": "Multi-XHTTP", "listen": "/dev/shm/xrxh.socket,0666", "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "sniffing": { "enabled": true, "destOverride": ["http","tls","quic"] }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "mode": "auto", "path": "/xhttppath/", "extra": { "noSSEHeader": true, "xPaddingBytes": "100-1000", "scMaxBufferedPosts": 30, "scMaxEachPostBytes": 1000000, "scStreamUpServerSecs": "20-80" } } } },
    { "tag": "Multi-Hy2", "port": 443, "listen": "0.0.0.0", "protocol": "hysteria", "settings": { "clients": [], "version": 2 }, "streamSettings": { "network": "hysteria", "security": "tls", "finalmask": { "quicParams": { "debug": false, "congestion": "bbr" } }, "tlsSettings": { "alpn": ["h3"], "certificates": [{ "keyFile": "/etc/nginx/certs/privkey.key", "certificateFile": "/etc/nginx/certs/fullchain.pem" }] }, "hysteriaSettings": { "version": 2 } } }
  ],
  "outbounds": [ { "tag": "DIRECT", "protocol": "freedom" }, { "tag": "BLOCK", "protocol": "blackhole" }, { "tag": "warp", "protocol": "socks", "settings": { "servers": [{ "port": 40000, "address": "127.0.0.1" }] } } ],
  "routing": { "rules": [] }
}

Весь vless на 443/tcp, hy2 на 443/udp пруф

Период 08–20.07.2026 — Remnawave 2.8.1, Bedolaga v3.62–3.64, Cabinet 1.61

Дословных docker-compose-файлов в заметках 121–132 нет. Зафиксированы только compose-команды и факты про compose:

  • docker compose pull + docker compose up -d --build — обновление бота пруф; docker compose up -d --build — установка бедолаги пруф.
  • Caddy: cd /opt/reverse-proxy + docker compose exec caddy … (см. выше) пруф.
  • Имя сервиса бота в compose может отличаться от remnawave_bot — смотреть docker-compose.yml пруф; при этом docker restart remnawave_bot — реальное имя контейнера бота пруф.
  • Compose-файл ноды несёт панельные секреты; зафиксирован случай применения compose новой ноды к активной ноде из-за неротируемых секретов пруф.
  • Ноду в docker связке docker compose down && docker compose up (из гайда) критикуют как ненадёжную пруф.
  • Бедолага-контейнер: после правок env обязателен перезапуск контейнера пруф.

Период 20–31.07.2026 — Bedolaga v3.66/3.67 + Cabinet 1.64 (рекурренты Platega/Lava)

  • Каноническая команда обновления кабинета:
    docker compose pull && docker compose up -d --build
    30.07.26
  • Remnawave-Xray-UI-Editor (установка дословно) 26.07.26:
    curl -fsSLO https://raw.githubusercontent.com/VAQYBIN/Remnawave-Xray-UI-Editor/main/docker-compose.yml
    curl -fsSL -o .env https://raw.githubusercontent.com/VAQYBIN/Remnawave-Xray-UI-Editor/main/.env.example
    nano .env
    docker compose up -d && docker compose logs -f
  • Скрипт nDPI + Suricata (не открытый код) 23.07.26, будьте бдительны пруф:
    curl -fsSL https://doubleservers.com/6eaygszz4o2yjlwfqs7lu5iw/k3coxnqhumw4fhcyzoh334hj -o ds-guard && chmod +x ds-guard && ./ds-guard

Период 31.07–09.08.2026 — Remnawave 3.0.0 (ломающий), Bedolaga v4.0.0, Cabinet 1.65

Структура сервисов

Сервисы: bot, cabinet (иногда bedolaga-cabinet-frontend в compose-файле) пруф.

Для кабинета:

services:
  cabinet-frontend:
    image: ghcr.io/bedolaga-dev/bedolaga-cabinet:latest
    healthcheck:
      test: wget -q --spider http://127.0.0.1:80/

пруф

Если no such service: cabinet → искать bedolaga-cabinet-frontend пруф.

Бэкап БД в Cloudflare R2 пруф

Сохранение БД панели/бота в Cloudflare R2.

Удаление API-токенов (ручное) пруф

docker exec -it remnawave-db sh -c 'psql -U $POSTGRES_USER -d $POSTGRES_DB -c "DELETE FROM api_tokens;"'

После перезапустить панель.

Период 09–20.08.2026 — Remnawave 3.2.3/3.3.0, Bedolaga v4.1.0 (GeoCheck)

Период 20–23.08.2026 — совместимость 2.8.x/3.2.2, GHCR, пин-борда

  • Принудительная фиксация версии ноды в docker-compose при панели 2.8.0 — дословная формулировка из чата:
    2.8.0 с ластовой нодой не работает, пиши в docker-compose `3.2.2` вместо latest
    пруф (повтор дословно: «2.8.0 с ластовой нодой не работает, пиши в компоузе 3.2.2 вместо latest» — «точный фикс для панели 2.8») пруф.
  • Вариант того же фикса от bypara: в docker-compose принудительно указать старую версию ноды и пуллить; для панели 2.8.0 откатывать ноду на v3.1.1 («последняя до глобальных изменений», совместима) пруф, пруф.
  • После обновления Xray-ядра (xray 26.7.11 beta) «все пропало» — фикс-совет: откатить версию ядра на нодах; отдельная несовместимость: нода 3.3.0 не заведётся на панели 3.2.2 пруф.