如何在Debian9上安装Linux、Nginx、MySQL、PHP(LEMP堆栈)

来自菜鸟教程
跳转至:导航、​搜索

介绍

LEMP 软件堆栈是一组可用于提供动态网页和 Web 应用程序的软件。 这是描述带有 Nginx Web 服务器的 Linux 操作系统的首字母缩略词。 后端数据存储在 MySQL 数据库中,动态处理由 PHP 处理。

在本指南中,您将使用操作系统提供的软件包在 Debian 服务器上安装 LEMP 堆栈。

先决条件

要完成本指南,您需要一个具有 sudo 权限的非 root 用户的 Debian 9 服务器。 您可以在我们的 Initial Server Setup with Debian 9 指南中设置具有这些权限的用户。

第 1 步 — 安装 Nginx Web 服务器

为了向我们的网站访问者显示网页,我们将使用 Nginx,一种现代、高效的网络服务器。

我们将用于此过程的所有软件将直接来自 Debian 的默认软件包存储库。 这意味着我们可以使用apt包管理套件来完成安装。

由于这是我们第一次在此会话中使用 apt,我们应该从更新本地包索引开始。 然后我们可以安装服务器:

sudo apt update
sudo apt install nginx

在 Debian 9 上,Nginx 配置为在安装时开始运行。

如果您正在运行 ufw 防火墙,则需要允许连接到 Nginx。 您应该启用仍然允许您想要的流量的最严格的配置文件。 由于我们还没有为我们的服务器配置 SSL,在本指南中,我们只需要允许端口 80 上的流量。

您可以通过键入以下内容启用此功能:

sudo ufw allow 'Nginx HTTP'

您可以通过键入以下内容来验证更改:

sudo ufw status

您应该在显示的输出中看到允许的 HTTP 流量:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

现在,通过在 Web 浏览器中访问服务器的域名或公共 IP 地址来测试服务器是否已启动并运行。 如果您没有指向您的服务器的域名并且您不知道您的服务器的公共 IP 地址,您可以通过在终端中键入以下内容之一来找到它:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

这将打印出一些 IP 地址。 您可以在您的网络浏览器中依次尝试它们中的每一个。

键入您在 Web 浏览器中收到的地址之一。 它应该带你到 Nginx 的默认登录页面:

http://your_domain_or_IP

如果你看到上面的页面,你已经成功安装了 Nginx。

第 2 步 — 安装 MySQL 以管理站点数据

现在我们有了一个 Web 服务器,我们需要安装 MySQL,一个数据库管理系统,来存储和管理我们网站的数据。

您可以通过键入以下内容轻松安装:

sudo apt install mysql-server

注意: 在 Debian 9 中,MySQL 项目的社区分支——MariaDB——被打包为默认的 MySQL 变体。 虽然 MariaDB 在大多数情况下运行良好,但如果您需要仅在 Oracle 的 MySQL 中找到的功能,您可以从 MySQL 开发人员维护的存储库中安装和使用包。 要安装官方 MySQL 服务器,请使用我们的教程 如何在 Debian 9 上安装最新的 MySQL。


MySQL 数据库软件现已安装,但其配置尚未完成。

为了保护安装,我们可以运行一个安全脚本,询问我们是否要修改一些不安全的默认值。 通过键入以下内容开始脚本:

sudo mysql_secure_installation

您将被要求输入 MySQL root 帐户的密码。 我们还没有设置这个,所以只需点击 ENTER。 然后系统会询问您是否要设置该密码。 您应该输入 y 然后设置 root 密码。

对于脚本询问的其余问题,您应该按 y,然后在每个提示符处按 ENTER 键。 这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重您所做的更改。

至此,您的数据库系统现已设置完毕并受到保护。 让我们设置 PHP。

第 3 步 — 安装 PHP 进行处理

我们现在安装了 Nginx 来服务我们的页面,并安装了 MySQL 来存储和管理我们的数据。 但是,我们仍然没有任何可以生成动态内容的东西。 这就是 PHP 的用武之地。

由于 Nginx 不像其他一些 Web 服务器那样包含原生 PHP 处理,我们需要安装 fpm,它代表“fastCGI 进程管理器”。 我们将告诉 Nginx 将 PHP 请求传递给该软件进行处理。 我们还将安装一个额外的帮助程序包,它允许 PHP 与我们的 MySQL 数据库后端进行通信。 安装将引入必要的 PHP 核心文件以使其工作。

然后安装 php-fpmphp-mysql 包:

sudo apt install php-fpm php-mysql

我们现在已经安装了 PHP 组件。 接下来我们将配置 Nginx 以使用它们。

第 4 步 — 配置 Nginx 以使用 PHP 处理器

现在我们已经安装了所有必需的组件。 我们仍然需要的唯一配置更改是告诉 Nginx 使用我们的 PHP 处理器来处理动态内容。

我们在服务器块级别执行此操作(服务器块类似于 Apache 的虚拟主机)。 我们将保留默认的 Nginx 配置,而是创建一个新的配置文件和新的 Web 根目录来保存我们的 PHP 文件。 我们将在服务器应响应的域名或主机名之后命名配置文件和目录。

首先,在 /var/www 中创建一个新目录来保存 PHP 站点:

sudo mkdir /var/www/your_domain

然后,在 Nginx 的 sites-available 目录下打开一个新的配置文件:

sudo nano /etc/nginx/sites-available/your_domain

这将创建一个新的空白文件。 粘贴以下基本配置:

/etc/nginx/sites-available/your_domain

server {
    listen 80;
    listen [::]:80;

    root /var/www/your_domain;
    index index.php index.html index.htm;

    server_name your_domain;

    location / {
        try_files $uri $uri/ =404;
    }

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

这是一个非常基本的配置,它侦听端口 80 并从我们刚刚创建的 Web 根目录提供文件。 它只会响应在 server_name 之后提供的名称的请求,并且任何以 .php 结尾的文件都会在 Nginx 将结果发送给用户之前由 php-fpm 进程处理。

完成自定义后保存并关闭文件。

通过链接到 Nginx 的 sites-enabled 目录中的配置文件来激活您的配置:

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/

这将告诉 Nginx 在下次重新加载时使用配置。 首先,通过键入以下内容来测试您的配置是否存在语法错误:

sudo nginx -t

如果报告任何错误,请返回并重新检查您的文件,然后再继续。

准备好后,重新加载 Nginx 以进行更改:

sudo systemctl reload nginx

接下来,我们将在新的 Web 根目录中创建一个文件来测试 PHP 处理。

第 5 步 — 创建一个 PHP 文件来测试配置

您的 LEMP 堆栈现在应该已完全设置。 我们可以对其进行测试以验证 Nginx 可以正确地将 .php 文件交给我们的 PHP 处理器。

我们可以通过在我们的文档根目录中创建一个测试 PHP 文件来做到这一点。 在文本编辑器的文档根目录中打开一个名为 info.php 的新文件:

sudo nano /var/www/your_domain/info.php

将以下行键入或粘贴到新文件中。 这是有效的 PHP 代码,它将返回有关我们服务器的信息:

/var/www/your_domain/info.php

<?php
  phpinfo();
?>

完成后,保存并关闭文件。

现在,您可以在您的网络浏览器中访问此页面,方法是访问您的服务器的域名或公共 IP 地址,后跟 /info.php

http://your_domain/info.php

您应该会看到一个由 PHP 生成的网页,其中包含有关您的服务器的信息:

如果你看到一个像这样的页面,那么你已经成功地使用 Nginx 设置了 PHP 处理。

在验证 Nginx 正确呈现页面后,最好删除您创建的文件,因为它实际上可以为未经授权的用户提供一些有关您的配置的提示,这可能有助于他们尝试闯入。

现在,通过键入以下内容删除文件:

sudo rm /var/www/html/info.php

如果以后需要,您可以随时重新生成此文件。

结论

您现在应该在 Debian 服务器上配置了 LEMP 堆栈。 这为您为访问者提供 Web 内容提供了非常灵活的基础。