上一节我们已经成功搭建了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上面的部署就已经完成了。