Как проксировать поддомены на другие серверы с помощью dokku?

Я хочу, чтобы мой хост dokku запускал основной nginx для моего домена (скажем, cooldok.ku).

На cooldok.ku по некоторым причинам у меня есть другие виртуальные машины, раздающие контент. Я хочу выставить этот контент на субдомен (скажем, vm.cooldok.ku, работает на виртуальной машине с адресом 10.0.0.7 на хосте cooldok.ku).

Я понял, что используемая методология называется обратным прокси.

В оптимальном мире был бы способ зарегистрировать и «связать» / проксировать поддомены только для dokku. В качестве дополнительного бонуса хост cooldok.ku сам выполнял ssl-вещи для https (например, ssltunnel), чтобы я мог использовать существующие сертификаты и/или использовать отличный letsencrypt на той же машине и защищать приложения на виртуальной машине, которые не предназначались для обслуживаться через https.

Как можно реализовать этот сценарий с докку? Насколько сложно было бы написать плагин, делающий это?

Обновить

Итак, в основном dokku (0.8) оснащен всем, что ему нужно. Вопрос в том, сколько из того, чего хочет достичь dokku (запустить эти вкусные докер-контейнеры), находится на пути. Чтобы взломать установку, которая делает то, что я хочу, можно сделать следующее:

# create folder where we want it
dokku apps:create vm

Теперь эти файлы должны быть созданы/присутствовать (установка dokku vanilla 0.8)

#/home/dokku/vm/DOCKER_OPTIONS_DEPLOY
--restart=on-failure:10

#/home/dokku/vm/IP.web.1 
10.0.0.7

#/home/dokku/vm/PORT.web.1 
80

#/home/dokku/vm/URLS 
# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN - I did it nonetheless
http://vm.cooldok.ku

#/home/dokku/vm/VHOST 
vm.cookdok.ku

#/home/dokku/vm/nginx.conf
# Just listing changes from another default app
[...]
proxy_pass  http://vm-host;
[...]
upstream vm-host {

  server 10.0.0.7:80;
}

После этого nginx нуждается в ручном перезапуске (или... dokku может что-то сделать для нас здесь)

Я почти уверен, что часть (избыточной) информации можно опустить, так как dokku, например, должен озадачить сам nginx.conf. Я не уверен, что эта установка выдержит перезагрузку/перезапуск nginx. Кроме того, во время тестов letsencrypt не позволял мне установить сертификаты/перестроить конфигурацию nginx, потому что он видит, что приложение vm не развернуто.

Обновление 2

Чтобы преодолеть проблему «приложение не развернуто», достаточно touch /home/dokku/vm/CONTAINER, но это становится все запутаннее и запутаннее ...


person Felix    schedule 01.03.2017    source источник


Ответы (1)


Я собрал информацию из обновлений моего поста в грязный скрипт по адресу https://github.com/econya/scripts/blob/master/scripts/virt-helpers/fake-dokku-app.sh .

Я предполагаю, что самым чистым решением как есть с восходящей совместимостью было бы создание файла Dockerfile, который запускает сам обратный прокси-сервер (настроенный с помощью переменных env/config:set), но я рад узнать более умное и красивое решение, или что я получаю заплатил за написание правильного плагина;)

Думаю, второй подход — использовать образ Null-Docker вместе с пользовательским шаблоном nginx.

person Felix    schedule 02.03.2017
comment
Спасибо, что поделились этим! Нет ли случайно лучшего решения с последними релизами? - person Aweb; 20.03.2020
comment
Я не знаю, но рад, если кто-то поделится правильным решением. - person Felix; 21.03.2020