全部產品
Search
文件中心

Elastic Compute Service:手動部署LNMP環境

更新時間:Feb 14, 2025

本文介紹如何在ECS執行個體上手動部署LNMP環境。

前提條件

  • 執行個體已指派固定公網IP地址或綁定Elastic IP Address(EIP)。如您不清楚如何開通公網,請參見開通公網

  • ECS執行個體的安全性群組入方向規則已允許存取22、80連接埠。具體操作,請參見添加安全性群組規則

  • ECS執行個體記憶體大於等於4 GiB。

說明

本教程手動部署LNMP環境支援一鍵運行完成環境安裝,您可以直接運行代碼。 一鍵運行

部署LNMP環境

Alibaba Cloud Linux 3/CentOS 8

重要

CentOS 8的源地址http://mirror.centos.org/centos/8/內容已移除,當您在阿里雲上繼續使用預設配置的CentOS 8的源會發生報錯。具體操作,請參見CentOS 8 EOL如何切換源?

  1. 使用Nginx官方源安裝Nginx。

    說明

    預設安裝最新穩定版本Nginx,如果對版本有要求可以使用sudo dnf search nginx --showduplicates搜尋支援的Nginx版本並將安裝命令替換為具體版本(例:安裝1.24.0版本,修改命令為sudo dnf -y install nginx-1.24.0)。

    #添加Nginx官方源到系統中
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    #安裝Nginx
    sudo dnf -y install nginx
    #啟動Nginx服務並設定為開機自啟
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. 安裝MySQL資料庫。

    說明

    Alibaba Cloud Linux 3您需要安裝compat-openssl10與舊版本OpenSSL庫相容。

    sudo yum install -y compat-openssl10
    #添加MySQL官方源
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
    #安裝MySQL服務
    sudo dnf install -y mysql-server
    #啟動MySQL服務並設定開機自啟
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. 查看root使用者預設初始密碼。

      • 如果是Alibaba Cloud Linux 3執行。

        echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
      • 如果是CentOS 8安裝後預設無密碼。

    2. 為MySQL服務root使用者佈建密碼,您需要將命令中<oldpwd>替換為初始密碼,<newpwd>替換為您的新密碼(如果是CentOS 8<oldpwd>替換為空白,命令提示輸入密碼輸入斷行符號跳過)。

      重要

      密碼原則要求密碼至少包含一個大寫字母、一個小寫字母、一個數字和一個特殊字元,並且密碼總長度至少為 8 個字元。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. 安裝PHP。

    說明

    本文預設使用了PHP8.4,如果對版本有要求需要將模組名稱修改成對應版本(例:安裝PHP8.1需要將模組名稱修改為php:remi-8.1)。

    #設定remi源並啟用php:remi-8.4
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-8.rpm  --nodeps
    sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4
    #安裝PHP、PHP進程管理器、MySQL擴充模組
    sudo dnf install -y php php-fpm php-mysqlnd
    #啟動PHP進程管理器服務並設定開機自啟
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. 驗證LNMP環境。

    1. 查詢php-fpm設定檔預設監聽地址。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • 如果返回sock檔案地址說明預設監聽sock檔案。

      • 如果返回127.0.0.1:9000說明預設監聽本地9000連接埠。

    2. 使用tee命令編輯/etc/nginx/conf.d/default.conf檔案添加PHP轉寄規則。

      重要

      如果php-fpm監聽地址為127.0.0.1:9000需要修改規則fastcgi_pass欄位為127.0.0.1:9000

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
          index index.php index.html index.htm;
          }
          location ~ .php$ {
              root /usr/share/nginx/html;
              fastcgi_pass unix:/run/php-fpm/www.sock;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重啟Nginx服務使修改後的設定檔生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路徑/usr/share/nginx/html下建立test.php 的 PHP 檔案,並添加用於測試資料庫連接的代碼。(<username>替換為資料庫使用者名稱,<password>替換為資料庫密碼)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理機上使用瀏覽器訪問http://ECS執行個體公網IP/test.php,返回success說明PHP代理設定成功並成功串連MySQL資料庫。

Alibaba Cloud Linux 2/CentOS 7

  1. 使用Nginx官方源安裝Nginx。

    說明

    預設安裝最新穩定版本Nginx,如果對版本有要求可以使用sudo yum search nginx --showduplicates搜尋支援的Nginx版本並將安裝命令替換為具體版本(例:安裝1.24.0版本,修改命令為sudo yum -y install nginx-1.24.0)。

    #添加Nginx官方源到系統中
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    #安裝Nginx
    sudo yum -y install nginx
    #啟動Nginx服務並設定為開機自啟
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. 安裝MySQL資料庫。

    #添加MySQL官方源
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
    #安裝MySQL服務
    sudo yum install -y mysql-server
    #啟動MySQL服務並設定開機自啟
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. 查看root使用者預設初始密碼。

      echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
    2. 為MySQL服務root使用者佈建密碼,您需要將命令中<oldpwd>替換為初始密碼,<newpwd>替換為您的新密碼。

      重要

      密碼原則要求密碼至少包含一個大寫字母、一個小寫字母、一個數字和一個特殊字元,並且密碼總長度至少為 8 個字元。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. 安裝PHP。

    #設定remi源並啟用remi-php83
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-7.rpm  --nodeps
    sudo yum install -y yum-utils && sudo yum-config-manager --enable   remi-php83
    #安裝PHP、PHP進程管理器、MySQL擴充模組
    sudo yum install -y php php-fpm php-mysqlnd
    #啟動PHP進程管理器服務並設定開機自啟
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. 驗證LNMP環境。

    1. 查詢php-fpm設定檔預設監聽地址。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • 如果返回sock檔案地址說明預設監聽sock檔案。

      • 如果返回127.0.0.1:9000說明預設監聽本地9000連接埠。

    2. 使用tee命令編輯/etc/nginx/conf.d/default.conf檔案添加PHP轉寄規則。

      重要

      如果php-fpm監聽地址為sock檔案地址,需要修改規則127.0.0.1:9000unix:<path>,<path>需要替換為您的sock檔案地址。

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass 127.0.0.1:9000;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重啟Nginx服務使修改後的設定檔生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路徑/usr/share/nginx/html下建立test.php 的 PHP 檔案,並添加用於測試資料庫連接的代碼。(<username>替換為資料庫使用者名稱,<password>替換為資料庫密碼)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理機上使用瀏覽器訪問http://ECS執行個體公網IP/test.php,返回success說明PHP代理設定成功並成功串連MySQL資料庫。

Ubuntu20.04及以上

  1. 使用Nginx官方源安裝Nginx。

    #更新系統已安裝軟體並更新包管理工具
    sudo apt update -y
    #Nginx安裝前必要環境
    sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
    #匯入官方Nginx簽名密鑰
    curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    #設定apt倉庫
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    #安裝nginx
    sudo apt install -y nginx
  2. 更新軟體包列表並安裝MySQL伺服器。

    sudo apt update -y && sudo apt install -y mysql-server
  3. 修改MySQL伺服器root使用者的密碼和身份認證外掛程式。您需要將命令中<newpwd>替換為您的密碼。

    重要

    由於本地root使用者的預設身份認證外掛程式是auth_socket,命令執行後提示輸入密碼,請直接按斷行符號跳過。

    sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "FLUSH PRIVILEGES;"
  4. 安裝PHP。

    說明

    您可以通過sudo apt search php查看所有支援安裝的PHP版本,安裝其他版本需要修改命令中對應版本號碼(例如:安裝PHP8.1需修改命令sudo apt install -y php8.1 php8.1-fpm php8.1-mysql)。

    #安裝software-properties-common包,並添加PPA倉庫ppa:ondrej/php
    sudo apt update && sudo apt install -y software-properties-common && sudo add-apt-repository -y ppa:ondrej/php
    #安裝PHP 8.4及相關組件,包括FPM和MySQL擴充
    sudo apt install -y php8.4 php8.4-fpm php8.4-mysql
  5. 驗證LNMP環境。

    1. 查詢php-fpm設定檔預設監聽地址,<version>需要替換為您的PHP版本(例:PHP 8.4需要將<version>替換為8.4)。

      sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
      • 如果返回sock檔案地址說明預設監聽sock檔案。

      • 如果返回127.0.0.1:9000說明預設監聽本地9000連接埠。

    2. 使用tee命令編輯/etc/nginx/conf.d/default.conf檔案添加PHP轉寄規則,<listen>需要替換為您的監聽地址(如果是sock檔案需要在地址前方增加unix:)。

      重要

      如果監聽的sock檔案,需要sock檔案的使用權限設定為允許讀寫,您可以使用以下命令來更改許可權sudo chmod 666 <path>,<path>更改為您的sock檔案地址。

      #移除預設網站配置
      sudo rm -f /etc/nginx/sites-enabled/*
      #寫入設定檔
      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass <listen>;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重啟Nginx服務使修改後的設定檔生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路徑/usr/share/nginx/html下建立test.php 的 PHP 檔案,並添加用於測試資料庫連接的代碼。(<username>替換為資料庫使用者名稱,<password>替換為資料庫密碼)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理機上使用瀏覽器訪問http://ECS執行個體公網IP/test.php,返回success說明PHP代理設定成功並成功串連MySQL資料庫。

常見問題

無法通過公網IP訪問test.php頁面

可能原因及其解決方案:

安全性群組未放開80連接埠、系統防火牆開啟、80連接埠被佔用。

具體排查方法,請參見無法訪問ECS執行個體中的服務的排查方法

如何設定MySQL遠端存取

建立非root使用者遠程登入MySQL的帳號,並允許遠程主機使用該帳號訪問MySQL。具體操作,請參見遠端存取MySQL資料庫

Nginx設定檔、記錄檔在什麼位置

  • Nginx的記錄檔預設存放在/var/log/nginx/

  • Nginx的主設定檔預設/etc/nginx/nginx.conf

  • Nginx預設讀取/etc/nginx/conf.d目錄下所有以.conf為尾碼的附加設定檔。