文档首页> Linux命令> linux下shell脚本实现wordpress搭建

linux下shell脚本实现wordpress搭建

发布时间:2025-12-03 00:11       

下面直接给你一套「一键 Shell 脚本 + 分段说明」,默认环境是:

  • 系统:Debian / Ubuntu(例如 Debian 11/12、Ubuntu 20.04+)
  • 权限:root 登录或具备 sudo 权限
  • 目标:自动部署简体中文版 WordPress(LAMP:Apache + PHP + MariaDB)🎯


一、完整 Shell 脚本示例

#!/usr/bin/env bash
# WordPress 一键自动部署脚本(适配 Debian/Ubuntu 系)
# 功能:安装 LAMP 环境 + 创建数据库 + 部署并配置 WordPress 中文版

set -euo pipefail

# ====== 可按需自定义的参数 ======
WP_DB_NAME="wordpress_db"
WP_DB_USER="wp_user"
WP_DB_PASS="$(openssl rand -hex 16 || echo "WpPass_$(date +%s)")"
WP_SITE_DIR="/var/www/wordpress"
# ===============================

echo -e "\n==> 开始自动部署 WordPress ..."

# ---------- 1. 检查 root 权限 ----------
if [[ "${EUID}" -ne 0 ]]; then
  echo "❌ 请使用 root 权限运行本脚本(sudo 或直接 root)。"
  exit 1
fi

# ---------- 2. 检测系统类型(仅支持 Debian/Ubuntu) ----------
if [[ -f /etc/os-release ]]; then
  . /etc/os-release
  OS_ID="${ID}"
else
  echo "❌ 无法识别系统类型,建议使用 Debian/Ubuntu 系统。"
  exit 1
fi

if [[ "${OS_ID}" != "debian" && "${OS_ID}" != "ubuntu" ]]; then
  echo "❌ 当前脚本仅适配 Debian/Ubuntu,其他发行版请自行改造。"
  exit 1
fi

# ---------- 3. 更新软件源并安装 LAMP 组件 ----------
echo "==> 更新软件源并安装 Apache / MariaDB / PHP ..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -y
apt-get install -y \
  apache2 mariadb-server \
  php php-mysql php-gd php-curl php-xml php-mbstring php-zip \
  curl unzip openssl

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

