自動化一鍵部署 LNMP 環境

第一步:準備環境 & 準備腳本文件

1. 你在 CentOS 7 的服務器/虛擬機里打開終端,確認你有 root 權限或者能用 sudo

輸入下面命令確認你的系統版本:

cat /etc/centos-release

你應該看到類似:

CentOS Linux release 7.9.2009 (Core)


2. 用 vimnano 創建腳本文件

假設文件名叫 lnmp_install.sh

vim lnmp_install.sh

打開后,先不要急著輸入內容,咱們先做個簡單的測試,確保能保存和運行。

i 進入編輯模式,寫入:

#!/bin/bashecho "Hello LNMP"

然后按 Esc,輸入 :wq 保存并退出。


3. 給予腳本執行權限

chmod +x lnmp_install.sh

4. 運行腳本試試

./lnmp_install.sh

你應該看到輸出:

Hello LNMP

第二部.?編輯腳本,加入安裝 Nginx 的代碼

打開剛才的腳本:

vim lnmp_install.sh

i 進入編輯模式,把原來的內容改成下面這樣(我保留了 Hello LNMP,方便你確認腳本執行流程):

#!/bin/bashecho "Hello LNMP"echo ">>> 安裝 Nginx..."
yum install -y epel-release
yum install -y nginxecho ">>> 啟動并設置 Nginx 開機自啟..."
systemctl start nginx
systemctl enable nginxecho ">>> 檢查 Nginx 狀態..."
systemctl status nginx --no-pager

2. 保存并退出

Esc,輸入 :wq 回車。


3. 運行腳本

./lnmp_install.sh

4. 驗證 Nginx 是否成功安裝

curl -I http://localhost

HTTP/1.1 200 OK Server: nginx/1.20.1 ...

或者你也可以在瀏覽器訪問你的服務器 IP,看是否出現 Nginx 默認歡迎頁。


第三步:安裝 MySQL(MariaDB 版本)

CentOS 7 默認用 MariaDB 代替 MySQL,指令兼容,而且安裝更簡單。


1. 編輯腳本

打開腳本:

vim lnmp_install.sh

在安裝 Nginx 代碼的 后面,加上這段 MariaDB 安裝和初始化的內容:

echo ">>> 安裝 MariaDB(MySQL兼容版)..."
yum install -y mariadb-server mariadbecho ">>> 啟動并設置 MariaDB 開機自啟..."
systemctl start mariadb
systemctl enable mariadbecho ">>> 初始化 MariaDB(設置 root 密碼并開啟安全選項)..."
DB_ROOT_PASS="123456"  # 這里可以換成你想要的密碼
mysql_secure_installation <<EOFy
$DB_ROOT_PASS
$DB_ROOT_PASS
y
y
y
y
EOF

2. 保存并退出

Esc:wq → 回車。


3. 運行腳本(測試 MariaDB 部分)

./lnmp_install.sh 

4. 驗證 MySQL(MariaDB)是否安裝成功

mysql -uroot -p

輸入你剛才腳本里設定的密碼(默認 123456),如果能看到:

Welcome to the MariaDB monitor. Commands end with ; or \g.

說明數據庫安裝成功。


第四步:安裝 PHP 并配置 Nginx 支持 PHP

1. 編輯腳本

繼續在 lnmp_install.sh 里,MariaDB 安裝的后面加上 PHP 部分代碼:

echo ">>> 安裝 PHP 及擴展..."
# 安裝 Remi 倉庫(支持不同 PHP 版本)
yum install -y yum-utils
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm# 啟用 PHP 7.4 源(可以改成 72 / 80 / 81 等版本)
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php74# 安裝 PHP-FPM 和常用擴展
yum install -y php php-fpm php-mysql php-mbstring php-xml php-gd php-opcache php-cliecho ">>> 啟動并設置 PHP-FPM 開機自啟..."
systemctl start php-fpm
systemctl enable php-fpmecho ">>> 配置 Nginx 支持 PHP..."
cat >/etc/nginx/conf.d/default.conf <<EOF
server {listen       80;server_name  localhost;root   /usr/share/nginx/html;index  index.php index.html index.htm;location / {try_files \$uri \$uri/ =404;}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;}
}
EOFecho ">>> 創建 PHP 測試頁面..."
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.phpecho ">>> 重新加載 Nginx..."
systemctl reload nginx

