Image

(最后一次变更: 22.04.2024)
本指南向您展示如何在 Ubuntu 20.04 上安装 LEMP 堆栈(Nginx、MariaDB 和 PHP7.4)。 软件堆栈是捆绑在一起的软件工具的集合。 LEMP 代表 Linux、Nginx (Engine-X)、MariaDB/MySQL 和 PHP,所有这些都是开源的,可以免费使用。 它是支持动态网站和 Web 应用程序的最常见的软件堆栈。 Linux是一个操作系统; Nginx 是一个网络服务器; MariaDB/MySQL 是数据库服务器,PHP 是服务器端脚本语言,负责创建动态网页。 在本指南中,我们以 root 用户身份安装,如果您有普通用户,请使用 sudo 命令。


预配置的服务器配置可在订购单上获得。

1. 更新软件包

在我们安装 LEMP 堆栈之前,建议更新存储库和软件包。 在 Ubuntu 20.04 上运行以下命令。

apt update 
apt upgrade

2. 安装 Nginx 网络服务器

Nginx 是当今非常流行的高性能 Web 服务器。 它还可以用作反向代理和缓存服务器。 输入以下命令以安装 Nginx Web 服务器。

apt install nginx

安装后,我们可以通过运行以下命令使 Nginx 在开机时自动启动。

systemctl enable nginx

然后使用以下命令启动 Nginx:

systemctl start nginx

现在检查它的状态。

systemctl status nginx

现在在浏览器的地址栏中输入 Ubuntu 20.04 服务器的公共 IP 地址。 您应该会看到“欢迎使用 Nginx”网页,这意味着 Nginx Web 服务器工作正常。 如果您在本地 Ubuntu 20.04 计算机上安装 LEMP,请在浏览器的地址栏中输入 127.0.0.1 或 localhost。

如果连接被拒绝或无法建立,防火墙可能会阻止 TCP 端口 80 上的传入请求。如果您使用的是 iptables 防火墙,则需要运行以下命令来打开 TCP 端口 80。

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

如果您使用的是 UFW 防火墙,请运行此命令以打开 TCP 端口 80。

ufw allow http

现在我们需要让 www-data(Nginx 用户)成为 web 目录的所有者。 默认情况下,它由 root 用户拥有。

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

3. 安装 MariaDB 数据库服务器

MariaDB 是 MySQL 的替代品。 它是由 MySQL 团队的前成员开发的,他们担心 Oracle 可能会将 MySQL 变成闭源产品。 输入以下命令在 Ubuntu 20.04 上安装 MariaDB。

apt install mariadb-server mariadb-client

安装后,MariaDB 服务器应该会自动启动。 使用 systemctl 检查其状态。

systemctl status mariadb

如果它没有运行,请使用以下命令启动它:

systemctl start mariadb

要允许 MariaDB 在启动时自动启动,请运行

systemctl enable mariadb

现在在安装后运行安全脚本。

mysql_secure_installation

当系统要求您输入 MariaDB root 密码时,请按 Enter 键,因为尚未设置 root 密码。 然后键入 y 为 MariaDB 服务器设置 root 密码。

然后您可以按 Enter 键回答任何剩余的问题,这将删除匿名用户、禁用远程 root 登录并删除测试数据库。 此步骤是保护 MariaDB 数据库的主要要求。 (注意 Y 是大写的,这意味着这是默认答案。)

默认情况下,Ubuntu 上的 MaraiDB 包使用 unix_socket 进行用户身份验证,这基本上意味着您可以使用操作系统用户名和密码登录 MariaDB 控制台。 因此,您可以运行以下命令进行登录,而无需提供 MariaDB root 密码。

mariadb -u root

运行退出

exit;

4. 安装PHP7.4

PHP7.4 包含在 Ubuntu 20.04 存储库中,与 PHP7.3 相比具有较小的性能改进。 输入以下命令安装 PHP7.4 和一些常用的扩展。

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 消息:PHP 致命错误:未处理的错误:未定义的函数调用 xml_parser_create()

安装这些 PHP 扩展将确保您的 CMS 顺利运行。 现在运行 php7.4-fpm。

systemctl start php7.4-fpm

在引导期间启用自动播放。

systemctl enable php7.4-fpm

检查状态:

systemctl status php7.4-fpm

5. 创建一个 Nginx 服务器块

Nginx 服务器块类似于 Apache 中的虚拟主机。 我们不会使用默认的服务器块,因为它不适合运行 PHP 代码,如果我们更改它,它将变得一团糟。 因此,通过运行以下命令删除站点启用目录中的默认符号链接。 (它仍然可以作为 /etc/nginx/sites-available/default.)

rm /etc/nginx/sites-enabled/default

然后使用命令行文本编辑器(例如 Nano)在 /etc/nginx/conf.d/ 目录中创建一个新的服务器块文件。 将以下文本粘贴到文件中。 以下代码段将使 Nginx 使用服务器的单价名称侦听 IPv4 端口 80 和 IPv6 端口 80。

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

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 配置。

nginx -t

如果测试成功,重启Nginx。

systemctl reload nginx

6. 测试PHP

要使用 Nginx Web 服务器测试 PHP-FPM,我们需要在 webroot 目录中创建一个 info.php 文件。

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

将以下 PHP 代码粘贴到文件中。


保存并关闭文件。 现在在浏览器地址栏中输入server-ip-address/info.php。 将服务器 IP 地址替换为您的实际 IP 地址。 如果您在本地计算机上遵循本指南,请输入 127.0.0.1/info.php 或 localhost/info.php。

您将看到服务器的 PHP 信息。 这意味着 PHP 脚本可以与 Nginx Web 服务器一起正常工作。

7. Nginx 自动重启

如果由于某种原因你的 Nginx 进程停止了,你需要运行以下命令来重新启动它。

systemctl restart nginx

我们可以通过编辑 nginx.service systemd 系统模块使 Nginx 自动重启,而不是手动输入此命令。 为了覆盖默认的 systemd 服务配置,我们创建了一个单独的目录。

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

然后在该目录中创建一个文件。

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

将以下行添加到文件中,这将导致 Nginx 在检测到故障 5 秒后自动重启。 默认的 RetartSec 是 100ms,太短了。 如果 RestartSec 不够大,Nginx 可能会抱怨“启动请求重试太快”。

[Service]

Restart=always
RestartSec=5s

保存并关闭文件。 然后重新加载 systemd 以使更改生效。

systemctl daemon-reload

要测试这是否有效,请使用以下命令终止 Nginx:

pkill nginx

然后查看Nginx的状态。 你会发现 Nginx 自动重启了。

systemctl status nginx

LEMP(Nginx、MariaDB 和 PHP7.4)在 Ubuntu 20.04 上安装成功。 所有这些步骤都已在 Ubuntu 20.04 预装的 VPS 服务器 LEMP 配置中完成。




暂时没有评论