如何使用Dokku一键DigitalOcean映像运行Play!应用

表演!框架是一个伟大的方式来轻松脚手架和开发一个Java或Scala的应用程序。 Dokku是建立在Docker,Linux的容器,能够快速,无缝地将应用程序部署到生产环境中部署的系统。在本文中,我们将讨论如何启动一个简单的Java Play!应用程序中使用Dokku。

介绍


在开发应用程序一个显著的障碍是提供一个健全的和简单的方法来部署您的成品。Dokku是平台即服务解决方案,使您能够快速部署和一个单独的服务器上配置的应用到生产环境。 Dokku与Heroku类似,可以部署到远程服务器。不同的是,Dokku被部署到单个个人服务器,并且非常轻量级。 Dokku使用Docker(一种Linux容器系统)来轻松管理其部署。 在本指南中,我们将介绍如何部署Java Play!应用程序与Dokku使用DigitalOcean Dokku一键安装映像。

第一步 - 创建Dokku Droplet


我们需要做的第一件事是创建包含我们的Dokku安装的VPS实例。这是使用DigitalOcean Dokku应用程序设置简单。 点击“创建”按钮创建一个新的Droplet: DigitalOcean创造Droplet 命名您的Droplet,并选择您要使用的大小和地区: DigitalOcean配置Droplet1 向下滚动并单击“应用程序”选项卡。选择Dokku应用程序映像: DigitalOcean Dokku图像 如果您有SSH密钥可用,请选择它们。如果你还没有他们的配置,现在是一个伟大的时间来创建SSH密钥与DigitalOceanDroplet用 。此步骤将帮助您以后。 点击“创建Droplet”。将创建您的Dokku VPS实例。 DigitalOcean最终创造 一旦你的Droplet创建,你应该设置你的域名指向你的新DokkuDroplet。你可以学习如何与DigitalOcean配置的域名在这里。

第二步 - 访问Droplet完成配置


您可以通过从Web浏览器访问您的VPS来完成您的Dokku配置。 如果您配置了一个域名以指向您的Dokku安装,您应该使用您喜爱的网络浏览器访问您的域名。如果您没有配置域名,您可以使用您的Droplet的IP地址。 您将获得一个简单的配置页面。这里有一些部分需要配置。 DigitalOcean Dokku ssh键 首先,检查公共密钥,你将可以部署的计算机相匹配。这意味着如果您的项目在您的家庭计算机上,您应该使用与该设置对应的公共密钥。 如果您在创建Droplet期间选择了多个SSH密钥进行嵌入,则只有第一个可用。根据需要进行修改。 DigitalOcean Dokku主机名配置 接下来,修改主机名外地来匹配您的域名。如果您没有配置域名,请将其保留为您的IP地址。 选择希望引用应用程序的方式。默认情况下,应用程序将如下所示:
http://your_domain.com:app_specific_port_number
如果选择“为应用程序使用虚拟主机命名”复选框,则可以使用虚拟主机访问您的应用程序:
http://app_name.your_domain.com
单击“完成设置”按钮完成配置。

第三步 - 部署示例Java Play!应用于您的Dokku Droplet


现在我们已经配置了Dokku,我们可以开始处理我们要部署的应用程序。一般来说,Java Play!应用程序应该工作良好,没有很多Dokku的具体调整。

安装播放!环境在您的开发计算机上


在我们在Dokku上部署Java Play应用程序之前,我们需要配置我们的开发环境。对于本指南的目的,开发环境是指具有与您在Dokku设置期间输入的SSH密钥对匹配的SSH密钥对的计算机。 我们将假设您的开发机器是Ubuntu 12.04 VPS实例,但它可以是任何东西。此处列出的安装步骤可能会有所不同,具体取决于您的开发操作系统。检查这里的Play! 在其他平台上的安装步骤 。 在你的Ubuntu 12.04开发Droplet,你需要安装OpenJDK之前安装Play!框架。我们还将借此机会安装git进行版本控制,并解压缩解压Play!文件:
sudo apt-get install openjdk-6-jdk git unzip
现在我们已经安装了Java开发工具包,我们可以安装Play!框架。这不是在Ubuntu的默认存储库,所以我们可以从项目的网站获取它。在写这篇文章时,最新的版本是2.2.1,但你想检查是否有更新的版本可用:
cd ~
wget http://downloads.typesafe.com/play/2.2.1/play-2.2.1.zip
将框架文件解压缩到当前目录中:
unzip play-*
提取文件的目录是实际Play!可执行文件。更改到此目录,以便我们可以使命令对所有用户可执行:
cd play-*
chmod a+x play
我们需要将此目录添加到我们的命令路径,以便我们可以轻松地运行它。 运行此命令并用红色部分替换播放目录的路径。这将取决于您的用户名和您的Play版本:
export PATH=$PATH:/home/user_name/play-play_version
这将设置此会话的播放可执行文件的路径。要自动执行此每次登录,该行添加到您的底部时间.bashrc文件中:
nano ~/.bashrc
export PATH=$PATH:/home/user_name/play-play_version
你现在应该安装了play框架。你已经准备好玩!项目部署到Dokku。

