本帖在ECS板块分开发过几个帖子,现在整合在一个帖子里,希望对大家有所帮助。
欢迎大家使用阿里云运维部署工具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
环境,当前支持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
命令,若果能找到命令说明安装完成(下图表示安装成功);
[attachment=81615]
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
子目录;
[attachment=81616]
5).
根据向导直到安装完成;
6).
设置环境变量:
环境变量一般为自动设置,不过这里您可以确认一下,以保证正常运行;
右键“计算机” –
选择属性–
选择“高级系统设置”–
选择高级–
选择
“环境变量”:添加环境变量,名字(APPDEPLOY
)值(C:\Python27\Lib\site-packages
);在path
系统变量中添加“C:\Python27;%APPDEPLOY%; C:\Python27;
”,
分别为Python2.7
的安装目录和AppDeploy
的安装目录;
7).
验证:打开cmd
命令行工具,
输入:python
,如果能运行,则说明python
已经可用;
输入:adep
,如果显示下面日志,则说明安装成功;
[attachment=81617]
Option:为命令选项定义执行参数; “--”:双横线,为分割符将前面的参数和后面的shell命令分开; [shell command]:shell命令,会被在远端服务器执行; |
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')
|
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)
设定输入的内容只能是整数;
|
env.hosts = [‘host1’, ‘host2’]
@parallel
def task1():
pass
|
@task
def task1():
run("ls")
def task2():
run("pwd")
$ adep –list
|
# -*- 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,不能被执行 |
def runtime(): componets={"jdk" :"1.7.0", "tomcat" :"7.0.63" } install_runtime(componets) |
def runtime(): componets={" apache" : " 2.2.31", "php" : "5.0", } install_runtime(componets) |
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) |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。