LAMP(Linux、Apache、MySQL 和 PHP)堆栈是构建动态网站的最常用方法之一。LAMP 堆栈使用成熟可靠的开源软件作为构建块,并已成为包括 WordPress、Facebook 和维基百科在内的各种项目的基石。了解如何安装和配置 LAMP 堆栈是 Linux 管理员和 Web 开发人员等人的一项重要技能。
为了帮助您掌握 LAMP 堆栈,在本文中,我们将为您提供有关如何在 Ubuntu 20.04 上安装和配置基本 LAMP 堆栈的分步教程。作为奖励,我们将回顾 Tasksel 如何帮助您加快流程。
什么是 LAMP 堆栈?
LAMP 堆栈是一组用于 Web 开发的四个流行开源组件。
LAMP 首字母缩略词中的每个字母代表其中一个组件:
- L inux是堆栈中的操作系统。
- pache 是堆栈中的Web服务器。
- MySQL是堆栈中的数据库。
- P HP 是堆栈中的编程语言。
有了这些组件,Web 开发人员便拥有了构建可提供动态内容的 Web 应用程序所需的所有组件。Linux 充当安装其他组件的基础层,Apache 提供 HTTP(S) 页面,MySQL 允许数据持久化,而 PHP 允许开发人员将 Web 服务器和数据库层连接在一起并创建动态站点。例如,PHP 可以从网络表单中获取数据并对 MySQL 数据库执行 CRUD(创建、读取、更新、删除)操作。
LAMP 规定了开发人员应使用的 Web 服务器、数据库和编程语言,但 Linux 发行版具有灵活性。Ubuntu、Debian、RHEL 和 CentOS/Rocky Linux 是 LAMP 堆栈中使用的一些最常见的发行版,但这主要是一个偏好问题。
此外,传统 LAMP 堆栈还有很多替代方案。例如,一些开发人员在他们的技术栈中使用P ython 或P erl 而不是 PHP。同样,有些人使用 nginx(发音为“engine x”)而不是 Apache 来制作 LEMP 堆栈,或者用不同的数据库或数据持久层(如 PostgreSQL)代替 MySQL。还有更根本不同的 LAMP 替代方案,如 MEAN(M ongoDB、E xpress.js、A ngular.js、N ode.js)。
如何使用 Tasksel 快速安装 LAMP 堆栈
我们将在下面逐步介绍安装每个单独的 LAMP 堆栈组件的过程,如果您是第一次配置 LAMP 堆栈,我们建议您遵循该过程。但是,如果您正在寻找一种快速开始在 Ubuntu 或 Debian 上运行的方法,请考虑使用Tasksel。Tasksel 是一款帮助 Linux 管理员同时安装多个相关包的工具,它只需一个命令即可安装 LAMP 堆栈所需的 Apache、MySQL 和 PHP 组件。
要使用 Tasksel 为您的 LAMP 堆栈安装 Apache、MySQL 和 PHP 组件,请遵循以下过程:
- 安装任务选择器
sudo apt install tasksel -y
- 使用Tasksel安装lamp-server
sudo tasksel install lamp-server
安装后lamp-server,您应该会看到 Apache2、MySQL 和 PHP 都已安装在您的服务器上。
如何在 Ubuntu 20.04 上安装 Linux、Apache、MySQL 和 PHP(LAMP 堆栈)
Ubuntu 的 LTS(长期支持)版本是 LAMP 堆栈中使用的一些最常见的 Linux 操作系统。在此过程中,我们将使用 Ubuntu 20.04 LTS 安装和配置工作的 LAMP 堆栈。
先决条件:
在我们开始之前,您需要:
- 访问 Ubuntu 20.04 系统的终端。如果您没有,可以在Cherry Servers上启动一个虚拟专用服务器。
- 须藤/根权限
运行 Apt 更新
首先,让我们apt用这个命令更新我们的包列表和存储库:
sudo apt update
你应该看到类似这样的输出:
安装阿帕奇
接下来,使用apt以下命令安装 Apache Web 服务器:
sudo apt install apache2 -y
安装 MySQL
接下来,我们将在服务器上安装 MySQL。要深入了解 MySQL 安装和配置过程(包括有关强化安装的信息),请查看如何在 Ubuntu 20.04 上安装和配置 MySQL。
对于我们的 LAMP 堆栈安装过程的这一步,运行此命令来安装 MySQL 服务器包:
apt install mysql-server -y
您可以通过运行以下命令来验证您的 MySQL 安装:
mysql -V
输出应类似于:
安装PHP
现在我们可以安装 LAMP 堆栈的脚本语言。具体来说,我们将安装 3 个包:
- php是PHP脚本语言的默认包
- libapache2-mod-php是 Apache 的 PHP 模块
- php-mysql是 MySQL 的 PHP 模块
要安装所有 3 个包,请运行以下命令:
sudo apt install php libapache2-mod-php php-mysql -y
您可以通过运行以下命令来验证您的 PHP 安装:
php -v
输出应类似于:
[可选] 配置防火墙
默认情况下,Ubuntu 的简单防火墙 akaufw被禁用。您可以启用ufw以实施防火墙策略并帮助保护您的系统。如果您选择ufw禁用,则可以跳过此步骤。
如果您不确定ufw系统是否已启用,可以使用以下命令检查其状态:
sudo ufw status
如果启用,您可以允许三个与 Apache 相关ufw的可用应用程序(在 的输出中列出)通过防火墙:sudo ufw app list
- Apache将仅允许 TCP 端口 80(默认 HTTP)上的流量
- Apache Secure将仅允许 TCP 端口 443(默认 HTTPS)上的流量
- Apache Full将允许 TCP 端口 80 和 443 上的流量
对于我们的示例,将允许使用以下命令在 TCP 端口 80 和 443 上到 Apache 的入站流量:
sudo ufw allow in "Apache Full"
您应该看到类似于以下内容的输出:
Rule added Rule added (v6)
检查 Apache 测试页
使用网络浏览器访问http://<your server's IP>(其中 <your server's IP> 是您的 Ubuntu 机器的 IP 地址)。
您应该会看到默认的 Apache2 Ubuntu 默认页面。
配置并启用您的虚拟主机
安装所有 LAMP 堆栈组件后,您现在可以在后续步骤中继续测试 PHP 处理和 MySQL 连接。默认情况下,Apache 将在 中提供网页/var/www/html,这对于简单站点来说可能就足够了。
但是,Apache 虚拟主机允许您在单个服务器上创建多个站点,并且是 Apache Web 服务器管理中的一个重要概念。因此,让我们按照以下步骤为我们的网站创建一个虚拟主机:
注意:我们将命名我们的站点cherryservers.local。但是,您可以替换cherryservers.local为任何其他 Apache 虚拟主机名。
- 禁用默认虚拟主机:
sudo a2dissite 000-default.conf
- 将000-default.confApache 配置文件复制到一个新/etc/apache2/sites-available/cherryservers.local.conf文件:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/cherryservers.local.conf
- 使用文本编辑器如nano或vim编辑etc/apache2/sites-available/cherryservers.local.conf以包含这些设置:
<Directory /var/www/html/cherryservers.local/public> Require all granted </Directory> <VirtualHost *:80> ServerName cherryservers.local ServerAlias www.cherryservers.local ServerAdmin pepperandegg@localhost DocumentRoot /var/www/html/cherryservers.local/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- DocumentRoot从文件创建目录cherryservers.local.conf:
sudo mkdir -p /var/www/html/cherryservers.local/public
- 使www-data目录及其内容的用户和组所有者:
sudo chown -R www-data:www-data /var/www/html/cherryservers.local/public
- 授予www-data用户对目录及其内容的读取、写入和执行权限,并授予其他所有人读取和执行权限:
sudo chmod -R 755 /var/www/html/cherryservers.local/public
- 将新站点链接到您的 Apache sites-enabled:
sudo a2ensite cherryservers.local
- 重新加载 Apache 网络服务器:
sudo systemctl reload apache2
提供一个 Test.php 页面
接下来,让我们提供一个简单的test.php页面来演示 PHP 正在我们的网站上运行。
- 使用像nano或这样的文本编辑器vim来创建一个/var/www/html/cherryservers.local/public/test.php包含以下内容的新文件:
<?php phpinfo();
- 使用网络浏览器访问http://<your server's IP>/test.php(其中 <your server's IP> 是您的 Ubuntu 机器的 IP 地址)。您应该会看到一个显示类似于以下 PHP 信息的页面:
为 PHP 配置 MySQL 数据库访问
现在,让我们创建一个测试 MySQL 数据库并为 PHP 配置一个用户来访问它。
- 启动 MySQL:
sudo mysql
- 在mysql>提示符下,创建一个testDB数据库:
CREATE DATABASE testDB;
- 创建一个 MySQL 用户phpUser,其密码为password(替换password为强密码):
CREATE USER 'phpUser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
4.授予phpUser用户对testDB数据库的全部权限:
GRANT ALL ON testDB.* TO 'phpUser'@'%';
- 在中创建一个breakfastMenu表testDB
CREATE TABLE testDB.breakfastMenu(food VARCHAR(50), description VARCHAR(255));
- 向表中添加一些测试数据breakfastMenu:
INSERT INTO testDB.breakfastMenu(food, description) VALUES ('Pepper and Egg With Giardiniera', 'Great Way To Start The Day');
- 退出 MySQL:
exit
测试 PHP 和 MySQL
最后,我们可以创建一个 PHP 脚本来显示 MySQL 数据库中的数据。
- 使用文本编辑器创建一个/var/www/html/cherryservers.local/public/cherry.php包含此内容的新 PHP 脚本(确保更改您的“密码”以匹配您之前配置的 MySQL 密码):
<?php $DBconnect=mysqli_connect("localhost","phpUser","password","testDB"); $result = mysqli_query($DBconnect,"SELECT * FROM breakfastMenu"); while($row = mysqli_fetch_array($result)) print_r($row['food']); mysqli_close($DBconnect); ?>
- 使用网络浏览器访问http://<your server's IP>/cherry.php(其中 <your server's IP> 是您的 Ubuntu 机器的 IP 地址)。您应该会看到一个页面,其中显示了food我们之前插入到数据库中的值,类似于:
结论
而已!现在您在 Ubuntu 20.04 系统上有了一个工作的 LAMP 堆栈。从这里,您可以删除我们的测试 .php 脚本并继续进一步强化您的系统——例如,通过配置 Apache 以使用 HTTPS——并为您的站点创建动态内容。