虽然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>