网站搜索

如何使用 Ansible 在多个 Linux 服务器中自动同时部署 WordPress - 第 3 部分


在本 Ansible 系列的前两篇文章中,我们解释了如何安装和配置 Ansible 以同时在多个远程服务器中运行命令并执行复杂的任务。

在当前教程中,我们将解释如何在同一远程服务器中设置 WordPress

node1: 192.168.0.29
node2: 192.168.0.30

我们安装、启用和启动 Apache 的位置(您现在可能知道为什么我们选择使用 Web 服务器作为上一个教程中的初始示例)。

我强烈建议您在继续操作之前阅读第 1 部分第 2 部分,以确保您熟悉与 Ansible 相关的概念。

如何安装和配置用于 IT 管理的“Ansible”自动化工具 – 第 1 部分

如何使用 Anisble Playbook 在多个远程服务器上自动执行复杂任务 - 第 2 部分

第 1 步:介绍 Ansible 角色

当您开始向 Play 添加越来越多的任务时,您的 Playbook 可能会变得越来越难以处理。因此,在这些情况下(实际上,在所有情况下)推荐的方法是使用目录结构,其中包含不同文件中每组任务的指令。

这种方法允许我们在以后的单独项目中重复使用这些配置文件。每个文件都定义了 Ansible 生态系统中所谓的角色。

在我们的例子中,我们将创建两个角色。其中之一(称为 wp-dependencies)将用于安装 WordPress 依赖项(PHPMariaDB – 无需安装 Apache,因为它已安装)。

另一个角色(名为wp-install-config)将包括与 WordPress 安装和配置相关的所有必要任务。

第 2 步:创建 Ansible 角色

Ansible 附带了一个名为 ansible-galaxy 的实用程序,它将帮助我们为我们的角色创建目录结构。我们将在 /etc/ansible/playbooks(我们在第 2 部分中创建)中执行此操作,但理论上您可以根据需要将其设置在另一个目录中。

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

接下来确认新创建的角色。

ls -R /etc/ansible/playbooks

在上图中我们可以看到 ansible-galaxy 创建了两个与我们的角色同名的目录,以及其他子目录(defaultsfiles处理程序任务模板变量)和<其中每个文件内都有strong>README.md文件。

此外,在前面列出的所有目录中创建了一个名为 main.yml 的 YAML 文件(文件和模板除外)。

我们将首先编辑以下配置文件,如下所示:

1. /etc/ansible/playbooks/wp-dependency/tasks/main.yml。请注意,如果您还没有遵循本系列之前的教程,我们将包含 httpd

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependency/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. wp-config-sample.php (在此 Pastebin 中提供)如下并将其保存到您的 Ansible 控制器计算机(如上面最后一个复制指令中所示) ,我将其下载到超级用户的主目录(/root/wp-config-sample.php)。

重要:请注意变量 DB_NAMEDB_USERDB_PASSWORD 的值> 与 /etc/ansible/playbooks/wp-dependencies/defaults/main.yml 中的相同:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5.对于root密码为空的新数据库服务器安装,例如本例,不幸的是我们需要通过mysql_secure_installation在每台机器上单独设置root用户的密码。

据我所知,没有可用的解决方法可以让您在为 WordPress 创建管理数据库帐户的同一步骤中通过 Ansible 设置 root 密码。

确保在所有主机中使用相同的密码,然后将凭据复制到 /root/.my.cnf 中(实际位置可能因您的情况而异,但在所有情况下都需要与值匹配)任务的 src 参数的 Copy ~/.my.cnf/etc/ansible/playbooks/wp-dependency/tasks/main.yml 中的节点)。

在该文件中(见上文),我们假设 root 的密码是 YourMariaDBRootPassword

6. 接下来,与之前的教程相比,我们的剧本 (/etc/ansible/playbooks/playbook.yml) 看起来更有条理、更简单:

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

最后,是时候通过调用我们的剧本来运行这些任务了:

ansible-playbook playbook.yml

现在我们来检查是否可以使用 node1 192.168.0.29node2 192.168.0.30 的 IP 地址访问 WordPress 管理页面:

您可以在以下截屏视频中查看最后两个步骤:

如您所见,您可以使用 Ansible 轻松设置多个 WordPress 安装。然后,您可以使用相应的管理用户界面单独配置每个站点。

最后的考虑因素

如果您使用其他发行版来部署 WordPress,软件包名称可能会有所不同,但归根结底是安装 Apache Web 服务器、MariaDB 数据库服务器和 Python MySQL 模块。如果是这种情况,请使用您的发行版的软件管理系统来搜索您需要安装的确切软件包名称。

概括

在本系列中,我们解释了如何使用 Ansible 在多台 Linux 计算机上同时运行命令和执行复杂的任务。

其中一个示例是设置 WordPress,正如我们在本指南中讨论的那样。无论您是系统管理员还是博主,我希望您发现本教程中的概念和示例很有用。

祝您好运,如果您需要帮助或有任何意见或建议,请随时给我们留言!