介绍
Django是一个强大的网络框架,可以帮助你让你的Python应用程序或网站离地面。 Django包括一个用于在本地测试代码的简化开发服务器,但是对于与生产有关的任何事情,需要一个更安全和更强大的Web服务器。
在本指南中,我们将演示如何在Ubuntu 14.04上安装和配置一些组件,以支持和提供Django应用程序。 我们将设置一个PostgreSQL数据库,而不是使用默认的SQLite数据库。 我们将配置Gunicorn应用程序服务器与我们的应用程序接口。 然后我们将设置Nginx反向代理Gunicorn,让我们访问其安全和性能功能来服务我们的应用程序。
先决条件和目标
为了完成这个指南,你应该有一个非root用户新鲜的Ubuntu 14.04服务器实例sudo
配置权限。 你可以学习如何通过我们的运行设置此服务器初始设置指南 。
我们将在虚拟环境中安装Django。 将Django安装到特定于您的项目的环境中将允许单独处理您的项目及其需求。
一旦我们的数据库和应用程序启动并运行,我们将安装和配置Gunicorn应用程序服务器。 这将作为我们的应用程序的接口,将HTTP中的客户端请求转换为我们的应用程序可以处理的Python调用。 然后我们将在Gunicorn之前设置Nginx,以利用其高性能连接处理机制和易于实现的安全特性。
让我们开始吧。
从Ubuntu存储库安装软件包
要开始该过程,我们将从Ubuntu存储库下载并安装我们需要的所有项目。 我们将使用Python包管理器pip
稍后安装附加组件。
首先,更新本地软件包索引,然后下载并安装软件包:
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx
这将安装pip
,后来建Gunicorn需要Python开发的文件,Postgres数据库系统的并与之交互所需的库和Nginx的网络服务器。
创建PostgreSQL数据库和用户
我们将直接进入,为我们的Django应用程序创建一个数据库和数据库用户。
与Postgres的默认配置工作,最好是换到postgres
临时系统用户。 现在通过键入:
sudo su - postgres
当作为操作postgres
用户,可以登录直接进入与打字没有进一步的验证PostgreSQL的交互式会话:
psql
你会得到一个PostgreSQL提示符,我们可以设置我们的要求。
首先,为您的项目创建一个数据库:
CREATE DATABASE myproject;
每个命令必须以分号结尾,因此,如果遇到问题,请检查命令是否结束。
接下来,为我们的项目创建一个数据库用户。 请务必选择安全的密码:
CREATE USER myprojectuser WITH PASSWORD 'password';
现在,我们可以让我们的新用户访问以管理我们的新数据库:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
完成后,通过键入以下命令退出PostgreSQL提示符:
\q
现在,将退出的postgres
用户的shell会话通过键入要回你的普通用户的shell会话:
exit
为您的项目创建一个Python虚拟环境
现在我们已经准备好了数据库,我们可以开始获得其余的项目需求了。 我们将在虚拟环境中安装我们的Python需求,以便于管理。
要做到这一点,我们首先需要访问virtualenv
命令。 我们可以安装这个pip
:
sudo pip install virtualenv
随着virtualenv
安装后,我们就可以开始形成我们的项目。 创建一个目录,您希望保留您的项目,然后移动到目录:
mkdir ~/myproject
cd ~/myproject
在项目目录中,通过键入以下内容创建Python虚拟环境:
virtualenv myprojectenv
这将创建一个名为myprojectenv
你中myproject
目录。 在内部,它会安装Python和本地版本的本地版本pip
。 我们可以使用它为我们的项目安装和配置一个孤立的Python环境。
在我们安装我们项目的Python需求之前,我们需要激活虚拟环境。 你可以通过键入:
source myprojectenv/bin/activate
您的提示应该更改为表示您现在在Python虚拟环境中操作。 它看起来是这样的: ( myprojectenv ) user @ host :~/ myproject $
。
随着虚拟环境活跃,安装Django,Gunicorn和psycopg2
与本地实例PostgreSQL的适配器pip
:
pip install django gunicorn psycopg2
创建和配置新的Django项目
通过安装我们的Python组件,我们可以创建实际的Django项目文件。
创建Django项目
由于我们已经有一个项目目录,我们将告诉Django在这里安装文件。 它将创建一个具有实际代码的二级目录,这是正常的,并在此目录中放置一个管理脚本。 这一点的关键是在结束时告诉Django在当前目录中创建文件的点:
django-admin.py startproject myproject .
调整项目设置
我们应该对我们新创建的项目文件做的第一件事是调整设置。 在文本编辑器中打开设置文件:
nano myproject/settings.py
从查找配置数据库访问的部分开始。 它将与开始DATABASES
。 文件中的配置用于SQLite数据库。 我们已经为我们的项目创建了一个PostgreSQL数据库,所以我们需要调整设置。
使用PostgreSQL数据库信息更改设置。 我们告诉Django使用psycopg2
,我们在安装适配器pip
。 我们需要给出数据库名称,数据库用户名,数据库用户名密码,然后指定数据库位于本地计算机上。 您可以将PORT
设置为空字符串:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
接下来,向下移动到文件的底部,并添加一个设置,指示应放置静态文件的位置。 这是必要的,以便Nginx可以处理这些项目的请求。 下面一行告诉Django将它们放在一个名为static
在基础项目目录:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
保存并在完成后关闭文件。
完成初始项目设置
现在,我们可以使用管理脚本将初始数据库模式迁移到PostgreSQL数据库:
cd ~/myproject
./manage.py makemigrations
./manage.py migrate
通过键入以下内容为项目创建管理用户:
./manage.py createsuperuser
您必须选择用户名,提供电子邮件地址,然后选择并确认密码。
我们可以通过键入以下内容将所有静态内容收集到我们配置的目录位置:
./manage.py collectstatic
您必须确认操作。 然后,静态文件将被放置在一个名为static
项目目录之内。
最后,您可以使用此命令启动Django开发服务器来测试我们的项目:
./manage.py runserver 0.0.0.0:8000
在Web浏览器,访问你的服务器的域名或IP地址后面:8000
:
http://server_domain_or_IP:8000
您应该会看到默认的Django索引页面:
如果您添加/admin
在地址栏中的URL的最后,你会被提示输入您已创建的管理员用户名和密码createsuperuser
命令:
验证后,您可以访问默认的Django管理界面:
当您完成浏览时,在终端窗口中按CTRL-C关闭开发服务器。
测试Gunicorn的能力服务项目
在离开我们的虚拟环境之前,我们要做的最后一件事是测试Gunicorn,以确保它可以为应用程序提供服务。 我们可以轻松地通过键入:
cd ~/myproject
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
这将在Django开发服务器运行的同一个接口上启动Gunicorn。 您可以返回并再次测试该应用。 请注意,管理界面将不会应用任何样式,因为Gunicorn不知道负责此静态内容。
我们通过指定Django的相对目录路径通过Gunicorn模块wsgi.py
文件,该文件的入口点到我们的应用程序,使用Python的模块语法。 在这个文件中,一被调用的功能application
被定义,其用于与应用程序进行通信。 要了解更多关于WSGI规范,请点击这里 。
完成测试后,在终端窗口中按CTRL-C停止Gunicorn。
我们现在已经完成了配置我们的Django应用程序。 我们可以通过键入以下内容退出我们的虚拟环境:
deactivate
创建Gunicorn Upstart文件
我们测试了Gunicorn可以与我们的Django应用程序交互,但我们应该实现一个更可靠的方式启动和停止应用程序服务器。 为了实现这一点,我们将创建一个Upstart脚本。
创建并打开一个Upstart文件Gunicorn与sudo
在文本编辑器的权限:
sudo nano /etc/init/gunicorn.conf
我们将从一个简单的描述字符串开始,说明我们的服务文件是什么。 然后我们将继续定义应该自动启动此服务的系统运行级别。 运行服务的正常运行级别是2,3,4和5.当系统处于其中任何一个时,我们将运行我们的服务。 当它在任何其他运行级别(例如系统正在重新启动,关闭或在单用户模式下)时,我们会告诉它停止:
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
接下来,如果服务失败,我们会告诉Upstart自动重新启动服务。 我们还想指定要在其下运行的用户和组。 我们将使用我们的普通用户,因为我们的所有文件都归该用户所有。 我们将让www-data
而Nginx的所属是组业主群。 我们还需要更改到项目的目录,以便Gunicorn命令正确执行:
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid user
setgid www-data
chdir /home/user/myproject
现在,我们只需要给出将启动Gunicorn进程的命令。 我们需要给出Gunicorn可执行文件的路径,它存储在我们的虚拟环境中。 我们将告诉它使用Unix套接字而不是网络端口与Nginx通信,因为这两个服务都将在此服务器上运行。 这更安全,更快。 你可以在这里为Gunicorn添加任何其他配置。 例如,我们将指定我们需要3个工作进程:
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid user
setgid www-data
chdir /home/user/myproject
exec myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/user/myproject/myproject.sock myproject.wsgi:application
完成后,保存并关闭文件。
键入以下命令启动Gunicorn服务:
sudo service gunicorn start
配置Nginx到代理通过到Gunicorn
现在Gunicorn设置,我们需要配置Nginx传递流量到进程。
通过创建和Nginx的中的打开一个新的服务器块起始sites-available
目录:
sudo nano /etc/nginx/sites-available/myproject
在里面,打开一个新的服务器块。 我们将开始通过指定该块应该侦听正常端口80,并且它应该响应我们的服务器的域名或IP地址:
server {
listen 80;
server_name server_domain_or_IP;
}
接下来,我们将告诉Nginx忽略找到一个favicon的任何问题。 我们也将告诉它在哪里可以找到,我们收集在我们的静态资产~/ myproject /static
目录。 所有这些文件都有一个标准的URI前缀“/ static”,因此我们可以创建一个位置块来匹配这些请求:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/user/myproject;
}
}
最后,我们将创建一个location / {}
块匹配所有其他请求。 这里面的位置,我们将包括标准proxy_params
包含在Nginx的安装文件,然后我们会通过将流量发送到我们的Gunicorn过程中创建的插座:
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/user/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/user/myproject/myproject.sock;
}
}
保存并在完成后关闭文件。 现在,我们可以通过它链接到启用文件sites-enabled
目录:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
键入以下内容来测试Nginx配置的语法错误:
sudo nginx -t
如果没有报告错误,请继续并通过键入以下命令重新启动Nginx:
sudo service nginx restart
您现在应该可以转到服务器的域或IP地址以查看您的应用程序。
结论
在本指南中,我们在其自己的虚拟环境中设置了一个Django项目。 我们已经配置了Gunicorn来翻译客户端请求,以便Django可以处理它们。 之后,我们设置Nginx作为反向代理来处理客户端连接,并根据客户端请求提供正确的项目。
Django通过提供许多常用的部分来简化创建项目和应用程序,使您能够专注于独特的元素。 通过利用本文中描述的通用工具链,您可以轻松地从单个服务器提供您创建的应用程序。