如何在 Ubuntu 16.04 上安装 Linux、Apache、MySQL 和 PHP (LAMP) 协议栈

介绍

LAMP 堆栈是一组开源软件,通常一起安装,使服务器能够托管动态网站和 Web 应用程序. 这个术语是代表 L inux 操作系统的缩写,与 ** A** pache Web 服务器。

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

前提条件

在您开始使用本指南之前,您应该有一个独立的非root 用户帐户,在您的服务器上设置了sudo权限,您可以通过完成我们(Ubuntu 16.04 初始服务器设置)教程中的步骤 1 至 4 来学习如何做到这一点。

步骤1:安装Apache并调整防火墙

Apache 网页服务器是世界上最受欢迎的网页服务器之一,它经过了很好的记录,并且已经被广泛使用了网页历史的大部分时间,这使得它成为托管网站的绝佳默认选择。

我们可以使用Ubuntu的包管理器apt轻松安装Apache,一个包管理器允许我们从Ubuntu维护的存储库中无痛无痛地安装大多数软件。

对于我们的目的,我们可以通过键入这些命令开始:

1sudo apt-get update
2sudo apt-get install apache2

由于我们正在使用一个sudo命令,这些操作将用 root 权限执行,它将要求您使用常规用户的密码来验证您的意图。

一旦你输入了密码,apt 会告诉你它计划安装哪些软件包,以及它们会占用多少额外的磁盘空间。

设置全球服务器名称以抑制语法警告

接下来,我们会将一个单行添加到 /etc/apache2/apache2.conf 文件中,以抑制一个警告消息. 虽然无害,但如果您不将‘ServerName’ 设置为全球,则在检查您的 Apache 配置时会收到以下警告:

1sudo apache2ctl configtest
1[secondary_label Output]
2AH00558: 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
3Syntax OK

打开主配置文件与您的文本编辑:

1sudo nano /etc/apache2/apache2.conf

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

