我在我的Digital Ocean Droplet上安装了Dokku,但是在设置我的dns记录之前就这样做了,所以Dokku安装在IP上。现在我改变了我的dns记录,因此可以通过site.com
访问网站。我可以通过site.com:port
访问我之前创建的Dokku容器,如何更改Dokku设置以便像这样访问我的应用 - appname.site.com
答案 0 :(得分:19)
每https://github.com/progrium/dokku:
设置指向该主机的域和通配符域。确保 / home / dokku / VHOST设置为此域。默认情况下,它设置为 主机拥有的主机名。仅当创建此文件时才会创建此文件 主机名可以通过dig(dig + short $(hostname -f))来解决。除此以外 您必须手动创建文件并将其设置为首选文件 域。推送应用时,如果此文件仍然不存在, dokku将使用端口号发布应用程序(即 http://example.com:49154 - 请注意缺少的子域名。)
要解决此问题,您首先需要更新/ home / dokku / VHOST文件,添加域名 - 这将修复任何新生成的部署,但现有的应用程序需要从/ home /中删除dokku目录按名称(/ home / dokku / foo,/ home / dokku / bar等)并重新部署以使此更改生效,因为每个Dokku应用程序在/ home / dokku / paths中都有一个单独的nginx.conf那些将需要重写。
答案 1 :(得分:4)
扩展@shirkey answer:您不需要重新创建(销毁并再次创建)应用以应用这些更改。您可以在/home/dokku/$APP/
目录中手动创建VHOST文件(作为dokku用户),然后删除NO_VHOST设置(dokku config:unset $app NO_VHOST
)并将DOKKU_NGINX_PORT
更改为80(dokku config:set $app DOKKU_NGINX_PORT=80
)并重新启动应用程序( dokku ps:restart $app
)。
答案 2 :(得分:4)
确实没有必要销毁和重新创建应用程序。首先,dokku domains:report
告诉您是否已启用全局VHOSTS。如果没有,请运行
dokku domains:add-global yourdomain.tld
echo yourdomain.tld | sudo tee -a /home/dokku/VHOST
dokku domains:add myapp myapp.yourdomain.tld
dokku domains:enable myapp
第一个将yourdomain.tld添加到/ home / dokku / HOSTNAME。它也应该添加到/ home / dokku / VHOST,但它没有。所以这需要手动完成。然后告诉dokku您要访问myapp的(子)域名。最后一个命令将myapp的NO_VHOST变量设置为false。
答案 3 :(得分:3)
$ echo“example.com”> /家庭/ dokku / VHOST
答案 4 :(得分:0)
如果仍然可以添加子域。这些是要检查的点。
示例:添加myapp.example.com
。
1,DNS(例如Namecheap)
如果您正在使用Cloudflare,请检查“自定义DNS”是否设置为Cloudflare。
2,CDN(例如Cloudflare)
检查是否有这样的A记录。
Type | Name | Content
A | myapp | public ip address of Digital ocean server
3,VPS(例如Digital Ocean)
如果您使用Cloudflare,则不必在Digital Ocean上设置域设置。
4,独孤
dokku proxy:report
检查端口80
映射到容器的端口。curl
。如果仍然无法找到问题的原因,请手动检查/home/dokku/appname/nginx.conf
/etc/nginx/nginx.conf
之类的nginx配置文件。
示例/home/dokku/appname/nginx.conf
文件
server {
listen [::]:80;
listen 80;
server_name myapp.example.com;
location / {
proxy_pass http://myapp-3030;
}
upstream myapp-3030 {
server 172.17.0.4:3030;
}