在本文中,我将介绍如何使用 Dokku 部署有状态应用。Dokku 是一个开源的轻量级平台,可以帮助您快速、简单地部署和管理应用程序。
什么是 Dokku?
Dokku 是一个基于 Docker 的开源平台,可以将应用部署到自己的服务器上。使用 Dokku,您可以轻松地将您的应用程序部署到云服务器上,而无需编写复杂的部署脚本。
Dokku 支持多种编程语言和框架,如 Ruby、Node.js、Python、Go、Java 和 PHP 等。此外,Dokku 还具有易于使用的 CLI 工具、简单的部署流程和灵活的插件系统。
安装 Dokku
首先,您需要将 Dokku 安装到您的服务器上。Dokku 支持多种 Linux 发行版,例如 Ubuntu、Debian、CentOS 和 Fedora。
安装 Dokku 非常简单,可以使用官方的一键安装脚本来自动化此过程。
以下是安装 Dokku 的步骤:
首先,将自己的服务器准备好,确保已经安装好了 Docker 和 Git 等必要的软件。
接着,使用如下命令获取 Dokku 官方的安装脚本:
$ wget https://raw.githubusercontent.com/dokku/dokku/v0.19.13/bootstrap.sh
- 然后,运行安装脚本来安装 Dokku:
$ sudo DOKKU_TAG=v0.19.13 bash bootstrap.sh
- 安装完成后,您需要为 Dokku 创建一个安全密钥。运行以下命令:
$ sudo dokku ssh-keys:add yourname@yourdomain.com id_rsa.pub
替换 yourname@yourdomain.com 为您自己的电子邮件地址。这会将您的公钥文件添加到 Dokku 的 SSH 授权列表中。
- 最后,您需要访问 Dokku 管理界面。在浏览器地址栏中输入您的服务器 IP 地址和端口号
http://<your-server-ip>:2000
,将会看到 Dokku 管理界面。您可以在此处通过 web 界面来管理应用程序的部署、配置和日志等。
部署有状态应用程序
现在,您已经安装好了 Dokku,接下来我们将学习如何使用 Dokku 部署一个简单的有状态应用程序。在这个示例中,我们将使用 Node.js 和 MongoDB 来构建一个 TODO 应用程序。
以下是我们需要完成的步骤:
- 创建 Node.js 应用程序
- 配置应用程序
- 部署应用程序
创建 Node.js 应用程序
首先,创建一个新的 Node.js 项目:
$ mkdir todo-app $ cd todo-app $ npm init
接着,使用以下命令安装 Express 和 MongoDB:
$ npm install express mongoose --save
创建一个名为 server.js 的文件,并编写以下代码,定义一个简单的 Express 应用程序来处理 HTTP 请求:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---------- - ---------------------- ----- -------- - ------------------- ---------------------------------------- -- ---------------------------- - --------------- ---- --- ----- --- - --------- -------------------------- ----- ---- - ---------------------- - ----- ------- ----- - ----- -------- -------- ----- - -- ----------------- ----- ---- -- - --------------- ------ -- - -- ----- - ------------------------- - ---- - --------------- - -- -- ------------------ ----- ---- -- - ----- ---- - --- -------------- --------------- ----- -- - -- ----- - ------------------------- - ---- - -------------- - -- -- ------------- ---- ---- ----- -- - ------------------------ ------------------------- -- ----- ---- - ---------------- -- ---- ---------------- -- -- - ------------------- --------- -- ---- --------- --
其中,我们定义了一个名为 Todo 的数据库模型,在请求 /todos
时返回所有的 todo 项,在请求 /todos
时创建一个新的 todo 项。这个应用程序将监听 3000 端口。
此时,您可以使用以下命令在本地启动此应用程序:
$ node server.js
访问 http://localhost:3000/todos
可以看到一个空数组。我们将在部署应用程序之前插入一些测试数据。
配置应用程序
接下来,我们需要将 MongoDB 配置到我们的应用程序中。在生产环境中,我们需要将 MongoDB 的连接字符串配置到 Dokku 的环境变量中。
首先,在本地完成开发和测试后,我们需要将应用程序提交到一个 Git 仓库,以便在服务器上进行部署。
$ git init $ git add . $ git commit -m "Initial commit"
然后,将 Git 仓库推到您的服务器上。在本例中,我们需要将应用程序推送到 Dokku。
首先,在本地添加一个远程 Git 仓库:
$ git remote add dokku dokku@<your-server-ip>:todo-app
然后,使用以下命令将应用程序推送到服务器上:
$ git push dokku master
在推送到服务器时,Dokku 将检查 package.json 中的 Node.js 版本,并使用 Node.js 和 npm 在服务器上安装应用程序的依赖项。在此过程中,Dokku 还将使用 Docker 创建一个容器,并在其中运行应用程序。
Dokku 会根据 package.json 文件中的启动命令来运行应用程序。在示例中,启动命令定义在 scripts 属性下的 start 项中。
Dokku 还会配置应用程序的环境变量。在本例中,我们需要将 MongoDB 的连接字符串配置到 Dokku 的环境变量中。
在服务器上运行以下命令:
$ dokku config:set todo-app MONGODB_URI=mongodb://<your-mongodb-host>/<your-mongodb-database>
请替换 <your-mongodb-host>
和 <your-mongodb-database>
为您自己的 MongoDB 主机和数据库名称。
最后,使用以下命令在服务器上创建一个名为 MongoDB 的插件,并将其与 todo-app 应用程序相关联。
$ dokku plugin:install https://github.com/dokku/dokku-mongo.git mongo $ dokku mongo:create todo-app $ dokku mongo:link todo-app todo-app
这将使用 Docker 安装 MongoDB 并将其与我们的应用程序关联起来。当我们需要创建新的 MongoDB 实例时,我们只需使用 dokku mongo:create
命令,并使用 dokku mongo:link
命令将其关联到我们的应用程序上。
部署应用程序
现在,我们已经完成了应用程序的配置,我们可以使用 Dokku 部署我们的应用程序了。
在执行部署命令之前,您需要使用以下命令创建一个名为 todo-app 的应用程序:
$ dokku apps:create todo-app
然后,使用以下命令将应用程序部署到服务器上:
$ git push dokku master
在完成部署之后,您可以使用以下命令查看应用程序的状态:
$ dokku ps:status todo-app
Dokku 还可以为您提供应用程序的日志、部署历史记录、插件列表和其他有用的信息。您可以使用 Dokku CLI 来执行这些操作。
结论
在本文中,我们介绍了如何使用 Dokku 来部署有状态应用程序。我们了解了如何安装 Dokku,如何配置应用程序并使用 MongoDB,以及如何将应用程序部署到服务器上。
Dokku 是一个功能强大且易于使用的平台,可以帮助开发人员和团队快速、简单地部署和管理应用程序。无论您是一个初学者还是一个有经验的开发人员,都可以使用 Dokku 来缩短您的部署周期,并为您的应用程序提供高度可靠和可扩展的基础设施。
示例代码:https://github.com/cnkichen/todo-app-dokku。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674834e193696b0268ea8d20