51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3123|回复: 1
打印 上一主题 下一主题

[python] python web应用部署

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:05
  • 签到天数: 417 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-17 16:00:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    之前代码要上线都是直接给代码打个tar包 然后丢到服务器上解压 touch一下uwsgi_reload文件 重新加载新的代码 这样的部署上线方式很简单 但是比较难控制 发布流程更加谈不上自动化 所以 最近改用另一种方式:

    使用uwsgi + virtualenv + fabric + distribute 来发布应用 我们现在服务器上安装了Python2.7 这个是自己打的RPM包 便于管理 之前有过想用RPM + Puppet的方式来完成部署 但是推了一段时间后 就没啥后劲了 现在内部开发服务器上有一些是用Puppet来管理的 比较Nginx Php环境 Keepalived等 用起来也还算方便 但是用在Python应用上还是太重了 Python有Pip何不用它来管理呢

    服务器上安装了Python环境,在预定的目录下安装了virtualenv 配置文件的存放地点也是实现预定的 使用uwsgi的来处在于部署方便 配置简单 还有touch reload这个牛X的功能

    使用distribute可以把需要的依赖包写在setup.py文件里 加上MANIFEST.in可以很好地管理自己的应用 在安装的时候指定virtualenv中的pip来安装 这样不会把系统环境给捣乱

    fabric 定义好自己需要的命令后 发布就是很顺畅了 下面这个是代码(从flask里面拽出来的):

    1. from fabric.api import *

    2. # the user to use for the remote commands
    3. env.user = 'root'
    4. # the servers where the commands are executed
    5. env.hosts = ['xxx.example.com',]

    6. def pack():
    7.     # create a new source distribution as tarball
    8.     local('rm -rf dist/*')
    9.     local('python setup.py sdist --formats=gztar', capture=False)

    10. def deploy():
    11.     # figure out the release name and version
    12.     dist = local('python setup.py --fullname', capture=True).strip()

    13.     # upload the source tarball to the temporary folder on the server
    14.     package_name = '%s.tar.gz' % dist
    15.     put('dist/%s' % package_name, '/tmp/%s' % package_name)

    16.     # /web is a virtualenv container
    17.     with cd('/web/'):
    18.         run('/web/bin/pip install /tmp/%s' % package_name)

    19.         # now that all is set up, delete the folder again
    20.         run('rm -rf /tmp/%s' % package_name)

    21.         # and finally touch the .wsgi file so that mod_wsgi triggers
    22.         # a reload of the application
    23.         run('touch /web/configs/uwsgi_reload.txt')
    24.         run('tail -f /tmp/uwsgi.log')
    复制代码


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-22 15:03 , Processed in 0.064514 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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