网站建设在线视频卡顿,网站建设需要投资多少,商贸公司企业简介模板,做废钢推广网站目录
一、理论
1.playbook剧本
2.ROLES角色
3.关系
4.Roles模块搭建LNMP架构
二、实验
1.Roles模块搭建LNMP架构
三、问题
1.剧本启动php报错语法问题
2.剧本启动mysql报错语法问题
3.剧本启动nginx开启失败
4.剧本安装php失败
5.使用yum时报错
6.rpm -Uvh https…
目录
一、理论
1.playbook剧本
2.ROLES角色
3.关系
4.Roles模块搭建LNMP架构
二、实验
1.Roles模块搭建LNMP架构
三、问题
1.剧本启动php报错语法问题
2.剧本启动mysql报错语法问题
3.剧本启动nginx开启失败
4.剧本安装php失败
5.使用yum时报错
6.rpm -Uvh https://xxxx.rpm 提示连接失败问题
7.依赖检测失败
8.剧本修改php失败
9.剧本启动php失败
10.剧本修改mysql脚本文件失败 一、理论
1.playbook剧本
1架构
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触发的任务列表2核心元素 3参数 2.ROLES角色
1重构思路
用roles和不用roles的逻辑其实是一样的要根据服务器的功能先收集服务器所需要的文件再进行安装传输文件启动服务或重启服务等操作。只是我们这次不必担心命名问题因为不同的服务或不同功能的服务器所需要的配置文件会被放到不同的目录不会冲突。
roles这个角色可以根据同类服务器的功能定义也可以通过服务去定义因为我们是一键部署所有服务和项目也不存在指定部署服务的需求如果通过服务来定义也容易出现需要很多when判断的情况如果用同类功能的服务器定义角色可能会出现同一条命令需要反复编写的情况自行选择我采取根据同类功能服务器去定义我们的roles角色。
2目录结构 3目录说明 3.关系
playbook是是由一系列的play组成 每个play由一个或者多个task组成 一个task一般是一个ansible module 三者的关系示意图如下 4.Roles模块搭建LNMP架构 1规划
通过ansible的roles角色去配置lnmp环境nginx、php、mysql都使用源码编译安装
2架构 3部署Nginx角色
创建nginx角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/nginx
mkdir -p /etc/ansible/playbook/roles/nginx/defaults
mkdir -p /etc/ansible/playbook/roles/nginx/files
mkdir -p /etc/ansible/playbook/roles/nginx/handlers
mkdir -p /etc/ansible/playbook/roles/nginx/meta
mkdir -p /etc/ansible/playbook/roles/nginx/tasks
mkdir -p /etc/ansible/playbook/roles/nginx/templates
mkdir -p /etc/ansible/playbook/roles/nginx/vars制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录:
vim /etc/ansible/playbook/roles/nginx/files/index.php?php
phpinfo();
?制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源:
vim /etc/ansible/playbook/roles/nginx/files/nginx.repo
# nginx.repo[nginx]
namenginx repo
baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck1
enabled1
gpgkeyhttps://nginx.org/keys/nginx_signing.key
module_hotfixestrue制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件加载nginx的配置模板文件:
vim /etc/ansible/playbook/roles/nginx/handlers/main.yml
- name: reload nginxservice: name{{service}} statereloaded
制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件:
vim /etc/ansible/playbook/roles/nginx/tasks/init.yml
- name: disable firewalldservice: namefirewalld statestopped enablednoignore_errors: True- name: disable selinuxshell: /usr/sbin/setenforce 0ignore_errors: true制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件:
- include: init.yml- name: copy nginx yum repo filecopy: srcnginx.repo dest/etc/yum.repos.d/- name: install nginxyum: name{{pkg}} statelatest- name: copy index.phpcopy: srcindex.php dest{{root_dir}}- name: copy nginx template configuration filetemplate: srcdefault.conf.j2 dest/etc/nginx/conf.d/default.confnotify: reload nginx- name: start nginxservice: name{{service}} statestarted enabledyes制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文:
vim /etc/ansible/playbook/roles/nginx/templates/default.conf.j2 ---修改2到8行-----------listen {{http_port}};server_name {{http_hostname}};#access_log /var/log/nginx/host.access.log main;location / {root {{root_dir}};---修改29到36行-----------location ~ \.php$ {root {{root_dir}};fastcgi_pass {{http_remote}};fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name;include fastcgi_params;}制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件:
http_port: 192.168.204.69:80
http_hostname: www.david.com
root_dir: /usr/share/nginx/html
http_remote: 192.168.204.100:9000
pkg: nginx
service: nginx(4) 部署PHP角色
创建php角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/php
mkdir -p /etc/ansible/playbook/roles/php/defaults
mkdir -p /etc/ansible/playbook/roles/php/files
mkdir -p /etc/ansible/playbook/roles/php/handlers
mkdir -p /etc/ansible/playbook/roles/php/meta
mkdir -p /etc/ansible/playbook/roles/php/tasks
mkdir -p /etc/ansible/playbook/roles/php/templates
mkdir -p /etc/ansible/playbook/roles/php/vars制作/etc/ansible/playbook/roles/php/files/index.php的网页文件:
vim /etc/ansible/playbook/roles/php/files/index.php ?php
phpinfo();
?制作/etc/ansible/playbook/roles/php/handlers/main.yml文件:
vim /etc/ansible/playbook/roles/php/handlers/main.yml - name: reload phpservice: name{{service}} statereloaded制作/etc/ansible/playbook/roles/php/tasks/main.yml文件:
/etc/ansible/playbook/roles/php/tasks]# vim main.yml - 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 phpcommand: yum install -y php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml p hp72w-fpm php72w-mysqlnd php72w-opcache --skip-broken- name: create php useruser: name{{user_name}}- name: crate web root dirfile: name{{root_dir}} statedirectory- name: copy index.phpcopy: srcindex.php dest{{root_dir}}- 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{{remote_addr}}notify: reload php- name: start phpservice: name{{service}} statestarted enabledyes制作/etc/ansible/playbook/roles/php/vars/main.yml文件:
vim /etc/ansible/playbook/roles/php/vars/main.yml timezone: Asia/Shanghai
user_name: php
http_port: 192.168.204.100:9000
remote_addr: 192.168.204.69
root_dir: /usr/share/nginx/html
service: php-fpm(5) 部署MySQL角色
创建mysql角色所需要的工作目录:
mkdir -p /etc/ansible/playbook/roles/mysql
mkdir -p /etc/ansible/playbook/roles/mysql/defaults
mkdir -p /etc/ansible/playbook/roles/mysql/files
mkdir -p /etc/ansible/playbook/roles/mysql/handlers
mkdir -p /etc/ansible/playbook/roles/mysql/meta
mkdir -p /etc/ansible/playbook/roles/mysql/tasks
mkdir -p /etc/ansible/playbook/roles/mysql/templates
mkdir -p /etc/ansible/playbook/roles/mysql/vars制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/handlers/main.yml - name: reload mysqlservice: name{{service}} statereloaded制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/tasks/main.yml - name: remove mariadbshell: yum remove mariadb* -yignore_errors: True- name: install yum reposhell: wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm --force --nodeps rpm -ivh mysql57-commu nity-release-el7-11.noarch.rpm --force --nodepsignore_errors: True- name: modify gpgcheckreplace: path/etc/yum.repos.d/mysql-community.repo regexpgpgcheck1 replacegpgcheck0- name: install mysqlyum: namemysql-server statelatest- name: start mysqlservice: name{{service}} statestarted enabledyes- name: make passwd.shscript: /etc/ansible/playbook/roles/mysql/files/passwd.sh制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件:
vim /etc/ansible/playbook/roles/mysql/vars/main.yml service: mysqld.service(5)启动安装分布式LNMP
vim /etc/ansible/playbook/lnmp.yml - name: nginx playhosts: webserversremote_user: rootroles:- nginx- name: php playhosts: phpserversremote_user: rootroles:- php- name: mysql playhosts: mysqlserversremote_user: rootroles:- mysql二、实验 1.Roles模块搭建LNMP架构
1环境
表1 主机
主控端192.168.204.199ansible受控端-1192.168.204.69nginx受控端-2192.168.204.186mysql受控端-3192.168.204.100php (2) 配置主机 3部署Nginx角色
创建nginx角色所需要的工作目录: 制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录: 制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源: 制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件加载nginx的配置模板文件: 制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件: 制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件: 制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文: 制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件: (4) 部署PHP角色
创建php角色所需要的工作目录: 制作/etc/ansible/playbook/roles/php/files/index.php的网页文件: 制作/etc/ansible/playbook/roles/php/handlers/main.yml文件: 制作/etc/ansible/playbook/roles/php/tasks/main.yml文件: 制作/etc/ansible/playbook/roles/php/vars/main.yml文件: (5) 部署MySQL角色
创建mysql角色所需要的工作目录: 注意需要提前创建passwd.sh 制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件: 制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件: 制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件: (6)启动安装分布式LNMP 启动
nginx启动成功 php启动成功 mysql启动成功 访问浏览器成功 三、问题
1.剧本启动php报错语法问题
1报错 2原因分析
左端代码未对齐
3解决方法
修改前 修改后 2.剧本启动mysql报错语法问题 (1) 报错 2原因分析
左端代码未对齐
3解决方法
修改前 修改后 3.剧本启动nginx开启失败
1报错 2原因分析
nginx端查询 default.conf.j2 配置错误 未知的地址池 3解决方法
nginx端先移除多余配置文件 ansible端修改配置文件 修改前 修改后 4.剧本安装php失败
(1) 报错 2原因分析
[弃用警告]:只在通过squash_actions使用循环时调用“yum”一次是不赞成的。而不是如果使用循环提供多个项目并指定 name: {{ item }} 请使用 name: {{ ... }} 并删除循环。这个特性将在2.11版本中删除。弃用的警告可以通过在ansible.cfg中设置deprecation_warningsFalse来禁用。
3解决方法
这里先暂不修改yml文件
修改php端网卡 关闭防火墙和安全机制 如还是报错修改/etc/ansible/playbook/roles/php/tasks/main.yml文件安装方式不采用with_items方式直接以command模块方式运行
修改前 修改后 成功 5.使用yum时报错
1报错
遇见failure: repodata/repomd.xml from base: [Errno 256]错误 2原因分析
yum源
3解决方法
更新依赖包重新安装发现没用
yum clean all
yum install -y epel-release
更新ca-certficates包
yum clean all
yum --disablerepoepel -y update ca-certificates
将https转为http
cp /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
sed -i s#https://#http://#g /etc/yum.repos.d/epel.repo
更改resolv.conf文件然后重启network服务service network restart
nameserver 8.8.8.8
search localdomain
以上步骤执行完成后如果仍然失败继续执行以下步骤
查看yum的依赖包
[rootlocalhost yum.repos.d]# rpm -qa|grep yum
PackageKit-yum-1.1.10-2.el7.centos.x86_64
yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch
yum-langpacks-0.4.2-7.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-utils-1.1.31-54.el7_8.noarch
yum-3.4.3-168.el7.centos.noarch删除依赖包
[rootlocalhost yum.repos.d]# rpm -e yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64 yum-3.4.3-168.el7.centos.noarch将系统默认的yum功能删除
[rootlocalhost yum.repos.d]# rpm -aq|grep yum|xargs rpm -e --nodeps 查看本版和系统的位数
[rootlocalhost yum.repos.d]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)[rootlocalhost yum.repos.d]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped下载yum包
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm 注意要注意版本 在http://mirrors.kernel.org/centos/ 或者 http://mirrors.163.com/centos/里下载 下载完成执行以下命令
# rpm -ivh --nodeps yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# rpm -ivh --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
# rpm -ivh --nodeps yum-3.4.3-132.el7.centos.0.1.noarch.rpm 进入 /etc/yum.repos.d/目录中在http://mirrors.163.com/.help/centos.html在里面下载对应版本的repo文件我下载了CentOS-Base.repo 对此文件进行备份以防修改错误还有的用 修改$releasever为自己的版本号我的为7 保存退出 6.rpm -Uvh https://xxxx.rpm 提示连接失败问题
1报错 2原因分析
域名解析失败
3解决方法
查询IP地址
通过What Is My IP Address? Free IP Lookup查询对应url ip地址 修改hosts 文件追加一下内容
vim /etc/hosts45.55.104.9ip webtatic.com可自定义重新执行命令访问对应地址成功 7.依赖检测失败
1报错
警告/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY\n\t软件包 epel-release-7-14.noarch 已经安装, stderr_lines: [警告/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY 2原因分析
未忽视依赖关系
3解决方法
在后面加上--force --nodeps就可以了nodeps的意思是忽视依赖关系。
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm --force --nodeps rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force --nodeps
// 以上是我个人下载的erlang版本要依据你们自己下载的版本改一下
修改前 修改后 成功 8.剧本修改php失败
1报错
www.conf文件不存在 2原因分析
缺失文件
3解决方法
新建目录并上传文件 成功 9.剧本启动php失败
1报错
ansible端 php端
Failed to start php-fpm.service: Unit not found 2原因分析
系统中没有配置 php-fpm.service 文件
3解决方法
通过find / -name nginx.service 找到nginx.service 配置文件路径
[rootlocalhost php-fpm.d]# find /lib/systemd/system -name php-fpm.service
[rootlocalhost php-fpm.d]# find /etc/systemd/system -name php-fpm.service
/etc/systemd/system/php-fpm.service创建软链接
[rootlocalhost php-fpm.d]# sudo ln -s /lib/systemd/system/php-fpm.service /etc/systemd/system/php-fpm.service然后去到那个路径 新建一个php-fpm.service文件 保存下面这一段内容php-fpm路径根据自己的实际情况修改
[Unit]
DescriptionThe PHP FastCGI Process Manager
Aftersyslog.target network.target[Service]
Typesimple
PIDFile/run/php-fpm.pid
ExecStart/usr/local/php/sbin/php-fpm你的php-fpm路径 --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf你的php-fpm配置文件路径
ExecReload/bin/kill -USR2 $MAINPID
ExecStop/bin/kill -SIGINT $MAINPID[Install]
WantedBymulti-user.target
修改为
[Unit]
DescriptionThe PHP FastCGI Process Manager
Aftersyslog.target network.target[Service]
Typesimple
PIDFile/run/php-fpm.pid
ExecStart/etc/systemd/system --nodaemonize --fpm-config /etc/php-fpm.d/www.conf
ExecReload/bin/kill -USR2 $MAINPID
ExecStop/bin/kill -SIGINT $MAINPID[Install]
WantedBymulti-user.target10.剧本修改mysql脚本文件失败
1报错 2原因分析
缺少passwd.sh文件
3解决方法
新建文件 成功