在linux服务器上部署django项目

不得不承认,django自带的runserver功能确实强大,使得我们在开发的过程中可以轻松的在本地调试、查看网站。但开发是开发,做的项目总归是要部署到服务器上面去的,最近把项目部署到linux上了,这里记录一下。

官方文档:https://docs.djangoproject.com/en/1.9/howto/deployment/

我是参照着文档部署的。下面是我的环境:

ubuntu14.04.3
python2.7.6
apache2.4.7
django1.9.7
mod_wsgi4.5.3

接下来进入配置环节。

安装python-dev

默认情况下,ubuntu系统是安装了python的,不过如果只用这个python,在后面的部署过程就会出问题,先查看你的python版本,不出意外的话是2.7.x,然后额外安装一个对应的dev版。

apt-get install python2.7-dev

安装django

这个很简单,直接pip安装就行,选择好你要的版本。

pip install Django==1.9.7

安装python的mysql驱动

如果你的数据库用的是mysql,还得安装这个。

sudo apt-get install python-mysqldb

安装Apache

在ubuntu系统上,Apache是预装了的,但是它不支持apxs的,对于之后要安装的wsgi组件来说,apxs是必须的。还得安装一个Apache的dev版。先确认你已经安装的Apache版本,我的是Apache2,所以直接运行以下命令继续安装dev版:

sudo apt-get install apache2-dev

安装编译mod_wsgi

有了上述的准备工作之后,安装mod_wsgi就不是什么问题了。

这个是官方文档:https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html

我记录一下我安装编译的步骤。

先去下载源代码:https://github.com/GrahamDumpleton/mod_wsgi/releases

我下载的是mod_wsgi-4.5.3.tar.gz。

然后上传到服务器,解压:

tar xvfz mod_wsgi-X.Y.tar.gz

PS:X,Y为你实际的文件版本,跟文件名一致即可。

解压之后,cd到对应的目录。然后运行

./configure

./configure命令
然后继续运行:

make

最后运行(PS:这一步是需要管理员权限的):

sudo make install

安装成功:
mod_wsgi安装成功
注意图片的第一行,说的是mod_wsgi安装的路径;还有最后一行,要给mod_wsgi.so加上对应的权限。

sudo chmod 644 /usr/lib/apache2/modules/mod_wsgi.so

配置mod_wsgi到Apache上

安装成功之后,要更改一下Apache的配置文件。编辑(不同系统下Apache配置文件不一样,有的是httpd.conf)

sudo vim /etc/apache2/apache2.conf

在文件的最后一行,加上
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
其中第三个参数,是刚才安装完的mod_wsgi.so对应的路径。

部署django项目

django项目刚开始的时候,我们一般都是运行startproject命令来生成项目,这样做有一个好处,django会帮我们自动生成wsgi的配置文件。

首先把本地的django项目复制到服务器上,一般是/var/www/html下,以你Apache的配置为准。

然后我们继续编辑Apache的配置文件:

sudo vim /etc/apache2/apache2.conf

在最后,添加如下内容:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

Require all granted< /Files>

要注意,/path/to/mysite.com/ 这个路径不要搞错,就是你项目的路径。

配置完毕,重启Apache。

sudo apachectl restart

访问网站
直接输入ip地址访问网站,发现访问不了,查看了一下Apache的error log:

from django.core.wsgi import get_wsgi_application
ImportError: No module named ‘django.core.wsgi’

后来发现,原来是权限问题,无法执行django里面的文件。心累。。

加个权限就行了。

cd /usr/local/lib/python2.7/dist-package
sudo chmod a+x django

ok,项目就这么部署完毕了,如果你是正式的项目,记得把django的debug模式关掉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注