每一个不曾起舞的日子都是对生命的辜负。
安装方法:HomeBrew官网,打开终端窗口,粘贴以下脚本,/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
jre-8u65-macosx-x64.dmg
文件;Maven
打开Terminal,进入到$ vi ~/.bash_profile
,设置Maven ClassPath;
|
|
重启bash_profile
,使配置生效,$ source ~/.bash_profile
;
mvn -v
查看Maven是否安装成功。Gradle
mv Downloads/gradle-2.14.1 /usr/local
;打开Terminal,进入到$ vi ~/.bash_profile
,设置Gradle ClassPath;
|
|
重启bash_profile
,使配置生效,$ source ~/.bash_profile
;
gradle -version
查看Maven是否安装成功。brew install ansible
Ant
mv Downloads/apache-ant-1.9.7 /usr/local
;打开Terminal,进入到$ vi ~/.bash_profile
,设置Gradle ClassPath;
|
|
重启bash_profile
,使配置生效,$ source ~/.bash_profile
;
ant -version
查看Ant是否安装成功。brew update
brew install ruby
ruby --version
gem install rails
brew install python
Virtual Box网站,直接下载安装Virtual Box。
Ubuntu14.04 Desktop版
Ubuntu14.04 Server版
进入虚拟机,输入sudo vim /etc/ssh/sshd_config
,将端口号改为2222即可。
PS:更新Ubuntu Server到最新的版本sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
设置IP地址、子网掩码、网关:sudo vim /etc/network/interfaces
,重启文件sudo /etc/init.d/networking restart
动态IP地址:
|
|
静态IP地址:
|
|
PS: 关闭网卡sudo ifconfig eth0 down
打开网卡sudo ifconfig eth0 up
重启sudo /etc/init.d/networking restart
sudo vim /etc/resolv.conf
ssh-keygen
;编辑虚拟机ssh配置,开启ssh,vim /etc/ssh/sshd_config
;
|
|
重启ssh服务,service sshd restart
;
netstat -tlnp | grep ssh
;vim /root/.ssh/authorized_keys
,把MAC上的id_rsa.pub复制在这个文件里;ssh sakura@192.128.56.100
就可以进入虚拟机。“Ansible is Simple IT Automation”——简单的自动化IT工具。它可以让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。就是批量的在远程服务器上执行命令。最主要的是它是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
Ansilbe通过SSH协议进行管理节点和远程节点之间的通信。理论上说管理员通过ssh到一台远程主机上能做的操作Ansible都可以做。
安装:
* `$ sudo pip install ansible`
`升级 $ pip install –upgrade ansible`
* `$ git clone git://github.com/ansible/ansible.git`
`$ cd ansible && sudo make&&make install`
Ansible工作机制:
Inventory:定义Ansible管理主机的清单。
配置免密钥登陆
为了避免Ansible下发指令时输入目标主机密码,通过证书签名达到SSH无密码登录,使用ssh-keygen与ssh-copy-id来实现快速证书的生成和公钥下发,其中ssh-keygen生成一对密钥,使用ssh-copy-id来下发生成的公钥。具体操作如下:ssh-keygen -t rsa -P ''
ssh-copy-id -i .ssh/id_rsa.pub deploy@192.168.1.100
ssh-copy-id -i .ssh/id_rsa.pub deploy@192.168.1.101
playbook 是一个不同于使用Ansible命令行执行方式的模式。简单来说,playbook是一个非常简单的配置管理系统,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
Playbook组成
Target section
,定义将要执行的playbook的远程主机组;Variable section
,定义playbook运行时需要使用的变量;Task section
,定义将要在远程主机上执行的任务列表;Handler section
,定义task执行完成以后需要调用的任务。运行Playbook
$ ansible-playbook playbook.yml –v
$ ansible-playbook playbook.yml –list-hosts
$ ansible-playbook playbook.yml –list-tasks
Ansible通过读取默认的主机清单配置/etc/ansible/hosts
,可以同时连接到多个远程主机上执行任务,默认路径可以通过修改ansible.cfg
的hostfile参数指定路径。
/etc/ansible/hosts
主机清单配置格式如下:
shell模块
默认情况下,ansible使用的module是command,这个模块不支持shell变量和管道,若想使用shell来执行模块,使用-m参数指定shell模块,但是值得注意的是普通的命令执行模块是通过python的ssh执行。
使用shell模块在远程主机上执行命令:$ ansible web -m shell -a ‘echo $TERM’
raw模块
Raw也是命令执行模块,而raw模块则是直接用ssh模块进行执行,通常用在客户机还没有python的环境的时候。
使用raw模块在远程主机上执行命令:$ansible web -m raw -a ‘echo $TERM’
copy模块
实现主控端向目标主机拷贝文件,类似于scp的功能。
拷贝本地的/etc/hosts文件到web主机组所有主机的/tmp/hosts(空目录除外),$ ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"
file模块
file模块称之为文件属性模块,可以做的操作如下:
$ ansible web -m file -a "dest=/tmp/zhao/a.txt state=touch"
$ ansible web -m file -a "dest=/tmp/zhao/a.txt mode=600"
$ ansible web -m file -a "dest=/tmp/zhao/b.txt mode=600 owner=deploy group=root"
$ ansible web -m file -a "dest=/tmp/yong mode=755 owner=deploy group=sa state=directory"
$ ansible web -m file -a "dest=/tmp/yong state=absent"
template模块
template使用了Jinjia2格式作为文件模板,进行文档内变量的替换的模块。每次使用都会被ansible标记为changed状态。
stat模块
获取远程文件状态信息,包含atime、ctime、mtime、md5、uid、gid等。$ ansible web -m stat -a "path=/tmp/zhao/a.txt"
管理软件模块
apt、yum模块分别用于管理ubuntu系列和redhat系列系统软件包。Ansible支持很多操作系统的软件包管理,使用时 -m
指定相应的软件包管理工具模块。如果没有这样的模块,可以自己定义类似的模块或者使用command模块
来安装软件包。
$ ansible web -m yum -a "name=nginx state=present"
$ ansible web -m apt -a "name=nginx state=present"
$ ansible web -m yum -a "name=nginx-1.6.2 state=present"
$ ansible web -m apt -a "name=nginx-1.6.2 state=present"
$ ansible web -m yum -a "name=php55w enablerepo= remi state=present"
$ ansible web -m yum -a "name=nginx state=latest"
$ ansible web -m apt -a "name=nginx state=latest"
$ ansible web -m yum -a "name=nginx state=absent"
$ ansible web –m apt -a "name=nginx state=absent"
user模块
使用user模块对于创建新用户和更改、删除已存在用户非常方便。
$ ansible all -m user -a "name=sakura password=$6$YyF5qLN8$edF1l.d/xcd9kv4ZQD/VVq5g2Uavlwoo/l.W4YVIQgsNghN4CbJKSEdZ5ihxztkYJ.bZV2PCP6MnGOioSLqUK."
$ ansible all -m user -a "name=zhao state=absent"
service模块
$ ansible web -m service -a "name=httpd state=started"
$ ansible web -m service -a "name=httpd state=restarted"
$ ansible web -m service -a "name=httpd state=stopped"
直接使用brew install vagrant
,Vagrant官网。
mkdir ~/Vagrant
;cd Vagrant
,输入vagrant box add [name/version]
,虚拟机的版本可以在版本网站选择;下载完成后进入到虚拟机,使用vagrant init
,vagrant up
,vagrant ssh
,logout
的命令初始化,启动,进入以及登出,如果想要完全移除一个vagrant box,使用vagrant box remove
命令。
Vagrant常用命令
VagrantFile
里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。
Vagrant.configure("2") do |config|
end
box设置config.vm.box = "base"
Vagrant要去启用哪个box作为系统,也就是上面我们输入vagrant init Box名称
时所指定的box,如果没有输入box名称,那么默认就是base。
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"]
end
调用VBoxManage的modifyvm的命令,设置VM的名称为astaxie,内存为512MB。
config.vm.hostname = "go-app"
config.vm.synced_folder "/Users/astaxie/data", "/vagrant_data"
/vagrant
目录默认就是当前的开发目录,它在虚拟机开启的时候默认挂载同步的。第一个参数是主机的目录,第二个参数是虚拟机挂载的目录。端口转发config.vm.network :forwarded_port, guest: 80, host: 8080
把对host机器上8080端口的访问请求forward到虚拟机的80端口的服务上,例如你在你的虚拟机上使用nginx跑了一个Go应用,那么你在host机器上的浏览器中打开http://localhost:8080时,Vagrant就会把这个请求转发到VM里面跑在80端口的nginx服务上。
|
|
修改完Vagrantfile的配置后,记得要用vagrant reload命令来重启VM之后才能使用VM更新后的配置
想要让虚拟机作为一台服务器,就需要让主机与虚拟机之间通过网络连接在一起,配置虚拟机的网络的设置,就可以让主机可以访问到虚拟机。可以通过 VagrantFile 去配置虚拟机的网络,Vagrant 提供了三种方法:端口转发
,公有网络
,私有网络
。
config.vm.network "forwarded_port", guest: 80, host: 8080
的注释。config.vm.network
是 vm 的 network 网络配置是 forwarded_port,要转发到虚拟机(guest)上的端口是 80,转发的是主机(host)上的 8080 端口。Vagrant.configure("2") do |config|
config.vm.network :public_network
end
Vagrant.configure("2") do |config|
config.vm.network :private_network, ip: "192.168.50.4"
end
使用vagrant ssh命令登陆虚拟机必须切换到VagrantFile所在的目录,而直接使用虚拟机IP登陆虚拟机则更为方便:
ssh vagrant@192.168.56.100
此时SSH登陆需要输入虚拟机vagrant用户的密码,即vagrant
将主机的公钥复制到虚拟机的authorized_keys文件中即可实现SSH无密码登陆:
cat $HOME/.ssh/id_rsa.pub | ssh vagrant@127.0.0.1 -p 2222 'cat >> $HOME/.ssh/authorized_keys'
其中,2222是主机SSH登陆虚拟机的转发端口,可以通过以下命令查看:
vagrant ssh-config | grep Port
Port 2222
此时SSH登陆虚拟机则不再需要输入密码。
1234567891011121314151617181920212223242526272829303132333435363738
Vagrant.configure("2") do |config| config.vm.define :ansible do |ansible| ansible.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "ansible", "--memory", "2048"] end ansible.vm.box = "ubuntu/trusty64" ansible.vm.hostname = "ansible" ansible.vm.network :private_network, ip: "192.168.33.100" ansible.vm.provision :shell, path: "ansible.sh" ansible.vm.provision "ansible_local" do |ansible| ansible.inventory_path = "./hosts" ansible.limit = "all" ansible.playbook = "ansible.yml" end end config.vm.define :web do |web| web.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "web", "--memory", "2048"] end web.vm.box = "ubuntu/trusty64" web.vm.hostname = "web" web.vm.network :private_network, ip: "192.168.33.201" end config.vm.define :db do |db| db.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "db", "--memory", "2048"] end db.vm.box = "ubuntu/trusty64" db.vm.hostname = "db" db.vm.network :private_network, ip: "192.168.33.202" endend
`:web`和`:db`定义了两个VM,设置完后再使用`vagrant up`启动。可以通过`vagrant ssh web`和`vagrant ssh db`分别登录指定虚拟机上。
验证两台虚拟机间的通信: (验证方法: 在web虚拟机上通过ssh登录到db虚拟机)
123
vagrant ssh web@web: ssh 192.168.33.202@db:
|
|
Provision就是嵌入了一段Shell脚本进行软件的安装和配置,当然也可以安装其他所需要的软件。修改此段内容之后,重新创建虚拟机需要使用”–provision”选项。
在VagrantFile同级路径下,创建ansible.sh
、hosts
和ansible.yml
。代码如下:
admin1
,admin
。步骤与github相同,只需要把虚拟机的ssh放到gogs的SSH Keys里。
以上两个步骤参考4.5。