目录
- NFS
- WEB
- 其它
我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
个人博客:传送阵
笔者微信:zhanghe15069028807
,非诚勿扰。
下面的内容是通过ad-hoc的方式部署nfs和httpd服务,主要的目的是通过这两个服务来练习ansible各种模块的使用,要求我们能熟练的手动部署httpd和nfs服务,然后才能掌握通过ansible的方式部署。
NFS
第一步:定义主机清单,确认各个主机的角色
[root@ansible ~]# vim /etc/ansible/hosts
[web]
192.168.80.62
[nfs]
192.168.80.63
[backup]
192.168.80.64
第二步:安装和配置NFS服务
//安装
[root@ansible ~]# ansible nfs -m yum -a "name=nfs-utils state=present"
//在ansible上写好配置文件,通过copy模块推送到nfs端
[root@ansible ~]# cat exports.template
/data 192.168.80.0/24(rw,all_squash,anonuid=666,anongid=666)
//查询copy模块的使用
[root@ansible ~]# ansible-doc copy
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: u+rw,g-wx,o-rwx
//src和dest都非常好理解,backup的意思是覆盖之前做一个备份
[root@ansible ~]# ansible nfs -m copy -a "src=./exports.template dest=/etc/exports owern=root group=root mode=644 backup=yes"
copy模块还有一个content参数,通过这个参数可以在目标主机的某个文件当中追加内容,例如:
ansible nfs -m copy -a "content='123' dest=/tmp/1.txt"
第三步:准备运行nfs的用户www
在这里要用到user模块和group模块。
gruop 所属组
groups 附加组,携带apped=yes
sdate状态:
absent 移除远程主机的组
present 创建远端主机的组,默认
[root@ansible ~]# ansible nfs -m group -a "name=www gid=666 state=present"
[root@ansible ~]# ansible nfs -m user -a "name=www uid=666 group=666 append=yes create_home=no shell=/sbin/nologin/"
第四步:创建/data目录,并指定权限
//如果是创建文件的话,就把state改成touch即可。
[root@ansible ~]# ansible nfs -m file -a "path=/data state=directory owner=www group=www mode=755"
第五步:启动服务并开机启动
启动服务要用到server模块,模块的状态有:stopped、started、restarted、reloaded、enabled(开机启动)
[root@ansible ~]# ansible nfs -m service -a "name=nfs-server state=started enabled=yes"
WEB
第一步:安装httpd服务
[root@ansible ~]# ansible web -m yum -a "name=httpd state=present"
第二步:开机启动httpd
[root@ansible ~]# ansible web -m service -a "name=httpd state=started enabled=yes"
第三步:通过mount模块挂载nfs共享文件夹
mount模块state用法:
- present 将配置写入到配置文件,不读入到内存
- mounted 读入内存并写入到/etc/fstab
- unmounted 仅卸载内存,不清理配置文件
- absent 即卸载内存,也清理配置文件/etc/fstab
[root@ansible ~]# ansible web -m mount -a "path=/var/www/html src=192.168.80.188:/data fstype=nfs opts=defaults state=mounted"
其它
定时任务模块
cron模块的用法:
name 添加定义任务的注释
user 指定定时任务写入到哪个用户下,默认root
minute 分
hour 时
day 日
month 月
weekday 周
job 任务
state 状态
present 创建定时任务,默认
[root@ansible ~]# ansible web -m cron -a "name='rsync scripts' minute=00 hour=01 day=* month=* weekday=* job='/bin/bash /server/scripts/rsync.sh&>/dev/null'"
解压模块
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
ansible web -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'
get_url模块
//将http://nginx.org/download/nginx-1.6.3.tar.gz文件下载到指定节点的/tmp 目录下
ansible web -m get_url -a 'url=http://nginx.org/download/nginx-1.6.3.tar.gz dest=/tmp'
创建可以登录的用户
这是user模块的补充,上面我们创建的是不能登录的用户,这里面我们要创建能登录的用户。
//首先生成加密后的密码,把cba-123加密
[root@ansible ~]# ansible all -i localhost, -m debug -a "msg={{'cba-123' | password_hash('sha512','mysecretsalt')}}"
localhost | SUCCESS => {
"msg": "$6$mysecretsalt$ik7T7vJzLOT58Wvsg/ee9PUEBiylK60YrCBrS260YwXyav2WV6sIs3TmSiSwWLXkHK4YeVSw8kYgApt/ArTOt0"
}
[root@ansible ~]# ansible nfs -m user -a 'name=zhanghe password=$6$mysecretsalt$ik7T7vJzLOT58Wvsg/ee9PUEBiylK60YrCBrS260YwXyav2WV6sIs3TmSiSwWLXkHK4YeVSw8kYgApt/ArTOt0 create_home=yes shell=/bin/bash'
//把公钥一块创建出来
[root@ansible ~]# ansible nfs -m user -a "user=zhanghe generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"