ad-hoc实战

要求:利用Ansible搭建一个简易的作业网站,web端文件上传目录共享至nfs端,nfs的数据同步至backup

环境准备

主机名 主机角色 外网IP 内网IP
m01 ansible管理端 10.0.0.61 172.16.1.61
backup ansible被管理端、rsync服务端、nfs服务端 10.0.0.41 172.16.1.41
nfs ansible被管理端、rsync客户端、nfs服务端 10.0.0.31 172.16.1.31
web03 ansible被管理端、部署提交作业代码,挂载上传目录即可 10.0.0.9 172.16.1.9

Ansible管理端环境准备

# 定义管理清单
[root@m01 ~]$ vim /etc/ansible/hosts
[zy_php]
web03 ansible_ssh_host=172.16.1.9
backup ansible_ssh_host=172.16.1.41
nfs ansible_ssh_host=172.16.1.31 # 下发私钥
[root@m01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.9
[root@m01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
[root@m01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31

Rsync服务部署

常规步骤

# 1.创建统一用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M # 2.安装rsync
yum install -y rsync # 3.修改配置文件
[root@backup ~]$ vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#--------------------------------------------------------------
[zy_backup]
comment = welcome to oldboyedu backup!
path = /backup # 4.创建备份目录
mkdir /backup # 5.修改备份目录权限
chown www.www /backup # 6.创建虚拟用户密码文件
echo 'rsync_backup:123' > /etc/rsync.passwd # 7.修改密码文件权限为600
chmod 600 /etc/rsync.passwd # 8.启动服务
systemctl start rsyncd # 9.加入开机自启
systemctl enable rsyncd

Ansible步骤

# 1.创建统一用户
ansible backup -m group -a 'name=www gid=666 state=present'
ansible backup -m user -a 'name=www uid=666 group=666 shell=/sbin/nologin create_home=no state=present' # 2.安装rsync
ansible bakcup -m yum -a 'name=rsync state=present' # 3.修改配置文件
ansible backup -m copy -a 'src=/root/rsync.mb dest=/etc/rsyncd.conf owner=root group=root mode=0644' vim /root/rsync_mb
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#--------------------------------------------------------------
[zy_backup]
comment = welcome to oldboyedu backup!
path = /backup # 4.创建备份目录并更改属组属主
ansible backup -m file -a 'path=/backup owner=www group=www mode=0755 state=directory' # 5.创建密码文件并更改权限为600
ansible backup -m copy -a 'content="rsync_backup:123" dest=/etc/rsync.passwd owner=root group=root mode=0600' # 6.启动服务并加入开机自启
ansible backup -m service -a 'name=rsyncd state=started enabled=yes'

NFS服务部署

常规步骤

# 1.创建统一用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M # 2.安装NFS服务
yum -y install nfs-utils rpcbind # 3.编辑共享存储配置文件
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) # 4.创建共享目录
mkdir /data # 5.修改共享目录属主属组
chown www.www /data # 6.启动服务
systemctl start nfs-server # 7.加入开机自启
systemctl enable nfs-server

Ansible步骤

# 1.创建统一用户
ansible nfs -m group -a 'name=www gid=666 state=present'
ansible nfs -m user -a 'name=www uid=666 group=666 shell=/sbin/nologin create_home=no state=present' # 2.安装nfs
ansible nfs -m yum -a 'name=nfs-utils state=present'
ansible nfs -m yum -a 'name=rpcbind state=present' # 3.编辑共享存储配置文件
ansible nfs -m copy -a "content='/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' dest=/etc/exports" # 4.创建出共享目录并修改属主属组
ansible nfs -m file -a 'path=/data owner=www group=www mode=0755 state=directory' # 5.启动服务并加入开机自启
ansible nfs -m service -a 'name=nfs-server state=started enabled=yes'

Http服务部署

常规步骤

# 1.创建统一用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M # 2.安装http服务
yum install -y httpd php # 3.统一用户
vim /etc/httpd/conf/httpd.conf
1)修改前
User apache
Group apache
2)修改后
User www
Group www # 4.进入站点目录部署代码
cd /var/www/html
rz # 5.解压代码文件
unzip kaoshi.zip # 6.修改php代码,更改上传目录
vim /var/www/html/upload_file.php
$wen="/var/www/html/pic"; # 7.上传图片至/var/www/html/pic文件中
cd /var/www/html/pic
rz # 8.更改站点目录属主属组
chown www.www /var/www/html/ # 9.启动服务
systemctl start httpd

Ansible步骤

