Add files via upload

This commit is contained in:
Egor
2026-01-15 20:01:59 +03:00
committed by GitHub
parent 56856e7acd
commit 250df844f3
2 changed files with 98 additions and 17 deletions

107
README.md
View File

@@ -1,6 +1,6 @@
# Bedolaga Cabinet - Web Interface # Bedolaga Cabinet - Web Interface
Современный веб-интерфейс личного кабинета для VPN бота на базе [Remnawave Bedolaga Telegram Bot](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot) Современный веб-интерфейс личного кабинета для VPN бота на базе [Remnawave Bedolaga Telegram Bot](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot).
## Возможности ## Возможности
@@ -21,7 +21,7 @@
## Быстрый старт ## Быстрый старт
### Вариант 1: Готовый Docker образ ### Вариант A: Готовый Docker образ
```bash ```bash
# Из GitHub Container Registry # Из GitHub Container Registry
@@ -31,7 +31,9 @@ docker pull ghcr.io/bedolaga-dev/bedolaga-cabinet:latest
docker pull bedolaga/bedolaga-cabinet:latest docker pull bedolaga/bedolaga-cabinet:latest
``` ```
### Вариант 2: Сборка из исходников Затем настройте Caddy/Nginx для проксирования (см. раздел "Настройка прокси для production").
### Вариант B: Сборка из исходников
#### 1. Клонирование репозитория #### 1. Клонирование репозитория
@@ -94,31 +96,100 @@ CABINET_ALLOWED_ORIGINS=http://localhost:3000,https://cabinet.yourdomain.com
## Настройка прокси для production ## Настройка прокси для production
Frontend раздает только статические файлы. Для работы с API нужно настроить reverse proxy, который будет проксировать запросы `/api/*` на backend бота. Frontend - это статические файлы (HTML, JS, CSS). Для работы нужно:
1. Раздавать статику через веб-сервер
2. Проксировать `/api/*` запросы на backend бота
### Вариант 1: Caddy > **💡 Важно:** Docker контейнер из этого репозитория содержит nginx, который слушает на **внутреннем порту 80**.
> Это НЕ хост-порт! Выберите один из вариантов ниже в зависимости от вашей инфраструктуры.
Добавьте в ваш Caddyfile: ### Вариант 1: Caddy раздает статику напрямую
**✅ Рекомендуется** - без лишних слоев прокси, максимальная производительность.
Соберите frontend и примонтируйте в Caddy:
```bash
# Соберите образ или скопируйте dist из контейнера
docker compose build
docker create --name temp_cabinet cabinet_frontend
docker cp temp_cabinet:/usr/share/nginx/html ./cabinet-dist
docker rm temp_cabinet
```
Caddyfile:
```caddyfile ```caddyfile
cabinet.yourdomain.com { cabinet.yourdomain.com {
# Проксировать API запросы на backend root * /srv/cabinet
encode gzip
# API запросы на backend
handle /api/* { handle /api/* {
uri strip_prefix /api uri strip_prefix /api
reverse_proxy backend_bot:8080 reverse_proxy backend_bot:8080
} }
# Остальное - на frontend контейнер # Статические файлы
handle {
try_files {path} /index.html
file_server
}
}
```
docker-compose.yml для Caddy:
```yaml
services:
caddy:
image: caddy:2-alpine
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./cabinet-dist:/srv/cabinet:ro
- caddy_data:/data
ports:
- "80:80"
- "443:443"
networks:
- bot_network
```
### Вариант 2: Проксирование на frontend контейнер
Если хотите использовать готовый Docker контейнер с nginx внутри:
**⚠️ Внимание:** Порт `80` в примерах - это **внутренний порт контейнера** (nginx внутри), не хост-порт!
docker-compose.yml:
```yaml
services:
cabinet-frontend:
image: ghcr.io/bedolaga-dev/bedolaga-cabinet:latest
container_name: cabinet_frontend
restart: unless-stopped
# Не открываем порты на хосте, только для internal network
networks:
- bot_network
```
Caddy проксирует на контейнер:
```caddyfile
cabinet.yourdomain.com {
# API на backend
handle /api/* {
uri strip_prefix /api
reverse_proxy backend_bot:8080
}
# Frontend контейнер (nginx внутри на порту 80)
handle { handle {
reverse_proxy cabinet_frontend:80 reverse_proxy cabinet_frontend:80
} }
} }
``` ```
### Вариант 2: Nginx Или Nginx:
Добавьте в конфигурацию Nginx:
```nginx ```nginx
server { server {
listen 443 ssl http2; listen 443 ssl http2;
@@ -127,7 +198,7 @@ server {
ssl_certificate /path/to/cert.pem; ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem; ssl_certificate_key /path/to/key.pem;
# API запросы проксируем на backend # API на backend
location /api/ { location /api/ {
rewrite ^/api/(.*) /$1 break; rewrite ^/api/(.*) /$1 break;
proxy_pass http://backend_bot:8080; proxy_pass http://backend_bot:8080;
@@ -138,7 +209,7 @@ server {
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
} }
# Frontend контейнер # Frontend контейнер (nginx внутри на порту 80)
location / { location / {
proxy_pass http://cabinet_frontend:80; proxy_pass http://cabinet_frontend:80;
proxy_set_header Host $host; proxy_set_header Host $host;
@@ -147,9 +218,9 @@ server {
} }
``` ```
### Вариант 3: Статика + прямое проксирование ### Вариант 3: Статика без Docker
Если хотите раздавать статику напрямую без Docker: **Самый быстрый вариант - раздача статики напрямую.**
```bash ```bash
# Соберите проект # Соберите проект
@@ -300,6 +371,10 @@ bedolaga-cabinet/
- [Remnawave Bedolaga Telegram Bot](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot) - Backend бота - [Remnawave Bedolaga Telegram Bot](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot) - Backend бота
- [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) - Чат поддержки - [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) - Чат поддержки
## Лицензия
Apache-2.0 License - см. [LICENSE](LICENSE)
## Контакты ## Контакты
- Telegram: [@fringg](https://t.me/fringg) - Telegram: [@fringg](https://t.me/fringg)

View File

@@ -1,3 +1,7 @@
# Docker Compose для локальной разработки/тестирования
# Для production используйте готовые образы или настройте Caddy/Nginx
# См. README.md раздел "Настройка прокси для production"
services: services:
cabinet-frontend: cabinet-frontend:
build: build:
@@ -12,9 +16,11 @@ services:
container_name: cabinet_frontend container_name: cabinet_frontend
restart: unless-stopped restart: unless-stopped
ports: ports:
# Маппинг: <хост-порт>:<контейнер-порт>
# Внутри контейнера nginx слушает на порту 80
- "${CABINET_PORT:-3000}:80" - "${CABINET_PORT:-3000}:80"
healthcheck: healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80/health"] test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80/"]
interval: 30s interval: 30s
timeout: 3s timeout: 3s
retries: 3 retries: 3