2. 保存并退出

Esc:wq → 回車。


3. 運行腳本

./lnmp_install.sh

4. 驗證 LNMP 是否成功

方式 1:命令行驗證

curl -I http://localhost

返回 200 OK 表示頁面存在。

方式 2:瀏覽器訪問

用瀏覽器訪問服務器 IP,例如:

http://你的服務器IP

如果看到 PHP 信息頁面(phpinfo),說明 LNMP 完全 OK。

第五步:加上防火墻自動放行端口 + 自動檢測 LNMP 頁面可訪問

1. 編輯腳本

打開你的 lnmp_install.sh

vim lnmp_install.sh

在腳本 最后一部分(Nginx reload 之后) 加上這段代碼:

cho ">>> 配置防火墻,放行 80 和 443 端口..."
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadecho ">>> 檢測 LNMP 是否正常工作..."
sleep 3
if curl -s -I http://localhost | grep -q "200 OK"; thenecho "? LNMP 部署成功!可以訪問 http://你的服務器IP"
elseecho "? LNMP 部署失敗,請檢查 Nginx/PHP/MySQL 日志"
fi

2. 保存退出

Esc:wq → 回車。


3. 再運行一遍腳本(測試自檢功能)

./lnmp_install.sh
  • 它會自動放行 80、443 端口

  • 等 3 秒后用 curl 請求首頁

  • 成功則輸出 ? LNMP 部署成功!


4. 瀏覽器訪問測試

在瀏覽器訪問:

http://你的服務器IP

如果出現 PHP 信息頁面(phpinfo),LNMP 就已經完全跑起來了。

項目名稱:專業 LNMP 一鍵部署自動化腳本
項目描述:
基于 CentOS 7,使用 Shell 腳本實現 Nginx、MariaDB(MySQL 兼容)、PHP 環境的一鍵自動化安裝和配置。
支持參數化輸入 PHP 版本和數據庫密碼,自動檢測并釋放端口沖突,防火墻自動放行 HTTP/HTTPS 端口,實現全流程無人值守部署。

技術棧:
Shell 腳本、CentOS 7、Nginx、MariaDB、PHP-FPM、firewalld、systemctl、自動化運維

項目亮點:

通過參數化設計,支持用戶自定義 PHP 版本及 MySQL 密碼,提高腳本適用性和靈活性

實現端口占用自動檢測和釋放,避免服務啟動沖突,提升部署穩定性

自動配置防火墻放行80/443端口,保證服務外部訪問

部署后自動測試服務狀態,輸出彩色日志,提升運維體驗

項目腳本可在多臺機器快速復用,極大節省環境搭建時間

提升運維自動化能力,適用于開發測試和生產環境部署

收獲與反思:

深入理解 Linux 服務管理與防火墻配置

掌握 Shell 腳本參數處理與流程控制

實踐自動化部署思路,提高了實際動手能力和問題排查能力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94959.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

react之React.cloneElement()

react提供的這個方法克隆組件的方法&#xff0c;可能我們在平常的開發中用的很少&#xff0c;主要可能是我們并不知道或者并不了解這個方法。因為我在之前react的children文章中用到過&#xff0c;所以我就進行了一系列的測試&#xff0c;發現真的非常的好用。我們同樣使用一些…

學習Java的Day27

今天學習的主要內容是在IntelliJ IDEA開發環境中&#xff0c;通過部署Tomcat服務器并連接MySQL數據庫&#xff0c;實現了一個完整的留言板系統。這個項目涵蓋了前后端開發的全流程&#xff0c;具體包括以下關鍵環節&#xff1a;開發環境搭建使用IntelliJ IDEA Ultimate版&#…

