我在我的 Digital Ocean droplet 上安装了 Dokku,但在设置我的 dns 记录之前就安装了,所以 Dokku 安装在 IP 上。现在我更改了我的 dns 记录,因此可以通过site.com
. 我可以通过以下方式访问我之前创建的 Dokku 容器site.com:port
,如何更改 Dokku 设置以访问我的应用程序,如下所示 -appname.site.com
5 回答
根据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 并且需要被重写。
确实没有必要销毁和重新创建应用程序。首先,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。
要扩展@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
)。
$ echo "example.com" > /home/dokku/VHOST
如果您仍然可以添加子域。这些是要检查的点。
示例:添加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;
}