首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

CentOS 7.2 搭建 LNMP 環境全自動化腳本級教程(Nginx + MySQL + PHP 7 + phpMyAdmin)

     編輯:PHP 綜合知識

一鍵部署腳本(生產環境建議逐步執行驗證)

#!/bin/bash
set -e

# 1. 系統更新與基礎工具
yum update -y
yum install -y wget curl vim net-tools unzip zip git

# 2. Nginx 官方源安裝
rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
systemctl enable nginx && systemctl start nginx

# 3. MySQL 官方源安裝
wget https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server
systemctl enable mysqld && systemctl start mysqld

# 4. 獲取 MySQL 臨時 root 密碼並修改
TEMP_PWD=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
NEW_PWD='YourStrongP@ssw0rd!'
mysql -uroot -p"$TEMP_PWD" --connect-expired-password -e "
    ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_PWD';
    UNINSTALL COMPONENT 'file://component_validate_password';
    CREATE USER 'admin'@'%' IDENTIFIED BY '$NEW_PWD';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
"

# 5. PHP 7.4 (Remi 源)
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php74
yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-json php-opcache php-pdo php-pecl-redis php-pecl-mcrypt

# 6. PHP-FPM 配置
sed -i 's/user = apache/user = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/group = apache/group = nginx/' /etc/php-fpm.d/www.conf
sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/' /etc/php.ini
systemctl enable php-fpm && systemctl start php-fpm

# 7. Nginx 虛擬主機配置
cat > /etc/nginx/conf.d/default.conf <<'EOF'
server {
    listen 80;
    server_name _;
    root /var/www/html;
    index index.php index.html;

    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;
    }

    location ~ /\.ht { deny all; }
}
EOF
nginx -t && systemctl reload nginx

# 8. phpMyAdmin
cd /var/www/html
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
unzip phpMyAdmin-5.2.1-all-languages.zip
mv phpMyAdmin-5.2.1-all-languages phpmyadmin
chown -R nginx:nginx /var/www/html/phpmyadmin
chmod -R 755 /var/www/html/phpmyadmin

# Session 目錄權限
chown -R nginx:nginx /var/lib/php/session

echo "=== LNMP 安裝完成 ==="
echo "Nginx: https://$(hostname -I | awk '{print $1}')"
echo "phpMyAdmin: https://$(hostname -I | awk '{print $1}')/phpmyadmin"
echo "MySQL root 密碼: $NEW_PWD"

關鍵配置驗證清單

組件驗證命令預期結果
Nginxcurl -I https://localhostHTTP/1.1 200 OK
PHP-FPMphp -vPHP 7.4.x (cli)
MySQLmysql -uadmin -p -e "SELECT VERSION()"8.0.x
PHP-MySQLphp -r "new PDO('mysql:host=127.0.0.1', 'admin', 'pwd'); echo 'OK';"OK
phpMyAdmincurl -I https://localhost/phpmyadmin200 OK

安全加固建議

  • 修改 SSH 端口,禁用 root 登錄,啟用金鑰認證。
  • Firewall: firewall-cmd --permanent --add-service={http,https} --add-port=3306/tcp(MySQL 僅內網開放)。
  • Nginx 隱藏版本號:server_tokens off;。
  • PHP 禁用危險函數:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source。
  • 定期備份:mysqldump --single-transaction --routines --triggers -uadmin -p db > backup.sql。

常見問題排查

# Nginx 502 Bad Gateway
systemctl status php-fpm          # 確認 php-fpm 運行
netstat -tlnp | grep :9000        # 確認 9000 端口監聽
tail -f /var/log/nginx/error.log  # 查看具體錯誤

# MySQL 連不上
systemctl status mysqld
cat /var/log/mysqld.log
# 檢查 bind-address = 0.0.0.0 (在 /etc/my.cnf)

# phpMyAdmin 登錄 2002/2003 錯誤
# config.inc.php 中 $cfg['Servers'][$i]['host'] = '127.0.0.1'; (不要用 localhost)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved