找不到 Dokku 子域

Jam*_*e S 4 subdomain nginx digital-ocean dokku

我将一个应用程序部署到我的 Digital Ocean Dokku 实例,并设置了一个域,以便https://example.com(使用letsencrypt dokku 插件)指向我的originalApp. 我最近尝试在我的 Dokku 实例上部署第二个应用程序,认为我可以使用 访问它http://newApp.example.com,并最终使用new-example.com它来访问它。

但是,我无法访问我的新应用。 dokku domains:report产量:

=====> newApp domains information
       Domains app enabled:           true
       Domains app vhosts:            new-example.com newApp.example.com
       Domains global enabled:        true
       Domains global vhosts:         example.com
=====> originalApp domains information
       Domains app enabled:           true
       Domains app vhosts:            example.com
       Domains global enabled:        true
       Domains global vhosts:         example.com
Run Code Online (Sandbox Code Playgroud)

最终目标是让两个独立的域指向各自的应用程序。(这甚至可能吗?)但目前,我什至无法让子域工作。

我确认该应用程序正在运行 dokku logs newApp

在 Digital Ocean > Networking 部分,我newDomain.com有 Digital Ocean NS 记录以及A我的 Droplet 的 IP 记录。

这可能与我的nginx设置有关letsencrypt吗?

Jor*_*a T 7

这是可能的,我已经用 DigitalOcean droplets 做了几次,你终于拥有了你的迷你 Heroku。让它工作有点棘手,但我会尝试解释我复制它的步骤。

首先,您需要使用 Dokku 部署 DO droplet 才能开始使用。请记住在安装过程中选择“为应用程序使用虚拟主机命名”选项!

在您的 DNS 中,您必须配置一条A记录以访问您的服务器,其域将包含您的不同应用程序(子域)。 为 Dokku 实例创建“基本”A记录可以使其更容易访问,但不是必需的(仅影响实例,而不影响应用子域!)。

# Enable app subdomain routing
A   *.apps.example.com   <public IP address>

# Optional subdomain for Dokku instance
A   apps.example.com     <public IP address>
Run Code Online (Sandbox Code Playgroud)

现在您需要在服务器上部署您的两个应用程序以开始配置。创建应用程序并部署它们(如果您需要帮助来部署它,请使用谷歌)。最后,您应该在服务器中看到:

root@server-dokku-apps:~# dokku apps:list
=====> My Apps
acme-website
bubba-gump-website
Run Code Online (Sandbox Code Playgroud)

现在您需要为每个 Dokku 应用程序配置域。

root@server-dokku-apps:~# dokku domains:add acme-website www.acmewebsite.com
-----> Added www.acmewebsite.com to acme-website
-----> Configuring www.acmewebsite.com...(using built-in template)
-----> Configuring acme-website.apps.example.com...(using built-in template)
-----> Configuring www.acmewebsite.com...(using built-in template)
-----> Creating https nginx.conf
-----> Running nginx-pre-reload
       Reloading nginx

root@server-dokku-apps:~# dokku domains:add bubba-gump-website www.bubbagump.com
-----> Added www.bubbagump.com to bubba-gump-website
-----> Configuring www.bubbagump.com...(using built-in template)
-----> Configuring bubba-gump-website.apps.example.com...(using built-in template)
-----> Configuring www.bubbagump.com...(using built-in template)
-----> Creating https nginx.conf
-----> Running nginx-pre-reload
       Reloading nginx
Run Code Online (Sandbox Code Playgroud)

检查您是否可以使用默认的 Dokku 域访问应用程序(目前只有 http):

http://acme-website.apps.example.com
http://bubba-gump-website.apps.example.com
Run Code Online (Sandbox Code Playgroud)

如果一切正常,请将每个域配置为指向具有一些 CNAME 记录的正确应用程序。

# In your www.acmewebsite.com DNS records
CNAME   www.acmewebsite.com   www.acmewebsite.com.apps.example.com

# In your www.bubbagump.com DNS records
CNAME   www.bubbagump.com   www.bubbagump.com.apps.example.com

Run Code Online (Sandbox Code Playgroud)

最后一步是letsencrypt在每个应用程序上进行配置。要letssencrypt提供新证书,您的新域(例如www.acmewebsite.com)需要可访问。这就是为什么我们首先需要放置DNS CNAME!请记住在您的服务器上安装dokku-letsencrypt

# First for acme website
root@server-dokku-apps:~# dokku letsencrypt acme-website

# Finally for buba website
root@server-dokku-apps:~# dokku letsencrypt bubba-gump-website
Run Code Online (Sandbox Code Playgroud)

在所有这些混乱之后,您应该有两个闪亮的应用程序在它们自己的域中运行,并启用了 HTTPS。

希望这可以帮助。