介绍

“LAMP”堆栈是一组开源软件,通常安装在一起以使服务器能够托管动态网站和 Web 应用程序。该术语实际上是其表示的缩写大号 inux下操作系统,与 帕什web服务器。该网站的数据存储在一个中号 ySQL数据库,和动态内容通过处理P HP。

在本指南中,我们将在 Ubuntu 18.04 服务器上安装 LAMP 堆栈。

先决条件

为了完成本教程,您需要有一个 Ubuntu 18.04 服务器,它有一个非 root sudo用户帐户和一个基本防火墙配置。要进行设置,您可以按照我们针对 Ubuntu 18.04 的初始服务器设置指南进行操作

步骤 1 — 安装 Apache 和更新防火墙

Apache Web 服务器是一种流行的开源 Web 服务器,可与 PHP 一起使用来托管动态网站。它有据可查,并且在 Web 的大部分历史中都被广泛使用。

首先,确保您的 apt缓存已更新:

sudo apt update

复制

如果这是您第一次 sudo在此会话中使用,系统会提示您提供常规用户的密码以验证您的权限。

缓存更新后,您可以使用以下命令安装 Apache:

sudo apt install apache2

复制

输入此命令后,apt将告诉您它计划安装哪些软件包以及它们将占用多少额外的磁盘空间。按 Y并点击 ENTER确认,安装将继续。

调整防火墙以允许 Web 流量

接下来,假设您已遵循初始服务器设置说明并启用了 UFW 防火墙,请确保您的防火墙允许 HTTP 和 HTTPS 流量。您可以检查 UFW 是否具有 Apache 的应用程序配置文件,如下所示:

sudo ufw app list

复制

OutputAvailable applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

如果您查看 Apache Full配置文件详细信息,您会看到它启用到端口的流量 80443

sudo ufw app info "Apache Full"

复制

OutputProfile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

要允许此服务器的传入 HTTP 和 HTTPS 流量,请运行:

sudo ufw allow "Apache Full"

复制

您可以通过在 Web 浏览器中访问服务器的公共 IP 地址立即进行抽查以验证一切是否按计划进行(如果您没有此信息,请参阅下一个标题下的注释以了解您的公共 IP 地址是什么已经):

http://your_server_ip

您将看到默认的 Ubuntu 18.04 Apache 网页,该网页用于提供信息和测试目的。它应该是这样的:

Ubuntu 18.04 Apache 默认

如果您看到此页面,则您的 Web 服务器现在已正确安装并可通过防火墙访问。

如何查找服务器的公共 IP 地址

如果您不知道服务器的公共 IP 地址是什么,可以通过多种方法找到它。通常,这是您用于通过 SSH 连接到服务器的地址。

有几种不同的方法可以从命令行执行此操作。首先,您可以使用这些 iproute2工具通过键入以下内容来获取您的 IP 地址:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

复制

这会给你两到三行。它们都是正确的地址,但您的计算机可能只能使用其中之一,因此请随意尝试每一个。

另一种方法是使用该 curl实用程序联系外部方,告诉您 如何看待您的服务器。这是通过询问特定服务器您的 IP 地址来完成的:

sudo apt install curl
curl http://icanhazip.com

复制

无论您使用何种方法获取 IP 地址,都可以在 Web 浏览器的地址栏中输入它以查看默认的 Apache 页面。

第 2 步 – 安装 MySQL

现在您已经启动并运行了 Web 服务器,是时候安装 MySQL 了。MySQL是一个数据库管理系统。基本上,它将组织并提供对您的站点可以存储信息的数据库的访问。

再次,用于 apt获取和安装此软件:

sudo apt install mysql-server

复制

注意 :在这种情况下,您不必 sudo apt update在命令之前运行。这是因为您最近在上面的命令中运行它来安装 Apache。您计算机上的包索引应该已经是最新的。

此命令也将向您显示将安装的软件包列表,以及它们将占用的磁盘空间量。输入 Y继续。

安装完成后,运行一个简单的安全脚本,该脚本预先安装了 MySQL,它将删除一些危险的默认值并锁定对数据库系统的访问。通过运行以下命令启动交互式脚本:

sudo mysql_secure_installation

复制

这将询问您是否要配置 VALIDATE PASSWORD PLUGIN.

注意: 启用此功能是一种判断。如果启用,与指定条件不匹配的密码将被 MySQL 拒绝并出现错误。如果您将弱密码与自动配置 MySQL 用户凭据的软件(例如 phpMyAdmin 的 Ubuntu 软件包)结合使用,这将导致问题。禁用验证是安全的,但您应该始终为数据库凭据使用强且唯一的密码。

回答 Y是,或其他任何不启用就继续的问题。

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

如果您回答“是”,系统会要求您选择密码验证级别。请记住,如果您输入 2最强级别,则在尝试设置任何不包含数字、大小写字母和特殊字符或基于常用词典单词的密码时,您将收到错误消息。

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

无论您是否选择设置 VALIDATE PASSWORD PLUGIN,您的服务器接下来都会要求您选择并确认 MySQL root 用户的密码。这不要与系统 root 混淆。该数据库根 用户是在数据库系统完全权限的管理用户。尽管 MySQL root 用户的默认身份验证方法不使用密码,即使设置 了密码,您也应该在此处定义强密码作为额外的安全措施。稍后我们将讨论这个问题。

如果您启用了密码验证,您将看到您刚刚输入的 root 密码的密码强度,您的服务器将询问您是否要更改该密码。如果您对当前密码感到满意,请 N在提示符处输入“no”:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

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

完成后,通过键入以下命令测试您是否能够登录 MySQL 控制台:

sudo mysql

复制

这将作为管理数据库用户root 连接到 MySQL 服务器,这是通过 sudo运行此命令时的使用推断出来的。你应该看到这样的输出:

OutputWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

要退出 MySQL 控制台,请键入:

exit

复制

请注意,即使您在运行脚本时定义了密码,也无需提供密码即可以root 用户身份进行连接 mysql_secure_installation。那是因为管理 MySQL 用户的默认身份验证方法 unix_socket不是 password. 尽管起初这看起来像是一个安全问题,但它使数据库服务器更加安全,因为唯一允许以 MySQL 用户身份登录的用户是具有 sudo 权限的系统用户,这些用户从控制台或通过运行的应用程序连接相同的特权。实际上,这意味着您将无法使用管理数据库root 用户从 PHP 应用程序进行连接。为root设置密码MySQL 帐户可作为保护措施,以防默认身份验证方法从 更改 unix_socketpassword

为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在您的服务器上托管多个数据库。有关如何创建 MySQL 用户和配置数据库访问权限的详细说明,请参阅我们关于如何在 MySQL 上创建新用户和授予权限的指南。

您的 MySQL 服务器现已安装并受到保护。接下来,我们将安装 PHP,LAMP 堆栈中的最后一个组件。

第 3 步 – 安装 PHP

PHP 是您设置的组件,它将处理代码以显示动态内容。它可以运行脚本,连接到您的 MySQL 数据库以获取信息,并将处理后的内容交给您的 Web 服务器,以便它可以向您的访问者显示结果。

再次利用 apt系统安装PHP。除了 php包之外,您还需要 libapache2-mod-php将 PHP 集成到 Apache,以及 php-mysql允许 PHP 连接到 MySQL 数据库的包。运行以下命令来安装所有三个包及其依赖项:

sudo apt install php libapache2-mod-php php-mysql

复制

这应该安装 PHP 没有任何问题。我们稍后会对此进行测试。

更改 Apache 的目录索引(可选)

在某些情况下,您需要修改 Apache 在请求目录时提供文件的方式。目前,如果用户从服务器请求目录,Apache 将首先查找名为 index.html. 我们想告诉 Web 服务器 index.php优先选择 PHP 文件而不是其他文件,让 Apache 首先查找文件。如果不这样做,index.html放置在应用程序文档根目录中的文件将始终优先于 index.php文件。

要进行此更改,请 dir.conf在您选择的文本编辑器中打开 配置文件。在这里,我们将使用 nano

sudo nano /etc/apache2/mods-enabled/dir.conf

复制

它看起来像这样:

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

复制

将 PHP 索引文件(上面突出显示)移动到 DirectoryIndex规范后的第一个位置,如下所示:

/etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

复制

完成后,按 保存并关闭文件 CTRL+X。通过键入确认保存 Y,然后点击 ENTER以验证文件保存位置。

之后,重新启动 Apache Web 服务器,以便识别您的更改。您可以使用以下命令执行此操作:

sudo systemctl restart apache2

复制

您也可以检查的状态 apache2使用的服务 systemctl

sudo systemctl status apache2

复制

Sample Output● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago
 Main PID: 3719 (apache2)
    Tasks: 55 (limit: 2361)
   CGroup: /system.slice/apache2.service
           ├─3719 /usr/sbin/apache2 -k start
           ├─3721 /usr/sbin/apache2 -k start
           └─3722 /usr/sbin/apache2 -k start

Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di
Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Q退出此状态输出。

安装 PHP 扩展(可选)

要扩展 PHP 的功能,您可以选择安装一些附加模块。要查看 PHP 模块和库的可用选项,请将结果通过管道传送 apt searchless,这是一个分页器,可让您滚动浏览其他命令的输出:

apt search php- | less

复制

使用箭头键上下滚动,然后按 Q退出。

结果是您可以安装的所有可选组件。它会给你一个简短的描述:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php-l10n
…
:

要详细了解每个模块的作用,您可以在 Internet 上搜索有关它们的更多信息。或者,通过键入以下内容查看包的详细说明:

apt show package_name

复制

将有很多输出,其中一个字段被调用 Description,它将对模块提供的功能进行更长的解释。

例如,要了解 php-cli模块的作用,您可以键入:

apt show php-cli

复制

除了大量其他信息外,您还会发现如下所示的内容:

Output…
Description: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Ubuntu's default
 PHP version (currently 7.2).
…

如果经过研究,您决定要安装一个软件包,您可以 apt install像使用其他软件一样使用命令来安装。

如果你决定这 php-cli是你需要的东西,你可以输入:

