注:Dokku项目自本指南编写以来发生了重大变化。 以下说明可能无法反映Dokku项目的当前状态。
介绍
在开发应用程序一个显著的障碍是提供一个健全的和简单的方法来部署您的成品。Dokku是平台即服务解决方案,使您能够快速部署和一个单独的服务器上配置的应用到生产环境。
Dokku与Heroku类似,可以部署到远程服务器。 不同的是,Dokku被部署到单个个人服务器,并且非常轻量级。 Dokku使用Docker(一种Linux容器系统)来轻松管理其部署。
在本指南中,我们将介绍如何使用DigitalOcean Dokku一键安装映像来部署使用Dokku的Ruby on Rails应用程序。
第一步 - 创建Dokku Droplet
我们需要做的第一件事是创建包含我们的Dokku安装的VPS实例。 这是使用DigitalOcean Dokku应用程序设置简单。
点击“创建”按钮创建一个新的Droplet:
命名您的Droplet,并选择您要使用的大小和地区:
向下滚动并单击“应用程序”选项卡。 选择Dokku应用程序映像:
如果您有SSH密钥可用,请选择它们。 如果你还没有他们的配置,现在是一个伟大的时间来创建SSH密钥与DigitalOceanDroplet用 。 此步骤将帮助您以后。
点击“创建Droplet”。 将创建您的Dokku VPS实例。
一旦你的Droplet创建,你应该设置你的域名指向你的新DokkuDroplet。 你可以学习如何与DigitalOcean配置的域名在这里。
第二步 - 访问Droplet完成配置
您可以通过从Web浏览器访问您的VPS来完成您的Dokku配置。
如果您配置了一个域名以指向您的Dokku安装,您应该使用您喜爱的网络浏览器访问您的域名。 如果您没有配置域名,您可以使用您的Droplet的IP地址。
您将获得一个简单的配置页面。 这里有一些部分需要配置。
首先,检查公共密钥,你将可以从部署的计算机相匹配。 这意味着如果您的项目在您的家庭计算机上,您应该使用与该设置对应的公共密钥。
如果您在创建Droplet期间选择了多个SSH密钥进行嵌入,则只有第一个可用。 根据需要进行修改。
接下来,修改主机名外地来匹配您的域名。 如果您没有配置域名,请将其保留为您的IP地址。
选择希望引用应用程序的方式。 默认情况下,应用程序将如下所示:
http://your_domain.com:app_specific_port_number
如果选择“为应用程序使用虚拟主机命名”复选框,则可以使用虚拟主机访问您的应用程序:
http://app_name.your_domain.com
单击“完成设置”按钮完成配置。
第三步 - 将示例Ruby on Rails应用程序部署到您的Dokku Droplet
现在我们已经配置了Dokku,我们可以开始处理我们要部署的应用程序。 大多数情况下,Ruby on Rails应用程序应该按预期工作,特别是如果它们已针对Heroku进行了优化。
安装PostgreSQL数据库插件
我们将开始在我们刚刚部署的DokkuDroplet。 以root身份登录到Droplet。
Dokku通过插件系统处理数据库资源。 如果你的应用程序需要一个数据库,你需要安装插件并以这种方式创建一个数据库。
要安装PostgreSQL插件运行:
dokku plugin:install https://github.com/dokku/dokku-postgres.git
这将安装和配置必要的组件,以便为我们的应用程序提供Postgres访问。 如果我们发出Dokku帮助命令,我们可以看到我们现在有新的命令可用:
dokku help
. . .
plugins Print active plugins
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
run <app> <cmd> Run a command in the environment of an application
url <app> Show the URL for an application
. . .
下一步实际上是创建一个数据库,我们的应用程序可以插入和使用。 正如你可以看到的,这是很容易与我们提供的新的插件命令:
dokku postgres:create app_name
您选择的是很重要的app_name
认真这里。 它必须与您计划在部署应用程序时使用的名称相同。 您将通过以下方式访问该应用程序:
http://app_name.domain.com
创建基本Rails应用程序
从您的开发计算机(具有与在Dokku安装期间输入的SSH密钥相匹配的SSH密钥),您需要安装Ruby和Rails。 一个很好的方法是使用Ruby版本管理器RVM。
你可以用RVM的Ubuntu安装DropletRuby on Rails的在这里。
我们还将下载Rails应用程序所需的一些东西:
sudo apt-get install nodejs postgresql-server-dev-all
现在,我们将使用Rails创建一个新的简单的博客。 我们可以轻松地通过键入:
rails new blog
这将创建一个目录中称为新的Rails应用程序blog
在当前目录。
切换到目录:
cd blog
我们现在可以使用Rails脚手架能力为我们的博客生成一些组件:
rails generate scaffold post title:string body:text
我们需要将由脚手架创建的数据库迁移到我们的应用程序中:
rake db:migrate
最后,我们需要告诉Rails在访问网站时使用哪个页面作为默认页面。 使用文本编辑器打开config / routes.rb文件:
nano config/routes.rb
您需要通过添加根路由(红色)将一个指定默认文件的行添加到服务器:
Stuff::Application.routes.draw do root 'posts#index' resources :posts . . . . . . end
保存并关闭文件。
在尝试部署到Dokku之前,测试您的博客在当前计算机上是很重要的。 将其输入您的终端以启动rails开发服务器:
rails s
在Web浏览器,访问您正在开发计算机的IP地址,然后是:3000
:
your_dev_ip_address:3000
你应该看到一个裸骨Rails博客:
回到终端,通过按住控制键并击中'C'退出rails服务器:
CTRL+C
现在我们已经验证我们的应用程序正常运行,我们需要做一些修改,使我们的应用程序与Dokku工作。
首先,Rails开发环境使用SQLite数据库来管理其信息,但Dokku需要您使用Postgres进行部署。 我们可以通过修改应用程序目录中的Gemfile来改变它。
nano Gemfile
我们需要注释掉SQLite的需求,并添加Postgres需求:
source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.0.1' # Use sqlite3 as the database for Active Record # gem 'sqlite3' gem 'pg' # Use SCSS for stylesheets gem 'sass-rails', '~> 4.0.0' . . .
保存并关闭文件。
通过发出以下命令使项目了解这些更改:
bundle install
通过Git启动版本控制
现在,我们需要将我们的项目添加到git,以推送到Dokku。
如果你没有安装git,你现在就需要这样做。 如果您的开发机器是Ubuntu机器,您可以使用:
sudo apt-get install git
您需要配置一些全局设置,以便git将允许您添加提交:
git config --global user.email "your_email" git config --global user.name "your_name"
现在,在根应用程序目录中初始化一个git存储库:
git init
添加项目的所有文件并提交它们:
git add .
git commit -m 'Initial commit'
将应用程序推送到Dokku和部署
要部署到Dokku,您只需要添加域名作为您的git存储库的远程:
git remote add remote_name dokku@your_domain.com:app_name
该remote_name
可以成为任何你想请参阅您的Dokku机。 在大多数情况下dokku
是一个不错的选择。 该app_name
必须当你在DokkuDroplet创建PostgreSQL数据库您选择的名称相匹配。
现在,要部署,只需将您的应用程序推送到Dokku:
git push remote_name master
Dokku将部署您的应用程序,并为您提供一个可以访问您的应用程序的URL:
-----> app_name linked to redis/app_name container -----> app_name linked to postgres/app_name database -----> Deploying app_name ... -----> Cleaning up ... =====> Application deployed: http://app_name.your_domain.com To dokku@your_domain.com:app_name * [new branch] master -> master
在应用程序正常工作之前,我们需要执行最后一个步骤。 因为我们的应用程序是在一个新的环境中使用一个新的数据库,我们需要重新运行rake db:migrate
我们的应用程序环境中的命令。
我们可以通过SSHing到我们的DokkuDroplet。 Dokku允许您直接将命令传递到应用程序环境。
切换到应用程序目录,然后发出命令:
cd /home/dokku/app_name
注 :由于PostgreSQL的插件的变化,你现在必须对数据库明确地发出一个看起来像命令链接到你的应用程序:
dokku postgres:link app_name database_name
之后,我们可以像这样迁移数据库:
dokku run app_name rake db:migrate
您现在应该可以访问您的申请:
http://app_name.your_domain.com
结论
你现在应该有一个工作Rails应用程序部署和运行在你的DokkuDroplet。 您可以通过访问了解Dokku 在GitHub项目的页面 。 我们也有其他的部分在DigitalOcean Dokku教程 。