/etc/ansible ├── ansible.cfg # 主配置文件 ├── inventory.yml # 主机清单 ├── playbooks │ ├── 01-ansible-env.yml # Python 环境初始化剧本 │ ├── 02-debian12-setup.yml # 系统基础配置剧本 │ ├── 03-nginx-setup.yml # Nginx 部署剧本 │ ├── files │ │ └── index.html # 默认网站首页 │ ├── group_vars │ │ └── webservers.yml # webservers 组专属变量 │ └── templates │ └── nginx-site.conf.j2 # Nginx 配置模板Ansible 项目结构解析与剧本注释1.核心配置文件# ansible.cfg [defaults] inventory /etc/ansible/inventory.yml # 指定主机清单文件路径 host_key_checking False # 禁用SSH主机密钥验证简化连接2.主机清单文件# inventory.yml webservers: # 主机组名称 hosts: # 组内主机列表 web01: # 主机别名 ansible_host: 10.10.10.101 # 实际IP地址 web02: ansible_host: 10.10.10.1023.Nginx站点模板# templates/nginx-site.conf.j2 server { listen 80 default_server; server_name {{ site_domain_name }}; # 变量替换域名 root {{ document_root }}; # 变量替换网站根目录 index index.html index.htm; location / { try_files $uri $uri/ 404; } }Playbook 剧本详解剧本 1: 基础环境准备 (01-ansible-env.yml)- name: Install Python3 on target hosts # 任务描述 hosts: all # 目标主机所有主机 gather_facts: false # 禁用事实收集因目标机无Python remote_user: demo # 使用demo账户连接 become: true # 启用权限提升 become_method: su # 使用su切换用户 become_user: root # 切换到root用户 tasks: - name: Install Python3 using raw module ansible.builtin.raw: apt install -y python3 python3-apt # 原始命令安装 register: install_python3 # 注册结果到变量 changed_when: will be installed in install_python3.stdout # 判断是否变更作用为没有Python环境的目标主机安装Python3Ansible运行依赖。剧本 2: 系统初始化 (02-debian12-setup.yml)- name: Initial setup for Debian 12 servers hosts: all tasks: - name: Set hostname and update /etc/hosts block: # 代码块分组任务 - name: Update /etc/hosts ansible.builtin.replace: # 文件内容替换 path: /etc/hosts regexp: ^127\.0\.1\.1\s.*$ # 匹配127.0.1.1行 replace: 127.0.1.1 {{ inventory_hostname }} # 替换为当前主机名 - name: Set timezone community.general.timezone: # 使用社区模块 name: {{ timezone }} # 从变量获取时区 - name: Set NTP server ansible.builtin.lineinfile: # 行管理模块 path: /etc/systemd/timesyncd.conf regexp: ^#?NTP # 匹配注释/非注释行 line: NTP{{ ntp_servers | join( ) }} # 设置NTP服务器列表 state: present作用系统基础配置主机名、时区、时间同步。剧本 3: Nginx 部署 (03-nginx-setup.yml)- name: Setup Nginx web server hosts: webservers # 仅针对web服务器组 vars: site_domain_name: example.com # 定义域名变量 document_root: /srv/www/{{ site_domain_name }} # 网站根目录路径 tasks: - name: Install Nginx ansible.builtin.apt: name: nginx state: present # 确保安装最新版 - name: Set nginx site configuration ansible.builtin.template: # 模板渲染 src: templates/nginx-site.conf.j2 dest: /etc/nginx/sites-available/{{ site_domain_name }} notify: Restart Nginx # 触发重启Handler - name: Enable nginx site ansible.builtin.file: # 创建符号链接 src: /etc/nginx/sites-available/{{ site_domain_name }} dest: /etc/nginx/sites-enabled/{{ site_domain_name }} state: link notify: Restart Nginx - name: Disable default nginx site ansible.builtin.file: path: /etc/nginx/sites-enabled/default state: absent # 删除默认站点 notify: Restart Nginx - name: Create document root directory ansible.builtin.file: path: {{ document_root }} state: directory # 创建网站目录 owner: www-data # 设置属主 group: www-data - name: Copy index.html ansible.builtin.copy: # 复制静态文件 src: files/index.html dest: {{ document_root }}/index.html owner: www-data group: www-data handlers: # 处理器被notify触发 - name: Restart Nginx ansible.builtin.systemd: name: nginx state: restarted # 重启服务 enabled: true # 设置开机自启作用全流程部署Nginx服务安装、配置、部署网站。组变量配置 (group_vars/webservers.yml)ansible_port: 22 # SSH端口 ansible_user: root # 登录用户 ansible_password: CNSkills-2023 # 密码实际应使用vault加密 ansible_become: true # 启用权限提升 ansible_become_method: su # 切换方法 ansible_become_user: root # 目标用户 ansible_become_pass: CNSkills-2023 # 切换密码 packages: # 要安装的软件包 - bash-completion - vim - sudo - systemd-timesyncd timezone: Asia/Shanghai # 时区设置 ntp_servers: # NTP服务器列表 - ntp.aliyun.com - cn.pool.ntp.org作用为webservers主机组定义全局变量。工作流程分析连接初始化通过ansible.cfg加载配置读取inventory.yml获取主机列表使用group_vars中的凭证连接主机环境准备01-ansible-env.yml→ 安装Python → 启用Ansible完整功能系统配置02-debian12-setup.yml→ 时区/NTP/主机名 → 基础环境标准化服务部署03-nginx-setup.yml→ 安装Nginx → 配置站点 → 部署网页 → 重启服务关键原理幂等性设计所有任务可重复执行如apt模块自动跳过已安装包模板引擎Jinja2模板动态生成配置文件{{ site_domain_name }}变量替换变更通知机制notify→handler确保配置更新后自动重启服务组变量继承webservers.yml变量自动应用到组内所有主机零接触部署从系统初始化到应用部署全自动化完成安全建议生产环境中应使用ansible-vault加密密码变量避免明文存储敏感信息。