作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维工作中,如何用ansible搭建wordpress?

使用 Ansible 搭建 WordPress 是一个典型的自动化运维任务,涉及多个步骤,包括安装依赖组件、配置数据库、部署 WordPress 文件以及配置 Web 服务器等。以下是详细的操作步骤和说明:

1. 环境准备

在开始之前,需要确保以下环境和工具已经准备就绪:

1.1 安装 Ansible

在控制节点(运行 Ansible 的机器)上安装 Ansible。以下是基于不同操作系统的安装方法:

  • 基于 Debian 的系统(如 Ubuntu)

    sudo apt update && sudo apt install ansible
  • 基于 Red Hat 的系统(如 CentOS)

    sudo yum install ansible
  • MacOS(通过 Homebrew)

    brew install ansible
1.2 配置目标主机

确保目标主机(运行 WordPress 的服务器)可以通过 SSH 访问,并且 Ansible 能够通过 SSH 免密登录到目标主机。可以通过以下步骤生成 SSH 密钥并分发公钥:

  1. 在控制节点上生成 SSH 密钥对(如果尚未生成):

    ssh-keygen -t rsa -b 4096

    (按提示操作,通常直接回车即可)

  2. 将公钥复制到目标主机:

    ssh-copy-id your_username@your_target_host_ip
  3. 确保目标主机的 SSH 服务正常运行,并且防火墙允许 SSH 连接。

1.3 配置 Ansible Inventory

Ansible 使用 Inventory 文件来管理目标主机。编辑 /etc/ansible/hosts 文件或创建一个自定义的 Inventory 文件(如 inventory.ini),并添加目标主机信息。例如:

[wordpress]
your_target_host_ip ansible_user=your_username
2. 编写 Ansible Playbook

Playbook 是 Ansible 的核心,用于定义自动化任务的执行流程。以下是搭建 WordPress 的完整 Playbook 示例。

2.1 创建 Playbook 文件

创建一个名为 wordpress.yml 的文件,用于定义 WordPress 的部署任务。

---
- name: Deploy WordPress
hosts: wordpress
become: yes
vars:
# 定义变量
db_name: wordpress
db_user: wordpress_user
db_password: "your_secure_password"
db_root_password: "your_mysql_root_password"
wp_domain: your_domain.com
wp_version: "latest"
wp_dir: /var/www/wordpress
tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
when: ansible_os_family == "Debian"
- name: Install required packages
ansible.builtin.apt:
name:
- apache2
- mysql-server
- php
- php-mysql
- php-fpm
- php-curl
- php-gd
- php-mbstring
- php-xml
- php-cli
- unzip
state: present
- name: Secure MySQL installation
ansible.builtin.command: mysql_secure_installation
args:
creates: /root/.mysql_secure_installed
- name: Create MySQL database
ansible.builtin.mysql_db:
name: "{{ db_name }}"
state: present
login_user: root
login_password: "{{ db_root_password }}"
- name: Create MySQL user
ansible.builtin.mysql_user:
name: "{{ db_user }}"
password: "{{ db_password }}"
priv: "{{ db_name }}.*:ALL"
state: present
login_user: root
login_password: "{{ db_root_password }}"
- name: Download WordPress
ansible.builtin.get_url:
url: "https://wordpress.org/latest.zip"
dest: /tmp/wordpress.zip
- name: Extract WordPress
ansible.builtin.unarchive:
src: /tmp/wordpress.zip
dest: "{{ wp_dir }}"
remote_src: yes
- name: Copy wp-config.php template
ansible.builtin.template:
src: wp-config.php.j2
dest: "{{ wp_dir }}/wp-config.php"
- name: Set permissions for WordPress files
ansible.builtin.file:
path: "{{ wp_dir }}"
owner: www-data
group: www-data
recurse: yes
- name: Configure Apache for WordPress
ansible.builtin.template:
src: wordpress.conf.j2
dest: /etc/apache2/sites-available/wordpress.conf
- name: Enable WordPress site
ansible.builtin.file:
src: /etc/apache2/sites-available/wordpress.conf
dest: /etc/apache2/sites-enabled/wordpress.conf
state: link
- name: Disable default Apache site
ansible.builtin.file:
path: /etc/apache2/sites-enabled/000-default.conf
state: absent
- name: Restart Apache
ansible.builtin.service:
name: apache2
state: restarted
2.2 创建模板文件

Playbook 中使用了两个模板文件:wp-config.php.j2wordpress.conf.j2。这些模板文件用于动态生成 WordPress 的配置文件和 Apache 的虚拟主机配置。

2.2.1 wp-config.php.j2

创建一个名为 wp-config.php.j2 的文件,用于生成 WordPress 的配置文件:

<?php
define('DB_NAME', '{{ db_name }}');
define('DB_USER', '{{ db_user }}');
define('DB_PASSWORD', '{{ db_password }}');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
$table_prefix = 'wp_';
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');

2.2.2 wordpress.conf.j2

创建一个名为 wordpress.conf.j2 的文件,用于生成 Apache 的虚拟主机配置:

<VirtualHost *:80>
ServerAdmin webmaster@{{ wp_domain }}
DocumentRoot {{ wp_dir }}
ServerName {{ wp_domain }}
ServerAlias www.{{ wp_domain }}
<Directory {{ wp_dir }}>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
3. 执行 Playbook

将 Playbook 文件和模板文件保存到控制节点的同一目录下,然后运行以下命令执行 Playbook:

ansible-playbook -i inventory.ini wordpress.yml
  • -i inventory.ini:指定 Inventory 文件路径。
  • wordpress.yml:指定 Playbook 文件。
4. 验证部署结果

部署完成后,访问 http://your_domain.com,你应该能看到 WordPress 的安装界面。按照提示完成剩余的安装步骤,输入管理员用户名、密码和电子邮件地址。

5. 进阶优化
5.1 自定义主题和插件

可以通过以下方式将自定义主题和插件部署到 WordPress:

  1. 将主题和插件的 ZIP 文件放在控制节点的某个目录下。
  2. 使用 unarchive 模块将它们解压到 /var/www/wordpress/wp-content/themes/var/www/wordpress/wp-content/plugins 目录。
5.2 安全加固
  • MySQL 安全:确保 MySQL 的 root 用户密码复杂,并限制远程访问。
  • 文件权限:确保 WordPress 文件的权限正确,防止未授权访问。
  • 防火墙:配置防火墙规则,只允许必要的端口(如 HTTP/HTTPS)对外暴露。
5.3 持续集成/持续部署

可以结合 Jenkins、GitLab CI 等工具,实现代码变更后的自动部署,进一步提升运维效率。

6. 我的总结

综上所述,通过 Ansible 搭建 WordPress,可以实现高效、可复用的自动化部署流程。这种方式不仅减少了手动操作的繁琐性,还提高了部署的稳定性和一致性。

posted @   黄嘉波  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2024-03-07 在Docker中,如何查看镜像支持的环境变量?
2024-03-07 在Docker中,如何清理后台停止的容器?
2024-03-07 在Docker中,如何退出一个镜像的bash,而不终止它?
2024-03-07 在Docker中,Dockerfile有哪些常见指令?
2024-03-07 在Docker中,Docker安全么?
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波
点击右上角即可分享
微信分享提示