如何在Ubuntu 20.04 Server / Desktop上安裝LEMP Stack

本教程將向您展示如何在Ubuntu 20.04上安裝LEMP堆棧(Nginx,MariaDB和PHP7.4)。 軟件堆棧是捆綁在一起的一組軟件工具。 LEMP代表Linux,Nginx(Engine-X),MariaDB / MySQL和PHP,所有這些都是開源的,可以免費使用。 它是為動態網站和Web應用程序提供動力的最常見的軟件堆棧。 Linux是操作系統。 Nginx是Web服務器; MariaDB / MySQL是數據庫服務器,PHP是負責生成動態網頁的服務器端腳本語言。

先決條件

要遵循本教程,您需要在本地計算機或遠程服務器上運行的Ubuntu 20.04 OS。

如果您正在尋找VPS(虛擬專用服務器),則可以通過此特殊鏈接在DigitalOcean註冊帳戶,以獲得$ 50的免費信用。 (僅適用於新用戶)。 如果您已經是DigitalOcean用戶,則可以通過此特殊鏈接在Vultr上註冊帳戶,以獲得$ 50的免費信用(僅限新用戶)。

而且,如果您需要使用域名設置LEMP堆棧,我建議您從NameCheap購買域名,因為價格低廉,而且終身免費提供Whois隱私保護。

步驟1:更新軟件包

在安裝LEMP堆棧之前,最好在Ubuntu 20.04 OS上運行以下命令來更新存儲庫和軟件包。

sudo apt update

sudo apt upgrade

步驟2:安裝Nginx Web服務器

Nginx是一種高性能的Web服務器,如今非常流行。 它也可以用作反向代理和緩存服務器。 輸入以下命令以安裝Nginx Web服務器。

sudo apt install nginx

安裝完成後,我們可以通過運行以下命令使Nginx在啟動時自動啟動。

sudo systemctl enable nginx

然後使用以下命令啟動Nginx:

sudo systemctl start nginx

現在查看其狀態。

sudo systemctl status nginx

輸出:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:11:43 UTC; 3s ago
       Docs: man:nginx(8)
    Process: 8533 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 8545 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 8549 (nginx)
      Tasks: 3 (limit: 9451)
     Memory: 3.9M
     CGroup: /system.slice/nginx.service
             ├─8549 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─8550 nginx: worker process
             └─8551 nginx: worker process

已啟用”表示已啟用引導時自動啟動,並且我們可以看到Nginx正在運行。 您還可以從輸出中看到Nginx使用了多少RAM。 如果上面的命令在運行後沒有立即退出。 您需要按“q使其退出。

檢查Nginx版本。

nginx -v

輸出:

nginx version: nginx/1.17.9 (Ubuntu)

現在,在瀏覽器地址欄中輸入您的Ubuntu 20.04服務器的公共IP地址。 您應該看到“歡迎使用Nginx”網頁,這意味着Nginx Web服務器正在正常運行。 如果要在本地Ubuntu 20.04計算機上安裝LEMP,請鍵入 127.0.0.1 要麼 localhost 在瀏覽器地址欄中。

如果連接被拒絕或無法完成,則可能有防火牆阻止了向TCP端口80的傳入請求。如果使用iptables防火牆,則需要運行以下命令來打開TCP端口80。

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

如果使用的是UFW防火牆,請運行此命令打開TCP端口80。

sudo ufw allow http

最後,我們需要 www-data (Nginx用戶)作為Web目錄的所有者。 默認情況下,它由root用戶擁有。

sudo chown www-data:www-data /usr/share/nginx/html -R

步驟3:安裝MariaDB數據庫服務器

MariaDB是MySQL的直接替代品。 它是由MySQL團隊的前成員開發的,他們擔心Oracle可能會將MySQL變成開源產品。 輸入以下命令以在Ubuntu 20.04上安裝MariaDB。

sudo apt install mariadb-server mariadb-client

安裝後,MariaDB服務器應自動啟動。 使用 系統控制 檢查其狀態。

systemctl status mariadb

輸出:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

如果它沒有運行,請使用以下命令啟動它:

sudo systemctl start mariadb

要使MariaDB在啟動時自動啟動,請運行

sudo systemctl enable mariadb

現在運行安裝後安全腳本。

sudo mysql_secure_installation

當要求您輸入MariaDB根密碼時,請按Enter鍵,因為尚未設置根密碼。 然後輸入 ÿ 設置MariaDB服務器的根密碼。

ubuntu 20.04安裝LEMP堆棧

接下來,您可以按Enter回答所有剩餘的問題,這將刪除匿名用戶,禁用遠程root登錄並刪除測試數據庫。 此步驟是MariaDB數據庫安全性的基本要求。 (請注意,Y是大寫的,這意味着它是默認答案。)

如何在Ubuntu-20.04上安裝LEMP堆棧

默認情況下,Ubuntu上的MaraiDB軟件包使用 unix_socket 對用戶登錄進行身份驗證,這基本上意味着您可以使用操作系統的用戶名和密碼登錄MariaDB控制台。 因此,您可以運行以下命令來登錄,而無需提供MariaDB根密碼。

sudo mariadb -u root

要退出,請運行

exit;

檢查MariaDB服務器版本信息。

mariadb --version

如您所見,我們已經安裝了MariaDB 10.3.22。

mariadb  Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

步驟4:安裝PHP7.4

PHP7.4包含在Ubuntu 20.04存儲庫中,與PHP7.3相比,性能略有提高。 輸入以下命令以安裝PHP7.4和一些常用擴展。

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