构建一个简单的玩!应用


Web框架的要点是可以访问构建应用程序的结构化方法。像其他框架一样,玩!提供了快速获得并运行应用程序环境的方法。 切换到您想要新应用程序的目录,然后键入play new命令创建一个新项目:
cd ~
play new app_name
系统会询问您的应用程序的名称,以及您的应用程序是Java还是Scala应用程序。在这个例子中,我们将部署一个非常简单的Java应用程序:
       _
 _ __ | | __ _ _  _
| '_ \| |/ _' | || |
|  __/|_|\____|\__ /
|_|            |__/

play 2.2.1 built with Scala 2.10.2 (running Java 1.6.0_27), http://www.playframework.com

The new application will be created in /home/justin/app_name

What is the application name? [app_name]
> app_name

Which template do you want to use for this new application? 

  1             - Create a simple Scala application
  2             - Create a simple Java application

> 2
OK, application app_name is created.

Have fun!
现在,切换到创建的应用程序目录以开始调整项目:
cd app_name
为了简洁起见,我们将放弃一些更复杂的MVC(模型,视图,控制器)交互,并创建一个简单的“Hello world”应用程序。 这将使我们的默认网页控制器位于应用程序的目录内的app/controllers/Application.java 。让我们打开该文件,以便我们可以修改它:
nano app/controllers/Application.java
此文件呈现的默认页内的函数是index()函数。将此函数的内容替换为:
. . .
    public static Result index() {
        return ok("Hello World!");
    }
}
当请求根应用程序时,这将返回字符串“Hello World”。

通过Git启动项目的版本控制


为了在Dokku上部署我们的应用程序,我们的项目需要通过一个git仓库进行控制。为我们的项目创建一个git repo是微不足道的。 在我们这样做之前,如果这是你第一次在这台计算机上使用git,启动您的用户详细信息,使git将正常运行:
git config --global user.email "your_email"
git config --global user.name "your_name"
现在,将目录更改为您的项目根目录并启动一个git存储库:
cd ~/app_name
git init
现在,将所有项目文件添加到git并提交更改:
git add .
git commit -m 'Initial Commit'

部署您的Play!应用程序使用Dokku


现在,我们的项目完全在git内。我们可以通过简单地添加我们的DokkuDroplet作为这个存储库的远程,从这里部署到Dokku。 在此命令, remote_name可以是任何东西,因为它只是在本地机器上的标签。 在大多数情况下,将它命名为“dokku”或“production”是有意义的。 该app_name是,如果你Dokku配置过程中设置虚拟主机,您将使用访问您的Dokku并从Web浏览器应用程序的名称。
git remote add remote_name dokku@your_domain.com:app_name
要部署应用程序,只需将其推送到我们刚定义的远程存储库:
git push remote_name master
您将在终端中看到构建消息,因为Dokku配置应用程序环境并在其中部署您的应用程序。您将获得可用于访问您的申请的网址:
. . .
-----> Discovering process types
       Default process types for Play 2.x - Java -> web
-----> Releasing roar ...
-----> Deploying roar ...
-----> Cleaning up ...
=====> Application deployed:
       http://app_name.your_domain.com

To dokku@your_domain.com:app_name
   11f13b1..bf21e58  master -> master
如果您访问该地址,您应该看到如下所示的内容:
Hello World!

结论


你现在应该有一个体面的想法如何部署一个Play!应用程序使用Dokku。这个过程变得更复杂,您的应用程序越复杂。 例如,数据库通过插件系统在Dokku内处理。如果您的应用程序依赖于数据库,您将需要在DokkuDroplet上安装插件。进程可能看起来像这样:
dokku plugin:install https://github.com/dokku/dokku-postgres.git
dokku postgres:create app_name
然后,你就必须引用变量$DATABASE_URL从您的项目中。 Dokku将自动将这两个链接在一起,并使用正确的连接信息填充$ DATABASE_URL环境变量。 复杂的玩!应用程序不在本文的讨论范围之内,但是在本地成功运行应用程序后,它们应该很容易部署。