阿里雲運維部署工具AppDeploy詳細教程


AppDeploy是一個通過SSH實現的命令行工具,可完成應用部署和遠程運維管理。當前工具實現為兩個版本:普通版(偽代碼描述語言)和Python版。Python版使用Python語法規則,可實現您的各種應用需求;普通版語法簡單、容易上手,是對Python版本的精簡。兩個版本當前都是免費使用。下載地址如下: 
普通版: 
http://market.aliyun.com/products/53690006/cmgj000331.html?spm=5176.900004.4.2.iTWBiC 
Python版: 
http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY 
 
1 介紹一下AppDeploy的主要功能 
1).遠程應用部署: 
    可以將本地應用安裝部署到遠程雲服務器,軟件包可以在本地編譯打包好,也可以選擇在雲服務器編譯安裝; 
 
2).遠程運維管理: 
    您可以使用AppDeploy遠程執行shell腳本,讓操作命令感覺在本地執行一般,大大的提高開發者的工作效率; 
 
3).一鍵環境安裝: 
    一鍵安裝Web環境,當前支持JavaNginxApacheTomcatPHPMysql等多款環境,可以根據具體業務選擇適合工具的適合版本進行安裝; 
 
4).一鍵應用部署: 
    可以一鍵編譯、打包、部署常見的應用,支持MavenAnt等打包部署的安裝方案; 
 
5).一鍵式更新源: 
    執行AppDeploy自定義命令(update_source)更新系統源,支持UbuntuCentosRedhatOpensuseDebian等系統的主流版本; 
 
6).文件上傳下載: 
    您可以使用AppDeploy在本地主機和遠程服務器間實現上傳、下載文件(夾)的功能;不僅實現了ftp的功能,還可以遠程執行管理命令; 
 
7).並發控制機器: 
    基於軟件的部署場景,提供同時在多台服務器部署的功能,且可以選擇順序執行或者並發執行的運行模式;上面敘述的功能都可以使用並發模式在多服務器間同時運行。 
 
8).賬號密碼管理: 
    提供靈活、易用的賬號管理功能,用戶可以設置免密碼輸入運行,且可為不同主機設置不同密碼; 
 
 
2.AppDeploy的安裝配置 
AppDeploy支持在WindowsLinuxMac系統下使用,遠端服務器當前只支持Linux系統。根據不同系統分別介紹安裝步驟(以Python版為例,普通版類似): 
 
Linux系統平台安裝: 
請預先安裝好python2.7;(一般安裝在/usr/local/lib/python2.7 
1).通過阿里雲市場下載AppDeploy源碼安裝包 - AppDeploy-Python-1.0.0.tar.gz 
 
2).解壓:$ tar –zvxf AppDeploy-Python-1.0.0.tar.gz;得到AppDeploy-Python-1.0.0-Linux.tar.gz; 
    解壓:$ tar –zvxf AppDeploy-Python-1.0.0-Linux.tar.gz 
 
 
3).執行:$ cd AppDeploy-Python && sudo python setup.py install 安裝appdeploy 
 
 
4).執行:$ adep命令,若果能找到命令說明安裝完成(下圖表示安裝成功); 
     
Windows系統安裝: 
預先安裝好python2.7;(一般安裝在C:/Python27); 
1).通過阿里雲市場下載AppDeploy windows安裝包 - AppDeploy-Python-1.0.1.zip 
 
 
2).解壓:$ tar –zvxf AppDeploy-Python-1.0.1.tar.gz ->AppDeploy-Python-1.0.1-Windows.tar.gz; 
 
 
3).解壓:$ tar –zvxf AppDeploy-Python-1.0.1-Windows.tar.gz;解壓后可以發現一個安裝文件setup.exe安裝包,即為AppDeploy的安裝文件; 
 
 
4).雙擊setup.exe,雙擊setup.exe(確定預先安裝python2.7),出現如下AppDeploy的安裝視圖,安裝目錄應該選擇Python2.7的安裝目錄下的Lib\site-packets子目錄; 
     
5).根據向導直到安裝完成; 
6).設置環境變量: 
  環境變量一般為自動設置,不過這里您可以確認一下,以保證正常運行; 
  右鍵“計算機” – 選擇屬性– 選擇“高級系統設置”– 選擇高級– 選擇“環境變量”:添加環境變量,名字(APPDEPLOY)值(C:\Python27\Lib\site-packages);在path系統變量中添加“C:\Python27;%APPDEPLOY%; C:\Python27;”,分別為Python2.7的安裝目錄和AppDeploy的安裝目錄; 
 
 
