如何使用Dokku插件访问附加功能
注意:自编写本指南以来,Dokku 项目发生了重大变化。 以下说明可能无法反映 Dokku 项目的当前状态。
介绍
Dokku 是一种应用程序部署解决方案,可用于轻松地将代码启动到生产环境中。 结果是您的应用程序环境将被自动配置,必要的软件将被安装和实施。
Dokku 坚持应用程序资源应该作为与实际应用程序分开的组件来处理的理念。 这创建了一种灵活的关系,无需太多额外配置即可轻松交换资源或主应用程序代码。 Dokku 通过插件系统处理外部资源。
在本指南中,我们将讨论如何利用 Dokku 的插件系统来扩展项目的功能并将您的应用程序与其所需的后端链接。 我们还将研究其他一些可以帮助您监控和管理应用程序的插件。
先决条件
本文假设您使用我们的 Dokku 一键安装方式安装了 Dokku 的工作配置。 您应该至少完成本教程中的第二步,以完成您的 Dokku 配置 。
有哪些可用的插件?
Dokku 易于扩展,并且有一个易于连接的插件系统。 事实上,许多被认为是核心功能的操作都是由 Dokku 中的插件处理的。 这允许主要应用程序保持苗条和模块化。
大多数人希望从插件系统中获得的主要内容是数据库访问。 通过社区插件,Dokku 提供对许多流行数据库系统的访问,包括 MariaDB、PostgreSQL、MongoDB 和 Redis。 您可以找到 数据库插件 的完整列表。
除了数据库访问之外,还有用于多个进程管理器的插件。 Dokku 通过“Procfile”运行进程,其中列出了必须运行的进程类型以及执行它们所需的命令。 默认情况下,Dokku 只运行“网络”进程。
要运行其他类型的进程(如工作进程),您可以使用进程管理器,它运行 Procfile 来执行其他进程类型。 有多种可供选择,但它们基本上都做同样的事情。 当前选择包括circus、shoreman和supervisord。 除了启动其他进程类型之外,其中一些还具有重新启动崩溃应用程序的能力。
一般插件说明
大多数插件都是使用以下通用格式安装和配置的。 您可以使用一个简单的命令下载并安装它们:
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 插件要求您部署应用程序、创建数据库,然后重新推送应用程序。
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 插件页面 以显示您的插件。