带有 Apache、PHP 7.2 和 MySQL 的 Ubuntu 18.04 (LTS) LAMP 服务器教程
本教程适用于这些操作系统版本
- Ubuntu 18.04(仿生海狸)
- Ubuntu 14.04 LTS(Trusty Tahr)
在此页
- 初步说明
- 1。安装 MySQL 或 MariaDB 数据库
- 1.1 安装 MySQL 5.7
- 1.2 安装 MariaDB 10
- 1.3 测试 MySQL/MariaDB root 登录
- 8.1 让我们加密自动更新
- 9.1 对 PHPMyAdmin 的根访问权限
LAMP 是 Linux、Apache、MySQL、PHP 的缩写。本教程展示了如何在支持 PHP 7.2 (mod_php) 和 MySQL/MariaDB 的 Ubuntu 18.04 LTS(Bionic Beaver)服务器上安装 Apache Web 服务器,以及如何使用 Lets encrypt 设置 SSL 证书。此外,我将安装 PHPMyAdmin 以简化 MySQL 管理。 LAMP 设置是流行的 CMS 系统(如 Joomla、Wordpress 或 Drupal)的完美基础。
初步说明
在本教程中,我将使用 IP 地址为 192.168.1.100 的主机名 server1.example.com。这些设置可能因您而异,因此您必须在适当的地方替换它们。
我建议使用最小的 Ubuntu 服务器设置作为本教程的基础,它可以是来自网络托管公司的带有 Ubuntu 18.04 最小安装的虚拟或根服务器映像,或者您可以使用我们的最小服务器教程从头开始安装服务器。
我以 root 权限运行本教程中的所有步骤,因此请确保您以 root 身份登录:
sudo -s
1. 安装 MySQL 或 MariaDB 数据库
目前有两种广泛使用的 MySQL 数据库系统可供使用,由 Oracle 开发的经典“MySQL”服务器,现已推出 5.7 版本,以及名为 MariaDB 的 MySQL 分支,由 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] <-- y1.3 测试 MySQL/MariaDB root 登录
使用“mysql 命令”测试 MariaDB 的登录
mysql -u root -p
并输入您在上面设置的 MariaDB root 密码。结果应该类似于下面的屏幕截图:
要离开 MySQL/MariaDB shell,请输入命令 \quit\ 并按回车键。
2. 安装 Apache Web 服务器
Apache 2 作为 Ubuntu 软件包提供,因此我们可以像这样安装它:
apt-get -y install apache2
现在将您的浏览器指向 http://192.168.1.100,您应该会看到 Apache2 默认页面(有效!):
apache默认虚拟主机的文档根目录在Ubuntu上是/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):
如您所见,PHP 7.2 正在运行,并且它通过 Apache 2.0 处理程序运行,如服务器 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
PHP 7.2 现在支持 MySQL/MariaDB,如上面的 phpinfo() 所示。
6. 安装Opcache + APCu PHP缓存,加速PHP
PHP 7 附带了一个内置的操作码缓存器,用于缓存和优化 PHP 中间代码,它的名称为 opcache,在 php7.0-opcache 包中可用。强烈建议安装 Opcache 以加速您的 PHP 页面。除了 opcache 之外,我还将安装 APCu,它是 opcache 的兼容性包装器,用于提供 APC 缓存的功能,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 并再次向下滚动到模块部分。你现在应该在那里找到很多新模块:
当您不再需要 info.php 文件时,请不要忘记删除它,因为它提供了您服务器的敏感信息。运行以下命令删除该文件。
rm -f /var/www/html/info.php
7.在apache中启用SSL网站
SSL/ TLS 是一个安全层,用于加密 Web 浏览器和服务器之间的连接。今天,当服务器和 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
现在通过在网络浏览器中打开 https://192.168.1.100 来测试 SSL 连接。
您将收到 SSL 警告,因为服务器的 SSL 证书是“自签名”SSL 证书,这意味着浏览器默认不信任该证书,您必须先接受安全警告。接受警告后,您将看到 apache 默认页面。
浏览器中 URL 前面闭合的“绿色挂锁”表示连接已加密。
有两种方法可以消除 SSL 警告,或者将自签名 SSL 证书 /etc/ssl/certs/ssl-cert-snakeoil.pem 替换为您从 SSL 授权机构购买的正式签名的 SSL 证书,或者您获得来自 Lets Encrypt 的免费 SSL 证书,我将在第 8 章中介绍。
8. 从 Lets Encrypt 获取免费的 SSL 证书
使用 Lets Encrypt SSL 证书保护网站的第一步是安装 python3-certbot-apache 包。运行以下命令:
apt-get -y install python3-certbot-apache
在下一步中,我们将使用 certbot 客户端程序向 Lets Encrypt 请求 SSL 证书,在此过程中,Lets Encrypt 服务器会尝试通过您提供给 certbot 命令的域名连接到您的服务器。重要的是这个域名已经指向您在 DNS 中的服务器,这样网站就可以通过端口 80 (http) 上的域名访问。如果无法从 Internet 访问该网站,则 Lets 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 替换为您的域名。该命令将启动一个向导,询问您几个问题。
输入可以联系到负责该网站的管理员的电子邮件地址。
接受 Lets Encrypt SSL 机构的条款和条件。
Certbot 现在会询问您是否愿意与电子前沿基金会共享您的电子邮件地址。在这里选择你喜欢的任何东西。
然后选择是否要将非 SSL 请求自动重定向到 https://。当网站提供 http:// 和 https:// 版本时,我会在这里选择是以避免重复内容问题。
已成功颁发 SSL 证书。
当您现在使用浏览器访问该网站时,您将自动重定向到 SSL,并且浏览器 URL 栏前面的绿色挂锁表明我们现在正在使用受信任的 SSL 证书。
8.1 让我们加密自动更新
Lets Encrypt SSL 证书的有效期仅为 80 天。因此,需要一个自动更新 SSL 证书的 cronjob 来运行 certbot --renew 命令。
当您安装 certbot 时,此 cronjob 会自动设置,cron 文件为 /etc/cron.d/certbot。所以这里没有什么可做的了。如果您想知道 cronjob 是什么样子,请运行以下命令:
/etc/cron.d/certbot
结果是:
:~# 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/bin0 */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 的根访问
MariaDB 和 MySQL 默认为 root 用户启用一个名为 \unix_socket\ 的插件,该插件阻止 root 用户登录 PHPMyAdmin 以及 MySQL 的 TCP 连接为 root 用户工作。为了让用户有权在 PHPMyAdmin 中创建其他用户和数据库,我将创建一个名为 \admin\ 的新 MySQL 用户,其权限与 root 用户相同。
在 shell 上以 root 用户身份登录 MySQL 数据库:
mysql -u root
使用名称 \admin\ 和密码 \howtoforge\ 创建一个新用户。在以下命令中将密码 \howtoforge\ 替换为安全密码!
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit之后就可以在http://192.168.1.100/phpmyadmin/下访问phpMyAdmin了:
10 本教程虚拟机镜像下载
本教程可随时使用与 VMWare 和 Virtualbox 兼容的 ovf/ova 格式的虚拟机映像。虚拟机映像使用以下登录详细信息:
SSH/外壳登录
用户名:管理员
密码:howtoforge此用户具有 sudo 权限。
登录
用户名:root
密码:howtoforgeVM 的 IP 是 192.168.1.100,可以在文件 /etc/network/interfaces 中更改。请更改以上所有密码以保护虚拟机。
11个链接
- 阿帕奇:http://httpd.apache.org/
- PHP:http://www.php.net/
- MySQL:http://www.mysql.com/
- MariaDB:https://mariadb.com/
- Ubuntu:http://www.ubuntu.com/
- phpMyAdmin:http://www.phpmyadmin.net/