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

2024-08-27 02:52

本文主要是介绍在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 流量:

状态:activeTo                         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 提供内容。

这篇关于在Ubuntu 18.04上安装Linux、Nginx、MySQL、PHP(LEMP堆栈)的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110431

相关文章

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结