部署django项目到apache服务器(二)

2015年12月26日 原创
关键词: python django httpd mod_wsgi linux
摘要 完整部署一个django项目到apache服务器上。

上一节我们已经成功搭建了apache服务器并且写了一个wsgi的hello world程序进行测试。接下来我们就可以开始部署django项目了。

首先把django项目上传到服务器上的某个目录下。为了让python的web程序运行,我们需要一个wsgi程序。django给我们提供了相应的wsgi程序,在你的[project]下的[project]文件夹内,假设我们生成该项目的命令是startproject mysite 那么django给我们提供的wsgi程序就是mysite/mysite/wsgi.py。

接下来我们需要修改httpd.conf配置文件,在/etc/httpd/conf/httpd.conf的末尾添上如下配置:

WSGIScriptAlias / /path/to/mysite/mysite/wsgi.py 
WSGIPythonPath /path/to/mysite
<Directory /home/yourname/mysite/mysite>
        <Files wsgi.py>
                Require all granted
        </Files>
</Directory> 

WSGIScriptAlias后的第一个参数表示在哪个URL上提供该web应用,第二个参数则是wsgi文件的路径。

WSGIPythonPath这一行确保了该web应用被添加到python的path变量中。

<Directory>块允许了Apache去访问你的wsgi文件和web应用程序所在的目录。

然后我们重新加载Apache,service httpd reload,访问http://localhost,我们就能看到django应用程序了。然而此时的django应用程序并没有成功加载静态资源,那是因为我们还没有在httpd.conf里配置django应用程序的静态资源目录。

首先我们应该在django项目的配置文件中配置静态资源,打开mysite/mysite/settings.py,在末尾添加:

STATIC_ROOT = '/path/to/mysite/static_root' 
STATIC_URL = '/static/' 
MEDIA_ROOT = '/path/to/mysite/media/' 
MEDIA_URL = '/media/'

这里的STATIC_ROOT表示静态资源存在服务器上的路径,STATIC_URL表示访问静态资源的URL(通过浏览器访问的路径),MEDIA_ROOT表示媒体资源存放在服务器上的路径,MEDIA_URL表示访问媒体资源的URL(通过浏览器访问的路径)。接下来切换到mysite目录,执行python manage.py collectstatic,这句命令会把web应用的静态资源都收集到settings.py里定义的STATIC_ROOT目录里,媒体资源都收集到settings.py里定义的MEDIA_ROOT目录里。

接下来让我们继续配置django的静态资源目录,下面的代码定义了URL访问别名。在/etc/httpd/conf/httpd.conf里添加如下配置:

Alias /media /path/to/mysite/media
Alias /static /path/to/mysite/static_root

Alias /media /path/to/mysite/media的意思是访问localhost/media/xxx.jpg的时候是访问服务器的/path/to/mysite/media/xxx.jpg

第二个Alias定义的/static同理。需要注意的是,如果需要上传文件,那么需要把相应的目录的权限改成777,否则会出错。

在设置了URL访问别名之后,我们还需要允许Apache访问静态资源所在的目录,继续添加:

<Directory /path/to/mysite/static>
Require all granted
</Directory>

<Directory /path/to/mysite/media>
Require all granted
</Directory>

保存,重新加载Apache之后,访问http://localhost/就能看到带有样式和图片的页面了。至此django项目在Apache上面的部署就已经完成了。