WordPress等內容管理系統(CMS)通常需要PHP擴展。 例如,如果您的安裝缺少 php7.4-xml,那麼您的某些WordPress網站頁面可能為空白,您可以在Nginx錯誤日誌中找到錯誤,例如:

PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function xml_parser_create()

安裝這些PHP擴展可確保CMS順利運行。 現在啟動php7.4-fpm。

sudo systemctl start php7.4-fpm

在啟動時啟用自動啟動。

sudo systemctl enable php7.4-fpm

檢查狀態:

systemctl status php7.4-fpm

樣本輸出:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor pr>
     Active: active (running) since Fri 2020-04-10 14:40:26 UTC; 12s ago
       Docs: man:php-fpm7.4(8)
    Process: 21019 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /ru>
   Main PID: 21012 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req>
      Tasks: 3 (limit: 9451)
     Memory: 9.4M
     CGroup: /system.slice/php7.4-fpm.service
             ├─21012 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─21017 php-fpm: pool www
             └─21018 php-fpm: pool www

如果上面的命令在運行後沒有立即退出。 您需要按“q使其退出。

步驟5:創建一個Nginx服務器塊

Nginx服務器塊就像Apache中的虛擬主機。 我們將不使用默認服務器塊,因為它不足以運行PHP代碼,並且如果我們對其進行修改,它將變得一團糟。 因此,刪除 default 在符號鏈接 sites-enabled 通過運行以下命令創建目錄。 (它仍然可以作為 /etc/nginx/sites-available/default

sudo rm /etc/nginx/sites-enabled/default

然後使用命令行文本編輯器(如Nano)在下面創建一個全新的服務器阻止文件 /etc/nginx/conf.d/ 目錄。

sudo nano /etc/nginx/conf.d/default.conf

將以下文本粘貼到文件中。 以下代碼片段將使Nginx使用通用服務器名稱在IPv4端口80和IPv6端口80上進行偵聽。

server {
  listen 80;
  listen [::]:80;
  server_name _;
  root /usr/share/nginx/html/;
  index index.php index.html index.htm index.nginx-debian.html;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ .php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

 # A long browser cache lifetime can speed up repeat visits to your page
  location ~* .(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
  }

  # disable access to hidden files
  location ~ /.ht {
      access_log off;
      log_not_found off;
      deny all;
  }
}

保存並關閉文件。 (要在Nano文本編輯器中保存文件,請按 Ctrl+O,然後按 Enter 確認。 要退出,請按 Ctrl+X

然後測試Nginx配置。

sudo nginx -t

如果測試成功,請重新加載Nginx。

sudo systemctl reload nginx

步驟6:測試PHP

要使用Nginx Web服務器測試PHP-FPM,我們需要創建一個 info.php webroot目錄中的文件。

sudo nano /usr/share/nginx/html/info.php

將以下PHP代碼粘貼到文件中。

<?php phpinfo(); ?>

保存並關閉文件。 現在,在瀏覽器地址欄中,輸入 server-ip-address/info.php。 更換 sever-ip-address 與您的實際IP。 如果您在本地計算機上遵循本教程,請輸入 127.0.0.1/info.php 要麼 localhost/info.php

您應該看到服務器的PHP信息。 這意味着PHP腳本可以在Nginx Web服務器上正常運行。

Ubuntu的20.04 Nginx的PHP 7.4

恭喜! 您已在Ubuntu 20.04上成功安裝了Nginx,MariaDB和PHP7.4。 為了服務器的安全,您應該刪除 info.php 現在文件,以防止黑客看到它。

sudo rm /usr/share/nginx/html/info.php

故障排除技巧

如果遇到錯誤,可以檢查Nginx錯誤日誌(/var/log/nginx/error.log)找出問題所在。

Nginx自動重啟

如果由於某種原因您的Nginx進程被殺死,則需要運行以下命令來重新啟動它。

sudo systemctl restart nginx

無需手動輸入此命令,我們可以通過編輯Nginx使Nginx自動重啟 nginx.service 系統服務單元。 要覆蓋默認的systemd服務配置,我們創建一個單獨的目錄。

sudo mkdir -p /etc/systemd/system/nginx.service.d/

然後在此目錄下創建一個文件。

sudo nano /etc/systemd/system/nginx.service.d/restart.conf

在文件中添加以下行,這將使Nginx在檢測到故障後5秒鐘自動重新啟動。

[Service]
Restart=always
RestartSec=5s

保存並關閉文件。 然後重新加載systemd。

sudo systemctl daemon-reload

要檢查是否可行,請使用以下命令殺死Nginx:

sudo pkill nginx

然後檢查Nginx的狀態。 您會發現Nginx自動重啟。

systemctl status nginx

下一步

希望本教程對您有所幫助 在Ubuntu 20.04 LTS上安裝LEMP堆棧。 您可能需要安裝phpMyAdmin,這是一個免費的開放源代碼的基於Web的數據庫管理工具。

  • 如何在Ubuntu 20.04 LTS上使用Nginx(LEMP)安裝phpMyAdmin

您也可以在LEMP堆棧上安裝WordPress,以創建自己的網站或博客。

  • 在Ubuntu 20.04上使用Nginx,MariaDB,PHP7.4(LEMP)安裝WordPress

與往常一樣,如果您發現這篇文章很有用,請訂閱我們的免費新聞通訊以獲取更多提示和技巧。 保重🙂

Sidebar