在运维工作中,如何用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 密钥并分发公钥:
-
在控制节点上生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 4096 (按提示操作,通常直接回车即可)
-
将公钥复制到目标主机:
ssh-copy-id your_username@your_target_host_ip -
确保目标主机的 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.j2
和 wordpress.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:
- 将主题和插件的 ZIP 文件放在控制节点的某个目录下。
- 使用
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,可以实现高效、可复用的自动化部署流程。这种方式不仅减少了手动操作的繁琐性,还提高了部署的稳定性和一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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安全么?