新昌网站建设建设网站能解决什么问题
新昌网站建设,建设网站能解决什么问题,建设银行官网招聘网站,面试建设单位在哪个网站1. 为什么我们需要自动化部署LNMP和WordPress#xff1f;
嘿#xff0c;朋友们#xff0c;我是老张#xff0c;一个在运维和开发圈子里摸爬滚打了十多年的老家伙。今天咱们不聊那些虚头巴脑的概念#xff0c;直接上干货。你有没有过这样的经历#xff1f;每次拿到一台新的…1. 为什么我们需要自动化部署LNMP和WordPress嘿朋友们我是老张一个在运维和开发圈子里摸爬滚打了十多年的老家伙。今天咱们不聊那些虚头巴脑的概念直接上干货。你有没有过这样的经历每次拿到一台新的云服务器无论是腾讯云、阿里云还是其他什么云要搭建一个WordPress博客都得重复一遍更新系统、装Nginx、配MySQL、调PHP、下载WordPress、改配置文件……一套流程下来少说也得折腾个把小时。更头疼的是万一中间某个命令敲错了或者版本不兼容排查起来更是费时费力。这就是我今天想跟大家分享的在OpenCloudOS 8上用自动化脚本一键搞定LNMP环境和WordPress部署。咱们的目标不是“会搭建”而是“秒级部署重复无忧”。对于开发者、运维甚至是有点技术基础的博主来说拥有一套属于自己的、可重复执行的自动化部署方案价值巨大。它意味着效率、标准化和可靠性。你再也不用担心换服务器、做测试环境或者帮朋友搭站时要重头再来。今天我就把我自己用了好几年的Shell脚本思路和实战经验毫无保留地分享给你保证你跟着做一次就能成功。2. 环境准备与自动化脚本设计思路2.1 服务器与系统初始化工欲善其事必先利其器。自动化部署的第一步是确保我们的“画布”——也就是腾讯云的OpenCloudOS 8服务器——是干净且一致的。我强烈建议你使用腾讯云官方提供的OpenCloudOS 8镜像来创建云服务器这能最大程度避免因系统差异导致的奇怪问题。拿到服务器后第一件事不是急着安装软件而是进行系统初始化。这个步骤往往被新手忽略但它对后续的稳定性至关重要。我们需要做几件事更新系统软件包到最新、安装一些基础工具、设置正确的时区、以及优化一下基础的SSH和安全策略。虽然听起来有点多但用一个脚本就能搞定。下面是我常用的一个初始化脚本片段你可以把它保存为init_server.sh。这个脚本的作用是给服务器做一个“热身运动”为后续的LNMP安装铺平道路。#!/bin/bash # 系统初始化脚本 for OpenCloudOS 8 set -e # 遇到任何错误就退出防止错误累积 echo “开始系统初始化...” # 1. 更新系统并安装基础工具 echo “更新系统软件包...” sudo dnf update -y sudo dnf install -y vim wget curl git lsof net-tools bash-completion # 2. 设置时区为上海时间亚洲/上海 echo “设置系统时区...” sudo timedatectl set-timezone Asia/Shanghai # 3. 关闭并禁用不必要的服务根据实际情况调整新服务器通常很干净 # sudo systemctl stop postfix # sudo systemctl disable postfix # 4. 优化SSH配置可选提高安全性 # 备份原配置 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 禁止root直接登录建议在创建普通用户并赋予sudo权限后再开启 # sudo sed -i ‘s/^#PermitRootLogin yes/PermitRootLogin no/’ /etc/ssh/sshd_config # 重启SSH服务 # sudo systemctl restart sshd echo “系统初始化完成”运行这个脚本很简单bash init_server.sh。这里我用了set -e意思是脚本中任何一行命令执行失败返回非0状态整个脚本就会立即停止。这能帮助我们快速定位问题而不是等到最后才发现一堆错误。2.2 自动化脚本的核心设计哲学在动手写安装脚本之前我想先聊聊设计思路。一个好的自动化脚本不仅仅是命令的堆砌它应该具备以下几个特点幂等性这是最重要的原则。简单说就是同一个脚本你运行一次、两次、一百次最终得到的结果应该是一样的。这意味着脚本要能自我检查如果某个软件已经安装了就跳过安装步骤如果某个配置文件已经存在就要考虑是覆盖还是备份。我们后面的脚本会通过检查命令是否存在、服务状态、文件是否存在来实现这一点。模块化不要把Nginx、MySQL、PHP、WordPress的安装逻辑全部写在一个几百行的大文件里。应该按功能拆分成函数或者独立的脚本文件。比如install_nginx()install_mariadb()。这样不仅代码清晰以后想单独升级某个组件也方便。可配置数据库密码、WordPress的安装目录、PHP版本这些不应该硬编码在脚本里。好的做法是放在脚本开头的变量中或者通过外部配置文件引入。这样同一套脚本改几个参数就能部署出不同配置的站点。日志与错误处理脚本运行时应该把关键操作和结果输出到日志文件同时也要能捕获错误并给出明确的提示信息。没人喜欢一个“沉默”的脚本运行完了也不知道成功还是失败。基于这些原则我们接下来要写的就是一个具备幂等性、模块化、带基础错误处理的Shell脚本。它会按顺序完成LNMP环境的搭建和WordPress的部署。3. 实战编写一键部署LNMP环境的Shell脚本好了理论说再多不如实际干一把。我们现在就来编写核心的自动化部署脚本。我会把脚本分成几个部分并逐段解释你完全可以复制粘贴然后根据自己的需求微调。3.1 脚本全局变量与前置检查首先我们创建一个名为deploy_lnmp_wordpress.sh的脚本文件并赋予执行权限。touch deploy_lnmp_wordpress.sh chmod x deploy_lnmp_wordpress.sh然后用你喜欢的编辑器比如vim或nano打开它开始编写。脚本的开头我们定义一些全局变量并做一些前置检查。#!/bin/bash # # OpenCloudOS 8 一键部署 LNMP WordPress 脚本 # 作者老张 # 版本v1.2 # set -e # 严格模式任何命令失败则脚本终止 exec (tee -a /var/log/auto_deploy.log) 21 # 将脚本所有输出同时打印到屏幕和日志文件 # ---------- 可配置变量 ---------- # 你可以在这里修改成你自己的配置 MYSQL_ROOT_PASSWORD“YourStrongRootPass123!” # 请务必修改使用强密码。 WORDPRESS_DB_NAME“wordpress” WORDPRESS_DB_USER“wpuser” WORDPRESS_DB_PASSWORD“YourStrongWPPass456!” # 请务必修改 PHP_VERSION“7.4” # OpenCloudOS 8 默认仓库中的稳定版本 WEB_ROOT“/usr/share/nginx/html” # Nginx默认网站根目录 WORDPRESS_DIR“${WEB_ROOT}/myblog” # WordPress将安装到这个子目录你可以改成任何名字 # ---------- 颜色定义让输出更友好 ---------- RED‘\033[0;31m’ GREEN‘\033[0;32m’ YELLOW‘\033[1;33m’ NC‘\033[0m’ # No Color # 日志函数 log_info() { echo -e “${GREEN}[INFO]${NC} $(date ‘%Y-%m-%d %H:%M:%S’) - $1” } log_warn() { echo -e “${YELLOW}[WARN]${NC} $(date ‘%Y-%m-%d %H:%M:%S’) - $1” } log_error() { echo -e “${RED}[ERROR]${NC} $(date ‘%Y-%m-%d %H:%M:%S’) - $1” } # 前置检查是否为OpenCloudOS 8是否为root用户 check_prerequisites() { log_info “开始进行前置检查...” # 检查系统版本 if ! grep -q “OpenCloudOS release 8” /etc/os-release; then log_error “本脚本仅适用于 OpenCloudOS 8 系统。” exit 1 fi # 检查是否为root用户或拥有sudo权限 if [[ $EUID -ne 0 ]]; then log_error “请使用 root 用户或 sudo 权限运行此脚本。” exit 1 fi log_info “前置检查通过。” }这段代码做了几件关键事1) 用set -e确保错误不被忽略2) 用exec (tee ...)把屏幕输出同时记录到日志文件/var/log/auto_deploy.log方便事后排查3) 定义了数据库密码、路径等关键变量请你务必修改那两个密码4) 定义了彩色输出的函数让运行过程一目了然5)check_prerequisites函数检查系统和用户权限避免在不兼容的环境下运行。3.2 安装与配置Nginx模块接下来是安装Nginx。我们要实现幂等性如果Nginx已经安装并运行就跳过。install_nginx() { log_info “开始安装和配置 Nginx...” # 检查Nginx是否已安装 if command -v nginx /dev/null; then log_warn “Nginx 已经安装跳过安装步骤。” else log_info “正在安装 Nginx...” sudo dnf install -y nginx log_info “Nginx 安装完成。” fi # 启动并设置开机自启 sudo systemctl enable --now nginx if sudo systemctl is-active --quiet nginx; then log_info “Nginx 服务启动成功。” else log_error “Nginx 服务启动失败” exit 1 fi # 备份原始默认配置文件 NGINX_CONF“/etc/nginx/conf.d/default.conf” if [[ -f “${NGINX_CONF}” ]]; then sudo cp “${NGINX_CONF}” “${NGINX_CONF}.bak.$(date %s)” log_info “已备份原Nginx默认配置文件。” fi # 创建支持PHP的Nginx配置文件 log_info “配置 Nginx 以支持 PHP-FPM...” sudo cat “${NGINX_CONF}” EOF server { listen 80; server_name _; # 默认匹配所有域名后续可改为你的真实域名 root ${WEB_ROOT}; location / { index index.php index.html index.htm; try_files \$uri \$uri/ /index.php?\$args; } # 防止访问 .htaccess 等隐藏文件 location ~ /\. { deny all; } # 处理PHP文件 location ~ \.php\$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } # 错误页面配置 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location /50x.html { root ${WEB_ROOT}; } } EOF # 测试Nginx配置语法 if sudo nginx -t; then log_info “Nginx 配置文件语法测试通过。” sudo systemctl reload nginx # 平滑重载配置 log_info “Nginx 配置已重载。” else log_error “Nginx 配置文件语法有误请检查” exit 1 fi # 配置防火墙开放80端口 if systemctl is-active --quiet firewalld; then log_info “配置防火墙开放 HTTP (80) 端口...” sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload log_info “防火墙规则已更新。” else log_warn “firewalld 服务未运行跳过防火墙配置。请确保云服务器安全组已开放80端口。” fi }这个函数逻辑清晰检查安装 - 安装如需- 启动服务 - 备份旧配置 - 写入新配置 - 测试并重载。我特别加入了try_files $uri $uri/ /index.php?$args;这一行这是WordPress固定链接伪静态功能所必需的能避免出现404错误。防火墙配置部分也做了判断如果firewalld没开就提醒你去检查云服务器的安全组这点很关键很多新手卡在这。3.3 安装与安全配置MariaDB数据库数据库的安装和安全初始化是重中之重。install_mariadb() { log_info “开始安装和配置 MariaDB...” # 检查MariaDB是否已安装 if command -v mysql /dev/null; then log_warn “MariaDB/MySQL 已经安装跳过安装步骤。” else log_info “正在启用并安装 MariaDB 10.3...” sudo dnf module enable mariadb:10.3 -y sudo dnf install -y mariadb-server mariadb log_info “MariaDB 安装完成。” fi # 启动并设置开机自启 sudo systemctl enable --now mariadb if sudo systemctl is-active --quiet mariadb; then log_info “MariaDB 服务启动成功。” else log_error “MariaDB 服务启动失败” exit 1 fi # 运行安全配置脚本非交互式自动化 log_info “执行 MariaDB 安全初始化自动化...” # 判断root密码是否已设置通过尝试无密码登录 if sudo mysqladmin -u root ping /dev/null; then log_info “检测到 MariaDB root 用户密码未设置或为空开始安全配置...” # 使用 expect 或 mysql_secure_installation 的预设答案这里使用SQL命令方式更可控 sudo mysql EOF ALTER USER rootlocalhost IDENTIFIED BY ${MYSQL_ROOT_PASSWORD}; DELETE FROM mysql.user WHERE User; DELETE FROM mysql.user WHERE Userroot AND Host NOT IN (localhost, 127.0.0.1, ::1); DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Dbtest OR Dbtest\\_%; FLUSH PRIVILEGES; EOF log_info “MariaDB root 密码已设置匿名用户和测试数据库已移除。” else log_warn “MariaDB root 用户似乎已有密码跳过自动安全初始化。如需重置请手动运行 ‘mysql_secure_installation’。” fi }这里我采用了一种更自动化的安全初始化方式。传统mysql_secure_installation是交互式的不适合脚本。我通过mysqladmin ping判断root密码状态如果无密码则直接执行一系列SQL命令来设置密码、删除匿名用户、移除测试数据库。这种方式更贴合自动化场景。再次提醒脚本开头的MYSQL_ROOT_PASSWORD变量一定要改成你自己的强密码3.4 安装PHP与必要扩展PHP是连接Nginx和数据库的桥梁需要安装核心的FPM进程管理器以及WordPress必需的扩展。install_php() { log_info “开始安装 PHP ${PHP_VERSION} 及相关扩展...” # 检查PHP是否已安装 if command -v php /dev/null; then installed_version$(php -v | head -n 1 | cut -d ‘ ’ -f 2 | cut -d ‘.’ -f 1,2) log_warn “PHP ${installed_version} 已经安装。脚本配置版本为 ${PHP_VERSION}请注意版本兼容性。” else log_info “正在启用并安装 PHP ${PHP_VERSION} 模块...” sudo dnf module enable php:${PHP_VERSION} -y sudo dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-curl php-zip log_info “PHP ${PHP_VERSION} 及扩展安装完成。” fi # 配置PHP-FPM微调使用TCP socket便于管理 PHP_FPM_CONF“/etc/php-fpm.d/www.conf” if [[ -f “${PHP_FPM_CONF}” ]]; then sudo cp “${PHP_FPM_CONF}” “${PHP_FPM_CONF}.bak.$(date %s)” log_info “已备份原PHP-FPM配置文件。” # 确保监听方式为 127.0.0.1:9000与Nginx配置匹配 sudo sed -i “s/^listen .*/listen 127.0.0.1:9000/” “${PHP_FPM_CONF}” # 调整用户组为nginx根据实际系统用户调整 sudo sed -i “s/^user apache/user nginx/” “${PHP_FPM_CONF}” sudo sed -i “s/^group apache/group nginx/” “${PHP_FPM_CONF}” log_info “PHP-FPM 配置已优化。” fi # 启动并设置开机自启 sudo systemctl enable --now php-fpm if sudo systemctl is-active --quiet php-fpm; then log_info “PHP-FPM 服务启动成功。” # 验证监听端口 if sudo ss -tulnp | grep -q ‘:9000’; then log_info “PHP-FPM 正在 127.0.0.1:9000 端口监听。” fi else log_error “PHP-FPM 服务启动失败” exit 1 fi }这个函数除了安装还做了两件实用的事一是备份了PHP-FPM的配置文件二是用sed命令自动修改了监听地址和运行用户。将用户从默认的apache改为nginx能避免一些文件权限问题。安装的扩展包php-curl,php-zip也是很多WordPress主题和插件所必需的。3.5 为WordPress创建数据库和用户环境搭好了我们得为WordPress准备好一个“房间”数据库和一把“钥匙”数据库用户。setup_wordpress_db() { log_info “为 WordPress 创建数据库和用户...” # 使用root密码连接MariaDB sudo mysql -u root -p“${MYSQL_ROOT_PASSWORD}” EOF CREATE DATABASE IF NOT EXISTS ${WORDPRESS_DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS ‘${WORDPRESS_DB_USER}’‘localhost’ IDENTIFIED BY ‘${WORDPRESS_DB_PASSWORD}’; GRANT ALL PRIVILEGES ON ${WORDPRESS_DB_NAME}.* TO ‘${WORDPRESS_DB_USER}’‘localhost’; FLUSH PRIVILEGES; EOF if [[ $? -eq 0 ]]; then log_info “数据库 ‘${WORDPRESS_DB_NAME}’ 和用户 ‘${WORDPRESS_DB_USER}’ 创建成功。” else log_error “数据库创建失败请检查MySQL root密码是否正确以及MySQL服务状态。” exit 1 fi }这里用了CREATE DATABASE IF NOT EXISTS和CREATE USER IF NOT EXISTS体现了幂等性。即使数据库和用户已存在脚本也不会报错。字符集设置为utf8mb4是为了完美支持Emoji表情等四字节字符这是现代Web应用的标配。4. 自动化部署WordPress核心程序基础环境全部就绪现在的主角WordPress要登场了。我们将实现自动下载、解压、配置。4.1 下载与解压WordPressinstall_wordpress() { log_info “开始下载并安装 WordPress...” # 进入网站根目录 cd “${WEB_ROOT}” # 定义WordPress版本和下载链接建议使用最新稳定版这里以6.6.1中文版为例 WP_VERSION“6.6.1” WP_ZH_URL“https://cn.wordpress.org/wordpress-${WP_VERSION}-zh_CN.tar.gz” WP_PACKAGE“wordpress-${WP_VERSION}-zh_CN.tar.gz” # 检查是否已存在WordPress目录 if [[ -d “${WORDPRESS_DIR}” ]]; then log_warn “目录 ${WORDPRESS_DIR} 已存在为避免覆盖跳过WordPress下载和解压。” return 0 fi # 下载WordPress log_info “正在下载 WordPress ${WP_VERSION} 中文版...” if wget -q “${WP_ZH_URL}” -O “${WP_PACKAGE}”; then log_info “WordPress 下载完成。” else log_error “WordPress 下载失败请检查网络或下载地址。” exit 1 fi # 解压 log_info “正在解压 WordPress...” tar -xzf “${WP_PACKAGE}” # 将解压出的wordpress文件夹移动到我们指定的目录 mv wordpress “${WORDPRESS_DIR}” # 清理压缩包 rm -f “${WP_PACKAGE}” log_info “WordPress 文件已解压至 ${WORDPRESS_DIR}” # 设置正确的文件权限Nginx用户需要写权限 log_info “设置 WordPress 目录权限...” sudo chown -R nginx:nginx “${WORDPRESS_DIR}” sudo find “${WORDPRESS_DIR}” -type d -exec chmod 755 {} \; sudo find “${WORDPRESS_DIR}” -type f -exec chmod 644 {} \; log_info “目录权限设置完成。” }这个函数首先检查目标目录是否存在存在则跳过防止重复安装覆盖数据。下载使用了-q安静模式解压后移动目录并立即删除压缩包保持服务器整洁。最关键的一步是权限设置将WordPress目录的所有者改为nginx:nginx并设置目录755、文件644的权限这样Nginx进程既有读取文件的权限又能在需要时如插件更新、上传媒体文件写入特定目录。4.2 自动生成wp-config.php配置文件手动复制、编辑wp-config.php是搭建WordPress最繁琐的一步我们让脚本自动完成它。configure_wordpress() { log_info “开始配置 WordPress (wp-config.php)...” WP_CONFIG“${WORDPRESS_DIR}/wp-config.php” if [[ -f “${WP_CONFIG}” ]]; then log_warn “${WP_CONFIG} 已存在进行备份后重新生成。” mv “${WP_CONFIG}” “${WP_CONFIG}.bak.$(date %s)” fi # 复制示例配置文件 cp “${WORDPRESS_DIR}/wp-config-sample.php” “${WP_CONFIG}” # 使用 sed 命令替换数据库连接信息 sudo sed -i “s/database_name_here/${WORDPRESS_DB_NAME}/” “${WP_CONFIG}” sudo sed -i “s/username_here/${WORDPRESS_DB_USER}/” “${WP_CONFIG}” sudo sed -i “s/password_here/${WORDPRESS_DB_PASSWORD}/” “${WP_CONFIG}” sudo sed -i “s/localhost/localhost/” “${WP_CONFIG}” # 默认就是localhost这里显式替换 # 生成并替换认证密钥从WordPress官方API获取增强安全性 log_info “正在从 WordPress.org 获取安全密钥...” SALT_KEYS$(curl -s https://api.wordpress.org/secret-key/1.1/salt/) if [[ -n “${SALT_KEYS}” ]]; then # 这是一个复杂的替换操作找到包含‘put your unique phrase here’的行并用获取的密钥块整体替换 # 先创建一个临时文件来存放新配置 awk -v keys“${SALT_KEYS}” ‘ /put your unique phrase here/ !done { print keys done1 next } !/put your unique phrase here/ { print } ’ “${WP_CONFIG}” “${WP_CONFIG}.tmp” mv “${WP_CONFIG}.tmp” “${WP_CONFIG}” log_info “安全密钥已更新。” else log_warn “无法从WordPress.org获取安全密钥请稍后手动配置。” fi # 再次确保配置文件权限正确 sudo chown nginx:nginx “${WP_CONFIG}” sudo chmod 640 “${WP_CONFIG}” # 配置文件权限稍严格 log_info “WordPress 配置文件生成并配置完成。” }这部分是脚本的精华。它自动完成了最易出错的手动步骤1) 替换数据库名、用户名、密码2)自动从WordPress官方API获取最新的安全密钥Salt并替换。这个密钥用于加密用户cookie手动生成弱密钥是严重的安全隐患脚本帮你解决了。这里用了awk命令进行文本块的查找和替换比简单的sed更稳健。4.3 最终测试与访问引导所有组件安装配置完成后我们需要做一个整体的健康检查并告诉用户如何访问。finalize_and_test() { log_info “进行最终配置和测试...” # 重启相关服务使所有配置生效 sudo systemctl restart nginx php-fpm log_info “Nginx 和 PHP-FPM 已重启。” # 创建一个简单的PHP信息页用于测试可选测试后建议删除 TEST_FILE“${WEB_ROOT}/test_info.php” echo “?php phpinfo(); ?” | sudo tee “${TEST_FILE}” /dev/null sudo chown nginx:nginx “${TEST_FILE}” # 获取服务器IP地址 SERVER_IP$(curl -s icanhazip.com 2/dev/null || hostname -I | awk ‘{print $1}’) log_info “” log_info “ LNMP 环境 WordPress 自动化部署完成” log_info “” log_info “请访问以下URL进行下一步” log_info “1. PHP环境测试页http://${SERVER_IP}/test_info.php” log_info “2. WordPress安装页面http://${SERVER_IP}/myblog/wp-admin/install.php” log_info “ ” log_info “⚠️ 重要提示” log_info “ - 测试完成后请务必删除 ${TEST_FILE} 文件以免泄露服务器信息。” log_info “ - 访问WordPress安装页面按照向导完成最后的站点信息设置即可。” log_info “ - 所有安装日志已保存至/var/log/auto_deploy.log” log_info “” }最后我们把所有函数组合到主执行流程里。# ---------- 主执行流程 ---------- main() { log_info “OpenCloudOS 8 LNMP WordPress 自动化部署脚本开始执行。” check_prerequisites install_nginx install_mariadb install_php setup_wordpress_db install_wordpress configure_wordpress finalize_and_test log_info “所有任务执行完毕” } # 执行主函数 main现在整个脚本就完成了。你只需要在腾讯云OpenCloudOS 8的服务器上运行sudo bash deploy_lnmp_wordpress.sh然后泡杯咖啡几分钟后一个功能完整的WordPress博客就部署好了。脚本会自动处理依赖、配置、权限和安全性检查。5. 进阶使用Ansible实现更优雅的自动化Shell脚本虽然直接有效但在管理多台服务器、或者需要更复杂的流程控制和错误回滚时就显得有些力不从心了。这时Ansible就该出场了。Ansible是一种无代理的自动化工具用YAML语言编写“剧本”Playbook描述你希望服务器达到的状态它会自动帮你实现。它的语法更清晰可读性更强而且天生支持幂等性。下面我给出一个实现同样功能的Ansible Playbook的核心框架deploy_wordpress.yml你可以感受一下它的不同。--- - name: 在OpenCloudOS 8上部署LNMP和WordPress hosts: all become: yes # 使用sudo权限 vars: mysql_root_password: “YourStrongRootPass123!” wordpress_db_name: “wordpress” wordpress_db_user: “wpuser” wordpress_db_password: “YourStrongWPPass456!” php_version: “7.4” web_root: “/usr/share/nginx/html” wordpress_dir: “{{ web_root }}/myblog” wordpress_version: “6.6.1” tasks: - name: 安装Nginx dnf: name: nginx state: present - name: 启动并启用Nginx服务 systemd: name: nginx enabled: yes state: started - name: 配置Nginx支持PHP template: src: nginx_wordpress.conf.j2 # 这是一个Jinja2模板文件 dest: /etc/nginx/conf.d/default.conf notify: 重启Nginx - name: 安装MariaDB dnf: name: - mariadb-server - mariadb state: present - name: 启动并启用MariaDB服务 systemd: name: mariadb enabled: yes state: started - name: 安全初始化MariaDB (设置root密码) mysql_user: login_user: root login_password: “” name: root password: “{{ mysql_root_password }}” host: localhost check_implicit_admin: yes # 允许初始无密码连接 state: present - name: 安装PHP及扩展 dnf: name: - php - php-fpm - php-mysqlnd - php-gd - php-xml - php-mbstring - php-json - php-curl - php-zip state: present - name: 启动并启用PHP-FPM服务 systemd: name: php-fpm enabled: yes state: started - name: 创建WordPress数据库 mysql_db: login_user: root login_password: “{{ mysql_root_password }}” name: “{{ wordpress_db_name }}” encoding: utf8mb4 collation: utf8mb4_unicode_ci state: present - name: 创建WordPress数据库用户并授权 mysql_user: login_user: root login_password: “{{ mysql_root_password }}” name: “{{ wordpress_db_user }}” password: “{{ wordpress_db_password }}” host: localhost priv: “{{ wordpress_db_name }}.*:ALL” state: present - name: 下载WordPress get_url: url: “https://cn.wordpress.org/wordpress-{{ wordpress_version }}-zh_CN.tar.gz” dest: “/tmp/wordpress.tar.gz” - name: 解压WordPress到目标目录 unarchive: src: “/tmp/wordpress.tar.gz” dest: “{{ web_root }}” remote_src: yes creates: “{{ wordpress_dir }}/index.php” # 幂等性检查 - name: 设置WordPress目录权限 file: path: “{{ wordpress_dir }}” owner: nginx group: nginx recurse: yes - name: 生成wp-config.php配置文件 template: src: wp-config.php.j2 # 另一个Jinja2模板内含变量和逻辑 dest: “{{ wordpress_dir }}/wp-config.php” owner: nginx group: nginx mode: ‘0640’ handlers: - name: 重启Nginx systemd: name: nginx state: restarted使用这个Playbook你只需要在控制机上安装Ansible然后执行ansible-playbook -i your_inventory.ini deploy_wordpress.yml即可。Ansible的模板功能Jinja2可以让你将Nginx和WordPress的配置文件写得更加灵活和动态。对于需要管理大量服务器或追求运维规范化的团队来说Ansible是比纯Shell脚本更优的选择。6. 部署后检查、优化与故障排查指南脚本跑完了网站能打开了但工作还没结束。作为一个老手我习惯在部署完成后做以下几件事这能让你的博客更稳定、更安全。1. 基础功能验证PHP测试页访问脚本输出的test_info.php地址确认PHP已正确安装并显示了详细信息页面。切记验证后立即删除这个文件rm /usr/share/nginx/html/test_info.php。WordPress安装向导访问http://你的服务器IP/myblog/wp-admin/install.php应该能看到著名的“五分钟安装”页面。填写站点标题、管理员账号等信息完成安装。如果能成功登录后台说明整个LNMP通路完全打通。2. 性能与安全优化必做几步Nginx缓存与压缩在Nginx配置中启用Gzip压缩可以显著减少传输体积。在/etc/nginx/nginx.conf的http{}块内找到gzip相关配置取消注释并启用。PHP-FPM进程管理根据服务器内存调整PHP-FPM子进程数量。编辑/etc/php-fpm.d/www.conf调整pm.max_childrenpm.start_servers等参数。1GB内存的服务器max_children设置在20-30之间比较稳妥。数据库简单优化登录MariaDB为WordPress的数据库运行一下优化命令mysqlcheck -o wordpress -u root -p。限制PHP执行权限在Nginx配置中可以限制某些目录如上传目录wp-content/uploads/不允许执行PHP文件增加安全性。3. 常见故障排查“502 Bad Gateway”错误这几乎总是Nginx和PHP-FPM通信问题。首先检查PHP-FPM服务是否运行systemctl status php-fpm。然后检查Nginx配置中fastcgi_pass指向的地址和端口默认127.0.0.1:9000是否与PHP-FPM的listen配置一致。最后查看日志tail -f /var/log/nginx/error.log和tail -f /var/log/php-fpm/error.log。“建立数据库连接时出错”这是WordPress安装时最常见的错误。第一检查wp-config.php里的数据库名、用户名、密码是否正确。第二登录MariaDB确认用户和权限mysql -u root -p然后执行SHOW GRANTS FOR wpuserlocalhost;。第三确认MariaDB服务在运行且监听本地端口sudo ss -tulnp | grep mysql。文件权限问题导致无法安装主题/插件WordPress后台提示需要FTP凭证。这是因为Web服务器用户nginx对WordPress目录没有写权限。确保WordPress目录的所有者是nginxsudo chown -R nginx:nginx /usr/share/nginx/html/myblog。更精细的做法是只给wp-content目录写权限。把上面这个Shell脚本保存好它就是你的“建站瑞士军刀”。下次再需要无论是在腾讯云、还是在其他任何OpenCloudOS 8的环境一行命令就能还原一个完整的博客。自动化带来的不仅仅是速度更是一种确定性和从容。当你不再被重复的安装步骤困扰才能把更多精力放在博客内容创作和主题定制这些更有价值的事情上。