您的位置:首页 > 运维架构 > Apache

使用Apache与mod_wsgi部署Django应用到服务器

2016-06-30 10:49 706 查看

使用Apache与mod_wsgi部署Django应用到服务器

前言

之前没有做过网络应用,觉得它非常神奇,竟然可以共享全世界那么多资源和应用!
看到别人好多都有自己的博客网站,心里也是痒痒得。
今天花了些时间把它搭建起来!


准备

<
f4d5
/tr>
环境说明
公有IP服务器例如,我的域名:121.42.53.153
服务器操作系统Linux
Python版本 2.7.6
Django1.9.7
pip版本 8.1.2

环境配置

远程登录服务器

通过类Linux命令行远程服务器,如(mac端):

cslzy@mac$ ssh root@121.42.53.153


然后会有提示输入密码。

root
用户登录,权限是最高级的。这样在安装工具时会方便很多,但一定要慎重(尤其是在修改、删除文件之前)。

安装pip

(sudo) apt-get install python-pip


不是
root
用户要加上
sudo
,下面不加说明都是用的超级权限。

使用pip安装Django

pip install django


注意 可能会出现这样的错误信息:

“SSLError: The read operation timed out” when using pip


stackoverflow上找到的解决方法:

pip --default-timeout=100 install django


使用下面的方法检查是否安装成功:

root ~ $ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print django.get_version()
1.9.7
>>>


安装Apache2、mod_wsgi及libapache2-mod-wsgi

安装命令如下:

root ~ $ apt-get install apache2 libapache2-mod-wsgi


安装参考

创建测试Django空工程

创建文件所在目录的权限可能会导致网站访问出错。所以一般不推荐在主目录下创建。或者,直接用

root ~ $ chmod 655 [your director]


更改文件目录的读、写、可执行权限。其主要目的是为了确保工程文件下的
wsgi.py
文件对apache运行的用户具有可读权限。

创建

比较多的教程用都是在
/var/www/
目录下创建的,我们也在这创建。

root www $ django-admin.py startproject [your appname]


[your appname]
随便写一个就行,可以是
hello world, again~
,我用的是
serverTest
.

看一下它的读写权限:

root www $ ls -l
drwxr-xr-x 3 root root 4096 Jun 29 12:28 serverTest


Apache中对mod_wsgi的配置

编辑
.conf
文件

打开目录
/etc/apache2
,里面有个
sites-availbale
目录(如果没有,自己mkdir一个),在这里面为自己的工程添加一个wsgi配置文件。

root sites-available $ vim servertest2.conf

WSGIScriptAlias /test2 /var/www/serverTest/serverTest/wsgi.py
WSGIPythonPath /var/www/serverTest

<Directory /var/www/serverTest/serverTest>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>


编辑完成后,保存退出。

其中,
/test2
,跟在域名或者IP之后的名字,如:
121.42.35.153/test2
。在服务器中输入这个就能打开相关网页(当然,要执行下面的重启才行,同时,在django里面的
urls.py
的映射里也要写入相应规则。为了方便起见,下面的配置里,使用
/
代替
/test2
)。其它详细解释点我

激活、重启服务

root sites-available $ vim servertest2.conf
root sites-available $ a2ensite servertest2.conf
Site servertest2 already enabled
root sites-available $ service apache2 reload
* Reloading web server apache2                                                      *


关联域名和服务器IP

这个过程是向DNS服务器提交域名和IP的关联规则,每个域名服务商都会提供这个免费的服务。

我是在阿里买的域名,设置过程如下:

登录「管理控制台」,点击云解析

点击域名我条目后面的「解析」

跳转到新页面后,点击「解析设置」,添加解析

把服务器的IP填上就行。

基本上一会就可能使用域名来访问网站了。Amazing!

参考文章

细节可能会有些出入,大体还是一样的。

我遇到的错误

找不到
settings.py
路径

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Apache/2.4.7 (Ubuntu) Server at sofamiri.com Port 80


解决方法

wsgi.py
中,把当前工程的路径加到系统路径中。

修改之后如下:

"""
WSGI config for hellodjango project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ """

import os
import sys

root = os.path.join(os.path.dirname(__file__), '..') # add parent path
sys.path.insert(0, root) # add to sys path

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "serverTest.settings")

application = get_wsgi_application()


Not Found:

Not Found

The requested URL / was not found on this server.

Apache/2.4.7 (Ubuntu) Server at 121.42.35.153 Port 80


试一下在后面加上
admin
,如果有后台管理界面出现,说明,你的服务器已经配置好了。只不过没有在django里面写入对应的路径解析。如,默认的
urls.py
中的内容:

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls), #在这后面加上 `/`对就的规则
]


详见这里

Forbidden

You don't have permission to access / on this server.

Apache/2.4.7 (Ubuntu) Server at 121.42.35.153 Port 80


这个需要检查一下相应
wsgi.py
的读写权限。

root serverTest $ chmod 644 wsgi.py
root serverTest $ ls -l | grep wsgi
-rw-r--r-- 1 root root  591 Jun 29 17:26 wsgi.pyc


只需要修改
wsgi.py
让其它用户也具有可读权限即可。

Bad Request

出现
Bad Request (400)
是因为关联到域名之后没有及时修改
settings.py
中的
ALLOWED_HOSTS
,如,修改你的相应域名。我的:
ALLOWED_HOSTS = ['.sofamiri.com',]


参考

PyConAU 2010: Getting started with Apache/mod_wsgi这个里面讲了一些常见的错误,比较实用。

It worked!

It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Next, start your first app by running python manage.py startapp [app_label].
You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息