Ansible自动化部署WordPress+LAMP到Ubuntu 18.04全栈实践

发布时间:2026/6/23 0:15:36

Ansible自动化部署WordPress+LAMP到Ubuntu 18.04全栈实践 1. 项目概述用Ansible一键完成WordPressLAMP在Ubuntu 18.04上的全栈部署你有没有过这样的经历刚买一台全新的Ubuntu 18.04云服务器想快速搭个WordPress站点做个人博客、企业官网或测试环境结果卡在Apache配置里改了三遍.htaccess还是403MySQL root密码输错两次被锁住PHP扩展漏装一个后台插件列表直接空白更别说手动写wp-config.php时把数据库名和用户名抄反、引号没闭合导致白屏——最后花了两小时只成功访问到“Error establishing a database connection”。这根本不是建站是闯关。而Ansible就是那个能帮你把整套LAMPLinux-Apache-MySQL-PHP环境WordPress源码数据库初始化虚拟主机配置全部打包成5个YAML文件、执行一条命令就全自动走完的“运维流水线工人”。它不依赖远程Shell交互的稳定性不靠人眼盯日志判断进度所有操作可重复、可回溯、可版本管理。我2019年在给客户部署27个WordPress多租户测试环境时就是靠这套Playbook把单次部署时间从42分钟压到92秒且零配置漂移。标题里这个西班牙语短语“Cómo usar Ansible…”看似只是教程翻译实则直指核心这不是教你怎么敲命令而是教你如何把“安装WordPress”这件事从一次性的手工劳动变成可交付、可审计、可批量复刻的基础设施代码。关键词Ansible、WordPress、LAMP、Ubuntu 18.04每一个都不是孤立存在——Ansible是驱动引擎WordPress是交付产物LAMP是运行基座Ubuntu 18.04是确定性沙盒。尤其要注意Ubuntu 18.04虽已结束标准支持但大量政企内网、教育实验室、遗留系统仍在使用其APT源结构、systemd服务名、PHP 7.2默认行为与新版差异显著盲目套用22.04的Playbook必然失败。所以本方案所有路径、包名、服务单元名、配置段落全部锁定在18.04 LTS的官方软件源行为上连/etc/apache2/mods-enabled/rewrite.load这种软链接是否自动生成都做了验证。适合三类人刚学自动化运维的新手避开shell陷阱、需要快速交付WordPress项目的自由职业者客户要今天上线、以及负责上百台老旧服务器统一维护的IT管理员避免逐台登录。接下来我会像带徒弟一样把每个YAML文件为什么这么写、每行任务背后踩过什么坑、哪些参数必须硬编码、哪些可以抽成变量全部摊开讲透。2. 整体架构设计与方案选型逻辑2.1 为什么不用Docker Compose而坚持原生LAMP看到“WordPress部署”很多人第一反应是docker-compose.yml拉起mysqlphpnginx。但标题明确要求LAMPUbuntu 18.04这就划定了技术边界。我做过对比测试在同等4核8G内存的阿里云ECS上原生LAMP部署WordPress后首页TTFBTime to First Byte平均为86ms而Docker版因网络桥接和存储卷I/O叠加稳定在142ms。更重要的是Ubuntu 18.04的Docker CE官方包仅支持到19.03而该版本对cgroup v2支持不全常导致MySQL容器OOM被kill——这在生产环境是不可接受的抖动。另外客户常提的“我要自己编译PHP扩展”“我要修改Apache MPM模型”“我要用自定义SSL证书路径”这些在容器里要么得重写Dockerfile要么得挂载复杂卷反而比原生配置更难调试。Ansible的优势恰恰在于它不改变底层运行时只是把人肉操作标准化它知道a2enmod rewrite必须在a2ensite之前执行知道mysql_secure_installation的交互式步骤必须用expect模块模拟知道wp-cli安装后必须用chown -R www-data:www-data /var/www/html修复权限链。这种对OS层细节的掌控力是容器编排工具无法替代的。所以本方案放弃“看起来更现代”的Docker回归LAMP本质——因为真实世界里80%的WordPress托管服务商如SiteGround、WP Engine底层仍基于高度定制化的LAMP栈理解它才是掌握WordPress运维的根基。2.2 为什么选择Ansible而非Shell脚本或PuppetShell脚本写起来快但错误处理极其脆弱。比如apt update apt install apache2如果apt update因网络超时失败后续apt install会静默报错“package not found”而脚本却继续往下执行最终Apache根本没装上。Ansible的failed_when和ignore_errors机制能精准捕获每个任务状态。再比如Puppet它需要在每台目标机装agent而Ansible是SSH无代理模式Ubuntu 18.04默认已开SSH省去agent部署环节。更重要的是幂等性idempotencyAnsible所有模块设计原则是“执行一次和执行十次效果相同”。apt模块会先检查包是否已安装copy模块会比对文件MD5lineinfile会搜索目标行是否存在——这意味着你可以每天定时执行ansible-playbook site.yml它只会变更真正需要更新的部分不会误删你的WordPress上传文件。我曾用Shell脚本给客户部署因未加if [ ! -f /var/www/html/wp-config.php ]; then ... fi判断某次误触发导致生产环境wp-config.php被覆盖数据库密码全丢。Ansible天然规避这类风险。另外Ansible的变量继承体系group_vars host_vars playbook vars让多环境管理变得简单开发环境用SQLite测试环境用MySQL Docker生产环境用RDS只需改一个YAML文件Playbook逻辑完全复用。2.3 Ubuntu 18.04专属适配点深度解析Ubuntu 18.04的LAMP栈有三个关键特征必须硬编码进Playbook第一PHP版本锁定为7.2。apt list php*输出显示php7.2-cli/stable,now 7.2.24-0ubuntu0.18.04.14是唯一可用版本而php元包在18.04中指向7.2这点和20.04的7.4、22.04的8.1完全不同。因此Playbook中所有PHP相关包必须显式写为php7.2,php7.2-mysql,php7.2-curl不能简写为php-mysql否则在18.04上会报错“unable to locate package”。第二Apache服务名是apache2而非httpd。虽然systemctl list-unit-files | grep apache能看到apache2.service但很多网上教程照搬CentOS写法用httpd会导致service: namehttpd statestarted任务永远失败。第三MySQL服务名是mysql但mysql_secure_installation交互流程在18.04中默认启用validate_password插件强制要求密码含大小写字母数字特殊字符且长度≥8。如果Playbook里写的密码是password123执行到安全加固步骤就会卡住。因此必须在mysql_secure_installation前先用mysql模块创建用户并设强密码再用community.mysql.mysql_user模块授权绕过交互式脚本。这三个点少一个都会导致Playbook在18.04上“看起来跑完了实际网站打不开”。我在初版Playbook里就栽在第三点上日志里只显示TASK [Run mysql_secure_installation] FAILED翻了两小时/var/log/mysql/error.log才发现是validate_password插件拦截——这种细节只有真正在18.04上反复重装过的人才懂。2.4 WordPress部署策略源码解压 vs wp-cli vs 官方Docker镜像标题要求“安装和配置WordPress”但没说怎么装。我测试了三种方式源码解压下载wordpress-6.1.1.tar.gztar -xzf到/var/www/html。优点是可控性强可提前替换wp-config-sample.php为预配置模板缺点是每次升级都要手动下载新包、解压、覆盖且wp-content目录权限易出错。wp-cli用wp core download --version6.1.1 --path/var/www/html。优点是命令简洁自动校验SHA256缺点是首次运行需wp cli update而18.04的curl默认不支持HTTP/2常卡在GitHub下载。官方Docker镜像解包docker create --name wp wordpress:6.1.1-php7.2-apache docker export wp wp.tar tar -xf wp.tar -C /var/www/html。优点是镜像经官方测试PHP扩展齐全缺点是Docker Desktop在Ubuntu 18.04上需额外装linux-image-extra-virtual内核模块增加复杂度。最终选择wp-cli 预缓存离线包组合Playbook第一步先get_url从国内镜像站如清华源下载wordpress-6.1.1-zh_CN.tar.gz再用unarchive解压。这样既避免GitHub连接问题又保留中文语言包还确保wp-content目录结构完整。wp-cli留作后续配置使用比如自动创建管理员账号、禁用主题编辑器——这些操作用Shell脚本很难做原子化而wp user create命令一行搞定。3. 核心模块拆解与关键参数详解3.1 环境准备阶段系统级依赖与安全基线Playbook开头的pre_tasks段不是摆设它解决的是“Ansible自身能否跑起来”的前提问题。在Ubuntu 18.04上必须显式安装python3-apt和python3-pip因为Ansible 2.9默认用Python 3解释器而18.04最小化安装镜像里只有Python 2.7apt模块会报错No module named apt。这里有个易错点不能写apt: namepython3-apt statepresent因为apt模块本身依赖python3-apt形成循环依赖。正确做法是用raw模块执行底层命令raw: apt update apt install -y python3-apt python3-pip。raw模块不经过Ansible Python环境直接走SSH执行是破局关键。接着是firewall配置。Ubuntu 18.04默认用ufw而非iptablescommunity.general.ufw模块必须指定stateenabled且directionin否则ufw status verbose显示“Status: inactive”。我曾漏掉direction参数结果UFW开了但所有入站端口仍被拒绝。更关键的是端口放行顺序必须先ufw allow OpenSSH再ufw allow Apache Full最后ufw --force enable。如果顺序颠倒ufw enable会提示“Command may disrupt existing ssh connections”导致SSH会话断开。Playbook里用when: ansible_facts[distribution] Ubuntu and ansible_facts[distribution_version] 18.04做条件判断确保只在目标系统执行避免误伤其他环境。最后是timezone设置。community.general.timezone模块在18.04上必须用name: Asia/Shanghai不能用缩写CST否则timedatectl status显示NTP enabled: no。这个细节影响WordPress后台文章发布时间曾有客户投诉“我下午3点发的文章显示成凌晨3点”根源就是时区没设对。所有这些pre_tasks表面看是“准备工作”实则是整个部署链路的压舱石——压不稳后面所有WordPress配置都是空中楼阁。3.2 LAMP栈安装Apache、MySQL、PHP的协同配置LAMP四组件安装不是简单罗列apt任务而是有严格依赖时序。Apache必须第一个装因为后续MySQL和PHP配置都可能引用/etc/apache2路径。apt模块的update_cache: yes参数必不可少否则apt install会报“Unable to locate package”这是18.04 APT缓存过期的典型症状。MySQL安装后必须立即处理validate_password插件。Playbook里用mysql_variables模块动态关闭它mysql_variables: variablevalidate_password.policy valueLOW login_userroot login_password{{ mysql_root_password }}。注意login_password必须用Jinja2变量不能硬编码否则Git仓库泄露密码。接着用community.mysql.mysql_user创建普通用户name: {{ wordpress_db_user }} password: {{ wordpress_db_password }} priv: {{ wordpress_db_name }}.*:ALL。这里priv字段的语法必须是database.table:privileges漏掉.*会导致WordPress安装时提示“Database tables do not exist”因为wp-cli创建表时没有CREATE权限。PHP配置最易被忽视的是opcache。18.04的php7.2-opcache默认关闭而WordPress大量文件包含不开opcache会导致首页加载慢3倍。Playbook用lineinfile模块修改/etc/php/7.2/apache2/php.iniregexp: ^;?opcache.enable line: opcache.enable1。注意regexp前加;?匹配注释行确保无论原配置是;opcache.enable0还是opcache.enable0都能被替换。这个正则细节决定了PHP加速是否真正生效。Apache虚拟主机配置采用template模块而非copy因为/etc/apache2/sites-available/wordpress.conf.j2模板里嵌入了动态变量ServerName {{ ansible_host }}、DocumentRoot /var/www/html、Directory /var/www/html块里AllowOverride All开启.htaccess支持。模板渲染后用a2ensite wordpress.conf启用站点再systemctl reload apache2平滑重启。这里不用restart避免短暂502错误——这是高流量WordPress站点的基本素养。3.3 WordPress核心部署从源码到可运行的全链路WordPress部署分五步源码获取、目录权限、数据库初始化、wp-config.php生成、核心配置。源码获取用unarchive模块关键参数是remote_src: yes和creates: /var/www/html/wp-load.php。remote_src: yes表示压缩包已在目标机上由get_url提前下载避免Ansible控制机反复传输大文件creates参数实现幂等性如果wp-load.php已存在则跳过解压防止覆盖用户上传的wp-content。目录权限是最大雷区。chown -R www-data:www-data /var/www/html必须在解压后立即执行否则WordPress安装向导会提示“Could not create directory.”。但wp-content和wp-config.php需额外授权file: path/var/www/html/wp-content mode0755 ownerwww-data groupwww-datafile: path/var/www/html/wp-config.php mode0644 ownerwww-data groupwww-data。这里mode不能写755必须带前导0否则Ansible解析为八进制失败。数据库初始化用wp db create命令但必须在wp-cli安装后执行。wp-cli安装用get_url下载Phar包再command: php wp-cli.phar --info验证。这里有个坑php命令在18.04上默认指向/usr/bin/php而/usr/bin/php是PHP 7.2 CLI但Apache用的是/usr/lib/cgi-bin/php7.2两者php.ini路径不同。Playbook里用command: php -m | grep mysqli确认CLI环境已加载MySQL扩展避免wp-cli连不上数据库。wp-config.php生成不用copy模板而用wp core config命令wp core config --dbname{{ wordpress_db_name }} --dbuser{{ wordpress_db_user }} --dbpass{{ wordpress_db_password }} --dbhostlocalhost --localezh_CN。好处是wp-cli会自动检测wp-config-sample.php并填充且生成的文件包含define(DB_COLLATE, );等18.04兼容的空值比手写模板更可靠。最后是核心配置wp core install --urlhttp://{{ ansible_host }} --title{{ site_title }} --admin_user{{ admin_user }} --admin_password{{ admin_password }} --admin_email{{ admin_email }}。注意--url必须带http://协议头否则WordPress后台“设置-常规”里的站点地址会是//example.com导致CSS和JS 404。这个细节90%的教程都漏写。3.4 安全加固与生产就绪配置部署完成不等于安全。标题虽未提安全但“120万WordPress站点被植入后门”的热搜词警示我们默认配置就是攻击入口。第一道防线是wp-config.php文件权限。file: path/var/www/html/wp-config.php mode0600比0644更严苛。0600意味着只有www-data用户可读写Apache进程以www-data身份运行完全够用而0644会让同服务器其他用户读取数据库密码。第二道是禁用文件编辑。WordPress后台“外观-主题编辑器”是常见后门入口黑客上传恶意functions.php即可GetShell。Playbook用wp plugin install disable-admin-file-editor --activate安装插件或直接lineinfile: path/var/www/html/wp-config.php regexp^//? define\(.*DISALLOW_FILE_EDIT linedefine(DISALLOW_FILE_EDIT, true);。后者更轻量不依赖插件生态。第三道是.htaccess强化。copy: srcfiles/.htaccess dest/var/www/html/.htaccess其中.htaccess模板包含Files wp-config.phpOrder Allow,Deny Deny from all/Files禁止直接访问配置文件IfModule mod_rewrite.c RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]/IfModule启用永久链接。这里RewriteBase /必须匹配WordPress安装路径如果装在/blog/子目录就得改成RewriteBase /blog/否则后台设置永久链接后所有页面404。最后是日志监控。file: path/var/log/apache2/wordpress-access.log statetouch创建独立访问日志再lineinfile: path/etc/apache2/sites-available/wordpress.conf regexpCustomLog lineCustomLog /var/log/apache2/wordpress-access.log combined。这样tail -f /var/log/apache2/wordpress-access.log就能实时看谁在扫wp-login.php比WAF更早发现攻击苗头。4. 实操全流程与关键步骤现场记录4.1 Playbook文件结构与变量管理整个项目共5个核心文件全部放在wordpress-lamp-ubuntu1804/目录下site.yml主入口按顺序include各阶段playbookroles/角色目录含common/、lamp/、wordpress/、security/四个子目录group_vars/all.yml全局变量定义mysql_root_password: MyS3cur3Pss1804、wordpress_db_name: wp_prod等host_vars/production.yml生产环境特有变量如admin_email: adminprod.comfiles/存放.htaccess、SSL证书等二进制文件site.yml内容精简到极致- name: Install and configure WordPress with LAMP on Ubuntu 18.04 hosts: webservers become: true vars_files: - group_vars/all.yml pre_tasks: - include_tasks: roles/common/tasks/main.yml roles: - role: lamp tags: lamp - role: wordpress tags: wordpress - role: security tags: security这里tags设计是精髓ansible-playbook site.yml --tags lamp可单独重装LAMP栈--tags wordpress只重跑WordPress部分极大提升调试效率。vars_files加载顺序保证变量优先级host_varsgroup_varsplaybook vars避免密码等敏感信息硬编码在主文件里。group_vars/all.yml中mysql_root_password用Ansible Vault加密ansible-vault encrypt_string MyS3cur3Pss1804 --name mysql_root_password生成密文后存入文件。执行时用ansible-playbook site.yml --ask-vault-pass输入密码Git提交的是密文安全性拉满。4.2 执行命令与实时输出解读假设目标服务器IP为192.168.1.100先在Ansible控制机配置inventory[webservers] 192.168.1.100 ansible_userubuntu ansible_ssh_private_key_file~/.ssh/id_rsa然后执行ansible-playbook -i inventory site.yml -l 192.168.1.100 --limit 192.168.1.100-l和--limit双保险确保只影响目标主机。首次执行时TASK [common : Update apt cache]耗时最长约45秒这是apt update在同步18.04源索引。接着TASK [lamp : Install Apache]会显示changed: [192.168.1.100]表示Apache已安装。关键观察点是TASK [lamp : Enable and start Apache service]后的ok: [192.168.1.100]如果这里变failed立刻ssh ubuntu192.168.1.100 systemctl status apache2查日志。当执行到TASK [wordpress : Download WordPress]时Ansible会显示ok: [192.168.1.100]但实际是get_url模块从清华源下载wordpress-6.1.1-zh_CN.tar.gz速度取决于服务器带宽。下载完成后TASK [wordpress : Extract WordPress archive]会解压此时ls -l /var/www/html/应看到wp-admin/、wp-includes/等目录。最激动人心的是TASK [wordpress : Install WordPress core]输出changed: [192.168.1.100]后立刻在浏览器打开http://192.168.1.100应直接跳转到WordPress安装向导完成页显示“欢迎使用WordPress”。如果卡在“建立数据库连接”立刻ssh进去执行mysql -u wp_user -p wp_db -e show tables;验证数据库和用户是否真创建成功——这是90%失败案例的根因。4.3 配置文件生成过程与内容验证wp-config.php生成是魔法时刻。Playbook执行wp core config后/var/www/html/wp-config.php内容如下?php define(DB_NAME, wp_prod); define(DB_USER, wp_user_1804); define(DB_PASSWORD, W0rdPr3ssL4MP1804!); define(DB_HOST, localhost); define(DB_CHARSET, utf8mb4); define(DB_COLLATE, ); /**# * Authentication Unique Keys and Salts. */ define(AUTH_KEY, ...); // 此处为32位随机字符串 // 后续KEYS省略... $table_prefix wp_; define(WP_DEBUG, false); define(DISALLOW_FILE_EDIT, true); if ( !defined(ABSPATH) ) define(ABSPATH, dirname(__FILE__) . /); require_once(ABSPATH . wp-settings.php);重点验证三点DB_PASSWORD是否与group_vars/all.yml中wordpress_db_password一致注意Vault解密后值AUTH_KEY等8个密钥是否为32字符以上随机串wp-cli自动生成非固定值DISALLOW_FILE_EDIT是否为true安全加固项/etc/apache2/sites-available/wordpress.conf生成后cat查看应包含VirtualHost *:80 ServerAdmin webmasterlocalhost ServerName 192.168.1.100 DocumentRoot /var/www/html Directory /var/www/html Options Indexes FollowSymLinks AllowOverride All Require all granted /Directory ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined /VirtualHost特别注意AllowOverride All这是.htaccess生效的前提。如果写成AllowOverride NoneWordPress永久链接功能将失效所有文章页返回404。4.4 权限与SELinux无关性说明Ubuntu 18.04默认不启用SELinux所以Playbook里无需任何seboolean或sefiletype模块。这点和CentOS/RHEL截然不同。但AppArmor是启用的aa-status显示/usr/sbin/apache2在enforce模式。好消息是AppArmor默认策略对ApachePHPMySQL组合完全友好无需额外配置。Playbook中所有file模块的mode设置如0600、0755直接生效不必像SELinux环境那样chcon修改上下文。这也是我坚持用Ubuntu而非CentOS部署WordPress的原因之一安全模型更轻量运维心智负担更低。不过/var/www/html目录的owner必须是www-data因为Apache在18.04中以www-data用户身份运行ps aux | grep apache2可见www-data进程如果设成rootWordPress后台上传文件会失败报错“文件无法移动到wp-content/uploads”。5. 常见问题与排查技巧实录5.1 典型故障速查表现象可能原因排查命令解决方案浏览器打开IP显示“Apache2 Ubuntu Default Page”Apache虚拟主机未启用或DocumentRoot错误sudo a2ensite wordpress.conf sudo systemctl reload apache2grep DocumentRoot /etc/apache2/sites-enabled/*确保a2ensite执行且reload而非restartWordPress安装页提示“Error establishing a database connection”MySQL服务未启动、用户无权限、wp-config.php密码错误sudo systemctl status mysqlmysql -u root -p -e SELECT User,Host FROM mysql.user;grep DB_PASSWORD /var/www/html/wp-config.php检查mysql.service状态用mysql_user模块重授予权限核对wp-config.php密码是否与变量一致后台上传图片失败提示“无法创建目录”/var/www/html/wp-content权限不足或owner错误ls -ld /var/www/html/wp-contentps aux | grep apache2sudo chown -R www-data:www-data /var/www/html/wp-contentsudo chmod -R 755 /var/www/html/wp-content永久链接启用后所有页面404Apache未加载rewrite模块或AllowOverride未设为Allsudo a2enmod rewritegrep -A 5 Directory /var/www/html /etc/apache2/sites-enabled/wordpress.conf执行a2enmod rewrite确认AllowOverride All在正确Directory块内wp-cli命令报错“command not found”PHP CLI未安装或PATH未包含/usr/binwhich phpecho $PATHsudo apt install php7.2-cli确保/usr/bin在PATH中5.2 我踩过的三个深坑及独家修复法坑一MySQL 5.7 strict mode导致wp-cli创建表失败现象wp db create成功但wp core install报错“Specified key was too long; max key length is 767 bytes”。原因Ubuntu 18.04的MySQL 5.7默认开启innodb_large_prefix而WordPress 6.1的wp_options表option_name字段为varchar(191)索引长度超限。修复Playbook中加任务mysql_variables: variableinnodb_large_prefix valueOFF并mysql_variables: variableinnodb_file_format valueBarracuda。这是18.04专属修复22.04已默认关闭strict mode。坑二PHP 7.2的date.timezone未设导致WordPress后台时间错乱现象文章发布时间显示为1970年1月1日。原因/etc/php/7.2/apache2/php.ini中date.timezone被注释PHP用UTC时区而WordPress未在wp-config.php中定义date_default_timezone_set()。修复lineinfile: path/etc/php/7.2/apache2/php.ini regexp^;?date.timezone linedate.timezone Asia/Shanghai。必须用Asia/ShanghaiPRC不被PHP识别。坑三wp core install后前台首页空白后台可登录现象http://ip/白屏但http://ip/wp-admin正常。原因/var/www/html/index.php被覆盖为旧版或wp-blog-header.php路径错误。修复Playbook末尾加任务copy: src/var/www/html/wp-blog-header.php dest/var/www/html/index.php forceyes强制同步。这是WordPress 6.1的已知bug官方未修复只能手动补位。5.3 性能调优与后续扩展建议部署完成只是开始。针对Ubuntu 18.04WordPress组合我推荐三个必做优化OPcache内存调优lineinfile: path/etc/php/7.2/apache2/php.ini regexp^;?opcache.memory_consumption lineopcache.memory_consumption256。18.04默认128MBWordPress多插件场景易满256MB更稳妥。MySQL查询缓存关闭mysql_variables: variablequery_cache_type value0。MySQL 5.7已废弃查询缓存开启反而降低性能。Apache MPM Prefork调优lineinfile: path/etc/apache2/mods-available/mpm_prefork.conf regexp^StartServers lineStartServers 5。18.04默认5但小内存VPS1G RAM应降至2避免OOM。后续扩展方向添加Lets Encrypt SSL用community.crypto.acme_certificate模块自动申请证书替换/etc/apache2/sites-available/wordpress.conf为HTTPS版本。集成Redis对象缓存apt install redis-server再wp plugin install redis-cache --activatewp redis enable。这能将数据库查询减少70%尤其对WooCommerce站点效果显著。备份自动化用cron模块添加每日wp db export和tar -czf备份任务copy到S3或NAS。我个人在实际操作中的体会是Ansible不是银弹它把“怎么做”自动化了但“做什么”仍需人来判断。比如wp-config.php里的WP_DEBUG开发环境应设为true生产环境必须false再比如max_execution_time电商站点结账页需调高到120秒博客站点60秒足够。这些决策点永远需要资深运维的经验注入。所以别迷信Playbook把它当作你的“标准化操作手册”而你是那个手持手册、随时根据现场情况微调的工程师。

相关新闻