标签:python django gunicorn gevent
安装(全部为Centos6.7环境下)
python单一版本环境安装
(系统已自带python2.6情况下)
注意!!由于系统已经自带python2.6,自己又编译安装了python2.7,如果此时直接用yum 安装yum install python-pip 会安装到python2.6上,必须编译安装pip才行,而pip的安装又依赖setuptools,系统自带了0.6的setuptools,我们必须下载另一个setuptools手动安装,用python27 setup.py install 这样安装就会安装到2.7下了,之后就可以顺利安装pip了,安装pip后,再做一个软链接到/usr/bin/下
1、python2.7的安装
解决依赖
yum -y install readline-devel
下载python2.7.6,保存到 ~/soft
http://www.python.org/ftp/python/
http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
2、解压文件
tar zxvf Python-2.7.6.tgz
3、创建安装目录
mkdir /usr/local/python/python27
4. 安装python
cd ~/soft/Python-2.7.6
./configure --prefix=/usr/local/python/python27
make
make install
5. 修改新版本的ln指向
ln -s /usr/local/python/python27/bin/python/usr/bin/python27
以后只要运行python27即可,系统自带的版本不能动
6、安装setuptools
下载 https://pypi.python.org/packages/source/s/setuptools/setuptools-0.7.2.tar.gz
tar xvzf setuptools-0.7.2.tar.gz
cd setuptools-0.7.2
python27 setup.py install
7、安装pip
下载 https://pypi.python.org/pypi/pip/
tar xvzf pip-8.1.2.tar.gz
python27 setup.py install
8、做Pip软连接
ln -sv /usr/local/python27/bin/pip /usr/bin/pip
(pip的升级)
pip install --upgrade pip
python多版本开发环境安装
1、安装pyenv
安装依赖:
yum -y install gcc gcc-c++ make git patch openssl-develzlib-devel readline-devel sqlite-devel bzip2-devel
安装pyenv(安装到/root/.pyenv):
git clone https://github.com/yyuu/pyenv.git /root/.pyenv
echo ‘export PYENV_ROOT="/root/.pyenv"‘>> ~/.bashrc
echo ‘export PATH="$PYENV_ROOT/bin:$PATH"‘>> ~/.bashrc
echo ‘eval "$(pyenv init -)"‘ >>~/.bashrc
2、安装具体python版本
# 如果命令行下载安装Python太慢,可以将下载的安装包放入/root/.pyenv/sources/下对应的安装版本的目录中后安装。具体这样:
例如要安装2.7.11版本的python ,就把下载好的安装文件放到/root/.pyenv/sources/2.7.11/Python-2.7.11.tar.gz 注意!如果没有2.7.11目录就新建一个,文件名是Python-2.7.11.tar.gz,并不是显示的Python-2.7.11.tgz,一般运行一次pyenv install 2.7.11后,它就会自动在sources下生成对应的版本目录和文件名,可以进去参考。安装文件放到相应位置后 pyenvinstall 2.7.11 –k安装即可
# 查看可提供的Python版本列表
pyenv install --list
pyenv install 2.7.11 -v
pyenv install 3.5.1 –v
#重建环境变量
pyenv rehash
# 查看已安装Python版本
pyenv versions
其他常用命令:
#卸载
pyenv uninstall 2.7.5
#设置本地的特定目录的Python版本
pyenv local 2.7.5
#设置全局的python版本
pyenv global 2.7.5
#查看当前所有版本
prenv versions
3.安装virtualenv,插件形式pyenv-virtualenv
git clone https://github.com/yyuu/pyenv-virtualenv.git/root/.pyenv/plugins/pyenv-virtualenv --其中/root/.pyenv 是你安装pyenv的目录
exec "$SHELL" --重新加载shell,更新环境变量
#查看当前虚拟环境
pyenv virtualenvs
切换到新的虚拟环境的命令为
pyenv activate env271
切换回系统环境, 运行这个命令即可
pyenv deactivate
4、安装pip
切换到需要安装的虚拟环境:
pyenv activate env271
直接用yum安装即可
yum -y install python-pip
(pip的升级)
pip install --upgrade pip
5、安装ipython
可以利用pip安装
pip install ipython
部署前的一些配置
关闭Debug模式
当用命令 django‐admin.py startproject创建了一个项目 , 其中创建的 settings.py 文件的 DEBUG
设置默认为 True。django会根据这个设置来改变他们的行为, 如果 DEBUG 模式被开启:
所有的数据库查询将被保存在内存中, 以django.db.connection.queries 的形式.消耗很多内存!
任何404错误都将呈现django的特殊的404页面,而不是普通的404页面。
你的应用中任何未捕获的异常,从基本的python语法错误到数据库错误以及模板语法错误都会返回漂亮的Django错误页面。 这个页面包含了比404错误页面更多的敏感信息。
只有在开发调试阶段才会开启Debug模式,在项目的settings.py中,DEBUG = False即可关闭
关闭debug模式后,我们必须自定义404和500的返回页面,在项目的templates下定义404.html和500.html,404.html可以使用模板来继承生成,但500.html不行
配置错误时发送Email警报信息
1、主要通过settings.py配置以下选项(新增即可):
fromdjango.core.mail import send_mail 先导入send_mail模块
EMAIL_BACKEND= ‘django.core.mail.backends.smtp.EmailBackend‘ 默认是这个,可以不配
EMAIL_HOST= ‘smtp.sina.com‘ #SMTP地址,如果只配置发送本地邮件的话,这个可以不写,默认就是EMAIL_HOST = ‘localhost’
EMAIL_HOST_USER= ‘dx@qq.com‘ #自己的邮箱名,如果只配置发送本地邮件的话下面几项的配置都不用了
EMAIL_PORT= 587 #SMTP端口
EMAIL_HOST_PASSWORD= ‘password‘ #自己的邮箱密码
EMAIL_SUBJECT_PREFIX= ‘2BiTT‘ #为邮件Subject-line前缀,默认是‘[django]‘
EMAIL_USE_TLS= True #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false,根据实际情况配置
2、基本使用方法:
发送邮件最简单的函数是send_mail,函数位于django.core.mail模块下面,函数原型如下:
send_mail(subject,message, from_email, recipient_list, fail_silently=False,auth_user=None,auth_password=None, connection=None)
subject:一个字符串,主题
message:邮件内容,也是一个字符串
from_email:发送邮箱,一个字符串类型的字符串,要求和EMAIL_HOST_USER一致
recipient_list:一个列表,元素是接收邮箱字符串,每一个接收邮箱用一个字符串表示
fail_silently:是否安静的失败,如果是,发送失败不抛出异常,否则抛出一个smtplib.SMTPException
auth_user:认证发送邮箱用户名,如果不提供,将使用EMAIL_HOST_USER 的值
auth_password:邮箱密码,如果不提供,使用EMAIL_HOST_PASSWORD 的值
connection:发送邮件用的后端,如果不提供,将使用 Email backends的值
例:
send_mail(‘subject‘,‘message‘,‘root@localhost‘,[‘dx@localhost‘,‘root@localhost‘],fail_silently=False)
以发送人root@localhost发送一份邮件到dx@localhost和root@localhost
mail_admins()
语法:mail_admins(subject, message, fail_silently=False, connection=None,html_message=None)
提供了一个给管理员发送邮件的快捷方式,启用这个功能的话,先要在你的设置文件里面配置好ADMINS和SERVER_EMAIL,前者是收件人,后者是发件人。如果你提供了html_message的话,邮件内容会被替换成html_message的内容
还有mail_managers(),和mail_admins类似
语法:mail_managers(subject, message, fail_silently=False, connection=None,html_message=None)
send_mass_mail()
语法:send_mass_mail(datatuple, fail_silently=False, auth_user=None,auth_password=None,connection=None)
send_mass_mail()提供了一个把发送内容封装成元组然后再封装在一个元组里面的参数datatuple,这有利于批量发送编辑好的邮件,datatuple每一个元素都是以下的格式
(subject,message, from_email, recipient_list)
send_mass_mail的其他参数和send_mail的一样
例:
message1= (‘Subject here‘, ‘Here is the message‘, ‘from@example.com‘,[‘first@example.com‘, ‘other@example.com‘])
message2= (‘Another Subject‘, ‘Here is another message‘, ‘from@example.com‘,[‘second@test.com‘])
send_mass_mail((message1,message2), fail_silently=False)
3、各种邮件后端
我们可以指定不同的邮件后端去适用不同的场景
SMTP后端
默认的邮件后端,这是真的将邮件发送到指定邮箱的后端
EMAIL_BACKEND =‘django.core.mail.backends.smtp.EmailBackend‘
Console后端
console后端把邮件写入到stdout 在python27 manager.py runserver 控制台上输出显示,测试用比较直观
EMAIL_BACKEND =‘django.core.mail.backends.console.EmailBackend‘
文件后端
把邮件写到文件里面,需要提供一个EMAIL_FILE_PATH参数,可以在配置文件settings.py里面直接指明,或者用get_connection()函数里面传入file_path关键字参数
EMAIL_BACKEND =‘django.core.mail.backends.filebased.EmailBackend‘
EMAIL_FILE_PATH =‘/tmp/app-messages‘
内存中的后端
发送的邮件存在内存中。。。。。
EMAIL_BACKEND =‘django.core.mail.backends.locmem.EmailBackend‘
假后端
如其名,假的
EMAIL_BACKEND =‘django.core.mail.backends.dummy.EmailBackend‘
设置连接中断警报
如果你安装有CommonMiddleware(比如,你的MIDDLEWARE_CLASSES设置包含了’django.middleware.common.CommonMiddleware’的情况下,默认就安装了CommonMiddleware),你就具有了设置这个选项的能力:有人在访问你的Django网站的一个非空的链接而导致一个404错误的发生和连接中断的情况,你将收到一封邮件. 如果你想激活这个特性,设置SEND_BROKEN_LINK_EMAILS 为True(默认为False),并设置你的MANAGERS为某个人或某些人的邮件地址,这些邮件地址将会收到报告连接中断错误的邮件. MANAGERS使用和ADMINS 同样的语法.例如:
MANAGERS= (
(‘GeorgeHarrison‘, ‘gharrison@example.com‘),
(‘RingoStarr‘, ‘ringo@example.com‘),
)
针对生产环境、测试环境或不同环境设置配置文件settings.py
平时开发或学习时我们通常使用一个单一的设置文件 settings.py文件由django-admin.py startproject命令生成。但是当你准备要进行配置的时候,你将发现你需要多个配置文件以使你的开发环境和产品环境相独立。比如,你可能不想每次在本地机器上测试代码改变的时候将DEBUG从False 改为True。Django通过使用多个配置文件而使得这种情况很容易得到避免。
有三种实现方法(推荐第三种方法):
1. 设置成两个全面的,彼此独立的配置文件
直接把settings.py复制一份即可
2. 设置一个基本的配置文件(比如,为了开发)和第二个(为了产品)配置文件,第二个配置文件仅仅从基本的那个配置文件导入配置,并对需要定义的进行复写.
例:
# settings.py
DEBUG = True
TEMPLATE_DEBUG = DEBUG
DATABASE_ENGINE = ‘postgresql_psycopg2‘
DATABASE_NAME = ‘devdb‘
DATABASE_USER = ‘‘
DATABASE_PASSWORD = ‘‘
DATABASE_PORT = ‘‘
# settings_production.py
from settings import *
DEBUG = TEMPLATE_DEBUG = False
DATABASE_NAME = ‘production‘
DATABASE_USER = ‘app‘
DATABASE_PASSWORD = ‘letmein‘
3. 使用一个单独的配置文件,此配置文件包含一个Python的逻辑判断根据上下文环境改变设置。
# settings.py
import socket
if socket.gethostname() == ‘dx.com‘:
DEBUG = TEMPLATE_DEBUG = True
else:
DEBUG = TEMPLATE_DEBUG = False
apache/nginx+Django+Gunicorn的部署
安装 Gunicorn
安装gunicorn 就是简单地pip install gunicorn
运行,将Django 作为一个WSGI 应用在Gunicorn 中运行
Gunicorn安装后,可以使用一个gunicorn 命令来启动Gunicorn 服务器进程。最简单地,gunicorn 的调用只需要在其调用位置具有一个包含WSGI application 对象的模块,该对象的名称必须为名为application。所以在一个Django 项目中,调用gunicorn 就像这样:
gunicorn myproject.wsgi
它将启动一个进程,它运行一个线程并监听在127.0.0.1:8000。
注意!它要求你的项目位于Python 的路径中;保证这点最简单的方法就是在与manage.py 文件所在的相同目录中运行这个命令。
gunicorn命令其他参数:
-b 监听ip和端口,默认是 127.0.0.1:8000 如:0.0.0.0:80
-w 开启多个进程 如 -w 8
-k gunicorn默认使用同步阻塞的网络模型(-k sync),对于大并发的访问可能表现不够好, 它还支持其它更好的模式,比如:gevent或meinheld。
先pip installgevent然后使用gevent模型 -kgevent
-c 可以用配置文件
最后可以 nohup -w 4 -k gevent gunicorn AutoSa.wsgi:application
标签:python django gunicorn gevent
原文地址:http://dengxi.blog.51cto.com/4804263/1795021