因为我搭建环境时域名还没有通过备案,所以代码以IP地址为访问网址,后续出阿里云域名备案和环境修改代码
纯代码
#!/bin/bash
set -e
DB_NAME=”wp_db”
DB_USER=”wp_user”
DB_PASS=”wp123456″
WEB_DIR=”/var/www/wordpress”
PHP_VERSION=”8.2″
if [ “$(id -u)” != “0” ]; then
echo “错误:请使用root用户运行此脚本!”
exit 1
fi
echo “开始更新系统源”
apt update -y && apt upgrade -y
echo “安装LNMP环境”
apt install -y nginx mariadb-server php${PHP_VERSION}-fpm php${PHP_VERSION}-mysql php${PHP_VERSION}-cli php${PHP_VERSION}-mbstring php${PHP_VERSION}-xml php${PHP_VERSION}-gd php${PHP_VERSION}-curl
echo “启动服务并设置开机自启”
systemctl start nginx mariadb php${PHP_VERSION}-fpm
systemctl enable nginx mariadb php${PHP_VERSION}-fpm
echo “自动配置MariaDB数据库 “
mysql -u root -e “CREATE DATABASE IF NOT EXISTS ${DB_NAME};”
mysql -u root -e “CREATE USER IF NOT EXISTS ‘${DB_USER}’@’localhost’ IDENTIFIED BY ‘${DB_PASS}’;”
mysql -u root -e “GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO ‘${DB_USER}’@’localhost’;”
mysql -u root -e “FLUSH PRIVILEGES;”
echo “配置Nginx”
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/sites-available/default
cat > /etc/nginx/sites-available/wordpress << EOF
server {
listen 80;
server_name _;
root ${WEB_DIR};
index index.php index.html;
location / {
try_files \$uri \$uri/ /index.php?\$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php${PHP_VERSION}-fpm.sock;
}
}
EOF
ln -sf /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
echo “下载并部署WordPress”
wget -q https://wordpress.org/latest.tar.gz
tar -zxf latest.tar.gz
mv wordpress ${WEB_DIR}
chown -R www-data:www-data ${WEB_DIR}
rm -f latest.tar.gz
echo “自动生成WordPress配置文件”
cd ${WEB_DIR}
cp wp-config-sample.php wp-config.php
sed -i “s/database_name_here/${DB_NAME}/g” wp-config.php
sed -i “s/username_here/${DB_USER}/g” wp-config.php
sed -i “s/password_here/${DB_PASS}/g” wp-config.php
echo “防火墙配置”
if command -v ufw &> /dev/null; then
ufw allow 80/tcp -y
echo “系统防火墙已开放80端口”
else
echo “系统未安装ufw防火墙,跳过此步骤”
echo “请确保阿里云控制台安全组已放行80端口”
fi
echo “———————————— 搭建完成——————————————”
echo “访问地址:http://$(hostname -I | awk ‘{print $1}’)”
echo “数据库信息:库名=${DB_NAME} 用户=${DB_USER} 密码=${DB_PASS}”
echo “直接在浏览器输入服务器公网IP,即可开始安装WordPress!”
代码详解
#======================模块 1:脚本声明 + 异常控制===================
#!/bin/bash
set -e
#!/bin/bash:脚本声明,告诉系统用 bash 解释器执行代码(Linux 标准脚本开头)
set -e:脚本安全开关,任意命令执行失败,脚本直接终止退出(避免错误叠加)
# ===================== 模块 2:自定义变量配置区=====================
DB_NAME="wp_db"
DB_USER="wp_user"
DB_PASS="wp123456"
WEB_DIR="/var/www/wordpress"
PHP_VERSION="8.2"
将配置与代码分离,中间用下划线分隔,需要的变量分别是数据库名词、数据库用户名、数据库密码、网站存储位置和PHP下载版本
ps:变量赋值时加空格(DB_NAME = "wp_db"),Shell 语法会报错
# ======================模块 3:root 权限校验====================
if [ "$(id -u)" != "0" ]; then
echo "错误:请使用root用户运行此脚本!"
exit 1
fi
判断语句;$()表示先执行括号内命令再判断
id -u :获取当前用户 ID,root 用户 ID 固定为0,非 root 直接退出
echo "====================模块 4:系统软件源更新 ===================="
apt update -y && apt upgrade -y
Debian/Ubuntu = apt,CentOS = yum/dnf
echo "====================模块 5:安装 LNMP 核心环境===================="
apt install -y nginx mariadb-server php${PHP_VERSION}-fpm php${PHP_VERSION}-mysql php${PHP_VERSION}-cli php${PHP_VERSION}-mbstring php${PHP_VERSION}-xml php${PHP_VERSION}-gd php${PHP_VERSION}-curl
一键安装 4 大核心组件:
nginx:Web 服务器(接收浏览器请求)
mariadb-server:数据库(存储博客数据)
php8.2-fpm:PHP 解析器(运行 WordPress 代码)
后面是 WordPress 必需的 PHP 扩展
ps:php-fpm:Nginx 不支持直接运行 PHP,必须依赖 FPM
echo "====================模块 6:服务启动 + 开机自启===================="
systemctl start nginx mariadb php${PHP_VERSION}-fpm
systemctl enable nginx mariadb php${PHP_VERSION}-fpm
echo "====================模块 7:MariaDB 数据库自动化配置===================="
mysql -u root -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME};"
mysql -u root -e "CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
mysql -u root -e "FLUSH PRIVILEGES;"
1.创建博客专用数据库
2.数据库专用用户
3.授予全部权限(也可以只设置应用层的五大权限更安全,详细看LNMP1.0文章-配置Mariadb)
4.刷新权限生效
echo "==================== 模块 8:Nginx 站点配置(核心) ===================="
rm -f /etc/nginx/sites-enabled/default
rm -f /etc/nginx/sites-available/default
删除默认配置
cat > /etc/nginx/sites-available/wordpress << EOF
server {
listen 80;# 监听80端口(HTTP默认端口
server_name _;匹配所有IP/域名(直接IP访问)
root ${WEB_DIR};# 网站根目录
index index.php index.html;# 默认首页文件
location / {
try_files \$uri \$uri/ /index.php?\$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php${PHP_VERSION}-fpm.sock;
}
}
# 转发PHP请求给FPM解析
EOF
创建新配置;cat输入文本配置
ln -sf /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
软链接启用配置
nginx -t
systemctl restart nginx
echo "====================模块 9:WordPress 部署 + 权限配置===================="
wget -q https://wordpress.org/latest.tar.gz
tar -zxf latest.tar.gz
mv wordpress ${WEB_DIR}
chown -R www-data:www-data ${WEB_DIR}#修改权限
rm -f latest.tar.gz
Nginx/PHP 运行用户:www-data(Debian 专用)
网站目录必须归属www-data,否则会报 403 / 无法上传文件
echo "====================模块 10:自动生成 WordPress 配置文件===================="
cd ${WEB_DIR}
cp wp-config-sample.php wp-config.php
sed -i "s/database_name_here/${DB_NAME}/g" wp-config.php
sed -i "s/username_here/${DB_USER}/g" wp-config.php
sed -i "s/password_here/${DB_PASS}/g" wp-config.php
#sed自动替换
echo "====================模块 11:智能防火墙配置(阿里云专用)===================="
if command -v ufw &> /dev/null; then
ufw allow 80/tcp -y
echo "系统防火墙已开放80端口"
else
echo "系统未安装ufw防火墙,跳过此步骤"
echo "请确保阿里云控制台安全组已放行80端口"
fi
#端口设置和command -v判断
echo "==================== 模块 12:输出结果====================="
echo "✅ 访问地址:http://$(hostname -I | awk '{print $1}')"
echo "✅ 数据库信息:库名=${DB_NAME} 用户=${DB_USER} 密码=${DB_PASS}"
echo "✅ 直接在浏览器输入服务器公网IP,即可开始安装WordPress!"