Если не хочется возиться с сервером

Этот гайд для тех, кто хочет поднять всё сам. Если нужен готовый 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, пока порты разные.