本文概述
该帖子最初是为Gun.io撰写的, 详细介绍了如何使用Dokku作为Heroku的替代品来部署Django应用。
移除广告
什么是Dokku?
几天前, 我被指到了Dokku项目, 这是一个“由Docker驱动的mini-Heroku”, 你可以将其部署在自己的服务器上以用作自己的私有PaaS。
你为什么想要自己的迷你Heroku?
- 好吧, Heroku可能要花很多钱。它托管在云中, 你可能不希望应用程序离开房间;并且你无法100%控制平台的各个方面。
- 也许你只是DIY类型的人。
无论如何, 杰夫·林赛(Jeff Lindsay)用不到100行bash代码共同入侵了Dokku!
Dokku将Docker与Gitreceive和Buildstep捆绑在一起, 成为一个易于部署, 派生/破解和更新的软件包。
你需要开始什么
你可以使用从AWS到自己专用网络上的计算机的任何内容。我决定将Digital Ocean用作此小项目的云托管服务。
托管Dokku的要求很简单:
- Ubuntu 14.10 x64
- SSH功能
Digital Ocean有一个预先配置的Droplet, 你可以使用它已经为Dokku环境提供了。随意使用它。我们将使用一台全新的服务器, 因此你可以在任何服务器上重新创建此过程, 而不仅仅是Digital Ocean上的一个。
让我们开始!
首先, 在上注册一个帐户
数字海洋
, 请确保将公共密钥添加到该帐户。
你可以按照此步骤执行第一到第三步
指南
如果需要创建新密钥, 可以帮助你进行设置。第四步将在以后派上用场。
接下来, 通过单击“创建液滴”来创建“液滴”(旋转节点)。确保选择“ Ubuntu 14.10 x64”作为图像。
我最初选择的是x32版本, 但无法安装Dokku(请参阅
https://github.com/progrium/dokku/issues/51
).
将ssh公钥添加到小滴中, 这样你就可以ssh进入计算机, 而无需每次登录都输入密码。Digital Ocean大约需要一分钟时间来启动计算机。
准备就绪后, Digital Ocean会通过电子邮件向你发送这样的信息, 并在电子邮件中包含机器的IP地址, 或者该机器将出现在“ Droplet”面板下。使用IP地址SSH进入计算机, 然后按照Digital Ocean的步骤四进行操作
ssh指南
.
安装Dokku
现在我们的主机已经设置完毕, 该安装和配置Dokku了。 SSH返回你的主机并运行以下命令:
$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | sudo DOKKU_TAG=v0.2.3 bash
无论你是否以root用户身份登录, 请确保使用sudo。有关更多信息, 请参见下面的“包装”部分。
安装可能需要两到五分钟。完成后注销主机。
请确保使用以下格式为用户上传公共密钥:
$ cat ~/.ssh/id_rsa.pub | ssh root@<machine-address> "sudo sshcommand acl-add dokku <your-app-name> "
将<machine-address>替换为主机的IP地址或域名, 并将<your-app-name>替换为Django Project的名称。
例如:
$ cat ~/.ssh/id_rsa.pub | ssh root@104.236.38.176 "sudo sshcommand acl-add dokku hellodjango"
移除广告
将Django应用程序部署到Dokku
对于本教程, 让我们按照Heroku上的Django入门指南进行初始Django应用程序设置。
同样, Dokku使用Buildstep, 该步骤使用Heroku构建包构建应用程序。它带有内置的Heroku Python Buildpack, 足以立即使用Django或Flask应用程序。但是, 如果你想添加自定义buildpack, 则可以。
创建一个Django项目并添加本地Git存储库:
$ mkdir hellodjango && cd hellodjango
$ virtualenv venv
$ source venv/bin/activate
$ pip install django-toolbelt
$ django-admin.py startproject hellodjango .
$ echo "web: gunicorn hellodjango.wsgi" > Procfile
$ pip freeze > requirements.txt
$ echo "venv" > .gitignore
$ git init
$ git add .
$ git commit -m "First Commit HelloDjango"
我们必须将Dokku作为Git远程服务器添加到主机上:
$ git remote add production dokku@<machine-address>:hellodjango
现在我们可以按下我们的代码:
$ git push production master
将<machine-address>替换为主机的地址或域名。如果一切顺利, 你应该在终端上看到应用程序已部署的消息:
=====> Application deployed:
http://104.236.38.176:49153
接下来, 访问http:// <machine-address>:49153, 你应该看到熟悉的“欢迎使用Django”页面。现在, 你可以在本地处理你的应用程序, 然后将其推送到你自己的mini-heroku!。
包起来
最初, 我没有安装“ sudo”安装了Dokku:
$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | DOKKU_TAG=v0.2.3 bash
当我尝试推送到Dokku时, python构建包将无法尝试下载/构建python。解决方案是先卸载Dokku, 然后使用sudo重新安装它:
$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | sudo DOKKU_TAG=v0.2.3 bash
不幸的是, Dokku与Heroku的差距并不大。
例如, 由于Dokku没有像Heroku这样的客户端应用程序, 所有命令都需要直接在主机服务器上运行。
因此, 为了运行这样的命令:
$ heroku run python manage.py syncdb
你需要先通过SSH进入服务器。实现此目的的最简单方法是创建一个dokku命令:
alias dokku="ssh -t root@<machine-address> dokku"
现在, 你可以运行以下命令来同步数据库:
$ dokku run hellodjango python manage.py syncdb
Dokku确实允许你为每个应用程序分别配置环境变量。只需创建或编辑/ home / git / APP_NAME / ENV并填写以下内容:
export DATABASE_URL=somethinghere
Dokku仍然是一个年轻的平台, 因此希望它不断发展并变得越来越有用。它也是开源的, 所以如果你想贡献, 提出请求或在Github上发布问题。
评论前必须登录!
注册