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環境,當前支持Java、Nginx、Apache、Tomcat、PHP、Mysql等多款環境,可以根據具體業務選擇適合工具的適合版本進行安裝;
4).一鍵應用部署:
可以一鍵編譯、打包、部署常見的應用,支持Maven、Ant等打包部署的安裝方案;
5).一鍵式更新源:
執行AppDeploy自定義命令(update_source)更新系統源,支持Ubuntu、Centos、Redhat、Opensuse、Debian等系統的主流版本;
6).文件上傳下載:
您可以使用AppDeploy在本地主機和遠程服務器間實現上傳、下載文件(夾)的功能;不僅實現了ftp的功能,還可以遠程執行管理命令;
7).並發控制機器:
基於軟件的部署場景,提供同時在多台服務器部署的功能,且可以選擇順序執行或者並發執行的運行模式;上面敘述的功能都可以使用並發模式在多服務器間同時運行。
8).賬號密碼管理:
提供靈活、易用的賬號管理功能,用戶可以設置免密碼輸入運行,且可為不同主機設置不同密碼;
2.AppDeploy的安裝& 配置
AppDeploy支持在Windows、Linux、Mac系統下使用,遠端服務器當前只支持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,如果顯示下面日志,則說明安裝成功;
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的編寫規則:
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 KeyID和Access Key Secret通過以下方式配置到AppDeploy中:
5.環境變量

env.hosts = ['host1', 'host2']: 表示兩個遠端服務器,分別是host1和host2.
env.hosts = ['host1', 'user2@host2', 'host3']
: 表示一共三個遠端服務器host1
、host2
、host3
,其中host2
使用user2
用戶名登錄,host1
和host3
的用戶名使用env.user
定義的值;
|
env.hosts = ['host1', 'host2']
def task1():
run(ls)
|
@parallel
def task1():
pass
def task2():
pass
$ adep -H host1,host2,host3 task1task2
|
env.roledefs = {
'apphosts': [‘host1', 'host2', 'host3'],
'webhosts': ['host3', 'host4']
}
@roles('apphosts')
@hosts('host3', 'host5')
def task1():
run('ls/var/www')
|
6.執行命令
環境變量定義任務執行的相關環境參數:如用戶名、密碼等,而任務的具體執行是很多具體指令組成的,下面是AppDeploy自定義的執行命令集;
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('/path/test.txt', '/root/') 將本地文件test.txt上傳到指定的服務器/root下;
put('/path/test', '/root/')
將本地文件夾下面所有文件上傳到指定服務器/root
下;
put('/path/test.txt', '/root/')
將本地文件test.txt
上傳到指定的服務器/root
下,並設置權限;
|
env = prompt('Please specify target environment: ')可以在運行時輸入內容,並保存在env中;
prompt('Specify dish: ', 'dish', default='spam & eggs')
設置默認輸入內容,不輸入是用默認值;
prompt('Please specify level: ', key='nice', validate=int)
設定輸入的內容只能是整數;
|
7.修飾符
env.hosts = [‘host1’, ‘host2’]
@parallel
def task1():
pass
|
@task
def task1():
run("ls")
def task2():
run("pwd")
$ adep –list
|
以上內容從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為大家搜集了阿里雲服務器上最常用、高效的源站鏈接,並提供一鍵更新的功能。此功能已經支持Ubuntu、Centos、Fedora、Opensuse、Debain等Unix系統。
更新源站命令: $ adep update_source
11.並發執行
此類命令是基於用戶工作習慣的總結,如果您有想新添加的功能或快捷方式,請與我們聯系,我們會考慮將您需要的功能添加到工具的下個版本。
AppDeploy設計之初的重點研究對象就是應用部署,然而工具在開發初期更多的側重於底層信息流的互通和通用功能的實現。當前AppDeploy工具對應用部署的支持還不是很全面,這正是我們近期需要加強的地方。
應用的部署相關工作可分為:服務器端的運行環境安裝、應用的編譯打包、應用的上傳部署;
12.服務器端的運行環境安裝
當前[font=&]AppDeploy更多側重w[font=&]eb服務器安裝,[font=&]AppDeploy支持常用W[font=&]eb環境的一鍵安裝功能,支持的環境和版本見下表:
然而上述有些環境在不同操作系統上依賴庫、安裝細節等都不相同,所以當前無法保證以上工具能在所有操作系統環境安裝無誤,若出現安裝失敗,請查看錯誤日志或聯系我們的郵箱。 安裝步驟如下:
1)編輯appdeploy.py文件,輸入希望運行的web環境組件。
2)定義一個任務,任務中調用appdeploy的內置函數:install_runtime(para),參數para為想要安裝的web組件細節,使用json格式輸入。
3)在命令行執行執行:$adep runtime即可。
例子1:服務器上安裝Jdk-1.7.0和Tomcat-7.0.63的運行環境
1)在appdeploy.py中定義任務runtime,並調用install_runtime(compontens)函數,參數為要安裝的jdk、tomcat版本號,用json格式輸入。
def runtime(): componets={"jdk" :"1.7.0", "tomcat" :"7.0.63" } install_runtime(componets) |
2)在命令行執行:$ adep runtime執行安裝過程,
3)IE中輸入訪問地址,驗證安裝結果,下圖表明tomcat已經安裝成功。
[attachment=81519]
例子2:服務器上安裝apache和Tomcat-7.0.63的運行環境
1)在appdeploy.py中定義任務runtime,並調用install_runtime(compontens)函數,參數為要安裝的Apache、PHP版本號,用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應用目錄,並調用打包、部署命令package和deploy接口。
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以后重點研究方向,我們深知當前做的還很有限,也正是借此機會和廣大開發者交流,希望您能把工具的不足之處和您自己的需求發送給我們,一起把應用部署方案做到更新、更方便使用。
普通版:
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