[2026-09-15] eagle: family/how-to/truenas-infrastructure.md family/plans/reverse-xray-3xui-kraken.md personal/tech/xray-outbound-subscription-3xui.md

This commit is contained in:
Alexey Martemyanov
2026-09-15 14:49:26 +06:00
parent 5b433b77bf
commit 9d79f797fa
3 changed files with 92 additions and 0 deletions
+39
View File
@@ -2,6 +2,45 @@
> Создано: 2026-09-01. Цель: проксировать трафик локальных клиентов (сеть TrueNAS 192.168.2.x) через TrueNAS → Kraken → интернет. **Kraken = точка выхода (exit node).** TrueNAS = bridge/контроллер.
## 🔴 2026-09-15: COMPOSE-ФАЙЛ `xray-admin` УТРАЧЕН — восстановлен из `docker inspect`
**Факт (проверено по Zulip DB, `personal/zulip router issues`, сообщение `id=86681`, 2026-09-01 05:40:08 UTC):**
Compose-файл был создан 1 сентября и **уничтожен через 1,5 минуты после создания** — самим агентом:
```bash
# сообщение 86681, 2026-09-01 05:40:08 UTC
docker exec xray-admin rm -f /etc/x-ui/docker-compose.yml
```
**Обоснование агента (сообщение 86678, дословно):**
> «Обратил внимание: в `/etc/x-ui/` появился `docker-compose.yml` — это мой загруженный файл попал в volume (он смонтирован в `/etc/x-ui`). Не страшно, но лучше убрать его из `/etc/x-ui` (не должен лежать в контейнере).»
**Почему это снесло файл на хосте:** volume `/mnt/RED_2TB/docker/xray-admin` смонтирован в контейнер как `/etc/x-ui` — это **bind-mount**, не копия. `rm` внутри контейнера удалил реальный файл на TrueNAS.
**Хронология (из Zulip):**
| Время (UTC) | Событие |
|---|---|
| 05:38:31 | Compose собран в `/tmp/xray-admin-compose.yml`, залит `scp``/mnt/RED_2TB/docker/xray-admin/docker-compose.yml` |
| 05:38:58 | `docker compose up -d` — контейнер поднялся, панель HTTP 200 |
| 05:39:56 | Агент заметил compose «внутри» контейнера (это тот же файл через bind-mount) |
| **05:40:08** | **`rm -f /etc/x-ui/docker-compose.yml` — файл уничтожен на хосте** |
| 05:40:45 | В доке зафиксировано «всё чисто», потеря не замечена |
**Диагностика 2026-09-15 (три пустых проверки):**
1. `ls /mnt/RED_2TB/docker/xray-admin/` → только `system_metrics.gob`, `x-ui.db`, `x-ui.db-shm`, `x-ui.db-wal`
2. `docker exec xray-admin sh -c "ls /etc/x-ui/ | grep -i compose"` → пусто
3. `find /mnt/RED_2TB/docker -maxdepth 2 -name "*compose*" | grep -i xray` → пусто
4. В бэкапах тоже нет: `backups/reverse-xray-3xui-20260901-113625/` содержит только `xray-admin/x-ui.db`, `caddy/Caddyfile`, `docker-inventory.txt`
> ⚠️ **Docker label врёт о наличии файла.** `docker inspect xray-admin --format '{{index .Config.Labels "com.docker.compose.project.config_files"}}'` → `/mnt/RED_2TB/docker/xray-admin/docker-compose.yml`. Label пишется при создании контейнера и **не обновляется** при удалении файла. Наличие в label ≠ наличие на диске.
> 🔴 **ГЛАВНЫЙ ПИТФОЛЛ (повторяемый):** никогда не выполнять `rm`/`mv`/правку файлов внутри контейнера, чей volume — bind-mount на хостовую папку с compose-файлом. Volume `xray-admin` = `/etc/x-ui`, и там же лежит `docker-compose.yml`. Команда «почистить контейнер» уничтожает конфиг деплоя.
> **Правильно:** если хочется убрать compose из контейнерного view — это невозможно без удаления с хоста, т.к. это один и тот же файл. Ничего не делать. Либо держать compose **вне** смонтированной папки.
**Восстановление:** только из `docker inspect` (см. ниже). Параметры: образ `ghcr.io/mhsanaei/3x-ui:latest`, `container_name: xray-admin`, `hostname: xray-admin`, `restart: unless-stopped`, `TZ=Asia/Novosibirsk`, `PUID=950`, `PGID=950`, volume `/mnt/RED_2TB/docker/xray-admin:/etc/x-ui`, `ports: 54321:54321`, сеть `caddy_default` (external). Эквивалент: `docker run` с теми же флагами.
## Архитектура
```text