介绍
我们总会遇到需要配置新服务器的时候。这可能是为了分担工作负载,或者仅仅是因为我们需要更多服务器。在设置新服务器时,用户需要利用服务器自动化来进行配置。这样做是为了尽量减少人工干预。Ansible 是可用于自动配置新服务器的配置管理工具之一,它能减少手动设置服务器时发生人为错误的可能性。
Ansible 是一款功能丰富且架构简单的工具。它通过脚本来简化服务器的配置。由于其简洁的架构,Ansible 不需要跨节点安装任何其他软件。
在本教程中,我们将向您展示如何使用 Ansible 自动安装在 Ubuntu 服务器上运行的、带有 LAMP 架构的 WordPress。 WordPress 是一个用于创建博客和网站的 CMS,它使用 PHP 作为编码语言,并使用 MySQL 数据库来存储数据。安装 WordPress 后,用户可以使用 Web 前端来管理该网站。
前提条件
- 由于本教程基于 Ubuntu,您需要安装最新的 Ubuntu 版本并具有 sudo 权限。如果您尚未安装 Ubuntu,可以参考我们的 如何设置您的 Ubuntu 服务器.
- 我们还需要一个 Ansible 控制节点。它必须是一个具有 sudo 权限并启用了防火墙的控制节点。在 Ubuntu 20.04 上安装和配置 Ansible 包含有关如何配置 Ansible 的详细指南。
- 我们还需要 远程 Ansible 主机,运行最新的 Ubuntu。这些主机本质上是 Ansible 中的受管节点。
Ansible Playbook 操作摘要
在本节中,我们将了解执行 Ansible Playbook 时它会执行哪些操作。此步骤是此处提供的手动设置的替代方案:如何在 Ubuntu 20.04 上使用 LAMP 安装 WordPress.
当我们运行 Playbook 时,Ansible 将:
- 安装 aptitude ,这是首选的 Ansible 包管理器。
- 安装并配置 PHP 扩展和 LAMP 软件包。
- 创建一个新的 Apache VirtualHost ,用于 WordPress 网站。
- 启用 mod_rewrite 模块,并禁用 Apache 提供的默认网站。
- 设置 MySQL root 用户的密码。
- 删除匿名 MySQL 账户和测试数据库。
- 创建一个新用户和一个新数据库。这些将供 WordPress 网站使用。
- 设置 UFW 以允许在配置的端口( 80 ,默认情况下)上的 HTTP 流量。
- 下载并解压 WordPress。
- 设置目录权限和所有权。
- 配置一个新的 wp-config.php 文件(使用其模板)。
基于 LAMP 的 WordPress Ansible Playbook 指南
首先,我们必须从 do-community/ansible-playbooks 仓库中获取基于 LAMP 的 WordPress playbook 及其依赖项。我们将在 Ansible 控制节点内克隆此仓库。
您可以运行 git pull 命令,如下所示:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
请确保您已拉取上述仓库的最新更新。这是在您之前已经克隆过该仓库的情况下。以下是获取更新的方法:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
现在我们需要找到 wordpress-lamp_ubuntu 文件夹中的文件。该文件夹的名称可能会根据您使用的 Ubuntu 版本而有所不同。一目了然,您将在此目录中看到以下结构:

让我们在下面总结一下这些文件的用途:
- files/apache.conf.j2:Apache 使用 VirtualHost。此文件用于指定 VirtualHost.
- files/wp-config.php.j2:此文件包含用于配置 WordPress 的设置。
- vars/default.yml:它用于配置 playbook 设置。
- playbook.yml:如果需要在远程服务器上执行任务,则使用此文件来配置这些任务。
- readme.md:使用 playbook 的指南。
我们需要编辑 playbook 的变量文件以自定义安装。首先,打开 vars/default.yaml 文件,它位于上述目录中:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
这个文件相当长。它有许多配置来帮助我们进行安装:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
这里我们关注以下变量:
- php_modules:一个包含应安装以支持 WordPress 设置的 PHP 扩展的数组。如果您想安装更多模块,可以在此处指定。
- mysql_root_password: root MySQL 账户的密码。
- mysql_db:这指定了 WordPress 将使用的 MySQL 数据库的名称。
- mysql_user:应为 WordPress 创建的 MySQL 用户名。
- mysql_password:新 MySQL 用户的密码。
- http_host:服务器的域名或 IP。
- http_conf:将在 Apache 中创建的配置文件名称。
- http_port:此虚拟主机的 HTTP 端口。该端口用于访问网站。默认值为 80。
接下来,在上述文件中输入值并保存关闭。对于使用 nano 编辑器的用户,请按 CTRL+X, Y,然后按 ENTER.
现在您已准备好运行此 playbook。您可以在一台或多台服务器上运行此 playbook。如果您想在任何特定服务器上运行此 playbook,可以使用 -l 标志。此外,如果您需要指定连接到远程服务器的用户,请使用 -u 标志指定用户。
假设我们想在任意一台服务器 srvr1 上使用用户 u1 执行我们的 playbook,我们可以运行以下命令:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
运行上述命令后,您将获得如下输出:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
等待 playbook 执行完成。然后,在您的网页浏览器上导航到 server_name :
|
1 |
http://server_host_or_ip/ |
您将看到以下屏幕:

