如何在Ubuntu16.04上安装Linux、Apache、MySQL、PHP(LAMP)堆栈

来自菜鸟教程
跳转至:导航、​搜索

介绍

LAMP 堆栈是一组开源软件,通常安装在一起以使服务器能够托管动态网站和 Web 应用程序。 该术语是一个首字母缩写词,代表 Linux 操作系统,带有 Apache Web 服务器。 站点数据存储在 MySQL 数据库中,动态内容由 PHP 处理。

在本指南中,我们将在 Ubuntu 16.04 服务器上安装 LAMP 堆栈。 Ubuntu 将满足我们的第一个要求:Linux 操作系统。

先决条件

在开始阅读本指南之前,您应该在您的服务器上设置一个具有 sudo 权限的单独的非 root 用户帐户。 您可以通过完成我们的 Ubuntu 16.04 初始服务器设置中的步骤 1-4 来了解如何执行此操作。

第 1 步 — 安装 Apache 并调整防火墙

Apache Web 服务器是世界上最流行的 Web 服务器之一。 它有据可查,并且在网络的大部分历史中都被广泛使用,这使其成为托管网站的绝佳默认选择。

我们可以使用 Ubuntu 的包管理器 apt 轻松安装 Apache。 包管理器允许我们从 Ubuntu 维护的存储库中轻松安装大多数软件。 您可以在此处了解有关 如何使用 apt 的更多信息。

出于我们的目的,我们可以通过键入以下命令开始:

sudo apt-get update
sudo apt-get install apache2

由于我们使用的是 sudo 命令,因此这些操作以 root 权限执行。 它会要求您提供常规用户的密码以验证您的意图。

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

设置全局 ServerName 以抑制语法警告

接下来,我们将在 /etc/apache2/apache2.conf 文件中添加一行以禁止显示警告消息。 虽然无害,但如果您没有全局设置 ServerName,则在检查 Apache 配置是否存在语法错误时会收到以下警告:

sudo apache2ctl configtest
OutputAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

使用文本编辑打开主配置文件:

sudo nano /etc/apache2/apache2.conf

在里面,在文件的底部,添加一个 ServerName 指令,指向您的主域名。 如果您没有与您的服务器关联的域名,您可以使用您的服务器的公共 IP 地址:

注意:如果你不知道你的服务器的IP地址,请跳到如何找到你的服务器的公共IP地址部分找到它。


/etc/apache2/apache2.conf

. . .
ServerName server_domain_or_IP

完成后保存并关闭文件。

接下来,通过键入以下内容检查语法错误:

sudo apache2ctl configtest

由于我们添加了全局 ServerName 指令,您应该看到的是:

OutputSyntax OK

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

sudo systemctl restart apache2

您现在可以开始调整防火墙。

调整防火墙以允许 Web 流量

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

sudo ufw app list
OutputAvailable applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

如果您查看 Apache Full 配置文件,它应该显示它启用了到端口 80 和 443 的流量:

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

允许此配置文件的传入流量:

sudo ufw allow in "Apache Full"

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

http://your_server_IP_address

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

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

查找服务器的公共 IP 地址

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

从命令行,您可以通过几种方式找到它。 首先,您可以使用 iproute2 工具通过键入以下内容获取您的地址:

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

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

另一种方法是使用 curl 实用程序联系外部方,告诉您 it 如何查看您的服务器。 您可以通过询问特定服务器您的 IP 地址是什么来做到这一点:

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

无论您使用何种方法获取 IP 地址,您都可以在 Web 浏览器的地址栏中键入它以访问您的服务器。

第 2 步 — 安装 MySQL

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

同样,我们可以使用 apt 来获取和安装我们的软件。 这一次,我们还将安装一些其他“帮助”包,这些包将帮助我们让我们的组件相互通信:

sudo apt-get install mysql-server

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


同样,您将看到将要安装的软件包的列表,以及它们将占用的磁盘空间量。 输入 Y 继续。

在安装过程中,您的服务器将要求您选择并确认 MySQL“root”用户的密码。 这是 MySQL 中具有更高权限的管理帐户。 可以将其视为类似于服务器本身的 root 帐户(但是,您现在正在配置的是 MySQL 特定帐户)。 确保这是一个强大的、唯一的密码,不要留空。

安装完成后,我们希望运行一个简单的安全脚本,该脚本将删除一些危险的默认设置并稍微锁定对我们数据库系统的访问。 通过运行启动交互式脚本:

