Привет! Нужна помощь знающих людей по Runtipi.
Исходные условия- Runtipi установлен в LXC-контейнере (Proxmox).
- Установка была через скрипт start-samohosting
bash -c "$(wget -qLO - install.samohosting.ru)" - Runtipi версия: v4.6.5
- Каталог:
/opt/runtipi - Runtipi запускается контейнерами:
runtipi, runtipi-reverse-proxy, runtipi-queue, runtipi-db (postgres:14)
Цель
Хочу
подключить Runtipi к внешнему PostgreSQL (на другом LXC-контейнере в той же сети), чтобы не держать
runtipi-db (
postgres:14) внутри LXC. Внешний Postgres доступен, подключение проверял:
docker run --rm --network runtipi_tipi_main_network postgres:14 \
psql "host=192.168.100.106 port=5432 dbname=tipi user=tipi password=STRONG_PASSWORD" \
-c "select current_user, current_database(), inet_client_addr(), current_setting('search_path');"
Команды выполняются,
create schema if not exists drizzle; тоже проходит.
Что было изначально
В
.env после установки была задана переменная окружения
POSTGRES_HOST=runtipi-db, и Runtipi заводится со своим контейнером
runtipi-db.
Что я пробовал- Прописал переменные прямо в
docker-compose.yml (у сервиса runtipi), предварительно создав БД tipi и выдав все права:
environment:
POSTGRES_HOST: 192.168.100.106
POSTGRES_PORT: "5432"
POSTGRES_DBNAME: tipi
POSTGRES_USERNAME: tipi
POSTGRES_PASSWORD: STRONG_PASSWORD
Но при старте получал ошибки миграций:
Error migrating database: Failed query: CREATE SCHEMA IF NOT EXISTS "drizzle"
(При этом внешняя БД доступна и schema создаётся вручную через psql.) - Нашёл в документации Runtipi описание .env.local:
When running CLI commands, you can override any environment variable by providing a custom .env file
sudo ./runtipi-cli start --env-file ./.env.local
Сделал:cp .env .env.local nano .env.localВ .env.local оставил минимально:
POSTGRES_HOST=192.168.100.106
POSTGRES_PORT=5432
POSTGRES_DBNAME=tipi
POSTGRES_USERNAME=tipi
POSTGRES_PASSWORD=STRONG_PASSWORD
LOG_LEVEL=info
Запуск:
docker compose down sudo ./runtipi-cli start --env-file ./.env.local
После запуска:
Также docker compose --env-file ./.env.local config почему-то показывает POSTGRES_HOST: runtipi-db, будто используется .env, а не .env.local. И при этом runtipi-db всё равно поднимается как postgres:14.
Дополнительно пробовал- Прописывал параметры PostgreSQL напрямую в
docker-compose.yml (секция environment сервиса runtipi).- либо Runtipi всё равно подключался к
runtipi-db; - либо падал на миграциях (
CREATE SCHEMA drizzle).
- Проверял, не перезаписываются ли переменные на старте:
docker compose configdocker inspect runtipienv внутри контейнера- данные между ними расходятся.
- Пробовал сделать
.env только для чтения:volumes: * /opt/runtipi/.env:/opt/runtipi/.env:ro и chmod 444 .env- Несмотря на это, при старте через
runtipi-cli:.env всё равно используется с дефолтамиPOSTGRES_HOST снова = runtipi-db
- Останавливал
runtipi-db вручную и запускал Runtipi без него — внешний PostgreSQL всё равно не использовался.
Вопросы- Как правильно и “канонично” перевести Runtipi на внешний PostgreSQL?
Через runtipi-cli + --env-file, через docker-compose.yml, или есть другой supported-way? - Почему может быть ситуация, когда:
docker inspect показывает POSTGRES_*- но внутри контейнера их нет в
env?
- Есть ли у Runtipi дополнительный слой генерации/перезаписи env, который игнорирует
POSTGRES_HOST и возвращает runtipi-db?
Если нужно — могу приложить
docker-compose.yml,
.env,
.env.local, логи
docker logs runtipi и вывод команд
./runtipi-cli.
Заранее спасибо!
UPD:
Собрал архив и залил в репозиторий
https://github.com/DataArchitectPro/runtipi_habr_debug со всеми конфигами/логами/inspect’ами до и после попытки переключения Runtipi v4.6.5 на внешний PostgreSQL.
Что делал: добавил параметры внешней БД в .env.local (POSTGRES_HOST=192.168.100.106 и т.д.), проверил env внутри контейнера runtipi — там POSTGRES_* действительно указывают на внешний хост. Но при этом docker compose config после изменений всё равно показывает POSTGRES_HOST: runtipi-db + depends_on: runtipi-db, и контейнер runtipi-db продолжает подниматься. В docker inspect runtipi видно, что /opt/runtipi/.env смонтирован внутрь контейнера как /data/.env, а в этом .env всё ещё POSTGRES_HOST=runtipi-db. В логах runtipi есть Generating system env file — похоже, Runtipi на старте генерирует/перезаписывает системный env из /data/.env, игнорируя .env.local.
В архиве 2 снимка: 00_Исходное_состояние и 01_Попытка_внешний_PostgreSQL, плюс diffs и выводы команд (env внутри контейнера, compose config, inspect).
Нужен совет: какой supported-way “правильно” указать внешний Postgres так, чтобы Runtipi не возвращал runtipi-db?