如何搭建 PHP 开发环境(Apache+PHP+MySQL)配置安装教程

A kitten
蒋川
B 端产品经理,卡拉云联合创始人
阅读时长 2 分钟

如何搭建 PHP 开发环境(Apache+PHP+MySQL)配置安装教程

PHP 开发环境的安装包括 Apache、MySQL 及 PHP,这是一台可以托管 PHP 网站服务器的基本配置。后续卡拉云教程还会为大家讲解构建在 PHP 上面的 MySQL 管理软件 phpMyAdmin 等。都需要首先搭建 PHP 开发环境。

本文是卡拉云系列教程,我们会详细讲解如何在 Ubuntu 服务器上安装 Apache、MySQL 及 PHP。最终实现通过浏览器访问服务器中的 PHP 页面,这个 PHP 页面会把 MySQL 数据库中的数据展示在网页上。

先决条件

在跟随本教程学习前,请准备好一台 Linux 服务器,我们将在这台服务器上,一起完成 PHP 环境搭建及部署网站。

第一步:安装 Apache ,更新防火墙配置

Apache Web 是全球最受欢迎的 Web Server 之一,另一个可与之抗衡的是 Nginx Web Server(点击查看《如何在 Ubuntu 上安装 Nginx 服务 - 实现多站点、多域名托管》)。本教程将手把手带领大家安装 Apache

登录你的 Linux 服务器,更新 apt 列表

sudo apt update

然后执行安装 apache 命令开始安装。

sudo apt install apache2

01-install-apache2.png

系统会询问你是否安装,选择 Y ,然后回车确认开始安装 Apache

安装完成后,调整服务器防火墙,允许 HTTP 访问。我们先看看 ufw 有哪些配置文件:

sudo ufw app list

你会看到这样的输出:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

以下是每个配置文件的含义:

  • Apache:这个配置文件仅打开 80 端口。
  • Apache Full:这个配置文件打开 80 端口和 443 端口(TLS/SSL)。
  • Apache Secure:这个配置文件仅打开 443 端口(TLS/SSL)。

为了教程简便,我们先打开 80 端口,允许服务器与外界通过 HTTP 协议通讯:

sudo ufw allow in "Apache"

我们来看一下防火墙的状态

sudo ufw status

02-ufw-status.png

如果状态显示为:inactive,说明防火墙的规则并没有启用,可用以下代码启用:

sudo ufw enable

这时,你已经可以通过你的浏览器对你的服务器进行访问了。

http://your_server_ip

下图为 Ubuntu Apache 默认页面,如果你的服务器可以正常访问,可以看到这个画面。

03-Apache-web.jpg

看到此画面说明 Apache 及服务器防火墙都设置正确了。本教程案例在虚拟机上的 Ubuntu 20.04 上搭建,所以浏览器中的地址为内网 IP 地址。

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

如果你不知道自己服务器的 IP 地址,可通过以下代码找到服务器的公网 IP。

curl http://icanhazip.com

至此,Apache 就安装完成了,接着我们来安装 MySQL 数据库。

第 2 步:安装 MySQL

上一步我们已经安装并运行了 Web Server ,接着我们来安装 MySQL 数据库,数据库可用来存放网站内的数据。MySQL 是 PHP 开发环境中最常用的数据库。

直接 apt 安装 MySQL

sudo apt install mysql-server

选择 Y 开始安装。

安装完成后,建议您运行 MySQL 预安装的安全脚本。此脚本将删除一些不安全的默认设置并锁定对数据库系统的访问。通过运行以下命令启动交互式脚本:

MySQL 安装完成后,我们来运行内置的安全脚本,开始配置 MySQL:

sudo mysql_secure_installation

安全脚本会询问你一系列关于 MySQL 安全配置的问题:

04-mysql-secure-installation.png

这里询问我们是否配置VALIDATE PASSWORD PLUGIN 插件。

这个插件是 MySQL 5.6 之后有的,它可用于提高 RDS MySQL 数据库实例的安全性。此插件通过使用数据库实例的数据库参数组中的参数,来实施密码策略。也就是说,会审核你的密码强度是否符合配置中设定的密码强度。

