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万+

被折叠的 条评论
为什么被折叠?



