LNMP如何实现自动部署
导读:LNMP自动部署实用方案 一、方案总览与选型 常见做法包括:使用Shell 一键脚本、集成安装脚本 oneinstack、Ansible 批量编排、Docker 容器化以及Terraform + User Data 云上自动初始化。下表给...
LNMP自动部署实用方案
一、方案总览与选型
- 常见做法包括:使用Shell 一键脚本、集成安装脚本 oneinstack、Ansible 批量编排、Docker 容器化以及Terraform + User Data 云上自动初始化。下表给出适用场景与要点:
| 方式 | 适用场景 | 核心优点 | 关键要点 |
|---|---|---|---|
| Shell 一键脚本 | 单机快速交付 | 简单直观、可定制 | 版本锁定、幂等处理、错误处理与回滚 |
| oneinstack | 多版本/多组件选择 | 功能全、交互/自动均可 | 支持 Nginx/Tengine/OpenResty、多 PHP/DB 版本、SSL/备份 |
| Ansible | 批量/多环境 | 声明式、可复用、可审计 | Playbook 管理、Idempotent、角色化 |
| Docker | 开发/测试/轻量生产 | 环境隔离、快速起停 | 多容器编排、数据卷持久化、网络与权限 |
| Terraform | 云上基础设施 + 初始化 | IaC、可重复部署 | User Data 执行安装脚本、与云资源联动 |
以上方案在实际工程中均被广泛采用,可按规模与运维成熟度选择或组合使用。
二、单机一键脚本思路与关键步骤
- 准备与版本选择
- 确认系统版本(如 CentOS 7/8、Ubuntu 20.04/22.04),准备具备 root/sudo 权限的账号;选择 Nginx、MariaDB/MySQL、PHP 的兼容版本。
- 安装与启动 Nginx
- 基于发行版仓库安装(如 yum/apt),启动并设置开机自启;验证:curl -I http://localhost 返回 200。
- 安装与初始化数据库
- 安装 MariaDB(CentOS 7 常用)或 MySQL;执行安全初始化(设置 root 密码、移除匿名用户等)。
- 安装 PHP 与 PHP-FPM
- 使用官方或 Remi 仓库选择所需 PHP 版本(如 7.4/8.0/8.1/8.3),安装 php-fpm 与常用扩展(如 php-mysql、php-mbstring、php-xml、php-gd、php-opcache)。
- 配置 Nginx 支持 PHP
- 在 server 块中添加 .php 的 FastCGI 转发,典型为 fastcgi_pass 127.0.0.1:9000;设置 SCRIPT_FILENAME 为 $document_root$fastcgi_script_name。
- 验证与收尾
- 创建 /usr/share/nginx/html/info.php(),访问验证;按需配置防火墙(如放行 80/443)、日志轮转与监控告警。
三、批量与云上自动化
- Ansible 编排示例(节选)
- 使用 apt/yum 安装 Nginx/MySQL/PHP-FPM,通过模板下发 Nginx 虚拟主机配置,notify 触发重启;集中管理多台主机、可版本化与审计。
- Docker Compose 示例(开发/测试)
- 以多容器方式启动 Nginx + PHP-FPM + MySQL,通过 volumes 挂载代码与数据,环境变量配置数据库口令与库名,快速拉起与销毁。
- Terraform + User Data(云上自动初始化)
- 定义云主机资源,在 user_data 中嵌入安装脚本(如 yum/apt 安装 Nginx/MySQL/PHP-FPM、启动服务、写入 info.php),实现实例创建即完成环境就绪。
四、一键脚本最小可用示例 CentOS 7
- 使用说明
- 以 root 在 CentOS 7 执行;按需修改密码与版本;脚本包含基础错误处理与验证步骤。
- 脚本内容
- 保存为 lnmp_install.sh,执行:chmod +x lnmp_install.sh & & ./lnmp_install.sh
#!/usr/bin/env bash
set -Eeuo pipefail
# 可配置参数
DB_ROOT_PASS="${
DB_ROOT_PASS:-MyStrongPass123!}
"
PHP_VER="${
PHP_VER:-74}
" # 74/80/81/83
NGINX_ROOT="/usr/share/nginx/html"
INFO_PHP="${
NGINX_ROOT}
/info.php"
echo "[1/5] 安装 EPEL 与 Nginx"
yum install -y epel-release
yum install -y nginx
systemctl start nginx &
&
systemctl enable nginx
curl -I http://localhost | grep -q "200 OK" || {
echo "Nginx 启动或访问异常";
exit 1;
}
echo "[2/5] 安装 MariaDB 并初始化"
yum install -y mariadb-server mariadb
systemctl start mariadb &
&
systemctl enable mariadb
mysql_secure_installation <
<
EOF
y
${
DB_ROOT_PASS}
${
DB_ROOT_PASS}
y
y
y
y
EOF
echo "[3/5] 安装 PHP ${
PHP_VER}
与常用扩展"
yum install -y yum-utils
yum install -y "http://rpms.remirepo.net/enterprise/remi-release-7.rpm"
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable "remi-php${
PHP_VER}
"
yum install -y php php-fpm php-mysqlnd php-mbstring php-xml php-gd php-opcache
systemctl start php-fpm &
&
systemctl enable php-fpm
echo "[4/5] 配置 Nginx 支持 PHP"
cat >
/etc/nginx/conf.d/default.conf <
<
'EOF'
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
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;
}
}
EOF
systemctl reload nginx
echo "[5/5] 创建 PHP 测试页并验证"
echo "<
?php phpinfo();
?>
" >
"$INFO_PHP"
curl -I http://localhost/info.php | grep -q "200 OK" || {
echo "PHP 页面测试失败";
exit 1;
}
echo "LNMP 部署完成:Nginx + MariaDB + PHP ${
PHP_VER}
"
echo "访问 http://服务器IP/info.php 验证"
- 安全与优化建议
- 使用 防火墙(firewalld/ufw)仅放行 80/443;为数据库与后台设置强口令与最小权限;禁用不必要的 PHP 函数;开启 SELinux/AppArmor(如适用);配置 HTTPS/TLS(Let’s Encrypt/certbot);将 PHP 错误日志与 Nginx 访问/错误日志接入集中监控/告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP如何实现自动部署
本文地址: https://pptw.com/jishu/775025.html