7).驗證:打開cmd命令行工具, 
  輸入:python,如果能運行,則說明python已經可用; 
  輸入:adep,如果顯示下面日志,則說明安裝成功; 
    

 
Mac系統安裝:(請預先安裝好python2.7
1). 下載AppDeploy-python-1.0.1.tar.gz ,解壓可以得到AppDeploy- python-1.0.1-Mac.zip  的壓縮包,解壓AppDeploy- python-1.0.1-Mac.zip ,得到pycrypto-2.6.1.tar.gz& AppDeploy- python-1.0.1.tar.gz
 
2). 若您系統中尚未安裝pycrypto-2.6.1.tar.gz ,解壓后進入pycrypto-2.6.1 ,執行$ sudopython setup.py install 若已經安裝,直接進入步驟3

 
 
 

3). 解壓AppDeploy-python-1.0.1.tar.gz ,進入appdeploy-python-1.0.1 后執行$ sudo pythonsetup.py install

 
 
 
4).進入命令行執行$ adep,出現如下視圖說明安裝成功: 

  

 
3.基本使用方法 
AppDeploy的使用格式是在命令行執行adep + 參數 的命令格式運行,其執行的任務依據是根據其當前工作目錄下的appdeploy.py(默認)這個python文件作為執行描述文件,若用戶有自定義的描述文件,可用”-f”參數指定。使用方式細分有兩種: 
 
 
1)通過命令行,直接執行命令 
格式:$ adep[options] -- [shell command] 

   Option:為命令選項定義執行參數; 
  “--”:雙橫線,為分割符將前面的參數和后面的shell命令分開; 
    [shell command]shell命令,會被在遠端服務器執行;

 
常用的option選項: 
      
例如:查看服務器nginx運行情況 
$ adep -H '101.200.184.144' -u root -p xxxx -- ps-aux | grep nginx 
     
PS:上面方式使用方便,可以靈活、快速的執行您想執行的命令,但實現的功能相對簡單,大部分情況下,您可以使用下面的方式實現您的具體任務; 
 
 
2)通過編輯appdeploy.py文件,以任務方式執行 
appdeploy.py文件中定義函數(任務的實現細節),並在命令行的當前目錄下執行$ adeptask1 task2(文件中定義的函數名)的方式依次執行定義的任務; 
appdeploy.py的編寫規則: 
     

下面分別介紹AppDeploy 自定義的環境變量、操作命令、修飾符、並發執行等細節。
 

 
4.獲取設置Access Key 
因為AppDeploy工具基於阿里雲產品設計實現,其某些功能會基於阿里雲OpenApi實現,所以需要設置Access Key的值以獲取調用OpenApi的資格。 
 
 
獲取Access Key的方法請參考:http://bbs.aliyun.com/read/253666.html?spm=5176.7189909.0.0.l1LU3c&fpage=2 
得到的Access KeyIDAccess Key Secret通過以下方式配置到AppDeploy中: 

Appdeploy.py 描述文件中設置env.ak_id(Access Key ID) env.ak_sec(AccessKey Secret) 變量;如下圖所示:

 
      
5.環境變量 

AppDeploy 工具通過自定義的環境變量來提高程序的可讀性、以及描述文件的靈活性等;以下是常用的環境變量及其說明:
   
Hosts 變量詳細說明:
用來定義需要連接的服務器地址集,在執行appdeploy.py 中任務時會在hosts 定義的每個服務器上運行一遍;定義格式:
env.hosts = ['host1', 'host2']: 表示兩個遠端服務器,分別是host1host2.
env.hosts = ['host1', 'user2@host2', 'host3'] : 表示一共三個遠端服務器host1 host2 host3 ,其中host2 使用user2 用戶名登錄,host1 host3 的用戶名使用env.user 定義的值;
 
例如:在appdeploy.py 中定義:
env.hosts = ['host1', 'host2']
def task1():
    run(ls)

 

則執行:$ adeptask1 時,會在host1 host2 上分別執行ls 命令;

 

 
User 詳細說明:
定義遠程服務器的登錄名,如果沒有定義,則默認為本地機器的當前用戶名;
例如:
env.user = 'user1'
 
Password & Passwords 詳細說明:
首先推薦使用SSH 提供的密鑰管理機制來實現免密碼輸入模式,可查閱資料;這里着重介紹AppDeploy 提供的密碼管理方案。
 
AppDeploy 提供了兩層管理密碼的機制:
如果您的servers 的密碼都相同,可以通過在env.password 中設置統一密碼;
如果每個server 的密碼不同,可以在env.passwords 中設置host password 對應表(Json 格式),對每個server 設置單獨的密碼;host 的格式:user@host:port
例如:

 