【計算機網絡 | 第3篇】物理媒介

文章目錄物理媒介介紹與物理媒體的分類&#x1f95d;成本考量引導型傳輸媒體&#x1f34b;引導型傳輸媒體&#xff1a;雙絞線&#x1f34b;?&#x1f7e9;雙絞線類別雙絞線的發展歷程雙絞線的物理限制引導型傳輸媒體&#xff1a;同軸電纜&#x1f34b;?&#x1f7e9;結構組成…

golang的切片

切片 為什么需要切片 用于元素的個數不確定&#xff0c;所以無法通過數組的形式來進行統計。此時就需要切片 切片&#xff0c;也因此可以粗略地理解為動態數組數組的長度不能用變量來確定&#xff0c;這時候切片slice也就派上用場了 切片地基本介紹 切片的英文是slice切片是數組…

在labview中實現視頻播放

這里分享一個迅雷的視頻播放控件APlayer&#xff0c;非常的好用。具體操作步驟如下&#xff1a; 1.下載控件: 首先下載http://aplayer.open.xunlei.com/codecs.zip&#xff0c;將codecs文件解壓后打開&#xff0c;按快捷鍵contrlA,隨后contrlc復制里面所有的文件&#xff1b;…

ubuntu 22.04 使用yaml文件 修改靜態ip

前提&#xff1a; 啟動服務 sudo systemctl start systemd-networkd 設置開機自啟 sudo systemctl enable systemd-networkd 檢查狀態&#xff08;確保顯示 active (running)&#xff09; sudo systemctl status systemd-networkd 若想停止&#xff1a; 停止當前運行的服務 sud…

閘機控制系統從設計到實現全解析:第 4 篇:Redis 緩存與分布式鎖實現

第 4 篇&#xff1a;Redis 緩存與分布式鎖實現 一、Redis 在系統中的核心作用票證信息緩存&#xff1a;將高頻訪問的票證數據&#xff08;如狀態、有效期&#xff09;緩存至 Redis&#xff0c;減少數據庫查詢&#xff0c;提升驗證響應速度。分布式鎖&#xff1a;在高并發場景下…

北京天津唐山廊坊滄州打撈日記

北京天津唐山廊坊滄州打撈日記 打撈搜蚯蚓疏通 北京&#xff1a;護城河畔的情誼打撈 清晨&#xff0c;北京的護城河在朝陽的映照下泛著微光。我接到一位年輕小伙的電話&#xff0c;聲音中滿是焦急。原來&#xff0c;他與女友在河邊約會時&#xff0c;不小心將女友送他的定情玉佩…

全志刷機工具:PhoenixSuit-全志芯片處理器-刷機工具安裝包及最詳細使用教程指南

全志刷機工具&#xff1a;PhoenixSuit-全志芯片處理器刷機工具安裝包及最詳細使用教程指南&#xff0c;此文章主要是分享機頂盒、電視盒子&#xff0c;全志芯片盒子&#xff08;其中包含全志處理器、全志芯片、全志CPU等等&#xff09;的刷機工具、刷機工具安裝教程以及如何使用…

淺談 VM 橋接模式:讓虛擬機像真實電腦一樣接入網絡

在虛擬化環境中&#xff0c;虛擬機&#xff08;Virtual Machine, VM&#xff09;與外部網絡之間的通信方式有多種&#xff0c;比如 NAT 模式、Host-Only 模式、橋接模式&#xff08;Bridged Networking&#xff09; 等。其中&#xff0c;橋接模式是最接近“真實物理機”網絡行為…

計算機視覺(1)-圖像采集設備選型全景表(工業 + 醫療 + 車載)

