所以自己用比较新的环境配置了一番,网上下载

作者: 操作系统  发布:2019-11-06

 

本文将介绍如何在Linux上部署Django + Mysql + Apache环境。我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户并发,而且django的simple HTTP server处理大量静态文件的性能太差,所以要用apache做前端。Django自带的SQLite数据库权限只依赖于文件系统,没有用户帐户的概念,这里我们使用典型的关系型数据库Mysql。看似简单的环境搭建,在实际操作过程中还是遇到了不少的大坑,所以特地将过程记录下来,也希望对大家有小小的帮助。

CentOS 7.5  +  python 2.7.5  + Django 1.11.14  +  Apache 2.4.6  +  Mysql 5.7.23

网上有很多这种方式部署的博客,可是细致讲的并没有发现,而且很多方式都已经比较陈旧,所以自己用比较新的环境配置了一番,中间遇到的一些问题都有详细描述,希望有同学受益。

Form:Centos6.5 django项目apache部署,and it works!

配置这个Python + wsgi + django, 可谓曲折。来看:

 

系统环境

环境说明

操作系统:CentOS 6.7 64-bit

 
***********************
安装环境:
Centos5.6
Python2.7
Mod_wsgi: mod_wsgi-4.4.13
Apache: httpd2.2
Django: Django-1.8.3
***********************

1. 安装Django

Linux上我们可以直接使用pip安装Django

 

1.1  安装python(使用CentOS 7.5自带的python即可)

[root@localhost ~]# python --version
Python 2.7.5

 

1.2  网上下载get-pip.py文件安装pip:

wget https://bootstrap.pypa.io/get-pip.py

 

1.3  pip安装django

[root@localhost ~]# pip install django
[root@localhost ~]# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.11.14'

 

  • 系统:CentOS 7 x64
  • Python版本:2.7.5
  • Apache版本:2.4.6
  • Django版本:1.9.7
  • pip版本:8.1.2(官网get-pip.py方式安装)

安装基础环境

yum -y install gcc make wget

1. 安装Python: Python2.7

2. 安装Apache

Linux上使用yum安装Apache即可

[root@localhost ~]# yum install httpd
[root@localhost ~]# httpd -V
[Thu Aug 16 20:57:04.487586 2018] [so:warn] [pid 1605] AH01574: module wsgi_module is already loaded, skipping
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)

注意:使用yum安装的httpd,其安装目录位于/etc/httpd/,我们只需要配置/etc/httpd/conf/httpd.conf即可

 

安装使用Apache作为应用代理服务器

安装Python

安装Python

yum -y install zlib-devel openssl-devel
wget https://www.Python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar xzf Python-2.7.12.tgz
cd Python-2.7.12/
./configure --prefix=/usr/local/python CFLAGS=-fPIC
make && make install
cd ../

备注:不安装zlib-devel的话,在安装setuptools时会报错。不安装openssl-devel的话,在安装django时会报错。不加CFLAGS=-fPIC参数,安装mod_wsgi时会报错。

将Python加入环境变量

在/etc/profile文件末尾添加以下内容:

export PATH=/usr/local/python/bin:$PATH

然后使配置文件生效:

. /etc/profile

安装setuptools

wget https://pypi.python.org/packages/6b/dd/a7de8caeeffab76bacf56972b3f090c12e0ae6932245abbce706690a6436/setuptools-28.3.0.tar.gz
tar xzf setuptools-28.3.0.tar.gz
cd setuptools-28.3.0/
python setup.py install
cd ../

安装pip

wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
tar xzf pip-8.1.2.tar.gz
cd pip-8.1.2/
python setup.py install
cd ../

本来系统里已经自带了Python2.6, 为了我的追求极致,装逼的完美主义,我又安装了Python3.4. 并且把 /usr/local/bin/python 直接指向Python3.4. 将其设为python的主要程序。

3. 安装Mysql

我们使用yum安装Mysql,需要先更新yum源

 

