add: под с 3X-UI
This commit is contained in:
parent
c7a5241d33
commit
ed9159335e
@ -12,6 +12,7 @@
|
||||
## Kubernetes (k3s/k8s)
|
||||
* [Установка k3s на Orange Pi 5 Plus](raspberry-and-orange-pi/k3s.md)
|
||||
* [Под с Shadowsocks-клиент](kubernetes/k3s-shadowsocks-client.md) (k3s)
|
||||
* [Под с 3X-UI](kubernetes/k3s-3xui-pod.md) (k3s)
|
||||
|
||||
## Python
|
||||
* [Устранение проблем при установке Python-коннектора mysqlclient (MySQL/MariaDB)](python/python-mysql.md)
|
||||
|
@ -1,13 +1,20 @@
|
||||
# Установка 3X-UI как под в K3s (Kubernetes)
|
||||
|
||||
3X-UI — это симпатичный веб-интерфейс для управления VPN-серверами, такими как WireGuard, Shadowsocks, Xray, V2Ray
|
||||
и тому подобное. Он позволяет настраивать и мониторить VPN-соединения и клиентов через браузер. Мы будем запускать
|
||||
3x-ui — это симпатичный веб-интерфейс для управления VPN-серверами, такими как WireGuard, Shadowsocks, Xray, V2Ray
|
||||
и тому подобное. Он позволяет настраивать и мониторить VPN-соединения и клиентов через браузер. Мы будем запускать
|
||||
его как контейнер (под) внутри K3s кластера на Orange Pi 5.
|
||||
|
||||
Мне нужен 3x-ui, для безопасного доступа к домашней сети из любой точки мира, а также для безопасного доступа
|
||||
к интернету через домашний сервер.
|
||||
|
||||
### Создание namespace (не обязательно)
|
||||
|
||||
Для удобства организации рекомендую создать отдельное пространство имён (`namespace`) для 3X-UI. Это как папка для
|
||||
ресурсов, чтобы они не смешивались с другими приложениями.
|
||||
Для удобства организации рекомендую создать отдельное пространство имён (`namespace`) для 3x-ui. Пространство имен --
|
||||
это способ организовать ресурсы в кластере. Оно работает как виртуальная "папка", которая помогает разделять
|
||||
(изолировать) и управлять объектами, такими как поды, сервисы, конфигурации и т.д. Объекты в одном _namespace_ не видят
|
||||
объекты из другого namespace (если не настроено обратное), что помогает избежать путаницы. Несколько приложений
|
||||
с одинаковыми именами могут без проблем существовать в разных пространствах имен. Кроме того, можно настроить
|
||||
права доступа (RBAC) отдельно для каждого namespace.
|
||||
|
||||
Выполним в терминале:
|
||||
```bash
|
||||
@ -26,3 +33,144 @@ NAME STATUS AGE
|
||||
... ... ...
|
||||
x-ui Active 6s
|
||||
```
|
||||
|
||||
## Развёртывание 3X-UI
|
||||
|
||||
Cоздадим манифест развертывания пода (этого YAML-файл с инструкциями для K3s, что и как запустить). Мы будем
|
||||
использовать SQLite как внутреннюю базу данных 3x-ui, и пока эта бызы будет храниться внутри пода. Позже сможем
|
||||
переключиться на `Longhorn` (опционально).
|
||||
|
||||
Создадим `deployment.yaml` в каталоге `~/k3s/vpn/x-ui/` (см. [структуру каталогов для хранения конфигураций и манифестов](k3s-shadowsocks-client.md)
|
||||
принятую в моем проекте):
|
||||
```bash
|
||||
mkdir -p ~/k3s/vpn/x-ui
|
||||
nano ~/k3s/vpn/x-ui/deployment.yaml
|
||||
```
|
||||
|
||||
Вставим в него следующий код:
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: x-ui
|
||||
namespace: x-ui
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: x-ui
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: x-ui
|
||||
spec:
|
||||
hostNetwork: true
|
||||
containers:
|
||||
- name: x-ui
|
||||
image: ghcr.io/mhsanaei/3x-ui:latest
|
||||
# image: enwaiax/x-ui:latest # альтернативный облеченный: меньше способов шифрования и интерфейс на китайском
|
||||
volumeMounts:
|
||||
- name: db
|
||||
mountPath: /etc/x-ui/db
|
||||
volumes:
|
||||
- name: db
|
||||
emptyDir: {}
|
||||
```
|
||||
В этом манифесте примечательно следующее:
|
||||
- `hostNetwork: true` — позволяет контейнеру использовать сетевой стек хоста и значит работать
|
||||
с сетевыми интерфейсами и портами хоста напрямую. Это полезно для приложений, которые требуют прямого доступа
|
||||
к сети, например, VPN-серверы.
|
||||
- `replicas: 1` — это количество реплик (экземпляров) пода, которые будут запущены. В данном случае мы запускаем
|
||||
только одну реплику, но при необходимости можно увеличить это число для обеспечения отказоустойчивости и
|
||||
масштабируемости.
|
||||
- `selector` — это селектор, который используется для выбора подов, которые будут управляться этим
|
||||
развертыванием. Он определяет, какие поды будут обновлены или удалены при изменении конфигурации развертывания.
|
||||
- `matchLabels` — это метки, которые должны совпадать с метками подов, чтобы они были выбраны селектором.
|
||||
В данном случае мы используем метку `app: x-ui`, чтобы выбрать поды, которые относятся к приложению x-ui.
|
||||
- `emptyDir: {}` — это временное хранилище SQLite, которое создаётся при запуске пода и удаляется при его завершении.
|
||||
Оно используется для хранения настроек, включая настройки VPN-серверов и клиентских соединений ( 3x-ui. Это удобно для тестирования и разработки, но не рекомендуется
|
||||
для продакшн-среды, так как данные будут потеряны при перезапуске пода.
|
||||
|
||||
|
||||
Применим манифест:
|
||||
```bash
|
||||
sudo kubectl apply -f ~/k3s/vpn/x-ui/deployment.yaml
|
||||
```
|
||||
|
||||
Проверим, что под запустился:
|
||||
```bash
|
||||
sudo k3s kubectl get pods -n x-ui -o wide
|
||||
```
|
||||
|
||||
Увидим что-то вроде:
|
||||
```text
|
||||
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||
x-ui-bb97f6894-h7zj8 1/1 Running 0 11s 10.42.1.50 opi5plus-3 <none> <none>
|
||||
|
||||
Видим, что нода на которой запустился 3x-ui это `opi5plus-3`, а имя пода `x-ui-bb97f6894-h7zj8`. Проверим логи пода,
|
||||
используя его имя:
|
||||
```bash
|
||||
sudo kubectl logs -n x-ui x-ui-886dbc87-hdw4h
|
||||
```
|
||||
|
||||
Увидим что-то вроде:
|
||||
```text
|
||||
Server ready
|
||||
(0x291e4e8,0x40001657b0)
|
||||
2025/03/28 13:28:34 Starting x-ui 2.5.6
|
||||
(0x291e4e8,0x40001658e0)
|
||||
INFO - Web server running HTTP on [::]:2053
|
||||
INFO - XRAY: infra/conf/serial: Reading config: &{Name:bin/config.json Format:json}
|
||||
WARNING - XRAY: core: Xray 25.3.6 started
|
||||
```
|
||||
|
||||
Теперь мы знаем порт, на котором работает 3x-ui (`2053`), и значит можем получить доступ к веб-интерфейсу через браузер
|
||||
по адресу `http://opi5plus-3:2053` или `http://<IP_адрес_вашего_узла>:2053`. Можно настаивать VPN-подключения, создавать
|
||||
пользователей , менять логин и пароль на вход и т.д. Веб-интерфейс 3x-ui интуитивно понятен, так что разбираться
|
||||
не составит труда.
|
||||
|
||||
Но есть один минус. При рестарте пода, все настройки будут сброшены, т.к. они храняться во внутреннем хранилище пода.
|
||||
|
||||
Чтобы этого избежать, нужно использовать постоянное хранилище (Persistent Volume). Для его работы нужно установить
|
||||
`Longhorn` (или другой менеджер хранилищ). K3s на Orange Pi 5 поддерживает `Longhorn` из коробки, так как в операционной
|
||||
системе нет поддержки `iSCSI`, и включение его потребует перекомпиляции ядра (если вы этого еще не сделали, [смотрите
|
||||
инструкцию](../raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md).
|
||||
|
||||
|
||||
|
||||
--------
|
||||
|
||||
Понял. Спасибо. Теперь у меня вот такой манифест ` ~/k3s/vpn/x-ui/deployment.yaml`:
|
||||
```
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: x-ui
|
||||
namespace: x-ui
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: x-ui
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: x-ui
|
||||
spec:
|
||||
hostNetwork: true
|
||||
containers:
|
||||
- name: x-ui
|
||||
image: ghcr.io/mhsanaei/3x-ui:latest
|
||||
```
|
||||
В документации к 3x-ui я вижу, что для докера его надо запускать так:
|
||||
```
|
||||
docker run -itd --network=host \
|
||||
-v $PWD/db/:/etc/x-ui/ \
|
||||
-v $PWD/cert/:/root/cert/ \
|
||||
--name x-ui --restart=unless-stopped \
|
||||
enwaiax/x-ui
|
||||
```
|
||||
Каталог $PWD/cert/ нужен для SSL-сертификатов. С этим мы разберемся позже. А сейчас расскажи как сделать хранилище db внутри longhorn.
|
||||
|
||||
-----
|
||||
Привет. Можешь из этой картинки с графиком сделать другую, в которой все русские слова будут переведены на английский?
|
Loading…
x
Reference in New Issue
Block a user