圖像采集設備選型全景表&#xff08;工業 醫療 車載&#xff09;一份面向工程師的“場景—設備—協議”速查表1 工業 & 醫療 & 通用場景應用場景主流設備形態接口 / 協議典型性能突出優勢致命短板動態范圍工業檢測AOI / 量測 / 缺陷工業相機 采集卡Camera Link HSCo…

計算機視覺(3)深度學習模型部署平臺技術選型與全棧實踐指南

一、部署平臺概述與分類 深度學習模型部署平臺的分類需兼顧技術特性與應用場景的適配性&#xff0c;基于“技術定位-場景適配”雙維度分類法&#xff0c;可將其劃分為通用開源框架、云廠商服務及專用邊緣工具三大類&#xff0c;各類別在設計目標、核心能力與場景覆蓋上呈現顯著…

Scratch編程:槍戰游戲(附源碼)

&#x1f3ae; 操作說明 W / A / S / D 或 方向鍵&#xff1a;移動 C&#xff1a;滑鏟 空格鍵&#xff1a;取消滑鏟 鼠標點擊&#xff1a;開火 數字鍵 1 / 2 / 3 / 4&#xff1a;切換武器 G&#xff1a;快速使用道具 F&#xff1a;近戰攻擊 Q&#xff1a;瞄準 / 使用技能…

應急響應復現

一、前言&#xff1a;當企業發生黑客入侵、系統崩潰或其它影響業務正常運行的安全事件時&#xff0c;急需第一時間進行處理&#xff0c;使企業的網絡信息系統在最短時間內恢復正常工作&#xff0c;進一步查找入侵來源&#xff0c;還原入侵事故過程&#xff0c;同時給出解決方案…

分布式事務Seata TCC模式篇

介紹 ? 官網: https://seata.apache.org/zh-cn/docs/user/mode/tcc ? 回顧Seata AT 模式基于 支持本地 ACID 事務 的 關系型數據庫&#xff0c;如下&#xff1a; 一階段 prepare 行為&#xff1a;在本地事務中&#xff0c;一并提交業務數據更新和相應回滾日志記錄。二階段 c…

Day37--動態規劃--52. 攜帶研究材料(卡碼網),518. 零錢兌換 II,377. 組合總和 Ⅳ,57. 爬樓梯(卡碼網)

Day37–動態規劃–52. 攜帶研究材料&#xff08;卡碼網&#xff09;&#xff0c;518. 零錢兌換 II&#xff0c;377. 組合總和 Ⅳ&#xff0c;57. 爬樓梯&#xff08;卡碼網&#xff09; 本文全部都是 ” 完全背包 “ 問題&#xff0c;從零到入坑&#xff0c;從入坑到爬出來。 本…

Linux文件操作

Linux文件Linux下的文件類型b 塊設備文件---->存儲類設備&#xff08;硬盤&#xff09;c 字符設備文件--->輸入輸出設備d 目錄文件--->文件夾- 普通文件--> xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.outl 軟鏈接文件-->快捷方式s 套接字文件-->網絡通信p 管道…

Linux epoll 觸發模式詳解:LT vs ET

兩種核心觸發模式 1. 水平觸發 (Level-Triggered, LT) 工作方式: 當文件描述符處于就緒狀態時,epoll 會持續通知 只要狀態未改變,每次調用 epoll_wait 都會返回該描述符 特點: c // 內核處理邏輯 (ep_send_events_proc) if (!(epi->event.events & EPOLLET)) { /…

STM32學習筆記6-TIM-2輸出比較功能

第二部分&#xff0c;定時器的輸出比較功能OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形每個高級定時器和通用定時器都擁有4…

MATLAB核心技巧:從入門到精通

一 1.數值 顯示 格式 format style 設置 eg: pi format longE; or 2.清除指令 clc 清除命令行窗口 clear 清除工作區 cls 3.搜索路徑設置 path(path,E:\ads\) or addpath 4.M文件 用戶把要實現的命令寫在一個以.m為擴展的文件中&#xff0c;然后由matlab系統進行解讀…