Runtipi: как правильно переключить встроенный Postgres-контейнер на внешний Postgres (.env / runtipi-cli / docker compose)?

Ссылка скопирована
0 ответов

Нужна помощь знающих людей по 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.

Что я проверял

  1. По вводным: прописал переменные прямо в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.)

  2. Нашёл вДокументации 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 inspect runtipi | grep POSTGRESПо вводным: показывает, что переменныеПо вводным: есть в конфиге контейнера.
    • Но внутри контейнераПеременных нет:
      docker exec -it runtipi sh -lc 'env | sort | egrep "^(POSTGRES_|DATABASE_URL|LOG_LEVEL)="'

      Вывод:LOG_LEVEL=infoPOSTGRES_*Отсутствуют.

    Также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 config
    • docker inspect runtipi
    • envВнутри контейнера
    • По вводным: данные между ними расходятся.
  • Проверял сделать.env Только для чтения:
    1. volumes: * /opt/runtipi/.env:/opt/runtipi/.env:roИchmod 444 .env
    2. По вводным: несмотря на это, при старте черезruntipi-cli:
      • .envПо вводным: всё равно используется с дефолтами
      • POSTGRES_HOSTСнова =runtipi-db
    3. Останавливалruntipi-dbСейчас ситуация такая: вручную и запускал Runtipi без него — внешний PostgreSQL всё равно не использовался.


Вопросы

  1. Каким способом правильно и “канонично” перевести Runtipi на внешний PostgreSQL?
    Черезruntipi-cli+--env-file, черезdocker-compose.ymlНужно понять:, или есть другой supported-way?
  2. По вводным: почему может быть ситуация, когда:
    • docker inspectПоказываетPOSTGRES_*
    • По вводным: но внутри контейнера их нет вenv?
  3. Есть ли у 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?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно