1. Обновление системы
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git nano htop net-tools
2. Установка Python
sudo apt install -y python3 python3-pip
Примечание: модуль pyasynchat встроен в Python 3.11+ и дополнительная установка не требуется.
3. Установка полезных утилит
sudo apt install -y parted qemu-guest-agent haveged mc nmap \
apt-transport-https ca-certificates software-properties-common openssl
4. Установка Docker
Добавляем GPG ключ и репозиторий
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Установка Docker
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
sudo systemctl enable --now docker
Проверка Docker
docker version
docker run hello-world
5. Установка 3X-UI через Docker
mkdir -p ~/panel/{db,cert} && cd ~/panel
Создаем docker-compose файл
nano compose.yml
services:
3xui:
image: ghcr.io/mhsanaei/3x-ui:latest
container_name: 3xui_app
volumes:
- ./db/:/etc/x-ui/
- ./cert/:/root/cert/
environment:
XRAY_VMESS_AEAD_FORCED: "false"
network_mode: host
restart: unless-stopped
security_opt:
- no-new-privileges:true
Запуск панели
docker compose -f compose.yml up -d
docker compose -f compose.yml ps
docker compose -f compose.yml config
Доступ к панели управления:
- URL:
http://<ваш_IP>:2053 - Логин:
admin - Пароль:
admin
6. Настройка Firewall (IPTables)
sudo apt install -y iptables iptables-persistent
# Разрешаем уже установленные соединения
sudo iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешаем loopback
sudo iptables -I INPUT 2 -i lo -j ACCEPT
# Разрешаем VLESS/Reality (порт 443) и панель (2053)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2053 -j ACCEPT
# Разрешаем SSH с вашего IP
sudo iptables -A INPUT -s <ваш_IP> -p tcp --dport 22 -j ACCEPT
# Блокируем все остальное
sudo iptables -P INPUT DROP
# Сохраняем правила
sudo netfilter-persistent save
7. Создание сертификата для панели (self-signed)
sudo openssl req -x509 -newkey rsa:4096 -nodes -sha256 \
-keyout ~/panel/cert/private_xray_web.key \
-out ~/panel/cert/public_xray_web.cer \
-days 3650 -subj "/CN=<ваш_IP>" \
-addext "subjectAltName=IP:<ваш_IP>"
sudo chmod 644 ~/panel/cert/public_xray_web.cer
sudo chmod 600 ~/panel/cert/private_xray_web.key
В панели управления указываем пути к сертификатам:
- Публичный:
/root/panel/cert/public_xray_web.cer - Приватный:
/root/panel/cert/private_xray_web.key
docker compose -f compose.yml restart
8. Настройка VLESS + Reality в 3X-UI
Отключаем подписку, перезапускаем панель (перезапуск требуется после для применения любого изменения), создаем Инбаунд. Заполняем поля “Примечание” – любое удобное наименование Инбаунда, “Протокол” – vless, “Мониторинг IP” – внешний ip адрес сервера, “Порт” – 443.




внесли данные одного клиента, в поле Email любое удобное наименование клиента, затем жмем обновить ID, остальное как на скринах. В конце сохраняем и продолжаем редактирование клиента.


Сохраняем. Далее обновляем сервер и в “Настройки Xray” – “Базовые соединения” создаем подключение




итог

остальные настройки изучаем и настраиваем под свои задачи вкус.
9. Проверки после установки
docker ps
docker logs 3xui_app
sudo systemctl status docker
docker compose -f compose.yml restart
10. Рекомендации
- Для продакшена используйте домен + Let’s Encrypt вместо self-signed сертификатов.
- Если сервер публичный — настройте fail2ban для SSH и панели.
- Для Reality рекомендуется использовать последнюю версию 3X-UI и Xray.
- Все изменения в
compose.ymlтребуют перезапуска контейнера:docker compose -f compose.yml up -d