如何使用Dokku插件来访问附加功能

Dokku是一个部署工具,让您快速到达你的应用程序离开地面在生产环境中。在本指南中,我们将讨论如何利用Dokku的插件系统,以扩展核心应用程序的功能。这将允许您访问数据库添加到您的应用程序,并为您提供更多部署选项。

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

介绍


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

Dokku坚持应用程序资源应该作为与实际应用程序分离的组件来处理的理念。 这创建了一种灵活的关系,其中资源或主应用程序代码可以容易地被交换而不需要额外的配置。 Dokku通过插件系统处理外部资源。

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

先决条件


本文假设您使用我们的Dokku一键安装安装了Dokku的工作配置。 你应该在本教程中完成您通过完成第二步至少可达Dokku配置

什么类型的插件可用?


Dokku被建立为容易扩展,并有一个插件系统,很容易挂钩。 事实上,有些人认为核心功能的许多操作由Dokku中的插件处理。 这使得主应用程序保持纤薄和模块化。

大多数人想要的插件系统的主要东西是数据库访问。 通过社区插件,Dokku提供了访问许多流行的数据库系统,包括MariaDB的PostgreSQL的MongoDB的 ,和Redis的 你可以找到的完整列表数据库插件

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

要运行其他类型的进程(如工作线程),可以使用进程管理器,该进程管理器运行Procfile以执行其他进程类型。 有多个可以选择,但他们都基本上做同样的事情。 目前的选择包括马戏shoremansupervisord 在启动其他进程类型时,其中一些还可以重新启动崩溃的应用程序。

一般插件说明


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

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 help安装新插件之后。

插件工作流示例


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

一次性设置


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

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

应用程序特定步骤


安装插件后,您可以将其用于要部署的每个应用程序。 您的过程在很大程度上取决于您是否已经部署了应用程序,以及您的特定插件的推荐步骤。

例如,PostgreSQL插件允许您在部署之前创建数据库实例。 然而,MongoDB插件需要你部署你的应用程序,创建数据库,然后repush应用程序。

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:1f61e96c987fc06cc5e71e70baeee776@172.17.0.9: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:1f61e96c987fc06cc5e71e70baeee776@172.17.0.9:5432/app_name

正如你所看到的, DATABASE_URL变量一直使用我们前面讨论过的数据库信息设置。

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

dokku postgres:logs app_name

首先部署应用程序

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

在这种情况下,你可以做两件事之一。 如果你只是忘记了创建数据库时,你可以简单地发出正常创建具有匹配名称的数据库命令:

dokku postgres:create app_name

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

但是,您也可以链接它。 这也是必要的,如果你想为你的数据库使用不同的名称,你可以创建它,然后链接它:

dokku postgres:create database_name

(到此为止,您的应用程序必须部署)

dokku postgres:link app_name database_name

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

结论


Dokku旨在利用模块化功能。 这有助于保持主要开发工作的重点,并提供了扩展核心模型的简单方法。 学习如何利用插件是获得软件最大功能的关键。

如果你发现Dokku缺少一些你需要的功能,可以考虑自己做一个插件。 如果您创建一个Dokku插件,您可以编辑Dokku插件页面到功能,您的插件。

作者:Justin Ellingwood