专栏首页云计算教程系列如何在Debian 9上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)
原创

如何在Debian 9上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

介绍

LEMP软件堆栈是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩写词,带有Nginx Web服务器。后端数据存储在MySQL数据库中,动态处理由PHP处理。

在本指南中,您将使用操作系统提供的软件包在Debian服务器上安装LEMP堆栈。

准备

要完成本指南,您需要一台具有sudo特权的非root用户的Debian 9服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

第1步 - 安装Nginx Web服务器

为了向我们的网站访问者显示网页,我们将采用现代高效的网络服务器Nginx。

我们将用于此过程的所有软件都将直接来自Debian的默认软件包存储库。这意味着我们可以使用apt包管理套件来完成安装。

由于这是我们第一次使用此会话的apt,我们应该从更新本地包索引开始。然后我们可以安装服务器:

sudo apt update
sudo apt install nginx

在Debian 9上,Nginx配置为在安装时开始运行。

如果您运行ufw防火墙,则需要允许连接到Nginx。您应该启用最具限制性的配置文件,该配置文件仍然允许您想要的流量。由于我们尚未为我们的服务器配置SSL,因此在本指南中,我们只需要允许端口80上的流量。

您可以输入以下命令启用此功能:

sudo ufw allow 'Nginx HTTP'

您可以键入以下内容来验证更改:

sudo ufw status

您应该在显示的输出中看到允许的HTTP流量:

Status: 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浏览器中依次尝试每个步骤。

键入您在Web浏览器中收到的地址之一。它应该带你到Nginx的默认登陆页面:

http://your_domain_or_IP

如果您看到上面的页面,则表示您已成功安装Nginx。

第2步 - 安装MySQL以管理站点数据

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

您可以输入以下命令轻松安装:

sudo apt install mysql-server

注意:在Debian 9中,MySQL项目的社区分支--MariaDB - 被打包为默认的MySQL变体。虽然MariaDB在大多数情况下运行良好,但如果您需要仅在Oracle的MySQL中找到的功能,则可以从MySQL开发人员维护的存储库中安装和使用软件包。要安装官方MySQL服务器,请使用我们的教程如何在Debian 9上安装最新的MySQL

现在已安装MySQL数据库软件,但其配置不完整。

为了保护安装,我们可以运行一个安全脚本,询问我们是否要修改一些不安全的默认值。键入以下命令开始脚本:

sudo mysql_secure_installation

系统将要求您输入MySQL root帐户的密码。我们还没有设置它,所以只需点击ENTER。然后,系统会询问您是否要设置该密码。您应该键入y然后设置root密码。

对于脚本要求的其他问题,您应该按y,然后ENTER在每个提示符处按键。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即尊重您所做的更改。

此时,您的数据库系统现已设置并受到保护。我们来设置PHP。

第3步 - 安装PHP进行处理

我们现在已经安装了Nginx以服务我们的页面和安装的MySQL来存储和管理我们的数据。但是,我们仍然没有任何可以生成动态内容的内容。这就是PHP的用武之地。

由于Nginx不像其他一些Web服务器那样包含本机PHP处理,因此我们需要安装fpm,它代表“fastCGI进程管理器”。我们将告诉Nginx将PHP请求传递给该软件进行处理。我们还将安装一个额外的帮助程序包,允许PHP与我们的MySQL数据库后端进行通信。安装将引入必要的PHP核心文件以使其工作。

然后安装php-fpmphp-mysql包:

sudo apt install php-fpm php-mysql

我们现在安装了PHP组件。接下来我们将配置Nginx以使用它们。

第4步 - 配置Nginx以使用PHP处理器

现在我们已经安装了所有必需的组件。我们仍然需要的唯一配置更改是告诉Nginx将我们的PHP处理器用于动态内容。

我们在服务器块级别执行此操作(服务器块类似于Apache的虚拟主机)。我们将单独保留默认的Nginx配置,而是创建一个新的配置文件和新的Web根目录来保存我们的PHP文件。我们将配置文件和目录命名为服务器应响应的域名或主机名。

首先,在/var/www创建一个新目录来保存PHP站点:

sudo mkdir /var/www/your_domain

然后,在Nginx的sites-available目录中打开一个新的配置文件:

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

这将创建一个新的空白文件。粘贴以下简单配置:

