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

介绍

LAMP堆栈是一组开源软件,通常被安装在一起,使服务器能够托管动态网站和Web应用程序. 这个术语实际上是一个简称,代表了Linux操作系统,与 ** A pache Web服务器。

在本指南中,我们将在 Ubuntu 18.04 服务器上安装 LAMP 堆栈。

前提条件

要完成本教程,您需要有一个 Ubuntu 18.04 服务器,具有非 root sudo 启用的用户帐户和配置的基本防火墙。

步骤 1 – 安装 Apache 和更新防火墙

Apache 网页服务器是一个流行的开源网页服务器,可以与 PHP 一起使用来托管动态网页,并且已被广泛使用,并且在网页历史的很大一部分时间里一直被广泛使用。

首先,请确保您的apt缓存已更新:

1sudo apt update

如果这是你第一次在这个会话中使用sudo,你将被要求提供你的常规用户密码来验证你的权限。

一旦缓存已更新,您可以安装Apache:

1sudo apt install apache2

输入此命令后,apt会告诉你它计划安装哪些软件包,以及它们将需要多少额外的磁盘空间. 按Y并按ENTER来确认,然后安装将继续。

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

接下来,假设您遵循最初的服务器设置说明并启用了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的个人资料细节,你会发现它允许流量到端口80443:

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

要为此服务器允许输入的 HTTP 和 HTTPS 流量,请运行:

1sudo ufw allow "Apache Full"

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

1http://your_server_ip

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

Ubuntu 18.04 Apache default

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

如何找到您的服务器的公共IP地址

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

首先,您可以使用iproute2工具通过键入以下方式获取您的IP地址:

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

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

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

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

无论您使用哪种方法获取 IP 地址,请将其键入您的 Web 浏览器的地址栏以查看默认的 Apache 页面。

第2步:安装MySQL

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

再次,使用apt来获取和安装此软件:

1sudo apt install mysql-server

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

这个命令也将向您显示将安装的包列表,以及他们将占用的磁盘空间。

当安装完成后,运行一个简单的安全脚本,它附有预安装的MySQL,这将删除一些危险的默认文件,并锁定访问您的数据库系统。

1sudo mysql_secure_installation

这将询问您是否想要配置验证密码插件

<$>[注] 注: 启用此功能是一种判断呼叫。如果启用,不符合指定的标准的密码将被MySQL错误地拒绝。如果您与自动配置MySQL用户凭证的软件一起使用弱密码,这将导致问题。

回答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

无论您是否选择设置VALIDATE PASSWORD PLUGIN,您的服务器将接下来要求您选择并确认MySQL root 用户的密码。这不应该与 ** system root** 混淆。 ** database root** 用户是对数据库系统具有完整权限的管理用户。即使默认的MySQL root用户身份验证方法不允许使用密码,即使设置了密码,您也应该在这里定义一个强大的密码作为额外的安全措施。

如果您已启用了密码验证,您将看到您刚刚输入的根密码的密码强度,您的服务器将询问您是否想要更改该密码。

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。这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重您所做的更改。

完成后,通过键入测试您是否能够登录 MySQL 控制台:

1sudo mysql

这将作为管理数据库用户 root 连接到MySQL服务器,这是在运行此命令时使用sudo来推断的。

 1[secondary_label Output]
 2Welcome to the MySQL monitor. Commands end with ; or \g.
 3Your MySQL connection id is 5
 4Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu)
 5
 6Copyright (c) 2000, 2021, Oracle and/or its affiliates.
 7
 8Oracle is a registered trademark of Oracle Corporation and/or its
 9affiliates. Other names may be trademarks of their respective
10owners.
11
12Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
13
14mysql>

要退出 MySQL 控制台,键入:

1exit

