全部產品
Search
文件中心

Elastic Compute Service:部署LNMP環境(Ubuntu)

更新時間:Sep 11, 2024

LNMP是目前主流的網站伺服器架構之一,適合運行大型和高並發的網站應用程式,例如電子商務網站、社交網路、內容管理系統等。LNMP分別代表Linux、Nginx、MySQL和PHP。本文介紹如何在Ubuntu 22/20作業系統的ECS執行個體上搭建LNMP環境。

前提條件

手動部署LNMP環境時,已有ECS執行個體必須滿足以下條件:

  • 執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。

  • 作業系統必須為Ubuntu 22.04、Ubuntu 20.04。

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

    重要

    基於伺服器資料安全考慮,本文僅說明部署與測試LNMP環境所必須允許存取的連接埠,您可以根據實際需求,允許存取其他應用所需的連接埠號碼。例如,遠端連線MySQL資料庫時,需要允許存取MySQL預設佔用的3306連接埠。

步驟一:關閉防火牆

重要

為避免因使用管理員權限不當造成不可預期的風險,建議您使用普通使用者操作。如果普通使用者沒有sudo許可權,具體操作,請參見如何為普通使用者添加sudo許可權

  1. 遠端連線需要部署LNMP環境的ECS執行個體。

    具體操作,請參見ECS遠端連線方式概述

  2. 關閉系統內部防火牆。

    1. 運行以下命令,檢查防火牆目前狀態。

      sudo ufw status
      • 如果防火牆狀態為Status: inactive,則表示防火牆為關閉狀態。

      • 如果防火牆狀態為Status: active,則表示防火牆為開啟狀態。

    2. 可選:關閉防火牆。

      如果您的防火牆為開啟狀態,需要運行以下命令,關閉防火牆並關閉開機自啟動防火牆。

      sudo ufw disable
      說明

      如果您想重新開啟防火牆並開啟開機自啟動防火牆,請運行sudo ufw enable命令。

步驟二:安裝Nginx

  1. 運行以下命令,更新Ubuntu系統內的軟體包。

    sudo apt update
  2. 運行以下命令,安裝Nginx。

    sudo apt -y install nginx
  3. 運行以下命令,查看Nginx版本。

    nginx -v

    返回結果類似如下所示,表示Nginx已成功安裝。

    nginx version: nginx/1.18.0 (Ubuntu)

步驟三:安裝並配置MySQL

  1. 安裝MySQL。

    1. 運行以下命令,安裝MySQL。

      sudo apt -y install mysql-server
    2. 運行以下命令,查看MySQL版本。

      mysql -V

      返回結果類似如下所示,表示MySQL已成功安裝。

      mysql  Ver 8.0.36-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
  2. 配置MySQL。

    1. 運行以下命令,進入MySQL。

      sudo mysql
    2. 運行以下命令,設定root使用者密碼。

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';

      本樣本中密碼以Mysql@1234為例,樣本命令:

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Mysql@1234';
    3. 運行以下命令,退出MySQL資料庫。

      exit;
    4. 運行以下命令,對MySQL進行安全性配置。

      sudo mysql_secure_installation
    5. 根據命令列提示,依次完成以下配置項。

      1. 輸入root使用者的密碼。本樣本中輸入Mysql@1234

        root@iZbp19jsi7s0g7m4zgc****:~# sudo mysql_secure_installation
        
        Securing the MySQL server deployment.
        
        Enter password for user root: 
        說明

        在輸入密碼時,系統為了最大限度地保證資料安全,命令列將不做任何回顯。您只需要輸入正確的密碼資訊,然後按Enter鍵即可。

      2. 輸入Y,設定密碼驗證策略。

        VALIDATE PASSWORD COMPONENT can be used to test passwords
        and improve security. It checks the strength of password
        and allows the users to set only those passwords which are
        secure enough. Would you like to setup VALIDATE PASSWORD component?
        
        Press y|Y for Yes, any other key for No: Y
      3. 根據提示,選擇密碼驗證策略。

        本樣本輸入2

        Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
      4. 輸入Y,更改root使用者密碼。

        Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y
      5. 輸入root使用者密碼。

        New password:
        
        Re-enter new password:
        
        Estimated strength of the password: 100
      6. 輸入Y,確認使用已設定的密碼。

        Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
      7. 輸入Y刪除MySQL內建的匿名使用者。

        By default, a MySQL installation has an anonymous user,
        allowing anyone to log into MySQL without having to have
        a user account created for them. This is intended only for
        testing, and to make the installation go a bit smoother.
        You should remove them before moving into a production
        environment.
        
        Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
      8. 輸入Y,禁止MySQL的root使用者的遠程登入許可權。

        Normally, root should only be allowed to connect from
        'localhost'. This ensures that someone cannot guess at
        the root password from the network.
        
        Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
      9. 輸入Y,移除test資料庫。

        By default, MySQL comes with a database named 'test' that
        anyone can access. This is also intended only for testing,
        and should be removed before moving into a production
        environment.
        
        
        Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 
      10. 輸入Y,重新載入授權表。

        Reloading the privilege tables will ensure that all changes
        made so far will take effect immediately.
        
        Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

        當命令列回顯All done!時,表示配置完成。

  3. 測試登入MySQL資料庫。

    1. 運行以下命令,登入MySQL資料庫。

      sudo mysql -uroot -p
    2. 在命令列回顯的Enter password:後輸入已設定的資料庫密碼。

      說明

      在輸入密碼時,系統為了最大限度地保證資料安全,命令列將不做任何回顯。您只需要輸入正確的密碼資訊,然後按Enter鍵即可。

      成功登入MySQL資料庫後,命令列資訊如下所示。

      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 11
      Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
      
      Copyright (c) 2000, 2024, Oracle and/or its affiliates.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
      mysql>
    3. 運行以下命令,退出MySQL資料庫。

      exit;

步驟四:安裝並配置PHP

  1. 安裝PHP。

    1. 運行以下命令,安裝PHP。

      sudo apt -y install php-fpm
    2. 運行以下命令,查看PHP版本。

      php -v

      返回結果如下所示,表示PHP已成功安裝。

      Ubuntu 22.04

      PHP 8.1.2-1ubuntu2.17 (cli) (built: May  1 2024 10:10:07) (NTS)
      Copyright (c) The PHP Group
      Zend Engine v4.1.2, Copyright (c) Zend Technologies
          with Zend OPcache v8.1.2-1ubuntu2.17, Copyright (c), by Zend Technologie

      Ubuntu 20.04

      PHP 7.4.3-4ubuntu2.22 (cli) (built: May  1 2024 10:11:33) ( NTS )
      Copyright (c) The PHP Group
      Zend Engine v3.4.0, Copyright (c) Zend Technologies
          with Zend OPcache v7.4.3-4ubuntu2.22, Copyright (c), by Zend Technologies
  2. 修改Nginx設定檔以支援PHP。

    1. 運行以下命令,開啟Nginx預設的設定檔。

      sudo vim /etc/nginx/sites-enabled/default
    2. i進入編輯模式,修改Nginx設定檔。

      1. server{}內,找到index開頭的配置行,在該行中添加index.phpnginx-indexphp

      2. server{}內找到location ~ \.php$ {},去除以下配置行的注釋符號。

        Ubuntu 22.04

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        }

        image

        Ubuntu 20.04

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

        nginx-php

    3. Esc退出編輯模式,然後輸入:wq並按Enter鍵,儲存並退出檔案。

    4. 運行以下命令,重啟Nginx服務。

      sudo systemctl restart nginx.service
  3. 配置PHP。

    1. 運行以下命令,在Nginx網站根目錄中,建立phpinfo.php檔案。

      sudo vim <網站根目錄>/phpinfo.php

      <網站根目錄>為變數,可通過Nginx設定檔查看。本教程中Nginx設定檔為預設檔案/etc/nginx/sites-enabled/default,您可以運行cat /etc/nginx/sites-enabled/default命令查看檔案內容,其中如下圖所示的/var/www/html部分即為網站根目錄。網站根目錄因此,對應的運行命令為:

      sudo vim /var/www/html/phpinfo.php
    2. i進入編輯模式,添加以下配置資訊。

      phpinfo()函數會展示PHP的所有配置資訊。

      <?php echo phpinfo(); ?>
    3. Esc退出編輯模式,然後輸入:wq並按Enter鍵,儲存並退出檔案。

    4. 運行以下命令,啟動PHP。

      Ubuntu 22.04

      sudo systemctl start php8.1-fpm

      Ubuntu 20.04

      sudo systemctl start php7.4-fpm

步驟八:測試訪問PHP配置資訊頁面

  1. 在本地Windows主機或其他具有公網訪問能力的Windows主機中,開啟瀏覽器。

  2. 在瀏覽器的地址欄輸入http://<ECS執行個體公網IP地址>/phpinfo.php進行訪問。

    訪問結果如下圖所示,成功查看到PHP配置資訊頁面,表示LNMP環境部署成功。

    Ubuntu 22.04

    image

    Ubuntu 20.04

    php頁面

後續步驟

成功搭建LNMP環境後,建議您刪除phpinfo.php測試檔案,消除資料泄露風險。

sudo rm -rf <網站根目錄>/phpinfo.php

本教程中網站根目錄為/var/www/html,則需要運行以下命令刪除測試檔案。

sudo rm -rf /var/www/html/phpinfo.php

相關文檔

如果您想在Alibaba Cloud Linux 3/2、CentOS 7/8系統的ECS執行個體中部署LNMP環境,請參見手動部署LNMP環境(Alibaba Cloud Linux 3/2、CentOS 7/8)