我想使用fabric将应用程序部署到代理服务器。通常我们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?
答案 0 :(得分:1)
我认为这可以通过创建2个fabfiles来完成: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
。
(尚未对代码进行测试,但这样的事情应该有效。)