Ubuntu 16.04 LAMP服务器教程,使用Apache 2.4,PHP 7和MariaDB(而不是MySQL)

LAMP是Linux,Apache,MySQL,PHP的缩写。本教程介绍如何在Ubuntu 16.04(Xenial Xerus)服务器上安装Apache 2.4 Web服务器...

LAMP是L inux, A pache, M ySQL, P HP的缩写。 本教程将介绍如何在具有PHP 7(mod_php)和MySQL / MariaDB支持的Ubuntu 16.04 LTS(Xenial Xerus)服务器上安装Apache Web服务器,以及如何使用Let加密设置SSL证书。 另外,我将安装PHPMyAdmin来使MySQL管理变得更简单。 LAMP设置是Joomla,Wordpress或Drupal等CMS系统的完美基础。

初步说明

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

我建议使用最小的Ubuntu服务器设置作为教程的基础,可以是虚拟或根服务器映像,使用Ubuntu 16.04从Web托管公司进行的最小安装,或者您使用我们的最低级服务器教程从头开始安装服务器。

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

sudo su

1.安装MySQL或MariaDB

目前有两个广泛使用的MySQL数据库系统,由Oracle开发的经典的“MySQL”服务器,现在有5.7版本,由MySQL原始开发人员Monty Widenius开发的名为MariaDB的MySQL fork。

我将向您展示如何安装以下两种选择。 只要按照第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是所谓的'meta-packages',它们总是安装最新的Ubuntu版本的MySQL版本。 Th最新版本是目前的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-server和client:

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

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

mysql -u root -p

并输入您上面设置的MariaDB root密码。 结果应该类似于下面的截图:

MariaDB登录Ubuntu 16.04。

要离开MariaDB shell,请输入命令“quit”,然后按Enter键。

2.安装Apache 2.4

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

apt-get -y install apache2

现在直接浏览器到http://192.168.1.100 ,你应该看到Apache2的默认页面( 它可以工作! ):

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

3.安装PHP 7

我们可以安装PHP 7和Apache PHP模块,如下所示:

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

然后重新启动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数据用户和组。

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

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

PHPINFO从PHP 7输出。

如您所见,PHP 7.0正在工作,它正在通过Apache 2.0处理程序工作 ,如Server API行所示。 如果您进一步向下滚动,您将看到在PHP5中已启用的所有模块。 MySQL没有列出,这意味着我们还没有在PHP中支持MySQL / MariaDB。

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

要在PHP中获得MySQL支持,我们可以安装php7.0-mysql软件包。 安装一些其他PHP模块是一个好主意,也可能需要它们用于应用程序。 您可以搜索可用的PHP模块,如下所示:

apt-cache search php7.0

选择您需要的并安装它们:

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

现在重新启动Apache2:

systemctl restart apache2

PHP与MySQL / MariaDB支持。

PHP 7现在已经支持MySQL / MariaDB,如phpinfo()所示。

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

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

Opcache和APCu可以安装如下:

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

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

现在重新启动Apache:

systemctl restart apache2

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

APCu安装在PHP中。

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

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

7.以apache启用SSL网站

SSL / TLS是加密Web浏览器和服务器之间连接的安全层。 当服务器和Web浏览器之间的连接未被SSL加密时,大多数网络浏览器开始将网站显示为不安全。 在本章中,我将向您展示如何使用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

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

在Firefox中接受SSL警告

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

Apache默认页面为https模式。

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

有两种方法来摆脱SSL警告,用SSL签名的SSL证书替换自己签名的SSL证书/etc/ssl/certs/ssl-cert-snakeoil.pem,或者你得到来自Let's encrypt的免费SSL证书,我将在第8章中介绍。

8.获得免费的SSL证书,让我们加密

使用“加密SSL证书”来保护网站的第一步是安装python- letencrypt -apache包。 运行以下命令:

apt-get -y install python-letsencrypt-apache

在下一步中,我们将请求加密的SSL证书,在此过程中,让我们的加密服务器尝试通过您提供给letsencrypt命令的域名连接到您的服务器。 重要的是,这个域名已经在DNS中指向您的服务器,以便网站可以通过其端口80(http)上的域名可访问。 如果网站无法从互联网访问,则创建“加密SSL证书”将失败。

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

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

并添加行:

ServerName example.com

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

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

letsencrypt --apache -d example.com

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

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

接受我们加密SSL权限的条款和条件。

选择是否要将非SSL请求重定向到https://。 在http://和https://版本的网站可用时,我会选择是在这里以避免重复的内容问题。

SSL证书已成功发出。

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

8.1加密自动续订

加密SSL证书仅在短短的80天内有效。 因此,我们将在必要时自行设置一个cronjob来自动更新SSL证书。 命令是'letsencrypt renew'。

为LE自动更新设置一个cronjob。 跑:

crontab -e

在编辑器中打开根crontab。 在文件的末尾插入以下行:

0 1 * * * /usr/bin/letsencrypt renew &> /dev/null

保存文件,这将激活cronjob。 这个cronjob将在凌晨1点每天晚上叫Let's Encrypt renew命令。 该命令将在必要时(30天到期之前)更新SSL证书,每天晚上无需运行它。

9.安装phpMyAdmin

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

apt-get -y install phpmyadmin

您将看到以下问题:

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使用MariaDB对PHPMyAdmin进行根访问

如果您使用MySQL 5.7,则仅需要以下步骤才能进行MariaDB安装,然后跳过此步骤。

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

在shell上以root用户身份登录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

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