这里选择 Y 继续。

05-password-validation.png

密码强度插件把密码分为 3 个强度等级,如果选择最强,当用户修改或新增用户密码时,设置的弱密码,服务器会报错并不通过密码修改。

06-Estimated-strength-of-the-password.png

这里我设置了「大写字母+小写字母+数字+符号」的密码,密码强度显示为 100

接着我们继续回答安全脚本的问题:

07-default-MySQL.png

其余问题,都可以选择 Y ,主要是删除匿名用户、测试数据库、禁用远程 root 登录等规则。

完成后,我们就可以登录 MySQL Server 控制台了:

sudo mysql

登录成功后,显示以下内容:

root@kalacloud.com:~$ sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.26-0ubuntu0.20.04.2 (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>

好,我们输入 exit 退出 MySQL

exit

特别提示:我们刚刚明明设置的 root 的密码,为什么这里登录 MySQL 没有让我们输入 root 用户的密码呢?这是因为我们正在使用 unix_socket 不是 password 登录方式。在 MySQL 8.0 中,新增了一种插件认证方式caching_sha2_authentication,这个我们会在本教程后面提到。

第 3 步:安装 PHP

到这里,我们已经安好了 Apache 用于 Web Server ,然后有安装好了 MySQL 用来存储和管理应用的数据。接着,我们来安装 PHP ,它用于处理 PHP 代码,向用户显示动态内容。除了 PHP 之外,我们还要 安装 php-mysql,它可以让 PHP 与 MySQL 数据库通讯。然后我们还要启用libapache2-mod-php 来处理 PHP 文件。

要安装这些软件包,请运行:

sudo apt install php libapache2-mod-php php-mysql
root@kalacloud.com:~$ sudo apt install php libapache2-mod-php php-mysql

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libapache2-mod-php7.4 php-common php7.4 php7.4-cli php7.4-common php7.4-json php7.4-mysql
  php7.4-opcache php7.4-readline
Suggested packages:
  php-pear
The following NEW packages will be installed:
  libapache2-mod-php libapache2-mod-php7.4 php php-common php-mysql php7.4 php7.4-cli php7.4-common
  php7.4-json php7.4-mysql php7.4-opcache php7.4-readline
0 upgraded, 12 newly installed, 0 to remove and 209 not upgraded.
Need to get 4143 kB of archives.
After this operation, 18.5 MB of additional disk space will be used.

Do you want to continue? [Y/n] Y

Y 开始安装。

安装完成后,我们可以通过以下命令查看 PHP 版本

php -v
root@kalacloud.com:~$ php -v

PHP 7.4.3 (cli) (built: Aug 13 2021 05:39:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

至此,整个 PHP 开发环境就已经全部配置好了,接着我们来搭建一个简单的网站,让网页调取数据库中的数据,通过 Apache 显示在浏览器中。

第 4 步 - 为你的网站创建虚拟主机

使用 Apache Web Server 时,我们可以创建虚拟主机(类似于 Nginx 中的服务器块)来在单个服务器中托管多个域。在本教程中,我们使用 kalacloud.com 作为范例,你可以将下文中所有kalacloud.com 改为你自己的域名。

Ubuntu 上的 Apache 默认启用了一个服务器块,目录指向/var/www/html,这个默认配置适合单站点,如果要在服务器上托管多站点,多域名的话,可以按以下配置进行设置。

kalacloud.com域名创建目录,多站点托管,可以每个网站建一个对应的目录:

sudo mkdir /var/www/kalacloud.com

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

sudo chown -R $USER:$USER /var/www/kalacloud.com

然后,使用编辑器,在这里为刚刚我们新建的目录配置一个配置文件“

sudo nano /etc/apache2/sites-available/kalacloud.com.conf

然后,复制粘贴以下配置,这个块的配置与默认块的配置相似,但针对我们的新目录和域名进行了更新:

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

CTRL+X 保存退出编辑器。

VirtualHost配置文件告诉 Apache Server 我们使用[kalacloud.com](https://kalacloud.com) 作为 Web 的根目录,如果你暂时不想将域名指向服务器,可以先按照教程的文档写,后续也可以用服务器 IP 进行访问。

现在我们可以使用a2ensite来启用新的虚拟主机:

sudo a2ensite kalacloud.com
root@kalacloud.com:~$ sudo a2ensite kalacloud.com

Enabling site kalacloud.com.
To activate the new configuration, you need to run:
  systemctl reload apache2

root@kalacloud.com:~$

使用 a2dissite 禁用 Apache 的默认网站:

sudo a2dissite 000-default
root@kalacloud.com:~$ sudo a2dissite 000-default

Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

root@kalacloud.com:~$

要确保我们刚刚填写的配置文件不包含语法错误:

sudo apache2ctl configtest
root@kalacloud.com:~$ sudo apache2ctl configtest
Syntax OK

最后,重新加载 Apache 以使这些更改生效:

sudo systemctl reload apache2

我们的刚刚配置的新网站已经激活,但网站根目录还没有东西,我们要在这个这里创建一个可访问的网页,以便我们可以测试我们刚刚配置的虚拟主机是否可用:

sudo nano /var/www/kalacloud.com/index.html

在此文件中包含以下内容:

<html>
  <head>
    <title>KalaCloud.com</title>
  </head>
  <body>
    <h2>Welcom to kalacloud.com!</h2>
    <p><strong><a href="https://kalacloud.com/?utm_source=cool">kalacloud</a></strong> is so cool. </p>
  </body>
</html>

现在我们可以通过指向服务器的域名或这服务器自己的 IP 地址进行访问

http://server_domain_or_IP/index.html

你会看到一个这样的页面:

09-index-html.jpg

如果你看到此页面,则表示你的 Apache 虚拟主机已经正确配置并已经启用。

Apache DirectoryIndex 的设置

在 Apache 中 DirectoryIndex 用于配置根目录下优先访问哪个文件的设置。我们可以根据自己的需求,对它进行调整。默认情况下 *.html 优先于 *.php 的文件先被访问。当根目录下没有*.html 再访问 *.php 文件。

接下来,我们来一起修改,让 *.php优先于 *.html 首先访问。

编辑/etc/apache2/mods-enabled/dir.conf文件,在DirectoryIndex 里,将index.php 提前到 index.html之前。

sudo nano /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

保存并关闭文件后,您需要重新加载 Apache 以使更改生效:

sudo systemctl reload apache2

在下一步中,我们将创建一个 PHP 脚本,测试 PHP 是否在你的服务器上正确安装和配置。

第 5 步:在 Web 服务器上测试 PHP

我们在上一步自定义了托管网站的根目录,现在我们在这个根目录里创建一个 PHP 文件:

sudo nano /var/www/kalacloud.com/info.php

在这个空白文件中添加以下文本:

**<?php** phpinfo();

保存并关闭文件。

接下来,我们使用浏览器打开这个 info.php 文件:

http://server_domain_or_IP/info.php

你会看到一个类似这样的页面:

10-info-php.jpg

这个页面是关于你服务器的关键信息,这些信息对前期调试服务器很有帮助。如果你可以在浏览器中看到此页面,那么说明 PHP 已经正常运行。

好,现在我们要把这个文件删掉,这些信息非常敏感,我们不能把这个页面放在服务器上,这会造成严重的安全隐患,使用 rm 命令删除这个文件:

sudo rm /var/www/kalacloud.com/info.php

第 6 步:搭建一个可以访问数据库的 PHP 页面

接着我们一起来搭建一个可以直接访问数据库的 PHP 页面,这个页面可调用数据库中的数据,再将这些数据显示在浏览器中的网页里。

在本示例中,我们先创建一个数据库kalacloud_database,再创建一个用户名 kalacloud

你可以根据自己的需求,修改这两个名字。

首先,使用 root 帐户连接到 MySQL 控制台:

sudo mysql

在 mysql> 下,创建数据库:

CREATE DATABASE kalacloud_database;

返回值:


mysql> CREATE DATABASE kalacloud_database;
Query OK, 1 row affected (0.02 sec)

mysql>

接着,我们创建一个新用户,然后授权数据库权限给它。

我们创建一个 kalacloud 用户,然后使用mysql_native_password作为它的验证方式,给它设置一个密码。还记得本教程最开始,你初始化 MySQL 数据库时,选择的密码强度选项吗?我们需要给这个用户名一个强密码:

CREATE USER 'kalacloud'@'%' IDENTIFIED WITH mysql_native_password BY '6Ysce*j7';

现在我们需要授予此用户对kalacloud_database数据库的权限:

GRANT ALL ON kalacloud_database.* TO 'kalacloud'@'%';

我们只赋予kalacloud用户对kalacloud_database数据库的完全权限,它不能访问数据库中的其他库,以保证数据库安全。

mysql> CREATE USER 'kalacloud'@'%' IDENTIFIED WITH mysql_native_password BY '6Ysce*j7';
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT ALL ON kalacloud_database.* TO 'kalacloud'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>

现在退出 MySQL:

exit

你可以通过再次登录 MySQL 来测试新用户是否具有适当的权限:

mysql -u kalacloud -p

-p 是要求使用密码登录。我们可以输入刚刚创建kalacloud时,你设置的密码。

SHOW DATABASES;

确认kalacloud 确实可以访问kalacloud_database 数据库:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kalacloud_database |
+--------------------+
2 rows in set (0.02 sec)

接下来,我们将创建一个名为 todo_list 的测试表:

CREATE TABLE kalacloud_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);

返回值:

mysql> CREATE TABLE kalacloud_database.todo_list (
    -> item_id INT AUTO_INCREMENT,
    -> content VARCHAR(255),
    -> PRIMARY KEY(item_id)
    -> );
Query OK, 0 rows affected (0.03 sec)

在测试表中插入几行内容。一会我们要通过 PHP 调用这些数据展示在网页上:

INSERT INTO 
kalacloud_database.todo_list (content) 
VALUES 
("Visit the Kalacloud.com WebSite"),
("Learn to use kalacloud"),
("Build internal tools with kalacloud"),
("and this one more thing");

确认数据已成功保存到表中:

SELECT * FROM kalacloud_database.todo_list;

返回值:

11-todo-list.png

确认测试数据已经存入表中,然后我们退出 MySQL:

exit

现在,我们来创建一个 PHP 文件,用于把数据库中的数据展示在网页上:

sudo nano /var/www/kalacloud.com/todo_list.php

以下 PHP 脚本连接到 MySQL 数据库并查询 todo_list 表中的代码。如果数据库连接有问题,就会返回异常。一般都是密码写错了,请大家仔细检查。

将以下内容复制到todo_list.php文件中:

**<?php** $user = "kalacloud";
$password = "6Ysce*j7";
$database = "kalacloud_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>";
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

保存退出 nano 编辑器。

您现在可以通过访问为您的网站配置的域名或公共 IP 地址,然后在您的 Web 浏览器中访问此页面:

现在,我们在浏览器中访问服务器 IP 或域名,后面加上/todo_list.php 地址:

http://your_domain_or_IP/todo_list.php

你应该会看到一个这样的页面,内容是刚刚我们添加到数据库中的数据:

todo-list-php

如果你看到上面的内容,说明我们 PHP 已经顺利读取数据库中的内容。

总结

至此,我们已经完成在 Linux 上配置 PHP 开发环境的工作,已经顺利运行起 Apache、MySQL、PHP 三个组建。在这套环境中,我们已经可进行 PHP 的基础开发工作。也欢迎大家跟随卡拉云教程继续学习。

卡拉云是一套低代码开发工具,可一键接入包括 MySQL 在内的常见数据库及 API。无需繁琐的前段开发,只需要简单拖拽,即可快速搭建企业内部工具。数月的开发工作量,使用卡拉云后可缩减至数天,欢迎免费试用卡拉云

如果你还有什么疑问,欢迎一起讨论。我的微信 HiJiangChuan。更多数据库相关教程可访问 卡拉云 查看。

卡拉云联合创始人蒋川

有关 MySQL 教程,可继续拓展学习:

© 2021 卡拉云 Built with ❤️ in Beijing

京ICP备15049164号-9