我想将使用结构的应用程序部署到代理服务器。通常,我们先使用SSH代理服务器,然后再使用SSH服务器生产服务器,但是Fabric似乎不允许直接这样做。

设置示例为本地->服务器A(代理)->服务器B(应用服务器)

目的地是服务器B。

我尝试使用下面的fab文件进行测试。

import os.path
from fabric.api import env, run, sudo, cd, local, put, settings
from fabric.contrib.files import sed, exists
from datetime import datetime

def proxy():
    env.user = "root"
    env.hosts = ['proxy']
    env.key_filename = "/home/root/monitorserver.pem"

def production():
    """Defines production environment ."""
    env.is_debuggable = False
    env.user = "root"
    env.hosts = ['appserver']
    env.key_filename = "/home/root/appserver.pem"

def createfile():
    """Start Excecute test commands"""
    sudo("touch /tmp/test_%s" % datetime.now().strftime('%H:%M:%S'))


但是运行命令

fab proxy createfile production createfile


似乎只工作

fab proxy createfile
fab production createfile


有没有一种方法可以在本地运行结构并通过适当的代理部署到服务器B?

最佳答案

我认为可以通过创建2个fabfile来完成:1个在本地,而1个在代理服务器上。

from fabric.api import env, run, sudo, cd
from datetime import datetime

def proxy():
    env.user = "root"
    env.hosts = ['proxy']
    env.key_filename = "/home/root/monitorserver.pem"
    with cd('/home/root/'):
        createfile()
        run("fab production")

def production():
    """Defines production environment ."""
    env.is_debuggable = False
    env.user = "root"
    env.hosts = ['appserver']
    env.key_filename = "/home/root/appserver.pem"
    createfile()

def createfile():
    """Start Excecute test commands"""
    sudo("touch /tmp/test_%s" % datetime.now().strftime('%H:%M:%S'))


运行fab proxy

(尚未测试代码,但类似的方法应该可以使用。)

08-06 04:56
查看更多