非打包内容的自动部署

非打包内容的自动部署

我将不得不部署一些定制的机器,其中的软件大多是手动安装的,这意味着:下载 tarball 并解压到单个目录中,将 python 源包安装到 virtualenvs 中,诸如此类(不,它不能改变)。

主要要求是从全新到部署的过程必须快速且自动化,因此理想情况下,一旦我有了新机器,就可以运行一个完成所有操作的脚本。

我觉得这些东西不容易使用标准 puppet 等工具进行部署。我正在寻找似乎更适合这种情况的 fabric。人们使用/推荐什么?

答案1

我正在使用 fabric 来自动化服务器配置。您可以轻松编写一组命令来设置 nginx、supervisor、virtualenv 等。我可以发布部分 fabfile:

@task
def setup_sys_installs():
    """
    Note
    ----
        You can always use 'sudo apt-get build-dep <python-package>' to
        install some prerequisites for packages like gevent or lxml.
    """

    print('=== SETUP LIBRARIES ====')
    sudo('apt-get -y update')
    sudo('apt-get -y install python-virtualenv python-pip python2.7 mercurial')
    # you need this to pip install any compilled library
    sudo('apt-get -y install python-dev build-essential')
    # you need this need this to pip install gevent
    sudo('apt-get -y install libevent-dev')
    # you need this need this to pip install psycopg2
    sudo ("apt-get -y install libpq-dev")
    # you need this need this to pip install lxml
    sudo('apt-get -y install libxml2-dev libxslt-dev')
    # you need this need this to pip install m2crypto
    sudo('apt-get -y install swig')


@task
def sync_virtualenv():
    with cd(env.PROJECT_DIR):
        cmd = "%s/bin/pip install -r requirements/production.txt" % (env.VENV,)
        sudo(cmd, user=env.VENV_USER)


@task
def setup_virtualenv():
    print('=== SETUP VIRTUALENV ====')
    with cd(env.HOME):
        sudo("virtualenv -p /usr/bin/python2.7 venv", user=env.VENV_USER)
    sync_virtualenv()

如果您有兴趣了解更多细节,请给我评论。

答案2

了解如何打包软件并创建自己的存储库。这并不难,您不需要发明其他东西来自动化部署,只需使用 puppet 从您自己的 yum 或 apt 存储库安装软件包即可。

相关内容