3x-ui_pro_Docker — готовый Docker Compose стек для развертывания прокси-инфраструктуры вокруг Traefik, 3x-ui/Xray, AdGuard Home, CrowdSec, Caddy, Homepage, Lampac, usque (WARP) и TOR helper-сервисов.
Репозиторий содержит сам стек, installer CLI/wizard, шаблоны окружения и тесты для безопасной локальной разработки. Собственные образы проекта собираются в AutoDockerBuilder.
- Debian/Ubuntu.
systemdиapt.- Docker Engine с Compose plugin.
- Root/sudo доступ на сервере для установки пакетов, Docker, firewall, SSH и sysctl-настроек.
- Локальная разработка installer выполняется только через mock/fake окружение.
cd /srv
git clone https://github.com/Torotin/3x-ui_pro_Docker.git
cd 3x-ui_pro_Docker
# Необязательно: каталог Docker-стека можно выбрать любой абсолютный путь.
export INSTALL_ROOT=/srv/docker-proxy
sudo script/install.sh doctor
sudo script/install.sh wizard
sudo script/install.sh doctorПеред batch-запуском задайте обязательные значения. SSH_PBK необязателен: если ключ задан, SSH будет настроен на public key auth; если не задан, будет включен password auth.
set -e
cd /srv
git clone https://github.com/Torotin/3x-ui_pro_Docker.git
cd 3x-ui_pro_Docker
chmod +x script/install.sh
export INSTALL_ROOT=/srv/docker-proxy
export WEBDOMAIN=example.com
export USER_SSH=deployer
export PASS_SSH='change-me'
export USER_WEB=admin
export PASS_WEB='change-me'
export PORT_REMOTE_SSH=22022
# Optional: public key for USER_SSH. If unset, installer keeps password auth.
export SSH_PBK='ssh-ed25519 ...'
sudo -E script/install.sh doctor
sudo -E script/install.sh run apt --apply --yes
sudo -E script/install.sh run env
sudo -E script/install.sh run docker --destroy-docker-data
sudo -E script/install.sh run user
sudo -E script/install.sh run firewall ssh network --apply --yes
sudo -E script/install.sh run compose
sudo -E script/install.sh run final
sudo -E script/install.sh doctor
# For detailed successful checks:
sudo -E script/install.sh doctor --verboseInstaller хранится отдельно от Docker-стека:
3x-ui_pro_Docker/script— installer, модули, шаблоны, state, logs, summary.INSTALL_ROOT— рабочий каталог Docker Compose стека и runtime-данных сервисов. По умолчанию/opt/docker-proxy, но можно использовать любой абсолютный путь, например/srv/docker-proxy.
script/install.sh doctor
script/install.sh wizard
script/install.sh run <step...> [--destroy-docker-data] [--apply] [--yes]
script/install.sh self-update [--branch <branch>] [--check] [--yes] [--force]
script/install.sh uninstall [--plan|--apply --yes]Доступные шаги:
apt env docker user firewall ssh network compose final uninstallНазначение основных команд:
doctor— read-only диагностика ОС, команд, зависимостей, state, Docker, Compose и контейнеров.wizard— интерактивная установка с numbered menu и потоковым выводом операций.run— batch-запуск шагов.self-update— обновление installer из выбранной git-ветки по версии.uninstall— план или выполнение удаления проекта.
Wizard запрашивает обязательные значения:
WEBDOMAIN— домен.USER_SSH/PASS_SSH— системный пользователь.USER_WEB/PASS_WEB— BasicAuth для web-панелей.SSH_PBK— публичный SSH ключ, необязательно.
Если SSH_PBK задан, SSH переводится в режим public key auth. Если ключ не задан, включается password auth.
Остальные значения генерируются автоматически:
- публичные IPv4/IPv6;
- локальные и внешние порты;
- приватные URI для web-панелей;
- CrowdSec API keys;
- htpasswd hash для BasicAuth;
- AdGuard admin hash.
Installer обновляется явно из выбранной ветки:
sudo script/install.sh self-update --branch main --check
sudo script/install.sh self-update --branch main --yesВерсия installer хранится в script/VERSION, описание изменений — в script/CHANGELOG.md.
Поведение update:
--checkсравнивает локальную версию с версией в выбранной ветке.- Если remote версия новее, выводится диапазон
local -> remoteи changelog только для версий выше текущей. - Если версия не новее, выводится
self-update: up to date. --yesприменяет обновление только при наличии более новой версии.--forceпринудительно применяет обновление даже при равной или меньшей remote версии.
Wizard при старте автоматически проверяет обновление. Предложение обновиться показывается только если в репозитории есть версия выше локальной.
- Traefik — HTTP router для ACME на
80/tcpи внутреннего HTTPSwebsecure :4443. - 3x-ui + Xray — панель и runtime-автоматизация Xray desired state.
- AdGuard Home — DNS/DoH и web-панель.
- CrowdSec — анализ логов и bouncer-интеграция.
- Caddy — fallback/error backend и вспомогательная статика.
- Homepage — dashboard со ссылками на сервисы.
- Lampac — публичный browser front/fallback за цепочкой Xray → Traefik.
- usque (WARP)/TOR — proxy helper-сервисы для маршрутизации.
- Dockcheck/logrotate — эксплуатационные сервисы для обновлений и логов.
Compose fragments находятся в docker-proxy/compose.d. Host paths в них задаются относительно каталога compose.d, чтобы стек не зависел от хардкода /opt/docker-proxy.
Clean install использует staged-модель публичных портов: 80/tcp публикует только Traefik для ACME HTTP-01 и безопасного redirect, 443/tcp публикует 3x-ui/Xray REALITY, а Traefik websecure :4443 остаётся только внутри Docker network. Browser HTTPS идёт по цепочке client -> Xray 443/tcp -> REALITY self-steal/fallback -> Traefik :4443 -> Host router -> Lampac/admin service.
Traefik dashboard, 3x-ui, AdGuard, Dozzle, Homepage и Lampac admin не имеют прямых published ports и не используют отдельные поддомены. Доступ к админкам публикуется только как HTTPS path-routes на основном ${WEBDOMAIN} в формате https://${WEBDOMAIN}/${SUMMARY_URL_*} и защищается BasicAuth, CrowdSec middleware, rate-limit и security/noindex headers. Root-domain Lampac front и frontend API /reqinfo и /testaccsdb не защищаются BasicAuth, но sensitive paths Lampac (/admin, /adminpanel, /stats, /weblog) закрываются admin middleware.
Не открывайте наружу 4443, 9118, panel ports, metrics ports или CrowdSec ports. 443/udp должен оставаться свободным до отдельного явно принятого UDP-stage; Traefik HTTP/3 и UDP entrypoints отключены.
Destructive и host-mutating действия требуют явного opt-in:
- APT mirror/update:
run apt --apply --yes. - Docker wipe/reinstall:
run docker --destroy-docker-data. - Firewall apply:
run firewall --apply --yes. - SSH apply:
run ssh --apply --yes. - Network/sysctl apply:
run network --apply --yes. - Uninstall purge: отдельные
--purge-*флаги.
SSH apply логирует выбранный auth mode, пользователя, порт, backup, systemd unit, результат sshd -t, reload/restart и проверку listening port. Сначала применяется systemctl reload, restart используется только если reload не поднял новый порт или сервис требует полного перезапуска.
doctor не меняет окружение. Его можно запускать для диагностики до и после установки.
План без изменений:
sudo script/install.sh uninstall --planОстановка compose stack:
sudo script/install.sh uninstall --apply --yesПолная очистка выбирается явно:
sudo script/install.sh uninstall --apply --yes \
--purge-docker-data \
--purge-docker-engine \
--purge-firewall \
--purge-ssh \
--purge-network \
--remove-project-rootФлаги удаления:
--purge-docker-data— удаление compose volumes/images проекта и свободных внешних сетей.--purge-docker-engine— удаление Docker packages и/var/lib/docker,/var/lib/containerd.--purge-firewall— удаление известных UFW правил проекта без глобальногоufw reset.--purge-ssh— восстановление backupsshd_config, проверка и reload/restart SSH.--purge-network— восстановление или удаление installer sysctl файла.--remove-project-root— удалениеINSTALL_ROOT.
script/install-state/install.env— состояние installer рядом с текущимscript/install.sh, еслиINSTALL_STATE_DIRне переопределен.$INSTALL_ROOT/compose.d/.env— окружение Compose.script/install-state/install.summary— финальное резюме установки.script/install-state/commands.log— команды, прошедшие через runner.script/install-state/install.log— лог installer.
Для нестандартного размещения можно задать:
export INSTALL_ROOT=/srv/docker-proxy
export INSTALL_STATE_DIR=/srv/3x-ui-installer-stateInstaller локально тестируется только через mock/fake state dirs:
bash tests/install-scripts/run.sh
bash -n script/install.sh script/modules/*.sh script/check/*.sh
shellcheck -x -S warning script/install.sh script/modules/*.sh script/check/*.shCompose runner:
bash tests/run-compose/test_run_compose.bash
bash tests/run-compose/test_compose_startup_chain.bash3x-ui runtime:
bash tests/3x-ui-scripts/run.shОбщая проверка whitespace:
git diff --checkЛокальные тесты installer не должны вызывать реальные apt, docker, ufw, iptables, systemctl, sshd, modprobe, sysctl -p, useradd, chpasswd и не должны писать в /etc, /opt, /var/lib.
Минимальные тесты после установки:
sudo -E script/install.sh doctor
sudo -E "$INSTALL_ROOT/compose.d/run-compose.sh" validate
sudo -E "$INSTALL_ROOT/compose.d/run-compose.sh" up
sudo -E script/install.sh run finalКонкретный SSH endpoint тестового сервера не фиксируется в README или проектном контексте: он передается только на время серверной приемки.