安装 Apache、MySQL、PHP(LAMP 堆栈)在 Ubuntu 20.04 LTS 上

LAMP 堆栈是一种流行的开源 Web 开发平台,可用于运行和部署动态网站和基于 Web 的应用程序。 通常,LAMP 堆栈包括 Apache 网络服务器、MariaDB/MySQL 数据库、PHP/Python/Perl 编程语言。 LAMP 是 Linux 的缩写, Apache、MariaDB/MYSQL、PHP/Python/Perl。 本分步教程介绍了怎样安装 Apache, MySQL, PHP (LAMP stack) on Ubuntu 20.04 LTS server edition。

内容

  1. 安装 Apache、MySQL、PHP(LAMP 堆栈)在 Ubuntu 20.04 LTS 上
    1. 1.安装 Apache Ubuntu 中的网络服务器
      1. 1.1. 允许 Apache 通过UFW防火墙的网络服务器
      2. 1.2. 测试 Apache 网络服务器
    2. 2. 在 Ubuntu 中安装 MySQL
      1. 2.1. 为 Mysql 设置数据库管理用户(root)密码
      2. 2.2. 更改 MySQL root 用户的身份验证方法
    3. 3. 在 Ubuntu 中安装 PHP
      1. 3.1. 测试 PHP
      2. 3.2. 安装 PHP 模块

安装 Apache、MySQL、PHP(LAMP 堆栈)在 Ubuntu 20.04 LTS 上

出于本教程的目的,我们将使用以下 Ubuntu 系统。

  • 操作系统 : Ubuntu 20.04 LTS 服务器版
  • IP地址 : 192.168.225.52/24

首先,让我们安装 Apache 服务器。

1.安装 Apache Ubuntu 中的网络服务器

首先,使用命令更新 Ubuntu 服务器:

$ sudo apt update
$ sudo apt upgrade

接下来,安装 Apache 网络服务器:

$ sudo apt install apache2

检查是否 Apache Web 服务器是否正在运行,命令如下:

$ sudo systemctl status apache2

示例输出将是:

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabl>
     Active: active (running) since Fri 2020-05-29 07:02:26 UTC; 25s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 23996 (apache2)
      Tasks: 55 (limit: 2283)
     Memory: 5.1M
     CGroup: /system.slice/apache2.service
             ├─23996 /usr/sbin/apache2 -k start
             ├─23998 /usr/sbin/apache2 -k start
             └─23999 /usr/sbin/apache2 -k start

May 29 07:02:26 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
May 29 07:02:26 ubuntuserver apachectl[23981]: AH00558: apache2: Could not reliably det>
May 29 07:02:26 ubuntuserver systemd[1]: Started The Apache HTTP Server.

恭喜! Apache 服务已启动并运行!

1.1. 允许 Apache 通过UFW防火墙的网络服务器

UFW, 代表 复杂的 F愤怒all,是一个用于管理 netfilter 防火墙的程序,旨在易于使用。 默认情况下,UFW 在所有 Ubuntu 版本中都可用。

默认情况下, Apache 如果您在 Ubuntu 20.04 LTS 中启用了 UFW 防火墙,则无法从远程系统访问 Web 浏览器。 您必须允许 httphttps 端口,请按照下面给出的步骤操作。

首先,使用以下命令列出 Ubuntu 系统上可用的应用程序配置文件:

$ sudo ufw app list

示例输出:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

如你看到的, Apache 和 OpenSSH 应用程序已安装 UFW 配置文件。 您可以使用以下命令列出有关每个配置文件及其包含的规则的信息 ufw app info "Profile Name" 命令。

让我们来看看 “Apache Full” 配置文件使用命令:

$ sudo ufw app info "Apache Full"

示例输出:

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

Ports:
80,443/tcp

正如你看到的, "Apache Full" 配置文件包含了启用端口流量的规则 80443.

现在,运行以下命令以允许传入 HTTPHTTPS 此配置文件的流量:

$ sudo ufw allow in "Apache Full"

您将看到如下输出:

Rules updated
Rules updated (v6)

如果你不想让 https 交通,但只有 http (80) 交通,运行:

