当前位置: 首页 > news >正文

淘宝网站建设类直通车自建网站教程

淘宝网站建设类直通车,自建网站教程,怎么自己做电商,微信运营方案playbooks 本身由以下各部分组成 #xff08;1#xff09;Tasks#xff1a;任务#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 #xff08;2#xff09;Variables#xff1a;变量 #xff08;3#xff09;Templates#xff1a;模… playbooks 本身由以下各部分组成 1Tasks任务即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 2Variables变量 3Templates模板 4Handlers处理器当changed状态条件满足时notify触发执行的操作 5Roles角色 playbook 剧本 总结 vim  XXX.yaml- name:                      #指定play名称hosts:                     #指定主机组remote_user:               #执行用户 gather_facts: true|false   #是否收集远程主机facts信息vars:                      #定义变量tasks:                     #定义task任务列表- name:                 #定义task任务名称模块:                 #定义任务使用的模块和参数with_items:           #定义循环列表when:                 #定义判断条件 ! true则执行任务否则不执行任务ignore_errors: true   #忽略任务失败notify:               #定义task任务changed状态时触发的任务名tags:                 #指定标签ansible-playbook --tags 仅执行拥有指定 tags 标签的任务always标签总会执行handlers:                  #定义notify触发的任务列表 task任务 模块语法格式 模块名: 参数选项1值  参数选项2{{变量名}}  ...模块名:参数选项1: 值参数选项2: {{变量名}}... with_items 和 变量 的语法格式 with_items: [值1, 值2, 值3]with_items: - 值1 - 值2 - 值3 值为对象键值对字段时 with_items: - {key1: value1, key2: value2, ...} - {key1: value3, key2: value4, ...}with_items: - key1: value1key2: value2 - key1: value3key2: value4 template模板模块 1先要准备一个 xxx.j2 模板文件在文件中使用 {{变量名}} 引用主机变量 或者 vars 自定义的变量 及 facts 字段的值 2在 playbook 中的 tasks 中定义 template 模板配置  template: srcxxx.j2  destxxx roles 角色 的作用【重中之重】 把playbook剧本里的各个play看作为角色将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理需要的时候可在playbook中直接使用roles调用所以roles可以实现playbook代码的复用。 实验 架构 192.168.80.101 ansible 192.168.80.102 被控服务器 192.168.80.103 被控服务器 /etc/ansible/hosts配置如下 cat /etc/ansible/hosts 示例1 安装httpd服务 mkdir -p /etc/ansible/playbook/ cp /etc/httpd/conf/httpd.conf /etc/ansible/playbook/httpd.conf #本机的httpd配置复制到ansible目录。可以自定义位置在下面yaml更改对应位置即可。 vim /etc/ansible/playbook/test1.yaml---     #yaml文件以---开头以表明这是一个yaml文件可省略。#若文件中存在多个--- 则代表有多个yaml配置文件存在于同一个文件中 - name: the first play for install apache     #定义一个play的名称可省略gather_facts: false    #设置不进行facts信息收集这可以加快执行速度可省略hosts: webservers    #指定要执行任务的被管理主机组如多个主机组用冒号分隔remote_user: root    #指定被管理主机上执行任务的用户tasks:     #定义任务列表任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: test connection    #自定义任务名称ping:     #使用 module: [options] 格式来定义一个任务- name: disable selinuxcommand: /sbin/setenforce 0    #command模块和shell模块无需使用keyvalue格式ignore_errors: True     #如执行命令的返回值不为0就会报错tasks停止可使用ignore_errors忽略失败的任务。#这里需要忽略是因为如果selinux已经关闭再次关闭会返回1- name: disable selinux foreverreplace: path/etc/selinux/config regexpenforcing replacedisabled- name: disable firewalldservice: namefirewalld statestopped enabledno    #使用 module: options 格式来定义任务option使用keyvalue格式 # # 若想要挂载光盘使用本地yum源安装需要在控制服务器存在/etc/yum.repos.d/repo.bak/local.repo配置文件可以省略- name: mount cdrommount: src/dev/sr0 path/mnt fstypeiso9660 statemounted- name: copy local yum configuration filecopy: src/etc/yum.repos.d/repo.bak/local.repo dest/etc/yum.repos.d/local.repo #- name: install httpdyum: namehttpd statelatest- name: prepare httpd configuration filecopy: src/etc/ansible/playbook/httpd.conf dest/etc/httpd/conf/httpd.conf #这里需要一个事先准备好的/opt/httpd.conf文件notify: restart httpd ##如以上操作后为changed的状态时会通过notify指定的名称触发对应名称的handlers操作- name: start apache httpdservice: namehttpd statestarted enabledyeshandlers:     #handlers中定义由notify触发的任务- name: restart httpd    #notify和handlers中任务的名称必须一致。注意reload不能让httpd重新加载配置文件中端口等配置只能restartservice: namehttpd staterestarted##Ansible在执行完某个任务之后并不会立即去执行对应的handler而是在当前play中所有普通任务都执行完后再去执行handler ##这样的好处是可以多次触发notify但最后只执行一次对应的handler从而避免多次重启。//运行playbook ansible-playbook test1.yaml//补充参数 -k–ask-pass用来交互输入ssh密码 -K-ask-become-pass用来交互输入sudo密码 -u指定用户ansible-playbook test1.yaml --syntax-check    #检查yaml文件的语法是否正确 ansible-playbook test1.yaml --list-task       #检查tasks任务 ansible-playbook test1.yaml --list-hosts      #检查生效的主机 ansible-playbook test1.yaml --start-at-taskinstall httpd     #指定从某个task开始运行   定义、引用变量 vim /etc/ansible/playbook/test2.yaml- name: second playhosts: dbserversremote_user: root#remote_user: zhangsan#become: yes #这三行代表 远程控制时 使用的普通用户zhangsan提升权限使用root用户#become_user: root #需要先修改sudo配置/etc/sudoers使zhangsan用户可以使用sudo提权vars: #定义变量- groupname: mysql #格式为 key: value- username: nginx- filename: /opt/123.txtgather_facts: true #可以不写 默认开启tasks:- name: create groupgroup: name{{groupname}} systemyes gid2800 #使用 {{key}} 引用变量的值 system为默认项可以省略不写不影响- name: create useruser: name{{username}} uid{{uid}} group{{groupname}} #uid并未写在var中由外部命令执行时传参- name: copy file#copy: content{{ansible_default_ipv4}} dest{{filename}} #在setup模块中可以获取facts变量信息 这里获取ipv4块所有信息copy: content{{ansible_default_ipv4.address}} dest{{filename}} #在setup模块中可以获取facts变量信息 这里获取ipv4块中address一项信息- name: modify username and groupname of filefile: path{{filename}} owner{{username}} group{{groupname}} ansible-playbook test2.yaml -e usernamenginx2 -e uid1234 #在命令行里定义变量 命令行内指定的参数优先级更高可以覆盖playbook var内写的变量 可看到命令行的传参username覆盖了playbook中定义的变量并且uid也传参进去其余参数都从playbook中已经定义的var变量中取  指定远程主机sudo切换用户 在上面的脚本做修改 额外注意在 /etc/ansible/hosts 组变量中是否已经指定了 用户等参数优先级命令行传参host组定义playbook中定义变量 若host组中已经规定了用户playbook中的用户设置become提权等可能被覆盖不会生效 --- - hosts: dbserversremote_user: zhangsan            become: yes                    #2.6版本以后的参数之前是sudo意思为切换用户运行become_user: root              #指定sudo用户为root 运行前需要先在被控制的远程主机上创建zhangsan用户并修改sudo配置使zhangsan用户可以使用sudo提权才能在playbook中使用become 使用root用户 adduser zhangsan passwd zhangsanvim /etc/sudoerszhangsan ALLALL 执行playbook原先命令上附加上 -k -K参数 ansible-playbook test2.yaml -e usernamenginx3 -e uid1357 -k -K-k -K -k–ask-pass用来交互输入ssh密码 -K-ask-become-pass用来交互输入sudo密码 都输入zhangsan密码即可 -u指定用户   when条件判断 在Ansible中提供的唯一一个通用的条件判断是when指令当when指令的值为true时则该任务执行否则不执行该任务。 when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务 vim /etc/ansible/playbook/test3.yaml--- - name: third playhosts: allremote_user: roottasks:- name: touch filefile: path/opt/1.txt statetouch #创建文件#command: /sbin/shutdown/ -r now #重启指令when: inventory_hostname 192.168.80.102#写法1 inventory_hostname为主机清单 /etc/ansible/hosts的主机名#when: ansible_default_ipv4.address ! 192.168.80.103 #写法2 ansible_default_ipv4.address为gather_facts获取的主机信息 ! 含义为除了103主机#when指令中的变量名不需要手动加上 {{}} ansible-playbook test3.yaml 迭代循环 with_items Ansible提供了很多种循环结构一般都命名为with_items作用等同于 loop 循环。 with_items普通取值  写法演示 vim /etc/ansible/playbook/test4.yaml#with_items普通取值 --- - name: fouth playhosts: dbserversremote_user: root ##############################################################################vars:myfile:- /opt/a- /opt/b- /opt/c- /opt/dtasks:- name: touch directory #✨方法1 预先编写var变量随后赋值给with_itemswith_items: {{myfile}}file: path{{item}} statedirectory #模组 横向写法 ##############################################################################- name: touch file 1 #✨方法2 直接在with_items中定义file: #模组 纵向写法path: {{item}}state: touchwith_items: #with_items纵向写法- /root/a- /root/b- /root/c- /root/d- name: touch file 2file: #模组 纵向写法path: {{item}}state: touchwith_items: [ /opt/aa, /opt/bb, /opt/cc, /opt/dd ] #with_items横向写法 with_items——值为对象键值对字段 写法演示 vim /etc/ansible/playbook/test5.yaml#with_items——值为对象键值对字段 --- - name: fifth playhosts: dbserversremote_user: roottasks:- name: touch filewith_items: #✨with_items键值对字段对象横向写法- {filename: /opt/afile, username: xue, groupname: xue}- {filename: /opt/bfile, username: zhangsan, groupname: zhangsan}#当值为对象键值对字段引用值需要像item.filename指定对象中的某个字段file: path{{item.filename}} owner{{item.username}} group{{item.groupname}} statetouch #模块 横向写法- name: create dirwith_items: #✨with_items键值对字段对象纵向写法- filename: /opt/cfileusername: xuegroupname: xue- filename: /opt/dfileusername: zhangsangroupname: zhangsanfile: #模块 纵向写法path: {{item.filename}}owner: {{item.username}}group: {{item.groupname}}state: directory    执行playbook test4 ansible-playbook test4.yaml  执行playbook test5 由于playbook中指定了用户与组需要在被控制的远程主机创建 adduser xue adduser zhangsan  查看用户 与 组 信息playbook中指定的{filename: /opt/afile, username: xue, groupname: xue}一定要与系统中的用户—组对应关系相匹配不然报错   在ansible服务器运行 ansible-playbook test5.yaml Templates 模块 Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件可以看作是一个编译过的模板文件用来产生目标文本传递Python的变量给模板去替换模板中的标记。 1先要准备一个 xxx.j2 模板文件在文件中使用 {{变量名}} 引用主机变量 或者 vars 自定义的变量 及 facts 字段的值 2在 playbook 中的 tasks 中定义 template 模板配置  template: srcxxx.j2  destxxx 1.先准备一个以 .j2 为后缀的 template 模板文件设置引用的变量 cp /etc/httpd/conf/httpd.conf /etc/ansible/playbook/httpd.conf.j2 vim /etc/ansible/playbook/httpd.conf.j2Listen {{http_port}}                #42行 ServerName {{server_name}}           #95行 DocumentRoot {{root_dir}}          #119行 2.修改主机清单文件定义变量用于传参给模版 vim /etc/ansible/hosts[webservers] 192.168.80.102 http_port192.168.80.102:80 server_namewww.ws1.com:80 root_dir/var/www/html/webserver1 192.168.80.103 http_port192.168.80.103:80 server_namewww.ws2.com:80 root_dir/var/www/html/webserver2 3.编写 playbook在其中引用第一步定义的template模版。运行时host文件变量会传给playbook yaml配置文件再传参给模版。 根据不同host ip为不同的服务器生成指定的配置文件。 vim /etc/ansible/playbook/test6.yaml- name: sixth playhosts: webserversremote_user: rootvars:- pkgname: httpdtasks:- name: install apacheyum: namehttpd statelatest#创建webserver1 webserver2文件夹此处直接在每个主机上都创建这两个文件夹可以指定when不同ip做更细分优化- name: create root dirfile: statedirectory path{{item}}with_items:- /var/www/html/webserver1- /var/www/html/webserver2#根据不同ip生成不同页面- name: create index.html in www.ws1.comcopy: contenth1this is web1/h1 dest/var/www/html/webserver1/index.htmlwhen: ansible_default_ipv4.address 192.168.80.102- name: create index.html in www.ws2.comcopy: contenth1this is web2/h1 dest/var/www/html/webserver2/index.htmlwhen: inventory_hostname 192.168.80.103#引用template模板生成配置后触发restart - name: prepare configuration filetemplate: src/etc/ansible/playbook/httpd.conf.j2 dest/etc/httpd/conf/httpd.confnotify: restart apache #本处可以为reload也可以为restart。虽然触发项最后才执行会在start后reload。#但是实测可能是由于start需要时间reload第一次运行会报错第二次运行httpd完全启动后才正常。#所以直接使用restart即使未启动restart也会直接执行start不报错。#后续补充restart 似乎也需要执行两次应该也与触发项或是启动时间有关- name: start apacheservice: name{{pkgname}} statestarted enabledyeshandlers:- name: reload apacheservice: name{{pkgname}} statereloadedansible-playbook test6.yaml   tags 模块 可以在一个playbook中为某个或某些任务定义“标签”在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。 playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时无论执行哪一个tags时定义有always的tags都会执行。 vim /etc/ansible/playbook/test7.yaml- name: seventh playhosts: dbserversremote_user: roottasks:- name: create together-do.txtfile: path/opt/together-do.txt statetouchtags:- xiaoming_do_it- xiaohong_do_it- name: create always-do.txtfile: path/opt/always—do.txt statetouchtags:- always- name: create xiaohong-do.txtcopy: content0721 dest/opt/xiaohong—do.txttags:- xiaohong_do_it ansible-playbook test7.yaml --tagsxiaoming_do_it #执行 tagxiaoming与always   ansible-playbook test7.yaml --tagsxiaohong_do_it #执行 tagxiaohong与alwaysRoles 模块 roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。 简单来讲roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。 roles 角色 的作用 把playbook剧本里的各个play看作为角色将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理需要的时候可在playbook中直接使用roles调用所以roles可以实现playbook代码的复用。 roles 的目录结构 cd /etc/ansible/ tree roles/roles/ ├── httpd/                 #相当于 playbook 中的 每一个 play 主题目录名即为角色名 │   ├── files/                  #存放copy 模块或 script 模块调用的文件 │   ├── templates/              #存放template 模块调用的jinjia2 模板文件 │   ├── tasks/main.yml          #定义此角色的任务列表 │   ├── handlers/main.yml       #定义此角色通过notity触发条件时执行的任务列表 │   ├── vars/main.yml           #定义此角色用到的自定义变量 │   ├── defaults/main.yml       #定义此角色用到的设定默认变量一般不用 │   └── meta/main.yml           #定义此角色的元数据信息 └── mysql/├── files/├── templates/├── tasks/├── handlers/├── vars/├── defaults/└── meta/ ●files 用来存放由 copy 模块或 script 模块调用的文件。 ●templates 用来存放 jinjia2 模板template 模块会自动在此目录中寻找 jinjia2 模板文件。 ●tasks 此目录应当包含一个 main.yml 文件用于定义此角色的任务列表此文件可以使用 include 包含其它的位于此目录的 task 文件。 ●handlers 此目录应当包含一个 main.yml 文件用于定义此角色中触发条件时执行的动作。 ●vars 此目录应当包含一个 main.yml 文件用于定义此角色用到的变量。 ●defaults 此目录应当包含一个 main.yml 文件用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量 ●meta 此目录应当包含一个 main.yml 文件用于定义此角色的元数据信息及其依赖关系。 在一个 playbook 中使用 roles的步骤 1创建以 roles 命名的目录 mkdir /etc/ansible/roles/ -p #yum装完默认就有 2创建全局变量目录可选 mkdir /etc/ansible/group_vars/ -p touch /etc/ansible/group_vars/all #文件名自己定义引用的时候注意 3在 roles 目录中分别创建以各角色名称命名的目录如 httpd、mysql mkdir /etc/ansible/roles/httpd mkdir /etc/ansible/roles/mysql 4在每个角色命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录用不到的目录可以创建为空目录也可以不创建 mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} 5在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件千万不能自定义文件名 touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml 6修改 site.yml 文件针对不同主机去调用不同的角色 vim /etc/ansible/site.yml --- - hosts: webserversremote_user: rootroles:- httpd - hosts: dbserversremote_user: rootroles:- mysql 7运行 ansible-playbook cd /etc/ansible ansible-playbook site.yml 示例安装分布式LNMP架构web服务器 创建工作目录 mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta} -p mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -ptouch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yaml touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yaml touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yaml 编辑主机列表 vim /etc/ansible/hosts[webservers] 192.168.80.101[mysqlservers] 192.168.80.102[phpservers] 192.168.80.103 创建playbook包含roles vim /etc/ansible/playbook/lnmp.yaml- name: nginx playhosts: webserversremote_user: rootroles:- nginx- name: php playhosts: phpserversremote_user: rootroles:- php- name: mysql playhosts: mysqlserversremote_user: rootroles:- mysqlrole:nginx vars 变量 vim /etc/ansible/roles/nginx/vars/main.yamlhttp_port: 192.168.80.101:80 http_hostname: www.xue.com root_dir: /usr/share/nginx/html php_remote: 192.168.80.103:9000 pkg: nginx service: nginxtasks 任务 vim /etc/ansible/roles/nginx/tasks/init.yaml- name: disable firewalldservice: namefirewalld statestopped enabledno- name: disable selinuxshell: /usr/sbin/setenforce 0ignore_errors: true vim /etc/ansible/roles/nginx/tasks/main.yaml- include: init.yaml- name: copy nginx yum repo filecopy: srcnginx.repo dest/etc/yum.repos.d/- name: install nginxyum: name{{pkg}} statelatest- name: copy index.phpunarchive: src/etc/ansible/roles/nginx/files/wordpress-4.9.4-zh_CN.tar.gz dest{{root_dir}} copyyes- name: copy nginx template configuration filetemplate: srcdefault.conf.j2 dest/etc/nginx/conf.d/default.confnotify: reload nginx- name: start nginxservice: name{{service}} statestarted enabledyeshandles task中触发器 vim /etc/ansible/roles/nginx/handlers/main.yaml- name: reload nginxservice: name{{service}} statereloaded files 文件 vim /etc/ansible/roles/nginx/files/nginx.reponginx.repo 用于yum下载nginx。 也可以不使用这个方法用不着准备这个文件直接yum install epel 更新epel源[nginx] namenginx repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue准备 WordPress论坛安装包 (不一定要藏这么深的文件夹只要脚本中对应上路径即可。为了显示file文件夹的作用就放在这里/etc/ansible/roles/nginx/files/wordpress-4.9.4-zh_CN.tar.gz templates模版 用于给nginx服务器生成配置 vim /etc/ansible/roles/nginx/templates/default.conf.j2server {listen {{http_port}};server_name {{http_hostname}};#access_log /var/log/nginx/host.access.log main;location / {root {{root_dir}};index index.php index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#location ~ \.php$ {root {{root_dir}};fastcgi_pass {{php_remote}};fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name;include fastcgi_params;}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#} }role:mysql  vars 变量 vim /etc/ansible/roles/mysql/vars/main.yamlhttp_port: 192.168.80.101:80 http_hostname: www.xue.com root_dir: /usr/share/nginx/html php_remote: 192.168.80.103:9000 pkg: nginx service: nginxtasks 任务 vim /etc/ansible/roles/mysql/tasks/init.yaml- name: disable firewalldservice: namefirewalld statestopped enabledno- name: disable selinuxshell: /usr/sbin/setenforce 0ignore_errors: true vim /etc/ansible/roles/mysql/tasks/main.yaml- name: yum uninstall mariadb*yum: namemariadb* stateabsent- name: wget mysqlshell: wget -i -c http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm -P /etc/yum.repos.d- name: rpm mysql57-community-releaseshell: rpm -ivh /etc/yum.repos.d/mysql57-community-release-el7-11.noarch.rpmignore_errors: True- name: turn off yum gpgcheckreplace: path/etc/yum.repos.d/mysql-community.repo regexpgpgcheck1 replacegpgcheck0- name: yum install mysqlyum: namemysql-server- name: start and enable mysqlservice: enabledtrue namemysqld.service statestarted- name: get passwd from logshell: grep password /var/log/mysqld.log | awk NR1{print $NF}register: mysql_password #将获取的密码导入到mysql_password的变量中 - name: echo passwddebug: msg: {{ mysql_password }} #输出变量mysql_password的值 #grep password /var/log/mysqld.log     #在日志文件中找出root用户的初始密码 #2021-07-31T07:55:00.366359Z 1 [Note] A temporary password is generated for rootlocalhost: ga7%d0*jD #grep password /var/log/mysqld.log | awk {print $NF}#临时密码修改 - name: grant locationshell: mysql --connect-expired-password -uroot -p{{ mysql_password[stdout] }} -e ALTER USER rootlocalhost IDENTIFIED BY Admin123;ignore_errors: True #授予root用户所有权限 - name: grant optionshell: mysql --connect-expired-password -uroot -pAdmin123 -e grant all privileges on *.* to root% identified by Admin123456 with grant option;ignore_errors: True #创建wordpress数据库 - name: create databaseshell: mysql --connect-expired-password -uroot -pAdmin123 -e create database wordpress;ignore_errors: True #赋予mywordpress用户访问wordpress的权限本地权限与远程权限 - name: grantshell: mysql --connect-expired-password -uroot -pAdmin123 -e grant all on wordpress.* to admin% identified by mywordpress123456;ignore_errors: True - name: grantshell: mysql --connect-expired-password -uroot -pAdmin123 -e grant all on wordpress.* to adminlocalhost identified by mywordpress123456;ignore_errors: True #刷新权限 - name: flush privilegesshell: mysql --connect-expired-password -uroot -pAdmin123 -e flush privileges;ignore_errors: True- name: yum uninstall mariadb*yum: namemysql57-community-release-el7-11.noarch.rpm stateabsent#为了防止每次yum操作都会自动更新卸载这个软件 role:php vars 变量 vim /etc/ansible/roles/php/vars/main.yamltimezone: Asia/Shanghai user_name: php http_port: 192.168.80.103:9000 nginx_addr: 192.168.80.101 root_dir: /usr/share/nginx/html service: php-fpmtasks 任务 vim /etc/ansible/roles/php/tasks/init.yaml- name: disable firewalldservice: namefirewalld statestopped enabledno- name: disable selinuxshell: /usr/sbin/setenforce 0ignore_errors: true vim /etc/ansible/roles/php/tasks/main.yaml- include: init.yaml- name: install yum reposhell: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpmignore_errors: True- name: install phpwith_items:- php72w- php72w-cli- php72w-common- php72w-devel- php72w-embedded- php72w-gd- php72w-mbstring- php72w-pdo- php72w-xml- php72w-fpm- php72w-mysqlnd- php72w-opcacheyum: name{{item}}- name: create php useruser: name{{user_name}}- name: crate web root dirfile: name{{root_dir}} statedirectory- name: copy index.phpunarchive: src/etc/ansible/roles/nginx/files/wordpress-4.9.4-zh_CN.tar.gz dest{{root_dir}} copyyes- name: modify php configuration filereplace: path/etc/php.ini regexp;date.timezone replacedate.timezone Asia/Shanghainotify: reload php- name: modify username and groupname in www.confreplace: path/etc/php-fpm.d/www.conf regexpapache replace{{user_name}}notify: reload php- name: modify listen addr in www.confreplace: path/etc/php-fpm.d/www.conf regexp127.0.0.1:9000 replace{{http_port}}notify: reload php- name: modify allowed client in www.confreplace: path/etc/php-fpm.d/www.conf regexp127.0.0.1 replace{{nginx_addr}}notify: reload php- name: start phpservice: name{{service}} statestarted enabledyes handles task中触发器 vim /etc/ansible/roles/php/handlers/main.yaml- name: reload phpservice: name{{service}} statereloaded配置密钥对验证 免交互登录 ssh-keygen -t rsa -P -f ~/.ssh/id_rsayum install -y sshpass sshpass -p 密码 ssh-copy-id -o StrictHostKeyCheckingno root192.168.80.102 sshpass -p 密码 ssh-copy-id -o StrictHostKeyCheckingno root192.168.80.102 sshpass -p 密码 ssh-copy-id -o StrictHostKeyCheckingno root192.168.80.103执行  ansible-playbook /etc/ansible/playbook/lnmp.yaml  访问http://192.168.80.101/wordpress/index.php 故障处理 出现这种情况由于是分布式部署lnmp与单机不同分布式部署必须在php服务器和nginx服务器上都存在相同的html目录以及其中的内容。 本次只在NGINX的html存放了WordPress论坛文件而没有创建php服务器的文件夹导致出错
http://www.huolong8.cn/news/208277/

