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 ... fiEUID是当前用户的有效 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 mariadbenable:设置开机自启,让服务器重启后站点依旧自动上线。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压缩包进行解压。