如何在 Debian 10 上安装 Linux、Nginx、MariaDB 和 PHP(LEMP 协议栈

介绍

LEMP软件堆栈是一组软件,可用于服务动态网页和Web应用程序. 名称LEMP是描述一个 L inux操作系统的缩写,具有(** E** )Nginx Web 服务器。

虽然这个软件堆栈通常包括 MySQL 作为数据库管理系统,但一些Linux发行版(包括 Debian)使用 MariaDB作为MySQL的插入替代品。

在本指南中,您将在 Debian 10 服务器上安装 LEMP 堆栈,使用 MariaDB 作为数据库管理系统。

前提条件

要完成本指南,您将需要访问 Debian 10 服务器. 该服务器应该有一个常规用户配置的sudo权限和一个防火墙启用ufw

步骤1:安装 Nginx Web 服务器

为了为您的网站访问者提供网页服务,我们将使用 Nginx,一个受欢迎的网页服务器,以其整体性能和稳定性而闻名。

您将使用的所有软件将直接来自 Debian 的默认包存库,这意味着您可以使用apt包管理套件完成安装。

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

1sudo apt update
2sudo apt install nginx

在 Debian 10 上, Nginx 配置为在安装时启动。

如果你有ufw防火墙运行,你需要允许连接到 Nginx. 你应该启用最限制的配置文件,仍然允许你想要的流量. 由于你尚未为你的服务器配置SSL,现在你只需要允许HTTP流量在端口80

你可以通过键入来实现这一点:

1sudo ufw allow 'Nginx HTTP'

您可以通过键入检查更改:

1sudo ufw status

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

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7Nginx HTTP ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

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

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

這將打印出幾個IP地址,您可以在您的網頁瀏覽器中嘗試每一個。

输入您在 Web 浏览器中接收的地址之一. 它应该带您到 Nginx 的默认定位页面:

1http://your_domain_or_IP

Nginx default page

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

第2步:安装MariaDB

现在您有一个 Web 服务器并运行,您需要安装数据库系统,以便为您的网站存储和管理数据。

在 Debian 10 中,传统上用于安装MySQL服务器的元包mysql-server默认的mysql-server取代了。

然而,为了更长的兼容性,建议您使用该程序的实际软件包,即mariadb-server,而不是使用元包。

要安装此软件,请运行:

1sudo apt install mariadb-server

安装完成后,建议您运行预先安装的安全脚本 MariaDB. 此脚本将删除一些不安全的默认设置,并锁定访问您的数据库系统。

1sudo mysql_secure_installation

这个脚本将带你通过一系列提示,在那里你可以对你的MariaDB设置做出一些更改。第一个提示将要求你输入当前的 database root 密码. 这不应该与 ** system root** 混淆。

接下来的提示会问你是否想要设置一个 数据库根 ** 密码. 因为 MariaDB 对于 ** root 用户使用了一种特殊的身份验证方法,通常比使用密码更安全,所以你不需要现在设置这个密码。

从那里,您可以按Y,然后按ENTER,以接受所有后续问题的默认值。这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便MariaDB立即尊重您所做的更改。

1sudo mariadb

这将作为管理数据库用户 root 连接到MariaDB服务器,在运行此命令时使用sudo来推断。

 1[secondary_label Output]
 2Welcome to the MariaDB monitor. Commands end with ; or \g.
 3Your MariaDB connection id is 74
 4Server version: 10.3.15-MariaDB-1 Debian 10
 5
 6Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 7
 8Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 9
10MariaDB [(none)]>

请注意,您不需要提供密码以作为 root 用户连接。 这是因为管理 MariaDB 用户的默认身份验证方法是unix_socket而不是password。 虽然这起初可能看起来像是一个安全问题,但它使数据库服务器更安全,因为唯一允许登录作为 ** root** MariaDB 用户的用户是从控制台或通过运行具有相同权限的应用程序连接的 sudo 权限的系统用户。

为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在您的服务器上托管多个数据库. 为了展示此设置,我们将创建一个名为 example_database 的数据库和一个名为 ** example_user** 的用户,但您可以用不同的值代替这些名称。

1CREATE DATABASE example_database;

现在,您可以创建一个新的用户,并在您刚刚创建的自定义数据库中授予他们完整的权限。下列命令将该用户的密码定义为密码,但您应该用您选择的安全密码来代替此值。

1GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

这将赋予 example_user 用户对 ** example_database** 数据库的完整权限,同时阻止该用户在您的服务器上创建或修改其他数据库。

清除权限,以确保它们在当前会话中存储和可用:

1FLUSH PRIVILEGES;

接下来,输出 MariaDB 壳:

1exit

您可以通过再次登录 MariaDB 控制台来测试新用户是否有正确的权限,这次使用自定义用户凭证:

1mariadb -u example_user -p

请注意这个命令中的p标志,它会提示您在创建 example_user 用户时使用的密码。登录到MariaDB控制台后,确认您可以访问 ** example_database** 数据库:

1SHOW DATABASES;

这将为您带来以下结果:

1[secondary_label Output]
2+--------------------+
3| Database           |
4+--------------------+
5| example_database   |
6| information_schema |
7+--------------------+
82 rows in set (0.000 sec)

要退出 MariaDB 壳,键入:

1exit

在此时,您的数据库系统已设置,您可以继续安装PHP,这是LEMP堆栈的最终组件。

步骤 3 – 安装 PHP 来处理

你安装了 Nginx 来服务你的内容,安装了 MySQL 来存储和管理你的数据,现在你可以安装 PHP 来处理代码,并为 Web 服务器生成动态内容。

虽然Apache在每个请求中嵌入PHP翻译器,但 Nginx需要一个外部程序来处理PHP处理,并作为PHP翻译器本身和Web服务器之间的桥梁。这允许大多数PHP基于网站的整体性能更好,但需要额外的配置。您需要安装php-fpm,这代表PHP fastCGI流程管理器,并告诉Nginx将PHP请求传递给该软件进行处理。此外,您还需要php-mysql,一个PHP模块,允许PHP与基于MySQL的数据库进行通信。

要安装php-fpmphp-mysql包,请运行:

1sudo apt install php-fpm php-mysql

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

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

在使用 Nginx 网页服务器时, server blocks (类似于 Apache 中的虚拟主机) 可以用来封装配置细节,并在单个服务器上托管多个域。

在 Debian 10 上, Nginx 默认允许一个服务器块,并配置为在 `/var/www/html 中的目录中服务文档。虽然这对单个网站非常有效,但如果您托管多个网站,则很难管理它。

创建 your_domain 的根网页目录如下:

1sudo mkdir /var/www/your_domain

接下来,与 $ USER 环境变量分配目录的所有权,该变量应参考您的当前系统用户:

1sudo chown -R $USER:$USER /var/www/your_domain

然后,在 Nginx 的可用网站目录中使用您偏好的命令行编辑器打开一个新的配置文件。

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

这将创建一个新的空格文件. 粘贴到以下裸骨配置:

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3    listen 80;
 4    listen [::]:80;
 5
 6    root /var/www/your_domain;
 7    index index.php index.html index.htm;
 8
 9    server_name your_domain;
10
11    location / {
12        try_files $uri $uri/ =404;
13    }
14
15    location ~ \.php$ {
16        include snippets/fastcgi-php.conf;
17        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
18    }
19}

这是一个基本的配置,它在端口80上收听并服务于您刚刚创建的网页根的文件,它只会响应在server_name之后提供的主机或IP地址的请求,并且在php结束的任何文件将被php-fpm处理,然后Nginx将结果发送给用户。

注意:如果您正在运行 PHP 版本不同于 PHP 7.3,则需要调整fastcgi_pass以匹配您正在使用的 PHP 版本。

完成编辑后,保存并关闭文件. 如果您使用nano创建文件,请通过键入CTRL+X,然后yENTER来确认。

通过从 Nginx 的网站启用目录链接到配置文件来激活您的配置:

1sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

这将告诉 Nginx下次重新加载时使用配置,您可以通过键入测试您的配置语法错误:

1sudo nginx -t

如果报告了任何错误,请返回配置文件,查看其内容,然后继续。

当你准备好时,重新加载 Nginx 以进行更改:

1sudo systemctl reload nginx

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

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

您可以测试它以验证 Nginx 可以正确地将 .php 文件发送到您的 PHP 处理器。

您可以通过在文档根中创建测试PHP文件来做到这一点,在文档根中打开名为info.php的新文件:

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

输入或粘贴下列行到新文件中. 这是有效的PHP代码,将返回有关您的服务器的信息:

1[label /var/www/your_domain/info.php]
2<?php
3phpinfo();
4?>

完成后,保存并关闭文件,键入CTRL+X,然后yENTER来确认。

您现在可以在您的 Web 浏览器中访问此页面,访问您在 Nginx 配置文件中设置的域名或公共 IP 地址,然后是 /info.php:

1http://your_domain/info.php

您将看到一个包含有关您的服务器的详细信息的网页:

PHP page info

在通过该页面检查有关您的 PHP 服务器的相关信息后,最好删除您创建的文件,因为它包含有关您的 PHP 环境和您的 Debian 服务器的敏感信息。

1rm /var/www/your_domain/info.php

您可以随时再生此文件,如果您需要它以后,接下来,我们将从PHP侧测试数据库连接。

步骤 6 — 测试 PHP 数据库连接(可选)

如果你想测试PHP是否能够连接到MariaDB并执行数据库查询,你可以从PHP脚本中创建一个测试表,其中包含虚假数据和查询。

首先,与您在 [步骤 2](# step-2-%E2%80%94-installing-mariadb)中创建的数据库用户连接到 MariaDB 控制台:

1mariadb -u example_user -p

创建一个名为 todo_list 的表. 从 MariaDB 控制台运行以下语句:

1CREATE TABLE example_database.todo_list (
2    item_id INT AUTO_INCREMENT,
3    content VARCHAR(255),
4    PRIMARY KEY(item_id)
5);

现在,在测试表中插入几个内容行. 您可能想要重复下一个命令几次,使用不同的值:

1INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

若要确认数据已成功保存到表中,请运行:

1SELECT * FROM example_database.todo_list;

您将看到以下结果:

 1[secondary_label Output]
 2+---------+--------------------------+
 3| item_id | content                  |
 4+---------+--------------------------+
 5|       1 | My first important item  |
 6|       2 | My second important item |
 7|       3 | My third important item  |
 8|       4 | and this one more thing  |
 9+---------+--------------------------+
104 rows in set (0.000 sec)

在确认您在测试表中有有效数据后,您可以退出 MariaDB 控制台:

1exit

现在你可以创建的PHP脚本,将连接到MariaDB和查询你的内容。创建一个新的PHP文件在你的自定义网页根目录使用你喜欢的编辑器。

1nano /var/www/your_domain/todo_list.php

将以下内容添加到您的 PHP 脚本中:

 1<?php
 2$user = "example_user";
 3$password = "password";
 4$database = "example_database";
 5$table = "todo_list";
 6
 7try {
 8  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
 9  echo "<h2>TODO</h2><ol>"; 
10  foreach($db->query("SELECT content FROM $table") as $row) {
11    echo "<li>" . $row['content'] . "</li>";
12  }
13  echo "</ol>";
14} catch (PDOException $e) {
15    print "Error!: " . $e->getMessage() . "<br/>";
16    die();
17}

保存并关闭文件,当你完成编辑。

现在,您可以通过访问您在 Nginx 配置文件中设置的域名或公共 IP 地址访问您的 Web 浏览器中的此页面,然后是 /todo_list.php:

1http://your_domain/todo_list.php

您应该看到这样的页面,显示您在测试表中插入的内容:

Example PHP todo list

这意味着您的PHP环境已经准备好连接并与MariaDB服务器进行交互。

结论

在本指南中,您已经建立了一个灵活的基础来为您的访问者提供PHP网站和应用程序,使用NGINX作为Web服务器,您已经设置了NGINX来处理PHP请求,通过php-fpm,您还设置了一个MariaDB数据库来存储您的网站数据。

为了进一步改进当前的设置,您可以 安装 Composer用于PHP中的依赖性和包管理,您也可以 安装OpenSSL证书用于您的网站使用Let's Encrypt

Published At
Categories with 技术
comments powered by Disqus