Где хранить исходный код кастомного импортера?

Предлагаю работать с двумя контейнерами. Для этого создайте копию вашего текущего файла app.yml (он находится в /var/discourse/containers) и переименуйте её, например, в import.yml. Затем обновите параметр version на ветку вашего кастомного импортера.

params:
  version: ваша-ветка

Всякий раз, когда нужно запустить импорт, остановите контейнер app, запустите контейнер import и выполните скрипт внутри контейнера import. Если в Discourse были внесены значительные изменения, возможно, потребуется перебаза вашей ветки на последний коммит из ядра и пересборка контейнера.

cd /var/discourse
./launcher enter import

# хотите переключиться на другую ветку?
su discourse -c 'git checkout <ветка>'

# хотите получить новый код?
su discourse -c 'git pull'

После завершения миграции остановите контейнер импорта и перезапустите контейнер приложения.

cd /var/discourse
./launcher stop import
./launcher start app

Благодарность @gerhard, который научил меня всему этому :backhand_index_pointing_up: