1. Предварительные условия
1. Открыты порты 80/443 в фаерволе VPS (и в панели провайдера).
2. На сервере установлен Docker и docker compose plugin (docker compose). Установка по официальному скрипту Docker: curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh.[1][2]
3. Желательно иметь домен, указывающий на IP VPS (для нормального SNI), но Reality может работать и по IP, если использовать валидный SNI внешнего сайта.[3][4]
2. Вариант №1: готовый образ xtls-reality-docker (минимум настроек)
1. Сгенерировать short_id на хосте:
openssl rand -hex 8
Значение сохранить, это SHORT_ID для клиента.[2][5]
2. Выбрать SNI (например, www.cloudflare.com или любой крупный сайт с 443/tcp). Это то, что клиент будет указывать как serverName/SNI.[4][3]
3. Запустить контейнер:
sudo docker pull myelectronix/xtls-reality:latest
sudo docker run -d --rm \
-p 443:443 \
-e SNI=ВАШ_SNI \
-e SHORT_ID=ВАШ_SHORT_ID \
-v xtls-reality-volume:/opt/xray/config \
--name xtls-reality myelectronix/xtls-reality:latest
Образ сам поднимет Xray с VLESS+Reality и сгенерирует ключи; конфиги будут лежать в volume xtls-reality-volume.[5]
4. Если удобнее через docker‑compose, клонировать репозиторий и запустить:
git clone https://github.com/myelectronix/xtls-reality-docker
cd xtls-reality-docker
# при необходимости отредактировать docker-compose.yml (SNI/SHORT_ID)
docker compose up -d
В репозитории есть пример docker‑compose и описание переменных окружения, которые нужно подставить под свой домен/SNI.[5]
3. Вариант №2: свой docker-compose.yml + свой config.json
Если хочешь полный контроль над конфигом:
1. Создать структуру каталогов на VPS, например:
mkdir -p ~/xray/data
cd ~/xray
2. Сгенерировать Reality‑ключи и shortId:
docker run --rm ghcr.io/xtls/xray-core:latest xray x25519
# сохранить private / public key
openssl rand -hex 8 # shortId
3. Создать data/config.json с inbound VLESS+Reality (можно взять за основу пример реальности c XTLS Vision из гайдов и подставить свои privateKey, shortId, serverNames, dest).[2][3][4]
4. Создать docker-compose.yml примерно такого вида:
services:
xray:
image: ghcr.io/xtls/xray-core:latest
container_name: xray-reality
restart: unless-stopped
volumes:
- ./data/config.json:/usr/local/etc/xray/config.json:ro
ports:
- "0.0.0.0:443:443/tcp"
command: ["xray", "-config", "/usr/local/etc/xray/config.json"]
Такой compose-файл поднимает Xray в отдельном контейнере и прокидывает порт 443 наружу.[2]
5. Запуск/управление:
docker compose up -d
docker compose logs -f
4. Вариант с web‑панелью (3x-ui)
Если хочешь кликать через UI:
1. Создать docker-compose.yml с образом 3X‑UI:
version: "3"
services:
3x-ui:
image: ghcr.io/mhsanaei/3x-ui:latest
container_name: 3x-ui
network_mode: host
restart: unless-stopped
volumes:
- ./db/:/etc/x-ui/
2. Запустить:
docker compose up -d
3. Зайти в веб‑панель (порт и пароль берёшь из логов контейнера) и там уже создать инстанс VLESS+Reality через GUI.[6]
***
Если напишешь, какой именно вариант тебе ближе (чистый Xray с ручным конфигом или готовый образ/панель), можно разобрать конкретный config.json под твой домен/IP и клиент (например, v2rayNG/nekobox).
[1](https://github.com/Arman92/xtls-dockerized)
[2](https://linuxguidance.net/xray-xtls-reality-in-docker/)
[3](https://github.com/wpdevelopment11/xray-tutorial)
[4](https://xtls.github.io/en/config/outbounds/vless.html)
[5](https://github.com/myelectronix/xtls-reality-docker)
[6](https://semenov.work/posts/3x-ui-vless-reality-vpn/)
[7](https://stackoverflow.com/questions/68633740/installing-xray-and-configure-with-jfrog-artifactory-using-docker-compose)
[8](https://github.com/XTLS/Xray-core/issues/4033)
[9](https://stackoverflow.com/questions/69563734/issues-with-xray-as-side-container-in-aws-ecs-with-docker-compose)
[10](https://doc.openresty.com/en/xray/on-premise/docker-compose-deployment/)
[file-name 000298_2025-11-30_09-03-56.txt]