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
检查状态 nginx
使用 systemctl
命令,输入
sudo systemctl status nginx
开启nginx服务
您需要启用 Nginx 服务,以便它在启动时自动启动。 这可以使用 systemctl
命令。
sudo systemctl enable nginx
启用防火墙端口
您还需要允许 Nginx 正在侦听的端口上的流量。 首先,让我们使用 ufw 命令列出所有应用程序配置文件:
sudo ufw app list
现在特别允许 Nginx 配置文件。 如果要同时允许 HTTP 和 HTTPS 连接,请使用 Nginx Full
轮廓。 其他 Nginx 配置文件名称不言自明。
sudo ufw allow in "Nginx Full"
检查 Nginx 是否在服务器机器上工作
您可以检查哪些端口 nginx
使用 netstat 命令侦听:
netstat -pnlt | grep 80
默认情况下它在端口 80 上运行。所以,你应该看到 LISTEN
在端口 80 和 nginx
作为服务。
检查 Nginx 是否在客户端机器上提供页面
转到任何客户端计算机上的任何浏览器地址栏,然后键入运行 Nginx 的计算机的 IP 地址/域名。 你应该得到一个这样的页面。
第 2 步 – 安装 MySQL
现在 乙 安装了 LEMP 我们继续到 M 即 MySQL。 MySQL 是一个开源的关系数据库管理系统。 要安装它,请键入
sudo apt install mysql-server
查看mysql服务的状态
检查状态 mysql
使用 systemctl
命令,输入
sudo systemctl status mysql
现在启用它,以便它在启动时自动启动:
sudo systemctl enable mysql
保护mysql安装
当安装完成并且 MySQL 服务器启动并运行时,建议您运行 mysql_secure_installation
程序。 这使得 MySQL 安装更加安全。
sudo mysql_secure_installation
然后,您需要设置密码的严格策略。 理想情况下,您应该至少将其设置为 MEDIUM
. 我已将其设置为 LOW
以演示为目的。
在密码策略之后,它会要求您设置一个 root 密码。 这是密码 admin 的数据库。 (不要与 root
用户的登录密码。)
在您确认要继续使用提供的密码后,它会要求采取一些其他措施,例如删除匿名用户、禁止远程 root 登录等。您可以键入 y
在所有这些问题中。
登录 MySQL 控制台(可选)
您可以通过键入和输入您的登录密码(UNIX 密码)登录到 MySQL 控制台
sudo mysql
它会给您一个提示,您可以在其中运行查询。 我们将使用它来查询 plugin
MySQL使用的 root
用户。 plugin
是身份验证方法的 MySQL 命名法。
类型
mysql> SELECT user, plugin FROM mysql.user;
从上面的截图中可以看出, 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
第 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
. 您应该会看到类似于以下页面的页面。
如果此页面可见,则表示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 数据库中的内容。
LEMP 堆栈的安装和配置到此结束。
结论
我希望本文能让您开始使用 LEMP 堆栈。 Nginx 是一个非常强大的 Web 服务器,有很多选项。 要了解有关它们的更多信息,请查看其文档。 PHP 也有自己的文档。 特别是关于 PHP 中 MySQL 的部分可能是一个很好的阅读。 MySQL 的文档可以在这里找到。