# 1.创建统一用户
ansible web03 -m group -a 'name=www gid=666 state=present'
ansible web03 -m user -a 'name=www uid=666 group=666 shell=/sbin/nologin create_home=no state=present' # 2.安装http服务
ansible web03 -m yum -a 'name=httpd state=present'
ansible web03 -m yum -a 'name=php state=present' # 3.修改配置文件,统一用户
ansible web03 -m copy -a 'src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=0644'
vim /root/httpd.conf
ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User www
Group www ServerAdmin root@localhost <Directory />
AllowOverride none
Require all denied
</Directory> DocumentRoot "/var/www/html" <Directory "/var/www">
AllowOverride None Require all granted
</Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted
</Directory> <IfModule dir_module>
DirectoryIndex index.html
</IfModule> <Files ".ht*">
Require all denied
</Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule> CustomLog "logs/access_log" combined
</IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic
</IfModule> EnableSendfile on IncludeOptional conf.d/*.conf # 4.部署代码至站点目录
ansible web03 -m unarchive -a 'src=/root/kaoshi.zip dest=/var/www/html/' # 5.在站点目录下创建用户上传目录
ansible web03 -m file -a 'path=/var/www/html/pic state=directory' # 6.修改php代码,更改上传目录
ansible web03 -m copy -a 'src=/root/upload.conf dest=/var/www/html/upload_file.php owner=root group=root mode=0644'
vim /root/upload.conf
<?php header("Content-type:text/html;charset=utf-8"); ini_set('date.timezone','Asia/Shanghai'); $wen=/var/www/html/pic; $pre=preg_match("/^([0-9])+_/",$_FILES['file']["name"][0]);
$size =$_FILES['file']["size"][0]; if (!is_dir($wen.'/')) { mkdir($wen.'/', 0777); } // foreach($_FILES['file']['error'] as $k=>$v){ if ($_FILES["file"]["error"][0] > 0 ) {
echo "上传失败!请查看是否选择了需要上传的文件!";
}else if($pre==0){ echo "上传失败!文件名有误,请修改文件名为你的编号加下划线开头<br/>例如:33_蒋某某.docx"; }else if ($size<10) { echo "上传失败!文件为空文件!";
}else{ $tmp_name = $_FILES["file"]["tmp_name"][0];
$name =$_FILES["file"]["name"][0]; if (file_exists($wen."/" . $name))
{
echo "上传失败,文件".$_FILES["file"]["name"][0] . " 已经存在 ";
}
else
{
move_uploaded_file($tmp_name,$wen."/".$name);
echo "文件".$_FILES["file"]["name"][0]."上传成功";
} } // }
?> # 7.更改站点目录属主属组
ansible web03 -m file -a 'path=/var/www/html state=file owner=www group=www mode=0755 state=directory' # 8.启动服务
ansible web03 -m service -a 'name=httpd state=started'

挂载web端上传目录至nfs共享目录,并利用backup备份

常规步骤

-web端操作
# 1.安装nfs
yum -y install nfs-utils # 2.挂载上传目录至nfs共享目录
mount -t nfs 172.16.1.31:/data /var/www/html/pic -nfs端操作
# 1.安装rsync
yum install -y rsync # 1.创建密码文件
echo '123' > /etc/rsync.passwd # 2.给密码文件授权
chmod 600 /etc/rsync.passwd # 3.备份共享目录至backup端
rsync -avz --delete /data rsync_backup@172.16.1.41::zy_backup --password-file=/etc/rsync.passwd

Ansible步骤

-web端
# 1.安装nfs
ansible web03 -m yum -a 'name=nfs-utils state=present' # 2.挂载上传目录至nfs共享目录
ansible web03 -m mount -a 'path=/var/www/html/pic src=172.16.1.31:/data fstype=nfs state=mounted' -nfs端
# 1.安装rsync
ansible nfs -m yum -a 'name=rsync state=present' # 1.创建密码文件,并指定权限
ansible nfs -m copy -a 'src=/root/mima dest=/etc/rsync.passwd mode=600'
vim /root/mima
123 # 2.备份共享目录至backup端
ansible nfs -m shell -a 'rsync -avz --delete /data rsync_backup@172.16.1.41::zy_backup --password-file=/etc/rsync.passwd' ansible nfs -m cron -a 'name="共享目录备份" minute=*/1 job="/usr/bin/rsync -avz --delete /data rsync_backup@172.16.1.41::zy_backup --password-file=/etc/rsync.passwd &>/dev/null"'