[root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
[root@localhost ~]# rpm -ivh mysql57-community-release-el7-8.noarch.rpm
[root@localhost ~]# yum install mysql-community-server
[root@localhost ~]# yum install mysql-community-devel

 

注意:yum安装的Mysql其文件目录如下

  • 配置文件:/etc/my.cnf
  • 日志文件:/var/log/mysqld.log
  • 服务启动脚本:/usr/lib/systemd/system/mysqld.service
  • socket文件:/var/run/mysqld/mysqld.pid

 

  • 安装Apache

安装Apache

安装apr

wget http://apache.fayea.com/apr/apr-1.5.2.tar.bz2
tar xjf apr-1.5.2.tar.bz2
cd apr-1.5.2/
./configure
make && make install
cd ../

安装apr-util

wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.bz2
tar xjf apr-util-1.5.4.tar.bz2
cd apr-util-1.5.4/
./configure --with-apr=/usr/local/apr/
make && make install
cd ../

安装pcre

yum -y install gcc-c++
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.bz2
tar xjf pcre-8.39.tar.bz2
cd pcre-8.39/
./configure --prefix=/usr/local/pcre
make && make install
cd ../

备注:不安装gcc-c++的话会报错。

安装httpd

yum -y install perl
wget http://apache.fayea.com/httpd/httpd-2.4.25.tar.bz2
tar xjf httpd-2.4.25.tar.bz2
cd httpd-2.4.25.tar.bz2/
./configure --prefix=/usr/local/httpd --with-pcre=/usr/local/pcre
make && make install
cd ../

备注:不安装perl的话,安装mod_wsgi时会报错。

将Apache加入环境变量

在/etc/profile文件末尾添加以下内容:

export PATH=/usr/local/httpd/bin:$PATH

然后使配置文件生效:

. /etc/profile

安装mod_wsgi

wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/mod_wsgi-4.5.7.tar.gz
tar xzf mod_wsgi-4.5.7.tar.gz
cd mod_wsgi-4.5.7/
./configure --with-apxs=/usr/local/httpd/bin/apxs --with-python=/usr/local/python/bin/python
make && make install
chmod 755 /usr/local/httpd/modules/mod_wsgi.so
cd ../

注意:安装是如果报错error while loading shared libraries:libpython2.7.so.1.0:,需要重新编译安装python并添加--enable-shared参数,安装完之后python可能无法使用,需要在/etc/ld.so.conf中加入新行/usr/local/lib,保存后,运行 /sbin/ldconfig,运行/sbin/ldconfig –v查看

此处就为悲剧的根源了。因为Python3 和 mod_wsgi 不兼容 (注:至少到现在我还没有找到能用使用python3 来安装的wsgi),我安装的时候直接使用 ./Configure   make    makeinstall 命令,导致系统先择了将apache 的python版本设置成了python2.6. (注:wsgi: 即为 the python web server gateway interface, 其作用就是apache能通过它来连接并使用Python)

4. 配置(重点)

以上三步都非常容易,但是将这三个环境配置好,还是费了我不少的时间...

4.1  配置Mysql

 

[root@localhost ~]# systemctl start mysqld
# 开启Mysql服务后,会为root设置一个默认密码,我们首先重置密码
# 获得默认密码
[root@localhost ~]# cat /var/log/mysqld.log | grep -i password
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.7.23 MySQL Community Server (GPL)

mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sam_tech_0912';

# 重置密码后,我们创建一个数据库,因为后续django连接Mysql时需要输入数据库名称
mysql> create database Platform default charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> quit
Bye

  

4.2  django中配置Mysql

 

django中关于Mysql的配置:

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Platform',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'Sam_tech_0912',
    }
}

 

django中其他的部分的配置:

DEBUG = True

ALLOWED_HOSTS = ["*",]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates"),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

补充:

关于 Error loading MySQLdb module: No module named MySQLdb

--> yum install MySQL-python

 

4.3  配置Apache

 

重点:安装mod_wsgi

[root@localhost ~]# yum install mod_wsgi
[root@localhost ~]# rpm -qa | grep wsgi
mod_wsgi-3.4-12.el7_0.x86_64

 

编辑配置文件 /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"

# 设定Apache监听的端口号,可以设定多个
Listen 80

# 重点:这句是加载刚刚安装的wsgi模块,有了它django才能部署到Apache上,切记!!!
LoadModule wsgi_module modules/mod_wsgi.so


