如何在AWS上安装LEMP堆栈

264 阅读8分钟

在本教程中,我们将在AWS EC2实例上安装Linux、Nginx、MySQL和PHP(LEMP)栈。LEMP栈是虚拟主机行业中非常流行的解决方案。它是Linux、Nginx、MySQL和PHP的组合。LEMP堆栈是LAMP堆栈的一个很好的替代品。LEMP堆栈是高性能网络应用的完美选择。有几个步骤涉及到让这个设置,所以让我们直接开始吧。

选择你的实例

这个解决方案的基础是LEMP的Linux部分。在这种情况下,这将是Ubuntu。如果你还没有运行Ubuntu服务器,并且不确定如何进行,你很幸运,因为我们最近发表了《如何在AWS EC2上创建Ubuntu服务器》以及《如何在EC2上SSH到Ubuntu服务器》。因此,第一步是遵循这两份指南,当你准备好了,我们就可以继续了。

安装Nginx网络服务器

Nginx的发音类似于Engine-X,是一个高性能的网络服务器,近年来得到了很多人的青睐。Nginx被用来向AWS云中的服务器的访问者显示网页。在Ubuntu中,APT软件包管理器是定位和安装软件的首选工具。我们可以从更新服务器上的软件包索引开始。这方面的命令是apt update

apt update

好吧,这并没有按计划进行!为了运行apt update命令,你需要利用sudo结构。Sudo是superuser do或substitute user do的缩写,是一个运行高架提示的命令,不需要改变你的身份。因此,让我们再试一下。

sudo apt update

如果事情进展顺利,你会看到一些类似于上面的输出。好了,我们准备好安装Nginx了!要安装Nginx,我们可以使用命令sudo apt install nginx

sudo apt install nginx

注意,就在上面,当安装工作进行时,它会暂停并询问你是否要继续,因为安装Nginx会占用一些磁盘空间。我们当然选择 "是",然后继续前进。在这一步完成后,将有一个由Nginx驱动的实时Web服务器在Ubuntu服务器上运行。爽啊

如果你想验证这一点,请检查你的EC2实例仪表板,查看这个特定的Ubuntu服务器的细节。找到公共IPv4地址,然后在你选择的网络浏览器中输入该地址。如果你成功了,你会看到熟悉的 "Welcome to nginx!"新Nginx网络服务器的闪屏。

MySQL的安装

好了,Nginx已经关闭,接下来是MySQL。LEMP栈的第二步是让MySQL在Ubuntu服务器上运行。要做到这一点,让我们使用命令sudo apt install mysql-server

sudo apt install mysql-server

注意,与安装Nginx时一样,我们在安装MySQL软件时选择Y。现在我们应该有两个服务在运行,我们可以用service -status-all来检查。

service --status-all

任何前面有 "+"号的服务都意味着它已经安装并正在运行。我们可以看到Nginx和MySQL现在都在良好地运行。

登录到MySQL

为了验证MySQL的安装,让我们使用sudo mysql命令登录。

sudo mysql

在上面的步骤中,我们不需要使用密码,因为Ubuntu上的MySql使用auth_socket进行认证,而不是使用密码。我们很快就会看到如何添加一个用户并配置PHP和MySql一起工作。

安装PHP

从早期开始,PHP已经有了很大的进步,现在已经有了超强的性能和现代的语法,可以满足开发人员的需求。为了安装PHP,我们可以在Ubuntu终端输入sudo apt install php8.1-fpm php-mysql,就像这样。

sudo apt install php8.1-fpm php-mysql

一旦完成,你现在就可以在服务器上运行PHP了。非常好

让PHP和Nginx一起工作

Nginx使用服务器块来保存你想在互联网上提供的网站的信息。通过使用服务器块,如果你选择的话,实际上你可以从LEMP服务器上提供一个以上的域名。通常情况下,在**/var/www/html有一个默认的文件夹,它为一个网站服务。让我们用exampledomain**来配置一个新的网站(用你自己的替换)。

像这样为exampledomain设置一个根目录。

sudo mkdir /var/www/exampledomain

现在,我们可以利用$USER变量,将所有权分配给当前用户。

sudo chown -R $USER:$USER /var/www/exampledomain

现在我们需要在sites-available 目录中为我们的 exampledomain 创建一个配置文件。要做到这一点,我们可以使用nano,一个内置于大多数Linux操作系统的简单文本编辑器。命令是sudo nano /etc/nginx/sites-available/exampledomain

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

你会看到一个空的屏幕,但你要填上细节,如图所示。