接下来,选择您选择的语言并按 继续。您将看到下一个屏幕,提示输入一些详细信息以完成安装:

之后,输入信息并按 安装 WordPress。 这需要一些时间,然后您将看到如下屏幕:

选择 登录 以登录您的网站并配置设置:

Ansible Playbook 内容
记住 wordpress-lamp_ubuntu 文件夹。它里面包含一些文件。让我们逐一查看它们:
● vars/default.yml
此文件包含用于配置 WordPress 网站设置的值:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#系统设置 php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL设置 mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP设置 http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
● files/apache.conf.j2
此文件用于配置 Apache 虚拟主机:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
此文件用于配置 WordPress。它包含由哈希函数生成的唯一密钥和盐:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * WordPress 基础配置文件 * * 这个文件被 wp-config.php 生成脚本用于 * 安装过程。您不需要使用该网站,您可以 * 手动复制这个文件为 “wp-config.php” 并填写其值。 * * 本文件包含以下配置: * * * MySQL 设置 * * 密钥 * * 数据库表前缀 * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL 设置 - 您可以从主机服务商处获取这些信息 ** // /** WordPress 数据库的名称 */ define( 'DB_NAME', '{{ mysql_db }}' ); /** MySQL 数据库用户名 */ define( 'DB_USER', '{{ mysql_user }}' ); /** MySQL 数据库密码 */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** MySQL 主机名 */ define( 'DB_HOST', 'localhost' ); /** 创建数据库表时使用的数据库字符集。 */ define( 'DB_CHARSET', 'utf8' ); /** 数据库整理类型。如有疑问,请勿更改。 */ define( 'DB_COLLATE', '' ); /** 文件系统访问 **/ define('FS_METHOD', 'direct'); /**#@+ * 身份验证唯一密钥和盐。 * * 将这些更改为不同的唯一短语! * 您可以使用 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 密钥服务} 生成这些密钥 * 您可以随时更改这些设置以使所有现有 cookie 失效。这将强制所有用户重新登录。 * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * WordPress 数据库表前缀。 * * 如果您为每个安装都提供 * 唯一的前缀,则可以在一个数据库中进行多个安装。请仅使用数字、字母和下划线! */ $table_prefix = 'wp_'; /** * 供开发人员使用:WordPress 调试模式。 * * 将此值更改为 true 以在开发期间启用通知显示。 * 强烈建议插件和主题开发人员使用 WP_DEBUG * 在其开发环境中。 * * 有关可用于调试的其他常量的信息, * 请访问 Codex。 * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* 好了,请停止编辑!祝您发布愉快。 */ /** WordPress 目录的绝对路径。 */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** 设置 WordPress 变量和包含的文件。 */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
此文件包含此设置中定义的所有任务。它首先列出了此设置所针对的一组服务器。它包括 vars/default.yml 变量文件以加载配置选项:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: 安装 先决条件 apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: 安装 LAMP 包 apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: 安装 PHP 扩展 apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Apache 配置 - name: 创建 文档 根目录 file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: 设置 up Apache 虚拟主机 template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: 重新加载 Apache tags: [ apache ] - name: 启用 重写 模块 shell: /usr/sbin/a2enmod rewrite notify: 重新加载 Apache tags: [ apache ] - name: 启用 新 站点 shell: /usr/sbin/a2ensite {{ http_conf }} notify: 重新加载 Apache tags: [ apache ] - name: 禁用 默认 Apache 站点 shell: /usr/sbin/a2dissite 000-default.conf notify: 重启 Apache tags: [ apache ] # MySQL 配置 - name: 设置 the root 密码 mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: 删除 所有 匿名 用户 账户 mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 删除 the MySQL 测试 数据库 mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 创建 数据库 用于 WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 创建 MySQL 用户 用于 WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # UFW 配置 - name: "UFW - 允许端口 {{ http_port }} 上的 HTTP" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # WordPress 配置 - name: 下载并 解压最新版WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: 设置所有权 file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: 设置权限用于 目录 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: 设置权限用于 文件 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: 设置up wp-配置 template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: 重载 Apache service: name: apache2 state: reloaded - name: 重启 Apache service: name: apache2 state: restarted |
您可以根据需要修改这些文件,以适应您正在构建的网站的具体需求。
结论
在本教程中,我们演示了如何使用 Ansible 自动安装和设置在最新 Ubuntu 操作系统上运行于 LAMP 架构的 WordPress 网站。
有关使用 Ansible 的更多指南,您可以查看以下教程,发布在我们的博客:
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。