env.password=’xxxxx’   統一密碼;
env.passwords={'root@101.200.184.144:22':’xxx’, 'root@123.57.228.240:22':’yyy’}

 

 
parallel 詳細說明:
Parallel 設置時表明指定的任務在不同的服務器之間並發執行;格式為在任務前面:@parallel(pool_size=5) ,其中pool_size 指最多同時並發的個數,若不指定pool_size ,則默認不加限制;
定義了parallel 只是一個任務在多個服務器之間並行,但不同的任務之間還是順序執行;
例如:
@parallel
def task1():
    pass
def task2():
    pass
$ adep -H host1,host2,host3 task1task2

 

結果:
Task1 on host1, host2, andhost3
Task2 on host1
Task2 on host2
Task2 on host3
 
Roledefs & Roles 詳細說明:
AppDeploy 可以為服務器地址定義組,用戶可以基於不同組完成不同集群的部署,這樣用戶可以根據自己的業務定義不同的組群。格式為JSON 實現格式。
Roles Hosts 一樣,都可以指定服務器地址集合,只是Roles 引用的服務器地址是經過Roledefs 定義的組名。
例如:
env.roledefs = {
   'apphosts': [‘host1', 'host2', 'host3'],
   'webhosts': ['host3', 'host4']
}
@roles('apphosts')
@hosts('host3', 'host5')
def task1():
    run('ls/var/www')

 

執行:$ adeptask1

 

會在host1 host2 host3 host5 依次執行,host3 出現兩次,被合並;
 

 
6.執行命令 
環境變量定義任務執行的相關環境參數:如用戶名、密碼等,而任務的具體執行是很多具體指令組成的,下面是AppDeploy自定義的執行命令集; 
   

Get 命令詳細說明:
Get 命令的功能是下載遠端服務器上的文件或文件夾,根據不同常見可以如下格式:
get('/path/to/remote_file.txt', 'local_dir')
新建local_dir 並保存文件;
get('/var/log/apache2/access.log', '%(path)s')
下載access.log 的文件,保存在相同目錄;
get('/var/log', '%(path)s')
遞歸下載/var/log 下面所有文件;
get('/var/log', ‘%(host)s/%(path)s’)
多個host 時,保存在不同目錄;
 
Put 命令詳細說明:
Put 命令功能是將本地的文件、文件夾上傳到遠端服務器(一台或多台);
put('/path/test.txt', '/root/') 將本地文件test.txt上傳到指定的服務器/root下;
put('/path/test', '/root/')  將本地文件夾下面所有文件上傳到指定服務器/root 下;
put('/path/test.txt', '/root/')  將本地文件test.txt 上傳到指定的服務器/root 下,並設置權限;

 

 
Prompt 命令詳細說明:
Prompt 命令為用戶提供一種交互式的選擇功能,可以在程序運行時跳出選項供選擇:
env = prompt('Please specify target environment: ')可以在運行時輸入內容,並保存在env中;
prompt('Specify dish: ', 'dish', default='spam & eggs') 設置默認輸入內容,不輸入是用默認值;
prompt('Please specify level: ', key='nice', validate=int) 設定輸入的內容只能是整數;

 

 

 
7.修飾符

AppDeploy 通過定義修飾符來靈活的執行appdeploy.py 中的任務,常用的修飾符有:hosts parallel roles serial task 等,分別用例子描述他們的使用方法;
 
Hosts 修飾符:
hosts 即為環境變量的名字,也可以用作修飾符來定義任務目標服務器。
 

 

@hosts('user1@host1', 'host2','user3@host3')
def task1():
    pass
上例表明task1 會在host1 host2 host3 三個服務器上執行,其中在host1 host3 上分別用user1 user3 登錄,host2 上用env.user 定義的用戶名登錄。
 
Parallel 修飾符
@parallel 修飾符表明修飾的任務會在多個服務器之間並發執行;
env.hosts = [‘host1’, ‘host2’]
@parallel
def task1():
    pass

 

執行$ adeptask1 時,task1 會在host1 host2 上同時執行;
 
Task 修飾符:
@task 含義是:如果一個appdeploy.py 中使用了@task ,則所有函數都不再默認為任務(不對adep 命令可用),除非其前面標示了@task 標示。如果appdeploy.py 中沒有任務前面使     用@task 標示,則所有函數都會默認為任務,可以被用戶調用;
例如:
@task
def task1():
   run("ls")
def task2():
    run("pwd")
$ adep –list

 

結果是:task2 被看作appdeploy.py 的內部函數,不被暴漏給用戶使用。
Available commands:
    task1
 
serial 修飾符:

 

@serial 的含義和@parallel 相反,作用是:如果全局設置了並發執行,但某個任務前面使用了@serial 參數,則這個任務依然用順序執行模式。
 

 
以上內容從AK設置、環境變量、自定義命令、修飾符等方面描述了AppDeploy的使用方法,下面以一個具體例子將上面內容展現出來。 

 
# -*- coding: utf-8 -*-  
from src.api import * 
 
env.ak_id="xxx"                                          
env.ak_sec="xxx"                                         
env.user = 'root'                                           
env.password='xxx'                                       
env.hosts = ['101.200.184.144','root@123.57.53.193:22'] 
env.roledefs = {                                         
   'apphosts': ['101.200.184.144'], 
   'webhosts': ['root@123.57.53.193:22'] 

 
@task                                                   
def file_copy(): 
   put('./test', '/root/')                              
   get('/root/test', './test')                          
 
@task 
@roles('webhosts')                                       
def remote_exec(cmd): 
   local('echo "run your cmd on remote hosts"')         
   run(cmd)                                             
 
def useless():                                           
   run('pwd')
 
 
 
 
# Access Key ID 
# Access Key Secret 
統一用戶名 
統一密碼 
定義hosts變量 
定義不同用戶組 
 
 
 
 
表明這個函數可以被執行 
 
上傳文件夾 
下載文件夾 
 
 
指定服務器集群 
 
本地執行命令 
遠程執行命令 
 
沒有@task,不能被執行

 
 
 
8.上傳下載文件(夾) 
 
 
AppDeploy對文件的上傳、下載提供兩種實現方式: 
一種方式:是在appdeploy.py中定義文件上傳下載的任務,然后再命令行執行$ adep task以實現文件的上傳下載功能。這種方式可以實現復雜邏輯的上傳下載功能,例如:上傳不同目錄下、不同服務器的文件,但使用稍微繁瑣,簡單的上傳下載功能參考方式二。 
 
 
另一種方式:直接使用adep 的命令行,格式如下: 
$ adep put:local_file,remote_dir 
$ adep get:remote_file,local_dir 
注意上述命令中沒有空格,若目錄中空格,可以用引號擴起來。下面是一些例子供參考: 
 
 
1)將本地文件a.txt上傳到服務器/root/目錄下; 
    
2)本地”D:\ProgramFiles\”目錄下的b.txt上傳到服務器/root/目錄下; 
    