$ sudo ufw app info "Apache"

1.2. 测试 Apache 网络服务器

现在,打开您的网络浏览器并访问 Apache 通过导航到测试页面 https://localhost/ 或者 https://IP-Address/.

如果您看到“Apache 2 Ubuntu 默认页面”如下图所示,一切顺利。 Apache 服务器正在工作!

测试 Apache 网络服务器

2. 在 Ubuntu 中安装 MySQL

要在 Ubuntu 上安装 MySQL,请运行:

$ sudo apt install mysql-server

使用命令验证 MySQL 服务是否正在运行:

$ sudo systemctl status mysql

示例输出:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 07:15:22 UTC; 2min 8s ago
   Main PID: 25242 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2283)
     Memory: 323.7M
     CGroup: /system.slice/mysql.service
             └─25242 /usr/sbin/mysqld

May 29 07:15:16 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 07:15:22 ubuntuserver systemd[1]: Started MySQL Community Server.

正如您在上面的输出中看到的,MySQL 正在运行!

2.1. 为 Mysql 设置数据库管理用户(root)密码

默认情况下,MySQL root 用户密码为空。 不建议为数据库管理帐户使用空密码。 您需要通过运行以下脚本来保护您的 MySQL 服务器:

$ sudo mysql_secure_installation

系统会询问您是否要设置 "VALIDATE PASSWORD" 组件与否。 该组件允许用户为数据库凭据配置强密码。 如果启用,它将自动检查密码的强度并强制用户只设置那些足够安全的密码。 禁用它是安全的. 但是,您必须对数据库凭据使用强且唯一的密码。 如果您不想启用此组件,只需按任意键跳过密码验证部分并继续其余步骤。

Enter y 如果你想设置 VALIDATE PASSWORD 成分:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT 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 component?

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

如果你的答案是 是的,系统会要求您选择密码验证级别。 可用的密码验证是 低的, 中等的强的. 只需输入适当的数字(0 表示低,1 表示中,2 表示强密码)并按 ENTER 键。

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: 0

现在,输入 MySQL 的密码 root 用户。 请注意 MySQL 必须使用密码 root user 取决于您在上一步中选择的密码策略。 如果您没有启用该插件,只需使用您选择的任何强且唯一的密码即可。

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

输入两次密码后,您将看到密码强度(在我们的例子中是 100)。 如果没问题,请按 Y 继续使用提供的密码。 如果对密码长度不满意,请按任意其他键并设置强密码。 我对当前密码没问题,所以我选择了 y.

对于其余的问题,只需键入 y 并击中 ENTER. 这将删除匿名用户,禁止 root 用户远程登录并删除测试数据库。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

完毕! 我们已经设置了 MySQL root 用户的密码。

2.2. 更改 MySQL root 用户的身份验证方法

默认情况下,MySQL root 用户设置为使用 auth_socket Ubuntu 上从 MySQL 5.7 和更新版本开始的插件。 尽管它增强了安全性,但当您使用任何外部程序访问数据库服务器时,它也会使事情复杂化,例如 example phpMyAdmin。 要解决此问题,您需要将身份验证方法从 auth_socket 更改为 caching_sha2_password 或者 mysql_native_password.

从 MySQL 8.0 版本开始,首选和默认的身份验证插件是 caching_sha2_password. 这 caching_sha2_password 身份验证插件提供了比 mysql_native_password 插入。

要更改身份验证插件,请使用以下命令登录到您的 MySQL 提示符:

$ sudo mysql

或者,

$ mysql -u root -p

Enter MySQL root 我们在上一步中设置的密码。

在 mysql 提示符下运行以下命令以查找所有 MySQL 用户帐户的当前身份验证方法:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

示例输出:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�[email protected]>[email protected] | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
在 Ubuntu 中查找所有 mysql 用户帐户的当前身份验证方法

如您所见,mysql root 用户使用 auth_socket 用于身份验证的插件。

改变 auth_socket 插入 caching_sha2_password, 在 MySQL 提示符下运行以下命令。 如果您已启用 VALIDATE PASSWORD 插件,请确保您根据当前的策略要求使用了强密码。 强应该由至少 8 个字符组成,包括大写字母、小写字母、数字和特殊字符。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