sudo apt install php-cli

复制

如果你想安装多个模块,你可以按照 apt install命令列出每个模块,用空格分隔,如下所示:

sudo apt install package1 package2 ...

复制

此时,您的 LAMP 堆栈已安装和配置。在您执行任何其他操作之前,我们建议您设置一个 Apache 虚拟主机,您可以在其中存储服务器的配置详细信息。

步骤 4 — 设置虚拟主机(推荐)

使用 Apache Web 服务器时,您可以使用虚拟主机 (类似于 Nginx 中的服务器块)来封装配置详细信息并从单个服务器托管多个域。我们将设置一个名为your_domain 的域,但您应该将其替换为您自己的域名 。要了解有关使用 DigitalOcean 设置域名的更多信息,请参阅我们的DigitalOcean DNS 简介

Ubuntu 18.04 上的 Apache 默认启用了一个服务器块,该块被配置为从 /var/www/html目录提供文档。虽然这适用于单个站点,但如果您托管多个站点,它可能会变得笨拙。/var/www/html让我们 /var/wwwyour_domain 站点创建一个目录结构,而不是修改,/var/www/html如果客户端请求与任何其他站点不匹配,则保留作为默认目录提供服务。

your_domain 创建目录,如下所示:

sudo mkdir /var/www/your_domain

复制

接下来,使用 $USER引用当前登录用户的环境变量分配目录的所有权:

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

复制

如果你没有修改它的 umask 值,你的 web 根目录的权限应该是正确的,但你可以通过键入:

sudo chmod -R 755 /var/www/your_domain

复制

接下来,index.html使用 nano您最喜欢的编辑器创建一个示例页面:

nano /var/www/your_domain/index.html

复制

在里面,添加以下示例 HTML:

/var/www/your_domain/index.html

<html>
    <head>
        <title>Welcome to Your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

复制

完成后保存并关闭文件。

为了让 Apache 提供这些内容,有必要使用正确的指令创建一个虚拟主机文件。与其 /etc/apache2/sites-available/000-default.conf直接修改位于 at 的默认配置文件,不如创建一个新的 at :/etc/apache2/sites-available/<span class="highlight">your_domain</span>.conf

sudo nano /etc/apache2/sites-available/your_domain.conf

复制

粘贴以下配置块,它与默认配置块类似,但针对我们的新目录和域名进行了更新:

/etc/apache2/sites-available/your_domain.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

复制

请注意,我们已将 更新 DocumentRoot为我们的新目录和your_domain站点管理员可以访问 ServerAdmin的电子邮件。我们还添加了两个指令:,它建立应该与此虚拟主机定义匹配的基本域,以及,它定义应该匹配的其他名称,就好像它们是基本名称一样。ServerName`ServerAlias`

完成后保存并关闭文件。

让我们使用该 a2ensite工具启用该文件:

sudo a2ensite your_domain.conf

复制

禁用中定义的默认站点 000-default.conf

sudo a2dissite 000-default.conf

复制

接下来,让我们测试一下配置错误:

sudo apache2ctl configtest

复制

您应该看到以下输出:

OutputSyntax OK

重新启动 Apache 以实现您的更改:

sudo systemctl restart apache2

复制

Apache 现在应该为您的域名提供服务。您可以通过导航到 进行测试,您应该在其中看到如下内容:http://<span class="highlight">your_domain</span>

Apache 虚拟主机示例

这样,您的虚拟主机就完全设置好了。但是,在进行更多更改或部署应用程序之前,主动测试您的 PHP 配置会很有帮助,以防出现任何应该解决的问题。

步骤 5 — 在您的 Web 服务器上测试 PHP 处理

为了测试您的系统是否针对 PHP 进行了正确配置,请创建一个名为 info.php. 为了让 Apache 找到这个文件并正确地提供它,它必须保存到您的 Web 根目录中。

通过运行以下命令在您在上一步中创建的 Web 根目录创建文件:

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

复制

这将打开一个空白文件。在文件中添加以下文本,这是有效的 PHP 代码:

/var/www/your_domain/info.php

<?php
phpinfo();

复制

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

现在您可以测试您的 Web 服务器是否能够正确显示此 PHP 脚本生成的内容。要尝试此操作,请在您的 Web 浏览器中访问此页面。您将再次需要服务器的公共 IP 地址或域名。

您要访问的地址是:

http://your_domain/info.php

您访问的页面应如下所示:

Ubuntu 18.04 默认 PHP 信息

此页面从 PHP 的角度提供了有关您的服务器的一些基本信息。它对于调试和确保正确应用您的设置很有用。

如果您可以在浏览器中看到此页面,则您的 PHP 正在按预期工作。

您可能希望在此测试后删除此文件,因为它实际上可能会将有关您的服务器的信息提供给未经授权的用户。为此,请运行以下命令:

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

复制

如果您稍后需要再次访问该信息,您可以随时重新创建此页面。

结论

现在您已经安装了 LAMP 堆栈,接下来您有很多选择。您已经安装了一个平台,可以让您在服务器上安装大多数类型的网站和网络软件。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

插入图片