首页
归档
时光轴
推荐
Cloud
图床
导航
Search
1
Deploy OpenStack offline based on Kolla
745 阅读
2
openstact 基础环境安装 (手动版)
689 阅读
3
Mariadb 主从复制&读写分离
651 阅读
4
Typecho 1.2.0 部署
643 阅读
5
FusionCompute8.0 体验
576 阅读
Python
Linux
随笔
mysql
openstack
Search
标签搜索
linux
Pike
python
爬虫
openstack
mysql
Essay
Ansible
docker
Zabbix
kolla
Internet
Redis
1+X
Hyper-V
jenkins
Kickstart
自动化
sh
pxe
Acha
累计撰写
77
篇文章
累计收到
1
条评论
首页
栏目
Python
Linux
随笔
mysql
openstack
页面
归档
时光轴
推荐
Cloud
图床
导航
搜索到
28
篇与
的结果
2021-04-19
VMware网络模式分析
前言 最近,看了个redhut训练营。了解zabbix,在过程中看到老师使用的模拟器很有意思 EVE-NG的拓扑,总体感觉很直观。只要有镜像,就可以模拟操作系统与网络设备,很方便 EVE-NG基于ubantu,刚使用的时候出了些网络问题,就是ubantu的使用和VMware网络模式 网络模式 桥接模式 仅主机模式 NAT模式 虚拟网络编辑器 VMnet0:用于桥接模式下的虚拟交换机 VMnet1:用于仅主机模式下的虚拟交换机 VMnet8:用于NAT模式下的虚拟交换机 模式分析 {mtitle title="桥接模式"/} 与物理机桥接,共用物理机的物理网卡,可以连接物理机所在内网与外网(互联网) {mtitle title="仅主机模式"/} 使用虚拟网卡,与物理机网卡相连,只可以与主机通信,不能访问外网 {mtitle title="NAT模式"/} 使用虚拟网卡,该虚拟网卡有NAT功能,可以访问外网,不能与物理机所在内网通信 不论使用何种模式,VMware的虚拟网卡都与物理网卡相连接,所以物理机都可以访问虚拟机 并且,一台虚拟机可以添加多块虚拟网卡,达到与内网及外网通信的效果
2021年04月19日
187 阅读
0 评论
0 点赞
2021-04-03
安装 PHP
PHP安装 对于使用LAMP 架构的朋友,php是非常重要的 我最初部署博客的时候使用的是php5.4的版本,也是centos7 yum源中的默认版本 安装很简单,yum install php -y 就可以了 后来,部署图床的时候php版本就是个问题了,要求7的版本 上了7.4,结果高了不兼容,又换了7.1 在使用中发现7.1 对我现在部署的一些东西还是比较稳定的。听说7比5要快一点 不过还是建议选择合适版本,在虚拟机里实验好,在上线 准备工作 查看PHP版本 # php -v 移除 rpm -qa | grep php # 检查当前PHP安装包 yum remove php* # 完全移除当前PHP安装包以免起冲突 安装 epel 源 Tip: EPEL 是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux yum install epel-release -y # 安装好后可以通过如下命令查看 yum info epel-release yum repolist 安装PHP tip:PHP选择合适版本安装 安装PHP 7.0 yum install -y php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-fpm Tip:想安装php5.5或者5.6版本,将上面70 替换为55或56 安装 PHP 7.1 yum install -y php71w-fpm php71w-opcache php71w-cli php71w-gd php71w-imap php71w-mysqlnd php71w-mbstring php71w-mcrypt php71w-pdo php71w-pecl-apcu php71w-pecl-mongodb php71w-pecl-redis php71w-pgsql php71w-xml php71w-xmlrpc php71w-devel mod_php71w 检查版本 php -v 启动 启动PHP Tip:PHP-FPM 是一个PHPFastCGI管理器,适用于5.3.3以后版本 systemctl start php-fpm # 启动 systemctl enable php-fpm # 开机自启 systemctl stop php-fpm # 停止 systemctl restart php-fpm # 重启 测试 在apache工作目录下新建 test.php,内容如下 <?php phpinfo(); ?> 在浏览器中访问:[ip地址]/test.php ; 返回下图,安装成功
2021年04月03日
150 阅读
0 评论
1 点赞
2021-03-18
域名
域名 简介 域名是IP地址的代称,目的是方便记忆。 由一串用点分隔的字符组成的,用于在数据传输是标记计算机的位置。 域名映射IP,由DNS服务器解析转换为IP地址。 历史 1983年,保罗·莫卡派乔斯发明了域名解析服务和域名系统 1985年1月1日,世界上第一个域名nordu.net被注册 域名层次 以 www.baidu.com 为例 顶级域名 (.com) 一级域名(baidu) 二级域名 (www) 一个域名可以有多个二级域名 域名注册 向域名服务商注册域名,每年需要缴纳一定费用 域名可以转让,买卖 域名解析(DNS) 正向解析 域名转换为IP地址 反向解析 IP地址转换为域名 工作流程: 输入查询域名 浏览器查询本地缓存,查询到与网络服务交换内容,结束 向对应的顶级服务器下的子服务器发起请求,获得对应IP 浏览器去相应IP的网络服务器交互内容 域名解析配置 去域名服务商那添加域名解析 记录类型 A 指向一个 ipv4地址 CNAME 指向另一个域名 AAAA 指向一个ipv6地址 主机记录 www 解析后的域名为 www.<域名>.<顶级域名> 二级域名 如 abc.<域名>.<顶级域名> @ 直接解析主域名 记录值 IP地址 Apache 配置多站点访问及二级域名配置 通过云解析服务商为主域名分配子域名,再为子域名绑定主机IP。 修改 httpd.conf 文件,去掉include httpd-vhosts.conf 前面的注释。 注释 httpd-vhosts.conf 文件中所有内容,然后添加 <Directory /> AllowOverride all Require all granted </Directory> NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin 「管理员邮箱」 DocumentRoot 「项目根目录」 ServerName 「二级域名」 ServerAlias 「域名别名」 ErrorLog 「错误日志」 CustomLog 「访问日志」 </VirtualHost> Directory 标签用于给所有目录设置访问权限 AllowOverride all 允许 .htaccess 对URL进行重写 / AllowOverride none 忽略 .htaccess 文件 Require all granted 允许外部访问 / Require all denied 禁止外部访问 NameVirtualHost 是固定形式,用于使 VirtualHost 标签生效 VirtualHost 标签用于为二级域名绑定虚拟主机 每一个二级域名对应一个 VirtualHost 标签,有多少二级域名,就需要多少个 VirtualHost 标签 DocumentRoot 和 ServerName 是必填项,其余可选 注意:由于 www 域名属于特殊的二级域名,所以它也需要在 httpd-vhosts.conf 文件中注册 重启apache服务
2021年03月18日
345 阅读
0 评论
0 点赞
2021-03-18
apache 实验
配置文件位置 配置文件位置: 源码包安装: PREFIX/etc/httpd.conf(主配置文件) PREFIX/etc/extra/*.conf(子配置文件) rpm包安装: /etc/httpd/conf/httpd.conf 网页文件位置: 源码包安装: PREFIX/htdocs/ rpm包安装: /var/www/html/ 日志文件位置: 源码包安装: PREFIX/logs/ rpm包安装: /var/log/httpd/ 配置文件详解 注意:apache配置文件严格区分大小写 针对主机环境的基本配置参数 ServerRoot /usr/local/apache2 #apache主目录 Listen :80 #监听端口 LoadModule php7 #加载的相关模块 User Group #用户和组 ServerAdmin #管理员邮箱 ServerName #服务器名(没有域名解析时,使用临时解析。默认不开启) ErrorLog "logs/error_log #服务器错误日志 CustomLog "logs/access_log" common #访问记录日志 DirectoryIndex index.html index.php #默认网页文件名,优先级顺序 Include etc/extra/httpd-vhosts.conf #子配置文件中内容也会加载生效 主页目录及权限 DocumentRoot "/usr/local/apache2/htdocs" #网页文件存放目录(默认) <Directory "/usr/local/apache2/htdocs"> #定义指定目录的权限 Options Indexes FollowSymLinks None #没有任何额外权限 All #所有权限(除去MultiViews以外) Indexes #浏览权限(当此目录下没有默认网页文件时,显示目录内容) FollowSymLinks #准许软连接到其他目录 MultiViews #准许文件名泛匹配(需要手动开启模块才有效negotiation) AllowOverride None #定义是否允许目录下.htaccess文件中的权限生效 None #.htaccess中权限不生效 All #文件中所有权限都生效 AuthConfig #文件中,只有网页认证的权限生效 Require all granted(denied) #访问控制列表 </Directory> <IfModule dir_module> #此标签用来指定访问到指定目录时自动加载哪个页面文件 DirectoryIndex index.php index.html #可以写多个,但是有优先级之分 </IfModule> 实验 说明:以下实验均为源码安装apache yum 安装需要去 /usr/share/doc/httpd-2.4.6/ 配置文件,拷贝到 http.d 1. 目录别名 当 apache 接受请求时,在默认情况下会将 DocumentRoot目录中的文件送到客户端 如果想将某一不 在 DocumentRoot 目录中的文件共享到网站上 可以通过建立别名的方式将 URL 指向特定的目录 编辑主配置文件 # vim /usr/local/apache2/conf/httpd.conf Include etc/extra/httpd-autoindex.conf #去掉注释,开启调用子配置文件 编辑子配置文件 # vim /usr/local/apache2/conf/extra/httpd-autoindex.conf alias /icons/ "/usr/local/apache2/icons/" 结构:别名 "真实目录" #真实目录的结尾要有/,否则报错 <Directory "/usr/local/apache2/icons"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 可以根据模板编写一个自己需要的目录别名 重启服务 2.用户认证 有时候,我们需要给一些特殊的访问。设置一个用户认证机制,增加安全 比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码 但为了更加安全,可以再设置一层用户身 份认证 编辑子配置文件 # vim /usr/local/apache2/etc/httpd.conf 在需要进行登录认证的目录标签中加入如下配置: <Directory "/usr/local/apache2/htdocs/admin"> #声明被保护目录 Options Indexes FollowSymLinks AllowOverride All #开启权限认证文件.htaccess Require all granted </Directory> 在指定目录下创建权限文件 切换到需要进行登录认证的目录,创建 .htaccess 文件,并添加下面的内容 # vi .htaccess AuthName "Welcome to atguigu" #提示信息 AuthType basic #加密类型 AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd #密码文件,文件名自定义。(使用绝对路径) require valid-user #允许密码文件中所有用户访问 建立密码文件,加入允许访问用户(与系统用户无关) # htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd test1 -c 建立密码文件,只有添加第一个用户时,才能-c # htpasswd -m /usr/local/apache2/htdocs/admin/apache.passwd test2 -m 再添加更多用户时,使用-m 参数 注意: htpasswd 该命令是 httpd 的命令,需要绝对路径 、重启服务 3.虚拟主机 虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。 虚拟主机的分类: 基于IP 基于端口 基于域名 实验准备: 域名解析:准备两个域名 www.sohu.com www.sina.com 网站主页目录规划 在/htdocs/目录下分别创建 sohu 和 sina 两个目录,并在新建目录内创建 index.html 文件(分别写不同内容) 实验步骤: 修改主配置文件开启文件关联 # vi /usr/local/apache2/etc/httpd.conf Include etc//extra/httpd-vhosts.conf #此行取消注释 编辑子配置文件,编写虚拟主机标签 # vi /usr/local/apache2/etc/extra/httpd-vhosts.conf 添加下方内容,有几个虚拟主机就写几组(添加之前先把原先存在的示例删除掉) <Directory "/usr/local/apache2/htdocs/sina"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> #目录权限标签根据需要自行添加 <VirtualHost 192.168.88.10:80> #虚拟主机标签 ServerAdmin webmaster@sina.com #管理员邮箱 DocumentRoot "/usr/local/apache2/htdocs/sina" #网站主目录 ServerName www.sina.com #完整域名 ErrorLog "logs/sina-error_log" #错误日志 CustomLog "logs/sina-access_log" common #访问日志 </VirtualHost> 重启服务,验证结果 4.域名跳转 一个站点难免会有多个域名,而多个域名总得有一个主次 比如我的网站可以用两个域名访问:www.sina.com和www.sohu.cn 但大家发现不管我用哪个域名访问,最终都会跳转到 www.sina.com 上 来 这个行为就叫做域名跳转,状态码:301 是永久跳转,302 是临时跳转 网站上一定要设置为 301, 这样对搜索引擎是比较友好的 实验条件: 虚拟主机能正常访问 打开重写配置模块 LoadModule rewrite_module modules/mod_rewrite.so #取消注释 实验步骤: 修改虚拟主机配置文件 # vi */extra/httpd-vhosts.conf <Directory "/usr/local/apache2/htdocs/sohu"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> 创建规则匹配文件 # vi */.htaccess 在指定的网站目录下创建文件,并添加以下内容 RewriteEngine on # 开启rewrite功能 RewriteCond %{HTTP_HOST} ^www.sohu.com # 把以www.sina.com 开头的内容赋值给HTTP_HOST变量 RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L] # ^(.*)$ 指代客户端要访问的资源 # $1 把 .* 所指代的内容赋值到$1变量中 # R=permanent 永久重定向 = 301 # L 指定该规则为最后一条生效的规则,以后的不再生效 重启服务并测试 5.实现https HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP 通道 简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,用于安全的 HTTP 数据传输。 这个系统被 内置于浏览器中,提供了身份验证与加密通讯方法。 准备工作: 检查 Apache 是否支持 SSL,检查相应模块是否安装,若安装则将模块启用 模块存放目录:/usr/local/apache2/modules 检查模块是否启用:apachectl -M CA 证书申请: a. openssl genrsa -out ca.key 1024 #建立服务器私钥,生成 RSA 密钥 b. openssl req -new -key ca.key -out atguigu.csr #需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 common name,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览 器警报。生成的 csr 文件交给 CA 签名后形成服务端自己的证书 c. openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt #使用 CA 服务器签发证书,设置证书的有效期等信息 注意 1:生成完秘钥和证书文件后,将文件存放在 Apache 的安装目录下的 cert 目录下 注意 2:在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别) 配置文件修改: 调用 ssl 模块,并启用 ssl 独立配置文件 # vim /usr/local/apache2/etc/httpd.conf LoadModule ssl_module modules/mod_ssl.so #取消注释 Include etc/extra/httpd-ssl.conf #取消注释 修改 conf/extra/httpd-ssl.conf 配置文件,调用证书等文件 #添加 SSL 协议支持协议,去掉不安全的协议 SSLProtocol all -SSLv2 -SSLv3 #修改加密套件如下 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on #证书公钥配置(签字的) SSLCertificateFile cert/atguigu.crt #证书私钥配置 SSLCertificateKeyFile cert/ca.key 修改主配置文件,添加虚拟主机 <VirtualHost _default_:443> # DocumentRoot 目录位置要和 httpd.conf 里面的一致 DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost:443 SSLCertificateFile cert/atguigu.crt SSLCertificateKeyFile cert/ca.key SSLCertificateChainFile cert/atguigu.crt </VirtualHost> 结果验证 # apachectl -t #检查配置文件语法 # apachectl restart #重启 apache,并测试是否可以使用 https 访问 报错提示:AH00526: Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf: SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?). 解决方案:要么不调用此模块,要么让调用的模块加载上 强制跳转 https: 有些时候为了安全,网站不允许使用 http 访问,仅允许使用 https 访问,目的是为了更加安全 在 http 部分的目录权限标签中添加一下内容 <Directory "/usr/local/apache2/htdocs"> …… RewriteEngine on #开启转发规则 RewriteCond %{SERVER_PORT} !^443$ #检查访问端口只要目标不是443的 RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] #全都使用https重新访问 </Directory> 在做后面实验时为了更加方便理解,我们可以先把 https 关闭掉 需要关闭:跳转&虚拟主机&ssl 配置文件调用 6.日志分割 我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大 如何避免产生大的日志文件?其实 apache 有相关的配置 使日志按照我们的需求进行归档,比如每 天一个新日志,或者每小时一个新的日志 首先简单设置日志的路径名称 #vim /usr/local/apache2/etc/httpd.conf 编辑添加内容如下: ErrorLog "logs/error.log" CustomLog "logs/access.log" combined 指定了日志存放在/usr/local/apache2/logs 目录下分别为 error.log 和 access.log,combined 为日 志显示的格式,日志格式可以参考配置文件 httpd.conf 中格式的指定,如下: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common 设置apache 日志分割 同样编辑配置文件 httpd.conf ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400" CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined 注意 1:以上仅为两条命令(一条错误日志,一条访问日志),路径太长写不开 注意 2:若开启了 https,则需要修改 http-ssl.conf 配置文件中的日志记录条目 xxxxxxxxxx 同样编辑配置文件 ErrorLog 是错误日志,CustomLog 是访问日志。|就是管道符,意思是把产生的日志交给 rotatelog 而这个工具就是 apache 自带的切割日志的工具。-l 的作用是校准时区为 UTC,也就是北京时间 86400,单位是秒,正好是一天,那么日志会每天切割一次 而最后面的 combined 为日志的 格式,在 httpd.conf 中有定义 7.不记录指定日志类型 如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的 比如网站的一些图片,还有 js、css 等静态对象。而这些文件的访问往往是巨量的 而且即使记录这 些日志也没有什么用,那么如何忽略不记录这些日志呢? 配置日志不记录图片的访问 # vim /usr/local/apache2/conf/httpd.conf 相关配置为: SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request 说明:在原来的访问日志配置基础上,增加了一些 image-request 的定义 比如把 gif、jpg、bmp、 swf、js、css 等结尾的全标记为 image-request 然后在配置日志后加一个标记 env=!image-request, 表示取反 8.配置静态缓存 所说的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都是图片、js、 css 等 这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时 不再去服务器上下载 加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总 有一些时效性,那么就得设置这个过期时间 Apache 配置静态缓存 # vim /usr/local/apache2/conf/httpd.conf <IfModule mod_expires.c> #此模块默认未启用,请手动启用 ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule> 或者使用 mod_headers 模块实现:该模块默认启用 <IfModule mod_headers.c> # htm,html,txt 类的文件缓存一个小时 <filesmatch "\.(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> # css, js, swf 类的文件缓存一个星期 <filesmatch "\.(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> # jpg,gif,jpeg,png,ico,flv,pdf 等文件缓存一年 <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$"> header set cache-control "max-age=29030400" </filesmatch> </IfModule> 说明:这里的时间单位可以 days、hours 甚至是 min,两种不同的方法, 上面使用的是 mod_expires, 而下面用的是 mod_headers,要想使用这些模块,必须要事先已经支持。 如何查看是否支持,使用命令: # /usr/local/apache2/bin/apachectl -M 重启服务并验证 验证: # curl -x127.0.0.1:80 'http://www.sohu.com/image/a.jpg' -I HTTP/1.1 200 OK Date: Wed, 26 Oct 2016 03:51:26 GMT Server: Apache/2.2.31 (Unix) PHP/5.5.38 Last-Modified: Tue, 31 May 2016 03:08:36 GMT ETag: "46891b-16b-5341ab0597500" Accept-Ranges: bytes Content-Length: 363 Cache-Control: max-age=86400 # 看这里 Expires: Thu, 27 Oct 2016 03:51:26 GMT Content-Type: image/jpg 9.禁止解析PHP 某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多, 比如某些目录可 以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。 配置禁止解析 php: <Directory /usr/local/apache2/htdocs/data> php_admin_flag engine off <filesmatch "(.*)php"> Order deny,allow Deny from all </filesmatch> </Directory>
2021年03月18日
242 阅读
0 评论
1 点赞
2021-03-16
ansible 学习
ansible inventory ANSIBLE_CONFIG ansible.cfg 项目目录 ./ansible.cfg 当前用户的家目录 /etc/ansible/ansible.cfg [root@manager ~]# cat /etc/ansible/ansible.cfg inventory = /etc/ansible/hosts #主机列表配置文件 library = /usr/share/my_modules/ #库文件存放目录 remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录 local_tmp = ~/.ansible/tmp #本机的临时执行目录 forks = 5 #默认并发数 sudo_user = root #默认sudo用户 ask_sudo_pass = True #每次执行是否询问sudo的ssh密码 ask_pass = True #每次执行是否询问ssh密码 remote_port = 22 #远程主机端口 host_key_checking = False #跳过检查主机指纹 log_path = /var/log/ansible.log #ansible日志 [privilege_escalation] #如果是普通用户则需要配置提权 become=True become_method=sudo become_user=root become_ask_pass=False 生成密钥 生成密钥名字为dsa , 生成的时候会提示生成的密钥的路径以及密码,可以不输入,默认在 ~/.ssh/目录下 ssh-keygen -t dsa 将生成的公钥上传到指定的服务器中 ssh-copy-id -i ~/.ssh/id_dsa.pub user@192.168.0.201 创建工作目录 mkdir project1/ vim hosts [youto] 192.168.0.201 192.168.0.202 Ad-Hoc [ ping ] ansible youto -m ping -i hosts [查看磁盘信息] ansible youto -m shell -a "df -h" -i hosts command 不能支持管道符 playbook [][] 示例 检查yum语法 ansible-palaybook --syntax http.yml nfs.yaml nfs 的 配置文件 exports.j2 /data 192.168.0.201(rw) [共享文件夹] [允许访问主机] (权限) - hosts: 192.168.0.202 tasks: # yum 安装 nfs-utils - name: Install NFS Server yum: name=nfs-utils state=present # 分发 配置文件 - name: Configure NFS Server copy: src=./exports.j2 dest=/etc/exports backup=yes # 创建 组 - name: Create NFS Group group: name=nfss gid=666 # 创建 用户 - name: Create NFS User user: name=nfss uid=666 group=666 shell=/sbin/nologin create_home=no # 创建 共享文件夹 - name: Create NFS Data file: path=/data state=directory owner=nfss group=nfss recurse=yes # 开启 nfs 服务 - name: Service NFS Server service: name=nfs state=started enabled=yes - hosts: 192.168.0.201 tasks: # 创建 挂载目录 - name: Client Create NFS Data file: path=/nfs_tt state=directory # 挂载 - name: Client Mount NFS Server mount: src: 192.168.0.202:/data path: /nfs_tt fstype: nfs opts: defaults state: mounted 清空原来http软件 ansible youto -m yum -a "name=httpd state=absent" -i hosts http.yml tt.j2 (index.html 显示页面) httpd.conf.j2 (httpd 配置文件) - hosts: 192.168.0.202 tasks: yum install httpd # yum 安装 httpd - name: Install Httpd Server yum: name=httpd state=present # 修改 httd.conf 配置文件 - name: Configure Httpd Server copy: src=./httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf backup=yes # 设置 web 页面 - name: Configure Httpd WebSite copy: src=./tt.j2 dest=/var/www/html/tt.html owner=root group=root mode=644 # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started enabled=yes # 开启 firewalld - name: Service Firewalld Server service: name=firewalld state=started # 放行 9988 端口 - name: Configure Firewalld Server firewalld: zone=public port=9988/tcp permanent=yes immediate=yes state=enabled 卸载php71w yum list installed |grep php71w|awk '{print $1}'|xargs|sed -r 's#(.*)#yum remove -y \1#g'|bash lamp.yml wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip - hosts: 192.168.0.201 tasks: # yum 安装 httpd php - name: Install Httpd PHP firewalld yum: name=httpd,php,php-pdo,php-mbstring,php-gd,firewalld state=present # 开启 httpd 服务 - name: Service Httpd Server service: name=httpd state=started # 开启防火墙 - name: Service Firewalld Server service: name=firewalld state=started # 放行 80 端口 - name: Configure Firewalld firewalld: port=80/tcp immediate=yes state=enabled # 获取 tt.php - name: Get Url index.php get_url: url: http://fj.xuliangwei.com/public/index.php dest: /var/www/html/tt.php # 获取并解压 kodexplorer4.40 - name: Copy Kod Cloud Code unarchive: src=./kodexplorer4.40.zip dest=/var/www/html/ mode=0777 - name: Chown Directory file: path=/var/www/html owner=apache group=apache recurse=yes 变量 定义变量 playbook的yaml文件中定义变量赋值 - hosts: all vars: #定义变量 file_name: bgx_yaml_vars tasks: - name: # {{ file_name }}引用上面定义的变量 file: path=/tmp/{{ file_name }} state=touch #playbook执行,在/tmp目录创建bgx_yaml_vars文件 [root@manager ~]# ansible-playbook f1.yml --extra-vars执行参数赋给变量 - hosts: all tasks: - name: Create New File file: path=/tmp/{{ file_name }} state=touch #playbook执行时传入file_name变量的参数,在/tmp目录创建bgx_extra-vars文件 [root@manager ~]# ansible-playbook f2.yml --extra-vars "file_name=bgx_extra-vars" 在文件中定义变量 在/etc/ansible/hosts主机组中定义,然后使用palybook进行调度该变量 [root@manager ~]# cat /etc/ansible/hosts [nfs] 10.0.0.20 [nfs:vars] file_name=bgx_filename 变量优先级 1.extra-vars外置传参的优先级最高 [所有执行的主机都生效] 2.定义在yml文件中的优先级其次 [所有执行的主机都生效] 3.hosts文件中定义的变量优先级最低 [当前主机组定义会生效] 变量注册 register关键字可以存储指定命令的输出结果到一个自定义的变量中 [root@manager ~]# cat f5.yml - hosts: all tasks: - name: shell: netstat -lntp register: System_Status - name: Get System Status debug: msg={{System_Status.stdout_lines}} when ( 判断 ) - hosts: all tasks: #检查httpd服务是否是活动的 - name: Check Httpd Server command: systemctl is-active httpd ignore_errors: yes register: check_httpd #如果check_httpd变量中的rc结果等于0,则执行重启httpd,否则跳过 - name: Httpd Restart service: name=httpd state=restarted when: check_httpd.rc == 0 when with_items ( 循环 ) - hosts: webserver tasks: - name: Create User user: name={{ item.name }} groups={{ item.groups }} state=present with_items: - { name: 'www', groups: 'bin'} - { name: 'test', groups: 'root'} with_items item handlers ( 触发器 ) - hosts: webserver #1.定义变量,在配置文件中调用 vars: http_port: 8881 #2.安装httpd服务 tasks: - name: Install Httpd Server yum: name=httpd state=present #3.使用template模板,引用上面vars定义的变量至配置文件中 - name: Configure Httpd Server template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf notify: #调用名称为Restart Httpd Server的handlers(可以写多个) - Restart Httpd Server #4.启动Httpd服务 - name: Start Httpd Server service: name=httpd state=started enabled=yes #5.如果配置文件发生变化会调用该handlers下面的对应名称的task handlers: - name: Restart Httpd Server service: name=httpd state=restarted notify handlers include ( 包含) [root@ansible project1]# cat restart_httpd.yml #注意这是一个tasks所有没有play的任何信息 - name: Restart Httpd Server service: name=httpd state=restarted [root@ansible project1]# cat a_project.yml - hosts: webserver tasks: - name: A Project command command: echo "A" - name: Restart httpd include: restart_httpd.yml 导入一个完整的playbook文件 (play task) [root@m01 project1]# cat tasks_total.yml - import_playbook: ./tasks_1.yml - import_playbook: ./tasks_2.yml tags ( 标签) 指定执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml -t "test_user" 忽略执行某个tags标签 [root@m01 docs1]# ansible-playbook -i hosts nginx_php.yml --skip-tags "test_user" igneore_errors ( 错误处理) 1.强制调用handlers - hosts: webserver force_handlers: yes #强制调用handlers tasks: - name: Touch File file: path=/tmp/bgx_handlers state=touch notify: Restart Httpd Server - name: Installed Packages yum: name=sb state=latest handlers: - name: Restart Httpd Server service: name=httpd state=restarted 2.关闭changed的状态(确定该tasks不会对被控端做任何的修改和变更.) - hosts: webserver tasks: - name: Installed Httpd Server yum: name=httpd state=present - name: Service Httpd Server service: name=httpd state=started - name: Check Httpd Server shell: ps aux|grep httpd register: check_httpd changed_when: false - name: OutPut Variables debug: msg: "{{ check_httpd.stdout_lines }}" 3.使用changed_when检查tasks任务返回的结果 - hosts: webserver tasks: - name: Installed Nginx Server yum: name=nginx state=present - name: Configure Nginx Server copy: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: Restart Nginx Server - name: Check Nginx Configure Status command: /usr/sbin/nginx -t register: check_nginx changed_when: - ( check_nginx.stdout.find('successful')) - false - name: Service Nginx Server service: name=nginx state=started handlers: - name: Restart Nginx Server service: name=nginx state=restarted jinja语法 {% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断 --------------------------------------判断语句 {% if ansible_fqdn == "web01" %} echo "123" {% elif ansible_fqdn == "web02" %} echo "456" {% else %} echo "789" {% endif %} --------------------------------------循环语句 {% for i in EXPR %}...{% endfor%} 作为循环表达式 {% for i in range(1,10) %} server 172.16.1.{{i}}; {% endfor %} {# COMMENT #} 表示注释 Roles Roles基于一个已知的文件结构 tasks handlers templates ..... Roles小技巧: 创建roles目录结构,手动或使用ansible-galaxy init test roles 编写roles的功能,也就是tasks。 最后playbook引用roles编写好的tasks [root@m01 project2]# mkdir memcached/{tasks,handlers,templates,vars,files} -pv mkdir: 已创建目录 "memcached" mkdir: 已创建目录 "memcached/tasks" mkdir: 已创建目录 "memcached/handlers" mkdir: 已创建目录 "memcached/templates" mkdir: 已创建目录 "memcached/vars" mkdir: 已创建目录 "memcached/files" [root@m01 project2]# mkdir {nginx,php-fpm}/{tasks,handlers,templates} -p galaxy /root/.ansible/roles 1.使用roles创建Rsync服务, 目录结构如下 [root@m01 roles]# tree /etc/ansible/roles/ /etc/ansible/roles/ ├── hosts ├── rsync │ ├── files │ │ ├── rsyncd.conf │ │ └── rsync.passwd │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars ├── site.yml 2.定义roles主机清单 [root@m01 roles]# cat /etc/ansible/roles/hosts [backup] 172.16.1.41 3.指定backup主机组,执行那个roles [root@m01 roles]# cat /etc/ansible/roles/site.yml - hosts: backup remote_user: root roles: - rsync 4.查看rsync角色的tasks任务 [root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml - name: Install Rsync Server yum: name=rsync state=present - name: Configure Rsync Server copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }} with_items: - {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"} - {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"} notify: Restart Rsync Server - name: Start Rsync Server service: name=rsyncd state=started enabled=yes 5.查看rsync角色的handlers [root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml - name: Restart Rsync Server service: name=rsyncd state=restarted 6.查看rsync角色的files目录 [root@m01 roles]# ll /etc/ansible/roles/rsync/files/ total 8 -rw-r--r-- 1 root root 322 Nov 16 18:49 rsyncd.conf -rw------- 1 root root 20 Nov 16 18:30 rsync.passwd 8.执行roles,使用-t指定执行测试rsync角色 [root@m01 roles]# ansible-playbook -i hosts -t rsync site.yml PLAY [backup] ******************************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [172.16.1.41] TASK [backup : Install Rsync Server] *********************************************************************** ok: [172.16.1.41] TASK [backup : Configure Rsync Server] ********************************************************************* ok: [172.16.1.41] TASK [backup : Start Rsync Server] ************************************************************************* ok: [172.16.1.41] PLAY RECAP ***********************************************************************************=0 failed=0
2021年03月16日
202 阅读
0 评论
0 点赞
1
...
4
5
6