虽然Django自带了wsgi,能进行简单部署,但是在实际部署时多采用Apache和Nginx。本文简单介绍了如何用apache2来部署一个django的项目。
环境安装:
安装apache2:
sudo apt-get install apache2
安装mod-wsgi:
sudo apt-get install libapache2-mod-wsgi-py3
注意:此时无需安装python2的mod-wsgi,否则apache2将会自动关联python2,导致项目部署出现不能导入wsgi.py模块的问题。
部署:
1.创建简单项目:我们在桌面上临时创建一个test_apache的项目,用于部署
cd Desktop/
sudo dajngo-admin startproject test_apache
2.创建项目的配置文件: 在apache2的配置文件夹下面创建一个与项目同名的配置文件即可。
sudo vim /etc/apache2/sites-available/test_apache.conf
注意:Ubntu与CentOS的apache配置文件夹路径有区别,该项目时在Ubuntu系统进行配置的。
3.添加配置
<!-- PORT 8888 -->
<VirtualHost *:8888>
<!-- IP 12.82.166.83 -->
ServerName 12.82.166.83
<!-- 项目根目录 -->
DocumentRoot /home/proetest02/Desktop/test_apache
<!-- 通过wsgi连接django项目和apche2 -->
WSGIScriptAlias / /home/protest02/Desktop/test01/test_apache/wsgi.py
<!-- 文件授权 -->
<Directory /home/protest02/Desktop/test_apache/test_apache>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
4.端口监听:
#编辑端口配置文件
sudo vi /etc/apache2/ports.conf
#修改或者添加监听端口
Listen 8888
5.添加项目所在地:
#编辑wsgi.conf
sudo vim /etc/apache2/mods-available/wsgi.conf
#添加项目路径
WSGIPythonPath /home/protest02/Desktop/test_apache
6.修改项目wsgi.py:加入下面代码即可
from os.path import join,dirname,abspath
import sys
PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
7.权限修改:
由于apache2默认启用用户:www-data(相关配置文件见:/etc/apache2/envvars),所以在当前Linux登陆用户下需要给www-data相关的执行权限,当然你可以去配置文件中修改默认用户。
#权限修改,后期还有新增应用也需修改权限
sudo chmod -R 644 test_apache
sudo find test_apache -type d | xargs chmod 755
sudo chgrp www-data test_apache
sudo chmod g+w test_apache
8.启动服务
sudo service apache2 reload
sudo a2ensite test_apache.conf
sudo service apache2 restar
9.测试项目:
进入浏览器输入:12.166.80.83/admin,就可以看到django的后台管理登陆界面了。说明你项目配置成功。
部署总结:
1.apache查看版本命令:有可能需要加sudo
apachectl -v
2.常见问题:
1.出现 Target WSGI script '/home/protest02/Desktop/test01/test01/wsgi.py' cannot be loaded as Python module.则有可能是安装了python2的mod-wsgi. 卸载即可。
2.配置文件脚本单词选项拼写错误,可根据终端提示命令查看或者进入日志查看:cat /var/log/apache2/error.log
3.配置文件可编写内容:
#端口配置
<VirtualHost *:80>
# 填写自己服务器的域名或者ip
ServerName IP:80
# 其他域名(此处可以不填),多个域名指向同一个站点时可以使用,要多少个就加多少个,空格隔开
ServerAlias otherdomain.com
#邮箱
ServerAdmin xxx@Email.com
# 多媒体文件存放的路径,具体路径根据你自己的来,这里只是例子
Alias /media/ /home/user/项目名称/media/
# 静态文件文件( js, css, 图片,视频等文件)存放的路径,具体路径根据岁需求
Alias /static/ /home/user/项目名称/static/
# 文件授权
<Directory /home/user/项目名称/media>
Require all granted
</Directory>
<Directory /home/user/项目名称/static>
Require all granted
</Directory>
# 通过wsgi.py 连接apache2和你的Django项目
WSGIScriptAlias / /home/user/项目名称/项目名称/wsgi.py
<Directory /home/user/项目名称/项目名称>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>