Ansible roles使用 :安装nginx与php

Linux命令

Ansible roles使用 :安装nginx与php

2025-03-12 00:08


? 模块化部署利器:从零构建高可维护的Web服务 通过Ansible Roles实现服务部署,可显著提升配置管理的效率和可复用性。本文以CentOS 7系统为例,手把手演示如何用Roles架构部署Nginx与PHP环境,并解析关键配置技巧与避坑指南。

                                            




Ansible Roles实战:CentOS 7部署Nginx+PHP全流程解析

模块化部署利器:从零构建高可维护的Web服务

通过Ansible Roles实现服务部署,可显著提升配置管理的效率和可复用性。本文以CentOS 7系统为例,手把手演示如何用Roles架构部署Nginx与PHP环境,并解析关键配置技巧与避坑指南。


一、项目结构规划:标准目录解析

ansible-project/  
├── inventory/          # 主机清单目录  
│   └── hosts          # 目标主机定义文件  
├── roles/             # 角色目录  
│   ├── nginx/         # Nginx角色  
│   │   ├── tasks/     # 任务定义  
│   │   │   └── main.yml  
│   │   └── templates/ # 配置模板  
│   │       └── nginx.conf.j2  
│   └── php/           # PHP角色  
│       └── tasks/  
│           └── main.yml  
└── site.yml           # 主Playbook  

❗ 核心逻辑

  • roles/:每个子目录代表一个独立功能模块
  • templates/:使用Jinja2模板动态生成配置文件
  • site.yml:编排角色执行顺序

二、关键文件配置详解

1. 主机清单(inventory/hosts)

[web_servers]  
server1 ansible_host=192.168.1.100 ansible_user=root  

参数说明

  • web_servers:主机组名称
  • ansible_host:目标服务器IP
  • ansible_user:SSH连接用户(建议使用SSH密钥认证)

2. Nginx角色任务(roles/nginx/tasks/main.yml)

- name: 安装Nginx  
  yum:  
    name: nginx  
    state: present  
  notify: restart nginx  # 触发handler  

- name: 启用并启动Nginx服务  
  service:  
    name: nginx  
    state: started  
    enabled: yes  

- name: 分发Nginx配置  
  template:  
    src: nginx.conf.j2  
    dest: /etc/nginx/nginx.conf  
  notify: restart nginx  

技术要点

  • 使用 notify实现配置变更后自动重启服务
  • template模块支持变量替换(如 {{ php_fpm_socket }}

3. PHP角色任务(roles/php/tasks/main.yml)

- name: 安装PHP基础包  
  yum:  
    name: php  
    state: present  

- name: 安装PHP扩展  
  yum:  
    name: "{{ item }}"  
    state: present  
  loop:  
    - php-fpm  
    - php-mysqlnd  
    - php-gd  
    - php-opcache  

- name: 配置PHP-FPM  
  template:  
    src: www.conf.j2  
    dest: /etc/php-fpm.d/www.conf  
  notify: restart php-fpm  

- name: 启动PHP-FPM  
  service:  
    name: php-fpm  
    state: started  
    enabled: yes  

❗ 优化建议

  • 将扩展列表定义为变量(如 php_extensions),提升灵活性
  • 使用 meta: flush_handlers强制立即执行handler

三、配置模板与变量管理

1. Nginx模板(roles/nginx/templates/nginx.conf.j2)

server {  
    listen 80;  
    server_name {{ domain_name }};  
    root /var/www/html;  

    location ~ \.php$ {  
        fastcgi_pass unix:/run/php-fpm/www.sock;  
        include fastcgi_params;  
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
    }  
}  

变量注入

  • 在 group_vars/all.yml中定义 domain_name: example.com

2. 变量分层定义

group_vars/  
└── web_servers.yml     # 主机组级别变量  
host_vars/  
└── server1.yml         # 主机级别变量  

最佳实践

  • 敏感数据(如密码)存储在 ansible-vault加密文件中

四、执行部署与调试技巧

1. 运行Playbook

ansible-playbook -i inventory/hosts site.yml -K  

参数解析

  • -K:询问SSH密码或sudo密码
  • -v:增加输出详细级别(调试时使用)

2. 常见问题排查

问题现象:Nginx配置错误导致服务启动失败解决步骤

  1. 手动验证配置语法:
    ansible web_servers -a "nginx -t"  
    
  2. 查看日志:
    journalctl -u nginx --since "5 minutes ago"  
    

问题现象:PHP-FPM与Nginx权限冲突
解决方案
确保 /run/php-fpm/www.sock的所属用户与Nginx工作进程一致:

# roles/php/templates/www.conf.j2  
listen.owner = nginx  
listen.group = nginx  

五、扩展优化:生产环境建议

1. 安全加固

  • 配置防火墙规则:
    - firewalld:  
        service: http  
        state: enabled  
        permanent: yes  
        immediate: yes  
    
  • 禁用PHP危险函数:
    
                                        
    label :
    • Ansible
    • roles
    • nginx
    • php
© 蓝易云.