开发学院

您的位置:首页>技术文章>正文

技术文章

Ubuntu 24.04 LNMP+Redis自动安装脚本

开发学院2026-06-11 13:00:10
之前一直使用lnmp.com的自动套件,但是那个好像很久不维护了,bug也不修复,这两天发现网站也打不开了,索性自己写一个自动安装的的 Shell 脚本,适用于 Ubuntu 24.04 服务器,自动部署 LNMP 环境(Nginx 官方稳定版 + MySQL8.0 + PHP8.3),并附带 Redis 缓存、防火墙安全配置。

  之前一直使用lnmp.com的自动套件,但是那个好像很久不维护了,bug也不修复,这两天发现网站也打不开了,索性自己写一个自动安装的的 Shell 脚本,适用于 Ubuntu 24.04 服务器,自动部署 LNMP 环境(Nginx 官方稳定版 + MySQL8.0 + PHP8.3),并附带 Redis 缓存、防火墙安全配置。

  脚本全程自动执行:更新系统源、安装依赖、配置 Nginx 解析 PHP、初始化 MySQL、集成 php-redis 扩展、放行防火墙端口,无需手动修改多处配置,新手也能一键搭建网站运行环境。

环境清单

  Nginx:官方源最新稳定版

  MySQL 8.0:自动初始化 root 账号、清理危险默认配置

  PHP 8.3:Ondrej 官方 PPA 源,预装网站常用全套扩展

  Redis:系统官方 redis-server,自动开启 php-redis 扩展

  防火墙 UFW:自动放行 22 (ssh)、80 (http)、443 (https) 端口

前置要求

  服务器系统:纯净 Ubuntu 24.04

  操作权限:必须使用 root 用户执行脚本

  网络:服务器可正常访问外网(拉取 Nginx 密钥、PHP PPA 源)

  关闭冲突:服务器无已手动安装的 Nginx、MySQL、PHP、Redis,避免端口冲突

完整一键安装脚本

新建 lnmp_install.sh 文件,复制下方全部代码:

#!/bin/bash
# LNMP + Redis 一键安装脚本 (适配 Ubuntu 24.04)
# Nginx官方最新 + PHP 8.3 (通过PPA) + MySQL 8.0 + Redis

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}错误:请使用 root 用户执行此脚本${NC}" 
   exit 1
fi

echo -e "${YELLOW}[1/9] 更新系统软件源...${NC}"
apt update -y && apt upgrade -y

echo -e "${YELLOW}[2/9] 安装基础工具...${NC}"
apt install -y curl wget vim git ufw software-properties-common apt-transport-https ca-certificates gnupg lsb-release

echo -e "${YELLOW}[3/9] 安装 Nginx 最新稳定版...${NC}"
curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | tee /etc/apt/sources.list.d/nginx.list
apt update -y
apt install -y nginx
systemctl enable nginx
systemctl start nginx

echo -e "${YELLOW}[4/9] 安装 MySQL 8.0...${NC}"
apt install -y mysql-server
systemctl enable mysql
systemctl start mysql

MYSQL_ROOT_PASSWORD="root"
echo -e "${GREEN}MySQL root 密码: ${MYSQL_ROOT_PASSWORD}${NC}"

mysql <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
EOF

echo -e "${YELLOW}[5/9] 安装 PHP 8.3 (通过 PPA)...${NC}"
# 添加 Ondrej PHP PPA (Ubuntu 24.04 需要这个才能装 PHP 8.3)
add-apt-repository -y ppa:ondrej/php
apt update -y
# 注意:移除了 php8.3-xmlrpc 和 php8.3-opcache(后者已内置)
apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd \
  php8.3-mbstring php8.3-xml php8.3-zip php8.3-soap php8.3-redis php8.3-intl

PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2)
echo -e "${GREEN}已安装 PHP 版本: ${PHP_VERSION}${NC}"

echo -e "${YELLOW}[6/9] 配置 Nginx 与 PHP-FPM...${NC}"
#cat > /etc/nginx/conf.d/php_fpm.conf <<EOF
#index index.php index.html index.htm;
#location ~ \.php$ {
#    include snippets/fastcgi-php.conf;
#    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
#}
#EOF

rm -f /etc/nginx/conf.d/default.conf
cat > /etc/nginx/conf.d/default.conf <<EOF
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name _;
    index index.php index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
EOF


mkdir /var/www/
mkdir /var/www/html
chown -R www-data:www-data /var/www/html
echo "<?php phpinfo(); ?>" > /var/www/html/info.php

systemctl restart nginx
systemctl restart php8.3-fpm

echo -e "${YELLOW}[7/9] 安装 Redis...${NC}"
apt install -y redis-server
systemctl enable redis-server
systemctl start redis-server

echo -e "${YELLOW}[8/9] 确认 php-redis 扩展...${NC}"
phpenmod redis
systemctl restart php8.3-fpm

echo -e "${YELLOW}[9/9] 配置 UFW 防火墙...${NC}"
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
echo "y" | ufw enable

clear
echo -e "${GREEN}========== LNMP 安装完成 ==========${NC}"
echo -e "Nginx: $(nginx -v 2>&1)"
echo -e "MySQL: $(mysql --version)"
echo -e "PHP: ${PHP_VERSION}"
echo -e "Redis: $(redis-server --version | cut -d' ' -f3)"
echo -e "php-redis: $(php -m | grep redis)"
echo ""
echo -e "${YELLOW}MySQL root 密码: ${MYSQL_ROOT_PASSWORD}${NC}"
echo -e "测试页: http://YOUR_IP/info.php"
echo -e "\n${RED}安全建议:${NC}"
echo "1. 修改 MySQL 密码: sudo mysql_secure_installation"
echo "2. 为 Redis 设置密码: 修改 /etc/redis/redis.conf"
echo "3. 删除测试文件: rm /var/www/html/info.php"
echo "=========================================="