项目实战:ansible 一键部署个人博客-开发手册

WordPress 一键部署 Playbook 开发手册

一、手册概述

本手册旨在详细说明企业内部博客平台 WordPress 的 Ansible 自动化部署方案。该方案基于 LNMP 架构(Linux+Nginx+MariaDB+PHP),通过模块化 Playbook 实现一键部署,同时集成生产环境所需的安全加固措施,确保部署过程标准化、可重复且符合企业安全规范。

本 Playbook 适用于 CentOS 7 操作系统,采用多 Play 结构设计,将部署过程拆分为 5 个独立阶段,便于维护、扩展和团队协作。

二、整体架构与设计思路

1. 技术架构

采用 LNMP 架构组件组合:

  • Linux:CentOS 7 操作系统作为基础环境
  • Nginx:高性能 Web 服务器,处理 HTTP 请求并解析 PHP
  • MariaDB:关系型数据库,存储 WordPress 应用数据
  • PHP-FPM:PHP 进程管理器,处理动态脚本执行

2. 模块化设计

将部署流程拆分为 5 个独立 Play,实现职责分离:

  • Play 1:数据库部署与安全初始化
  • Play 2:PHP 及相关组件部署
  • Play 3:Nginx 服务部署
  • Play 4:WordPress 应用部署与配置
  • Play 5:系统安全加固配置

3. 设计原则

  • 幂等性:所有任务均可重复执行,不会产生意外结果
  • 安全性:遵循最小权限原则,集成多层安全加固措施
  • 可维护性:通过变量集中管理配置项,便于后期调整
  • 可扩展性:模块化结构支持单独升级或替换组件

三、详细部署流程

1. 准备项目基本资料

mkdir blog && cd blog

cat > ansible.cfg <<'EOF'
[defaults]
remote_user = laoma
inventory = ./inventory
vault_password_file=./secret.txt

[privilege_escalation]
become = True
become_user = root
become_method = sudo
become_ask_pass = False
EOF

cat > inventory <<'EOF'
[databases]
blog

[php]
blog

[webservers]
blog

[wordpress]
blog
EOF

2. 开发 Playbook

Play 1:部署数据库并进行安全初始化
功能说明

负责 MariaDB 数据库的安装、启动、安全配置及 WordPress 所需数据库和用户的创建。

核心任务
  • 安装 MariaDB 服务器包
  • 启动服务并设置开机自启
  • 数据库安全初始化:
    • 设置 root 用户密码
    • 删除匿名用户
    • 删除默认 test 数据库
  • 创建 WordPress 专用数据库(wordpress)
  • 创建数据库用户(wordpress)并授予必要权限
关键变量
mkdir -p group_vars/databases
cat > group_vars/databases/db.yml <<EOF
# 数据库root密码
db_root_password: "Root@Db2025!"

# WordPress数据库名
wordpress_db_name: "wordpress"

# 数据库访问用户
wordpress_user_name: "wordpress"

# 数据库用户密码
wordpress_user_password: "Laoma@Db2025!"
EOF

echo redhat > secret.txt

ansible-vault encrypt group_vars/databases/db.yml

注意事项

  • 生产环境中密码需使用ansible-vault加密存储
  • 数据库用户仅授予对 wordpress 的权限,且限制为本地访问
剧本内容
mkdir playbooks
vim playbooks/1-deploy_db.yml
---
- name: Play 1. 部署数据库并进行安全初始化
  hosts: databases

  tasks:
    - name: 安装MariaDB服务器
      yum:
        name: mariadb-server,python2-PyMySQL
        state: present

    - name: 启动MariaDB服务并设置开机自启
      service:
        name: mariadb
        state: started
        enabled: yes

    - name: 数据库安全初始化 - 设置 root@localhost 密码
      shell: mysqladmin password {
   
   {
   
    db_root_password }}
      ignore_errors: yes

    - name: 数据库安全初始化 - 设置其他 root@other 密码
      mysql_user:
        name: root
        password: "{
   
   { db_root_password }}"
        host: "{
   
   { item }}"
        state: present
        login_user: root
        login_password: "{
   
   { db_root_password }}"
      with_items:
        - "{
   
   { ansible_fqdn }}"
        - 127.0.0.1
        - ::1

    - name: 数据库安全初始化 - 删除匿名用户
      mysql_user:
        name: ""
        host_all: yes
        state: absent
        login_user: root
        login_password: "{
   
   { db_root_password }}"

    - name: 数据库安全初始化 - 删除test数据库
      mysql_db:
        
为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步、日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值