代替 Password123#@! 在上述命令中使用您选择的强而唯一的密码。

使用命令更新更改:

mysql> FLUSH PRIVILEGES;

现在使用命令检查当前的身份验证插件是否已更改:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

示例输出:

检查mysql中的当前身份验证插件检查mysql中当前的身份验证插件

好的! 现在的 MySQL root 用户可以使用密码进行身份验证以访问 MySQL shell。

Exit 从 MySQL 提示:

mysql> exit

笔记:

虽然 caching_sha2_password 插件提供了增强的安全加密,但它与现有的 MySQL 安装存在一些兼容性问题。 有关详细信息,请参阅 这个链接. 如果您遇到任何兼容性问题,则需要设置 mysql_native_password 插件作为默认身份验证插件。

改为 mysql_native_password 插件,在 MySQL 提示符下运行以下命令。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

使用命令更新更改:

mysql> FLUSH PRIVILEGES;

现在再次检查身份验证方法是否已更改或未使用命令:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

示例输出:

查找所有 mysql 用户帐户的当前身份验证方法查找所有 MySQL 用户帐户的当前身份验证方法

Exit 从 mysql 提示:

mysql> exit

3. 在 Ubuntu 中安装 PHP

要安装 PHP,请运行:

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

安装PHP后,创建 info.php 文件在 Apache 根文档文件夹。 通常情况下, Apache 根文档文件夹将是 /var/www/html/ 或者 /var/www/ 在大多数基于 Debian 的 Linux 发行版中。 在 Ubuntu 20.04 LTS 中,它是 /var/www/html/.

让我们创造 info.php apache根文件夹中的文件:

$ sudo vi /var/www/html/info.php

添加以下几行:

<?php
phpinfo();
?>

ESC 键和类型 :wq 保存并退出文件。 重启apache服务使更改生效。

$ sudo systemctl restart apache2

3.1. 测试 PHP

打开您的网络浏览器并导航到 https://IP-address/info.php 网址。

您将看到 php 信息,例如版本、服务器 API 和所有启用的 php 插件的详细信息。

Ubuntu 20.04 中的 php 信息页面PHP测试页面

通常,当用户从 Web 服务器请求目录时, Apache 将首先查找名为的文件 index.html. 如果你想改变 Apache 要提供 php 文件而不是其他文件,请移动 index.php 排在第一位 dir.conf 文件如下图

$ sudo vi /etc/apache2/mods-enabled/dir.conf

这是上面文件的内容。

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

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

移动 index.php 归档到 第一的. 进行更改后,您的 dir.conf 文件将如下所示。

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

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

ESC 键和类型 :wq 保存和 close 文件。 重新开始 Apache 服务使更改生效。

$ sudo systemctl restart apache2

3.2. 安装 PHP 模块

为了改进 PHP 的功能,您可以安装一些额外的 PHP 模块。

要列出可用的 PHP 模块,请运行:

$ sudo apt-cache search php- | less

示例输出:

列出 Ubuntu 中可用的 PHP 模块列出 Ubuntu 中可用的 PHP 模块

使用箭头键浏览结果。 要退出,请键入 q.

要查找任何特定 php 模块的详细信息,例如 example php-gd, 跑:

$ sudo apt-cache show php-gd

要安装 php 模块,请运行:

$ sudo apt install php-gd

不要忘记重新启动 Apache 安装php模块后的服务。 要检查模块是否已加载,请在浏览器中打开 info.php 文件并检查它是否存在。

恭喜! 如您所见,在 Ubuntu 20.04 LTS 上安装 apache、mysql、php(LAMP 堆栈)非常容易。 您现在可以开始使用 LAMP 堆栈托管您的网站。

阅读下一篇:

  • 在 Ubuntu 20.04 LTS 上使用 LAMP 堆栈安装 phpMyAdmin

相关阅读:

  • 在 Ubuntu 20.04 LTS 上安装 Nginx、MySQL、PHP(LEMP 堆栈)
  • 安装 Apache, MariaDB, PHP (LAMP Stack) 在 CentOS 8 中