设为首页 收藏本站
查看: 674|回复: 0

[经验分享] Django之安装与部署

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-4 10:43:23 | 显示全部楼层 |阅读模式
安装(全部为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 ... ptools-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-vi ... ns/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  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-239228-1-1.html 上篇帖子: Python 3.5 安装 下篇帖子: Python 函数的参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表