mod_wsgi
Apache模块,可以通过WSGI接口规范和Django沟通。
sudo
配置权限。 你可以学习如何通过我们的运行设置此服务器初始设置指南 。
我们将在Python虚拟环境中安装Django。将Django安装到特定于您的项目的环境中将允许单独处理您的项目及其需求。
一旦我们的应用程序启动并运行,我们将配置Apache与Django应用程序接口。它会做到这一点与mod_wsgi
Apache模块,可HTTP请求转换成一个被称为WSGI规范中定义的可预测的应用格式。 你可以通过阅读链接部分找到更多关于WSGI 本指南 。
让我们开始吧。
mod_wsgi
使用与我们的Django的应用接口模块,以及pip
,可以用来下载我们的Python相关的工具Python的包管理器。
要获得我们需要的一切,请更新服务器的本地包索引,然后安装相应的包。
如果您在使用Django使用Python 2,你所需要的命令是:
sudo apt-get update
sudo apt-get install python-pip apache2 libapache2-mod-wsgi
相反,如果你正在使用Django和Python 3,您将需要一个替代Apache模块和pip
封装。在这种情况下,适当的命令是:
sudo apt-get update
sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
现在我们有来自Debian仓库的组件,我们可以开始处理我们的Django项目。
virtualenv
命令来创建这些环境。 我们可以用得到这个包pip
。
如果您正在使用Python 2,请键入:
sudo pip install virtualenv
如果您正在使用Python 3,键入:
sudo pip3 install virtualenv
随着virtualenv
安装后,我们就可以开始形成我们的项目。创建一个目录,您希望保留您的项目并移动到目录:
mkdir ~/myproject
cd ~/myproject
在项目目录中,通过键入以下内容创建Python虚拟环境:
virtualenv myprojectenv
这将创建一个名为myprojectenv
你中myproject
目录。 在内部,它会安装Python和本地版本的本地版本pip
。我们可以使用它为我们的项目安装和配置一个孤立的Python环境。
在我们安装我们项目的Python需求之前,我们需要激活虚拟环境。你可以通过键入:
source ~/myproject/myprojectenv/bin/activate
您的提示应该更改为表示您现在在Python虚拟环境中操作。它看起来是这样的: ( myprojectenv ) user @ host :~/ myproject $
。
随着虚拟环境活跃,本地实例安装Django pip
:
注:虚拟环境中使用自己的Python和相关工具的版本。不管你是使用Python 2或Python 3,当虚拟环境中被激活,你应该使用pip
命令(不pip3
)。
pip install django
这将在您的Python虚拟环境中安装Django软件包。
~/ myproject
,我们会告诉Django在这里安装文件。该命令将创建包含实际代码的第二级目录。它还将在当前项目目录中放置一个管理脚本。实现正确的目录结构的关键是在项目名称后列出父目录:
django-admin.py startproject myproject ~/myproject
你应该得到一个目录结构,如下所示:
.
└── ./myproject/ # parent project directory
├── manage.py # Django management script
├── myproject/ # project code directory
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myprojectenv/ # project virtual environment directory
└── . . .
检查您的目录结构是否与此匹配可以帮助最大限度地减少错误。
nano ~/myproject/myproject/settings.py
为了简单起见,我们将在本指南中使用默认的SQLite数据库,因此我们实际上不需要更改太多。我们将专注于配置允许的主机以限制我们响应的域并配置静态文件目录,其中Django将放置静态文件,以便Web服务器可以轻松地提供这些文件。
通过寻找开始ALLOWED_HOSTS
线。 在方括号内,输入您的服务器的公共IP地址,域名或两者。 每个值都应该用引号括起来,并用逗号分隔,就像普通的Python列表一样。 它添加像本地地址是一个好主意127.0.0.1
和127.0.1.1
,以及:
. . .
ALLOWED_HOSTS = ["server_domain_or_IP", "127.0.0.1", "127.0.1.1"]
. . .
在文件的底部,我们将设置Django的STATIC_ROOT
。 Django可以收集所有静态资产并将其输出到已知目录中,以便Web服务器可以直接为其提供服务。我们将使用一点Python来告诉它在项目的主目录中使用一个名为“static”的目录:
. . .
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
保存并在完成后关闭文件。
cd ~/myproject
./manage.py makemigrations
./manage.py migrate
通过键入以下内容为项目创建管理用户:
./manage.py createsuperuser
您必须选择用户名,提供电子邮件地址,然后选择并确认密码。
我们可以收集所有的静态内容到我们和定义的目录位置STATIC_ROOT
通过键入:
./manage.py collectstatic
您必须确认操作。正如预期的那样,静态文件将被放置在一个名为static
项目目录之内。
您可能需要调整防火墙设置,以允许流量到我们的Django开发服务器,我们将在端口8000上运行。
如果你正在运行一个ufw
防火墙,您可以通过键入允许通信端口8000:
sudo ufw allow 8000
如果您正在运行iptables
相反,你需要确切的命令取决于您当前的防火墙配置。对于大多数配置,此命令应该工作:
sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
最后,您可以使用此命令启动Django开发服务器来测试您的项目:
./manage.py runserver 0.0.0.0:8000
在Web浏览器,访问你的服务器的域名或IP地址后面:8000
:
http://server_domain_or_IP:8000
您应该会看到默认的Django索引页面:
/admin
在地址栏中的URL的最后,你会被提示输入您已创建的管理员用户名和密码createsuperuser
命令:
deactivate
在( myprojectenv )
前缀为您的shell提示符应该消失。
mod_wsgi
模块。这应该在早期安装时自动启用。
要配置WSGI传递,我们需要编辑默认的虚拟主机文件:
sudo nano /etc/apache2/sites-available/000-default.conf
我们可以保留文件中已经存在的指令。我们只需要添加一些额外的项目。
首先,让我们配置静态文件。我们将使用别名来告诉Apache映射开始的任何请求/static
我们的项目文件夹中的“静态”的目录。我们早些时候收集了那些静态资产。我们将设置别名,然后通过目录块授予对相关目录的访问权限:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
</VirtualHost>
接下来,我们将授予访问wsgi.py
那里Django的代码存储在第二级项目目录中的文件。为此,我们将使用一个目录部分,其中包含一个文件部分。我们将授予对此嵌套构造中的文件的访问权限:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
# Next, add the following directory block
<Directory /home/sammy/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
配置完成后,我们准备构造实际处理WSGI传递的文件部分。我们将使用守护进程模式运行WSGI进程,这是推荐的配置。我们可以使用WSGIDaemonProcess
指令来设置它。
此伪指令对进程使用任意名称。我们将使用myproject
留一致。之后,我们设置了Python主目录,Apache可以找到所有可能需要的组件。由于我们使用了虚拟环境,我们可以将其直接指向我们的基本虚拟环境目录。然后,我们设置Python路径指向我们的Django项目的基础。
接下来,我们需要指定进程组。这应该指向我们选择了同一个名字WSGIDaemonProcess
指令( myproject
在我们的例子)。 最后,我们需要设置脚本别名这样Apache将通过请求根域到wsgi.py
文件:
<VirtualHost *:80>
. . .
Alias /static /home/sammy/myproject/static
<Directory /home/sammy/myproject/static>
Require all granted
</Directory>
<Directory /home/sammy/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproject python-home=/home/sammy/myproject/myprojectenv python-path=/home/sammy/myproject
WSGIProcessGroup myproject
WSGIScriptAlias / /home/sammy/myproject/myproject/wsgi.py
</VirtualHost>
完成这些更改后,保存并关闭文件。
db.sqlite3
默认情况下,它应该位于你的基地项目目录:
chmod 664 ~/myproject/db.sqlite3
chmod 775 ~/myproject
之后,我们需要给Apache下运行组中, www-data
组,文件的组所有权:
sudo chown :www-data ~/myproject/db.sqlite3
为了写入文件,我们还需要给数据库的父目录的Apache组所有权:
sudo chown :www-data ~/myproject
我们需要再次调整防火墙。我们不再需要端口8000打开,因为我们通过Apache代理,所以我们可以删除该规则。然后我们可以添加一个异常,以允许流量到Apache进程。
如果你正在使用ufw
,您可以通过键入做到这一点:
sudo ufw delete allow 8000
sudo ufw allow 'Apache Full'
如果您在使用iptables
,适当的命令会是这个样子:
sudo iptables -D INPUT -p tcp --dport 8000 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
检查您的Apache文件,以确保您没有犯任何语法错误:
sudo apache2ctl configtest
只要输出的最后一行看起来像这样,你的文件是在良好的形状:
. . .
Syntax OK
完成这些步骤后,您就可以重新启动Apache服务来实现所做的更改。键入以下命令重新启动Apache:
sudo systemctl restart apache2
现在,您应该可以访问您的Django网站,只需转到服务器的域名或IP地址,而无需指定端口。常规站点和管理界面应按预期运行。
mod_wsgi
处理客户请求和接口与Django应用程序。
Django通过提供许多常用的部分来简化创建项目和应用程序,使您能够专注于独特的元素。通过利用本文中描述的通用工具链,您可以轻松地从单个服务器提供您创建的应用程序。
关注云架构公众号
Linux入门
QQ交流群:308781113