我希望我的 dokku 主机为我的域运行主要的 nginx(比如说 cooldok.ku
)。
出于某些原因,在 coldok.ku 上我有其他虚拟机提供内容。我想在子域上公开此内容(比如 vm.cooldok.ku
,在 coldok.ku 主机上的 10.0.0.7 VM 中运行)。
我认为涉及的方法称为反向代理。
在最佳世界中,将有一种仅限 dokku 的方式来注册和“链接”/代理子域。作为一个额外的好处,cooldok.ku
主机会为 https 本身做 ssl-stuff(比如 ssltunnel),这样我就可以利用现有的证书和/或在同一台机器上使用很棒的 letsencrypt 并确保安全VM 中不打算通过 https 提供服务的应用程序。
这个场景怎么用dokku来实现呢?编写一个这样做的插件有多难?
更新
所以,基本上 dokku (0.8) 配备了它需要的一切。问题是,dokku 想要实现的目标(启动那些美味的 docker 容器)中有多少阻碍了。要破解一个可以满足我要求的设置,可以执行以下操作:
# 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 本身。我不确定这个设置是否在重启/nginx 重启后仍然存在。此外,在测试中,letsencrypt 不允许我安装证书/重建 nginx 配置,因为它认为应用程序 vm
未部署。
更新2
要克服“应用未部署”的问题,touch/home/dokku/vm/CONTAINER
就足够了,但这会变得越来越乱......
最佳答案
我将帖子更新中的信息捆绑到 https://github.com/econya/scripts/blob/master/scripts/virt-helpers/fake-dokku-app.sh 的脏脚本中.
我想最干净的向上兼容的解决方案是创建一个 Dockerfile,它自己启动一个反向代理(通过 env/config:set 变量配置)——但我很高兴学习一个更聪明、更好的解决方案,或者我得到报酬写一个合适的插件 ;)
第二种方法是使用“Null”-Docker 图像和我猜的自定义 nginx 模板。
2021 年更新 根据发行说明,它现在可以使用(查找“路由到非 Dokku 管理的应用程序”):
https://dokku.github.io/release/dokku-0.25.0
不过,我仍然使用旧的 dokku 和上面写的解决方案。
关于nginx - 如何使用 dokku 将子域代理到其他服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529271/