相关文章:

  • 网站建设需求报告小程序制作视频教程
  • 华汇建设集团有限公司网站企业网站模板优化
  • 网站的建设时间表成都网页设计培训学校排名
  • 设计建设网站哪家好网站做程序员
  • 北京丰台网站建设网站建设说明书模板
  • 怎么自己免费创建网站汕头市企业网站建设教程
  • 网站开发技术案例个人网站设计与实现源码
  • 国泰君安官方网站建设集团平台公司是什么意思
  • 网站开发工具与环境删除windows wordpress
  • 手机网站开发教程pdf梓潼网站建设
  • 洛阳建设部官方网站软件ui设计培训学校
  • frp做网站gg模板网
  • 深圳印刷网站建设重庆房地产信息官网
  • 河北省城乡住房建设厅网站国家城乡与住房建设部网站
  • 上海网站建设的企wordpress 电台网站
  • 广告设计接单网站网站建设项目规划书
  • 企业首页网站属于什么类型网站微信开放平台官方网站
  • 网站建设 诺德中心临清建网站
  • 深圳做外贸网站哪家好咋做黄页网站
  • 做柜子网站建个电子商务网站多少钱
  • 天津网站建设制作品牌公司推广方案框架
  • 国内大中型网站建设知名公司c 可以用来做网站吗
  • 专业教学资源库网站建设工作什么网站可以申请做汉语老师
  • 足球直播网站开发定制wordpress主题根目录
  • wap自助建站排板天津优化网站
  • 安康做企业网站的山东网站备案注销申请表
  • 网站建设排名软件重庆当地网站
  • 企业网站建设存在的问题及建议营销网络
  • 上海防伪网站建设荆州建设网站
  • 网站开发证书要求手机网站底部导航代码