在Ubuntu 18.04上安装Linux、Nginx、MySQL、PHP(LEMP堆栈)的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

简介

LEMP 软件栈是一组软件,可用于提供动态网页和 Web 应用程序。这是一个首字母缩略词,描述了一个 Linux 操作系统,带有一个 Nginx(发音类似于“Engine-X”)Web 服务器。后端数据存储在 MySQL 数据库中,动态处理由 PHP 处理。

本指南演示了如何在 Ubuntu 18.04 服务器上安装 LEMP 软件栈。Ubuntu 操作系统会处理第一个要求。我们将描述如何启动其余组件。

先决条件

在完成本教程之前,您应该在服务器上拥有一个常规的非根用户帐户,具有 sudo 权限。通过完成我们的 Ubuntu 18.04 初始服务器设置指南来设置此帐户。

一旦您的用户可用,您就可以开始本指南中概述的步骤。

步骤 1 – 安装 Nginx Web 服务器

为了向您的网站访问者显示网页,您将使用 Nginx,一个现代高效的 Web 服务器。

本过程中使用的所有软件都将来自 Ubuntu 的默认软件包存储库。这意味着您将使用 apt 软件包管理套件来完成必要的安装。

由于这是您在本次会话中首次使用 apt,因此首先更新服务器的软件包索引:

sudo apt update

接下来,安装服务器:

sudo apt install nginx

在 Ubuntu 18.04 上,Nginx 在安装后被配置为自动运行。

如果您正在运行 ufw 防火墙,如初始设置指南中所述,您需要允许连接到 Nginx。Nginx 在安装时会在 ufw 中注册自己,因此该过程非常简单。

建议您启用最严格的配置文件,以允许您需要的流量。由于在本指南中尚未为服务器配置 SSL,因此您只需要允许端口 80 上的流量。

通过输入以下内容启用:

sudo ufw allow 'Nginx HTTP'

您可以通过检查状态来验证更改:

sudo ufw status

此命令的输出将显示已允许 HTTP 流量:

状态: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 浏览器中尝试每个 IP 地址。

作为替代方案,您可以检查从互联网其他位置查看的可访问的 IP 地址:

curl -4 icanhazip.com

在 Web 浏览器中输入您收到的地址,它将带您到 Nginx 的默认起始页:

http://server_domain_or_IP

!Nginx 默认页面

如果您收到一个显示 “Welcome to nginx” 的网页,那么您已成功安装了 Nginx。

步骤 2 – 安装 MySQL 以管理网站数据

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

通过输入以下命令安装 MySQL:

sudo apt install mysql-server

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

为了保护安装,MySQL 自带一个脚本,将询问您是否要修改一些不安全的默认设置。通过输入以下内容启动脚本:

sudo mysql_secure_installation

此脚本将询问您是否要配置 VALIDATE PASSWORD PLUGIN

回答 Y 以启用,或者输入其他内容以继续而不启用。

VALIDATE PASSWORD PLUGIN 可用于测试密码并提高安全性。它检查密码的强度,并允许用户仅设置足够安全的密码。您想设置 VALIDATE PASSWORD 插件吗?

按 y|Y 以进行是,按任意其他键以进行否:

如果您启用了验证,脚本还将要求您选择密码验证级别。请记住,如果输入 2 – 表示最强级别 – 当尝试设置不包含数字、大写和小写字母以及特殊字符的密码,或者基于常见词典单词的密码时,您将收到错误。

有三个密码验证策略:

LOW    长度 >= 8
MEDIUM 长度 >= 8,数字,混合大小写和特殊字符
STRONG 长度 >= 8,数字,混合大小写,特殊字符和字典文件

请输入 0 = LOW,1 = MEDIUM 和 2 = STRONG:1

接下来,您将被要求提交并确认根密码:

请在此处设置 root 的密码。

新密码:

重新输入新密码:

对于其余的问题,您应该在每个提示处按 Y 并按 ENTER 键。这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便 MySQL 立即遵守我们所做的更改。

请注意,在运行 MySQL 5.7(以及更高版本)的 Ubuntu 系统中,默认情况下 root MySQL 用户设置为使用 auth_socket 插件进行身份验证,而不是使用密码。这在许多情况下可以提供更高的安全性和可用性,但当您需要允许外部程序(例如 phpMyAdmin)访问用户时,可能会使事情变得复杂。

如果使用 auth_socket 插件访问 MySQL 与您的工作流程相符,您可以继续进行第 3 步。但是,如果您更喜欢在连接到 MySQL 作为 root 时使用密码,您需要将其身份验证方法从 auth_socket 切换到 mysql_native_password。要执行此操作,请从终端打开 MySQL 提示:

sudo mysql

接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

此示例演示了 root 用户实际上使用 auth_socket 插件进行身份验证。要将 root 帐户配置为使用密码进行身份验证,请运行以下 ALTER USER 命令。确保将 password 更改为您选择的强密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行 FLUSH PRIVILEGES 告诉服务器重新加载授权表,并使新更改生效:

FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认 root 不再使用 auth_socket 插件进行身份验证:

SELECT user,authentication_string,plugin,host FROM mysql.user;

±-----------------±------------------------------------------±----------------------±----------+
| user | authentication_string | plugin | host |
±-----------------±------------------------------------------±----------------------±----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
±-----------------±------------------------------------------±----------------------±----------+
4 rows in set (0.00 sec)


