#Ubuntu下利用Apache2实现Django部署
##简介
当我们使用Django框架写出自己的web时,那种成就感是不言而喻的。不过好东西自然要和大家分享,因此就需要将自己的web部署在某个地方。废话不多说,接下来将把我的web部署之路和大家分享一下。
如果去网上搜索如何部署Django,你会发现有很多很多的教程。也许你会发现按照他们的一步步走下来还是未必能过够成功部署。当然其中的原因有很多,每个人部署的系统可能不同,系统版本也可能不同,Django的版本也可能不同等等。因此,有可能我的方法也未必能让你成功,但是试试吧,说不定就成功了呢?哈哈哈。
Django部署
部署环境
- Ubuntu /18.04
- Apache2 /2.4.29
- Python /3.6.5
- Django /2.1
安装
这里默认的是啥都没装的ubuntu系统,如果安装了某些可以跳过。
1. 安装pip
pip是一个非常好用python包的管理工具,这里安装的python3的pip。
sudo apt-get update
sudo apt-get install python3-pip
2. 安装Django
既然是用Django写的,这里怎么能缺呢?
sudo pip3 install django
3. 安装自己需要的包
这里就是个性化的安装了,你的web项目需要哪些库,这里就安装哪些库
sudo pip3 install pymongdb
4. 安装apache2
sudo apt-get install apache2
5. 安装mod_wsgi
mod_wsgi的目标是实现一个简单的Apache模块,支持任何Python WSGI的接口的Python应用程序的托管。我这里安装的是python3的哦。
sudo apt-get install libapache2-mod-wsgi-py3
测试
为什么会在这里多一个测试呢?主要是我遇到了一个大坑,就是我的Django项目是从Window系统上移植的。在配置部署过程中,一直存在问题,后来才发现,在移植到Ubuntu上后本身这个项目就存在问题,而非配置错误。
所以在此温馨提醒:如果你的Django项目是从其他地方移植过来的,请先使用Django自带的server测试。
python manage.py runserver
如果能够正常访问,就说明项目是没有问题的,可以进一步的配置了。
配置
1. 创建apache2的配置文件
按照下面的命令在apache2的文件目录下,创建一个配置文件,其中项目名称就填写你的web项目的名称。
sudo vim /etc/apache2/sites-available/项目名称.conf
创建完毕后,需要在配置文件中写入以下内容(当然有些内容要自己增删改):
<VirtualHost *:80>
ServerName localhost:80
# 填写自己服务器的域名或者ip
ServerAlias otherdomain.com
# 其他域名(此处可以不填),多个域名指向同一个站点时可以使用,要多少个就加多少个,空格隔开
ServerAdmin xxx@Email.com
# 邮箱
Alias /media/ /home/user/项目名称/media/
# 多媒体文件存放的路径,具体路径根据你自己的来,这里只是例子
Alias /static/ /home/user/项目名称/static/
# 静态文件文件( js, css, 图片,视频等文件)存放的路径,具体路径根据你自己的来,这里只是例子
# 文件授权
<Directory /home/user/项目名称/media>
Options FollowSymLinks # 禁止目录索引
Require all granted
</Directory>
<Directory /home/user/项目名称/static>
Options FollowSymLinks # 禁止目录索引
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>
2. 修改wsgi.py文件
找到你的Django项目路径,找到项目的wsgi.py文件并打开,在原有的基础上增加以下内容:
from os.path import join,dirname,abspath
import sys
PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
3. 设置权限
apache服务器在运行的时候默认的用户是“www-data”,相关的配置文件的位置在/etc/apache2/envvars
所以我们需要修改Django项目的权限,假如你的项目放在/home/user/项目名称
下,可以按照以下命令进行权限修改:
cd /home/user/
sudo chmod -R 644 项目名称
sudo find 项目名称 -type d | xargs chmod 755
sudo chgrp www-data 项目名称
sudo chmod g+w 项目名称
如果在项目中你还有上传目录,请接着上面的步骤修改:
cd media/
sudo chgrp -R www-data uploads
sudo chmod -R g+w uploads
注意:-R是修改包括所有的子文件夹和文件
在修改数据库时:
sudo chgrp www-data 项目名称/db.sqlite3 # 更改为你的数据库名称
sudo chmod g+w 项目名称/db.sqlite3
4. 启动网站
最后一步,让你的网站启动:
sudo service apache2 reload
sudo a2ensite 项目名称.conf
sudo service apache2 restart
调试
如果完成上述步骤还是无法打开网站,可以去查看一下apache2服务器的错误文件,说不定能够帮你解决问题。
cat /var/log/apache2/error.log
例如下图:
最后
我的网站启动后,效果如图(不要在意细节( ̄y▽, ̄)╭ ):
希望对大家有所帮助!:-)