在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

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间