23

我在我的 Digital Ocean droplet 上安装了 Dokku,但在设置我的 dns 记录之前就安装了,所以 Dokku 安装在 IP 上。现在我更改了我的 dns 记录,因此可以通过site.com. 我可以通过以下方式访问我之前创建的 Dokku 容器site.com:port,如何更改 Dokku 设置以访问我的应用程序,如下所示 -appname.site.com

4

5 回答 5

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/ 路径中都有一个单独的 nginx.conf 并且需要被重写。

于 2014-03-11T06:19:45.590 回答
6

确实没有必要销毁和重新创建应用程序。首先,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。

于 2017-09-02T00:21:15.760 回答
5

要扩展@shirkey 答案:您无需重新创建(销毁并再次创建)应用程序即可应用这些更改。您可以在目录中手动创建 VHOST 文件/home/dokku/$APP/(作为 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)。

于 2016-01-27T15:52:06.047 回答
3

$ echo "example.com" > /home/dokku/VHOST

于 2015-03-12T16:58:55.857 回答
0

如果您仍然可以添加子域。这些是要检查的点。

示例:添加myapp.example.com.

1、DNS(如Namecheap)

如果您使用的是 Cloudflare,请检查自定义 DNS 是否设置为 Cloudflare。

2、CDN(如Cloudflare)

检查它是否有这样的记录。

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;
}
于 2020-11-08T09:33:42.377 回答