# ---------- 4. 创建 WordPress 数据库与用户 ----------
echo "==> 创建 WordPress 数据库与账号 ..."
mysql -uroot <<EOF
CREATE DATABASE IF NOT EXISTS \`${WP_DB_NAME}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '${WP_DB_USER}'@'localhost' IDENTIFIED BY '${WP_DB_PASS}';
GRANT ALL PRIVILEGES ON \`${WP_DB_NAME}\`.* TO '${WP_DB_USER}'@'localhost';
FLUSH PRIVILEGES;
EOF

# ---------- 5. 下载并解压 WordPress 中文最新版 ----------
echo "==> 下载并部署 WordPress 中文版 ..."
cd /tmp
LATEST_WP="latest-zh_CN.tar.gz"
curl -fsSLo "${LATEST_WP}" "https://cn.wordpress.org/${LATEST_WP}"
tar -xzf "${LATEST_WP}"

# 部署到站点目录
rm -rf "${WP_SITE_DIR}"
mkdir -p "${WP_SITE_DIR}"
cp -R wordpress/* "${WP_SITE_DIR}"

# ---------- 6. 生成 wp-config.php 并写入数据库配置 ----------
cd "${WP_SITE_DIR}"
cp wp-config-sample.php wp-config.php

sed -i "s/database_name_here/${WP_DB_NAME}/" wp-config.php
sed -i "s/username_here/${WP_DB_USER}/" wp-config.php
sed -i "s/password_here/${WP_DB_PASS}/" wp-config.php

# ---------- 7. 自动生成盐值(安全密钥) ----------
echo "==> 写入 WordPress 安全密钥 ..."
WP_SALT="$(curl -fsSL 'https://api.wordpress.org/secret-key/1.1/salt/' || true)"
if [[ -n "${WP_SALT}" ]]; then
  sed -i "/AUTH_KEY/d;/SECURE_AUTH_KEY/d;/LOGGED_IN_KEY/d;/NONCE_KEY/d;/AUTH_SALT/d;/SECURE_AUTH_SALT/d;/LOGGED_IN_SALT/d;/NONCE_SALT/d" wp-config.php
  printf '%s\n' "${WP_SALT}" >> wp-config.php
fi

# ---------- 8. 设置文件权限 ----------
echo "==> 设置文件权限 ..."
chown -R www-data:www-data "${WP_SITE_DIR}"
find "${WP_SITE_DIR}" -type d -exec chmod 750 {} \;
find "${WP_SITE_DIR}" -type f -exec chmod 640 {} \;

# ---------- 9. 配置 Apache 虚拟主机 ----------
echo "==> 配置 Apache 虚拟主机 ..."
cat >/etc/apache2/sites-available/wordpress.conf <<APACHECONF
<VirtualHost *:80>
    ServerName _default_
    DocumentRoot ${WP_SITE_DIR}

    <Directory ${WP_SITE_DIR}>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog \${APACHE_LOG_DIR}/wordpress-error.log
    CustomLog \${APACHE_LOG_DIR}/wordpress-access.log combined
</VirtualHost>
APACHECONF

a2enmod rewrite
a2dissite 000-default >/dev/null 2>&1 || true
a2ensite wordpress.conf
systemctl reload apache2

# ---------- 10. 输出部署结果 ----------
IP_ADDR="$(hostname -I 2>/dev/null | awk '{print $1}')"

echo "=================================================="
echo "✅ WordPress 自动部署完成 🎉"
echo "站点目录:${WP_SITE_DIR}"
echo "访问地址: http://${IP_ADDR:-你的服务器IP}/"
echo "数据库名:${WP_DB_NAME}"
echo "数据库用户:${WP_DB_USER}"
echo "数据库密码:${WP_DB_PASS}"
echo "请在浏览器中打开访问地址,继续完成安装向导。"
echo "=================================================="

二、关键命令与脚本逻辑说明(逐段解释)

1. 开头与安全控制

  • #!/usr/bin/env bash
    指定脚本使用 bash 解释器执行,确保在大部分 Linux 发行版下行为一致。
  • set -euo pipefail
    • -e:任一命令出错立即退出,避免脚本继续执行造成脏环境。
    • -u:使用未定义变量时报错,防止变量拼写错误。
    • pipefail:管道中任一子命令失败都会被视为失败,提升脚本可靠性。
  • WP_DB_NAME / WP_DB_USER / WP_DB_PASS / WP_SITE_DIR
    这些变量定义了数据库名、账号、随机密码和 WordPress 安装目录,你可以根据业务统一规范调整。例如不同项目按域名命名数据库。
  • openssl rand -hex 16
    用 openssl 生成 16 字节随机十六进制字符串作为数据库密码,安全性比自己随便写一个弱密码强很多 💪。后面的 || echo "WpPass_$(date +%s)" 是兜底逻辑,防止某些极端环境没有 openssl 导致脚本中断。

2. 权限校验与系统识别

  • if [[ "${EUID}" -ne 0 ]]; then ... fi
    EUID 是当前用户的有效 UID,root 为 0。这里直接限制必须 root 执行,避免后续安装软件和写系统配置时报权限错误。
  • source /etc/os-release + 判断 ID
    通过读取 /etc/os-release 检测发行版标识(debian / ubuntu),如果不是这两种,脚本直接退出。这样可以避免在不兼容系统(如 CentOS、AlmaLinux)上跑出一堆错误。

3. 安装 Apache / MariaDB / PHP 组件

  • apt-get update -y
    更新软件包索引,确保后续安装拉取的是当前仓库中最新版本,避免装到陈旧包。
  • apt-get install -y apache2 mariadb-server php ...
    一次性安装 Web 服务器、数据库和 PHP 常用扩展,核心作用:
    • apache2:HTTP 服务,负责处理浏览器请求。
    • mariadb-server:兼容 MySQL 的数据库服务,稳定且在当前版本的 Debian/Ubuntu 中广泛使用。
    • php + php-mysql 等扩展:WordPress 依赖这些扩展进行数据库访问、图片处理、XML、JSON、压缩等操作。
  • systemctl enable/start apache2 mariadb
    • enable:设置开机自启,让服务器重启后站点依旧自动上线。
    • start:立即启动服务,方便后续通过浏览器访问测试。

4. 自动创建数据库和用户

mysql -uroot <<EOF
CREATE DATABASE IF NOT EXISTS ...
CREATE USER IF NOT EXISTS ...
GRANT ALL PRIVILEGES ...
FLUSH PRIVILEGES;
EOF
  • 通过「内联 SQL」方式一次性执行多条语句:
    • CREATE DATABASE IF NOT EXISTS:如果数据库不存在就创建,避免重复运行脚本时报错。
    • DEFAULT CHARACTER SET utf8mb4:使用 utf8mb4,完整支持 Emoji 等多字节字符 👍。
    • CREATE USER IF NOT EXISTS:创建独立的业务账号,不直接暴露 root,更安全。
    • GRANT ALL PRIVILEGES ...:将该库的全部权限授予该业务账号,方便 WordPress 自动建表与升级。
    • FLUSH PRIVILEGES:刷新权限表,确保设置立即生效。

5. 下载并解压 WordPress 中文包

cd /tmp
LATEST_WP="latest-zh_CN.tar.gz"
curl -fsSLo "${LATEST_WP}" "https://cn.wordpress.org/${LATEST_WP}"
tar -xzf "${LATEST_WP}"
  • cd /tmp:在临时目录中做下载和解压,避免把垃圾文件留在系统根目录。
  • curl -fsSLo
    • -f:HTTP 状态码非 2xx 视为失败。
    • -sS:静默模式但在出错时显示错误信息。
    • -L:自动跟随重定向(某些镜像会重定向)。
    • -o:指定输出文件名。
  • tar -xzf:对 .tar.gz 压缩包进行解压。