Include conf.modules.d/*.conf

User apache
Group apache

ServerAdmin root@localhost

ServerName localhost:80

<Directory />
    AllowOverride none
    Require all denied
</Directory>

    DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
    LogFormat "%h %l %u %t "%r" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>

    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz



    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>


EnableSendfile on

IncludeOptional conf.d/*.conf

# 我们在/etc/httpd/conf/下新建httpd-vhosts.conf虚拟主机配置文件,完成对80端口的配置
# 这句是告诉Apache去调用httpd-vhosts.conf
# 虚拟主机中的配置参数将覆盖httpd.conf主配置文件中的设定
Include conf/httpd-vhosts.conf

 

虚拟主机配置文件(关键一步

<VirtualHost *:80>
    ServerAdmin samliuming@aliyun.com
    DocumentRoot "/home/python_projects/Platform"
    ServerName samlinux01-platform.com
    ServerAlias sam-platform.com
    ErrorLog "logs/platform_error.log"
    CustomLog "logs/platform_access.log" common


    WSGIScriptAlias / "/home/python_projects/Platform/Platform/wsgi.py"
    # 一定要定义python-path到项目目录,否则会报出相关模块无法找到的错误,切记!!!
    WSGIDaemonProcess samlinux01-platform.com python-path=/home/python_projects/Platform:/usr/lib64/python2.7/site-packages
    WSGIProcessGroup samlinux01-platform.com
    WSGIScriptReloading On

    # 设定Apache访问django的项目目录

    Alias /static /home/python_projects/Platform/static
    Alias /media /home/python_projects/Platform/media
  # 注意:将python中django admin的静态文件链接到static目录下,否则会出现登录django admin静态文件404的问题
  # ln -s /usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin admin


    <Directory /home/python_projects/Platform/media>
        AllowOverride None
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
    <Directory /home/python_projects/Platform/static>
        AllowOverride None
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
    <Directory /home/python_projects/Platform/Platform>
        <Files wsgi.py>
            AllowOverride None
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

注意:每次编辑完成后都需要重启httpd服务使配置生效

[root@localhost ~]# httpd -t
[Thu Aug 16 20:35:06.439115 2018] [so:warn] [pid 1520] AH01574: module wsgi_module is already loaded, skipping
Syntax OK
[root@localhost ~]# systemctl restart httpd.service

 

编辑django中的 wsgi.py文件

"""
WSGI config for Platform 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.11/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()

# 添加项目路径到python的环境变量中
# For Apache server
import sys
project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_dir)

 

安装Django

wget https://pypi.python.org/packages/8a/09/46f790104abca7eb93786139d3adde9366b1afd59a77b583a1f310dc8cbd/Django-1.10.2-py2.py3-none-any.whl
pip install Django-1.10.2-py2.py3-none-any.whl

安装MySQLdb(选做)

yum -y install mysql-devel
pip install MySQL-python

备注:因为我的Django程序用的是MySQL数据库,所以我需要安装这个包。

但是由于我的django是用Python3安装的。最终导致apache根本就连接不上django, 我查询httpd下的error_log来回无数遍,终于发现httpd使用的是python2.6。所以只能果断使用python2了, 但是新的问题又出现了,因为下载的django版本过高,python2.6安装不了,所以最终结果就是:安装python2.7!

至此,大功告成,我们直接可以通过80端口访问我们的项目,虽然上面的步骤简单,但是网上查的资料并没有特别详细完整的,中间还是走了不少的弯路,所以特意将配置步骤记录下来,方便后续再次配置!

 

# yum install httpd

配置Django

将你开发好的Django程序上传到服务器,我这里上传到/wwwroot/目录,下面这个树形图就是我的Django程序的结构:

这里面有个文件特别关键,能否正常运行就看它了,它就是wsgi.py,下面是我的文件的内容,供读者参考:

import sys

sys.path.append('/wwwroot/OMMS')

import os

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()

注意:前两句需要自己添加,如果没有这两句,你的程序就不能正常运行了,后面的是Django自动生成的。

命令:

  • 设置Apache服务开机自启动(可选,不过设置自启动方便)

配置Apache

启用虚拟主机配置文件

编辑/usr/local/httpd/conf/httpd.conf文件,
在一堆以LoadModule开头的段落下添加一行:

LoadModule wsgi_module modules/mod_wsgi.so

然后在末尾添加以下内容:

<VirtualHost *:80>
    DocumentRoot "/wwwroot/OMMS/OMMS"
    WSGIScriptAlias / "/wwwroot/OMMS/OMMS/wsgi.py"

    <Directory "/wwwroot/OMMS/OMMS">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

注意:读者请根据自己的程序修改其中的路径。

tar -xvf Python-2.7.10.tgz
cd Python-2.7
./configure --enable-shared

启动Web服务并测试

通过以下命令启动Apache服务:

apachectl start

make

# /sbin/chkconfig httpd on

mark

运行了命令yum -y install gcc make 结果出来一些错误信息的提示!yum错误:Cannot retrieve repository metadata (repomd.xml) for rpmforge 原来是我的yum源地址该更新了!
解决方法如下:

代码如下:

cd /etc/yum.repos.d
vi rpmforge.repo

===>

baseurl=http://centos.ustc.edu.cn/centos/5/os/i386/

然后

yum clean all

make install

  • 启动Apache服务

可能遇到问题:python: error while loading shared  libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file

原因: python2.7 的库找不到了

# /sbin/service httpd start

解决方案:1. 进入/etc/ld.so.conf.d/,

  • 验证安装

     2. 新建文件:vim python2.7.conf

     3. 添加python2.7的库的所在路径: /usr/local/lib

访问本机的80端口:http://localhost出现以下界面说明安装成功(apache端口被我更改过成81)

          4. 保存并退出,然后执行命令:ldconfig

9159金沙官网 1访问Apache服务

2. 安装django: Django-1.8.3

  • Apache服务的配置说明

直接进入安装包文件夹使用python安装

主配置文件是/etc/httpd/conf/httpd.conf其他配置文件存储在/etc/httpd/conf.d/目录

tar xzvf  Django-1.8.3 .tar.gz
cd  Django-1.8.3

主配置文件内容为:

sudo python  setup.py install

#服务器根目录ServerRoot "/etc/httpd"#端口#Listen 12.34.56.78:80Listen 80#域名+端口来标识服务器,没有域名用ip也可以#ServerName www.example.com:80#不许访问根目录<Directory /> AllowOverride none Require all denied</Directory># 文档目录DocumentRoot "/var/www/html"# 对 /var/www目录访问限制<Directory "/var/www"> AllowOverride None # Allow open access: Require all granted</Directory># 对/var/www/html目录访问限制<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted</Directory># 默认编码AddDefaultCharset UTF-8#EnableMMAP offEnableSendfile on# include进来其它配置文件IncludeOptional conf.d/*.conf

3. 安装mod_wsgi: mod_wsgi-4.4.13

  • 配置需要注意的点

下载地址:https://pypi.python.org/pypi/mod_wsgi

Apache2.2.x版本和Apache2.4.x版本对于Directory标签中的配置方式并不一样,如果配置方式错误会导致 client denied by server configuration错误

安装命令:

Apache2.2.x的配置文件(IP地址以192.168.10.81为例)

./configure --with-python=/usr/local/bin/python2.7

<VirtualHost 192.168.10.81:80>ServerAdmin rocdk890@gmail.comdirectoryIndex index.html index.php index.htm index.shtml login.phpServerName 192.168.10.81DocumentRoot /var/www/vhosts/wwwroot<Directory "/var/www/vhosts/wwwroot"> Options -Indexes AllowOverride All Order allow,deny Allow from all</Directory></VirtualHost>

make

Apache2.4.x的配置文件

make install

<VirtualHost 192.168.10.81:80>ServerAdmin rocdk890@gmail.comdirectoryIndex index.html index.php index.htm index.shtml login.phpServerName 192.168.10.81DocumentRoot /var/www/vhosts/wwwroot<Directory "/var/www/vhosts/wwwroot"> Options -Indexes AllowOverride All Require all granted</Directory></VirtualHost>

可能遇到问题:

变动地方主要有:

   3-1. apxs: command not found

删除了 Order deny,allow 和 Order allow,deny把 Deny from all 替换成了 Require all denied把Allow from all 替换成了 Require all granted然后还把 Allow from 192.168.10.21 这样的语句给替换成了 Require host 192.168.10.21

       原因: apache 组件 httpd-devel 没有安装

使用mod_wsgi拓展作为Django的应用容器

       解决办法: yum install httpd-devel

  • 首先安装httpd-devel

   3-2. 在make时编译失败。查看错误第一行,发现:Sorry, Python developer package does not appear to be installed.

                原因:python组件 python-devel没有安装

# yum install -y httpd-devel

                解决办法: yum install python-devel

  • 安装mod__wsgi

4. 配置httpd(注:此目的为能让httpd能通过wsgi来使用python,并访问django的网站目录) 非常重要,也很容易出问题:

  4-1. 为httpd添加wsgi的动态链接库.so文件的链接:

# yum install mod_wsgi

         1. vim /etc/httpd/conf/httpd.conf

安装完成之后,mod_wsgi.so会在Apache的modules目录中

         2. 添加内容:LoadModule  wsgi_module modules/mod_wsgi.so

  • 在httpd.conf文件中添加以下内容

         3. 保存退出。

4-2. 继续修改httpd.conf, 添加django项目的路径,比如我新建的django网站的路径为:/var/www/html/mysite, 则配置为如下:

LoadModule wsgi_module modules/mod_wsgi.so

WSGIPythonPath /var/www/html/mysite
WSGIScriptAlias / "/var/www/html/mysite/mysite/wsgi.py"

该配置用来连接django.wsgi,使工程被Apache加载

<Directory "/var/www/html/mysite/mysite">
            Order Allow,Deny
            Allow from all
    <Files wsgi.py>
            Order allow,deny
            Allow from all
    </Files>
</Directory>

项目根目录中新建wsgi文件夹,在wsgi文件夹中新建文件 django.wsgi

4-3. 配置wsgi文件

  • django.wsgi文件内容如下:

一般django生成项目时会自动帮你配置好wsgi.py文件。不需要自己配的,前提是你的wsgi得装好了。我的/var/www/html/mysite/mysite/wsgi.py 内容如下:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

import osimport sysfrom django.core.wsgi import get_wsgi_application# Add this file path to sys.path in order to import settingssys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath), '..'))os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings'sys.stdout = sys.stderrDEBUG = Trueapplication = get_wsgi_application()

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

注意:对于1.3和1.4及之后的版本,此文件的代码内容是不同的,详情区别参考

5. 重启httpd service: service httpd restart

配置wsgi时,

至少则配置问题基本解决. 如果遇到新的问题,就得上stackoverflow再去查一下了。

必须配置项目路径到系统路径中,因为要通过项目路径找到settings.py配置文件。也就是sys.path.insert(0, os.path.join(os.path......巴拉巴拉,DJANGO_SETTINGS_MODULE必须指向项目的settings.py文件,projectname指的就是项目的名称。修改了wsgi的配置后必须重启httpd服务。

apache+wsgi+django配置

在Apache中配置wsgi

WSGI是什么?

  • 在httpd.conf中添加一行

WSGI的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着用户的应用。但是呢,这个桥的功能很弱,有时候还需要别的桥来帮忙才能进行处理。
Django 是什么?

WSGIScriptAlias /python "/path/to/docRoot/django.wsgi" 

Django(发音:/ˈdʒæŋ?oʊ/ JANG-goh) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守 BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。最新发行版本是Django 1.3.1,于2011年09月10日发布.

如:WSGIScriptAlias /python /usr/local/testProject/wsgi/django.wsgi

Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。
设计哲学

设置项目目录访问权限

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

在httpd.conf中添加目录权限,否则会报错:Apache: access denied because search permissions are missing

Django基于MVC的设计十分优美:

<Directory "/usr/local/testProject"> AllowOverride All Require all granted</Directory>

对象关系映射 (ORM,object-relational mapping)

安装Django

以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。

# wget https://www.djangoproject.com/m/releases/1.9/Django-1.9.7.tar.gz# cd Django-1.9.7/# python setup.py install

URL 分派

  • 验证Django安装是否完成

使用正则表达式匹配URL,你可以任意设计的URL,没有框架的特定限定。象你喜欢的一样灵活。

模版系统

# python>>> import django>>> django.VERSION(1,9,7,'final',0)

使用Django强大而可扩展的模板语言,可以分隔设计、内容和Python代码。并且具有可继承性。

安装pip

表单处理

# wget https://bootstrap.pypa.io/get-pip.py# python get-pip.py

你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。

安装MySQLdb模块

Cache系统

# yum install python-devel# yum install mysql-devel# pip install MySQL-python

可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。

最后访问项目的效果(之前做的一个小项目哈,表介意界面)

会话(session),用户登录与权限检查

9159金沙官网 2部署完成之后访问项目

快速开发用户会话功能。

下一步改进方法

国际化

使用Docker技术,把Django部署环境制作成镜像,然后在生产服务器上安装Docker环境,项目的更新直接更新镜像即可,了解Docker技术到

内置国际化系统,方便开发出多种语言的网站。

自动化的管理界面

不需要你花大量的工作来创建人员管理和更新内容。Django自带一个ADMIN site,类似于内容管理系统。

软件版本:

操作系统:Archlinux Kernel 3.1.0-4-ARCH x86_64
WEB服务器:  Apache/2.2.21
Python: Python/2.7.2
Django:  1.3.1
wsgi: mod_wsgi/3.3

1. 安装apache和python

在Archlinux上我已经用pacman安装好了apahce和python,接下来安装mod_wsgi

2. 安装WSGI

pacman -S mod_wsgi
这里是Archlinux,如果是其他操作系统,请google。
安装好之后,会生成mod_wsgi的apache模块,位置在 /usr/lib/httpd/modules/mod_wsgi.so。
在apache的配置文件里载入模块:
LoadModule wsgi_module modules/mod_wsgi.so

3. 配置apache虚拟主机

<VirtualHost *:80>
    ServerName webpy.test.com
    WSGIScriptAlias / /home/max/mysite/django.wsgi

    <Directory "/home/max/mysite">
        Options FollowSymLinks Indexes
        AllowOverride all
        Order Deny,Allow
        Allow from all
    </Directory>

    ErrorLog "/var/log/httpd/webpy-error.log"
    CustomLog "/var/log/httpd/webpy-access.log" combined

</VirtualHost>

上面红色的一行是让加载django的wsgi配置文件(django本身就支持WSGI协议)

4. 安装django

shell> pacman -S django
也可以选择下载源码安装,因为django本身全部用python编程,所以下载django的安装包之后,进入到
django源码目录,执行以下命令即可安装django:
shell> python setup.py install

5. 配置django

我们现在建立一个django的项目,建立好项目文件夹之后,django会自动生成一些项目文件:
shell> django-admin.py startproject mysite
django-admin.py是django本身的一个管理程序,除了用于新建项目之外,还有很多用途。
mysite是新建的项目名称,这样就会在当前目录下生成一个mysite的文件夹。
__init__.py  __init__.pyc manage.py  settings.py  urls.py
上面就是mysite目录下的文件,这是django项目的初始文件。

6. 配置django的wsgi文件

在mystei目录下新建一个django.wsgi文件,内容如下:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

path = '/home/max'

if path not in sys.path:
    sys.path.append(path)

mysite.settings是mysite项目的配置文件,django项目的配置文件就是python代码;在mysite目录下可以看到settings.py文件。
由于当前目录没有在系统的PATH变量里,所以mod_wsgi无法寻找到settings.py文件,为了帮它找到,
我们把mysite目录的上一级目录,追加到PATH变量里。
sys.path.append(path)

7. 启动django项目

重启apache服务器
shell> apachectl restart
在浏览器打开

启动django的项目其实还有一种更快的方式,就是在mysite项目的目录下,执行:
shell> python manage.py runserver 8000
会出现以下信息:

Django version 1.3.1, using settings 'mysite.settings'
Development server is running at
Quit the server with CONTROL-C.

这是浏览器打开
这其实启动开发服务器,它每次只能服务器一个用户,所以不能在生产环境使用它。

本文由9159.com发布于操作系统,转载请注明出处:所以自己用比较新的环境配置了一番,网上下载

关键词: