**注:自本指南撰写以来, Dokku 项目发生了重大变化,下面的说明可能不反映 Dokku 项目的当前状态。
介绍
Dokku 是一种应用部署解决方案,可用于轻松地在生产环境中运行代码,结果是您的应用环境将自动配置,并安装和实现所需的软件。
Dokku坚持认为应用资源应作为实际应用程序的单独组件来处理,从而创造了一个灵活的关系,在这种情况下,资源或主要应用程序代码可以轻松交换,而无需额外配置。
在本指南中,我们将讨论如何利用 Dokku 的插件系统来扩展项目的功能,并将您的应用链接到它所需要的后端。
前提条件
本文假设您使用我们的单击 Dokku 安装安装了 Dokku 的工作配置,您应该至少完成本教程中的第 2 步以完成 Dokku 配置。
哪些类型的插件可用?
Dokku是可以轻松扩展的,并且有一个易于连接的插件系统,事实上,一些人认为核心功能的许多操作都是由Dokku中的插件处理的。
通过社区插件,Dokku提供了许多流行的数据库系统的访问,包括 MariaDB, PostgreSQL, MongoDB,和 Redis。
除了数据库访问之外,还有用于多个流程管理器的插件。Dokku通过一个Procfile
运行流程,其中列出了必须运行的流程类型和执行它们所需的命令。
要运行其他类型的流程(如工人),您可以使用一个流程管理器,该流程管理器运行 Procfile 来执行其他类型的流程。 您可以选择多种流程,但它们基本上都是相同的。 目前的选项包括 circus, shoreman和 supervisord. 在启动额外的流程类型上,其中一些也具有重新启动崩溃的应用程序的能力。
一般 Plugin 指示
大多数插件都是使用以下一般格式安装和配置的,您可以用一个简单的命令下载和安装它们:
1dokku plugin:install git_repository
这将抓住所有必要的依赖,并配置您的环境。
您可以通过键入Dokku的帮助系统访问:
1dokku help
Dokku的帮助系统被动态地生成,以包含附加插件的帮助文件. 因此,如果您安装 PostgreSQL 插件,例如,您将收到描述其使用的新条目:
1. . .
2postgres:create <app> Create a PostgreSQL container
3postgres:delete <app> Delete specified PostgreSQL container
4postgres:info <app> Display database informations
5postgres:link <app> <db> Link an app to a PostgreSQL database
6postgres:logs <app> Display last logs from PostgreSQL container
7. . .
这意味着,无论你安装了多少插件,你的文档都会在一个地方。
插件工作流示例
为了给您一个好主意,如何在部署情况下使用这些插件之一,我们将通过一个示例程序,我们将假设我们的应用程序使用PostgreSQL数据库。
一个时间设置
在第一次使用PostgreSQL插件之前,我们需要从GitHub下载相应的文件并安装插件组件及其依赖:
1dokku plugin:install https://github.com/dokku/dokku-postgres.git
具体应用步骤
安装插件后,您可以使用它与您想要部署的每个应用程序. 您的过程将很大程度上取决于您是否已经部署了您的应用程序,以及针对您的特定插件的建议步骤。
例如,PostgreSQL插件允许您在部署前创建数据库实例,但是MongoDB插件要求您部署应用程序,创建数据库,然后重新部署应用程序。
PostgreSQL 插件非常灵活,它可以处理任何情况,但如果您先创建数据库,这将是一个小步骤。
首先创建数据库**
如果您首先创建数据库,并希望它在部署时自动链接到您的应用程序,则需要为您的应用程序选择您打算使用的数据库的相同名称。
1dokku postgres:create app_name
随后,Dokku 会将任何按着app_name
的应用程序链接到数据库实例。
当您创建数据库时,您通常会收到有关连接参数的一些信息. 在我们的示例中,连接参数看起来像:
1-----> Starting container
2 Waiting for container to be ready
3 Creating container database
4=====> Postgres container created: app_name
5 DSN: postgres://postgres:[email protected]:5432/app_name
如果您需要硬编码应用程序中的连接参数(很少推荐),您可以使用此信息,也可以使用此信息通过通常的数据库接口连接到本地机器的数据库(在这种情况下 psql),并预先填充数据。
在大多数情况下,您将永远不需要使用这些信息,因为在部署时,Dokku会设置一个名为DATABASE_URL
的环境变量,其中包含具有相应参数的连接字符串。
如果您需要访问这些信息,您可以随时通过键入回忆它:
1dokku postgres:info app_name
现在我们已经为我们的应用程序创建了一个数据库,我们会将我们的应用程序按正常方式推向Dokku,使用 git. 在下面的输出中,到最后,您应该能够看到您的应用程序与您的数据库相关联正确:
1remote: -----> App app_name linked to postgresql/app_name database
2remote: DATABASE_URL=postgres://postgres:[email protected]:5432/app_name
正如您所看到的,DATABASE_URL
变量已设置使用我们之前讨论的数据库信息。
如果您遇到数据库问题,大多数插件都会保持自己的日志:
1dokku postgres:logs app_name
** 首先部署应用程序**
如果您想要部署具有与应用程序不同的名称的数据库的应用程序,或者在部署应用程序之前忘记部署数据库,您可以随时链接数据库。
如果您只是忘记创建数据库,您可以简单地发出使用 ** matching** 名称的正常创建数据库命令:
1dokku postgres:create app_name
之后,您可以重新推导应用程序,因为在应用程序部署过程中创建了DATABASE_URL
变量。
但是,您也可以仅仅链接它. 如果您想为您的数据库使用不同的名称,您可以创建它,然后链接它:
1dokku postgres:create database_name
(此时,您的应用程序必须部署)
1dokku postgres:link app_name database_name
这将链接数据库到应用程序,以便您的程序正常工作。
结论
Dokku 旨在利用模块化功能,这有助于保持主要的开发努力集中,并提供了扩展核心模型的简单方法。学习如何利用插件是必不可少的,以便从软件中获得最大的功能。
如果您发现 Dokku 缺少您需要的某些功能,请考虑自己创建一个插件. 如果您为 Dokku 创建一个插件,您可以编辑 Dokku 插件页面以提供您的插件。