专栏首页云计算教程系列如何在服务器上安装LAMP
原创

如何在服务器上安装LAMP

介绍

LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:

  • Linux,操作系统
  • Apache,网页服务器
  • MariaDB或MySQL,数据库管理系统(或者数据库服务器)
  • PHP、Perl或Python,脚本语言

在本教程中,我们将在Ubuntu上安装LAMP。Ubuntu将满足我们的第一个要求:Linux操作系统。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

第一步:在防火墙中安装Apache

Apache Web服务器是世界上最受欢迎的Web服务器之一。它已在网络发展的大部分历史中被广泛使用,这使其成为托管网站的绝佳选择。

我们可以使用Ubuntu的管理器apt轻松安装Apache 。包管理器允许我们从Ubuntu存储库中安装大多数软件。

我们可以通过输入以下命令开始:

sudo apt-get update
sudo apt-get install apache2

由于我们使用的是sudo命令,因此这些操作将以root权限执行。它将询问您的常规用户密码以验证您的目的。

输入密码后,apt将告诉您计划安装哪些软件包以及它们将占用多少额外磁盘空间。按Y,接着按回车,安装将继续进行。

将Global ServerName设置为抑制语法警告

接下来,我们将向/etc/apache2/apache2.conf文件添加一行内容,以禁止显示警告消息。虽然无害,但如果未全局设置ServerName,则在检查Apache配置中是否存在语法错误时,您将收到以下警告:

sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

使用文本编辑打开主配置文件:

sudo nano /etc/apache2/apache2.conf

在文件底部的内部,添加一个指向主域名的指令ServerName。如果您没有与服务器关联的域名,则可以使用服务器的公共IP地址:

. . .
ServerName server_domain_or_IP

完成后保存并关闭文件。

接下来,输入以下命令检查语法错误:

sudo apache2ctl configtest

由于我们添加了全局ServerName指令,您应该看到的是:

Syntax OK

重启Apache以实现更改:

sudo systemctl restart apache2

您现在可以开始调整防火墙。

调整防火墙以允许Web流量

假设您已按照初始服务器设置说明启用UFW防火墙,请确保您的防火墙允许HTTP和HTTPS流量。如果您使用的是腾讯云的服务器,您可以直接在CVM安全组进行设置。并确保UFW具有Apache的应用程序配置文件,如下所示:

sudo ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

如果您查看Apache Full配置文件,它应该显示已经启用80端口和443端口的流量:

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

允许此配置文件的传入流量:

sudo ufw allow in "Apache Full"

您可以立即通过在Web浏览器中访问服务器的公共IP地址来验证所有内容是否按计划进行:

http://your_server_IP_address

您将看到默认的Ubuntu 16.04 Apache网页,该网页用于提供信息和测试目的。网页如下:

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

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

如果您不知道服务器的公共IP地址是什么,可以通过多种方式找到它。默认情况下,你可以直接去腾讯云的服务器控制台页面查看公有IP地址,通常,这是您用于通过SSH连接到服务器的地址。

从命令行中,您可以通过以下几种方式找到它。首先,您可以使用iproute2工具输入以下内容来获取您的地址:

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

然后将显示两到三行地址。它们都是正确的地址,但您的计算机可能只能使用其中一个,因此请随意尝试每个地址。

另一种方法是使用curl联系外部方以告诉您服务器的IP地址。您可以通过询问特定服务器的IP地址来执行此操作:

sudo apt-get install curl
curl http://icanhazip.com

无论您使用何种方法获取IP地址,都可以将其输入Web浏览器的地址栏以访问您的服务器。

第二步:安装MySQL

我们已经启动并运行了Web服务器,现在可以安装MySQL了。MySQL是一个数据库管理系统。它将提供对我们的站点可以存储信息的数据库的访问。我们推荐您使用腾讯云的云数据库,因为这样更稳定,更安全,相应的您可能需要付出相关费用。如果你不打算用,请继续下面的步骤。

同样,我们可以用apt来获取和安装我们的软件。同时,我们还将安装一些其他“帮助程序”包来让我们的组件相互通信:

sudo apt-get install mysql-server

