在開始自動化部署前,需確保服務器滿足基礎環境要求:
root
用戶或具有sudo
權限的賬戶操作;wget
、vim
、gcc
、make
等編譯工具(部分腳本會自動處理)。Shell腳本是CentOS下最常用的自動化部署方式,通過編寫腳本自動完成依賴安裝→組件下載→配置修改→服務啟動全流程。以下是具體步驟:
創建腳本文件(如lnmp_deploy.sh
),內容涵蓋:
yum
倉庫自動下載并安裝Nginx、MariaDB、PHP;default.conf
)、優化PHP-FPM參數;mysql_secure_installation
設置數據庫root密碼、移除匿名用戶;#!/bin/bash
# LNMP自動化部署腳本(基礎版)
set -e # 遇到錯誤立即退出
# 1. 更新系統并安裝依賴
echo "正在更新系統并安裝依賴..."
yum update -y && yum install -y epel-release wget vim gcc make pcre-devel openssl-devel libxml2-devel libjpeg-devel libpng-devel freetype-devel zlib-devel mariadb-server mariadb php php-fpm php-mysql php-mbstring php-xml php-gd php-opcache -y
# 2. 安裝Nginx
echo "正在安裝Nginx..."
yum install -y nginx
systemctl enable nginx --now
# 3. 安裝MariaDB(MySQL兼容)
echo "正在安裝MariaDB..."
systemctl enable mariadb --now
# 自動執行安全配置(自動輸入密碼)
DB_ROOT_PASS="your_password" # 替換為你的數據庫密碼
mysql_secure_installation <<EOF
y
$DB_ROOT_PASS
$DB_ROOT_PASS
y
y
y
y
EOF
# 4. 安裝PHP及擴展
echo "正在安裝PHP及擴展..."
yum install -y php php-fpm php-mysql php-mbstring php-xml php-gd php-opcache -y
systemctl enable php-fpm --now
# 5. 配置Nginx支持PHP
echo "正在配置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;
}
}
EOF
# 6. 創建PHP測試頁
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/index.php
# 7. 重啟服務并驗證
systemctl restart nginx php-fpm
echo "LNMP部署完成!請訪問 http://服務器IP 查看PHP信息頁。"
若不想手動編寫腳本,可使用社區提供的開源LNMP部署腳本,這些腳本已集成常見功能(如交互式選擇、錯誤處理、卸載/重置),更穩定可靠:
lnmp
(Nginx+MySQL+PHP)、lnmpa
(Nginx+Apache+MySQL+PHP)等模式選擇。wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp
curl -O https://github.com/fire-dog/shell-fire/blob/main/lnmp_install_auto.sh
chmod +x lnmp_install_auto.sh
bash lnmp_install_auto.sh # 無人值守安裝
bash lnmp_install_auto.sh --uninstall # 卸載
bash lnmp_install_auto.sh --reset # 重置
config.sh
文件中,通過source config.sh
引入腳本,提高靈活性;set -e
讓腳本在遇到錯誤時立即退出,避免繼續執行導致更嚴重的問題;./lnmp_deploy.sh > lnmp_deploy.log 2>&1
),便于后續排查問題;若需要批量部署(如多臺服務器),可使用Ansible(基于SSH的自動化運維工具),無需在被管理節點安裝客戶端,通過Playbook定義部署流程。
yum install -y ansible
),配置SSH免密登錄(被管理節點);lnmp.yml
)Playbook使用YAML格式,定義任務(tasks)(如安裝組件、配置文件、啟動服務):
---
- name: Deploy LNMP on CentOS 7
hosts: webservers # 被管理節點組(需在inventory文件中定義)
become: yes # 以root權限執行
tasks:
# 1. 更新系統
- name: Update system
yum:
name: "*"
state: latest
update_cache: yes
# 2. 安裝依賴
- name: Install dependencies
yum:
name:
- epel-release
- wget
- gcc
- make
- pcre-devel
- openssl-devel
- mariadb-server
- mariadb
- php
- php-fpm
- php-mysql
- php-mbstring
- php-xml
- php-gd
- php-opcache
state: present
# 3. 啟動MariaDB并設置開機自啟
- name: Start and enable MariaDB
service:
name: mariadb
state: started
enabled: yes
# 4. 執行MariaDB安全配置
- name: Secure MariaDB installation
command: >
mysql_secure_installation <<EOF
y
your_password
your_password
y
y
y
y
EOF
args:
stdin: yes
# 5. 啟動PHP-FPM并設置開機自啟
- name: Start and enable PHP-FPM
service:
name: php-fpm
state: started
enabled: yes
# 6. 配置Nginx支持PHP
- name: Configure Nginx for PHP
copy:
dest: /etc/nginx/conf.d/default.conf
content: |
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;
}
}
# 7. 創建PHP測試頁
- name: Create PHP test page
copy:
dest: /usr/share/nginx/html/index.php
content: "<?php phpinfo(); ?>"
# 8. 重啟Nginx
- name: Restart Nginx
service:
name: nginx
state: restarted
hosts
):指定被管理節點的IP地址。[webservers]
192.168.1.100
192.168.1.101
ansible-playbook -i hosts lnmp.yml
Ansible會自動連接到所有被管理節點,依次執行Playbook中的任務,實現批量自動化部署。
/etc
、/var/www
),避免腳本誤操作導致數據丟失;vault
(Ansible)或環境變量加密密碼;