mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 09:33:46 +00:00
Add files via upload
This commit is contained in:
107
README.md
107
README.md
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user