server {
    listen 80;
    listen [::]:80;
​
    root /var/www/your_domain;
    index index.php index.html index.htm;
​
    server_name your_domain;
​
    location / {
        try_files $uri $uri/ =404;
    }
​
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }
}

这是一个非常基本的配置,它侦听端口80并从我们刚创建的Web根目录提供文件。它只会响应对server_name之后提供的名称的请求,并且在Nginx将结果发送给用户之前,任何.php结尾的文件都将由进程处理php-fpm

完成自定义后保存并关闭文件。

通过链接到Nginx 的sites-enabled目录中的配置文件来激活您的配置:

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

这将告诉Nginx下次重新加载时使用配置。首先,键入以下内容测试您的配置是否存在语法错误:

sudo nginx -t

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

准备好后,重新加载Nginx进行更改:

sudo systemctl reload nginx

接下来,我们将在新的Web根目录中创建一个文件来测试PHP处理。

第5步 - 创建PHP文件以测试配置

现在应该完全设置您的LEMP堆栈。我们可以测试它以验证Nginx是否可以正确地将.php文件传递给我们的PHP处理器。

我们可以通过在文档根目录中创建测试PHP文件来完成此操作。在文本编辑器中打开文档根目录中调用的新文件info.php

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

在新文件中键入或粘贴以下行。这是有效的PHP代码,它将返回有关我们服务器的信息:

<?php
  phpinfo();
?>

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

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

http://your_domain/info.php

您应该看到PHP生成的网页,其中包含有关您的服务器的信息:

如果您看到一个看起来像这样的页面,那么您已成功使用Nginx设置PHP处理。

在验证Nginx正确呈现页面后,最好删除您创建的文件,因为它实际上可以向未经授权的用户提供有关您的配置的一些提示,这可能有助于他们尝试入侵。

现在,键入以下命令删除文件:

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

如果以后需要,您可以随时重新生成此文件。

结论

您现在应该在Debian服务器上配置LEMP堆栈。这为您为访问者提供Web内容提供了非常灵活的基础。

想要了解更多关于安装Linux,Nginx,MySQL,PHP(LEMP堆栈)的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Debian 9.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 14.04上配置Redis群集

    Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅和自动故障转移等功能。建议将Redis与Linux一起用于...

    温浪
  • 如何在CentOS 7上添加Swap

    使服务器响应更快,并防止应用程序中出现内存不足错误的最简单方法之一是添加一些swap空间。Swap是存储驱动器上的一个区域,操作系统可以在该区域临时存储无法再保...

    温浪
  • 如何在一些Ubuntu服务器上设置Serf集群

    Serf是一种分散的服务编排和服务发现工具。它具有极高的容错能力和分散性,与其他类似工具一样没有单点故障。Serf可用于触发系统集群中的任何事件以及执行监视任务...

    温浪
  • 突发事件!PHP 7 的 PHP-FPM 存在远程代码执行漏洞

    据外媒 ZDNet 的报道 ,PHP 7.x 中最近修复的一个远程代码执行漏洞正被恶意利用,并会导致攻击者控制服务器。编号为 CVE-2019-11043 的...

    猿哥
  • 基于 Nginx + PHP-FPM 作为 HTTP 服务器

    PHP 对 HTTP 请求响应支持非常友好,可以通过 PHP 预定义的超全局变量获取 HTTP 请求数据:

    学院君
  • [CodeIgniter4]故障排除和本地开发服务器

    如果``/mypage/find/apple``类似的URL``/index.php/mypage/find/apple``不起作用,但类似的URL ,则你的`...

    landv
  • php 不用字母,数字和下划线写 shell

    还有这个师傅的 《记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)》

    信安之路
  • php连接mysql数据库的几种方式(mysql、mysqli、pdo)

    php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下...

    wangxl
  • search(11)- elastic4s-模糊查询

    很多时候搜索用户对查询语句具有模糊感觉,他们只能提供大约的描述。比如一个语句的部分,或者字句顺序颠倒等。通过模糊查询可以帮助用户更准确的找出他们希望搜索的结果。

    用户1150956
  • 开发以太坊安卓钱包系列4 - 获取以太及Token余额

    这是如何开发以太坊安卓钱包系列,接上一篇[1]继续展示钱包账号资产信息,这篇来看看如何获取账号的以太余额及Token余额。

    Tiny熊

扫码关注云+社区

领取腾讯云代金券