如何使用dokku将子域代理到其他服务器?

时间:2017-03-01 10:29:23

标签: nginx reverse-proxy dokku

我希望我的dokku主机为我的域名运行主要的nginx(让我们说cooldok.ku)。

在cooldok.ku上由于某些原因我有其他虚拟机提供内容。我想在子域上公开这些内容(比如vm.cooldok.ku,在cooldok.ku主机上的10.0.0.7的VM中运行)。

我认为所涉及的方法称为反向代理。

在一个最佳的世界中,将会有一种仅限dokku的方式来注册和“链接”/代理子域。作为额外的奖励,cooldok.ku主机将为https本身(如ssltunnel)执行ssl-stuff,以便我可以利用现有证书和/或在同一台计算机上使用awesome letsencrypt并保护VM中的应用程序并不打算通过https提供服务。

如何用dokku实现这个场景?编写插件这样做有多难?

更新

所以,基本上dokku(0.8)配备了它所需要的一切。问题是,dokku想要达到的目标(启动那些美味的码头集装箱)有多少阻碍了。为了破解我想要的设置,可以完成以下操作:

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

现在,必须创建/存在这些文件(vanilla 0.8 dokku安装)

#/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本身。我不确定这个设置是否能够在reboot / nginx重启后继续存在。此外,在测试中,letsencrypt不允许我安装证书/重建nginx配置,因为它看到应用程序vm未被部署。

UPDATE2

为了克服“app not deployed”问题,touch /home/dokku/vm/CONTAINER就足够了,但这会变得更加混乱......

1 个答案:

答案 0 :(得分:0)

我将帖子更新中的信息捆绑到https://github.com/econya/scripts/blob/master/scripts/virt-helpers/fake-dokku-app.sh的脏脚本中。

我认为最简洁的解决方案是向上兼容性创建一个Dockerfile,它自己启动一个反向代理(通过env / config:set variables配置) - 但我很高兴能够学到一个更智能,更好的解决方案,或者我得到报酬写一个合适的lugin;)

第二种方法是使用“Null”-Docker图像和我猜的自定义nginx模板。