注意:在这种情况下,您不必在命令之前运行sudo apt-get update。这是因为我们最近在上面的命令中运行它来安装Apache。我们计算机上的软件包索引应该已经是最新的。

同样,您将看到将要安装的软件包列表,以及它们将占用的磁盘空间量。输入Y继续。

在安装过程中,您的服务器将要求您选择并确认MySQL“root”用户的密码。这是MySQL中的一个管理帐户,具有更高的权限。可以认为它类似于服务器本身的root帐户。确保这是一个强大的唯一密码,不要留空。

安装完成后,我们希望运行一个简单的安全脚本,它将删除一些危险的默认值并锁定对我们数据库系统的访问。运行以下命令启动交互式脚本:

mysql_secure_installation

系统将要求您输入为MySQL root帐户设置的密码。接下来,系统将询问您是否要配置VALIDATE PASSWORD PLUGIN

警告:如果启用,MySQL将拒绝与指定条件不符的密码并显示错误。如果您将弱密码与自动配置MySQL用户的软件结合使用,例如phpMyAdmin,则会导致问题。保持禁用验证是安全的,但是您应该始终为数据库凭据使用强大的唯一密码。

回答y是肯定的,否则任何事情都无法继续。

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:

系统会要求您选择密码验证级别。请记住,如果输入2,对于最强级别,如果设置任何不包含数字,大写和小写字母以及特殊字符的密码或基于常用字典单词的密码时,您将收到错误。

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

如果您启用了密码验证,则会显示现有root密码的密码强度,并询问您是否要更改该密码。如果您对当前密码感到满意,请在提示符处输入n代表“no”:

Using existing password for root.
​
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

对于其他问题,您应该按Y并在每个提示符处按Enter键。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即执行我们所做的更改。此时,您的数据库系统现已设置完毕,我们可以继续往下进行。

第三步:安装PHP

PHP是我们设置的组件,它将处理代码以动态显示内容。它可以运行脚本,连接到我们的MySQL数据库以获取信息,并将处理过的内容交给我们的Web服务器进行显示。

我们可以再次利用apt系统来安装我们的组件。还将包含一些帮助程序包,以便PHP代码可以在Apache服务器下运行并与我们的MySQL数据库通信:

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

在大多数情况下,我们要修改Apache在请求目录时提供文件的方式。目前,如果用户从服务器请求目录,Apache将首先查找名为index.html的文件。我们想告诉我们的Web服务器偏向于PHP文件,因此我们首先要让Apache查找index.php文件。

为此,请输入以下命令以在具有root权限的文本编辑器中打开dir.conf文件:

sudo nano /etc/apache2/mods-enabled/dir.conf

它看起来像这样:

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

将PHP文件移动到第一个位置,如下所示:

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

完成后,按Ctrl-X保存并关闭文件。您必须通过输入Y确认保存,然后按Enter确认文件保存位置。

在此之后,我们需要重新启动Apache Web服务器才能识别我们的更改。你可以这样输入:

sudo systemctl restart apache2

我们还可以使用systemctl检查apache2服务的状态:

sudo systemctl status apache2
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 6 (limit: 512)
   CGroup: /system.slice/apache2.service
           ├─13623 /usr/sbin/apache2 -k start
           ├─13626 /usr/sbin/apache2 -k start
           ├─13627 /usr/sbin/apache2 -k start
           ├─13628 /usr/sbin/apache2 -k start
           ├─13629 /usr/sbin/apache2 -k start
           └─13630 /usr/sbin/apache2 -k start
​
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

安装PHP模块

为了增强PHP的功能,我们可以选择安装一些额外的模块。

要查看PHP模块和库的可用选项,可以将apt-cache search的结果传递给less,这是一个可以滚动浏览其他命令输出的分页器:

apt-cache search php- | less

使用箭头键向上和向下滚动,然后按q退出。

结果是您可以安装的所有可选组件。 它会给你一个简短的描述:

libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:

要获得有关每个模块的功能的更多信息,您可以在网上搜索,也可以输入以下内容来查看包的详细说明:

apt-cache show package_name

