Ubuntu 18.04(LTS)LAMP服务器教程,Apache,PHP 7.2和MySQL

LAMP是Linux,Apache,MySQL,PHP的缩写。本教程演示如何在Ubuntu 18.04(仿生海狸)服务器上安装Apache 2.4 Web服务器...

Ubuntu 18.04(LTS)LAMP服务器教程,Apache,PHP 7.2和MySQL

LAMP是L inux, A pache, M ySQL, P HP的缩写。 本教程介绍如何在具有PHP 7.2(mod_php)和MySQL / MariaDB支持的Ubuntu 18.04 LTS(仿生海狸)服务器上安装Apache Web服务器,以及如何使用Let's Encrypt来设置SSL证书。 另外,我将安装PHPMyAdmin以使MySQL管理更容易。 LAMP设置是流行的CMS系统(如Joomla,Wordpress或Drupal)的完美基础。

初步说明

在本教程中,我将使用IP地址为192.168.1.100的主机名server1.example.com 。 这些设置可能会有所不同,因此您必须在适当的位置替换它们。

我建议使用一个最小的Ubuntu服务器设置作为本教程的基础,可以是虚拟或根服务器映像,使用来自Web托管公司的Ubuntu 18.04最小安装,或者使用我们的最小服务器教程从头开始安装服务器。

我以root权限运行本教程中的所有步骤,因此请确保您以root身份登录:

sudo -s

1.安装MySQL或MariaDB数据库

目前有两种广泛使用的MySQL数据库系统可供选择,这是由Oracle开发的经典“MySQL”服务器,现在可以在5.7版本中获得,而MySQL分支名为MariaDB,由原始MySQL开发人员Monty Widenius开发。

我会告诉你如何在下面安装两个选项。 只要按照第1.1或1.2章,但不能同时遵守。 我将使用MySQL 5.7作为可从Howtoforge下载的虚拟机镜像。

1.1安装MySQL 5.7

要安装MySQL 5.7,请执行以下命令:

apt-get -y install mysql-server mysql-client

软件包mysql-server和mysql-client是所谓的“元软件包”,它们总是安装从Ubuntu可用的最新MySQL版本。 最新版本目前是MySQL 5.7。

我们已经在安装过程中为MySQL设置了root用户密码,但出于安全原因,我想删除匿名用户和测试数据库。 运行下面的mysql_secure_installation命令来实现。

mysql_secure_installation

你会被问到这些问题:

Securing the MySQL server deployment.

Enter password for user root: <-- Enter the MySQL root 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:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.

... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

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安装程序现在已经安全。

1.2安装MariaDB 10

运行以下命令安装MariaDB服务器和客户端:

apt-get -y install mariadb-server mariadb-client

现在我们为MariaDB设置一个root密码。

mysql_secure_installation

你会被问到这些问题:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

1.3测试MySQL / MariaDB root登录

使用“mysql命令”测试MariaDB的登录

mysql -u root -p

并输入您在上面设置的MariaDB根密码。 结果应该与下面的屏幕截图类似:

在Ubuntu 18.04 LTS上测试MySQL root登录

要离开MySQL / MariaDB shell,请输入命令“quit”并按Enter键。

2.安装Apache Web服务器

Apache 2作为Ubuntu软件包提供,因此我们可以像这样安装它:

apt-get -y install apache2

现在把你的浏览器指向http://192.168.1.100 ,你应该看到Apache2默认页面( 它工作! ):

Apache默认页面

Ubuntu默认vhost的文档根目录是/ var / www / html ,主配置文件是/etc/apache2/apache2.conf配置系统是   完整记录在/usr/share/doc/apache2/README.Debian.gz中

3.安装PHP 7.2

我们可以按如下方式安装PHP 7.2和Apache PHP模块:

apt-get -y install php7.2 libapache2-mod-php7.2

然后重新启动Apache:

systemctl restart apache2

4.测试PHP并获取有关PHP安装的详细信息