此示例输出显示 **root** MySQL 用户现在使用密码进行身份验证。确认后,您可以退出 MySQL shell:

```custom_prefix(mysql>)
exit

此时,您的数据库系统已设置好,可以继续安装 PHP。

步骤 3 – 安装 PHP 并配置 Nginx 使用 PHP 处理器

Nginx 现在已安装用于提供页面服务,MySQL 也已安装用于存储和管理数据。然而,你仍然缺少能够生成动态内容的组件。这就是 PHP 发挥作用的地方。

由于 Nginx 不包含像一些其他 Web 服务器那样的原生 PHP 处理,你需要安装 php-fpm,它代表 “fastCGI 进程管理器”。之后,你将告诉 Nginx 将 PHP 请求传递给这个软件进行处理。

安装 php-fpm 模块以及一个额外的辅助包 php-mysql,它将允许 PHP 与你的数据库后端进行通信。安装将会拉取必要的 PHP 核心文件。通过输入以下命令来执行:

sudo apt install php-fpm php-mysql

即使所有必需的 LEMP 组件都已安装,你仍然需要进行一些配置更改,以便告诉 Nginx 使用 PHP 处理器来处理动态内容。

这是在服务器块级别完成的(服务器块类似于 Apache 的虚拟主机)。为此,在 /etc/nginx/sites-available/ 目录中使用你喜欢的文本编辑器创建一个新的服务器块配置文件。在本例中,我们将使用 nano,新的服务器块配置文件将命名为 your_domain,你可以用你自己的信息替换它:

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

通过创建一个新的服务器块配置文件,而不是编辑默认的配置文件,如果需要的话,你可以恢复默认配置。

将以下内容添加到你的新服务器块配置文件中,这些内容是从默认服务器块配置文件中提取并稍作修改:


server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name your_domain;

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

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

        location ~ /\.ht {
                deny all;
        }
}

以下是每个指令和位置块的作用:

  • listen — 定义 Nginx 将监听的端口。在本例中,它将监听端口 80,这是 HTTP 的默认端口。
  • root — 定义存储网站提供的文件的文档根目录。
  • index — 配置 Nginx 优先提供名为 index.php 的文件,当请求索引文件时如果它们可用的话。
  • server_name — 定义应该用于服务器请求的哪个服务器块。将此指令指向你服务器的域名或公共 IP 地址。
  • location / — 第一个位置块包括一个 try_files 指令,它检查匹配 URI 请求的文件是否存在。如果 Nginx 找不到适当的文件,它将返回 404 错误。
  • location ~ \.php$ — 这个位置块通过指向 fastcgi-php.conf 配置文件和 php7.2-fpm.sock 文件来处理实际的 PHP 处理,它声明了与 php-fpm 关联的套接字是什么。
  • location ~ /\.ht — 最后一个位置块处理 .htaccess 文件,Nginx 不会处理这些文件。通过添加 deny all 指令,如果任何 .htaccess 文件不小心进入文档根目录,它们将不会提供给访问者。

添加完这些内容后,保存并关闭文件。如果你使用的是 nano,你可以按 CTRL + X 然后输入 YENTER 来完成。通过创建符号链接从你的新服务器块配置文件(在 /etc/nginx/sites-available/ 目录中)到 /etc/nginx/sites-enabled/ 目录来启用你的新服务器块:

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

然后,从 /sites-enabled/ 目录中取消链接默认配置文件:

sudo unlink /etc/nginx/sites-enabled/default

检查你的新配置文件是否存在语法错误:

sudo nginx -t

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

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

sudo systemctl reload nginx

这就完成了在 Ubuntu 18.04 服务器上安装和配置 LEMP 栈。然而,最好确认所有组件能够相互通信。

步骤 4 – 创建一个 PHP 文件来测试配置

你的 LEMP 栈现在应该已经完全设置好了。你可以测试它以验证 Nginx 是否能够正确地将 .php 文件交给 PHP 处理器。

为此,使用你喜欢的文本编辑器在你的文档根目录中创建一个名为 info.php 的测试 PHP 文件:

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

在新文件中输入以下行。这是有效的 PHP 代码,将返回有关你的服务器的信息:


<?php
phpinfo();

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

现在,你可以通过访问你服务器的域名或公共 IP 地址后跟 /info.php 来在你的 Web 浏览器中访问此页面:

http://your_server_domain_or_IP/info.php

你的浏览器将加载一个类似以下内容的网页,它是由 PHP 生成的,包含有关你的服务器的信息:

!PHP 页面信息

如果你的页面如描述的那样,你已经成功地使用 Nginx 设置了 PHP 处理。

在验证 Nginx 是否正确呈现页面后,最好删除你创建的文件,因为它实际上可能会给未经授权的用户一些关于你配置的提示,这可能会帮助他们试图入侵。如果以后需要,你可以随时重新生成此文件。

现在,删除该文件:

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

通过这样,你在你的 Ubuntu 18.04 服务器上已经拥有一个完全配置和运行的 LEMP 栈。

结论

LEMP 栈是一个强大的平台,可以让您从服务器上设置和提供几乎任何网站或应用程序。

从这里开始,您可以采取一些下一步行动。例如,您应该确保与服务器的连接是安全的。为此,您可以使用 Let’s Encrypt 来保护您的 Nginx 安装。通过遵循这个指南,您将获得服务器的免费 TLS/SSL 证书,使其能够通过 HTTPS 提供内容。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白如意i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值