在Ubuntu 16.04 LTS上使用PHP 7(PHP-FPM)和MySQL 5.7安装Lighttpd

Lighttpd是一种安全,快速,符合标准的Web服务器,专为速度苛刻的环境而设计。本教程将介绍如何安装Lighttpd ...

Lighttpd是一款安全,快速,符合标准的Web服务器,专为速度至关重要的环境而设计。 本教程将介绍如何在具有PHP 7支持(通过PHP-FPM)和MySQL 5.7的Ubuntu 16.04服务器上安装Lighttpd。 PHP-FPM(FastCGI Process Manager)是一种替代的PHP FastCGI实现,具有对任何大小的网站(特别是繁忙的站点)有用的一些附加功能。 我在本教程中使用PHP-FPM,而不是Lighttpd的spawn-fcgi。

1初步说明

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

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

sudo -s

2安装MySQL 5.7

首先我们像这样安装MySQL:

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

您将被要求为MySQL root用户提供密码 - 此密码对用户root @ localhost以及root@server1.example.com有效 ,因此我们不必在以后手动指定MySQL根密码:

MySQL“root”用户的新密码: < - yourrootsqlpassword
重复MySQL“root”用户的密码: < - yourrootsqlpassword

键入MySQL密码。

安装程序设置了MySQL根密码,但是为了安全的MySQL安装,还有一些应该更改的设置。 这可以通过mysql_secure_installation命令完成。

mysql_secure_installation

命令是互动的

root@server1:~# 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: <-- Press y if you want this function or press Enter otherwise.
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Press enter

... 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!

3安装Lighttpd

Lighttpd可作为Ubuntu软件包使用。 因此,我们可以直接使用Ubuntu Xenial Xerus软件包中的apt进行安装:

apt-get -y install lighttpd

现在直接浏览器http://192.168.1.100/ ,您应该看到Lighttpd占位符页面:

Ubuntu Lighttpd默认页面。

Lighttpd的默认文件根目录是Ubuntu上的/ var / www / html ,配置文件是/etc/lighttpd/lighttpd.conf 。 其他配置存储在/ etc / lighttpd / conf-available目录中的文件中 - 可以使用lighttpd-enable-mod命令启用这些配置,该命令从/ etc / lighttpd / conf-enabled目录创建符号链接到适当的配置/ etc / lighttpd / conf-available中的文件 。 您可以使用lighttpd-disable-mod命令禁用配置。

4安装PHP 7.0

我们可以通过PHP-FPM在Lighttpd中进行PHP工作,我们安装如下:

apt-get -y install php7.0-fpm php7.0

PHP-FPM是一个守护进程(具有init脚本php5-fpm ),它在套接字/var/run/php/php7.0-fpm.sock上运行FastCGI服务器。

5配置Lighttpd和PHP 7.0

要在Lighttpd中启用PHP,我们必须修改/etc/php/7.0/fpm/php.ini并取消注释行cgi.fix_pathinfo = 1

nano /etc/php/7.0/fpm/php.ini

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]

PHP /etc/lighttpd/conf-available/15-fastcgi-php.conf的Lighttpd配置文件适用于spawn-fcgi,但是,我们要使用PHP-FPM,因此我们创建一个文件的备份(命名为15-fastcgi-php.conf.bak )并修改15-fastcgi-php.conf如下:

cd /etc/lighttpd/conf-available/
cp 15-fastcgi-php.conf 15-fastcgi-php.conf.bak
nano 15-fastcgi-php.conf

# /usr/share/doc/lighttpd-doc/fastcgi.txt.gz
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions#mod_fastcgi-fastcgi

## Start an FastCGI server for php (needs the php7.0-cgi package)
fastcgi.server += ( ".php" =>
        ((
                "socket" => "/var/run/php/php7.0-fpm.sock",
                "broken-scriptfilename" => "enable"
        ))
)

要启用fastcgi配置,请运行以下命令:

lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php

这将创建符号链接/etc/lighttpd/conf-enabled/10-fastcgi.conf ,它们指向/etc/lighttpd/conf-available/10-fastcgi.conf/ etc / lighttpd / conf-enabled / 15-fastcgi-php .conf指向/etc/lighttpd/conf-available/15-fastcgi-php.conf

ls -l /etc/lighttpd/conf-enabled

root@server1:/etc/lighttpd/conf-available# ls -l /etc/lighttpd/conf-enabled
total 0
lrwxrwxrwx 1 root root 33 Apr 27 11:26 10-fastcgi.conf -> ../conf-available/10-fastcgi.conf
lrwxrwxrwx 1 root root 37 Apr 27 11:26 15-fastcgi-php.conf -> ../conf-available/15-fastcgi-php.conf
lrwxrwxrwx 1 root root 42 Apr 21 11:10 90-javascript-alias.conf -> ../conf-available/90-javascript-alias.conf
root@server1:/etc/lighttpd/conf-available#

然后我们重新加载Lighttpd:

service lighttpd force-reload

注意:如果您获得区域设置错误,那么您可以通过使用来删除该错误

apt-get -y install language-pack-en-base 
dpkg-reconfigure locales

6测试PHP 7.0 /获取有关您的PHP安装的详细信息

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

nano /var/www/html/info.php

<?php
phpinfo();
?>

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

关于lighttpd的PHP信息。

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

7在PHP中获取MySQL支持

要在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

APCu是PHP 7附带的PHP Opcache模块的扩展,它为支持APC缓存的软件(例如Wordpress缓存插件)添加了一些兼容性功能。

APCu可以安装如下:

apt-get -y install php-apcu

现在重新加载PHP-FPM:

service php7.0-fpm reload

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

8 phpMyAdmin

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

apt-get -y install phpmyadmin

您将看到以下问题:

Web server to reconfigure automatically: <-- lighttpd
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press Enter

如果您收到以下错误:

Run /etc/init.d/lighttpd force-reload to enable changes
dpkg: error processing package phpmyadmin (--configure):
subprocess installed post-installation script returned error exit status 2
E: Sub-process /usr/bin/dpkg returned an error code (1)

然后运行以下命令:

/etc/init.d/lighttpd force-reload
apt-get -y install phpmyadmin

之后,您可以访问http://192.168.1.100/phpmyadmin/下的phpMyAdmin

使PHP-FPM使用TCP连接(可选)

默认情况下,PHP-FPM正在监听套接字/var/run/php/php7.0-fpm.sock 。 也可以使PHP-FPM使用TCP连接。 为此,请打开/etc/php/7.0/fpm/pool.d/www.conf ...

nano /etc/php/7.0/fpm/pool.d/www.conf

...并让听力线看起来如下:

[...]
;listen = /var/run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
[...]

这将使PHP-FPM在IP 127.0.0.1localhost )上的端口9000监听 。 确保使用系统上未使用的端口。

然后重新加载PHP-FPM:

service php7.0-fpm reload

接下来打开Lighttpd的PHP配置文件/etc/lighttpd/conf-available/15-fastcgi-php.conf ,并用主机端口行替换套接字行:

nano /etc/lighttpd/conf-available/15-fastcgi-php.conf

# /usr/share/doc/lighttpd-doc/fastcgi.txt.gz
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions#mod_fastcgi-fastcgi

## Start an FastCGI server for php (needs the php7.0-cgi package)
fastcgi.server += ( ".php" =>
        ((
                "host" => "127.0.0.1",
                "port" => "9000",
                "broken-scriptfilename" => "enable"
        ))
)

最后重新加载Lighttpd:

service lighttpd force-reload