mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-22 00:25:24 +08:00
FileKeySource rejected any key file whose mode had group or other bits, but Windows has no such bits: Stat reports every writable file as 0666. On the Windows builds release.yml ships, the key file therefore never loaded, not even one written 0600, and only XUI_NODE_TOKEN_KEY could supply a key. The mode check now applies off Windows only, the stance the DB permission tests already take; there the file's NTFS ACL guards it, and env-vars.mdx says so in all four locales. The load test is split so the half that must hold everywhere, an owner-only file loading, also runs on Windows, and the rejection half asserts the exact error instead of any error.
117 lines
11 KiB
Plaintext
117 lines
11 KiB
Plaintext
---
|
|
title: Переменные окружения
|
|
description: Полный справочник по переменным окружения XUI_* в 3x-ui — база данных, панель, логирование, память, шифрование токенов узлов и монитор работоспособности туннеля.
|
|
icon: Variable
|
|
---
|
|
|
|
3x-ui читает свою конфигурацию во время выполнения из переменных окружения
|
|
`XUI_*`. При установке через скрипт инсталлятор записывает их в файл окружения
|
|
службы (`/etc/default/x-ui`, либо `/etc/conf.d/x-ui` / `/etc/sysconfig/x-ui` в
|
|
зависимости от дистрибутива); для Docker они задаются в `docker-compose.yml` или
|
|
через `docker run -e`. Значения по умолчанию разумны — задавайте только то, что
|
|
нужно изменить, после чего перезапустите: `systemctl restart x-ui`.
|
|
|
|
## База данных
|
|
|
|
| Variable | Default | Description |
|
|
| ------------------------ | ----------- | -------------------------------------------------------------------- |
|
|
| `XUI_DB_TYPE` | `sqlite` | Бэкенд: `sqlite` или `postgres` (также принимаются `postgresql` / `pg`). |
|
|
| `XUI_DB_FOLDER` | `/etc/x-ui` | Папка для файла базы данных SQLite (`x-ui.db`). |
|
|
| `XUI_DB_DSN` | — | Строка подключения к PostgreSQL (используется при `XUI_DB_TYPE=postgres`). |
|
|
| `XUI_DB_MAX_OPEN_CONNS` | — | Максимум открытых соединений в пуле PostgreSQL. |
|
|
| `XUI_DB_MAX_IDLE_CONNS` | — | Максимум простаивающих соединений в пуле PostgreSQL. |
|
|
|
|
Путь к базе данных SQLite по умолчанию — `/etc/x-ui/x-ui.db`. Подробности о
|
|
переходе SQLite ↔ PostgreSQL см. в разделе
|
|
[База данных](/docs/reference/database).
|
|
|
|
## Панель
|
|
|
|
| Variable | Default | Description |
|
|
| ------------------------ | ------- | ------------------------------------------------------------------------ |
|
|
| `XUI_PORT` | — | Переопределение порта панели (1–65535). Имеет приоритет над сохранённой настройкой. |
|
|
| `XUI_INIT_WEB_BASE_PATH` | `/` | Начальный базовый веб-путь при **первом** запуске (например, `/panel`). |
|
|
| `XUI_ENABLE_FAIL2BAN` | `true` | Включить ограничение по IP на основе Fail2ban. |
|
|
| `XUI_SKIP_HSTS` | `false` | Не отправлять заголовок HSTS — установите `true`, когда TLS терминируется обратным прокси. |
|
|
|
|
## Шифрование токенов узлов
|
|
|
|
API-токены узлов — и сохранённый токен PIA — по умолчанию хранятся в открытом
|
|
виде. Шифрование при хранении включается явно и отказывает безопасно: при любом
|
|
режиме, кроме `off`, панель не запустится, если не сможет загрузить ключ.
|
|
|
|
| Variable | Default | Description |
|
|
| ------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `NODE_TOKEN_ENCRYPTION` | `off` | `off`, `migration` (чтение принимает открытый текст или шифротекст, запись всегда шифрует) или `required` (запись та же, но без ключа запуск не удастся). Префикса `XUI_` здесь нет. |
|
|
| `XUI_NODE_TOKEN_KEY_FILE` | `/etc/x-ui/node_token_key.json` | JSON-связка ключей с правами `0600` или строже (в Windows не проверяется: файл защищают права NTFS). Загружается первой. |
|
|
| `XUI_NODE_TOKEN_KEY` | — | Один 32-байтный ключ в base64, читается только при неудачной загрузке файла ключей. Его идентификатор фиксирован (`env`), поэтому ротация невозможна. |
|
|
|
|
Файл ключей задаёт активный ключ и все прежние ключи, ещё нужные для расшифровки:
|
|
|
|
```json
|
|
{ "active": "k1", "keys": { "k1": "<base64 32-byte key>" } }
|
|
```
|
|
|
|
Сгенерируйте ключ командой `openssl rand -base64 32`; ключи никогда не
|
|
принимаются в аргументах командной строки. После включения режима перешифруйте
|
|
строки, уже находящиеся в базе, активным ключом:
|
|
|
|
```bash
|
|
x-ui encrypt-tokens
|
|
```
|
|
|
|
Команда обрабатывает строки узлов; токен PIA перешифровывается при следующем
|
|
чтении. Для ротации добавьте новый ключ в `keys`, укажите его в `active`,
|
|
сохраните старый ключ для расшифровки и снова выполните `x-ui encrypt-tokens`.
|
|
|
|
## Логирование и бинарные файлы
|
|
|
|
| Variable | Default | Description |
|
|
| ---------------- | ---------------- | ----------------------------------------------------------- |
|
|
| `XUI_LOG_LEVEL` | `info` | `debug`, `info`, `notice`, `warning` или `error`. |
|
|
| `XUI_DEBUG` | `false` | Режим отладки (принудительно устанавливает уровень логирования `debug`). |
|
|
| `XUI_LOG_FOLDER` | `/var/log/x-ui` | Каталог для вывода логов. |
|
|
| `XUI_BIN_FOLDER` | `bin` | Папка для бинарного файла Xray-core и файлов geosite/geoip. |
|
|
|
|
## Память и профилирование
|
|
|
|
Панель удерживает потребление памяти низким за счёт `GOGC` и периодических
|
|
освобождений. Это продвинутые параметры — оставьте их незаданными, если только
|
|
вы не настраиваете хост с ограниченными ресурсами.
|
|
|
|
| Variable | Default | Description |
|
|
| ----------------------------- | ------- | ----------------------------------------------------------------- |
|
|
| `XUI_GOGC` | — | Целевой процент сборщика мусора Go; ниже = меньше RAM, чуть больше нагрузка на CPU. |
|
|
| `XUI_MEMORY_RELEASE_INTERVAL` | — | Минуты между вызовами `FreeOSMemory`; `0` отключает. |
|
|
| `XUI_MEMORY_LIMIT` | — | Мягкий лимит памяти Go в **MiB**. |
|
|
| `GOMEMLIMIT` | — | Мягкий лимит в синтаксисе Go (например, `400MiB`); имеет приоритет над предыдущим.|
|
|
| `XUI_PPROF` | `false` | Открыть профилирование pprof на `127.0.0.1:6060`. |
|
|
|
|
## Xray
|
|
|
|
| Variable | Default | Description |
|
|
| ------------------------ | ------- | --------------------- |
|
|
| `XRAY_VMESS_AEAD_FORCED` | `false` | Принудительно включить VMess AEAD. |
|
|
|
|
## Монитор работоспособности туннеля
|
|
|
|
Опциональный сторож: он опрашивает URL (опционально **через** локальный входящий
|
|
Xray) и перезапускает Xray после нескольких неудачных попыток подряд. Перезапуск
|
|
обрывает все подключённые клиенты, поэтому включайте его осознанно.
|
|
|
|
| Variable | Default | Description |
|
|
| ----------------------------- | -------------------------------------------- | ----------------------------------------------------------------- |
|
|
| `XUI_TUNNEL_HEALTH_MONITOR` | `false` | Включить монитор. |
|
|
| `XUI_TUNNEL_HEALTH_PROXY` | — | Прокси, через который отправляется проба, например `socks5://127.0.0.1:1080`. Пусто = проверяется только доступность хоста. |
|
|
| `XUI_TUNNEL_HEALTH_URL` | `https://www.cloudflare.com/cdn-cgi/trace` | URL для опроса. |
|
|
| `XUI_TUNNEL_HEALTH_INTERVAL` | `30s` | Интервал между пробами. |
|
|
| `XUI_TUNNEL_HEALTH_TIMEOUT` | `10s` | Тайм-аут одной пробы. |
|
|
| `XUI_TUNNEL_HEALTH_FAILURES` | `3` | Количество неудач подряд до перезапуска. |
|
|
| `XUI_TUNNEL_HEALTH_COOLDOWN` | `5m` | Минимальная задержка между перезапусками. |
|
|
|
|
## Автоматическая установка
|
|
|
|
| Variable | Description |
|
|
| -------------------- | -------------------------------------------------------------------------------------------- |
|
|
| `XUI_NONINTERACTIVE` | Установите `1` (или запустите без TTY), чтобы выполнить установку без единого запроса; сгенерированные учётные данные записываются в `/etc/x-ui/install-result.env`. См. [Установку](/docs/guide/installation#unattended--cloud-init). |
|