3)將服務器/root/b.txt文件下載到本地; 
    
4)將本地的./test/目錄(及包含文件)上傳到服務器/root/下面; 
    
5)下面服務器/root/test目錄到本地的./test1/目錄下; 
    
9.遠程執行命令 
AppDeploy工具內置了run指令做遠程執行命令,在編輯appdeploy.py中的任務時使用run命令可以輕松實現遠程執行,而在命令行想執行一個遠程命令如何實現呢? 
AppDeploy提供了兩種實現方式: 
 
 
一種方式:在命令行執行$ adep [options] -- [shell command] option為命令的參數。 
例如:查看服務器/root/test/文件夾里的文件列表; 
     
另一種方式:在命令行中使用 $ adep run:”shell command”,需要注意的是run和后面的shell 命令之間用“:”連接,且無空格,如果shell命令有空格,請用引號將其引起來。 
     
10.一鍵更新源站 
買好了ECS機器,安裝完了系統,大部分用戶都需要更新系統源這個任務。AppDeploy為大家搜集了阿里雲服務器上最常用、高效的源站鏈接,並提供一鍵更新的功能。此功能已經支持UbuntuCentosFedoraOpensuseDebainUnix系統。 
 
 
更新源站命令: $ adep update_source 
        
11.並發執行

Appdeploy 默認是串行執行所有命令的。但在設定參數的情況下可以實現並發執行任務。
AppDeploy 有兩種方式並發執行任務:
1) 在命令行執行任務時添加-P  選項,則執行的所有任務都會在不同的服務器之間並發執行,但不同任務之間依然按照順序執行進行;
例如:

 

$ adep -P -H host1,host2update reload
執行結果
update on host1 and host2
reload on host1 and host2
 
2) 通過在appdeploy.py 文件中的任務前面添加@parallel 來表明某個任務會被並行執行;
例如:

 

def task1():
    pass
@parallel
def task2():
    pass
