如何在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