默认网站的文档根目录是/ var / www / html 。 我们现在将在该目录中创建一个小型PHP文件( info.php )并在浏览器中调用它。 该文件将显示大量有关我们PHP安装的有用信息,例如安装的PHP版本。

nano /var/www/html/info.php

<?php
phpinfo();

然后将info.php文件的所有者更改为www-data用户和组。

chown www-data:www-data /var/www/html/info.php

现在我们在浏览器中调用该文件(例如http://192.168.1.100/info.php ):

Ubuntu 18.04 PHP 7.2信息

如您所见,PHP 7.2正在运行,并且正在通过Apache 2.0 Handler进行工作 ,如Server API行中所示。 如果向下滚动,您将看到所有已经在PHP中启用的模块。 这里没有列出MySQL,这意味着我们在PHP中没有MySQL / MariaDB支持。

5.在PHP中获取MySQL / MariaDB支持

为了在PHP中获得MySQL支持,我们可以安装php7.2-mysql包。 安装一些其他PHP模块以及您的应用程序可能需要它们是一个好主意。 您可以搜索这样的可用PHP模块:

apt-cache search php7.2

apt-cache search php-

因为并非所有PHP软件包的名称中都有版本号7.2。

选择你需要的,并像这样安装它们:

apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache  php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext

现在重新启动Apache2:

systemctl restart apache2

加载MySQL扩展的PHP 7.2

PHP 7.2现在支持MySQL / MariaDB,如上面的phpinfo()所示。

6.安装Opcache + APCu PHP缓存来加速PHP

PHP 7附带了一个内置的操作码缓存器,用于缓存和优化PHP中间代码,名称为“opcache”,可在包php7.0-opcache中找到。 强烈建议安装Opcache以加快PHP页面的速度。 除了opcache之外,我还将安装APCu,它是opcache的兼容性包装,提供APC缓存的功能,这是PHP 5.x版本中经常使用的缓存系统,许多CMS系统仍然使用它。

Opcache和APCu可以按如下方式安装:

apt-get -y install php7.2-opcache php-apcu

如果它显示Opcache已经安装,请不要担心。

现在重新启动Apache:

systemctl restart apache2

现在在您的浏览器中重新加载http://192.168.1.100/info.php并再次向下滚动到模块部分。 你现在应该在这里找到很多新的模块:

在PHP 7.2中启用APC和APCu

请不要忘记在不再需要时删除info.php文件,因为它提供了服务器的敏感信息。 运行以下命令删除文件。

rm -f /var/www/html/info.php

7.在apache中启用SSL网站

SSL / TLS是一个安全层,用于加密网络浏览器和服务器之间的连接。 当服务器和Web浏览器之间的连接没有使用SSL加密时,大多数Web浏览器今天开始显示网站不安全。 在本章中,我将向您展示如何使用SSL保护您的网站。

在您的服务器上执行以下命令以启用SSL(https://)支持。 跑:

a2enmod ssl
a2ensite default-ssl

它启用SSL模块并在/ etc / apache2 / sites-enabled文件夹中添加一个符号链接到文件/etc/apache2/sites-available/default-ssl.conf,以将其包含到活动的apache配置中。 然后重新启动apache以启用新配置:

systemctl restart apache2

现在通过在Web浏览器中打开https://192.168.1.100来测试SSL连接。

自签名SSL证书警告

由于服务器的SSL证书是“自签名”SSL证书,因此您将收到SSL警告,这意味着浏览器默认不会信任此证书,您必须首先接受安全警告。 接受警告后,您将看到apache默认页面。

启用了SSL的Apache

浏览器URL前面的关闭“绿色挂锁”显示连接已加密。

有两种方法可以摆脱SSL警告,您可以将自签名SSL证书/etc/ssl/certs/ssl-cert-snakeoil.pem替换为您从SSL授权机构购买的正式签名的SSL证书,或者您可以让我们加密一个免费的SSL证书,我将在第8章中介绍。

8.从Let's Encrypt获取免费的SSL证书

使用Let's Encrypt SSL证书保护网站的第一步是安装python3-certbot-apache软件包。 运行以下命令:

apt-get -y install python3-certbot-apache

在下一步中,我们将通过使用certbot客户端程序向Let's Encrypt请求SSL证书,在此过程中,Let's Encrypt服务器会尝试通过您提供给certbot命令的域名连接到您的服务器。 这个域名已经指向DNS中的服务器,这一点很重要,以便网站可以通过端口80(http)上的域名访问。 如果网站无法从互联网访问,则创建Let's Encrypt SSL证书将失败。

在我们开始创建SSL证书之前,请在vhost配置文件中设置域名。 使用编辑器打开默认的vhost文件:

nano /etc/apache2/sites-available/000-default.conf

并添加行:

ServerName example.com

在“DocumentRoot”行下面。 将example.com替换为您自己网站的域名。

然后使用此命令创建SSL证书:

certbot --apache -d example.com

再次将example.com替换为您的域名。 该命令将启动一个向导,向您询问几个问题。

输入可以联系负责本网站的管理员的电子邮件地址。

设定电邮地址

接受Let's Encrypt SSL权限的条款和条件。

接受条款和条件

如果您想与电子前沿基金会分享您的电子邮件地址,Certbot现在会问您。 在这里选择你喜欢的任何东

电子邮件地址FSF

然后选择是否要将非SSL请求自动重定向到https://。 在这里,我将选择“是”,以避免在网站以http://和https://版本的形式提供时出现重复的内容问题。

重定向HTTP请求

SSL证书已成功发布。

SSL证书颁发成功

当您使用浏览器访问网站时,您将自动重定向到SSL,并且浏览器URL地址栏前面的绿色挂锁显示我们现在正在使用受信任的SSL证书。

SSL受保护的网站

8.1让我们加密自动更新

让我们加密SSL证书仅在80天内有效。 因此,需要运行certbot --renew命令的自动更新SSL证书的cronjob。

这个cronjob在安装certbot时会自动设置,cron文件是/etc/cron.d/certbot 。 所以这里没有什么可做的了。 如果您想知道cronjob的外观,请运行以下命令:

/etc/cron.d/certbot

结果是:

root@server1:~# cat /etc/cron.d/certbot
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

9.安装phpMyAdmin

phpMyAdmin是一个Web界面,通过它你可以管理你的MySQL数据库。 安装它是个好主意:

apt-get -y install phpmyadmin

重要提示:apt安装程序现在会问你几个问题,其中之一是选择Web服务器类型。 一个常见的错误是Web服务器类型只是突出显示但未选中。 要在apt菜单中选择一个项目,用导航键或光标键导航到该项目后,必须按键盘上的空格键。 只是强调它是不够的!

您将看到以下问题:

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1对PHPMyAdmin的root权限

MariaDB和MySQL在默认情况下为root用户启用一个名为“unix_socket”的插件,该插件可防止root用户登录到PHPMyAdmin,并且与MySQL的TCP连接正在为root用户工作。 要让用户有权限在PHPMyAdmin中创建其他用户和数据库,我将创建一个名为“admin”的新MySQL用户,其拥有的权限与root用户相同。

以shell用户身份登录到MySQL数据库:

mysql -u root

创建一个名为“admin”和密码为“howtoing”的新用户。 在下面的命令中使用安全密码替换密码“howtoing”!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoing';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

之后,您可以通过http://192.168.1.100/phpmyadmin/访问phpMyAdmin:

phpMyAdmin登录

将管理员用户登录到phpMyAdmin

10本教程的虚拟机镜像下载

本教程已准备就绪,可以使用与VMWare和Virtualbox兼容的ovf / ova格式的虚拟机映像。 虚拟机映像使用以下登录详细信息:

SSH / Shell登录

用户名:administrator
密码:howtoing

此用户具有sudo权限。

MySQL登录

用户名:root
密码:howtoing

虚拟机的IP为192.168.1.100,可以在文件/ etc / network / interfaces中更改。 请更改所有上述密码以保护虚拟机。