<$>[注] 注: 如果您不知道服务器的IP地址,请跳下到 [如何找到服务器的公共IP地址](# how-to-find-your-server-39-s-public-ip-address)的部分以找到它。

1[label /etc/apache2/apache2.conf]
2. . .
3ServerName server_domain_or_IP

保存并关闭文件,当你完成。

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

1sudo apache2ctl configtest

由于我们添加了全球的服务器名称指令,你应该看到的是:

1[secondary_label Output]
2Syntax OK

重新启动 Apache 以实现更改:

1sudo systemctl restart apache2

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

调整防火墙以允许网络流量

接下来,假设您遵循最初的服务器设置指示来启用UFW防火墙,请确保您的防火墙允许HTTP和HTTPS流量。

1sudo ufw app list
1[secondary_label Output]
2Available applications:
3  Apache
4  Apache Full
5  Apache Secure
6  OpenSSH

如果你看看Apache Full的配置文件,它应该显示它允许流量到端口80和443:

1sudo ufw app info "Apache Full"
1[secondary_label Output]
2Profile: Apache Full
3Title: Web Server (HTTP,HTTPS)
4Description: Apache v2 is the next generation of the omnipresent Apache web
5server.
6
7Ports:
8  80,443/tcp

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

1sudo ufw allow in "Apache Full"

您可以立即进行点击检查,以验证一切按计划进行,通过访问您的网络浏览器中的服务器的公共IP地址(请参阅下面的标题下面的注释,以了解您的公共IP地址是什么,如果您还没有这些信息):

1http://your_server_IP_address

您将看到默认的Ubuntu 16.04 Apache网页,这是为了信息和测试目的。

Ubuntu 16.04 Apache default

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

查找您的服务器的公共IP地址

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

从命令行,你可以找到几种方法,首先,你可以使用iproute2工具来输入你的地址:

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

这些都是正确的地址,但您的计算机可能只能使用其中一个,所以可以尝试每一个。

另一种方法是使用弯曲实用程序与外部人员联系,告诉您 it 如何看待您的服务器。

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

无论您使用哪种方法获取您的IP地址,您都可以将其输入到您的Web浏览器的地址栏中,到达您的服务器。

第2步:安装MySQL

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

再次,我们可以使用apt来获取和安装我们的软件,这次我们还会安装一些其他辅助包,以帮助我们让我们的组件相互通信:

1sudo apt-get install mysql-server

<$>[note] Note :在这种情况下,您不需要在命令之前运行sudo apt-get update 这是因为我们最近在上面的命令中运行它来安装Apache。

再次,您将看到将安装的包列表,以及他们将占用的磁盘空间的数量。

在安装过程中,您的服务器将要求您为MySQL用户选择并确认密码. 这是MySQL中的管理帐户,具有增加的权限。 考虑它与服务器本身的根帐户相似(您现在正在配置的是MySQL特定的帐户)。

当安装完成时,我们想要运行一个简单的安全脚本,它会删除一些危险的默认值,并稍微阻止访问我们的数据库系统。

1mysql_secure_installation

您将被要求输入您为 MySQL 根帐户设置的密码,接下来,您将被问及是否要配置VALIDATE PASSWORD PLUGIN

<$>[warning] 警告: 启用此功能是一种判断呼叫。如果启用,不符合指定的标准的密码将被MySQL错误拒绝,这将导致问题,如果您与自动配置MySQL用户凭证的软件一起使用弱密码,如Ubuntu软件包为phpMyAdmin。安全地将验证禁用,但您应该始终使用强有力的、独特的数据库凭证密码。

答案 y 是的,或任何其他继续不允许。

1VALIDATE PASSWORD PLUGIN can be used to test passwords
2and improve security. It checks the strength of password
3and allows the users to set only those passwords which are
4secure enough. Would you like to setup VALIDATE PASSWORD plugin?
5
6Press y|Y for Yes, any other key for No:

请记住,如果您输入 2 ,对于最强的级别,您将收到错误,当您尝试设置任何不包含数字,顶部和底部字母和特殊字符的密码,或基于常见字典单词的密码。

1There are three levels of password validation policy:
2
3LOW Length >= 8
4MEDIUM Length >= 8, numeric, mixed case, and special characters
5STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
6
7Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

如果您启用了密码验证,将显示现有根密码的密码强度,并询问您是否想要更改该密码。

1Using existing password for root.
2
3Estimated strength of the password: 100
4Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

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

此时,您的数据库系统已设置,我们可以继续前进。

步骤三:安装PHP

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

我们还将包括一些辅助包,以便PHP代码可以在Apache服务器下运行,并与我们的MySQL数据库进行交谈:

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

这应该安装PHP没有任何问题,我们会在一瞬间测试它。

目前,如果用户从服务器上请求一个目录,Apache首先会搜索一个名为index.html的文件。

要做到这一点,请输入此命令以在具有 root 权限的文本编辑器中打开 dir.conf 文件:

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

它将看起来像这样:

1[label /etc/apache2/mods-enabled/dir.conf]
2<IfModule mod_dir.c>
3    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
4</IfModule>

我们想将上面提到的PHP索引文件移动到DirectoryIndex规格之后的第一个位置,如下:

1[label /etc/apache2/mods-enabled/dir.conf]
2<IfModule mod_dir.c>
3    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
4</IfModule>

当你完成时,通过按 Ctrl-X 来保存和关闭文件,你需要通过键入 ** Y** 来确认保存,然后按 ** Enter** 来确认保存文件的位置。

此后,我们需要重新启动 Apache Web 服务器,以便我们的更改被识别。

1sudo systemctl restart apache2

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

1sudo systemctl status apache2
 1[secondary_label Sample Output]
 2 apache2.service - LSB: Apache2 web server
 3   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
 4  Drop-In: /lib/systemd/system/apache2.service.d
 5           └─apache2-systemd.conf
 6   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
 7     Docs: man:systemd-sysv-generator(8)
 8  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
 9  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
10    Tasks: 6 (limit: 512)
11   CGroup: /system.slice/apache2.service
12           ├─13623 /usr/sbin/apache2 -k start
13           ├─13626 /usr/sbin/apache2 -k start
14           ├─13627 /usr/sbin/apache2 -k start
15           ├─13628 /usr/sbin/apache2 -k start
16           ├─13629 /usr/sbin/apache2 -k start
17           └─13630 /usr/sbin/apache2 -k start
18
19Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
20Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
21Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
22Apr 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
23Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
24Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

安装 PHP 模块

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

要查看 PHP 模块和库的可用选项,您可以将apt-cache 搜索的结果引导到less,这是一个页面,允许您滚动其他命令的输出:

1apt-cache search php- | less

使用箭头键向上和向下滚动,和 q 停止。

结果是您可以安装的所有可选组件. 它将为您提供每个组件的简短描述:

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

要获取有关每个模块的更多信息,您可以搜索互联网,或者您可以通过键入查看包的长篇描述:

1apt-cache show package_name

将有大量的输出,一个名为Description-en的字段将对模块提供的功能提供更长的解释。

例如,要找出「php-cli」模块的功能,我们可以输入以下内容:

1apt-cache show php-cli

除了大量的其他信息,你会发现一些看起来像这样的东西:

 1[secondary_label Output]
 2
 3Description-en: command-line interpreter for the PHP scripting language (default)
 4 This package provides the /usr/bin/php command interpreter, useful for
 5 testing PHP scripts from a shell or performing general shell scripting tasks.
 6 .
 7 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 8 open source general-purpose scripting language that is especially suited
 9 for web development and can be embedded into HTML.
10 .
11 This package is a dependency package, which depends on Debian's default
12 PHP version (currently 7.0).
13

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

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

1sudo apt-get install php-cli

如果您想安装多个模块,您可以通过按照apt-get install命令列出每个模块,分隔一个空间,如下:

1sudo apt-get install package1 package2 ...

此时,您的 LAMP 堆栈已安装和配置,我们仍然应该测试我们的 PHP。

步骤 4 – 在您的 Web 服务器上测试 PHP 处理

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

我们将这个脚本命名为info.php。为了让Apache找到该文件并正确地服务它,它必须保存到一个非常特定的目录,称为 web root

在Ubuntu 16.04 中,此目录位于 /var/www/html/,我们可以通过键入:

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

我们希望将以下文本,即有效的PHP代码,放入文件中:

1[label info.php]
2<?php
3phpinfo();
4?>

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

现在我们可以测试我们的网页服务器是否可以正确地显示由PHP脚本生成的内容. 要尝试,我们只需要在我们的网页浏览器中访问这个页面。

您想访问的地址将是:

1http://your_server_IP_address/info.php

您访问的页面应该看起来像这样的东西:

Ubuntu 16.04 default PHP info

此页面基本上为您提供从PHP的角度了解您的服务器的信息,这对于调试和确保您的设置得到正确应用是有用的。

如果这是成功的,那么你的PHP正按预期运作。

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

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

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

结论

现在你安装了 LAMP 堆栈,你有许多选择,下一步要做什么. 基本上,你已经安装了一个平台,允许你在你的服务器上安装大多数类型的网站和网络软件。

作为下一步,您应该通过通过HTTPS服务确保连接到您的Web服务器,这里最简单的选择是使用Let's Encrypt(https://andsky.com/tech/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04),以保护您的网站使用免费的TLS/SSL证书。

其他一些流行的选择是:

Published At
Categories with 技术
comments powered by Disqus