请注意,您不需要提供密码以连接为 root 用户,即使您在运行mysql_secure_installation脚本时已经定义了一个密码,这是因为管理 MySQL 用户的默认身份验证方法是unix_socket而不是password。虽然这可能起初看起来像是一个安全问题,但它使数据库服务器更安全,因为唯一允许登录为 ** root** MySQL 用户的用户是从控制台或通过运行相同权限的应用程序连接的具有 sudo 权限的系统用户。

为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在您的服务器上托管多个数据库,请参阅我们关于如何在MySQL上创建新用户和授权的指南(https://andsky.com/tech/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql)的详细说明,如何创建MySQL用户和配置数据库访问权限。

您的MySQL服务器现在已安装和安全,接下来,我们将安装PHP,LAMP堆栈的最终组件。

步骤三:安装PHP

它可以运行脚本,连接到您的MySQL数据库以获取信息,并将处理的内容传递到您的Web服务器,以便它可以向您的访问者显示结果。

再一次,利用apt系统来安装PHP。除了php包外,您还需要libapache2-mod-php来整合PHP到Apache,还有php-mysql包来允许PHP连接到MySQL数据库。运行以下命令来安装所有三种包及其依赖:

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

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

更改 Apache 目录索引(可选)

在某些情况下,当被请求一个目录时,你会想要修改Apache服务文件的方式。目前,如果用户从服务器上请求一个目录,Apache首先会搜索一个名为index.html的文件。我们希望告诉Web服务器优先选择PHP文件,让Apache先寻找一个index.php文件。

要进行此更改,请在您选择的文本编辑器中打开dir.conf配置文件,在这里我们将使用nano:

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 - The Apache HTTP Server
 3   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
 4  Drop-In: /lib/systemd/system/apache2.service.d
 5           └─apache2-systemd.conf
 6   Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago
 7 Main PID: 3719 (apache2)
 8    Tasks: 55 (limit: 2361)
 9   CGroup: /system.slice/apache2.service
10           ├─3719 /usr/sbin/apache2 -k start
11           ├─3721 /usr/sbin/apache2 -k start
12           └─3722 /usr/sbin/apache2 -k start
13
14Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
15Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di
16Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Q来退出此状态输出。

安装 PHP 扩展(可选)

要扩展PHP的功能,您可以选择安装一些额外的模块. 要查看PHP模块和库的可用选项,请将apt search的结果导入到less,这是一个页面,允许您滚动其他命令的输出:

1apt search php- | less

使用箭头键向上和向下滚动,然后按Q停止。

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

 1bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
 2  Tracks usage of TCP/IP and builds html files with graphs
 3
 4bluefish/bionic 2.2.10-1 amd64
 5  advanced Gtk+ text editor for web and software development
 6
 7cacti/bionic 1.1.38+ds1-1 all
 8  web interface for graphing of monitoring systems
 9
10ganglia-webfrontend/bionic 3.6.1-3 all
11  cluster monitoring toolkit - web front-end
12
13golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
14  PHP-like Compression and Archive Extensions in Go
15
16haserl/bionic 0.9.35-2 amd64
17  CGI scripting program for embedded environments
18
19kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
20  transitional package for kdevelop-php
21
22kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
23  transitional package for kdevelop-php-l10n
24
25:

要了解更多关于每个模块所做的事情,您可以搜索互联网以获取更多关于它们的信息。

1apt show package_name

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

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

1apt show php-cli

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

 1[secondary_label Output]
 2
 3Description: 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 Ubuntu's default
12 PHP version (currently 7.2).
13

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

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

1sudo apt install php-cli

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

1sudo apt install package1 package2 ...

在此时,您的 LAMP 堆栈已安装和配置,在您做任何其他事情之前,我们建议您设置一个 Apache 虚拟主机,在那里您可以存储服务器的配置细节。

步骤 4 — 设置虚拟主机(推荐)

在使用Apache Web 服务器时,您可以使用 virtual hosts(类似于 Nginx 中的服务器块)来封装配置细节,并从单个服务器中托管多个域。

在Ubuntu 18.04上,有一个服务器块默认启用,可配置为从/var/www/html目录中服务的文档。虽然这对单个网站非常有效,但如果您托管多个网站,它可能会变得不便。

创建 your_domain 的目录如下:

1sudo mkdir /var/www/your_domain

接下来,与$USER环境变量分配目录的所有权,该变量指向当前登录的用户:

1sudo chown -R $USER:$USER /var/www/your_domain

如果您尚未修改 Web 根目录的 umask 值,则该 Web 根目录的权限应该正确,但您可以通过键入:

1sudo chmod -R 755 /var/www/your_domain

接下来,使用nano或您最喜欢的编辑器创建一个样本index.html页面:

1nano /var/www/your_domain/index.html

内部,添加以下样本HTML:

1[label /var/www/your_domain/index.html]
2<html>
3    <head>
4        <title>Welcome to Your_domain!</title>
5    </head>
6    <body>
7        <h1>Success!  The your_domain server block is working!</h1>
8    </body>
9</html>

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

为了使 Apache 能够提供此内容,需要创建一个具有正确指令的虚拟主机文件,而不是直接修改位于 /etc/apache2/sites-available/000-default.conf 的默认配置文件,让我们在 /etc/apache2/sites-available/your_domain.conf 创建一个新的文件:

1sudo nano /etc/apache2/sites-available/your_domain.conf

插入以下配置块,类似于默认,但更新为我们的新目录和域名:

1[label /etc/apache2/sites-available/your_domain.conf]
2<VirtualHost *:80>
3    ServerAdmin webmaster@localhost
4    ServerName your_domain
5    ServerAlias www.your_domain
6    DocumentRoot /var/www/your_domain
7    ErrorLog ${APACHE_LOG_DIR}/error.log
8    CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>

请注意,我们已将DocumentRoot更新到我们的新目录中,并将ServerAdmin更新到网站管理员可以访问的电子邮件中,我们还添加了两个指令:ServerName,该指令确定了该虚拟主机定义的基本域名,以及ServerAlias,该指令定义了其他名称,这些名称应该与基础名称相匹配。

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

讓我們用「a2ensite」工具啟用檔案:

1sudo a2ensite your_domain.conf

禁用在000-default.conf中定义的默认网站:

1sudo a2dissite 000-default.conf

接下来,让我们测试配置错误:

1sudo apache2ctl configtest

你应该看到以下结果:

1[secondary_label Output]
2Syntax OK

重新启动 Apache 以实现更改:

1sudo systemctl restart apache2

你可以通过导航到http://your_domain,在那里你应该看到这样的东西:

Apache virtual host example

然而,在做出任何更改或部署应用程序之前,如果有任何需要解决的问题,将有助于主动测试您的PHP配置。

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

为了测试您的系统是否正确配置为PHP,请创建一个名为info.php的PHP脚本。

在上一步创建的 Web 根中创建文件,运行:

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

添加以下文本,即有效的PHP代码,在文件中:

1[label /var/www/your_domain/info.php]
2<?php
3phpinfo();

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

现在,您可以测试您的 Web 服务器是否能够正确显示由此 PHP 脚本生成的内容。 要尝试,请访问您的 Web 浏览器中的此页面。 您需要您的服务器的公共 IP 地址或域名。

你想访问的地址是:

1http://your_domain/info.php

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

Ubuntu 18.04 default PHP info

此页面提供了一些关于您的服务器的基本信息,从PHP的角度来看,这对调试和确保您的设置被正确应用是有用的。

如果您可以在浏览器中看到此页面,那么您的PHP正按预期运作。

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

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

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

结论

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

作为下一步,您应该通过通过HTTPS服务确保连接到您的Web服务器, 遵循我们的指南 如何使用Let's Encrypt保护Apache以确保您的网站具有免费的TLS/SSL证书。

其他一些流行的选择是:

Published At
Categories with 技术
comments powered by Disqus