⚡ Быстро, просто и надолго
License: MIT
Docker Pulls
Docker Image Size
Node.js
Hysteria
Xray
C³ CELERITY by Click Connect — современная веб-панель для управления серверами Hysteria 2 и Xray VLESS с централизованной авторизацией, автоматической настройкой нод и гибким распределением пользователей по группам.
Создана для скорости: Лёгкая архитектура, оптимизированная для быстрой работы на любом масштабе.
Дашборд — мониторинг серверов и статистика в реальном времени
Нужно обновить уже установленную панель? См. Безопасное обновление на проде.
1. Установите Docker (если не установлен):
curl -fsSL https://get.docker.com | sh2. Разверните панель (Docker Hub — рекомендуется):
mkdir hysteria-panel && cd hysteria-panel
# Скачать необходимые файлы
curl -O https://raw.githubusercontent.com/ClickDevTech/hysteria-panel/main/docker-compose.hub.yml
curl -O https://raw.githubusercontent.com/ClickDevTech/hysteria-panel/main/docker.env.example
# Создать конфиг SSL (обязательно для HTTPS)
mkdir -p greenlock.d
curl -o greenlock.d/config.json https://raw.githubusercontent.com/ClickDevTech/hysteria-panel/main/greenlock.d/config.json
cp docker.env.example .env
nano .env # Укажите домен, email и секреты
docker compose -f docker-compose.hub.yml up -dАльтернатива: сборка из исходников (для разработки или кастомизации)
git clone https://github.com/ClickDevTech/hysteria-panel.git
cd hysteria-panel
cp docker.env.example .env
nano .env # Укажите домен, email и секреты
docker compose up -d3. Откройте https://ваш-домен/panel
Планируете управлять панелью из AI-ассистента? См. Гайд по настройке MCP.
Обязательные переменные .env:
PANEL_DOMAIN=panel.example.com
ACME_EMAIL=admin@example.com
ENCRYPTION_KEY=ваш32символьныйключ # openssl rand -hex 16
SESSION_SECRET=секретсессий # openssl rand -hex 32
MONGO_PASSWORD=парольмонго # openssl rand -hex 16Используйте docker-compose.dokploy.yml при деплое через Dokploy с Traefik.
- В Dokploy создайте проект из этого репозитория/ветки.
- Укажите путь к compose-файлу:
docker-compose.dokploy.yml. - Добавьте переменные окружения из
docker.env.example, минимум:MONGO_PASSWORDPANEL_DOMAINACME_EMAILENCRYPTION_KEYSESSION_SECRETDOKPLOY_PANEL_HOST(домен для правила TraefikHost(...))DOKPLOY_TRAEFIK_SERVICE_PORT(порт Traefik/backend, по умолчанию3000)
- Запустите деплой: Dokploy выполнит
build: .и поднимет стек.
Этот режим удобен для проверки изменений из ветки до публикации релизного образа.
Если нужен стабильный деплой по тегам Docker Hub (без сборки), замените источник backend в compose на образ:
backend:
image: clickdevtech/hysteria-panel:latest
# или зафиксируйте тег релиза, например clickdevtech/hysteria-panel:v1.2.3
restart: always
depends_on:
mongo:
condition: service_healthy
redis:
condition: service_healthy
expose:
- "${DOKPLOY_TRAEFIK_SERVICE_PORT:-3000}"
labels:
- "traefik.enable=true"
- "traefik.http.routers.celerity.rule=Host(`${DOKPLOY_PANEL_HOST}`)"
- "traefik.http.routers.celerity.entrypoints=websecure"
- "traefik.http.routers.celerity.tls=true"
- "traefik.http.services.celerity.loadbalancer.server.port=${DOKPLOY_TRAEFIK_SERVICE_PORT:-3000}"
env_file:
- .envlatest подходит для быстрых обновлений, фиксированный тег — для предсказуемых прод-выкаток.
- 🖥 Веб-панель — полноценный UI для управления нодами и пользователями
- 🔐 Двойной протокол — Hysteria 2 и Xray VLESS на одной панели
- 🛡️ 2FA для панели (TOTP) — единый сценарий подтверждения TOTP для входа администратора и чувствительных действий безопасности
- 🚀 Автонастройка нод — установка Hysteria/Xray, сертификатов и port hopping в один клик
- 👥 Группы серверов — гибкая привязка пользователей к нодам
- ⚖️ Балансировка нагрузки — распределение по загруженности
- 🚫 Фильтрация трафика (ACL) — блокировка рекламы, доменов, IP; маршрутизация через прокси
- 🧩 Расширенный конфиг Hysteria — опциональные параметры ACME challenge, режимы masquerade, resolver, speed test, sniffing и настройка QUIC
- 📊 Статистика — онлайн, трафик, состояние серверов
- 📱 Подписки — автоформаты для Clash, Sing-box, Shadowrocket, Hiddify
- 🔄 Бэкап/Восстановление — автоматические бэкапы с поддержкой S3
- 💻 SSH-терминал — прямой доступ к нодам из браузера
- 🔑 API-ключи — безопасный внешний доступ со скоупами, IP-фильтром и rate limiting
- 🪝 Вебхуки — уведомления о событиях с подписью HMAC-SHA256
- 🗺 Карта сети — визуальная каскадная топология с Forward/Reverse Chain (бета)
- 🤖 MCP-интеграция — нативная поддержка AI-ассистентов (Claude, Cursor и др.) для управления панелью
Статус: бета — функциональность работает, но рекомендуется проверка после деплоя.
Каскадная топология позволяет строить цепочки серверов, где клиент подключается к одной ноде, а трафик выходит через другую. Это полезно в сценариях, где точка входа должна находиться в определённой сети или юрисдикции — например, когда требуется подключение через IP-адреса локальных облачных провайдеров.
В корпоративных и операторских сетях часто применяется фильтрация по IP-диапазонам. Трафик к известным хостинг-провайдерам может проходить без ограничений, тогда как соединения с зарубежными IP блокируются или ограничиваются. Каскадная топология решает эту проблему: клиент подключается к серверу в «доверенном» диапазоне, а трафик прозрачно проксируется на внешний сервер.
Панель генерирует конфигурации Xray-core с использованием следующих механизмов:
| Механизм | Назначение |
|---|---|
| Reverse Proxy | Xray bridge/portal — позволяет серверу за NAT инициировать соединение к публичному узлу и принимать через него трафик |
| Outbound Chaining | Последовательное проксирование через несколько outbound с помощью proxySettings.tag |
| REALITY | Маскировка TLS-handshake под соединение с легитимным сайтом; не требует домена и сертификата |
| Transport Layer Proxy | Режим transportLayer: true для корректного применения REALITY в цепочке хопов |
Reverse Proxy — классическая схема Xray reverse. Bridge-сервер (обычно за рубежом) инициирует постоянное соединение к Portal-серверу. Клиент подключается к Portal, трафик выходит через Bridge.
Клиент ──▶ Portal (вход) ◀── туннель ── Bridge (выход) ──▶ Интернет
(bridge инициирует соединение)- Portal может находиться за NAT или firewall — входящие соединения не требуются
- Подходит для сценариев, где точка входа должна быть в определённой сети
Forward Chain — прямая цепочка outbound. Portal устанавливает соединение через relay-ноды к exit-Bridge.
Клиент ──▶ Portal ──▶ Relay (опц.) ──▶ Bridge (выход) ──▶ Интернет
(chained outbounds)- Все ноды в цепочке должны иметь публичный IP
- Поддерживается REALITY на каждом хопе для шифрования межсерверного трафика
Tunnel-REALITY настраивается независимо от клиентского REALITY на Portal-ноде. Это позволяет:
- Шифровать межсерверный трафик без привлечения внимания
- Использовать разные SNI/destination для клиента и для туннеля
- Автоматически генерировать x25519 ключи и shortId при создании связи
- Проверьте статусы хопов на карте сети
- Убедитесь, что трафик выходит через ожидаемый Bridge (проверьте exit IP)
- Для Forward Chain — подтвердите доступность каждого relay по его
tunnelPort
| Ограничение | Причина |
|---|---|
| REALITY + WebSocket | WebSocket не поддерживает uTLS fingerprint, необходимый для REALITY |
| Forward Chain без публичного IP | Каждый хоп должен принимать входящие соединения |
| Смешанные режимы в одной цепочке | Reverse и Forward используют разные механизмы Xray и не комбинируются |
| Один порт на relay для двух хопов | Relay, являющийся одновременно bridge и portal, требует разные порты для входящего и исходящего туннеля |
┌─────────────────┐
│ КЛИЕНТЫ │
│ Clash, Sing-box │
│ Shadowrocket │
└────────┬────────┘
│
hysteria2:// или vless://
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Hysteria Node │ │ Xray Node │ │ Hysteria Node │
│ :443 + hop │ │ VLESS Reality │ │ :443 + hop │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ POST /api/auth │ CC Agent API │
│ GET /online │ │
└────────────────────────┼────────────────────────┘
▼
┌────────────────────────┐
│ HYSTERIA PANEL │
│ │
│ • Веб-панель (/panel) │
│ • HTTP Auth API │
│ • Подписки │
│ • SSH-терминал │
│ • Сбор статистики │
└───────────┬────────────┘
│
▼
┌────────────────────────┐
│ MongoDB │
└────────────────────────┘Hysteria:
- Клиент подключается к ноде с
userId:password - Нода отправляет
POST /api/authна панель - Панель проверяет пользователя и возвращает
{ "ok": true/false }
Xray:
- Клиент подключается с UUID (xrayUuid)
- CC Agent на ноде управляет списком пользователей через API
- Панель синхронизирует пользователей с нодой без перезагрузки Xray
Вместо жёстких "планов" используются гибкие группы:
- Создайте группу (например, "Европа", "Premium")
- Привяжите к ней ноды
- Привяжите пользователей
- Пользователь получает в подписке только ноды из своих групп
Быстрый UDP-протокол на базе QUIC с поддержкой port hopping и обфускации.
Преимущества:
- Высокая скорость на нестабильных сетях
- Port hopping для обхода блокировок
- Обфускация Salamander
Настройки:
- Порт, диапазон портов для hopping
- ACME или self-signed сертификаты
- Obfs (Salamander) с паролем
Расширенные настройки Hysteria в панели:
- Интервал Port Hopping (
hopInterval) - Расширенный ACME (тип challenge, альтернативные порты, DNS challenge provider/config)
- Режимы masquerade:
proxyиstring - Лимиты bandwidth (
up/down) иignoreClientBandwidth - Встроенные
speedTest,disableUDP,udpIdleTimeout - Protocol sniffing (
sniff) и параметры QUIC (quic) - Кастомный DNS resolver (
resolver) - Режим источника ACL (
inlineилиfile) + пути к GeoIP/GeoSite - Расширенные секции опциональны и не попадают в сгенерированный конфиг, пока не включены в UI
Современный протокол с поддержкой Reality и различных транспортов.
Преимущества:
- Reality — маскировка под легитимный HTTPS трафик
- Множество транспортов (TCP, WebSocket, gRPC, XHTTP)
- Не требует домена для Reality
Транспорты:
| Транспорт | Описание | Поддержка клиентами |
|---|---|---|
| TCP | Прямое соединение, максимальная скорость | Все клиенты |
| WebSocket | Работает через CDN и прокси | Все клиенты |
| gRPC | Мультиплексирование, хорош для CDN | Все клиенты |
| XHTTP | Новый splithttp транспорт | Ограниченная* |
*XHTTP поддерживается не всеми клиентами (Clash/Sing-box пока не поддерживают)
Безопасность:
| Режим | Описание |
|---|---|
| Reality | Маскировка под популярный сайт, не нужен домен |
| TLS | Классический TLS с сертификатом |
| None | Без шифрования (не рекомендуется) |
- Добавьте ноду в панели:
- Тип: Xray
- IP, SSH доступ
- Безопасность: Reality (рекомендуется)
- Транспорт: TCP (рекомендуется для Reality)
- Нажмите "⚙️ Автонастройка"
- Панель автоматически:
- Установит Xray-core
- Сгенерирует Reality ключи (x25519)
- Загрузит конфиг
- Установит CC Agent для управления пользователями
- Откроет порты в firewall
- Запустит сервисы
| Поле | Описание | Пример |
|---|---|---|
| Dest | Куда маскироваться (домен:порт) | www.google.com:443 |
| SNI | Server Name Indication | www.google.com |
| Private Key | Приватный ключ x25519 | Генерируется автоматически |
| Public Key | Публичный ключ (для клиентов) | Генерируется автоматически |
| Short IDs | Идентификаторы сессий | Генерируются автоматически |
CC Agent — это лёгкий HTTP-сервис на ноде для управления пользователями Xray без перезагрузки.
Возможности:
- Добавление/удаление пользователей на лету
- Сбор статистики трафика
- Health check
Agent устанавливается автоматически при автонастройке Xray ноды.
- Основной порт (443) — порт, на котором слушает Hysteria
- Диапазон портов (20000-50000) — UDP порты для port hopping
- Порт статистики (9999) — внутренний порт для сбора статистики
| Поле | Назначение | Пример |
|---|---|---|
| Domain | Для ACME/Let's Encrypt сертификатов | de1.example.com → 1.2.3.4 |
| SNI | Для маскировки (domain fronting) | www.google.com |
Сценарии:
- Простая настройка: Укажите домен, SNI оставьте пустым
- Domain fronting: Укажите домен для сертификатов, SNI — популярный домен
- Без домена: Оставьте пустым — будет self-signed сертификат
- Добавьте ноду в панели (IP, SSH доступ)
- Нажмите "⚙️ Автонастройка"
- Панель автоматически:
- Установит Hysteria 2
- Настроит ACME или self-signed сертификаты
- Настроит port hopping
- Откроет порты в firewall
- Запустит сервис
Hysteria поддерживает обфускацию для маскировки трафика:
- В настройках ноды включите Obfs
- Укажите пароль обфускации
- Сохраните и обновите конфиг
Клиенты автоматически получат параметры obfs в подписке.
Можно запустить панель и ноду на одном VPS (панель TCP, нода UDP на 443).
Вариант 1: Использовать домен панели (рекомендуется)
- Укажите для ноды тот же домен что у панели
- Сертификаты панели скопируются автоматически
Вариант 2: Без домена (self-signed)
- Оставьте поле домена пустым
- Будет сгенерирован самоподписанный сертификат
Все эндпоинты /api/* (кроме /api/auth и /api/files) требуют аутентификации.
Создать ключ: Настройки → Безопасность → API-ключи → Создать ключ
Использование:
# Вариант 1 — заголовок
X-API-Key: ck_your_key_here
# Вариант 2 — Bearer токен
Authorization: Bearer ck_your_key_here| Скоуп | Доступ |
|---|---|
users:read |
Чтение пользователей |
users:write |
Создание / изменение / удаление пользователей |
nodes:read |
Чтение нод |
nodes:write |
Создание / изменение / удаление / синхронизация нод |
stats:read |
Статистика и группы |
sync:write |
Запуск синхронизации, кик пользователей |
Каждый ключ имеет настраиваемый лимит (по умолчанию: 60 req/мин).
При превышении возвращается 429 с заголовками X-RateLimit-Limit / X-RateLimit-Remaining.
Проверка пользователя при подключении к Hysteria ноде.
// Запрос
{ "addr": "1.2.3.4:12345", "auth": "userId:password" }
// Ответ (успех)
{ "ok": true, "id": "userId" }
// Ответ (ошибка)
{ "ok": false }Универсальный эндпоинт подписки. Автоматически определяет формат по User-Agent.
| User-Agent | Формат |
|---|---|
shadowrocket |
Base64 URI list |
clash, stash, surge |
Clash YAML |
hiddify, sing-box, karing |
Sing-box JSON |
| Браузер | HTML страница с QR-кодом |
| Другое | Plain URI list |
Query параметры: ?format=clash, ?format=singbox, ?format=uri
Информация о подписке (статус, трафик, срок действия).
Требуемый скоуп: users:read (GET) / users:write (POST, PUT, DELETE)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/users |
Список пользователей (пагинация, фильтры, сортировка) |
| GET | /api/users/:userId |
Получить пользователя |
| POST | /api/users |
Создать пользователя |
| PUT | /api/users/:userId |
Обновить пользователя |
| DELETE | /api/users/:userId |
Удалить пользователя |
| POST | /api/users/:userId/enable |
Включить |
| POST | /api/users/:userId/disable |
Отключить |
| POST | /api/users/:userId/groups |
Добавить в группы |
| DELETE | /api/users/:userId/groups/:groupId |
Удалить из группы |
| POST | /api/users/sync-from-main |
Синхронизация с внешней БД |
Требуемый скоуп: nodes:read (GET) / nodes:write (POST, PUT, DELETE)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/nodes |
Список нод |
| GET | /api/nodes/:id |
Получить ноду |
| POST | /api/nodes |
Создать ноду |
| PUT | /api/nodes/:id |
Обновить ноду |
| DELETE | /api/nodes/:id |
Удалить ноду |
| GET | /api/nodes/:id/config |
Получить конфиг (YAML/JSON) |
| GET | /api/nodes/:id/status |
Статус ноды |
| POST | /api/nodes/:id/reset-status |
Сбросить статус на online |
| GET | /api/nodes/:id/users |
Пользователи на ноде |
| POST | /api/nodes/:id/sync |
Синхронизировать ноду |
| POST | /api/nodes/:id/update-config |
Отправить конфиг через SSH |
| POST | /api/nodes/:id/setup |
Автонастройка через SSH |
| POST | /api/nodes/:id/setup-port-hopping |
Настроить port hopping |
| POST | /api/nodes/:id/groups |
Добавить ноду в группы |
| DELETE | /api/nodes/:id/groups/:groupId |
Удалить из группы |
| GET | /api/nodes/:id/agent-info |
Инфо от CC Agent (Xray) |
| POST | /api/nodes/:id/generate-xray-keys |
Генерация Reality ключей |
| Метод | Эндпоинт | Скоуп | Описание |
|---|---|---|---|
| GET | /api/stats |
stats:read |
Статистика панели |
| GET | /api/groups |
stats:read |
Список групп серверов |
| POST | /api/sync |
sync:write |
Синхронизировать все ноды |
| POST | /api/kick/:userId |
sync:write |
Кикнуть пользователя |
Отправляйте уведомления о событиях в реальном времени на любой HTTP-эндпоинт.
Настройка: Настройки → Безопасность → Вебхуки
POST https://your-endpoint.com/webhook
Content-Type: application/json
X-Webhook-Event: user.created
X-Webhook-Timestamp: 1700000000
X-Webhook-Signature: sha256=<hmac>
User-Agent: C3-Celerity-Webhook/1.0
{
"event": "user.created",
"timestamp": "2024-01-01T00:00:00.000Z",
"data": { ... }
}const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', YOUR_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
// сравните с заголовком X-Webhook-Signature| Событие | Когда |
|---|---|
user.created |
Создан пользователь |
user.updated |
Обновлён пользователь |
user.deleted |
Удалён пользователь |
user.enabled |
Пользователь включён |
user.disabled |
Пользователь отключён |
user.traffic_exceeded |
Достигнут лимит трафика |
user.expired |
Истёк срок подписки |
node.online |
Нода перешла в онлайн |
node.offline |
Нода ушла в оффлайн |
node.error |
Ошибка ноды |
sync.completed |
Завершён цикл синхронизации |
| Поле | Тип | Описание |
|---|---|---|
userId |
String | Уникальный ID |
username |
String | Отображаемое имя |
subscriptionToken |
String | Токен для URL подписки |
xrayUuid |
String | UUID для Xray VLESS (авто-генерация) |
enabled |
Boolean | Активен ли пользователь |
groups |
[ObjectId] | Группы серверов |
nodes |
[ObjectId] | Прямая привязка к нодам |
traffic |
Object | { tx, rx, lastUpdate } — использованный трафик |
trafficLimit |
Number | Лимит трафика в байтах (0 = безлимит) |
maxDevices |
Number | Лимит устройств (0 = из группы, -1 = безлимит) |
expireAt |
Date | Дата истечения |
| Поле | Тип | Описание |
|---|---|---|
type |
String | hysteria или xray |
name |
String | Название |
flag |
String | Флаг страны (эмодзи) |
ip |
String | IP адрес |
domain |
String | Домен для SNI/ACME |
sni |
String | Кастомный SNI для маскировки |
port |
Number | Основной порт (443) |
portRange |
String | Диапазон портов для hopping |
portConfigs |
Array | Мультипорт: [{ name, port, portRange, enabled }] |
obfs |
Object | Обфускация: { type: 'salamander', password } |
statsPort |
Number | Порт статистики Hysteria (9999) |
statsSecret |
String | Секрет для API статистики |
groups |
[ObjectId] | Группы серверов |
outbounds |
Array | Прокси для ACL: [{ name, type, addr }] |
aclRules |
[String] | Правила ACL |
maxOnlineUsers |
Number | Макс. онлайн для балансировки |
rankingCoefficient |
Number | Коэффициент сортировки (1.0) |
status |
String | online/offline/error/syncing |
traffic |
Object | { tx, rx, lastUpdate } — трафик ноды |
xray |
Object | Настройки Xray (см. ниже) |
| Поле | Тип | Описание |
|---|---|---|
transport |
String | tcp, ws, grpc, xhttp |
security |
String | reality, tls, none |
flow |
String | xtls-rprx-vision (для tcp) |
fingerprint |
String | chrome, firefox, safari, etc. |
alpn |
[String] | ALPN протоколы (h3, h2, http/1.1) |
realityDest |
String | Куда маскироваться |
realitySni |
[String] | Server names |
realityPrivateKey |
String | Приватный ключ x25519 |
realityPublicKey |
String | Публичный ключ |
realityShortIds |
[String] | Short IDs |
realitySpiderX |
String | Spider X path (default: /) |
wsPath |
String | WebSocket путь |
wsHost |
String | WebSocket host header |
grpcServiceName |
String | gRPC service name |
xhttpPath |
String | XHTTP путь |
xhttpHost |
String | XHTTP host header |
xhttpMode |
String | auto, packet-up, stream-up |
apiPort |
Number | Порт gRPC API Xray (61000) |
inboundTag |
String | Тег inbound (vless-in) |
agentPort |
Number | Порт CC Agent (62080) |
agentToken |
String | Токен агента |
agentTls |
Boolean | TLS для CC Agent |
| Поле | Тип | Описание |
|---|---|---|
name |
String | Название группы |
description |
String | Описание |
color |
String | Цвет для UI (#hex) |
maxDevices |
Number | Лимит устройств для группы |
subscriptionTitle |
String | Название в профиле подписки |
Управление маршрутизацией на каждой Hysteria ноде. Доступ: Панель → Нода → Фильтрация трафика.
| Действие | Описание |
|---|---|
reject(...) |
Заблокировать |
direct(...) |
Пропустить |
reject(suffix:doubleclick.net) # Блокировка рекламы
reject(suffix:googlesyndication.com)
reject(geoip:cn) # Блокировка китайских IP
reject(geoip:private) # Блокировка приватных IP
direct(all) # Разрешить всё остальное- Добавьте прокси (например,
my-proxy, SOCKS5,1.2.3.4:1080) - Используйте в правилах:
my-proxy(geoip:ru)
Настраивается в Настройки:
- Балансировка включена — сортировка нод по загруженности
- Скрывать перегруженные — не выдавать перегруженные ноды
Алгоритм:
- Получаем ноды пользователя из групп
- Сортируем по % загрузки (online/max)
- Фильтруем перегруженные если включено
- При равной загрузке — по
rankingCoefficient
Приоритет:
- Персональный лимит пользователя (
maxDevices > 0) - Минимальный лимит из групп пользователя
-1= безлимит
Device Grace Period — задержка (в секундах) перед учётом отключённого устройства, чтобы избежать ложных срабатываний при переподключении.
Кастомизируйте HTML-страницу подписки в Настройки → Подписка:
| Поле | Описание |
|---|---|
Logo URL |
URL логотипа для шапки страницы |
Page Title |
Заголовок страницы |
Support URL |
Ссылка на поддержку (кнопка внизу страницы) |
Web Page URL |
URL профиля (заголовок profile-web-page-url) |
Страница подписки автоматически показывает:
- QR-код для импорта в приложение
- Статистику трафика и срок действия
- Список локаций с кнопками копирования
Настраиваются в Настройки → Бэкапы:
- Интервал (в часах)
- Количество локальных копий
Кнопка на дашборде — файл автоматически скачивается.
Загрузите .tar.gz архив через интерфейс.
Бэкапы можно автоматически загружать в S3-совместимое хранилище (AWS S3, MinIO, Backblaze B2, Cloudflare R2 и др.).
Настройка: Настройки → Бэкапы → S3
| Поле | Описание |
|---|---|
Endpoint |
URL хранилища (для MinIO и др.). Для AWS S3 оставьте пустым |
Region |
Регион (например, us-east-1) |
Bucket |
Имя бакета |
Prefix |
Префикс/папка для бэкапов |
Access Key ID |
Ключ доступа |
Secret Access Key |
Секретный ключ |
Keep Last |
Сколько бэкапов хранить в S3 |
Примеры настройки:
# AWS S3
Endpoint: (пусто)
Region: eu-central-1
Bucket: my-backups
# MinIO
Endpoint: https://minio.example.com
Region: us-east-1
Bucket: backups
# Cloudflare R2
Endpoint: https://<account-id>.r2.cloudflarestorage.com
Region: auto
Bucket: my-backupsversion: '3.8'
services:
mongo:
image: mongo:7
restart: always
volumes:
- mongo_data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER:-hysteria}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
backend:
image: clickdevtech/hysteria-panel:latest
restart: always
depends_on:
- mongo
ports:
- "80:80"
- "443:443"
volumes:
- ./logs:/app/logs
- ./greenlock.d:/app/greenlock.d
- ./backups:/app/backups
env_file:
- .env
volumes:
mongo_data:| Переменная | Обязательно | Описание |
|---|---|---|
PANEL_DOMAIN |
✅ | Домен панели |
DOKPLOY_PANEL_HOST |
❌ | Хост Traefik в Dokploy (правило Host(...)) |
DOKPLOY_TRAEFIK_SERVICE_PORT |
❌ | Порт Traefik/backend сервиса в Dokploy (default: 3000) |
ACME_EMAIL |
✅ | Email для Let's Encrypt |
ENCRYPTION_KEY |
✅ | Ключ шифрования SSH (32 символа) |
SESSION_SECRET |
✅ | Секрет сессий |
MONGO_PASSWORD |
✅ | Пароль MongoDB (для Docker) |
MONGO_USER |
❌ | Пользователь MongoDB (default: hysteria) |
MONGO_URI |
❌ | URI подключения к MongoDB (для не-Docker) |
REDIS_URL |
❌ | URL Redis для кэша (default: память) |
PANEL_IP_WHITELIST |
❌ | IP whitelist для панели |
SYNC_INTERVAL |
❌ | Интервал синхронизации в минутах (default: 2) |
API_DOCS_ENABLED |
❌ | Интерактивная документация на /api/docs |
LOG_LEVEL |
❌ | Уровень логирования (default: info) |
Pull requests приветствуются!
MIT