<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 阿里云运维部署工具AppDeploy详细教程</title>
	<atom:link href="https://www.fuwuqiok.com/tag/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>阿里云运维部署工具AppDeploy详细教程</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 12:53:43 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[阿里云代维]]></category>
		<category><![CDATA[阿里云运维部署工具AppDeploy详细教程]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2825</guid>
		<description><![CDATA[<p>AppDeploy是一个通过SSH实现的命令行工具，可完成应用部署和远程运维管理。当前工具实现为两个版本：普通 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/">阿里云运维部署工具AppDeploy详细教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>AppDeploy<span style="font-family: 宋体;">是一个通过</span>SSH<span style="font-family: 宋体;">实现的命令行工具，可完成应用部署和远程运维管理。当前工具实现为两个版本：普通版（伪代码描述语言）和</span>Python<span style="font-family: 宋体;">版。</span>Python<span style="font-family: 宋体;">版使用</span>Python<span style="font-family: 宋体;">语法规则，可实现您的各种应用需求；普通版语法简单、容易上手，是对</span>Python<span style="font-family: 宋体;">版本的精简。两个版本当前都是免费使用。下载地址如下：</span><br />
<b><span style="font-family: 宋体;">普通版：</span></b><br />
<a id="url_3" href="http://market.aliyun.com/products/53690006/cmgj000331.html?spm=5176.900004.4.2.iTWBiC" target="_blank">http://market.aliyun.com/products/53690006/cmgj000331.html?spm=5176.900004.4.2.iTWBiC</a><br />
<b>Python</b><b><span style="font-family: 宋体;">版：</span></b><br />
<a id="url_4" href="http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY" target="_blank">http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY</a><br />
<b> </b><br />
<u><span style="font-size: x-large;"><b><span style="font-family: 宋体;">1 介绍一下</span></b><b>AppDeploy</b><b><span style="font-family: 宋体;">的主要功能</span></b></span></u><br />
<b>1）.</b><b><span style="font-family: 宋体;">远程应用部署：</span></b><br />
<span style="font-family: 宋体;">    可以将本地应用安装部署到远程<span id="rlt_6">云服务器</span>，软件包可以在本地编译打包好，也可以选择在云服务器编译安装；</span></p>
<p><b>2）.</b><b><span style="font-family: 宋体;">远程运维管理：</span></b><br />
<span style="font-family: 宋体;">    您可以使用</span>AppDeploy<span style="font-family: 宋体;">远程执行</span>shell<span style="font-family: 宋体;">脚本，让操作命令感觉在本地执行一般，大大的提高开发者的工作效率；</span><b></b></p>
<p><b>3）.</b><b><span style="font-family: 宋体;">一键环境安装：</span></b><br />
<span style="font-family: 宋体;">    一键安装</span>Web<span style="font-family: 宋体;">环境，当前支持</span>Java<span style="font-family: 宋体;">、</span>Nginx<span style="font-family: 宋体;">、</span>Apache<span style="font-family: 宋体;">、</span>Tomcat<span style="font-family: 宋体;">、</span>PHP<span style="font-family: 宋体;">、</span>Mysql<span style="font-family: 宋体;">等多款环境，可以根据具体业务选择适合工具的适合版本进行安装；</span></p>
<p><b>4）.</b><b><span style="font-family: 宋体;">一键应用部署：</span></b><br />
<span style="font-family: 宋体;">    可以一键编译、打包、部署常见的应用，支持</span>Maven<span style="font-family: 宋体;">、</span>Ant<span style="font-family: 宋体;">等打包部署的安装方案；</span></p>
<p><b>5）.</b><b><span style="font-family: 宋体;">一键式更新源：</span></b><br />
<span style="font-family: 宋体;">    执行</span>AppDeploy<span style="font-family: 宋体;"><span id="rlt_8">自</span>定义命令（</span>update_source<span style="font-family: 宋体;">）更新系统源，支持</span>Ubuntu<span style="font-family: 宋体;">、</span>Centos<span style="font-family: 宋体;">、</span>Redhat<span style="font-family: 宋体;">、</span>Opensuse<span style="font-family: 宋体;">、</span>Debian<span style="font-family: 宋体;">等系统的主流版本；</span></p>
<p><b>6）.</b><b><span style="font-family: 宋体;">文件上传下载：</span></b><br />
<span style="font-family: 宋体;">    您可以使用</span>AppDeploy<span style="font-family: 宋体;">在本地主机和远程服务器间实现上传、下载文件（夹）的功能；不仅实现了</span>ftp<span style="font-family: 宋体;">的功能，还可以远程执行管理命令；</span></p>
<p><b>7）.</b><b><span style="font-family: 宋体;">并发控制机器：</span></b><br />
<span style="font-family: 宋体;">    基于软件的部署场景，提供同时在多台服务器部署的功能，且可以选择顺序执行或者并发执行的运行模式；上面叙述的功能都可以使用并发模式在多服务器间同时运行。</span></p>
<p><b>8）.</b><b><span style="font-family: 宋体;">账号<span id="rlt_12">密码</span>管理：</span></b><br />
<span style="font-family: 宋体;">    提供灵活、易用的账号管理功能，用户可以设置免密码输入运行，且可为不同主机设置不同密码；</span></p>
<p><span style="font-size: x-large;"><u><b>2.AppDeploy</b><b><span style="font-family: 宋体;">的安装</span></b><b>&amp; </b></u><b><span style="font-family: 宋体;"><u><span id="rlt_9">配置</span></u></span></b></span><br />
AppDeploy<span style="font-family: 宋体;">支持在</span>Windows<span style="font-family: 宋体;">、</span>Linux<span style="font-family: 宋体;">、</span>Mac<span style="font-family: 宋体;">系统下使用，远端服务器当前只支持</span>Linux<span style="font-family: 宋体;">系统。根据不同系统分别介绍安装步骤（以</span>Python<span style="font-family: 宋体;">版为例，普通版类似）：</span></p>
<p><span style="font-size: medium;"><b>Linux</b><b><span style="font-family: 宋体;">系统平台安装：</span></b></span><br />
<span style="font-family: 宋体;">请预先安装好</span>python2.7<span style="font-family: 宋体;">；（一般安装在</span>/usr/local/lib/python2.7<span style="font-family: 宋体;">）</span><br />
1）.<span style="font-family: 宋体;">通过</span><a id="url_1" href="http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY" target="_blank"><span style="font-family: 宋体;">阿里云市场</span></a><span style="font-family: 宋体;">下载</span>AppDeploy<span style="font-family: 宋体;">源码安装包</span> &#8211; AppDeploy-Python-1.0.0.tar.gz<span style="font-family: 宋体;">；</span></p>
<p>2）.<span style="font-family: 宋体;">解压：</span>$ tar –zvxf AppDeploy-Python-1.0.0.tar.gz<span style="font-family: 宋体;">；得到</span>AppDeploy-Python-1.0.0-Linux.tar.gz;<br />
<span style="font-family: 宋体;">    解压：</span>$ tar –zvxf AppDeploy-Python-1.0.0-Linux.tar.gz<span style="font-family: 宋体;">；</span></p>
<p>3）.<span style="font-family: 宋体;">执行：</span>$ cd AppDeploy-Python &amp;&amp; sudo python setup.py install <span style="font-family: 宋体;">安装</span>appdeploy<span style="font-family: 宋体;">；</span></p>
<p>4）.<span style="font-family: 宋体;">执行：</span>$ adep<span style="font-family: 宋体;">命令，若果能找到命令说明安装完成（下图表示安装成功）；</span><br />
<span style="font-family: 宋体;">    <span id="att_81615" class="f12"><span id="td_att81615"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_47721b2b754e3f4.png6"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_47721b2b754e3f4.png6" alt="219_1171330362041663_47721b2b754e3f4" width="831" height="158" /></a></span></span></span><br />
<span style="font-size: medium;"><b>Windows</b><b><span style="font-family: 宋体;">系统安装：</span></b></span><br />
<span style="font-family: 宋体;">预先安装好</span>python2.7<span style="font-family: 宋体;">；（一般安装在</span>C:/Python27<span style="font-family: 宋体;">）；</span><br />
1）.<span style="font-family: 宋体;">通过</span><a id="url_2" href="http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY" target="_blank"><span style="font-family: 宋体;">阿里云市场</span></a><span style="font-family: 宋体;">下载</span>AppDeploy windows<span style="font-family: 宋体;">安装包</span> &#8211; AppDeploy-Python-1.0.1.zip<span style="font-family: 宋体;">；</span></p>
<p>2）.<span style="font-family: 宋体;">解压：</span>$ tar –zvxf AppDeploy-Python-1.0.1.tar.gz -&gt;AppDeploy-Python-1.0.1-Windows.tar.gz;</p>
<p>3）.<span style="font-family: 宋体;">解压：</span>$ tar –zvxf AppDeploy-Python-1.0.1-Windows.tar.gz<span style="font-family: 宋体;">；解压后可以发现一个安装文件</span>setup.exe<span style="font-family: 宋体;">安装包，即为</span>AppDeploy<span style="font-family: 宋体;">的安装文件；</span></p>
<p>4）.<span style="font-family: 宋体;">双击</span>setup.exe<span style="font-family: 宋体;">，双击</span>setup.exe<span style="font-family: 宋体;">（确定预先安装</span>python2.7<span style="font-family: 宋体;">），出现如下</span>AppDeploy<span style="font-family: 宋体;">的安装视图，安装目录应该选择</span>Python2.7<span style="font-family: 宋体;">的安装目录下的</span>Lib\site-packets<span style="font-family: 宋体;">子目录；</span><br />
<span style="font-family: 宋体;">    <span id="att_81616" class="f12"><span id="td_att81616"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_2a42f696783a100.png38"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_2a42f696783a100.png38" alt="219_1171330362041663_2a42f696783a100" width="499" height="388" /></a></span></span></span><br />
5）.<span style="font-family: 宋体;">根据向导直到安装完成；</span><br />
6）.<span style="font-family: 宋体;">设置环境变量：</span><br />
<b><span style="font-family: 宋体;">  环境变量一般为自动设置，不过这里您可以确认一下，以保证正常运行；</span></b><br />
<span style="font-family: 宋体;">  右键“计算机”</span> – <span style="font-family: 宋体;">选择属性</span>– <span style="font-family: 宋体;">选择“高级系统设置”</span>– <span style="font-family: 宋体;">选择高级</span>– <span style="font-family: 宋体;">选择</span><span style="font-family: 宋体;">“环境变量”：添加环境变量，名字（</span>APPDEPLOY<span style="font-family: 宋体;">）值（</span>C:\Python27\Lib\site-packages<span style="font-family: 宋体;">）；在</span>path<span style="font-family: 宋体;">系统变量中添加“</span>C:\Python27;%APPDEPLOY%; C:\Python27;<span style="font-family: 宋体;">”，</span><span style="font-family: 宋体;">分别为</span>Python2.7<span style="font-family: 宋体;">的安装目录和</span>AppDeploy<span style="font-family: 宋体;">的安装目录；</span></p>
<p>7）.<span style="font-family: 宋体;">验证：打开</span>cmd<span style="font-family: 宋体;">命令行工具，</span><br />
<span style="font-family: 宋体;">  输入：</span>python<span style="font-family: 宋体;">，如果能运行，则说明</span>python<span style="font-family: 宋体;">已经可用；</span><br />
<span style="font-family: 宋体;">  输入：</span>adep<span style="font-family: 宋体;">，如果显示下面日志，则说明安装成功；</span><br />
<span id="att_81617" class="f12"><span id="td_att81617"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_13417ebd963a822.png40"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_13417ebd963a822.png40" alt="219_1171330362041663_13417ebd963a822" width="864" height="131" /></a></span></span></p>
<div align="left"></div>
<div align="left"><span style="font-size: medium;"><b>Mac</b><b><span style="font-family: 宋体;">系统安装：（请预先安装好</span>python2.7</b><b><span style="font-family: 宋体;">）</span></b></span></div>
<div align="left">1）.<span style="font-family: 宋体;">下载</span>AppDeploy-python-1.0.1.tar.gz<span style="font-family: 宋体;">，解压可以得到</span>AppDeploy- python-1.0.1-Mac.zip <span style="font-family: 宋体;">的压缩包，解压</span>AppDeploy- python-1.0.1-Mac.zip<span style="font-family: 宋体;">，得到</span>pycrypto-2.6.1.tar.gz&amp; AppDeploy- python-1.0.1.tar.gz<span style="font-family: 宋体;">；</span></div>
<div align="left"></div>
<div align="left">2）.<span style="font-family: 宋体;">若您系统中尚未安装</span>pycrypto-2.6.1.tar.gz<span style="font-family: 宋体;">，解压后进入</span>pycrypto-2.6.1<span style="font-family: 宋体;">，执行</span>$ sudopython setup.py install<span style="font-family: 宋体;">；</span><span style="font-family: 宋体;">若已经安装，直接进入步骤</span>3<span style="font-family: 宋体;">；</span></div>
<p>&nbsp;</p>
<div align="left">3）.<span style="font-family: 宋体;">解压</span>AppDeploy-python-1.0.1.tar.gz<span style="font-family: 宋体;">，进入</span>appdeploy-python-1.0.1<span style="font-family: 宋体;">后执行</span>$ sudo pythonsetup.py install<span style="font-family: 宋体;">；</span></div>
<p>4）.<span style="font-family: 宋体;">进入命令行执行</span>$ adep<span style="font-family: 宋体;">，出现如下视图说明安装成功：</span></p>
<div align="left"><span style="font-family: 宋体;">  <span id="att_81618" class="f12"><span id="td_att81618"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_a01accf85543b40.png27"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_a01accf85543b40.png27" alt="219_1171330362041663_a01accf85543b40" width="562" height="135" /></a></span></span></span></div>
<p><b>3.</b><b><span style="font-family: 宋体;">基本使用方法</span></b><br />
AppDeploy<span style="font-family: 宋体;">的使用格式是在命令行执行</span>adep + <span style="font-family: 宋体;">参数</span> <span style="font-family: 宋体;">的命令格式运行，其执行的任务依据是根据其当前工作目录下的</span>appdeploy.py<span style="font-family: 宋体;">（默认）这个</span>python<span style="font-family: 宋体;">文件作为执行描述文件，若用户有自定义的描述文件，可用</span>”-f”<span style="font-family: 宋体;">参数指定。使用方式细分有两种：</span></p>
<p><span style="font-size: medium;"><b>1)</b><b><span style="font-family: 宋体;">通过命令行，直接执行命令</span></b></span><br />
<span style="font-family: 宋体;">格式：</span>$ <i>adep[options] &#8212; [shell command]</i></p>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>   <i>Option</i><i><span style="font-family: 宋体;">：为命令选项定义执行参数；</span></i><br />
<i><span style="font-family: 宋体;">  “</span>&#8212;</i><i><span style="font-family: 宋体;">”：</span></i><i><span style="font-family: 宋体;">双横线，为分割符将前面的参数和后面的</span>shell</i><i><span style="font-family: 宋体;">命令分开；</span></i><br />
<i>    [shell command]</i><i><span style="font-family: 宋体;">：</span>shell</i><i><span style="font-family: 宋体;">命令，会被在远端服务器执行；</span></i></td>
</tr>
</tbody>
</table>
<p><span style="font-family: 宋体;">常用的</span>option<span style="font-family: 宋体;">选项：</span><br />
<span id="att_81619" class="f12"><span id="td_att81619"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_19bfd3c7dde3712.png4"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_19bfd3c7dde3712.png4" alt="219_1171330362041663_19bfd3c7dde3712" width="483" height="103" /></a></span></span><br />
<span style="font-family: 宋体;">例如：查看服务器</span>nginx<span style="font-family: 宋体;">运行情况</span><br />
<i><u>$ adep -H &#8216;101.200.184.144&#8217; -u root -p xxxx &#8212; ps-aux | grep nginx</u></i><br />
<i>    <span id="att_81620" class="f12"><span id="td_att81620"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_31dc60efe538476.png9"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_31dc60efe538476.png9" alt="219_1171330362041663_31dc60efe538476" width="990" height="67" /></a></span></span></i><br />
<i>PS</i><i><span style="font-family: 宋体;">：上面方式使用方便，可以灵活、快速的执行您想执行的命令，但实现的功能相对简单，大部分情况下，您可以使用下面的方式实现您的具体任务；</span></i></p>
<p><b>2)</b><b><span style="font-family: 宋体;">通过编辑</span>appdeploy.py</b><b><span style="font-family: 宋体;">文件，以任务方式执行</span></b><br />
<span style="font-family: 宋体;">在</span>appdeploy.py<span style="font-family: 宋体;">文件中定义函数（任务的实现细节），并在命令行的当前目录下执行</span><i>$ adeptask1 task2</i><span style="font-family: 宋体;">（文件中定义的函数名）的方式依次执行定义的任务；</span><br />
<span style="font-family: Calibri,sans-serif;">appdeploy.py</span><span style="font-family: 宋体;">的编写规则:</span><br />
<i>    <span id="att_81621" class="f12"><span id="td_att81621"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_7726e52d4c3b0d9.png11"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_7726e52d4c3b0d9.png11" alt="219_1171330362041663_7726e52d4c3b0d9" width="535" height="166" /></a></span></span></i></p>
<div align="left"><span style="font-family: 宋体;">下面分别介绍</span>AppDeploy<span style="font-family: 宋体;">自定义的环境变量、操作命令、修饰符、并发执行等细节。</span></div>
<div align="left"><span style="font-family: 宋体;"><br />
</span></div>
<p><span style="font-size: x-large;"><b>4.</b><b><span style="font-family: 宋体;">获取设置</span></b></span><b><span style="font-size: x-large;">Access Key</span></b><br />
<span style="font-family: 宋体;">因为</span>AppDeploy<span style="font-family: 宋体;">工具基于阿里云产品设计实现，其某些功能会基于阿里云</span>OpenApi<span style="font-family: 宋体;">实现，所以需要设置</span>Access Key<span style="font-family: 宋体;">的值以获取调用</span>OpenApi<span style="font-family: 宋体;">的资格。</span><br />
<span style="font-family: 宋体;"><br />
</span><br />
<span style="font-family: 宋体;">获取Access Key的方法请参考：</span><a id="url_5" href="http://bbs.aliyun.com/read/253666.html?spm=5176.7189909.0.0.l1LU3c&amp;fpage=2" target="_blank">http://bbs.aliyun.com/read/253666.html?spm=5176.7189909.0.0.l1LU3c&amp;fpage=2</a><br />
<span style="font-family: 宋体;">得到的</span>Access KeyID<span style="font-family: 宋体;">和</span>Access Key Secret<span style="font-family: 宋体;">通过以下方式配置到</span>AppDeploy<span style="font-family: 宋体;">中：</span></p>
<div align="left"><span style="font-family: 宋体;">在</span>Appdeploy.py<span style="font-family: 宋体;">描述文件中设置</span>env.ak_id(Access Key ID)<span style="font-family: 宋体;">和</span>env.ak_sec(AccessKey Secret)<span style="font-family: 宋体;">变量；如下图所示：</span></div>
<p><i>     <span id="att_81622" class="f12"><span id="td_att81622"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_9d55655a8381c32.png8"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_9d55655a8381c32.png8" alt="219_1171330362041663_9d55655a8381c32" width="713" height="154" /></a></span></span></i><br />
<span style="font-size: x-large;"><b>5.</b><b><span style="font-family: 宋体;">环境变量</span></b></span></p>
<div align="left">AppDeploy<span style="font-family: 宋体;">工具通过自定义的环境变量来提高程序的可读性、以及描述文件的灵活性等；以下是常用的环境变量及其说明：</span></div>
<div align="left"><span style="font-family: 宋体;">  <span id="att_81623" class="f12"><span id="td_att81623"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_b12c240a84647ca.png15"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_b12c240a84647ca.png15" alt="219_1171330362041663_b12c240a84647ca" width="583" height="230" /></a></span></span><br />
</span></div>
<div align="left"><b>Hosts</b><b><span style="font-family: 宋体;">变量详细说明：</span></b></div>
<div align="left"><span style="font-family: 宋体;">用来定义需要连接的服务器地址集，在执行</span>appdeploy.py<span style="font-family: 宋体;">中任务时会在</span>hosts<span style="font-family: 宋体;">定义的每个服务器上运行一遍；定义格式：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-family: arial;">env.hosts = [&#8216;host1&#8242;, &#8216;host2&#8242;]</span><span style="font-family: 宋体;">: 表示两个远端服务器，分别是</span><span style="font-family: arial;">host1</span><span style="font-family: 宋体;">和</span><span style="font-family: arial;">host2.</span></p>
<div align="left">env.hosts = [&#8216;host1&#8242;, &#8216;user2@host2&#8242;, &#8216;host3&#8242;]<span style="font-family: 宋体;">: 表示一共三个远端服务器</span>host1<span style="font-family: 宋体;">、</span>host2<span style="font-family: 宋体;">、</span>host3<span style="font-family: 宋体;">，其中</span>host2<span style="font-family: 宋体;">使用</span>user2<span style="font-family: 宋体;">用户名登录，</span>host1<span style="font-family: 宋体;">和</span>host3<span style="font-family: 宋体;">的用户名使用</span>env.user<span style="font-family: 宋体;">定义的值；</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<div align="left"><span style="font-family: 宋体;"><br />
</span></div>
<div align="left"><span style="font-family: 宋体;">例如：在</span>appdeploy.py<span style="font-family: 宋体;">中定义：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>env.hosts = [&#8216;host1&#8242;, &#8216;host2&#8242;]</i></p>
<div align="left"><i>def task1():</i></div>
<div align="left"><i>    run(ls)</i></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">则执行：</span>$ adeptask1<span style="font-family: 宋体;">时，会在</span>host1<span style="font-family: 宋体;">、</span>host2<span style="font-family: 宋体;">上分别执行</span>ls<span style="font-family: 宋体;">命令；</span></div>
<p>&nbsp;</p>
<div align="left"></div>
<div align="left"><b>User</b><b><span style="font-family: 宋体;">详细说明：</span></b></div>
<div align="left"><span style="font-family: 宋体;">定义远程服务器的登录名，如果没有定义，则默认为本地机器的当前用户名；</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<div align="left">env.user = &#8216;user1&#8242;</div>
<div align="left"></div>
<div align="left"><b>Password &amp; Passwords</b><b><span style="font-family: 宋体;">详细说明：</span></b></div>
<div align="left"><span style="font-family: 宋体;">首先推荐使用</span>SSH<span style="font-family: 宋体;">提供的密钥管理机制来实现免密码输入模式，可查阅资料；这里着重介绍</span>AppDeploy<span style="font-family: 宋体;">提供的密码管理方案。</span></div>
<div align="left"></div>
<div align="left">AppDeploy<span style="font-family: 宋体;">提供了两层管理密码的机制：</span></div>
<div align="left"><span style="font-family: 宋体;">如果您的</span>servers<span style="font-family: 宋体;">的密码都相同，可以通过在</span>env.password<span style="font-family: 宋体;">中设置统一密码；</span></div>
<div align="left"><span style="font-family: 宋体;">如果每个</span>server<span style="font-family: 宋体;">的密码不同，可以在</span>env.passwords<span style="font-family: 宋体;">中设置</span>host<span style="font-family: 宋体;">与</span>password<span style="font-family: 宋体;">对应表（</span>Json<span style="font-family: 宋体;">格式），对每个</span>server<span style="font-family: 宋体;">设置单独的密码；</span>host<span style="font-family: 宋体;">的格式：</span>user@host:port<span style="font-family: 宋体;">；</span></div>
<div align="left"><span style="font-family: 宋体;">例如:</span></div>
<p>&nbsp;</p>
<div align="left">env.password=’xxxxx’<span style="font-family: 宋体;">；</span> <span style="font-family: 宋体;">统一密码；</span></div>
<div align="left">env.passwords={&#8216;root@101.200.184.144:22&#8242;:’xxx’, &#8216;root@123.57.228.240:22&#8242;:’yyy’}</div>
<p>&nbsp;</p>
<div align="left"></div>
<div align="left"><b>parallel</b><b><span style="font-family: 宋体;">详细说明：</span></b></div>
<div align="left">Parallel<span style="font-family: 宋体;">设置时表明指定的任务在不同的服务器之间并发执行；格式为在任务前面：</span>@parallel(pool_size=5)<span style="font-family: 宋体;">，其中</span>pool_size<span style="font-family: 宋体;">指最多同时并发的个数，若不指定</span>pool_size<span style="font-family: 宋体;">，则默认不加限制；</span></div>
<div align="left"><span style="font-family: 宋体;">定义了</span>parallel<span style="font-family: 宋体;">只是一个任务在多个服务器之间并行，但不同的任务之间还是顺序执行；</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-family: arial;">@parallel</span></p>
<div align="left">def task1():</div>
<div align="left">    pass</div>
<div align="left">def task2():</div>
<div align="left">    pass</div>
<div align="left">$ adep -H host1,host2,host3 task1task2</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">结果：</span></div>
<div align="left">Task1 on host1, host2, andhost3</div>
<div align="left">Task2 on host1</div>
<div align="left">Task2 on host2</div>
<div align="left">Task2 on host3</div>
<div align="left"></div>
<div align="left"><b>Roledefs &amp; Roles</b><b><span style="font-family: 宋体;">详细说明：</span></b></div>
<div align="left">AppDeploy<span style="font-family: 宋体;">可以为服务器地址定义组，用户可以基于不同组完成不同集群的部署，这样用户可以根据自己的业务定义不同的组群。格式为</span>JSON<span style="font-family: 宋体;">实现格式。</span></div>
<div align="left">Roles<span style="font-family: 宋体;">与</span>Hosts<span style="font-family: 宋体;">一样，都可以指定服务器地址集合，只是</span>Roles<span style="font-family: 宋体;">引用的服务器地址是经过</span>Roledefs<span style="font-family: 宋体;">定义的组名。</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-family: arial;">env.roledefs = {</span></p>
<div align="left">   &#8216;apphosts': [‘host1&#8242;, &#8216;host2&#8242;, &#8216;host3&#8242;],</div>
<div align="left">   &#8216;webhosts': [&#8216;host3&#8242;, &#8216;host4&#8242;]</div>
<div align="left">}</div>
<div align="left">@roles(&#8216;apphosts&#8217;)</div>
<div align="left">@hosts(&#8216;host3&#8242;, &#8216;host5&#8242;)</div>
<div align="left">def task1():</div>
<div align="left">    run(&#8216;ls/var/www&#8217;)</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">执行：</span>$ adeptask1</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">会在</span>host1<span style="font-family: 宋体;">、</span>host2<span style="font-family: 宋体;">、</span>host3<span style="font-family: 宋体;">、</span>host5<span style="font-family: 宋体;">依次执行，</span>host3<span style="font-family: 宋体;">出现两次，被合并；</span></div>
<div align="left"><span style="font-family: 宋体;"><br />
</span></div>
<p><span style="font-size: x-large;"><b>6.</b><b><span style="font-family: 宋体;">执行命令</span></b></span><br />
<span style="font-family: 宋体;">环境变量定义任务执行的相关环境参数：如用户名、密码等，而任务的具体执行是很多具体指令组成的，下面是</span>AppDeploy<span style="font-family: 宋体;">自定义的执行命令集；</span><br />
<span style="font-family: 宋体;">  <span id="att_81624" class="f12"><span id="td_att81624"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_5c2ec18556495e3.png15"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_5c2ec18556495e3.png15" alt="219_1171330362041663_5c2ec18556495e3" width="579" height="243" /></a></span></span><br />
</span></p>
<div align="left"><b>Get</b><b><span style="font-family: 宋体;">命令详细说明：</span></b></div>
<div align="left">Get<span style="font-family: 宋体;">命令的功能是下载远端服务器上的文件或文件夹，根据不同常见可以如下格式：</span></div>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td colspan="1" rowspan="1" width="284">
<div align="left">get(&#8216;/path/to/remote_file.txt&#8217;, &#8216;local_dir&#8217;)</div>
</td>
<td colspan="1" rowspan="1" width="284">
<div align="left"><span style="font-family: 宋体;">新建</span>local_dir<span style="font-family: 宋体;">并保存文件；</span></div>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1" width="284">
<div align="left">get(&#8216;/var/log/apache2/access.log&#8217;, &#8216;%(path)s&#8217;)</div>
</td>
<td colspan="1" rowspan="1" width="284">
<div align="left"><span style="font-family: 宋体;">下载</span>access.log<span style="font-family: 宋体;">的文件，保存在相同目录；</span></div>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1" width="284">
<div align="left">get(&#8216;/var/log&#8217;, &#8216;%(path)s&#8217;)</div>
</td>
<td colspan="1" rowspan="1" width="284">
<div align="left"><span style="font-family: 宋体;">递归下载</span>/var/log<span style="font-family: 宋体;">下面所有文件；</span></div>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1" width="284">
<div align="left">get(&#8216;/var/log&#8217;, ‘%(host)s/%(path)s’)</div>
</td>
<td colspan="1" rowspan="1" width="284">
<div align="left"><span style="font-family: 宋体;">多个</span>host<span style="font-family: 宋体;">时，保存在不同目录；</span></div>
</td>
</tr>
</tbody>
</table>
<div align="left"></div>
<div align="left"><b>Put</b><b><span style="font-family: 宋体;">命令详细说明：</span></b></div>
<div align="left">Put<span style="font-family: 宋体;">命令功能是将本地的文件、文件夹上传到远端服务器（一台或多台）；</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>put(&#8216;/path/test.txt&#8217;, &#8216;/root/&#8217;) </i><i><span style="font-family: 宋体;">将本地文件</span>test.txt</i><i><span style="font-family: 宋体;">上传到指定的服务器</span>/root</i><i><span style="font-family: 宋体;">下；</span></i></p>
<div align="left"><i>put(&#8216;/path/test&#8217;, &#8216;/root/&#8217;) </i><i><span style="font-family: 宋体;">将本地文件夹下面所有文件上传到指定服务器</span>/root</i><i><span style="font-family: 宋体;">下；</span></i></div>
<div align="left"><i>put(&#8216;/path/test.txt&#8217;, &#8216;/root/&#8217;) </i><i><span style="font-family: 宋体;">将本地文件</span>test.txt</i><i><span style="font-family: 宋体;">上传到指定的服务器</span>/root</i><i><span style="font-family: 宋体;">下，并设置权限；</span></i></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"></div>
<div align="left"><b>Prompt</b><b><span style="font-family: 宋体;">命令详细说明：</span></b></div>
<div align="left">Prompt<span style="font-family: 宋体;">命令为用户提供一种交互式的选择功能，可以在程序运行时跳出选项供选择：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>env = prompt(&#8216;Please specify target environment: &#8216;)</i><i><span style="font-family: 宋体;">可以在运行时输入内容，并保存在</span>env</i><i><span style="font-family: 宋体;">中；</span></i></p>
<div align="left"><i>prompt(&#8216;Specify dish: &#8216;, &#8216;dish&#8217;, default=&#8217;spam &amp; eggs&#8217;)</i><i><span style="font-family: 宋体;">设置默认输入内容，不输入是用默认值；</span></i></div>
<div align="left"><i>prompt(&#8216;Please specify level: &#8216;, key=&#8217;nice&#8217;, validate=int)</i><i><span style="font-family: 宋体;">设定输入的内容只能是整数；</span></i></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"></div>
<p><span style="font-size: x-large;"><b>7.</b><b><span style="font-family: 宋体;">修饰符</span></b></span></p>
<div align="left">AppDeploy<span style="font-family: 宋体;">通过定义修饰符来灵活的执行</span>appdeploy.py<span style="font-family: 宋体;">中的任务，常用的修饰符有：</span>hosts<span style="font-family: 宋体;">、</span>parallel<span style="font-family: 宋体;">、</span>roles<span style="font-family: 宋体;">、</span>serial<span style="font-family: 宋体;">、</span>task<span style="font-family: 宋体;">等，分别用例子描述他们的使用方法；</span></div>
<div align="left"></div>
<div align="left"><b>Hosts</b><b><span style="font-family: 宋体;">修饰符：</span></b></div>
<div align="left">hosts<span style="font-family: 宋体;">即为环境变量的名字，也可以用作修饰符来定义任务目标服务器。</span></div>
<div align="left"></div>
<p>&nbsp;</p>
<div align="left">@hosts(&#8216;user1@host1&#8242;, &#8216;host2&#8242;,&#8217;user3@host3&#8242;)</div>
<div align="left">def task1():</div>
<div align="left">    pass</div>
<div align="left"><span style="font-family: 宋体;">上例表明</span>task1<span style="font-family: 宋体;">会在</span>host1<span style="font-family: 宋体;">、</span>host2<span style="font-family: 宋体;">、</span>host3<span style="font-family: 宋体;">三个服务器上执行，其中在</span>host1<span style="font-family: 宋体;">、</span>host3<span style="font-family: 宋体;">上分别用</span>user1<span style="font-family: 宋体;">和</span>user3<span style="font-family: 宋体;">登录，</span>host2<span style="font-family: 宋体;">上用</span>env.user<span style="font-family: 宋体;">定义的用户名登录。</span></div>
<div align="left"></div>
<div align="left"><b>Parallel</b><b><span style="font-family: 宋体;">修饰符</span></b></div>
<div align="left">@parallel<span style="font-family: 宋体;">修饰符表明修饰的任务会在多个服务器之间并发执行；</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-family: arial;">env.hosts = [‘host1’, ‘host2’]</span></p>
<div align="left">@parallel</div>
<div align="left">def task1():</div>
<div align="left">    pass</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">执行</span>$ adeptask1<span style="font-family: 宋体;">时，</span>task1<span style="font-family: 宋体;">会在</span>host1<span style="font-family: 宋体;">、</span>host2<span style="font-family: 宋体;">上同时执行；</span></div>
<div align="left"></div>
<div align="left"><b>Task</b><b><span style="font-family: 宋体;">修饰符：</span></b></div>
<div align="left">@task<span style="font-family: 宋体;">含义是：如果一个</span>appdeploy.py<span style="font-family: 宋体;">中使用了</span>@task<span style="font-family: 宋体;">，则所有函数都不再默认为任务（不对</span>adep<span style="font-family: 宋体;">命令可用），除非其前面标示了</span>@task<span style="font-family: 宋体;">标示。如果</span>appdeploy.py<span style="font-family: 宋体;">中没有任务前面使     用</span>@task<span style="font-family: 宋体;">标示，则所有函数都会默认为任务，可以被用户调用；</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<div align="left">
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><span style="font-family: arial;">@task</span></p>
<div align="left">def task1():</div>
<div align="left">   run(&#8220;ls&#8221;)</div>
<div align="left">def task2():</div>
<div align="left">    run(&#8220;pwd&#8221;)</div>
<div align="left">$ adep –list</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">结果是：</span>task2<span style="font-family: 宋体;">被看作</span>appdeploy.py<span style="font-family: 宋体;">的内部函数，不被暴漏给用户使用。</span></div>
<div align="left">Available commands:</div>
<div align="left">    task1</div>
<div align="left"></div>
<div align="left"><b>serial</b><b><span style="font-family: 宋体;">修饰符：</span></b></div>
<p>&nbsp;</p>
<div align="left">@serial<span style="font-family: 宋体;">的含义和</span>@parallel<span style="font-family: 宋体;">相反，作用是：如果全局设置了并发执行，但某个任务前面使用了</span>@serial<span style="font-family: 宋体;">参数，则这个任务依然用顺序执行模式。</span></div>
<div align="left"><span style="font-family: 宋体;"><br />
</span></div>
<p><span style="font-family: 宋体;">以上内容从</span>AK<span style="font-family: 宋体;">设置、环境变量、自定义命令、修饰符等方面描述了</span>AppDeploy<span style="font-family: 宋体;">的使用方法，下面以一个具体例子将上面内容展现出来。</span></p>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
# -*- coding: utf-8 -*-<br />
from src.api import *</p>
<p>env.ak_id=&#8221;xxx&#8221;<br />
env.ak_sec=&#8221;xxx&#8221;<br />
env.user = &#8216;root&#8217;<br />
env.password=&#8217;xxx&#8217;<br />
env.hosts = [&#8216;101.200.184.144&#8242;,&#8217;root@123.57.53.193:22&#8242;]
env.roledefs = {<br />
&#8216;apphosts': [&#8216;101.200.184.144&#8242;],<br />
&#8216;webhosts': [&#8216;root@123.57.53.193:22&#8242;]
}</p>
<p>@task<br />
def file_copy():<br />
put(&#8216;./test&#8217;, &#8216;/root/&#8217;)<br />
get(&#8216;/root/test&#8217;, &#8216;./test&#8217;)</p>
<p>@task<br />
@roles(&#8216;webhosts&#8217;)<br />
def remote_exec(cmd):<br />
local(&#8216;echo &#8220;run your cmd on remote hosts&#8221;&#8216;)<br />
run(cmd)</p>
<p>def useless():<br />
run(&#8216;pwd&#8217;)</td>
<td>
<p># Access Key ID<br />
# Access Key Secret<br />
# <span style="font-family: 宋体;">统一用户名</span><br />
# <span style="font-family: 宋体;">统一密码</span><br />
# <span style="font-family: 宋体;">定义</span>hosts<span style="font-family: 宋体;">变量</span><br />
# <span style="font-family: 宋体;">定义不同用户组</span></p>
<p># <span style="font-family: 宋体;">表明这个函数可以被执行</span></p>
<p># <span style="font-family: 宋体;">上传文件夹</span><br />
# <span style="font-family: 宋体;">下载文件夹</span></p>
<p># <span style="font-family: 宋体;">指定服务器集群</span></p>
<p># <span style="font-family: 宋体;">本地执行命令</span><br />
# <span style="font-family: 宋体;">远程执行命令</span></p>
<p># <span style="font-family: 宋体;">没有</span>@task<span style="font-family: 宋体;">，不能被执行</span></td>
</tr>
</tbody>
</table>
<p><span style="font-size: x-large;"><b>8.</b><b><span style="font-family: 宋体;">上传下载文件（夹）</span></b></span></p>
<p>AppDeploy<span style="font-family: 宋体;">对文件的上传、下载提供两种实现方式：</span><br />
<span style="font-family: 宋体;"><b>一种方式：</b>是在</span>appdeploy.py<span style="font-family: 宋体;">中定义文件上传下载的任务，然后再命令行执行</span>$ adep task<span style="font-family: 宋体;">以实现文件的上传下载功能。这种方式可以实现复杂逻辑的上传下载功能，例如：上传不同目录下、不同服务器的文件，但使用稍微繁琐，简单的上传下载功能参考方式二。</span><br />
<span style="font-family: 宋体;"><b><br />
</b></span><br />
<span style="font-family: 宋体;"><b>另一种方式：</b>直接使用</span>adep <span style="font-family: 宋体;">的命令行，格式如下：</span><br />
<i>$ adep put:local_file,remote_dir</i><br />
<i>$ adep get:remote_file,local_dir</i><br />
<span style="font-family: 宋体;">注意上述命令中没有空格，若目录中空格，可以用引号扩起来。下面是一些例子供参考：</span></p>
<p>1）<span style="font-family: 宋体;">将本地文件</span>a.txt<span style="font-family: 宋体;">上传到服务器</span>/root/<span style="font-family: 宋体;">目录下；</span><br />
<span style="font-family: 宋体;">   <span id="att_81625" class="f12"><span id="td_att81625"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_e8b52d80b53d9e7.png4"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_e8b52d80b53d9e7.png4" alt="219_1171330362041663_e8b52d80b53d9e7" width="358" height="95" /></a></span></span></span><br />
2）<span style="font-family: 宋体;">本地</span>”D:\ProgramFiles\”<span style="font-family: 宋体;">目录下的</span>b.txt<span style="font-family: 宋体;">上传到服务器</span>/root/<span style="font-family: 宋体;">目录下；</span><br />
<span style="font-family: 宋体;">   <span id="att_81626" class="f12"><span id="td_att81626"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_35b7b997284aa92.png4"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_35b7b997284aa92.png4" alt="219_1171330362041663_35b7b997284aa92" width="495" height="97" /></a></span></span></span><br />
3）<span style="font-family: 宋体;">将服务器</span>/root/b.txt<span style="font-family: 宋体;">文件下载到本地；</span><br />
<span style="font-family: 宋体;">   <span id="att_81627" class="f12"><span id="td_att81627"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_ebf6b61fe1e5b5d.png4"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_ebf6b61fe1e5b5d.png4" alt="219_1171330362041663_ebf6b61fe1e5b5d" width="490" height="99" /></a></span></span></span><br />
4）<span style="font-family: 宋体;">将本地的</span>./test/<span style="font-family: 宋体;">目录（及包含文件）上传到服务器</span>/root/<span style="font-family: 宋体;">下面；</span><br />
<span style="font-family: 宋体;">   <span id="att_81628" class="f12"><span id="td_att81628"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_b91449782b68db6.png5"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_b91449782b68db6.png5" alt="219_1171330362041663_b91449782b68db6" width="456" height="115" /></a></span></span></span><br />
5）<span style="font-family: 宋体;">下面服务器</span>/root/test<span style="font-family: 宋体;">目录到本地的</span>./test1/<span style="font-family: 宋体;">目录下；</span><br />
<span style="font-family: 宋体;">   <span id="att_81629" class="f12"><span id="td_att81629"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_96ca80096752ddf.png6"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_96ca80096752ddf.png6" alt="219_1171330362041663_96ca80096752ddf" width="590" height="124" /></a></span></span></span><br />
<span style="font-size: x-large;"><b>9.</b><b><span style="font-family: 宋体;">远程执行命令</span></b></span><br />
AppDeploy<span style="font-family: 宋体;">工具内置了</span>run<span style="font-family: 宋体;">指令做远程执行命令，在编辑</span>appdeploy.py<span style="font-family: 宋体;">中的任务时使用</span>run<span style="font-family: 宋体;">命令可以轻松实现远程执行，而在命令行想执行一个远程命令如何实现<span id="rlt_11">呢</span>？</span><br />
AppDeploy<span style="font-family: 宋体;">提供了两种实现方式：</span></p>
<p><span style="font-family: 宋体;"><b>一种方式</b>：在命令行执行</span>$ adep [options] &#8212; [shell command]<span style="font-family: 宋体;">，</span> option<span style="font-family: 宋体;">为命令的参数。</span><br />
<span style="font-family: 宋体;">例如：查看服务器</span>/root/test/<span style="font-family: 宋体;">文件夹里的文件列表；</span><br />
<span style="font-family: 宋体;">    <span id="att_81630" class="f12"><span id="td_att81630"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_348604fedf323a2.png8"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_348604fedf323a2.png8" alt="219_1171330362041663_348604fedf323a2" width="619" height="171" /></a></span></span></span><br />
<span style="font-family: 宋体;"><b>另一种方式</b>：在命令行中使用</span> $ adep run:”shell command”<span style="font-family: 宋体;">，需要注意的是</span>run<span style="font-family: 宋体;">和后面的</span>shell <span style="font-family: 宋体;">命令之间用“：”连接，且无空格，如果</span>shell<span style="font-family: 宋体;">命令有空格，请用引号将其引起来。</span><br />
<span style="font-family: 宋体;">    <span id="att_81631" class="f12"><span id="td_att81631"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_4dfcfbf5532e5c7.png7"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_4dfcfbf5532e5c7.png7" alt="219_1171330362041663_4dfcfbf5532e5c7" width="624" height="175" /></a></span></span></span><br />
<span style="font-size: x-large;"><b>10.</b><b><span style="font-family: 宋体;">一键更新源站</span></b></span><br />
<span style="font-family: 宋体;">买好了</span>ECS<span style="font-family: 宋体;">机器，安装完了系统，大部分用户都需要更新系统源这个任务。</span>AppDeploy<span style="font-family: 宋体;">为大家搜集了阿里云服务器上最常用、高效的源站链接，并提供一键更新的功能。此功能已经支持</span>Ubuntu<span style="font-family: 宋体;">、</span>Centos<span style="font-family: 宋体;">、</span>Fedora<span style="font-family: 宋体;">、</span>Opensuse<span style="font-family: 宋体;">、</span>Debain<span style="font-family: 宋体;">等</span>Unix<span style="font-family: 宋体;">系统。</span></p>
<p><span style="font-family: 宋体;">更新源站命令：</span> $ adep update_source<br />
<span id="att_81632" class="f12"><span id="td_att81632"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_8e73809adefbe20.png17"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_8e73809adefbe20.png17" alt="219_1171330362041663_8e73809adefbe20" width="618" height="308" /></a></span></span><br />
<span style="font-size: x-large;"><b>11.</b><b><span style="font-family: 宋体;">并发执行</span></b></span></p>
<div align="left">Appdeploy<span style="font-family: 宋体;">默认是串行执行所有命令的。但在设定参数的情况下可以实现并发执行任务。</span></div>
<div align="left">AppDeploy<span style="font-family: 宋体;">有两种方式并发执行任务：</span></div>
<div align="left">1）<span style="font-family: 宋体;">在命令行执行任务时添加</span>-P <span style="font-family: 宋体;">选项，则执行的所有任务都会在不同的服务器之间并发执行，但不同任务之间依然按照顺序执行进行；</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<p>&nbsp;</p>
<div align="left"><i>$ adep -P -H host1,host2update reload</i></div>
<div align="left"><i><span style="font-family: 宋体;">执行结果</span></i></div>
<div align="left"><i>update on host1 and host2</i></div>
<div align="left"><i>reload on host1 and host2</i></div>
<div align="left"></div>
<div align="left">2）<span style="font-family: 宋体;">通过在</span>appdeploy.py<span style="font-family: 宋体;">文件中的任务前面添加</span>@parallel<span style="font-family: 宋体;">来表明某个任务会被并行执行；</span></div>
<div align="left"><span style="font-family: 宋体;">例如：</span></div>
<p>&nbsp;</p>
<div align="left">def task1():</div>
<div align="left">    pass</div>
<div align="left">@parallel</div>
<div align="left">def task2():</div>
<div align="left">    pass</div>
<div align="left">$adep -H host1,host2,host3 task1 task2</div>
<div align="left"><span style="font-family: 宋体;">结果：</span></div>
<div align="left">Task1 on host1</div>
<div align="left">Task1 on host2</div>
<div align="left">Task1 on host3</div>
<div align="left">Task2 on host1,host2, and host3</div>
<div align="left">$adep -P -H host1,host2,host3 task1 task2</div>
<div align="left"><span style="font-family: 宋体;">结果：（</span>-P<span style="font-family: 宋体;">参数会覆盖</span>appdeploy<span style="font-family: 宋体;">中的定义）</span></div>
<div align="left">Task1 on host1,host2, and host3</div>
<div align="left">Task2 on host1,host2, and host3</div>
<p><span style="font-family: 宋体;">此类命令是基于用户工作习惯的总结，如果您有想新添加的功能或快捷方式，请与我们联系，我们会考虑将您需要的功能添加到工具的下个版本。</span></p>
<p>AppDeploy<span style="font-family: 宋体;">设计之初的重点研究对象就是应用部署，然而工具在开发初期更多的侧重于底层信息流的互通和通用功能的实现。当前</span>AppDeploy<span style="font-family: 宋体;">工具对应用部署的支持还不是很全面，这正是我们近期需要加强的地方。</span></p>
<p><span style="font-family: 宋体;">应用的部署相关工作可分为：服务器端的运行环境安装、应用的编译打包、应用的上传部署；</span></p>
<p><span style="font-size: x-large;"><b>12.</b><b><span style="font-family: 宋体;">服务器端的运行环境安装</span></b></span><br />
<span style="font-family: 宋体;">当前</span>[font=&amp;amp]AppDeploy<span style="font-family: 宋体;">更多侧重w</span>[font=&amp;amp]eb<span style="font-family: 宋体;">服务器安装，</span>[font=&amp;amp]AppDeploy<span style="font-family: 宋体;">支持常用W</span>[font=&amp;amp]eb<span style="font-family: 宋体;">环境的一键安装功能，支持的环境和版本见下表：</span><br />
<span id="att_81633" class="f12"><span id="td_att81633"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_1f7e191c7503463.png5"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_1f7e191c7503463.png5" alt="219_1171330362041663_1f7e191c7503463" width="438" height="158" /></a></span></span><br />
<span style="font-family: 宋体;">然而上述有些环境在不同操作系统上依赖库、安装细节等都不相同，所以当前无法保证以上工具能在所有操作系统环境安装无误，若出现安装失败，请查看错误日志或联系我们的<span id="rlt_10">邮箱</span>。</span> <span style="font-family: 宋体;">安装步骤如下：</span><br />
1）<span style="font-family: 宋体;">编辑</span>appdeploy.py<span style="font-family: 宋体;">文件，输入希望运行的</span>web<span style="font-family: 宋体;">环境组件。</span><br />
2）<span style="font-family: 宋体;">定义一个任务，任务中调用</span>appdeploy<span style="font-family: 宋体;">的内置函数：</span>install_runtime(para)<span style="font-family: 宋体;">，参数</span>para<span style="font-family: 宋体;">为想要安装的</span>web<span style="font-family: 宋体;">组件细节，使用</span>json<span style="font-family: 宋体;">格式输入。</span><br />
3）<span style="font-family: 宋体;">在命令行执行执行：</span>$adep runtime<span style="font-family: 宋体;">即可。</span></p>
<p><b><span style="font-family: 宋体;">例子</span>1</b><b><span style="font-family: 宋体;">：</span></b><b><span style="font-family: 宋体;">服务器上安装</span>Jdk-1.7.0</b><b><span style="font-family: 宋体;">和</span>Tomcat-7.0.63</b><b><span style="font-family: 宋体;">的运行环境</span></b><br />
1）<span style="font-family: 宋体;">在</span>appdeploy.py<span style="font-family: 宋体;">中定义任务</span>runtime<span style="font-family: 宋体;">，并调用</span>install_runtime(compontens)<span style="font-family: 宋体;">函数，参数为要安装的</span>jdk<span style="font-family: 宋体;">、</span>tomcat<span style="font-family: 宋体;">版本号，用</span>json<span style="font-family: 宋体;">格式输入。</span></p>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>def runtime():</i><i>   componets={&#8220;jdk&#8221;    :&#8221;1.7.0&#8243;,</i><br />
<i>           &#8220;tomcat&#8221;  :&#8221;7.0.63&#8243;</i><i>  }</i><br />
<i>    install_runtime(componets)</i></td>
</tr>
</tbody>
</table>
<p>2）<span style="font-family: 宋体;">在命令行执行：</span>$ adep runtime<span style="font-family: 宋体;">执行安装过程，</span><br />
<span style="font-family: 宋体;">    <span id="att_81634" class="f12"><span id="td_att81634"><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_3b2ff6a43d36bd1.png12"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/219_1171330362041663_3b2ff6a43d36bd1.png12" alt="219_1171330362041663_3b2ff6a43d36bd1" width="818" height="225" /></a></span></span><br />
</span><br />
3）IE<span style="font-family: 宋体;">中输入访问地址，验证安装结果，下图表明</span>tomcat<span style="font-family: 宋体;">已经安装成功</span><span style="font-family: 宋体;">。</span><br />
<span style="font-family: 宋体;">    [attachment=81519]
</span><br />
<span style="font-family: 宋体;">例子</span>2<span style="font-family: 宋体;">：<b>服务器上安装</b></span><b>apache</b><b><span style="font-family: 宋体;">和</span>Tomcat-7.0.63</b><b><span style="font-family: 宋体;">的运行环境</span></b><br />
1）<span style="font-family: 宋体;">在</span>appdeploy.py<span style="font-family: 宋体;">中定义任务</span>runtime<span style="font-family: 宋体;">，并调用</span>install_runtime(compontens)<span style="font-family: 宋体;">函数，参数为要安装的</span>Apache<span style="font-family: 宋体;">、</span>PHP<span style="font-family: 宋体;">版本号，用</span>json<span style="font-family: 宋体;">格式输入。</span></p>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>def runtime():</i><i>    componets={&#8220;</i> <i>apache&#8221;    : &#8220;</i> <i>2.2.31&#8243;,</i><br />
<i>           &#8220;php&#8221;        : &#8220;5.0&#8221;,</i><i>              }</i><br />
<i>    install_runtime(componets)</i></td>
</tr>
</tbody>
</table>
<p>2）<span style="font-family: 宋体;">在命令行执行：</span>$ adep runtime<span style="font-family: 宋体;">执行安装过程，</span><br />
<span style="font-family: 宋体;">    [attachment=81520]
</span><br />
<b>3）</b>IE<span style="font-family: 宋体;">中输入访问地址，验证安装结果，下图表明</span>PHP<span style="font-family: 宋体;">已经安装成功（</span>hello.php<span style="font-family: 宋体;">是环境安装后放到</span>php<span style="font-family: 宋体;">指定目录下的文件）；</span><b></b><br />
<span style="font-family: 宋体;">    [attachment=81521]
</span><br />
<span style="font-size: x-large;"><b>13.</b><b><span style="font-family: 宋体;">应用打包部署</span></b></span><br />
<b><span style="font-family: 宋体;">例子</span></b><b>1</b><b><span style="font-family: 宋体;">：将本地</span></b><b>Java</b><b><span style="font-family: 宋体;">应用部署到服务器。</span></b><br />
<span style="font-family: 宋体;">结合上面环境安装的例子（</span>1<span style="font-family: 宋体;">），将本地一个</span>java<span style="font-family: 宋体;">应用部署到服务器。</span></p>
<p>1）<span style="font-family: 宋体;">在</span>appdeploy.py<span style="font-family: 宋体;">中添加如下任务，任务中定义：打包工具、本地项目目录、服务器端的</span>web<span style="font-family: 宋体;">应用目录，并调用打包、部署命令</span>package<span style="font-family: 宋体;">和</span>deploy<span style="font-family: 宋体;">接口。</span></p>
<table class="read_form" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><i>def pack_deploy():</i><i>   componets={&#8220;package_tool&#8221;: &#8220;maven&#8221;,</i><br />
<i>              &#8220;project_dir&#8221; : &#8220;/home/xxx/src/example/maven/myFirstWebApp&#8221;,</i><i>              </i><br />
<i>              &#8220;web_dir&#8221;   :&#8221;/alidata/server/tomcat/webapps&#8221;</i><br />
<i>               }</i><i> </i><br />
<i>    package(componets)</i><br />
<i>    deploy(componets)</i></td>
</tr>
</tbody>
</table>
<p>2）<span style="font-family: 宋体;">在命令行输入命令：</span>$ adep pack_deploy<span style="font-family: 宋体;">执行打包部署任务，如下：</span><br />
<span style="font-family: 宋体;">    [attachment=81522]
</span><br />
3）<span style="font-family: 宋体;">在</span>IE<span style="font-family: 宋体;">上输入应用地址，检查部署效果。下图表示应用部署成功：</span><br />
<span style="font-family: 宋体;">    [attachment=81523]
</span><br />
<span style="font-family: 宋体;">应用部署是</span>AppDeploy<span style="font-family: 宋体;">以后重点研究方向，我们深知当前做的还很有限，也正是借此机会和广大开发者交流，希望您能把工具的不足之处和您自己的需求发送给我们，一起把应用部署方案做到更新、更方便使用。</span><br />
&nbsp;</p>
<div align="left"><span style="font-family: 宋体;">欢迎下载使用阿里云</span>AppDeploy<span style="font-family: 宋体;">，期待您的反馈和建议！！</span></div>
<p><a id="url_7" href="http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY" target="_blank"></a></p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/">阿里云运维部署工具AppDeploy详细教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
