Ubuntu/Debian 上的 LEMP 堆栈——安装和部署 LEMP 的分步指南

LEMP 堆栈是一组软件,可用于提供用 PHP 编写的动态网页。 LEMP 是 inux、Nginx(读作 我有 x), ySQL,和 生命值。 在本文中,我们将研究如何在 Ubuntu/Debian 机器上安装和设置 LEMP 堆栈。 由于我们将使用 Ubuntu/Debian,因此我们已经拥有 LEMP 堆栈中的 Linux。 现在让我们看看安装堆栈其余部分的步骤。

在 Ubuntu/Debian 上安装 LEMP 堆栈的步骤

让我们回顾在基于 Ubuntu 或 Debian 的系统上安装 LEMP 堆栈的步骤。 我们将深入介绍每个步骤,如果这篇简短的文章中无法涵盖某个特定步骤,您可以参考该部分中链接的完整文章,以防您在设置系统时遇到任何困难。

第 1 步 – 安装 Nginx

Nginx 在默认存储库中可用,可以使用 apt 命令安装:

sudo apt update sudo apt install nginx 
apt 安装 Nginx

检查状态 nginx 使用 systemctl 命令,输入

sudo systemctl status nginx 
Nginx 状态

开启nginx服务

您需要启用 Nginx 服务,以便它在启动时自动启动。 这可以使用 systemctl 命令。

sudo systemctl enable nginx 
启用 Nginx启用 Nginx

启用防火墙端口

您还需要允许 Nginx 正在侦听的端口上的流量。 首先,让我们使用 ufw 命令列出所有应用程序配置文件:

sudo ufw app list 
防火墙防火墙

现在特别允许 Nginx 配置文件。 如果要同时允许 HTTP 和 HTTPS 连接,请使用 Nginx Full 轮廓。 其他 Nginx 配置文件名称不言自明。

sudo ufw allow in "Nginx Full" 
添加 Nginx 1添加 Nginx

检查 Nginx 是否在服务器机器上工作

您可以检查哪些端口 nginx 使用 netstat 命令侦听:

netstat -pnlt | grep 80 
Nginx 服务器检查Nginx 服务器检查

默认情况下它在端口 80 上运行。所以,你应该看到 LISTEN 在端口 80 和 nginx 作为服务。

检查 Nginx 是否在客户端机器上提供页面

转到任何客户端计算机上的任何浏览器地址栏,然后键入运行 Nginx 的计算机的 IP 地址/域名。 你应该得到一个这样的页面。

Nginx 运行Nginx 客户端检查

第 2 步 – 安装 MySQL

现在 安装了 LEMP 我们继续到 M 即 MySQL。 MySQL 是一个开源的关系数据库管理系统。 要安装它,请键入

sudo apt install mysql-server 
安装Mysql安装 MSQL

查看mysql服务的状态

检查状态 mysql 使用 systemctl 命令,输入

sudo systemctl status mysql 

现在启用它,以便它在启动时自动启动:

sudo systemctl enable mysql 
Mysql 状态MySQL 状态

保护mysql安装

当安装完成并且 MySQL 服务器启动并运行时,建议您运行 mysql_secure_installation 程序。 这使得 MySQL 安装更加安全。

sudo mysql_secure_installation 
Mysql 安全安装MySQL 安全安装

然后,您需要设置密码的严格策略。 理想情况下,您应该至少将其设置为 MEDIUM. 我已将其设置为 LOW 以演示为目的。

在密码策略之后,它会要求您设置一个 root 密码。 这是密码 admin 的数据库。 (不要与 root 用户的登录密码。)

设置通行证设置密码

在您确认要继续使用提供的密码后,它会要求采取一些其他措施,例如删除匿名用户、禁止远程 root 登录等。您可以键入 y 在所有这些问题中。

登录 MySQL 控制台(可选)

您可以通过键入和输入您的登录密码(UNIX 密码)登录到 MySQL 控制台

sudo mysql 

它会给您一个提示,您可以在其中运行查询。 我们将使用它来查询 plugin MySQL使用的 root 用户。 plugin 是身份验证方法的 MySQL 命名法。

类型

mysql> SELECT user, plugin FROM mysql.user; 
2020 10 07 16 01查询root登录方式

从上面的截图中可以看出, root 用途 auth_socket 这意味着任何具有 root 权限的用户都可以使用他们的 UNIX 密码而不是您使用 mysql_secure_installation.

这实际上更安全,因为 只要 允许具有root权限的用户以MySQL root用户身份登录。 因此,MySQL root 密码没有实际用途,但如果身份验证方法更改为,将其设置为故障保护 caching_sha2_password.

现在,MySQL 也设置好了。 您可以通过键入 exit 离开控制台。

mysql> exit 

第 3 步 – 安装 PHP

我们有 Nginx 来提供网页和 MySQL 作为我们的数据库。 我们现在需要 PHP 来生成动态网页。 我们还需要在我们的网络服务器 Nginx 和 PHP 之间建立一个桥梁,以便 Nginx 可以将请求传递给 PHP 解释器。 php-fpm (PHP FastCGI 进程管理器)就是那个桥梁。

要连接 PHP 和 MySQL,我们需要 php-mysql 模块。 安装 php-mysql 将自动安装核心 PHP 模块。

安装所需的 PHP 模块和 php-fpm, 类型

sudo apt install php-fpm php-mysql 
apt 安装 PHP安装 PHP

第 4 步 – Nginx 配置

我们已经介绍了 LEMP 堆栈的安装部分。 现在我们需要配置 Nginx 以使用 PHP 来服务页面。 我们需要编辑的配置文件是 /etc/nginx/sites-available/default .

在您选择的编辑器中打开它。 我将使用 nano 文本编辑器:

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

所做的更改在突出显示的 胆大. 编辑文件如下:

server {         listen 80 default_server;         listen [::]:80 default_server;          [...]          root /var/www/html;          # Add index.php to the list if you are using PHP        index index.php index.html index.htm index.nginx-debian.html;          server_name 192.168.1.66;          location / {                 # First attempt to serve request as file, then                 # as directory, then fall back to displaying a 404.                 try_files $uri $uri/ =404;         }          # pass PHP scripts to FastCGI server                  location ~ .php$ {                include snippets/fastcgi-php.conf;                        # With php-fpm (or other unix sockets):                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;                # With php-cgi (or other tcp sockets):                #fastcgi_pass 127.0.0.1:9000;         }          # deny access to .htaccess files, if Apache's document root         # concurs with nginx's one         #         location ~ /.ht {                deny all;         } }

这是上述文件的细分:

  • Nginx 正在监听端口 80 用于传入连接。
  • try_files 告诉 Nginx 在进一步处理请求之前验证请求的文件或目录是否确实存在于站点的根文件系统中。 如果没有,一个 404 被退回。
  • location ~* .php$ 意味着 Nginx 会将此配置应用于站点根目录中的所有 .php 文件,包括任何包含 PHP 文件的子目录。
  • include snippets/fastcgi-php.conf 告诉 Nginx 包含配置文件 fastcgi.
  • fastcgi_pass 指定 PHP 侦听来自其他本地进程的传入连接的 UNIX 套接字。

保存和编辑文件后,通过键入测试配置文件

sudo nginx -t 
验证配置测试配置

它应该表明测试是成功的。

第 5 步 – 使用 Nginx 测试 PHP

让我们创建一个简单的 PHP 文件来检查 Nginx 是否能够提供 PHP 页面。

创建一个新文件 /var/www/html/info.php 使用您最喜欢的编辑器。

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

向其中添加以下几行:

<?php phpinfo(); ?> 

Save 并退出编辑器。

为此需要重新加载 Nginx 服务。 您可以使用 systemctl 命令执行此操作。

sudo systemctl reload nginx 

转到浏览器并将地址指向 <server_ip_addr>/info.php. 您应该会看到类似于以下页面的页面。

测试 PHP 工作测试 PHP

如果此页面可见,则表示Nginx 和PHP 已正确设置。 此文件包含有关您的环境的敏感信息,因此请使用 rm 命令。

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

第 6 步 – 使用 MySQL 测试 PHP

为了使用 MySQL 测试 PHP,我们将创建一个虚拟用户和一个虚拟数据库:

首先使用以下命令登录到 MySQL 控制台 root 用户。

sudo mysql 

然后要创建一个数据库、一个用户并为该用户提供适当的权限,请键入:

mysql> CREATE DATABASE testdb; mysql> CREATE USER 'testuser' IDENTIFIED WITH mysql_native_password BY 'password'; mysql> GRANT ALL ON testdb.* TO 'testuser'; 

上面的命令创建了一个名为 testdb, 创建用户 testuser 谁有密码 password. 然后授予用户对数据库的所有权限 testdb.

现在使用退出控制台 exit

mysql> exit 

使用新创建的登录 testuser 只是为了确认新用户具有适当的权限

mysql -u testuser -p 

-p 选项提示输入密码(在这种情况下,字面意思是 password. 您应该使用更安全的密码,而不仅仅是 password)

现在让我们创建一个名为的表 groceries.

mysql> CREATE TABLE testdb.groceries ( mysql>    item_id INT AUTO_INCREMENT, mysql>    content VARCHAR(255), mysql>    PRIMARY KEY(item_id) mysql> ); 

现在在表中插入一些虚拟值,如下所示:

mysql> INSERT INTO testdb.groceries (content) VALUES ("Banana"); 

在 PHP 中使用 MySQL

现在我们已经建立了我们的数据库,我们将使用 PHP 查询它。 创建一个 PHP 文件作为 /var/www/html/groceries.php 使用你最喜欢的编辑器

nano /var/www/html/groceries.php 

然后将以下内容粘贴到文件中:

<?php $user = "testuser"; $password = "password"; $database = "testdb"; $table = "groceries";  try {   $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);   echo "<h2>Groceries</h2><ol>";   foreach($db->query("SELECT content FROM $table") as $row) {     echo "<li>" . $row['content'] . "</li>";   }   echo "</ol>"; } catch (PDOException $e) {     print "Error!: " . $e->getMessage() . "<br/>";     die(); } ?> 

Save 并退出编辑器。 然后转到浏览器并将其地址栏指向 <server_ip_addr>/groceries.php. 你应该得到一个类似于下面显示的页面,除了列表项将是你插入到 MySQL 数据库中的内容。

php mysql使用 PHP 访问 MySQL 数据库

LEMP 堆栈的安装和配置到此结束。

结论

我希望本文能让您开始使用 LEMP 堆栈。 Nginx 是一个非常强大的 Web 服务器,有很多选项。 要了解有关它们的更多信息,请查看其文档。 PHP 也有自己的文档。 特别是关于 PHP 中 MySQL 的部分可能是一个很好的阅读。 MySQL 的文档可以在这里找到。