$adep -H host1,host2,host3 task1 task2
結果:
Task1 on host1
Task1 on host2
Task1 on host3
Task2 on host1,host2, and host3
$adep -P -H host1,host2,host3 task1 task2
結果:(-P 參數會覆蓋appdeploy 中的定義)
Task1 on host1,host2, and host3
Task2 on host1,host2, and host3

 
 
 
此類命令是基於用戶工作習慣的總結,如果您有想新添加的功能或快捷方式,請與我們聯系,我們會考慮將您需要的功能添加到工具的下個版本。 
 
 
AppDeploy設計之初的重點研究對象就是應用部署,然而工具在開發初期更多的側重於底層信息流的互通和通用功能的實現。當前AppDeploy工具對應用部署的支持還不是很全面,這正是我們近期需要加強的地方。 
 
 
應用的部署相關工作可分為:服務器端的運行環境安裝、應用的編譯打包、應用的上傳部署; 
 
 
12.服務器端的運行環境安裝 
當前[font=&amp]AppDeploy更多側重w[font=&amp]eb服務器安裝,[font=&amp]AppDeploy支持常用W[font=&amp]eb環境的一鍵安裝功能,支持的環境和版本見下表: 
       
然而上述有些環境在不同操作系統上依賴庫、安裝細節等都不相同,所以當前無法保證以上工具能在所有操作系統環境安裝無誤,若出現安裝失敗,請查看錯誤日志或聯系我們的郵箱。 安裝步驟如下: 
1)編輯appdeploy.py文件,輸入希望運行的web環境組件。 
2)定義一個任務,任務中調用appdeploy的內置函數:install_runtime(para),參數para為想要安裝的web組件細節,使用json格式輸入。  
3)在命令行執行執行:$adep runtime即可。 
 
例子1服務器上安裝Jdk-1.7.0Tomcat-7.0.63的運行環境 
1)appdeploy.py中定義任務runtime,並調用install_runtime(compontens)函數,參數為要安裝的jdktomcat版本號,用json格式輸入。  

def runtime():   componets={"jdk"    :"1.7.0", 
           "tomcat"  :"7.0.63"  } 
    install_runtime(componets)

 
2)在命令行執行:$ adep runtime執行安裝過程, 
     
 
3)IE中輸入訪問地址,驗證安裝結果,下圖表明tomcat已經安裝成功 
    [attachment=81519] 
 
例子2:服務器上安裝apacheTomcat-7.0.63的運行環境 
1)appdeploy.py中定義任務runtime,並調用install_runtime(compontens)函數,參數為要安裝的ApachePHP版本號,用json格式輸入。  

def runtime():    componets={" apache"    : " 2.2.31", 
           "php"        : "5.0",              } 
    install_runtime(componets)

 
2)在命令行執行:$ adep runtime執行安裝過程, 
    [attachment=81520] 
 
3)IE中輸入訪問地址,驗證安裝結果,下圖表明PHP已經安裝成功(hello.php是環境安裝后放到php指定目錄下的文件); 
    [attachment=81521] 
 
13.應用打包部署 
例子1:將本地Java應用部署到服務器。 
結合上面環境安裝的例子(1),將本地一個java應用部署到服務器。 
 
1)appdeploy.py中添加如下任務,任務中定義:打包工具、本地項目目錄、服務器端的web應用目錄,並調用打包、部署命令packagedeploy接口。 

def pack_deploy():   componets={"package_tool": "maven", 
              "project_dir" : "/home/xxx/src/example/maven/myFirstWebApp",               
              "web_dir"   :"/alidata/server/tomcat/webapps" 
               }  
    package(componets) 
    deploy(componets)

 
2)在命令行輸入命令:$ adep pack_deploy執行打包部署任務,如下: 
    [attachment=81522] 
 
3)IE上輸入應用地址,檢查部署效果。下圖表示應用部署成功: 
    [attachment=81523] 
 
應用部署是AppDeploy以后重點研究方向,我們深知當前做的還很有限,也正是借此機會和廣大開發者交流,希望您能把工具的不足之處和您自己的需求發送給我們,一起把應用部署方案做到更新、更方便使用。 
 

旺旺賬號: 阿雲開發者效率
 
歡迎下載使用阿里雲AppDeploy ,期待您的反饋和建議!!

 
普通版: 
http://market.aliyun.com/products/53690006/cmgj000331.html?spm=5176.900004.4.2.iTWBiC 
Python版: 
http://market.aliyun.com/products/53690006/cmgj000321.html?spm=5176.9000004.0.0.8AlNTY

阿里雲運維部署工具AppDeploy詳細教程|雲虛擬主機 - 開發者論壇
https://bbs.aliyun.com/read/253884.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM