Settings parameters moved to environment variables

This commit is contained in:
Dmitrii 2025-01-14 16:56:09 +03:00 committed by Mikhail Matukhin
parent 522ccda71c
commit e301e333cb
Failed to extract signature
7 changed files with 261 additions and 55 deletions

View file

@ -533,6 +533,101 @@ Enter the user ID in input field number 4. The Telegram accounts with this id wi
<details> <details>
<summary>Click for environment variables details</summary> <summary>Click for environment variables details</summary>
### Set startup settings via environment variables
WEB_LISTEN - Panel listening domain / By default, leave blank to monitor all domains and IP addresses
WEB_DOMAIN Panel IP address / Leave blank to connect from any IP
WEB_PORT - Port used to display this panel
WEB_CERT_FILE - Path to the panel's public key file / Enter the full path starting with '/'
WEB_KEY_FILE - Path to the panel's private key file / Enter the full path starting with '/'
WEB_BASE_PATH - Root path of the panel's URL
Must start with '/' and end with '/'
SESSION_MAX_AGE - Session duration
Duration of a session in the system (value: minute)
PAGE_SIZE - Pagination size
Define the page size for the incoming table. Set to 0 to disable
EXPIRE_DIFF - Session expiration threshold for notification
Receive notification about session expiration before reaching the threshold (value: day)
TRAFFIC_DIFF - Traffic threshold for notification
Receive notification about traffic exhaustion before reaching the threshold (value: GB)
TIME_LOCATION (def. "Asia/Tehran")- Time zone
Scheduled tasks are executed according to the time in this time zone
TG_BOT_ENABLE (def. "false") - Enable Telegram bot
Connect to the functions of this panel via Telegram bot
TG_BOT_TOKEN - Telegram bot token
You need to get a token from Telegram bot manager @botfather
TG_BOT_PROXY- Socks5 proxy
If you need a Socks5 proxy to connect to Telegram. Configure its parameters according to the manual.
TG_BOT_API_SERVER - Telegram API Server
The Telegram API server to use. Leave blank to use the default server.
TG_BOT_CHAT_ID - Bot Admin Telegram ID
One or more bot admin IDs. To get the ID, use @userinfobot or the '/id' command in the bot.
TG_RUN_TIME - Telegram bot notification frequency
Use Crontab time format
TG_BOT_BACKUP - Database Backup
Include database backup file with report notification
TG_BOT_LOGIN_NOTIFY - Login Notification
Displays the username, IP address, and time when someone tries to log into your dashboard.
TG_CPU - CPU load threshold for notification
Receive notification if CPU load exceeds this threshold (value: %)
TG_LANG - Telegram bot language (def. "en-US")
SUB_ENABLE - Enable service
Subscription feature with separate configuration
SUB_LISTEN - IP listening
Leave empty by default to monitor all IP addresses
SUB_PORT - Subscription port
The port number for serving the subscription service should not be used on the server
SUB_PATH - Root path of the subscription URL
Must start with '/' and end with '/'
SUB_DOMAIN - Listening domain
Leave empty by default to monitor all domains and IP addresses
SUB_CERT_FILE - Path to the public key file of the subscription certificate
Enter the full path starting with '/'
SUB_KEY_FILE - Path to subscription certificate private key file
Enter full path starting with '/'
SUB_UPDATES - Subscription update intervals
Interval between updates in client application (in hours)
SUB_ENCRYPT - Encrypt configs
Encrypt returned configs in subscription
SUB_SHOW_INFO - Show usage information
Show remaining traffic and date after config name
SUB_URI - Reverse proxy URI
Change base URI of subscription URL for use behind proxy servers
DATEPICKER (def. gregorian) - Date picker
Scheduled tasks are executed according to this calendar
#### Usage #### Usage
| Variable | Type | Default | | Variable | Type | Default |

View file

@ -177,6 +177,7 @@ systemctl restart x-ui
Добавьте параметр ```--pull always``` для автоматического обновления контейнера, когда публикуется новый образ. Подробности: https://docs.docker.com/reference/cli/docker/container/run/#pull Добавьте параметр ```--pull always``` для автоматического обновления контейнера, когда публикуется новый образ. Подробности: https://docs.docker.com/reference/cli/docker/container/run/#pull
**ИЛИ** **ИЛИ**
```sh ```sh
@ -531,6 +532,101 @@ WARP встроен, и дополнительная установка не т
<details> <details>
<summary>Нажмите для получения информации о переменных среды</summary> <summary>Нажмите для получения информации о переменных среды</summary>
### Задать стартовые настройки через переменные окружения
WEB_LISTEN - Домен прослушивания панели / По умолчанию оставьте пустым, чтобы отслеживать все домены и IP-адреса
WEB_DOMAIN IP-адрес панели / Оставьте пустым для подключения с любого IP
WEB_PORT - Порт, используемый для отображения этой панели
WEB_CERT_FILE - Путь к файлу публичного ключа сертификата панели / Введите полный путь, начинающийся с '/'
WEB_KEY_FILE - Путь к файлу приватного ключа сертификата панели / Введите полный путь, начинающийся с '/'
WEB_BASE_PATH - Корневой путь URL адреса панели
Должен начинаться с '/' и заканчиваться на '/'
SESSION_MAX_AGE - Продолжительность сессии
Продолжительность сессии в системе (значение: минута)
PAGE_SIZE - Размер нумерации страниц
Определить размер страницы для входящей таблицы. Установите 0, чтобы отключить
EXPIRE_DIFF - Порог истечения срока сессии для уведомления
Получение уведомления об истечении срока действия сессии до достижения порогового значения (значение: день)
TRAFFIC_DIFF - Порог трафика для уведомления
Получение уведомления об исчерпании трафика до достижения порога (значение: ГБ)
TIME_LOCATION (def. "Asia/Tehran")- Часовой пояс
Запланированные задачи выполняются в соответствии со временем в этом часовом поясе
TG_BOT_ENABLE (def. "false") - Включить Telegram бота
Подключайтесь к функциям этой панели через Telegram бота
TG_BOT_TOKEN - Токен Telegram бота
Необходимо получить токен у менеджера ботов Telegram @botfather
TG_BOT_PROXY- Прокси Socks5
Если для подключения к Telegram вам нужен прокси Socks5. Настройте его параметры согласно руководству.
TG_BOT_API_SERVER - API-сервер Telegram
Используемый API-сервер Telegram. Оставьте пустым, чтобы использовать сервер по умолчанию.
TG_BOT_CHAT_ID - Идентификатор Telegram администратора бота
Один или несколько идентификаторов администратора бота. Чтобы получить идентификатор, используйте @userinfobot или команду '/id' в боте.
TG_RUN_TIME - Частота уведомлений бота Telegram
Используйте формат времени Crontab
TG_BOT_BACKUP - Резервное копирование базы данных
Включать файл резервной копии базы данных с уведомлением об отчете
TG_BOT_LOGIN_NOTIFY - Уведомление о входе
Отображает имя пользователя, IP-адрес и время, когда кто-то пытается войти в вашу панель.
TG_CPU - Порог нагрузки на ЦП для уведомления
Получение уведомления, если нагрузка на ЦП превышает этот порог (значение: %)
TG_LANG - Язык телеграмм бота (def. "en-US")
SUB_ENABLE - Включить службу
Функция подписки с отдельной конфигурацией
SUB_LISTEN - Прослушивание IP
Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса
SUB_PORT - Порт подписки
Номер порта для обслуживания службы подписки не должен использоваться на сервере
SUB_PATH - Корневой путь URL-адреса подписки
Должен начинаться с '/' и заканчиваться на '/'
SUB_DOMAIN - Домен прослушивания
Оставьте пустым по умолчанию, чтобы отслеживать все домены и IP-адреса
SUB_CERT_FILE - Путь к файлу открытого ключа сертификата подписки
Введите полный путь, начинающийся с '/'
SUB_KEY_FILE - Путь к файлу закрытого ключа сертификата подписки
Введите полный путь, начинающийся с '/'
SUB_UPDATES - Интервалы обновления подписки
Интервал между обновлениями в клиентском приложении (в часах)
SUB_ENCRYPT - Шифровать конфиги
Шифровать возвращенные конфиги в подписке
SUB_SHOW_INFO - Показать информацию об использовании
Показывать оставшиеся трафик и дату после имени конфигурации
SUB_URI - URI обратного прокси
Изменить базовый URI URL-адреса подписки для использования за прокси-серверами
DATEPICKER (def. gregorian) - Выбор даты
Запланированные задачи выполняются в соответствии с данным календарём
#### Использование #### Использование
| Переменная | Тип | Значение по умолчанию | | Переменная | Тип | Значение по умолчанию |

View file

@ -7,10 +7,8 @@ import (
"strings" "strings"
) )
//go:embed version
var version string var version string
//go:embed name
var name string var name string
type LogLevel string type LogLevel string

View file

@ -19,12 +19,6 @@ import (
var db *gorm.DB var db *gorm.DB
const (
defaultUsername = "admin"
defaultPassword = "admin"
defaultSecret = ""
)
func initModels() error { func initModels() error {
models := []interface{}{ models := []interface{}{
&model.User{}, &model.User{},
@ -50,10 +44,25 @@ func initUser() error {
return err return err
} }
if empty { if empty {
username := os.Getenv("DEFAULT_USERNAME")
if username == "" {
username = "admin"
}
password := os.Getenv("DEFAULT_PASSWORD")
if password == "" {
password = "admin"
}
secret := os.Getenv("DEFAULT_SECRET")
if secret == "" {
secret = ""
}
user := &model.User{ user := &model.User{
Username: defaultUsername, Username: username,
Password: defaultPassword, Password: password,
LoginSecret: defaultSecret, LoginSecret: secret,
} }
return db.Create(user).Error return db.Create(user).Error
} }

BIN
db/x-ui.db Normal file

Binary file not shown.

View file

@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"os"
"reflect" "reflect"
"strconv" "strconv"
"strings" "strings"
@ -23,51 +24,58 @@ import (
//go:embed config.json //go:embed config.json
var xrayTemplateConfig string var xrayTemplateConfig string
func getEnvOrDefault(envKey, defaultValue string) string {
if value, exists := os.LookupEnv(envKey); exists {
return value
}
return defaultValue
}
var defaultValueMap = map[string]string{ var defaultValueMap = map[string]string{
"xrayTemplateConfig": xrayTemplateConfig, "xrayTemplateConfig": xrayTemplateConfig,
"webListen": "", "webListen": getEnvOrDefault("WEB_LISTEN", ""),
"webDomain": "", "webDomain": getEnvOrDefault("WEB_DOMAIN", ""),
"webPort": "2053", "webPort": getEnvOrDefault("WEB_PORT", "2053"),
"webCertFile": "", "webCertFile": getEnvOrDefault("WEB_CERT_FILE", ""),
"webKeyFile": "", "webKeyFile": getEnvOrDefault("WEB_KEY_FILE", ""),
"secret": random.Seq(32), "secret": getEnvOrDefault("SECRET", random.Seq(32)),
"webBasePath": "/", "webBasePath": getEnvOrDefault("WEB_BASE_PATH", "/"),
"sessionMaxAge": "60", "sessionMaxAge": getEnvOrDefault("SESSION_MAX_AGE", "60"),
"pageSize": "50", "pageSize": getEnvOrDefault("PAGE_SIZE", "50"),
"expireDiff": "0", "expireDiff": getEnvOrDefault("EXPIRE_DIFF", "0"),
"trafficDiff": "0", "trafficDiff": getEnvOrDefault("TRAFFIC_DIFF", "0"),
"remarkModel": "-ieo", "remarkModel": getEnvOrDefault("REMARK_MODEL", "-ieo"),
"timeLocation": "Local", "timeLocation": getEnvOrDefault("TIME_LOCATION", "Asia/Tehran"),
"tgBotEnable": "false", "tgBotEnable": getEnvOrDefault("TG_BOT_ENABLE", "false"),
"tgBotToken": "", "tgBotToken": getEnvOrDefault("TG_BOT_TOKEN", ""),
"tgBotProxy": "", "tgBotProxy": getEnvOrDefault("TG_BOT_PROXY", ""),
"tgBotAPIServer": "", "tgBotAPIServer": getEnvOrDefault("TG_BOT_API_SERVER", ""),
"tgBotChatId": "", "tgBotChatId": getEnvOrDefault("TG_BOT_CHAT_ID", ""),
"tgRunTime": "@daily", "tgRunTime": getEnvOrDefault("TG_RUN_TIME", "@daily"),
"tgBotBackup": "false", "tgBotBackup": getEnvOrDefault("TG_BOT_BACKUP", "false"),
"tgBotLoginNotify": "true", "tgBotLoginNotify": getEnvOrDefault("TG_BOT_LOGIN_NOTIFY", "true"),
"tgCpu": "80", "tgCpu": getEnvOrDefault("TG_CPU", "80"),
"tgLang": "en-US", "tgLang": getEnvOrDefault("TG_LANG", "en-US"),
"secretEnable": "false", "secretEnable": getEnvOrDefault("SECRET_ENABLE", "false"),
"subEnable": "false", "subEnable": getEnvOrDefault("SUB_ENABLE", "false"),
"subListen": "", "subListen": getEnvOrDefault("SUB_LISTEN", ""),
"subPort": "2096", "subPort": getEnvOrDefault("SUB_PORT", "2096"),
"subPath": "/sub/", "subPath": getEnvOrDefault("SUB_PATH", "/sub/"),
"subDomain": "", "subDomain": getEnvOrDefault("SUB_DOMAIN", ""),
"subCertFile": "", "subCertFile": getEnvOrDefault("SUB_CERT_FILE", ""),
"subKeyFile": "", "subKeyFile": getEnvOrDefault("SUB_KEY_FILE", ""),
"subUpdates": "12", "subUpdates": getEnvOrDefault("SUB_UPDATES", "12"),
"subEncrypt": "true", "subEncrypt": getEnvOrDefault("SUB_ENCRYPT", "true"),
"subShowInfo": "true", "subShowInfo": getEnvOrDefault("SUB_SHOW_INFO", "true"),
"subURI": "", "subURI": getEnvOrDefault("SUB_URI", ""),
"subJsonPath": "/json/", "subJsonPath": getEnvOrDefault("SUB_JSON_PATH", "/json/"),
"subJsonURI": "", "subJsonURI": getEnvOrDefault("SUB_JSON_URI", ""),
"subJsonFragment": "", "subJsonFragment": getEnvOrDefault("SUB_JSON_FRAGMENT", ""),
"subJsonNoises": "", "subJsonNoises": getEnvOrDefault("SUB_JSON_NOISES", ""),
"subJsonMux": "", "subJsonMux": getEnvOrDefault("SUB_JSON_MUX", ""),
"subJsonRules": "", "subJsonRules": getEnvOrDefault("SUB_JSON_RULES", ""),
"datepicker": "gregorian", "datepicker": getEnvOrDefault("DATEPICKER", "gregorian"),
"warp": "", "warp": getEnvOrDefault("WARP", ""),
} }
type SettingService struct{} type SettingService struct{}