安装python 3.3

安装新版本Django,一般要求环境中的Python版本也是足够新,以取得更好兼容性和特性。

CentOS以及其他企业级Linux发行版,一般集成Python2.7版本。为此,我们需要手工安装python3.3版本。

Download (there may be newer releases on Python.org):

$ wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tg

Unzip

$ tar -xf Python-3.*

$ cd Python-3.

Prepare compilation

$ ./configur

Build

$ mak

Install

$ make instal

OR if you don't want to overwrite the python executable (safer, at least on some distros yum needs python to be 2.x) - you can access your new install with python3.3:

$ make altinstall

`

### 安装Django基本框架

pip是python的包管理工具,取代之前的easy_install。Django的安装方法有多种,但是一般推荐用包管理工具安装,避免编译过程出错,以及维护最新版本。

`wget https://bootstrap.pypa.io/get-pip.py --no-check-certificat

python get-pip.p

sudo pip install Djang

`

more

### 安装Django附加组件
  1. 安装mysql支

    **Linux里可以多个python版本共存,附加组件也必须为每个版本单独装,为python2安装请调用pip,为python3安装请调用pip3.*

    `sudo yum install mysql-devel.x86_64 python-deve

    sudo pip3.4 install mysqlclien

    sudo pip3.4 install pymysq

    sudo pip3.4 install MySQL-python(FOR PYTHON2

  2. 安装pycrypto‎加密支

    `sudo pip3.4 install pycrypt

    `

    查看已安装组件

    [root@simplead5 ~]# pip3.4 lis
    
    Beaker (1.3.1
    
    cas (0.15
    
    cups (1.0
    
    cupshelpers (1.0
    
    decorator (3.0.1
    
    Django (1.7.5
    
    ethtool (0.6
    
    firstboot (1.110
    
    freeipa (2.0.0a0
    
    iniparse (0.3.1
    
    ipapython (3.0.0
    
    iwlib (1.0
    
    kerberos (1.0
    
    lxml (2.2.3
    
    Mako (0.3.4
    
    MarkupSafe (0.9.2
    
    MySQL-python (1.2.5
    
    netaddr (0.7.5
    
    paramiko (1.7.5
    
    pip (6.0.8
    
    pycrypto (2.0.1
    
    pycurl (7.19.0
    
    pygpgme (0.1
    
    pyOpenSSL (0.10
    
    python-default-encoding (0.1
    
    python-ldap (2.3.10
    
    python-meh (0.11
    
    python-nss (0.13
    
    pyxdg (0.18
    
    scdate (1.9.60
    
    sckdump (2.0.5
    
    scservices (0.99.45
    
    scservices.dbus (0.99.45
    
    setuptools (13.0.1
    
    slip (0.2.20
    
    slip.dbus (0.2.20
    
    slip.gtk (0.2.20
    
    smbc (1.0
    
    SSSDConfig (1.9.2
    
    urlgrabber (3.9.1
    
    yum-metadata-parser (1.1.2)
    
    ``
    
    `
    
    ## Django产品环境优化
    
    Django的使用模式,有开发模式和产品环境模式,开发模式的debug选项以及一些宽松的限定,不适用于产品环境,在系统上线前,需要对安全和性能方面做必要的优化。
    
    ### 关闭Debug选项
    
    debug选项只在开发阶段使用,产品环境**必须**关闭,避免泄露源码片段,本地变量和服务器设置等不安全信息。
    
    `DEBUG = Fals
    
    `
    
    ### 设定ALLOWED_HOSTS绑定域名
    
    `# 在nginx.conf里,站点绑定域名是这样
    
    server_name api.chip.com.cn
    
    # 在setting.py里,站点绑定域名是这样
    
    ALLOWED_HOSTS = ['share.chip.com.cn'
    
    `
    
    ### 设定连接存活时间CONN_MAX_AGE
    
    Django有数据库连接池的概念,对于派生的子请求,可以重用当前数据库连接。所以,根据实际情况设定CONN_MAX_AGE为合理值,以避免频繁发起数据库连接的资源开销和请求延迟。CONN_MAX_AGE取值必须小于数据库的IDLE/TIMEOUT数值,避免Django请求应被DB Server关闭的连接。
    
    `DATABASES = 
    
        'default': 
    
            'ENGINE': 'django.db.backends.mysql'
    
            'NAME': 'chipdb',    #你的数据库名
    
            'USER': 'chip',   #你的数据库用户
    
            'PASSWORD': 'mypassword', #你的数据库密
    
            'HOST': 'chip.mysql.rds.aliyuncs.com', #你的数据库主机,留空默认为localhos
    
            'PORT': '3306', #你的数据库端
    
            'CONN_MAX_AGE': 60, #空闲超时关闭数据库连接, 0表示使用完马上关闭,None表示不关
    
    `
    
    ### 设定模版加载
    
    Django默认会在setting.py的TEMPLATE_LOADERS中开启'django.template.loaders.filesystem.Loader',开启该选项后可以按照TEMPLATE_DIRS中列出的路径的先后顺序从中查找并载入模板。建议按载入频率调整模版路径优先级,效果立竿见影。
    
    ###设定日志记录选项LOGGIN
    
    django使用python的日志输出模块,日志输出和nginx等webservice类似,支持formatter,handler和level定制。
    
    `import loggin
    
    .....
    
    .....
    
    # Logging level WARNING or abov
    
    LOGGING = 
    
        'version': 1
    
        'disable_existing_loggers': False
    
        'formatters': 
    
            'verbose': 
    
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s
    
            }
    
            'simple': 
    
                'format': '%(levelname)s %(message)s
    
            }
    
        }
    
        'handlers': 
    
            'file': 
    
                'level': 'WARNING'
    
                'class': 'logging.FileHandler'
    
                'formatter': 'verbose'
    
                'filename': '/mnt/data1/django/chip/log/app_ling.log'
    
            }
    
        }
    
        'loggers': 
    
            'django.request': 
    
                'handlers': ['file']
    
                'level': 'WARNING'
    
                'propagate': True
    
            }
    
        }
    
    `
    
    ### 增强Django服务可用性
    
    使用runserver模式运行Django服务器,在极限压力以及未知状况下,有可能会因进程Crash导致服务不可用。其他Web应用框架,同样面临内置HTTP Server稳定性不佳的麻烦。
    
    Node.js使用forever组件来保持服务运行,Django同样有这方面的机制-supervisord。实现原理,将Django应用托管在supervisord服务里,supervisord服务启动时,拉起Django进程,同时启动监视进程,检查Django进程的状态。一旦发现Django进程退出,立即派生新Django进程,接管服务。
    
    #### 安装supervisor服务
    
    `sudo yum install superviso
    
    `
    
    #### 编辑supervisor配置文件,加入程序定义
    
    `sudo vim /etc/supervisord.con
    
    `
    
    `[program:django
    
    command=/usr/local/bin/python3 /mnt/data1/django/manage.py runserver 0.0.0.0:808
    
    autostart=tru
    
    autorestart=tru
    
    `
    
    #### 启动supervisord服务
    
    `/etc/init.d/supervisord start

参考资料

  1. [企业版 Linux 附加软件包(EPEL)](https://fedoraproject.org/wiki/EPEL/zh-cn

  2. [通过CONN_MAX_AGE优化Django的数据库连接](http://www.the5fire.com/reduce-db-conn-with-django-persistent-connection.html

  3. [PIP DOCS](https://pip.pypa.io/en/latest/index.html

  4. [How to install Django](https://docs.djangoproject.com/en/1.7/topics/install/

  5. [Deployment checklist](https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/#critical-settings

  6. supervisior Docs