这将有大量输出,其中一个字段名为Description-en,它将对模块提供的功能有更长的解释。

例如,要找出php-cli模块的功能,我们可以输入:

apt-cache show php-cli

除了大量其他信息外,您还可以找到如下所示的内容:

…
Description-en: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).
…

如果在研究之后,您决定要安装软件包,可以使用apt-get install命令,就像我们为其他软件所做的那样。

如果我们认为php-cli是我们需要的东西,我们可以输入:

sudo apt-get install php-cli

如果要安装多个模块,可以按照apt-get install命令列出每个模块,用空格分隔,如下所示:

sudo apt-get install package1 package2 ...

此时,您的LAMP堆栈已安装并配置完毕。我们仍然应该测试我们的PHP。

第四步:在Web服务器上测试PHP处理

为了测试我们的系统是否为PHP正确配置,我们可以创建一个非常基本的PHP脚本。

我们将这个脚本称为info.php。为了让Apache找到并正确提供文件,必须将其保存到一个非常特定的目录,称为“web root”。

在Ubuntu 16.04中,该目录位于/var/www/html/。我们可以通过输入以下内容在该位置创建文件:

sudo nano /var/www/html/info.php

这将打开一个空白文件。我们想在文件中放入以下文本——有效的PHP代码:

<?php
phpinfo();
?>

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

现在我们可以测试我们的Web服务器是否正确显示PHP脚本生成的内容。我们只需在我们的网络浏览器中访问此页面即可。您将再次需要服务器的公共IP地址。

您要访问的地址是:

http://your_server_IP_address/info.php

您访问的页面应如下所示:

这个页面基本上从PHP的角度为您提供有关您的服务器的信息。它对于调试很有用,并确保正确应用您的设置。

如果这是成功的,那么您的PHP正在按预期工作。此文件实际上可以向未经授权的用户提供有关您的服务器的信息,因此可以在此测试后删除此文件。为此,您可以输入:

sudo rm /var/www/html/info.php

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

结论

现在您已经安装了LAMP,您可以选择下一步做什么。您已经安装了一个强大的网页服务环境,你可以在上面安装个人博客、公司网站等业务,还等什么,赶快动起来安装吧!我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《 How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在腾讯云CVM上安装Apache

    Apache HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括可动态加载的模块,强大的媒体支持以及与其他流行软件的广泛集成。

    一步
  • 如何在Ubuntu 14.04上保护WordPress免受XML-RPC攻击

    WordPress是一个流行且功能强大的CMS(内容管理系统)平台。它的受欢迎程度可能会以专门针对WordPress网站的恶意流量形式引起不必要的关注。

    一步
  • 如何在Ubuntu 14.04上安装LAMP [快速入门]

    LAMP堆栈(Linux,Apache,MySQL,PHP)是一组开源软件,通常安装在一起,使服务器能够托管动态PHP网站和Web应用程序。本教程将介绍在单个服...

    一步
  • php生成传参小程序二维码

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code....

    许坏
  • mac下iTerm2支持ssh快捷连接服务器的方法

    image.png 以前自己还很少用到Mac来弄服务器这块,就偶尔用下,所以之前一直用Mac自带的终端。 最近经常在外,也就比较常用Mac来,觉得自带的终端还是...

    速企云
  • 一种经典的网游服务器架构

    ? 这个图是一个区的架构图,所有区的架构是一样的。上面虚线框的ServerGroup和旁边方框内的架构一样。图上的所有x N的服务器,都是多台一起的。红线,绿...

    小小科
  • 配置漏洞之DNS域传送

    DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库,目的是为了做冗余备份,防止主服务器...

    信安之路
  • 杨老师课堂之JavaWeb网站技术架构总结

    有很多学生及一线的开发人员经常会问我到底是什么技术架构,是不是就是目前在学校的SSH、SSM技术,为了让更多的同行对架构这个词汇有更深刻的理解,我分享一下自己的...

    杨校
  • 记一次JavaWeb网站技术架构总结

    题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时...

    小柒2012
  • 记一次JavaWeb网站技术架构总结

    工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充(...

    小柒2012

扫码关注云+社区

领取腾讯云代金券