Если не хочется возиться с сервером
Этот гайд для тех, кто хочет поднять всё сам. Если нужен готовый VPN без настройки — @MoleHoleBot выдаёт рабочий конфиг за минуту.
Что такое 3x-ui и зачем она нужна
3x-ui — форк популярной панели x-ui, который активно поддерживается и развивается. Внутри работает XRay-core — тот же движок, что стоит за VLESS, XTLS Vision и REALITY. Панель даёт удобный веб-интерфейс поверх конфигов XRay: добавляете inbound, создаёте клиентов, выставляете лимиты — и всё это без ручного редактирования JSON-файлов.
Зачем это нужно: если вы раздаёте доступ семье или нескольким людям, 3x-ui позволяет создать отдельного клиента для каждого с собственным лимитом трафика и сроком действия. Плюс встроенная статистика и генерация QR-кодов — не нужно ничего копировать вручную.
Как это работает в двух словах
XRay-core — движок протоколов (VLESS, Trojan и т.д.)
3x-ui — веб-панель, которая управляет конфигом XRay и хранит клиентов в SQLite
Inbound — входящее соединение: протокол + порт + настройки шифрования
Клиент — запись в inbound с UUID, лимитом трафика и сроком действия
Требования к серверу
3x-ui нетребовательна к ресурсам. Вот минимум и комфортный вариант:
| Параметр | Минимум | Комфортно |
|---|---|---|
| RAM | 512 МБ | 1–2 ГБ |
| CPU | 1 vCPU | 2 vCPU |
| Диск | 5 ГБ | 20 ГБ |
| Трафик | 200 ГБ/мес | 1+ ТБ/мес |
| ОС | Ubuntu 20.04 | Ubuntu 22.04 LTS |
| Виртуализация | KVM (обязательно — нужен tun для XRay) | |
| IP | Белый IPv4, желательно не из заблокированных диапазонов | |
Где взять VPS
Для VLESS+REALITY нужен европейский VPS — задержки до России приемлемые, IP не в российских
блок-листах. Из того что пробовал сам: netcup хорошо держится по цене и стабильности.
Нюрнбергский датацентр, KVM, белый IPv4 включён, минимальный тариф около 4€/месяц. Если берёте
первый раз — промокод 36nc17698518190 даёт скидку 5€ на netcup.com.
Hetzner — альтернатива с хорошим API и чуть большей ценой. Contabo если нужно много RAM за мало денег. Главное — убедитесь что это KVM, не OpenVZ старого поколения.
Подготовка сервера
Подключитесь по SSH и сделайте три вещи перед установкой:
1. Обновите систему
apt update && apt upgrade -y 2. Установите Docker
Официальный скрипт определяет дистрибутив и ставит всё нужное:
curl -fsSL https://get.docker.com | sh Проверьте что всё ок:
docker --version
docker compose version 3. Настройте файрвол
Открываем порты заранее — иначе после установки панель не будет открываться. Порт 2053 — панель управления, 443 — inbound для клиентов (можно изменить позже):
ufw allow OpenSSH
ufw allow 2053/tcp
ufw allow 443/tcp
ufw allow 443/udp
ufw enable Совет
Порт SSH (22) правило allow OpenSSH уже добавляет. Не закройте себя
раньше времени — включайте ufw enable только после того как убедились, что SSH открыт.
Установка 3x-ui через Docker Compose
Docker Compose — предпочтительный способ: легко обновлять, данные изолированы в volume, контейнер автоматически стартует после перезагрузки.
Создайте директорию и конфиг
mkdir -p ~/3x-ui && cd ~/3x-ui Создайте файл docker-compose.yml:
nano docker-compose.yml Вставьте содержимое:
services:
3x-ui:
image: ghcr.io/mhsanaei/3x-ui:latest
container_name: 3x-ui
hostname: yourhostname
volumes:
- $PWD/db/:/etc/x-ui/
- $PWD/cert/:/root/cert/
environment:
XRAY_VMESS_AEAD_FORCED: "false"
tty: true
network_mode: host
restart: unless-stopped Почему network_mode: host
3x-ui управляет XRay, который слушает произвольные порты. С network_mode: host
контейнер видит все порты хоста напрямую — не нужно прописывать каждый inbound-порт в
секцию ports:. Это стандартный подход для 3x-ui.
Запустите панель
docker compose up -d Посмотрите логи чтобы убедиться что всё запустилось:
docker compose logs -f 3x-ui
Через 10–15 секунд должны увидеть строки вроде
3x-ui started и Start listening on port 2053.
Если видите ошибки — проверьте что порт 2053 не занят другим процессом:
ss -tlnp | grep 2053 Первый вход в панель
Откройте браузер и перейдите по адресу:
http://ВАШ_IP:2053 Важно
Используйте именно http://, не https:// — SSL ещё не настроен.
Браузер может пытаться автоматически открыть HTTPS и выдаст ошибку соединения.
Логин и пароль по умолчанию: admin / admin. Первое что нужно сделать после входа — сменить их.
Безопасность панели
Панель с дефолтным паролем admin/admin на публичном IP — это открытая дверь.
Ботнеты сканируют порт 2053 постоянно. Три обязательных шага:
Смена логина и пароля
Перейдите в Panel Settings → User. Поставьте нормальный пароль — минимум 16 символов, лучше сгенерированный:
openssl rand -base64 24 Смена порта панели
В Panel Settings → Panel Port смените 2053 на любой нестандартный (например, 38521). После сохранения панель переедет на новый порт — не забудьте открыть его в файрволе:
ufw allow 38521/tcp Смена URL-пути панели
В Panel Settings → Panel Path добавьте случайный префикс, например
/xui-secret-path/. После этого панель будет доступна только по
http://IP:38521/xui-secret-path/ — сканеры, которые ищут /, ничего не найдут.
SSL-сертификат для панели (опционально, но рекомендуется)
Если у вас есть домен, можно получить Let's Encrypt сертификат и перевести панель на HTTPS. Это нужно ещё и для того, чтобы в VLESS+REALITY конфигах не светился голый IP.
Установите certbot
apt install certbot -y Получите сертификат
Временно останавливаем 3x-ui (он занимает порт 80 если настроен на него), получаем сертификат через standalone-режим:
docker compose stop
certbot certonly --standalone -d ВАШ_ДОМЕН
docker compose start Сертификаты появятся в /etc/letsencrypt/live/ВАШ_ДОМЕН/.
Подключите сертификат в панели
В Panel Settings → Panel Certificate Path и Panel Key Path укажите:
/etc/letsencrypt/live/ВАШ_ДОМЕН/fullchain.pem
/etc/letsencrypt/live/ВАШ_ДОМЕН/privkey.pem
Сохраните и перезапустите панель. Теперь она откроется по
https://ВАШ_ДОМЕН:38521/xui-secret-path/.
Автообновление сертификата
Certbot добавляет таймер в systemd, который обновляет сертификат автоматически. Но после обновления 3x-ui нужно перезагрузить конфиг. Добавьте в crontab хук:
0 3 * * * docker compose -f /root/3x-ui/docker-compose.yml restart
Раз в сутки в 3 ночи — без лишних перезапусков и без риска протухшего сертификата.
Что дальше
Панель стоит, защищена, сертификат есть. Следующий шаг — добавить inbound с VLESS+REALITY и создать клиентов. Это разобрано в отдельном гайде: Настройка VLESS+REALITY в 3x-ui.
Если хотите MTProto прокси для Telegram в дополнение к VLESS — он тоже ставится рядом через Docker и не конфликтует с 3x-ui, пока порты разные.