整合Ansible脚本

Ansible管理端需要准备的环境

# 1.准备好rsync配置文件
vim /root/rsync_mb
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#--------------------------------------------------------------
[zy_backup]
comment = welcome to oldboyedu backup!
path = /backup # 2.准备好web端http配置文件
vim /root/httpd.conf
ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User www
Group www ServerAdmin root@localhost <Directory />
AllowOverride none
Require all denied
</Directory> DocumentRoot "/var/www/html" <Directory "/var/www">
AllowOverride None Require all granted
</Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted
</Directory> <IfModule dir_module>
DirectoryIndex index.html
</IfModule> <Files ".ht*">
Require all denied
</Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule> CustomLog "logs/access_log" combined
</IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic
</IfModule> EnableSendfile on IncludeOptional conf.d/*.conf # 3.准备好站点配置文件
vim /root/upload.conf
<?php header("Content-type:text/html;charset=utf-8"); ini_set('date.timezone','Asia/Shanghai'); $wen=/var/www/html/pic; $pre=preg_match("/^([0-9])+_/",$_FILES['file']["name"][0]);
$size =$_FILES['file']["size"][0]; if (!is_dir($wen.'/')) { mkdir($wen.'/', 0777); } // foreach($_FILES['file']['error'] as $k=>$v){ if ($_FILES["file"]["error"][0] > 0 ) {
echo "上传失败!请查看是否选择了需要上传的文件!";
}else if($pre==0){ echo "上传失败!文件名有误,请修改文件名为你的编号加下划线开头<br/>例如:33_蒋某某.docx"; }else if ($size<10) { echo "上传失败!文件为空文件!";
}else{ $tmp_name = $_FILES["file"]["tmp_name"][0];
$name =$_FILES["file"]["name"][0]; if (file_exists($wen."/" . $name))
{
echo "上传失败,文件".$_FILES["file"]["name"][0] . " 已经存在 ";
}
else
{
move_uploaded_file($tmp_name,$wen."/".$name);
echo "文件".$_FILES["file"]["name"][0]."上传成功";
} } // }
?> # 4.在本地准备rsync客户端密码文件
vim /root/mima
123

脚本整合

[root@m01 ~]$ cat sb.sh
# 1.所有机器上创建统一用户
ansible zy_php -m group -a 'name=www gid=666 state=present'
ansible zy_php -m user -a 'name=www uid=666 group=666 shell=/sbin/nologin create_home=no state=present' # 2.所有机器安装对应服务
ansible bakcup -m yum -a 'name=rsync state=present'
ansible nfs -m yum -a 'name=nfs-utils state=present'
ansible nfs -m yum -a 'name=rpcbind state=present'
ansible nfs -m yum -a 'name=rsync state=present'
ansible web03 -m yum -a 'name=httpd state=present'
ansible web03 -m yum -a 'name=php state=present'
ansible web03 -m yum -a 'name=nfs-utils state=present' # 3.准备所有服务需要的文件
## rsync
ansible backup -m copy -a 'src=/root/rsync_mb dest=/etc/rsyncd.conf owner=root group=root mode=0644'
## nfs
ansible nfs -m copy -a "content='/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)' dest=/etc/exports"
## httpd
ansible web03 -m copy -a 'src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=0644'
## php代码
nsible web03 -m copy -a 'src=/root/upload.conf dest=/var/www/html/upload_file.php owner=root group=root mode=0644'
## rsync客户端密码文件
ansible nfs -m copy -a 'src=/root/mima dest=/etc/rsync.passwd mode=600' # 4.backup端:
## 创建备份目录并更改属组属主
ansible backup -m file -a 'path=/backup owner=www group=www mode=0755 state=directory'
## 创建密码文件并更改权限为600
ansible backup -m copy -a 'content="rsync_backup:123" dest=/etc/rsync.passwd owner=root group=root mode=0600'
## 启动服务并加入开机自启
ansible backup -m service -a 'name=rsyncd state=started enabled=yes' # 5.nfs端:
## 创建出共享目录并修改属主属组
ansible nfs -m file -a 'path=/data owner=www group=www mode=0755 state=directory'
## 启动服务并加入开机自启
ansible nfs -m service -a 'name=nfs-server state=reloaded enabled=yes' # 6.web端:
## 部署代码至站点目录
ansible web03 -m unarchive -a 'src=/root/kaoshi.zip dest=/var/www/html/'
## 在站点目录下创建用户上传目录
ansible web03 -m file -a 'path=/var/www/html/pic state=directory'
## 更改站点目录属主属组
ansible web03 -m file -a 'path=/var/www/html state=file owner=www group=www mode=0755 state=directory'
## 启动服务
ansible web03 -m service -a 'name=httpd state=started' # 7.做共享和备份
## 挂载上传目录至nfs共享目录
ansible web03 -m mount -a 'path=/var/www/html/pic src=172.16.1.31:/data fstype=nfs state=mounted'
## 备份共享目录至backup端
ansible nfs -m shell -a 'rsync -avz --delete /data rsync_backup@172.16.1.41::zy_backup --password-file=/etc/rsync.passwd'

ad-hoc实战的更多相关文章

  1. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  2. Ad hoc sql

    SQL Server如何启用Ad Hoc Distributed Queries? 2011-08-11 14:53 wangdingbang CSDN博客 字号:T | T   本文主要介绍了SQL ...

  3. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问

    消息 15281,级别 16,状态 1,第 2 行SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/Open ...

  4. XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...

  5. XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...

  6. 启用与关闭 Ad Hoc Distributed Queries

    在数据库里执行以下脚本: 启用: exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Dis ...

  7. Sql导出数据报错-->SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服 ...

  8. 解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问

      SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为 ...

  9. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。

    今天单位一ASP.NET网站,里面有个功能是导出数据,发现一导出就报错,报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT ...

  10. ns3模拟无线Ad hoc 网络通信

    Ad hoc网络 Ad hoc网是一种多跳的.无中心的.自组织无线网络,又称为多跳网(Multi-hop Network).无基础设施网(Infrastructureless Network)或自组织 ...

随机推荐

  1. 第二章启动引导器GRUB2

    第二章启动引导器GRUB2grub的配置文件路径:vim /boot/grub2/grub.cfg (不建议直接编辑)vim /etc/default/grub (可编辑的文件)将编辑的操作刷新到/b ...

  2. 密码破解-john的使用

    john类似于hashcat一样,也是一款密码破解方式,john跟专注于系统密码的破解,并且和hashcat一样在kali中自带 hash请见hash的简单使用 重要的参数 --wordlist=字典 ...

  3. 归一化,正则化,标准化,dropout的联系与区别

    归一化(Normalization)是指将数据缩放到一定范围内,一般是将数据映射到[0,1]或[-1,1]之间.这样可以避免不同特征的数值差异过大而导致的训练困难,同时也有助于加快梯度下降的收敛速度. ...

  4. Spring--案例:数据源对象管理

    案例:数据源对象管理 对于已经学过数据库的我来说,这看起来就像是连接数据库的操作: 就像javaweb项目里面的db.properties文件的使用一样,我们需要先导入一个包,(我用的是Maven项目 ...

  5. CF1141 Div3 欢乐信心赛

    非常轻松的比赛,连我这样的菜鸡也感到充满力量. A 用类似于质因数分解的操作搞一搞即可. B 将环复制一遍. C 可以发现 \(q\) 就是差分数组.那么差分数组之和最大的地方就是原序列的最大值,为 ...

  6. [ARC152D] Halftree题解

    很好的一道题,即使是我这种菜鸡也感到心潮澎湃. 直觉有余,证明不足.思路有余,推导不足. 无论是什么比赛,对拍都是最有效的查错方式. 本篇题解里的所有图片采用 graph_editor 制作. 题意简 ...

  7. 小知识:SQL Monitor Report的使用

    在上一篇 优化利器In-Memory开启和效果 中,提到的两个SQL对比,使用的是传统的dbms_xplan.display_cursor方式来查看执行计划,好处是文本输出的通用性强,基本信息也都有. ...

  8. vuex相关笔记

    vuex是什么? vuex是管理应用程序状态,实现组件间通信的. 为什么使用vuex? 在开发大型应用的项目时,会出现多个视图组件依赖一个同一个状态,来自不同视图的行为需要变更同一个状态. 在遇到以上 ...

  9. 基于DPDK抓包的Suricata安装部署

    一.背景 Suricata支持网卡在线抓包和离线读取PCAP包两种形式的抓包: 离线抓包天然具有速度慢.非实时的特点 在线捕获数据包又包括常规网卡抓包.PF_RING和DPDK的方式 由于项目分光的流 ...

  10. CSharp读写world文档数据

    背景 在工作中需要对比数据,然后输出一份world文档的对比报告.这需要用C#来读写world文件. 用到的工具 NPOI NPOI 地址:NPOI NPOI版本:2.6.0 个人项目的运行时版本:. ...