溫馨提示×

centos lnmp如何實現自動化部署

小樊
40
2025-10-22 03:22:28
欄目: 智能運維

一、自動化部署前的準備工作

在開始自動化部署前,需確保服務器滿足基礎環境要求:

  • 系統要求:CentOS 7/8及以上(或其他兼容的Linux發行版,如openEuler);
  • 網絡要求:服務器可通過SSH訪問,具備外網權限(用于下載安裝包);
  • 權限要求:使用root用戶或具有sudo權限的賬戶操作;
  • 基礎工具:提前安裝wget、vim、gcc、make等編譯工具(部分腳本會自動處理)。

二、使用Shell腳本實現自動化部署(手動編寫/使用開源腳本)

Shell腳本是CentOS下最常用的自動化部署方式,通過編寫腳本自動完成依賴安裝→組件下載→配置修改→服務啟動全流程。以下是具體步驟:

1. 編寫基礎Shell腳本(以LNMP 1.4為例)

創建腳本文件(如lnmp_deploy.sh),內容涵蓋:

  • 依賴安裝:安裝Nginx、MariaDB、PHP及常用擴展所需的依賴包;
  • 組件安裝:通過yum倉庫自動下載并安裝Nginx、MariaDB、PHP;
  • 配置修改:自動配置Nginx支持PHP(修改default.conf)、優化PHP-FPM參數;
  • 服務管理:啟動Nginx、MariaDB、PHP-FPM服務,并設置開機自啟;
  • 安全配置:自動執行mysql_secure_installation設置數據庫root密碼、移除匿名用戶;
  • 防火墻放行:自動開放HTTP(80)、HTTPS(443)端口。
#!/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信息頁。"

2. 使用開源LNMP部署腳本(推薦)

若不想手動編寫腳本,可使用社區提供的開源LNMP部署腳本,這些腳本已集成常見功能(如交互式選擇、錯誤處理、卸載/重置),更穩定可靠:

  • LNMP 1.4官方腳本:支持CentOS 6/7/8,自動檢測系統環境,提供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
    
  • openEuler專用腳本:適配openEuler 24.03 Minimal系統,支持無人值守安裝(自動輸入參數)、卸載(–uninstall)、**重置(–reset)**功能,集成Nginx 1.24、PHP 8.3、MariaDB 10.6等組件。
    使用方法:
    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  # 重置
    

3. 腳本優化技巧

  • 參數化配置:將數據庫密碼、PHP版本、網站目錄等參數提取到config.sh文件中,通過source config.sh引入腳本,提高靈活性;
  • 錯誤處理:使用set -e讓腳本在遇到錯誤時立即退出,避免繼續執行導致更嚴重的問題;
  • 日志記錄:將腳本輸出重定向到日志文件(如./lnmp_deploy.sh > lnmp_deploy.log 2>&1),便于后續排查問題;
  • 端口檢測:在安裝前自動檢測80、443、3306等端口是否被占用,若占用則提示用戶并退出。

三、使用Ansible Playbook實現自動化部署(適合大規模集群)

若需要批量部署(如多臺服務器),可使用Ansible(基于SSH的自動化運維工具),無需在被管理節點安裝客戶端,通過Playbook定義部署流程。

1. 準備Ansible環境

  • 管理節點(部署服務器):安裝Ansible(yum install -y ansible),配置SSH免密登錄(被管理節點);
  • 被管理節點(目標服務器):確??赏ㄟ^SSH訪問,具備root權限。

2. 編寫Ansible Playbook(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

3. 執行Playbook

  • 定義inventory文件hosts):指定被管理節點的IP地址。
    [webservers]
    192.168.1.100
    192.168.1.101
    
  • 運行Playbook
    ansible-playbook -i hosts lnmp.yml
    

Ansible會自動連接到所有被管理節點,依次執行Playbook中的任務,實現批量自動化部署。

四、自動化部署的注意事項

  • 測試環境驗證:正式部署前,先在測試環境運行腳本,確保腳本兼容性(如CentOS版本、組件版本);
  • 備份重要數據:部署前備份服務器上的重要數據(如/etc、/var/www),避免腳本誤操作導致數據丟失;
  • 密碼安全管理:避免在腳本中明文寫入數據庫密碼,可使用vault(Ansible)或環境變量加密密碼;
  • 日志監控:部署過程中記錄詳細日志,便于后續排查問題(如組件安裝失敗、服務無法啟動);
  • 版本兼容性:確保Nginx、MariaDB、PHP版本兼容(如PHP 8.3需匹配MariaDB 10.6及以上)。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女