<?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; 小说站代维</title>
	<atom:link href="https://www.fuwuqiok.com/tag/xiaoshuo/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>
		<item>
		<title>如何限制通过固定的IP访问阿里云OSS的文件</title>
		<link>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e9%99%90%e5%88%b6%e9%80%9a%e8%bf%87%e5%9b%ba%e5%ae%9a%e7%9a%84ip%e8%ae%bf%e9%97%ae%e9%98%bf%e9%87%8c%e4%ba%91oss%e7%9a%84%e6%96%87%e4%bb%b6/</link>
		<comments>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e9%99%90%e5%88%b6%e9%80%9a%e8%bf%87%e5%9b%ba%e5%ae%9a%e7%9a%84ip%e8%ae%bf%e9%97%ae%e9%98%bf%e9%87%8c%e4%ba%91oss%e7%9a%84%e6%96%87%e4%bb%b6/#comments</comments>
		<pubDate>Sat, 15 Aug 2015 04:19:19 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[aws代维]]></category>
		<category><![CDATA[aws服务器代维]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[如何限制通过固定的IP访问阿里云OSS的文件]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2569</guid>
		<description><![CDATA[<p>最近有客户提出需求，在某些情况，需要使用OSS来存大量文件，但是请求这些文件时候需要访问固定的IP（比如程序之 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e9%99%90%e5%88%b6%e9%80%9a%e8%bf%87%e5%9b%ba%e5%ae%9a%e7%9a%84ip%e8%ae%bf%e9%97%ae%e9%98%bf%e9%87%8c%e4%ba%91oss%e7%9a%84%e6%96%87%e4%bb%b6/">如何限制通过固定的IP访问阿里云OSS的文件</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>最近有客户提出需求，在某些情况，需要使用OSS来存大量文件，但是请求这些文件时候需要访问固定的IP（比如程序之前写死了IP，比如和运营商谈免流量的问题，公司跳板机，固定公司ip访问限制）</p>
<div>通过查看阿里云服务器手册发现oss的服务是由多个IP的，并且随时可能变化，因此如果要实现这个功能，这时候可以通过ECS搭建反向代理来实现需求</div>
<div></div>
<div>nginx配置如下：</div>
<p>server {<br />
listen       80 default_server;<br />
server_name  _;<br />
location / {<br />
proxy_pass http://xxx.oss-cn-qingdao-internal.aliyuncs.com/;<br />
proxy_set_header   Referer             http://www.test.com;<br />
}<br />
}</p>
<div>这里通过ECS代理OSS的内网，从而省掉了OSS的流量费，但是访问效率需要依赖ECS的带宽</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/Image.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/Image.png" alt="Image" width="669" height="220" /></a></div>
<div>为了安全，OSS配置了refer限制，也可以通过proxy_set_header来代理发送一个refer，这个refer可以设置一个随意别人不知道的值，能够变相实现加密（只有ECS服务器知道这个refer值）</div>
<div> 配置完毕之后，就可以通过访问ECS来访问到OSS上的文件了，比如：</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/aaa.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/aaa.png" alt="aaa" width="408" height="136" /></a></div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e9%99%90%e5%88%b6%e9%80%9a%e8%bf%87%e5%9b%ba%e5%ae%9a%e7%9a%84ip%e8%ae%bf%e9%97%ae%e9%98%bf%e9%87%8c%e4%ba%91oss%e7%9a%84%e6%96%87%e4%bb%b6/">如何限制通过固定的IP访问阿里云OSS的文件</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e9%99%90%e5%88%b6%e9%80%9a%e8%bf%87%e5%9b%ba%e5%ae%9a%e7%9a%84ip%e8%ae%bf%e9%97%ae%e9%98%bf%e9%87%8c%e4%ba%91oss%e7%9a%84%e6%96%87%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云服务器如何配置端口映射Dnat教程</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84dnat%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84dnat%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Sat, 15 Aug 2015 04:10:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[aws服务器代维]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云服务器，如何配置端口映，Dnat教程]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2567</guid>
		<description><![CDATA[<p>通过iptables配置Dnat是一个比较常见的操作，阿里云的服务在classic网络下无法支持snat，但是 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84dnat%e6%95%99%e7%a8%8b/">阿里云服务器如何配置端口映射Dnat教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>通过iptables配置Dnat是一个比较常见的操作，阿里云的服务在classic网络下无法支持snat，但是dnat功能实际是没问题的，这里将我们工作室平时常用的实现方法罗列一下操作过程：</p>
<pre>
 环境两台阿里云ECS服务器 ，一台公网，一台内网。内网安装nginx，希望访问公网服务器的时候，能够访问到内网的nginx站点。
 <span id="more-486"></span>
 内网服务器操作过程如下：</pre>
<p>首先安装nginx和启动</p>
<div id="highlighter_349548" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">[root@内网 ~]</code><code class="comments"># yum install nginx -y &gt;&gt;/dev/null</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">[root@内网 ~]</code><code class="comments"># /etc/init.d/nginx start</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="plain">Starting nginx: [ OK ]</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="plain">[root@内网 ~]</code><code class="comments"># lsof -i:80</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="plain">COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="plain">nginx 1742 root 6u IPv4 5570 0t0 TCP *:http (LISTEN)</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>测试nginx安装正常，可以访问。</p>
<div id="highlighter_688157" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table style="height: 29px;" width="400">
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">[root@内网 ~]</code><code class="comments"># curl -I www.fuwuqiok.com<br />
</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">HTTP/1.1 200 OK</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="plain">Server: nginx/0.8.55</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="plain">Date: Wed, 14 Jan 2015 07:29:05 GMT</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="plain">Content-Type: text/html</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="plain">Content-Length: 3698</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="plain">Last-Modified: Tue, 11 Nov 2014 16:30:06 GMT</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="plain">Connection: keep-alive</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>9</code></td>
<td class="content"><code class="plain">Accept-Ranges: bytes</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<pre>公网服务器操作如下：

 首先修改内核参数，开启ip转发</pre>
<div id="highlighter_261767" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">[root@公网 ~]</code><code class="comments"># sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">应用生效</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="plain">[root@公网 ~]</code><code class="comments"># sysctl -p</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="plain">net.ipv4.ip_forward = 1</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>配置iptables，将访问公网服务器80端口的请求，转发到内网服务器的80</p>
<div id="highlighter_580261" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">[root@公网 ~]</code><code class="comments"># iptables -t nat -I PREROUTING -d 115.29.96.246 -p tcp --dport 80 -j DNAT --to 10.144.26.11:80</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>这时候我们访问公网服务器IP测试一下，同时抓包看转发后的数据包情况：</p>
<div id="highlighter_497411" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">15:35:46.602240 IP 42.120.74.108.8864 &gt; 115.29.96.246.80: S 765781831:765781831(0) win 8192</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">15:35:46.602272 IP 42.120.74.108.8864 &gt; 10.144.26.11.80: S 765781831:765781831(0) win 8192</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>这样原地址是访客的公网IP，目标是内网服务器的内网地址，这样也没办法双向通讯啊，所以，需要让这个数据包的原地址，也变成内网地址，这样才能和内网服务器建立通讯。<br />
修改原地址就是SNAT<br />
我们继续在公网服务器配置：</p>
<div id="highlighter_451003" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">[root@公网 ~]</code><code class="comments"># iptables -t nat -I POSTROUTING -d 10.144.26.11 -p tcp --dport 80 -j SNAT --to 10.163.209.59</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>抓包分析：</p>
<div id="highlighter_665871" class="syntaxhighlighter  ">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="plain">15:38:14.846955 IP 42.120.74.108.10839 &gt; 115.29.96.246.80: P 433:858(425) ack 159 win 16385</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="plain">15:38:14.846985 IP 10.163.209.59.10839 &gt; 10.144.26.11.80: P 433:858(425) ack 159 win 16385</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="plain">15:38:14.847759 IP 10.144.26.11.80 &gt; 10.163.209.59.10839: P 159:317(158) ack 858 win 317</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="plain">15:38:14.847772 IP 115.29.96.246.80 &gt; 42.120.74.108.10839: P 159:317(158) ack 858 win 317</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>访客本地公网-&gt;公网服务器公网IP<br />
修改目标地址<br />
公网服务器内网IP-&gt;内网服务器IP<br />
修改原地址<br />
内网服务器IP-&gt;公网服务器内网IP<br />
公网服务器公网IP-&gt;访客本地公网</p>
<p>完成通讯，试试看。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84dnat%e6%95%99%e7%a8%8b/">阿里云服务器如何配置端口映射Dnat教程</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%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e7%ab%af%e5%8f%a3%e6%98%a0%e5%b0%84dnat%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云RDS中DTS使用指导及总结教程</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91rds%e4%b8%addts%e4%bd%bf%e7%94%a8%e6%8c%87%e5%af%bc%e5%8f%8a%e6%80%bb%e7%bb%93%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91rds%e4%b8%addts%e4%bd%bf%e7%94%a8%e6%8c%87%e5%af%bc%e5%8f%8a%e6%80%bb%e7%bb%93%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Thu, 13 Aug 2015 14:54:09 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[DTS]]></category>
		<category><![CDATA[RDS]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云RDS中DTS使用指导及总结教程]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2521</guid>
		<description><![CDATA[<p>本文主要目的是讲述作者在使用RDS的DTS(数据迁移服务时)遇到的问题，多次通过工单与阿里云工程师交流，如果你 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91rds%e4%b8%addts%e4%bd%bf%e7%94%a8%e6%8c%87%e5%af%bc%e5%8f%8a%e6%80%bb%e7%bb%93%e6%95%99%e7%a8%8b/">阿里云RDS中DTS使用指导及总结教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>本文主要目的是讲述作者在使用RDS的DTS(数据迁移服务时)遇到的问题，多次通过工单与阿里云工程师交流，如果你在使用前阅读本文，可能会少走些弯路，节省时间，我会把遇到的问题标注在本帮助文档的相应位置。</p>
<p>本文转自阿里云RDS迁移文档 点击<a href="https://docs.aliyun.com/?spm=5176.7114037.1996646101.1.AfZ3B8&amp;pos=1#/pub/rds/getting-started/movein&amp;dts_ppas">查看原文</a>，</p>
<ul>
<li><a class="menu-a doc-top-title">Oracle迁移至RDS</a></li>
<li><a class="menu-a doc-top-title">迁移类型简介</a></li>
<li><a class="menu-a doc-top-title">迁移限制</a></li>
<li><a class="menu-a doc-top-title">迁移权限要求</a></li>
<li><a class="menu-a doc-top-title">迁移步骤</a></li>
<li><a class="menu-a doc-top-title">RDS实例数据库创建</a></li>
<li><a class="menu-a doc-top-title">迁移帐号创建</a></li>
<li><a class="menu-a doc-top-title">正式迁移</a></li>
</ul>
<h1 id="menu0">Oracle迁移至RDS</h1>
<p>使用DTS<a href="http://dts.aliyun.com/">(http://dts.aliyun.com)</a>将本地的Oracle迁移至RDS for PPAS实例中，可以进行结构定义迁移及全量数据迁移。迁移过程中，对本地的Oracle数据库没有影响。</p>
<h2 id="menu1">迁移类型简介</h2>
<ul>
<li>结构迁移<br />
DTS会将迁移对象的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有：表、视图、同义词、触发器、存储过程、存储函数、包、自定义类型</li>
<li>全量迁移<br />
DTS会将源数据库迁移对象在的数据全部迁移到目标实例。如果迁移过程中，本地Oracle库有数据写入的话，那么这些增量数据不一定能够被迁移到PPAS中。所以，如果要保证数据一致性，那么尽量选择在业务低峰期进行全量迁移</li>
</ul>
<h2 id="menu2">迁移限制</h2>
<ul>
<li>迁移过程中，不支持DDL操作</li>
<li>不支持物化视图的迁移</li>
<li>结构迁移时，会将reverse index迁移成普通索引</li>
<li>结构迁移时，会将位图索引迁移成普通索引</li>
<li>结构迁移时，会将分区索引迁移成，在每个分区上单独创建自己的索引</li>
</ul>
<h2 id="menu3">迁移权限要求</h2>
<p>当使用DTS进行Oracle迁移时，在不同迁移类型情况下，源跟目标数据库的迁移帐号权限要求如下：</p>
<div>
<table>
<thead>
<tr>
<th>迁移类型</th>
<th>结构迁移</th>
<th>全量迁移</th>
</tr>
</thead>
<tbody>
<tr>
<td>本地Oracle实例</td>
<td>create session<br />
select any directory</td>
<td>create session<br />
select any directory<br />
select any table</td>
</tr>
<tr>
<td>目的RDS for PPAS实例</td>
<td>create<br />
connect</td>
<td>schema的owner</td>
</tr>
</tbody>
</table>
<p>##此处描述不够明确，本次做的是结构迁移，作者误认为本地Oracle实例用户（源库）只需要上述2个权限就可以完成迁移，并且新建立了一个独立只读账户专门用于本次DTS，但是失败了，最后发起工单，工程师反馈最好是使用表的owner进行迁移，读者请注意。</p>
</div>
<h2 id="menu4">迁移步骤</h2>
<p>下面详细介绍下用户如何使用DTS将本地的Oracle迁移到RDS for PPAS上的流程</p>
<h3 id="menu5">RDS实例数据库创建</h3>
<p>在正式迁移之前，需要确认目标RDS实例中是否已经创建好了需要迁入的数据库，如果没有创建的话，需要先在目标PPAS实例中创建数据库。</p>
<h3 id="menu6">迁移帐号创建</h3>
<p>在正式迁移之前，需要先在本地Oracle数据库及云上PPAS实例中创建迁移帐号，并将要迁移的库表的相关权限授权给上面创建的帐号。</p>
<h3 id="menu7">正式迁移</h3>
<p>当上面的所有前提条件都配置完成后，就可以开始正式的数据迁移了。下面详细介绍下具体的迁移步骤。<br />
1）进入<a href="http://dts.aliyun.com/">DTS控制台</a>，点击创建迁移任务，正式开始任务创建</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas1.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas1.jpg" alt="DTScreateoracle2ppas1" width="1366" height="599" /></a></p>
<p>2) 填写本地Oracle跟目标RDS实例的连接信息</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas2.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas2.jpg" alt="DTScreateoracle2ppas2" width="1280" height="895" /></a></p>
<p>这里面源实例类型要选择有公网IP的自建数据库</p>
<p>3）选择迁移对象及迁移类型</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas3.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas3.jpg" alt="DTScreateoracle2ppas3" width="1269" height="836" /></a></p>
<p>默认情况下，迁移对象迁移到目标库后，对象名跟源库一致。如果用户想修改对象在目标库上的名字时，可以直接修改已选择的对象名。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas5.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas5.jpg" alt="DTScreateoracle2ppas5" width="1267" height="838" /></a></p>
<p>当点击编辑后，即进入对象名称修改页面：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas6.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas6.jpg" alt="DTScreateoracle2ppas6" width="1280" height="820" /></a></p>
<p>修改了对象名后，目标实例的对象名即为修改后的对象名。</p>
<p>4）启动预检查<br />
在数据正式迁移之前，会先进行基础预检查，只有预检查通过后，才能启动迁移</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas7.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas7.jpg" alt="DTScreateoracle2ppas7" width="1355" height="599" /></a></p>
<p>如果预检查失败，那么可以查看具体的失败详情，根据失败原因修复后，重新进行预检查</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas8.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas8.jpg" alt="DTScreateoracle2ppas8" width="1336" height="599" /></a></p>
<p>当点击查看后，可以查看到具体的预检查失败原因：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas9.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas9.jpg" alt="DTScreateoracle2ppas9" width="1366" height="599" /></a></p>
<p>当修复完成后，可以在任务列表中，选择这个任务，然后重新启动预检查</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas11.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas11.jpg" alt="DTScreateoracle2ppas11" width="1366" height="599" /></a></p>
<p>5）启动迁移任务<br />
当预检查通过后，我们可以启动迁移任务，任务启动后，可以到任务列表中查看具体的迁移状态及进度</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas12.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/DTScreateoracle2ppas12.jpg" alt="DTScreateoracle2ppas12" width="1339" height="599" /></a></p>
<p>至此，完成将本地Oracle数据库迁移到RDS for PPAS实例的数据迁移工作。</p>
<p>##与阿里云工程师大战2天后总结：</p>
<p>1、做DTS迁移源库工程师建议使用对象的owner账户进行迁移，说明文档说上需要2个权限是不正确的。</p>
<p>2、预检查成功通过，不代表你可以成功迁移，笔者就遇到了oracle使用的sys_guid 在PPAS中是不存在的，也是通过工单系统工程师后台通过基于UUID的功能手工建立的sys_guid同名函数解决的。官方文档 http://www.postgresql.org/docs/9.4/static/uuid-ossp.html，这块耗时比较长，可能是工程师和 后台的DBA在沟通协调。</p>
<p>3、源库含有DBLINK的，是无法迁移的。</p>
<p>4、xmax这个列名在PPAS数据库中属于系统列名，会造成冲突，如果你使用了，建议提前改列名。</p>
<p>5、在打算迁移前，最好了解或是已经掌握了postgresql数据库使用技巧，以免造成使用上的不习惯和麻烦。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91rds%e4%b8%addts%e4%bd%bf%e7%94%a8%e6%8c%87%e5%af%bc%e5%8f%8a%e6%80%bb%e7%bb%93%e6%95%99%e7%a8%8b/">阿里云RDS中DTS使用指导及总结教程</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%91rds%e4%b8%addts%e4%bd%bf%e7%94%a8%e6%8c%87%e5%af%bc%e5%8f%8a%e6%80%bb%e7%bb%93%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>服务器代维是救命草还是鸡肋</title>
		<link>https://www.fuwuqiok.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%bb%b4%e6%98%af%e6%95%91%e5%91%bd%e8%8d%89%e8%bf%98%e6%98%af%e9%b8%a1%e8%82%8b/</link>
		<comments>https://www.fuwuqiok.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%bb%b4%e6%98%af%e6%95%91%e5%91%bd%e8%8d%89%e8%bf%98%e6%98%af%e9%b8%a1%e8%82%8b/#comments</comments>
		<pubDate>Sat, 08 Aug 2015 07:23:47 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[aws服务器代维]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[服务器代维是救命草还是鸡肋]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2471</guid>
		<description><![CDATA[<p>服务器代维就是个人站长或企业将本身的服务器委托专业的公司管理与维护，以达到降低成本的目的。 众所周知，无论个人 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%bb%b4%e6%98%af%e6%95%91%e5%91%bd%e8%8d%89%e8%bf%98%e6%98%af%e9%b8%a1%e8%82%8b/">服务器代维是救命草还是鸡肋</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="entry-text clearfix">
<p>服务器代维就是个人站长或企业将本身的服务器委托专业的公司管理与维护，以达到降低成本的目的。</p>
<p>众所周知，无论个人还是企业，想运维好服务器就需要投入大量的精力以及人力物力，服务器外包已经成为很多站长降低成本的一种重要的手段。</p>
<p>目前从实践来看，需要服务器代维群体大体分两类：</p>
<ul>
<li>一类是自己不想承担或承担不起一个可以做到7×24小时服务器运维团队的成本</li>
<li>二类是认为专业人做专业事，将精力、能力聚集到核心业务发展之上</li>
</ul>
<h2>服务器代维会为企业带来什么</h2>
<ol>
<li>大大提高企业服务器运维速度。不仅节省了传统的各环节间转换的时间，还为企业节省了培训员工熟悉业务的时间。</li>
<li>降低企业服务器管理成本。首先是从时间的节约带来的费用的降低，另一方面则是通过减少不必要的人力物力给企业带来更大的益处，相信这一点，没用过服务器代维的企业体会不到的。</li>
<li>提高企业服务器运维质量。由于紧密合作的关系以及长期合作的时间，使得运维方对企业的服务器能进行十分深入、细致的理解，服务器运维过程中在切合企业实际业务运作等方面会有不可比拟的体现。当然，服务器代维也有其天生的缺陷，比如：
<ul>
<li>提供高品质的代维企业难找，即使有，与企业建立互信也成为一个难点。</li>
<li>企业的服务器风险将集中在代维商的责任心和水平之上。这一根本性的问题，也是导致很多企业决策者虽然明白服务器代维的好处，但是却始终犹豫的主要原因。</li>
</ul>
</li>
</ol>
<h2>小结</h2>
<p>因此，本人以多年的服务器运维实践经验认为，企业实行服务器运维外包的可行方法，就是：</p>
<p>企业让代维商从小的、短期合作开始切入，相互磨合、建立了信任的基础、 企业对运维公司的能力也有了充分认识后，再尝试长期的服务合作。此时，运维公司就不再是一个简单的服务提供者，也可以参与企业的决策环节，提供更专业的意见。</p>
<p>简言之，服务器代维就是企业用一个网管的工资雇用了一个专业的运维团队为其开展CTO的工作。形式不同，目的一致，效果却更突出。</p>
<p>信息化管理的时代，服务器代维更符合企业的实际发展需要，代维优势决定了其未来将会得到业内人士更多的关注与研究。</p>
<p><a href="https://www.fuwuqiok.com">运维一二三工作室</a>，你最值得信赖的朋友！</p>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%bb%b4%e6%98%af%e6%95%91%e5%91%bd%e8%8d%89%e8%bf%98%e6%98%af%e9%b8%a1%e8%82%8b/">服务器代维是救命草还是鸡肋</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%bb%b4%e6%98%af%e6%95%91%e5%91%bd%e8%8d%89%e8%bf%98%e6%98%af%e9%b8%a1%e8%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS下挂载EBS</title>
		<link>https://www.fuwuqiok.com/centos%e4%b8%8b%e6%8c%82%e8%bd%bdebs/</link>
		<comments>https://www.fuwuqiok.com/centos%e4%b8%8b%e6%8c%82%e8%bd%bdebs/#comments</comments>
		<pubDate>Sat, 01 Aug 2015 00:45:51 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[Amazon AWS]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[AWS EBS]]></category>
		<category><![CDATA[aws服务器代维]]></category>
		<category><![CDATA[CentOS下挂载EBS]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[挂载EBS]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2344</guid>
		<description><![CDATA[<p>EBS(Elastic Block Store)是Amazon EC2实例的持久性数据块级存储卷。 在简单介绍 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/centos%e4%b8%8b%e6%8c%82%e8%bd%bdebs/">CentOS下挂载EBS</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>EBS(Elastic Block Store)是Amazon EC2实例的持久性数据块级存储卷。</p>
<p>在简单介绍一下，购买EBS以后如何挂载到EC2。</p>
<p>环境：CentOS6.5</p>
<p>EBS：300GB</p>
<h2>CentOS6.5下挂载EBS</h2>
<h3>1. 先用fdisk命令查看Device名。</h3>
<pre># fdisk -l

Disk /dev/xvdg: 40.3 GB, 40256929792 bytes
255 heads, 63 sectors/track, 4894 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvde: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvdf: 322.1 GB, 322122547200 bytes
255 heads, 63 sectors/track, 39162 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
</pre>
<p>根据容量判断，/dev/xvdf是购买的EBS。</p>
<h3>2. 创建ext4文件系统</h3>
<pre># mkfs -t ext4 /dev/xvdf</pre>
<h3>3. 创建目录及挂载</h3>
<div class="custom"><code># mkdir /data<br />
# mount /dev/xvdf /data</code></div>
<h3>4. 确认</h3>
<pre># df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvde       7.9G  650M  6.9G   9% /
tmpfs           7.4G     0  7.4G   0% /dev/shm
/dev/xvdf       296G  191M  281G   1% /data
</pre>
<h3>5. 修改/etc/fstab</h3>
<p>在/etc/fstab文件的最后进行添加。</p>
<pre># vi /etc/fstab
/dev/xvdf  /data     ext4    defaults         0 0
</pre>
<h3>6. 重启系统进行确认</h3>
<pre># shutdown -r now
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvde       7.9G  651M  6.9G   9% /
tmpfs           7.4G     0  7.4G   0% /dev/shm
/dev/xvdf       296G  191M  281G   1% /data
</pre>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/centos%e4%b8%8b%e6%8c%82%e8%bd%bdebs/">CentOS下挂载EBS</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/centos%e4%b8%8b%e6%8c%82%e8%bd%bdebs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>比较物理机和AWS费用</title>
		<link>https://www.fuwuqiok.com/%e6%af%94%e8%be%83%e7%89%a9%e7%90%86%e6%9c%ba%e5%92%8caws%e8%b4%b9%e7%94%a8/</link>
		<comments>https://www.fuwuqiok.com/%e6%af%94%e8%be%83%e7%89%a9%e7%90%86%e6%9c%ba%e5%92%8caws%e8%b4%b9%e7%94%a8/#comments</comments>
		<pubDate>Fri, 31 Jul 2015 13:28:42 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[aws服务器代维]]></category>
		<category><![CDATA[小说站代维]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[比较物理机和AWS费用]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2246</guid>
		<description><![CDATA[<p>此页面可以比较出物理机和在AWS云主机上运行您的应用的成本。 根据您自己对机器的描述来生成基本或者详细的成本比 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%af%94%e8%be%83%e7%89%a9%e7%90%86%e6%9c%ba%e5%92%8caws%e8%b4%b9%e7%94%a8/">比较物理机和AWS费用</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>此页面可以比较出物理机和在AWS云主机上运行您的应用的成本。</p>
<p>根据您自己对机器的描述来生成基本或者详细的成本比较。</p>
<p><a href="http://awstcocalculator.com/" target="_blank">进入AWS总成本计算请点我</a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/11.png" alt="11" width="729" height="754" /></a></p>
<p>上图为AWS总成本计算示意图。在此页的上部分可以选择比较的级别，是基本的(Basic)还是高级的(Advanced)。</p>
<p>在这里用的是高级的(Advanced)来说明的。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/1.png" alt="1" width="637" height="33" /></a></p>
<p>此条是看您的服务器是在公司还是在机房，或者是托管的方式。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/2.png" alt="2" width="594" height="42" /></a></p>
<p>此条是让您选择一个您理想的地区。上图显示的地区为美国东部。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/3.png" alt="3" width="677" height="57" /></a></p>
<p>此条是指，您所比较的服务器是物理机还是虚拟机。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/4.png" alt="4" width="917" height="176" /></a></p>
<p>此条是让您提供服务器信息。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/5.png" alt="5" width="918" height="192" /></a></p>
<p>此条是让您填写服务器的存储信息。</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/6.png" alt="6" width="407" height="137" /></a></p>
<p>此条是让您提供数据中心的带宽信息。(可选)</p>
<p>&nbsp;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/7.png" alt="7" width="479" height="148" /></a></p>
<p>此条让您填写数据中心人员的信息。(可选)</p>
<p>当您把信息都填写完，就可以来进行比较了。</p>
<p>下面举一个简单的例子：</p>
<p>假设物理机配置如下</p>
<p>&nbsp;</p>
<table class="tableCommon" width="389">
<tbody>
<tr>
<td class="tableHeader" colspan="12">Environment : Physical</td>
</tr>
<tr class="gridHeader">
<td class="alPadding "><span class="textRegular"> Servers</span></td>
<td class="alPadding "><span class="textRegular"> Cores</span></td>
<td class="alPadding "><span class="textRegular">RAM (GiB)</span></td>
<td class="alPadding"><span class="textRegular">OS</span></td>
<td class="alPadding "><span class="textRegular">Avg.Util.</span></td>
<td class="alPadding"><span class="textRegular">Optimize by</span></td>
</tr>
<tr>
<td class="alPadding ciImp"><span class="textRegular">1</span></td>
<td class="alPadding ciImp"><span class="textRegular">1</span></td>
<td class="alPadding ciImp"><span class="textRegular">100</span></td>
<td class="alPadding"><span class="textRegular">Linux</span></td>
<td class="alPadding ciImp"><span class="textRegular">100%</span></td>
<td class="alPadding"><span class="textRegular">RAM</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<div>
<table>
<tbody>
<tr>
<td>
<table class="tableCommon" width="141">
<tbody>
<tr>
<td class="tableHeader" colspan="12">Storage (TB)</td>
</tr>
<tr class="gridHeader">
<td class="alPadding ciImp"><span class="textRegular">SAN</span></td>
<td class="alPadding ciImp"><span class="textRegular">NAS</span></td>
<td class="alPadding ciImp"><span class="textRegular">Object</span></td>
</tr>
<tr>
<td class="alPadding ciImp"><span class="textRegular">100</span></td>
<td class="alPadding ciImp"><span class="textRegular">0</span></td>
<td class="alPadding ciImp"><span class="textRegular">0</span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>如下图给出了物理机和迁移到AWS云主机之后的总费用比较</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/07/8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/07/8.png" alt="8" width="913" height="491" /></a></p>
<p>可以看出，迁移到aws云主机之后，您可以节省70%的开销。</p>
<p>AWS也帮您计算出，未来三年您要是用AWS云主机可以节省下来的金额和在AWS云主机上具体服务的消费情况。</p>
<p>可以看出，随着使用AWS云主机的时间越来越长，您在AWS上的花销会越来越平稳，越来越少的.</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e6%af%94%e8%be%83%e7%89%a9%e7%90%86%e6%9c%ba%e5%92%8caws%e8%b4%b9%e7%94%a8/">比较物理机和AWS费用</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e6%af%94%e8%be%83%e7%89%a9%e7%90%86%e6%9c%ba%e5%92%8caws%e8%b4%b9%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
