V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hustlzp
V2EX  ›  Python

在做 Flask app(或者其他类型的网站)集群的时候,需要自动将 Flask app 部署到一台新开的 Linux 服务器上。如何做比较好?直接上 Shell 脚本?还是用一些工具比如 Salt/Puppet/Ansible?

  •  
  •   hustlzp ·
    hustlzp · 2015-05-27 19:00:58 +08:00 · 5010 次点击
    这是一个创建于 3497 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT.
    21 条回复    2015-06-08 11:45:59 +08:00
    freeznet
        1
    freeznet  
       2015-05-27 19:56:27 +08:00
    安利docker~
    happywowwow
        2
    happywowwow  
       2015-05-27 19:58:32 +08:00
    fabric ?
    evlos
        3
    evlos  
       2015-05-27 19:59:35 +08:00 via iPhone
    我是来安利 Dokku 的 :D
    crazyxin1988
        4
    crazyxin1988  
       2015-05-27 20:07:22 +08:00
    密切关注~
    janxin
        5
    janxin  
       2015-05-27 20:39:34 +08:00 via Android
    fabric或者docker
    hustlzp
        6
    hustlzp  
    OP
       2015-05-27 20:55:05 +08:00
    @freeznet
    @evlos 安利 docker 是什么gui...
    johnsmith123
        7
    johnsmith123  
       2015-05-27 21:02:53 +08:00
    首先 你要确认是一台还是多台,一台的话,直接cp上去算了。

    其次,新开的服务器是什么样的,哪个发行版?Python的版本是哪个?需不需要编译安装Python2.7?

    httpd还是nginx?后端的Python用的什么服务?数据库要用哪个?MySQL,Mongodb还是redis?

    以上三者(前端,后台,数据库)哪些要在这台机器上安装,安装时会不会有冲突,配置是什么样的,和机器的硬件配置有没有关系(如机器的核心数内存)?

    关于Salt/Puppet/Ansible,需不需要安装master/agent端,要如何配置,配置后如何使用。有什么优缺点?

    好吧其实我想说的是:

    在你用一个东西之前,请首先考虑一下你要做什么。
    samueldeng
        8
    samueldeng  
       2015-05-27 21:16:54 +08:00 via iPad   ❤️ 1
    学习成本而言,cp>shell>puppet(.etc)>docker,后期维护成本反之,就看楼主的时间需求了。
    hustlzp
        9
    hustlzp  
    OP
       2015-05-27 21:19:14 +08:00
    @johnsmith123 确实信息给的不够...多谢提醒

    * 一台负载均衡服务器,后面多台 Flask App
    * 服务器 Ubuntu Server 14.04.1 LTS 64bit,Python 版本 2.7+ 即可,但不排除未来会编译安装更新版本
    * 前端 Nginx,反向代理到后端,后端 Python 是 Flask app(网站),数据库 MySQL
    * 前端(Nginx)和后端(Flask)在同一台服务器上,MySQL 在另外的数据库专用服务器上(本帖不涉及 MySQL 服务器的部署)
    * 机器核心和配置都是可以按需快速调整的

    部署的过程涉及到:

    * Ubuntu 系统更新
    * Ubuntu 上的若干软件安装(Nginx、git、g++等)
    * 一些命令(git操作、pip安装等等)
    * 配置文件的拷贝

    应该就这些,问题RT,感谢回复。
    hustlzp
        10
    hustlzp  
    OP
       2015-05-27 21:21:02 +08:00
    @samueldeng 请问 cp 是指?直接把一个服务器 A 的所有东西 copy 到新开的服务器 B 上?
    crazyxin1988
        11
    crazyxin1988  
       2015-05-27 21:23:08 +08:00
    前端(Nginx)和后端(Flask)在同一台服务器上?
    就是一台服务器 多个flask app实例么?
    这样的话 fabric+supervisor 不就ok了?
    hustlzp
        12
    hustlzp  
    OP
       2015-05-27 21:27:45 +08:00
    @crazyxin1988 多台服务器,每台服务器都有 Nginx + Flask。

    比如说可能下周会遇到访问峰值,那我就多开几个运行 Flask app 的服务器放到负载均衡 server 后面。

    这样做虽然可能和在一台服务器上运行很多个 Flask app 的性能差不多,不过可用性要高些,一台服务器挂了还有别的。如果单台部署的话,这台挂了就完了。
    crazyxin1988
        13
    crazyxin1988  
       2015-05-27 21:34:33 +08:00   ❤️ 1
    @hustlzp
    python上还没玩过这么复杂的。期待你解决了,给大家分享一下。
    可用性高一些,那你的负载最好分到至少两个机房中,如果一个机房出现断电或者网络异常,其他机房的负载还能继续~
    clino
        14
    clino  
       2015-05-27 21:37:21 +08:00
    有数据库吗?我感觉瓶颈是不是容易出在数据库这里呢?
    hustlzp
        15
    hustlzp  
    OP
       2015-05-27 21:47:55 +08:00
    @crazyxin1988 有道理
    @clino 数据库是单独买的数据库 MySQL 服务器。
    johnsmith123
        16
    johnsmith123  
       2015-05-27 21:52:56 +08:00
    @hustlzp 对此我只能说,你也许需要一些运维的知识。
    1.安装好的系统是否自带Python2.7?
    2.关于nginx和后端,我很好奇你们的全局负载均衡是什么。每台服务器nginx应该是一台,但是每台服务器上的Python服务有多少个?

    考虑好之后,LZ需要好好学学linux下基础命令以及shell的使用,然后尝试自己手动配置一次环境。万事ok后。Salt/Puppet/Ansible三选一,花个把月好好学一下,然后做一下自动化。可以的话再搭上监控报警啥的,然后没事优化优化配置,解决一下nginx/python服务的日常问题,顺便看看域名做做cdn。然后,成为了一只运维=。=
    johnsmith123
        17
    johnsmith123  
       2015-05-27 21:58:22 +08:00   ❤️ 1
    @johnsmith123 我这里所谓的配环境是包括系统的安装初始化,到最后的代码自动化上线,这整个一套的环境,这两点也是需要做自动化的=。=你总不能每次拿着个U盘装系统,或者通过cp命令上线代码吧?
    clino
        18
    clino  
       2015-05-27 22:02:43 +08:00   ❤️ 1
    我的建议是
    -用 virtualenv 配置好 env 目录,然后将同样的部署目录同步到新的服务器上,这样比较方便,当然这要求操作系统和python版本一致
    -用uwsgi作为应用服务器,有几核跑几个进程
    hustlzp
        19
    hustlzp  
    OP
       2015-05-27 22:27:53 +08:00
    @johnsmith123 全局负载均衡就是一个分发器,这个现在的云平台都会提供直接买,比如阿里、UCloud、青云。

    感谢回答,运维确实不熟。
    huson
        20
    huson  
       2015-05-28 09:41:16 +08:00
    ansible足以满足你上面的所有部署要求= =
    honovationeric
        21
    honovationeric  
       2015-06-08 11:45:59 +08:00
    关键还是做具体部署的脚本,用你熟悉的python写就行。工具我觉得fabric就可以了,简单、上手快而且可控性强。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5183 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:36 · PVG 17:36 · LAX 01:36 · JFK 04:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.