在Ubuntu 18.04 LTS上安装Apache,MySQL,PHP(LAMP)堆栈

时间:2020-03-21 11:45:16  来源:igfitidea点击:

LAMP 堆栈是一个流行的开源Web开发平台,可用于运行和部署动态和基于Web的应用程序。
通常, LAMP 堆栈由Apache WebServer,MariadB/MySQL数据库,PHP/Python/Perl编程语言组成。
灯是Linux,Mariadb/MySQL,PHP/Python/Perl的首字母缩略词。
本教程介绍如何在Ubuntu 18.04 LTS服务器中安装Apache,MySQL,PHP(Lamp Stack)。

在Ubuntu 18.04 LTS上安装Apache,MySQL,PHP(LAMP)堆栈

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

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

1.安装Apache Web服务器

首先,使用命令更新Ubuntu Server:

$sudo apt update
$sudo apt upgrade

接下来,安装Apache Web服务器:

$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: en
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Tue 2019-02-05 10:48:03 UTC; 1min 5s ago
 Main PID: 2025 (apache2)
    Tasks: 55 (limit: 2320)
   CGroup: /system.slice/apache2.service
           ├─2025 /usr/sbin/apache2 -k start
           ├─2027 /usr/sbin/apache2 -k start
           └─2028 /usr/sbin/apache2 -k start
Nov 05 10:48:02 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
Nov 05 10:48:03 ubuntuserver apachectl[2003]: AH00558: apache2: Could not reliably
Nov 05 10:48:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.

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

1.1调整防火墙以允许Apache Web服务器

缺省情况下,如果我们在Ubuntu 18.04 LTS中启用了UFW防火墙,则无法从远程系统访问Apache Web浏览器。
我们必须按照以下步骤允许HTTP和HTTPS端口。

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

$sudo ufw app list

示例输出:

Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

如我们所见,Apache和OpenSSH应用程序已安装UFW配置文件。
我们可以使用"UFW app Info"配置文件名称"命令列出有关每个配置文件及其附带规则的信息。

让我们查看"Apache完整"配置文件。
为此,运行:

$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完整"配置文件包含规则,以使流量能够向端口80和443提供:

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

$sudo ufw allow in "Apache Full"
Rules updated
Rules updated (v6)

如果我们不想允许HTTPS流量,但只有HTTP(80)流量,运行:

$sudo ufw app info "Apache"

1.2测试Apache Web服务器

现在,通过导航到http://localhost /或者http://IP-Address /来打开Web浏览器和访问Apache测试页面。

如果我们看到上面的屏幕,那么我们很高兴。
Apache服务器正在工作!

2.安装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: enab
Active: active (running) since Tue 2019-02-05 11:07:50 UTC; 17s ago
Main PID: 3423 (mysqld)
Tasks: 27 (limit: 2320)
CGroup: /system.slice/mysql.service
└─3423 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
Nov 05 11:07:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
Nov 05 11:07:50 ubuntuserver systemd[1]: Started MySQL Community Server.

mysql正在运行!

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

默认情况下,MySQL root用户密码为空。
我们需要通过运行以下脚本来保护MySQL服务器:

$sudo mysql_secure_installation

我们将被问到是否要安装验证密码插件。
此插件允许用户配置数据库凭据的强密码。
如果已启用,它将自动检查密码的强度,并强制执行用户只设置足够安全的密码。
留下此插件是安全的。
但是,我们必须使用强大而独特的数据库凭据密码。
如果不想启用此插件,只需按任意键即可跳过密码验证部分并继续其余步骤。

如果答案是肯定的,我们将被要求选择密码验证级别。

Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
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 y

可用的密码验证低,中等和强。
只需输入适当的数字(0为低,为中频为1,为强密码),然后点击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:

现在,输入MySQL root用户的密码。
请注意,我们必须根据我们在上一步中选择的密码策略使用MySQL root用户的密码。
如果我们没有启用插件,只需使用我们选择的任何强大和唯一密码。

Please set the password for root here.
New password:
Re-enter new password:
Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

一旦我们输入了两次密码,我们将看到密码强度(在我们的情况下为50)。
如果它对我们可以,请按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用户将使用MySQL 5.7中的Auth_socket插件和Ubuntu上的较新版本进行身份验证。
即使它增强了安全性,它也将使用任何外部程序访问数据库服务器时,它也将复杂化,例如PHPMyAdmin。
要修复此问题,我们需要将Auth_socket更改为MySQL_Native_Password的身份验证方法。
为此,请使用命令登录MySQL提示符:

$sudo mysql

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

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

示例输出:

+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *F126737722832701DD3979741508F05FA71E5BA0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

如我们所见,MySQL root用户使用"auth_socket"插件进行身份验证。

要将此身份验证更改为mysql_native_password方法,请在mysql提示符下运行以下命令。
不要忘记用我们选择的强大和独特密码替换"密码"。
如果我们已启用验证插件,请确保根据当前的策略要求使用强密码。

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

使用命令更新更改:

FLUSH PRIVILEGES;

现在,如果已更改身份验证方法或者不使用命令,请再次检查:

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

示例输出:

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

退出MySQL提示符:

exit

3.安装PHP.

要安装PHP,请运行:

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

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

让我们在Apache根文件夹中创建Info.php文件:

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

添加以下行:

<?php
phpinfo();
?>

按Esc键和类型:WQ保存并退出文件。
重新启动Apache服务以生效更改。

$sudo systemctl restart apache2

3.1测试PHP.

打开Web浏览器并导航到http://ip-address/info.php url。

我们现在将看到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保存并关闭文件。
重新启动Apache服务以生效更改。

$sudo systemctl restart apache2

3.2安装PHP模块

为了提高PHP的功能,我们可以安装一些另外的PHP模块。

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

$sudo apt-cache search php- | less

示例输出:

使用箭头键通过结果。
要退出,请键入Q并按Enter键。

要查找任何特定PHP模块的详细信息,例如PHP-GD,运行:

$sudo apt-cache show php-gd

要安装PHP模块运行:

$sudo apt install php-gd

要安装所有模块(但不必要),运行:

$sudo apt-get install php*

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

恭喜!我们在Ubuntu 18.04 LTS服务器中成功设置了 LAMP 堆栈。