Diango教程-Dokku Django
什么是Dokku?
Dokku是一个于2013年发布的开源项目,旨在简化基于Docker的应用托管平台的设置。Dokku用Ruby编写,并使用Docker来管理应用和容器。
Dokku是一个基于容器的应用部署平台,用于在Docker容器中运行应用程序。它类似于Heroku,但有一些关键的区别。其中一个主要区别是Dokku不使用构建包(buildpacks),而是依赖容器来构建和部署您的应用程序。
Dokku还具有比Heroku更多的功能,例如在单个实例上运行多个应用程序,并且可以轻松添加和删除插件。总的来说,Dokku是一个非常适合那些希望轻松部署基于Docker的应用程序的选项。
要将Django与Dokku一起使用,您需要创建一个Profile文件并添加以下内容:
web: gunicorn myproject.wsgi -b 0.0.0.0:$PORT
您还需要创建一个requirements.txt文件并添加所有的依赖项。完成这些步骤后,您可以将代码推送到Dokku实例,它会自动部署。
什么是Django?
Django是一个Web开发框架,使开发人员能够快速轻松地创建Web应用程序。它用Python编写,是一款自由开源软件,采用GNU通用公共许可证发布。
如何在Dokku和Django中一起使用?
Dokku是托管Django应用的一个很好的方式。本章将向您展示如何设置Dokku和Django,并展示如何使用Dokku的内置功能来改进您的开发工作流程。
如何设置Dokku和Django开发环境?
本节将向您展示如何设置Dokku和Django开发环境。Dokku是一个自托管的平台即服务(PaaS),可以轻松部署Web应用程序。Django是一个用于Python的Web框架,可帮助您构建Web应用程序。
要设置Dokku和Django开发环境,您将需要以下内容:
- 安装有Ubuntu 16.04的计算机。
- 一个域名。
- 域名的证书。
- 在您的计算机上安装了Dokku。
- 在您的计算机上安装了Django。
首先,您需要在计算机上安装Ubuntu 16.04。如果您尚未安装Ubuntu,请从Ubuntu网站下载:
https://www.ubuntu.com/download/desktop
下载Ubuntu的步骤如下:
- 前往官方Ubuntu网站(https://ubuntu.com/download)。
- 选择要下载的版本。
- 按照您的操作系统的说明进行操作。
- 等待下载完成;这通常需要大约20分钟。
- 下载完成后,您可以在计算机上安装Ubuntu。
接下来,您需要购买一个域名。您可以在NameCheap网站上找到购买域名的说明:
在NameCheap上购买域名的步骤如下:
- 前往NameCheap的网站(https://www.namecheap.com/)。
- 在搜索框中输入您想购买的域名。
- 查找可用的域名并选择您想要的域名。
- 将域名添加到购物车并进行结账。
- 选择您的支付方式并完成支付过程。
- 您将收到一封确认购买的电子邮件。
一旦您拥有了域名,您将需要为该域名购买一个证书。您可以在Let's Encrypt网站上找到购买证书的说明:
https://letsencrypt.org/getting-started/
购买Let's Encrypt证书的步骤如下:
- 前往Let's Encrypt的网站(https://letsencrypt.org/)。
- 输入您想用证书保护的域名。
- 按照提供的说明生成和安装证书。
- 最后,配置您的Web服务器使用新的证书,然后安装Dokku的步骤。
一旦您拥有了域名和证书,您将需要在计算机上安装Dokku。您可以在Dokku网站上找到安装Dokku的说明:
在Dokku网站上安装Dokku的步骤如下:
- 前往Dokku的网站(https://dokku.viewdocs.io/)。
- 下载并安装Dokku的一键安装程序。
- 按照提供的说明完成安装过程。
- 安装完成后,您将能够访问您的Web服务器上的Dokku。
安装了Dokku之后,下一步是安装dokku-alt插件。该插件提供一些在标准Dokku安装中找不到的附加功能。
要安装该插件,请运行以下命令:
git clone https://github.com/dokku-alt/dokku-alt.git /var/lib/dokku/plugins/dokku-alt
安装了插件后,您需要配置它。配置文件位于/etc/dokku-alt/dokku-alt.conf。您需要编辑此文件并将DOKKU_ALT_DOMAIN变量设置为您的域名(例如,example.com)。此外,您还需要将DOKKU_ALT_HOSTNAME变量设置为您的主机名(例如,dokku.example.com)。
接下来是将Django项目配置为与dokku-alt配合使用。在项目的设置文件(通常称为settings.py)中,您需要添加以下行:
import os
SECRET_KEY = os.environ['SECRET_KEY']
安装了Dokku之后,您需要在计算机上安装Django。您可以在Django网站上找到安装Django的说明:
https://docs.djangoproject.com/en/dev/
以下是在Django网站上安装Django的步骤:
- 前往Django官方网站(https://www.djangoproject.com/)。
- 按照说明下载并安装最新版本的Django。
- 安装完成后,您将能够在计算机上访问Django。
安装了Dokku和Django之后,您将准备好开始开发Web应用程序。
如何设置Django项目?
设置Django项目可能是一个令人生畏的任务。但是通过几个简单的步骤,您可以快速启动您的项目。在本章中,我们将向您展示如何设置您的环境并创建您的第一个Django项目。
首先,您需要安装Python。如果您尚未安装Python,可以从Python网站下载。安装了Python之后,您需要安装Django。要安装Django,请打开终端并运行以下命令:
pip install django
接下来,您需要创建一个新的项目。要做到这一点,请在终端中运行以下命令:
django-admin startproject myproject
这将创建一个名为myproject的新目录,其中包含用于您的项目的所有文件和文件夹。
现在,您需要设置您的环境。在项目目录中,您会找到一个名为settings.py的文件。此文件包含您的项目的所有设置。您需要编辑此文件来设置您的环境。
首先,您需要设置DJANGO_SETTINGS_MODULE环境变量。该变量告诉Django使用哪个设置文件。要设置此变量,请在您的settings.py文件中添加以下行:
DJANGO_SETTINGS_MODULE=myproject.settings
接下来,您需要设置SECRET_KEY环境变量。此变量用于加密Cookie和其他敏感数据。要设置此变量,请在您的settings.py文件中添加以下行:
SECRET_KEY='your_secret_key'
最后,您需要设置ALLOWED_HOSTS环境变量。此变量告诉Django哪些主机可以访问您的项目。要设置此变量,请在您的settings.py文件中添加以下行:
ALLOWED_HOSTS = ['your_domain.com']
设置了这些环境变量后,您的Django项目将设置好,并且您可以开始进行开发了。
如何使用Django模板
Django模板是一种简单而强大的方法来创建动态Web页面。它们是用类似Python的语言编写的,并允许您在模板中插入Python代码,以创建动态生成的内容。
要创建一个Django模板,请创建一个具有.html扩展名的新文件。在模板中,您可以使用{% %}标签插入Python代码。例如,要插入当前时间,可以使用以下代码:
{% now %}
这将打印当前时间,格式为“Tue, 05 Dec 2017 13:27:10”。
您还可以使用{% load %}标签加载其他模板。如果您在多个模板中重复使用常见的HTML片段,这可能很有用。
要在Django项目中使用模板,将模板名称添加到settings.py文件中的TEMPLATES设置中。Django将自动加载模板并渲染它。
将您的Django应用程序部署到Dokku
假设您的Django应用程序已经准备好并在本地计算机上运行,您可以将其部署到dokku实例。在开始之前,请确保满足以下先决条件:
- 已经运行并可访问一个dokku实例。
- 在本地计算机上已安装dokku客户端。
- 本地计算机上有您的Django应用程序代码库。
现在让我们开始。您首先需要在Django项目的根目录中创建一个名为Procfile的文件。此文件将告诉dokku如何运行您的应用程序。在Profile中添加以下行:
web: gunicorn myproject.wsgi -b 0.0.0.0:$PORT
这告诉dokku使用gunicorn来运行您的Django应用程序,并将其绑定到端口$PORT(在应用程序部署时,dokku将注入此端口)。接下来,在项目的根目录中创建一个名为requirements.txt的文件。此文件将包含您的Django应用程序所依赖的所有Python软件包。例如:
Django==1.8.4
gunicorn==19.3
如何创建Dokku应用程序?
假设您已经设置好并可以访问Dokku主机,创建新应用程序就像从本地开发环境运行此命令一样简单:
dokku apps:create myapp
这将在Dokku服务器上创建一个新的远程Git仓库,并添加一个post-receive hook,以便在推送代码时自动部署。现在您可以将新创建的远程仓库添加到本地Git仓库,并将代码推送到其中:
git remote add dokku dokku@myapp.example.com:myapp
git push dokku master
基本代码:
#!/bin/bash
# Set app name
app_name="my-dokku-app"
# Create the app
dokku apps:create $app_name
# Set environment variables (if any)
dokku config:set $app_name ENV_VAR_NAME=value
# Add a database to the app (if needed)
# dokku plugin:install https://github.com/dokku/dokku-postgres.git
# dokku postgres:create $app_name-database
# dokku postgres:link $app_name-database $app_name
# Deploy the app
# Git repository
# dokku git:remote $app_name <repo-url>
# dokku git:deploy $app_name
# Docker image
# dokku storage:mount $app_name /var/lib/dokku/data/storage/$app_name:/app
# dokku config:set $app_name DOKKU_DOCKER_OPTS="--insecure-registry <registry-url>"
# dokku tags:deploy $app_name <image-name>
如何设置Dokku数据库?
假设您已经部署并运行了一个Dokku应用程序,第一步是设置Dokku数据库。您可以使用Dokku命令行工具完成此操作。
首先,通过SSH登录到Dokku服务器,并导航到应用程序的文件夹:
cd /var/dokku/apps/my-app
然后,使用dokku命令创建一个新的Postgres数据库:
dokku postgres:create my-db
这将为您的应用程序创建一个名为“my-db”的新的Postgres数据库。接下来,您需要配置您的应用程序以使用此数据库。这可以通过设置DATABASE_URL环境变量来完成:
dokku config:set my-app DATABASE_URL=postgres://postgres@dokku-postgresql-my-db:5432/my-db
将“my-app”替换为您的应用程序名称,“my-db”替换为您的数据库名称。这将告诉您的应用程序在连接到Postgres时使用“my-db”数据库。
现在,您的应用程序配置为使用“my-db”数据库,您可以使用数据填充它。有关如何执行此操作的更多信息,请参阅您使用的特定数据库管理系统的文档。
Dokku存储设置
部署应用程序的一个挑战是管理持久数据,例如文件上传、数据库数据和其他需要在应用程序重启后仍然保留的文件。
为了解决这个问题,Dokku提供了一个存储插件,允许您管理Dokku应用程序的持久存储。使用Dokku存储插件,您可以在服务器上创建一个存储目录,然后将其挂载到特定的Dokku应用程序。这使您能够持久地存储数据,并在应用程序重启后仍然访问它。
以下是设置Dokku应用程序存储的步骤:
- 安装Dokku存储插件:Dokku存储是一个Dokku插件,允许您管理Dokku应用程序的持久存储。要安装它,您需要在Dokku服务器上运行命令dokku plugin:install https://github.com/dokku/dokku-storage.git。这将为您下载并安装插件。
- 创建存储目录:为了持久地存储数据,您需要在服务器上创建一个目录。您可以使用任何您喜欢的位置,但建议使用不直接从Internet访问的位置,例如/var/lib/dokku/data/storage/<app-name>。
- 将存储目录映射到Dokku应用程序:此步骤涉及将您在前一步创建的存储目录挂载到特定的Dokku应用程序。您可以通过运行命令dokku storage:mount <app-name> /var/lib/dokku/data/storage/<app-name>:/app/storage来完成此操作。命令中的<app-name>指的是要将存储挂载到的Dokku应用程序的名称。/var/lib/dokku/data/storage/<app-name>是存储目录的路径,/app/storage是应用程序中将存储挂载的路径。
- 重新启动Dokku应用程序:为了应用您在上一步中所做的更改,您需要重新启动Dokku应用程序。您可以使用以下命令来完成这个过程:dokku ps:restart <app-name>。这将重新启动应用程序并激活存储插件。
- 验证存储:在重新启动应用程序后,您可以验证存储是否成功挂载,方法是访问Dokku应用程序中的/app/storage目录。您可以使用ls命令或任何其他文件管理工具来检查在目录中存储的数据是否是持久的,并且可以在应用程序重启后访问。
基本代码:
# Install the Dokku storage plugin
dokku plugin:install https://github.com/dokku/dokku-storage.git
# Create a storage directory
mkdir /var/lib/dokku/data/storage/<app-name>
# Map the storage directory to the Dokku application
dokku storage:mount <app-name> /var/lib/dokku/data/storage/<app-name>:/app/storage
# Restart the Dokku application
dokku ps:restart <app-name>
注意:请确保在执行上述命令时将<app-name>
替换为您的Dokku应用程序的名称。
部署Django应用程序
现在,您已经在Dokku服务器上设置好了Django应用程序并准备好了数据库和存储,可以进行部署了。
在之前的步骤中,您创建了一个Dokku应用程序并将其与您的本地Git仓库关联。要部署您的Django应用程序,您只需将代码推送到远程Dokku仓库。
git remote add dokku dokku@your-dokku-host:myapp
git push dokku master
以上命令会将您的代码推送到Dokku服务器上的myapp应用程序,并自动部署。Dokku将使用Gunicorn来运行您的Django应用程序,并将其暴露在HTTP端口上。
一旦部署完成,您可以使用以下命令来检查应用程序的状态:
dokku ps:status myapp
这将显示有关Dokku应用程序的有用信息,包括正在运行的容器和它们的状态。
要查看Django应用程序的日志,可以使用以下命令:
dokku logs myapp
这将显示Django应用程序的日志输出,可用于诊断问题。
如何进行Django应用程序的更新和维护?
一旦您的Django应用程序部署到Dokku服务器上,您可能会需要更新和维护它。下面是一些常见的更新和维护任务:
更新代码:
要更新您的Django应用程序,您可以在本地计算机上进行更改并将代码推送到Dokku服务器,就像部署初始版本时那样。使用以下命令:
git push dokku master
Dokku将自动检测更改并重新部署应用程序。
更新依赖项:
如果您的Django应用程序依赖于其他Python软件包或库,您可能需要更新requirements.txt文件并重新部署应用程序。在本地计算机上更新requirements.txt文件后,使用以下命令将更改推送到Dokku服务器:
git push dokku master
Dokku将根据更新的requirements.txt文件重新构建和部署应用程序。
数据库迁移:
如果您对Django模型进行了更改,并且需要对数据库进行迁移,请使用以下步骤:
- 在本地计算机上运行以下命令,创建数据库迁移文件:
python manage.py makemigrations
- 将生成的迁移文件添加到版本控制并将其推送到Dokku服务器:
git add .
git commit -m "Create database migrations"
git push dokku master
- 登录到Dokku服务器,并运行以下命令,以应用数据库迁移:
dokku run myapp python manage.py migrate
以上步骤将确保您的数据库与模型的最新更改保持同步。
定时任务:
如果您的Django应用程序包含定时任务(例如Celery任务),您需要在Dokku服务器上设置定时任务。您可以使用Dokku插件来实现这一点。例如,对于Celery任务,您可以使用Dokku的dokku-celery插件:
dokku plugin:install https://github.com/dokku/dokku-celery.git
然后,为您的应用程序创建一个Celery工作器和一个Celery定时器:
dokku celery:create myapp
dokku celery:beat myapp
这将为您的Django应用程序设置Celery工作器和定时器,并确保定时任务在后台运行。
总结
在本指南中,我们介绍了如何在Dokku上部署Django应用程序。Dokku是一个功能强大且易于使用的自托管平台即服务(PaaS),可帮助您快速部署和扩展Django应用程序。
首先,我们介绍了Dokku的基本概念和安装步骤。然后,我们详细讨论了如何设置Dokku应用程序和数据库,以及如何使用Dokku存储插件来管理持久存储。
最后,我们介绍了如何部署和更新Django应用程序,并提供了一些常见的维护任务。希望这个指南能帮助您在Dokku上成功部署和管理您的Django应用程序。祝您好运!