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

playbooks 分布式部署 LNMP

使用Ansible Playbooks进行分布式部署LNMP(Linux, Nginx, MySQL, PHP)是一种高效的方法。以下是一个详细的指南,包含Ansible Playbook的创建和配置,以便在多个服务器上自动化部署LNMP栈。

1. 安装Ansible

首先,在控制节点(通常是你的管理机器)上安装Ansible。

sudo yum install epel-release -y
sudo yum install ansible -y

2. 设置主机清单

创建一个主机清单文件,定义你的服务器。

# /etc/ansible/hosts[webservers]
webserver1 ansible_host=192.168.1.101
webserver2 ansible_host=192.168.1.102[dbservers]
dbserver ansible_host=192.168.1.103

3. 创建Playbooks

3.1. 全局变量文件

创建一个包含全局变量的文件。

# group_vars/all.yml---
nginx_version: "1.20.1"
mysql_root_password: "your_root_password"
mysql_database: "example_db"
mysql_user: "example_user"
mysql_password: "example_password"
php_version: "7.4"
3.2. 安装Nginx的Playbook

创建用于安装和配置Nginx的Playbook。

# playbooks/nginx.yml---
- hosts: webserversbecome: yestasks:- name: 安装Nginxyum:name: nginxstate: present- name: 启动并启用Nginx服务systemd:name: nginxstate: startedenabled: yes- name: 配置Nginxtemplate:src: templates/nginx.conf.j2dest: /etc/nginx/nginx.confnotify:- restart nginxhandlers:- name: restart nginxsystemd:name: nginxstate: restarted

创建一个Nginx配置模板。

# templates/nginx.conf.j2user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
}
3.3. 安装MySQL的Playbook

创建用于安装和配置MySQL的Playbook。

# playbooks/mysql.yml---
- hosts: dbserversbecome: yestasks:- name: 安装MySQLyum:name: mysql-serverstate: present- name: 启动并启用MySQL服务systemd:name: mysqldstate: startedenabled: yes- name: 设置MySQL root密码mysql_user:name: roothost: localhostpassword: "{{ mysql_root_password }}"login_unix_socket: /var/lib/mysql/mysql.sock- name: 创建数据库mysql_db:name: "{{ mysql_database }}"state: presentlogin_user: rootlogin_password: "{{ mysql_root_password }}"- name: 创建数据库用户并授予权限mysql_user:name: "{{ mysql_user }}"password: "{{ mysql_password }}"priv: "{{ mysql_database }}.*:ALL"state: presentlogin_user: rootlogin_password: "{{ mysql_root_password }}"
3.4. 安装PHP的Playbook

创建用于安装和配置PHP的Playbook。

# playbooks/php.yml---
- hosts: webserversbecome: yestasks:- name: 安装EPEL仓库yum:name: epel-releasestate: present- name: 安装Remi仓库yum:name: http://rpms.remirepo.net/enterprise/remi-release-7.rpmstate: present- name: 启用Remi PHP仓库yum_repository:name: remi-php{{ php_version | replace('.', '') }}enabled: yes- name: 安装PHP和扩展yum:name: "{{ item }}"state: presentwith_items:- php- php-fpm- php-mysqlnd- name: 启动并启用PHP-FPM服务systemd:name: php-fpmstate: startedenabled: yes

4. 运行Playbooks

运行Ansible Playbooks来部署LNMP。

ansible-playbook playbooks/nginx.yml
ansible-playbook playbooks/mysql.yml
ansible-playbook playbooks/php.yml

5. 检查和验证

确认Nginx、MySQL和PHP已正确安装和配置。你可以访问Nginx默认页面并通过MySQL命令行工具检查数据库和用户的创建。

总结

通过上述步骤,你可以使用Ansible自动化工具在多个服务器上分布式部署LNMP栈。这种方法确保了安装过程的一致性,并简化了大规模部署和管理的复杂性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 创新食堂管理:采购系统源码与供应链APP开发详解
  • 前后端demo-WarehouseManagement
  • 模板方法模式:Perl中定义算法骨架的艺术
  • 【致远互联FE协作办公平台 codeMoreWidget SQL注入】复现
  • 算法训练1
  • 2024-08-01 QML开发小技巧二
  • 华为OD应聘最全流程!!!
  • python初涉
  • memos content too long
  • 玩机进阶教程-----手机恢复出厂 误删除照片视频 误刷机后 几种数据恢复操作步骤解析【一】
  • 【通俗理解】马尔科夫毯:信息屏障与状态独立性的守护者
  • 基于地理面矢量的虚拟围栏
  • 深入 go interface 底层原理
  • 多模态模型BLIP2学习笔记
  • apache2和httpd web服务器
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【刷算法】从上往下打印二叉树
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • es6(二):字符串的扩展
  • javascript 总结(常用工具类的封装)
  • Js基础——数据类型之Null和Undefined
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • python 学习笔记 - Queue Pipes,进程间通讯
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 搞机器学习要哪些技能
  • 后端_ThinkPHP5
  • 让你的分享飞起来——极光推出社会化分享组件
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 原生 js 实现移动端 Touch 滑动反弹
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #Lua:Lua调用C++生成的DLL库
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (LeetCode) T14. Longest Common Prefix
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (zhuan) 一些RL的文献(及笔记)
  • (编译到47%失败)to be deleted
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (分布式缓存)Redis哨兵
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (十七)Flink 容错机制
  • (四)Controller接口控制器详解(三)
  • (算法)Game
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • *p++,*(p++),*++p,(*p)++区别?
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET : 在VS2008中计算代码度量值
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core使用NPOI导出复杂,美观的Excel详解