mysql_secure_installation

您将被要求输入您为 MySQL root 帐户设置的密码。 接下来会询问您是否要配置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

如果您启用了密码验证,您将看到现有根密码的密码强度,并询问您是否要更改该密码。 如果您对当前密码感到满意,请在提示符处输入 n 表示“否”:

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 立即尊重我们所做的更改。

至此,您的数据库系统现已设置完毕,我们可以继续。

第 3 步 — 安装 PHP

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

我们可以再次利用 apt 系统来安装我们的组件。 我们还将包含一些帮助程序包,以便 PHP 代码可以在 Apache 服务器下运行并与我们的 MySQL 数据库通信:

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

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

在大多数情况下,我们希望修改 Apache 在请求目录时提供文件的方式。 目前,如果用户向服务器请求目录,Apache 将首先查找名为 index.html 的文件。 我们想告诉我们的 Web 服务器更喜欢 PHP 文件,所以我们会让 Apache 首先查找 index.php 文件。

为此,请键入以下命令以在具有 root 权限的文本编辑器中打开 dir.conf 文件:

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

我们还可以使用 systemctl 检查 apache2 服务的状态:

sudo systemctl status apache2
Sample Output● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 6 (limit: 512)
   CGroup: /system.slice/apache2.service
           ├─13623 /usr/sbin/apache2 -k start
           ├─13626 /usr/sbin/apache2 -k start
           ├─13627 /usr/sbin/apache2 -k start
           ├─13628 /usr/sbin/apache2 -k start
           ├─13629 /usr/sbin/apache2 -k start
           └─13630 /usr/sbin/apache2 -k start

Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

安装 PHP 模块

为了增强 PHP 的功能,我们可以选择安装一些附加模块。

要查看 PHP 模块和库的可用选项,您可以将 apt-cache search 的结果通过管道传输到 less,这是一个分页器,可以让您滚动浏览其他命令的输出:

apt-cache search php- | less

使用箭头键上下滚动,q退出。

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

libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:

要获取有关每个模块功能的更多信息,您可以搜索互联网,也可以通过键入以下内容查看软件包的详细说明:

apt-cache show package_name

将会有很多输出,其中一个名为 Description-en 的字段将对模块提供的功能进行更长的解释。

例如,要找出 php-cli 模块的作用,我们可以输入:

apt-cache show php-cli

连同大量其他信息,您会发现如下所示的内容:

Output…
Description-en: 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 Debian's default
 PHP version (currently 7.0).
…

如果在研究之后,您决定要安装一个软件包,您可以像我们为其他软件所做的那样使用 apt-get install 命令来安装。

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

sudo apt-get install php-cli

如果要安装多个模块,可以通过在 apt-get install 命令之后列出每个模块,以空格分隔,如下所示:

sudo apt-get install package1 package2 ...

至此,您的 LAMP 堆栈已安装并配置完毕。 不过,我们仍然应该测试我们的 PHP。

第 4 步 — 在您的 Web 服务器上测试 PHP 处理

为了测试我们的系统是否为 PHP 正确配置,我们可以创建一个非常基本的 PHP 脚本。

我们将此脚本称为 info.php。 为了让 Apache 找到并正确提供文件,它必须保存到一个非常具体的目录,称为 web 根目录

在 Ubuntu 16.04 中,此目录位于 /var/www/html/。 我们可以通过键入以下内容在该位置创建文件:

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

这将打开一个空白文件。 我们想将以下文本(有效的 PHP 代码)放入文件中:

信息.php

<?php
phpinfo();
?>

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

现在我们可以测试我们的 Web 服务器是否可以正确显示 PHP 脚本生成的内容。 要尝试这个,我们只需要在我们的网络浏览器中访问这个页面。 您将再次需要服务器的公共 IP 地址。

您要访问的地址将是:

http://your_server_IP_address/info.php

你来到的页面应该是这样的:

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

如果这成功了,那么您的 PHP 正在按预期工作。

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

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

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

结论

现在您已经安装了 LAMP 堆栈,接下来您有很多选择。 基本上,您已经安装了一个平台,该平台允许您在服务器上安装大多数类型的网站和 Web 软件。

作为紧接着的下一步,您应该确保通过 HTTPS 提供与您的 Web 服务器的连接是安全的。 这里最简单的选择是 使用 Let's Encrypt 使用免费的 TLS/SSL 证书来保护您的网站。

其他一些流行的选择是: