标题:Apache、WSGI、Django程序部署配置方法详解
1. 环境准备
在本地或远程服务器上安装好Python和Django环境,并通过pip安装好必要的第三方库,例如:
pip install Django
pip install mod_wsgi
pip install virtualenv
2. Django项目部署
2.1 创建Django项目
使用如下命令创建Django项目(以mysite为示例):
django-admin startproject mysite
2.2 配置Django项目
2.2.1 允许访问
在settings.py中将ALLOWED_HOSTS设置为空:
ALLOWED_HOSTS = []
2.2.2 静态文件设置
在settings.py中添加:
STATIC_ROOT = '/var/www/mysite/static/'
STATIC_URL = '/static/'
2.2.3 数据库设置
根据实际情况设置DATABASES中的参数。
2.3 克隆Django项目到服务器
使用Git或其他工具将Django项目克隆到服务器上。
3. WSGI配置
3.1 创建wsgi.py文件
在Django项目根目录下创建wsgi.py文件,输入以下内容:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
3.2 配置Apache
在Apache的配置文件中添加类似如下的内容:
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess mysite python-home=/path/to/virtualenv python-path=/path/to/project
WSGIProcessGroup mysite
WSGIScriptAlias / /path/to/project/mysite/wsgi.py
<Directory /path/to/project/mysite>
Require all granted
</Directory>
ErrorLog /path/to/logs/error.log
CustomLog /path/to/logs/access.log combined
</VirtualHost>
其中,/path/to/virtualenv
为虚拟环境路径,/path/to/project
为项目路径。
3.3 重启Apache
在完成以上工作后,需要重启Apache使其生效。
sudo service apache2 restart
4. 示例
4.1 简单示例
以下是一个简单的Django示例项目的WSGI配置:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings')
application = get_wsgi_application()
Apache配置文件示例:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /path/to/project/example
WSGIScriptAlias / /path/to/project/example/example/wsgi.py
<Directory /path/to/project/example/example>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ErrorLog /path/to/logs/error.log
CustomLog /path/to/logs/access.log combined
</VirtualHost>
4.2 多站点部署示例
可以在一台服务器上部署多个Django站点。下面是一个多站点部署的示例:
import os
import sys
sys.path.append('/path/to/project1')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project1.settings')
app1 = get_wsgi_application()
sys.path.append('/path/to/project2')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project2.settings')
app2 = get_wsgi_application()
def application(environ, start_response):
if environ['HTTP_HOST'] == 'www.example1.com':
return app1(environ, start_response)
elif environ['HTTP_HOST'] == 'www.example2.com':
return app2(environ, start_response)
Apache配置文件示例:
<VirtualHost *:80>
ServerName www.example1.com
DocumentRoot /path/to/project1
WSGIScriptAlias / /path/to/project1/project1/wsgi.py
<Directory /path/to/project1/project1>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /path/to/project1/static>
Require all granted
</Directory>
ErrorLog /path/to/logs/error1.log
CustomLog /path/to/logs/access1.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.com
DocumentRoot /path/to/project2
WSGIScriptAlias / /path/to/project2/project2/wsgi.py
<Directory /path/to/project2/project2>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /path/to/project2/static>
Require all granted
</Directory>
ErrorLog /path/to/logs/error2.log
CustomLog /path/to/logs/access2.log combined
</VirtualHost>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache,wsgi,django 程序部署配置方法详解 - Python技术站