server {
    listen 80;
    server_name 

所有这些都准备就绪后,你现在需要保存这个文件。要在nano中这样做,你要使用ctrl+X键。当你按下这个组合键时,你会看到 "保存修改的缓冲区?"的信息。请不要惊慌。按Y键。

然后它会说 "要写入的文件名。/etc/nginx/sites-available/exampledomain"。只要在这里按回车键,文件就会被保存。

激活配置

为了激活配置,我们需要使用一个符号链接。创建符号链接的命令在这里显示。

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

制作上述符号链接并不足以激活新的服务器块。你还必须使用unlink命令来解除默认配置的链接。

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

验证Nginx的语法

为了确保Nginx配置文件中的配置是正确的,我们可以使用sudo nginx -t命令,如果有任何错误,它将显示。如果一切正常,我们会看到语法是OK的,测试也是成功的。

sudo nginx -t

为了使这些改变生效,我们需要使用sudo systemctl reload nginx来重新加载Nginx。

sudo systemctl reload nginx

测试新的服务器块

现在我们已经重启了nginx服务,让我们继续在Web浏览器中访问我们服务器的IP地址或域名。哦,不,我们看到一个403 Forbidden nginx/1.18.0(Ubuntu)的错误。

这到底是怎么回事呢?好吧,我们创建了一个目录来存放exampledomain配置的文件,但是我们从来没有把任何HTML文件放在那里。现在让我们通过放置一个简单的带有简单信息的index.html文件来解决这个问题。使用下面的命令来创建一个新文件。

nano /var/www/exampledomain/index.html

把这个标记放在文件中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello LEMP!</title>
</head>
<body>
    <h1>Hello LEMP!</h1>
</body>
</html>

使用ctrl+X命令来保存这个文件。

在我们选择的目录下有一个有效的index.html文件,我们应该在浏览器中看到一个新的成功的页面显示,当然,这就是我们得到的结果

LEMP正在工作

那PHP呢?

为了看看PHP是否工作,我们可以用这个命令创建一个新的PHP文件。

nano /var/www/exampledomain/hellophp.php

在这个文件中放置这个简单的PHP脚本。

<?php
phpinfo();

保存这个文件后,可以用**http://server\_domain\_or\_IP/hellophp.php**在浏览器中访问它。

你应该看到与下面类似的输出。很好!现在 PHP 也开始工作了。

PHP版本8.1.2
系统Linux ip-172-31-85-143 5.15.0-1011-aws #14-Ubuntu SMP Wed Jun 1 20:54:22 UTC 2022 x86_64
建立日期2022年8月17日 13:08:39
构建系统构建系统
服务器APIFPM/FastCGI
虚拟目录支持禁用
配置文件(php.ini)路径/etc/php/8.1/fpm
已加载的配置文件/etc/php/8.1/fpm/php.ini
扫描此目录以寻找其他的.ini文件/etc/php/8.1/fpm/conf.d
解析的其他.ini文件/etc/php/8.1/fpm/conf.d/10-mysqlnd.ini, /etc/php/8.1/fpm/conf.d/10-opcache.ini, /etc/php/8.1/fpm/conf.d/10-do.ini, /etc/php/8.1/fpm/conf.d/20-calendar.ini, /etc/php/8.1/fpm/conf.d/20-ctype.ini, /etc/php/8.1/fpm/conf。d/20-exif.ini, /etc/php/8.1/fpm/conf.d/20-ffi.ini, /etc/php/8.1/fpm/conf.d/20-fileinfo.ini, /etc/php/8.1/fpm/conf.d/20-ftp.ini, /etc/php/8.1/fpm/conf.d/20-gettext.ini, /etc/php/8.1/fpm/conf.d/20-iconv.ini, /etc/php/8.1/fpm/conf.d/20-mysqli.ini, /etc/php/8.1/fpm/conf.d/20-pdo_mysql.ini, /etc/php/8.1/fpm/conf.d/20-phar.ini, /etc/php/8.1/fpm/conf.d/20-posix.ini, /etc/php/8.1/fpm/conf.d/20-readline.ini, /etc/php/8.1/fpm/conf。d/20-shmop.ini, /etc/php/8.1/fpm/conf.d/20-sockets.ini, /etc/php/8.1/fpm/conf.d/20-sysvmsg.ini, /etc/php/8.1/fpm/conf.d/20-sysvsem.ini, /etc/php/8.1fpm/conf.d/20-sysvshm.ini, /etc/php/8.1fpm/conf.d/20-tokenizer.ini
PHP API20210902
PHP扩展20210902
Zend扩展420210902
Zend扩展构建api420210902,nts
PHP扩展构建api20210902,nts
调试构建没有
线程安全禁用
Zend信号处理已启用
Zend内存管理器已启用
Zend多字节支持禁用
支持IPv6已启用
DTrace支持可用,禁用
已注册的PHP流https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar
已注册的流套接字传输tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
注册流过滤器zlib.*, string.rot13, string.toupper, string.tolower, convert.*, consumed, dechunk, convert.iconv.*
这个程序使用了Zend脚本语言引擎:
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

如何在AWS上安装LEMP栈 摘要

祝贺你!你现在已经有了一个完全可操作的Linux,而且是在AWS上。你现在有一个完全可操作的Linux、Nginx、MySQL和PHP(LEMP)堆栈在AWS EC2实例上运行。让我们再看一下运行中的服务以确认。

service --status-all

要了解更多关于AWS上的LEMP,请查看这些文章。