注意:自编写本指南以来,Dokku项目已发生了重大变化。以下说明可能无法反映Dokku项目的当前状态。

介绍

Dokku是一个应用程序部署解决方案,可用于轻松地将代码启动到生产环境中。结果是将自动配置您的应用程序环境,并将安装和实施必要的软件。

Dokku坚持以下原则:应将应用程序资源作为与实际应用程序分开的组件来处理。这创建了一种灵活的关系,无需大量额外配置即可轻松交换资源或主应用程序代码。 Dokku通过插件系统处理外部资源。

在本指南中,我们将讨论如何利用Dokku的插件系统来扩展项目的功能,并将您的应用程序与所需的后端链接。我们还将研究其他一些可以帮助您监视和管理应用程序的插件。

先决条件

本文假定您具有使用我们的Dokku一键安装安装的Dokku的有效配置。您应该至少完成本教程的第二步才能完成Dokku配置。

有哪些可用的插件?

Dokku的构建易于扩展,并具有易于连接的插件系统。实际上,许多人会认为核心功能的许多操作是由Dokku中的插件处理的。这使主要应用程序保持苗条和模块化。

大多数人希望从插件系统中获得的主要内容是数据库访问权限。通过社区插件,Dokku可以访问许多流行的数据库系统,包括MariaDB,PostgreSQL,MongoDB和Redis。您可以找到数据库插件的完整列表。

除了数据库访问权限外,还有用于多个流程管理器的插件。 Dokku通过“ Procfile”运行进程,该文件列出了必须运行的进程类型以及执行它们所需的命令。默认情况下,Dokku仅运行“ Web”进程。

要运行其他类型的流程(例如工作程序),可以使用流程管理器,该管理器运行Procfile来执行其他流程类型。有多种选择,但是基本上它们都做相同的事情。当前的选择包括马戏团,肖尔曼和有监督的。除了启动其他进程类型外,其中一些还具有重新启动崩溃的应用程序的能力。

通用插件说明

大多数插件是使用以下常规格式安装和配置的。您可以使用一个简单的命令下载并安装它们:

dokku plugin:install git_repository

这将获取所有必要的依赖关系并配置您的环境。

您可以输入以下内容来访问Dokku的帮助系统:

dokku help

Dokku的帮助系统是动态生成的,其中包含与插件打包在一起的帮助文件。结果,例如,如果您安装PostgreSQL插件,您将获得描述其用法的新条目:

. . .
postgres:create <app>     Create a PostgreSQL container
postgres:delete <app>     Delete specified PostgreSQL container
postgres:info <app>       Display database informations
postgres:link <app> <db>  Link an app to a PostgreSQL database
postgres:logs <app>       Display last logs from PostgreSQL container
. . .

这意味着,无论您安装了多少个插件,您的文档仍将放在一个地方。在安装新插件后运行dokku帮助始终是一个好主意。

插件工作流程示例

为了让您更好地了解在部署情况下如何使用这些插件之一,我们将介绍一个示例过程。我们将假定我们的应用程序正在使用PostgreSQL数据库。

一次性设置

在首次使用PostgreSQL插件之前,我们需要从GitHub下载适当的文件并安装插件组件及其依赖项:

dokku plugin:install https://github.com/dokku/dokku-postgres.git

特定于应用程序的步骤

安装插件后,可以将其与要部署的每个应用程序一起使用。您的流程将在很大程度上取决于您是否已经部署了应用程序,以及针对特定插件的建议步骤。

例如,PostgreSQL插件允许您在部署之前创建数据库实例。但是,MongoDB插件要求您部署应用程序,创建数据库,然后重新推送应用程序。

PostgreSQL插件非常灵活。它可以处理任何一种情况,但是如果您首先创建数据库,则只需要少一步。

首先创建数据库

如果要首先创建数据库,并希望在部署时将其自动链接到应用程序,则需要为数据库选择与计划使用的名称相同的名称。 PostgreSQL的一般语法是:

dokku postgres:create app_name

然后,Dokku将把名称为app_name的任何应用程序链接到数据库实例。

创建数据库时,通常会收到一些有关连接参数的信息。在我们的示例中,连接参数如下所示:

-----> Starting container
       Waiting for container to be ready
       Creating container database
=====> Postgres container created: app_name
       DSN: postgres://postgres:[email protected]:5432/app_name

如果您需要对应用程序中的连接参数进行硬编码(极力推荐),则可以使用此信息。您还可以使用此信息通过通常的数据库接口(在本例中为psql)连接到本地计算机上的数据库,并预先填充数据。

在大多数情况下,您将不需要使用此信息,因为在部署时,Dokku会设置一个名为DATABASE_URL的环境变量,该变量包含具有适当参数的连接字符串。您可以访问此变量,并在程序中使用它以保持灵活性。

如果确实需要访问此信息,则始终可以通过键入以下内容来调用它:

dokku postgres:info app_name

现在我们已经为应用程序创建了数据库,我们将使用git将应用程序正常推送到Dokku。在接下来的输出中,最后,您应该能够看到您的应用程序已正确链接到数据库:

remote: -----> App app_name linked to postgresql/app_name database
remote:        DATABASE_URL=postgres://postgres:[email protected]:5432/app_name

如您所见,已使用我们前面讨论的数据库信息设置了DATABASE_URL变量。

如果您遇到数据库问题,则大多数插件会维护自己的日志:

dokku postgres:logs app_name

首先部署应用程序

如果希望使用数据库名称与应用程序不同的名称来部署应用程序,或者在部署应用程序之前忘记部署数据库,则始终可以在以后链接数据库。

在这种情况下,您可以执行以下两项操作之一。如果您只是忘记创建数据库,则只需发出具有匹配名称的普通create database命令:

dokku postgres:create app_name

之后,您可以重新推送您的应用程序,因为DATABASE_URL变量是在应用程序部署期间创建的。

但是,您也可以只链接它。如果您想为数据库使用其他名称,也可以创建它然后链接它,这也是必需的:

dokku postgres:create database_name

(此时,您的应用程序必须已部署)

dokku postgres:link app_name database_name

这会将数据库链接到应用程序,以便您的程序正常运行。

结论

Dokku旨在利用模块化功能。这有助于保持主要开发工作的集中性,并提供扩展核心模型的简便方法。学习如何利用插件对充分利用软件功能至关重要。

如果您发现Dokku缺少所需的某些功能,请考虑自己制作一个插件。如果您为Dokku创建插件,则可以编辑Dokku插件页面以使用您的插件。