在FreeBSD 11上安装Nginx,MariaDB和PHP(FEMP)

在本教程中,我将介绍在FreeBSD 11.x上安装和配置FEMP的过程。 FEMP软件是免费的首字母缩略词...

在FreeBSD 11上安装Nginx,MariaDB和PHP(FEMP)

在本教程中,我将介绍在FreeBSD 11.x上安装和配置FEMP的过程。 FEMP软件栈是缩写,代表通常安装在Unix / Linux操作系统中的一组程序,主要用于部署动态Web应用程序。 在这种情况下,FEMP的首字母缩写是指FreeBSD的类Unix操作系统,在其上面安装了这些应用程序:

  • Nginx Web服务器是一种快速发展的热门Web服务器,主要用于提供HTML内容,但也可以为Web服务器或其他网络服务提供负载平衡,高可用性或反向代理。
  • PHP动态编程语言解释器,用于后端操作数据库数据并创建可以包含在纯HTML中的动态Web内容。 PHP脚本只在服务器端执行,从不在客户端执行(在浏览器中)
  • Mariadb \ MySQL RDBMS这是数据存储在支持的地方,而动态处理由PHP处理。 在本教程中,我们将安装和使用MariaDB关系数据库管理系统(MySQL的社区分支),以支持由Oracle现在拥有和开发的MySQL数据库。

要求:

  • 最简单的安装FreeBSD 11.x.
  • 为网络接口配置的静态IP地址。
  • 常规帐户配置有root权限或通过root帐户直接访问系统。
  • 最好是使用最小DNS记录(A和CNAME记录)配置的公共注册域名。

第1步 - 安装MariaDB数据库

第一步,我们将安装MariaDB数据库系统,它是用于存储和管理网站动态数据的FEMP组件。 MariaDB / MySQL是世界上与Nginx或Apache Web服务器结合使用的最常用的开源关系数据库之一。 这两款服务器都被高度用于创建和开发复杂的Web应用程序或动态网站。 MariaDB可以直接从PORTS仓库提供的二进制文件安装到FreeBSD上。 但是,在FreeBSD Ports数据库部分使用ls命令进行的简单搜索会显示MariaDB的多个版本,如下面的命令输出所示。 另外,运行Package Manager pkg命令将显示相同的结果。

ls -al /usr/ports/databases/ | grep mariadb

pkg search mariadb

  MariaDB版本可用于FreeBSD 11

在本指南中,我们将使用pkg命令安装MariaDB数据库和客户端的最新版本,如以下摘录所示。

pkg install mariadb102-server mariadb102-client

MariaDB在系统中完成安装之后,请发出以下命令以启用系统范围内的MySQL服务器。 另外,请确保您启动MariaDB守护进程,如下所示。

sysrc mysql_enable=”YES”

service mysql-server start

接下来,我们需要通过运行mysql_secure_installation脚本来保护MariaDB数据库。 在运行脚本时,我们会问一系列问题。 这些问题的目的是为MySQL引擎提供一个安全级别,比如为MySQL root用户设置一个root密码,删除匿名用户,禁止root用户远程登录,删除测试数据库。 为MySQL根用户选择一个强密码后,在所有问题上回答“ ”,如以下脚本示例所示。 不要将MariaDB数据库root用户与系统root用户混淆。 尽管这些帐户具有相同的名称(root),但它们并不等同,用于不同的目的,一个用于系统管理,另一个用于数据库管理。

/usr/local/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 

In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

 

Enter current password for root (enter for none):

OK, successfully used password, moving on...

 

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

Set root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB 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? [Y/n] 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? [Y/n] y

 ... Success!

By default, MariaDB 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? [Y/n] 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? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

最后,在完成MariaDB数据库安全保护之后,运行以下命令测试是否允许从root帐户执行本地登录到数据库。 一旦连接到数据库提示符,只需键入退出退出 ,以离开数据库控制台,并返回到系统用户控制台提示符,如下图所示。

mysql -u root -p

MariaDB> quit

  测试MariaDB数据库登录

在FreeBSD上运行sockstat命令很快就揭示了MariaDB对外部网络连接的开放性,可以通过3306 / TCP端口从任何网络远程访问。

sockstat -4 -6

检查MariaDB套接字和端口

为了完全禁用到MariaDB的远程网络连接,只需要通过下面的命令将以下行添加到/etc/rc.conf文件中,就可以强制mysql网络套接字绑定到回送接口。

sysrc mysql_args="--bind-address=127.0.0.1"

之后,重新启动MariaDB守护程序以应用更改并再次执行sockstat命令以显示mysql服务的网络套接字。 这一次,MariaDB服务应该监听localhost上的网络连接:3306套接字。

service mysql-server restart

sockstat -4 -6|grep mysql

MariDB是本地主机界面

如果您正在开发需要访问此计算机上的数据库的远程Web应用程序,请通过从/ etc / rc中删除或注释mysql_args =“ - bind-address = 127.0.0.1”恢复到目前为止所做的MySQL套接字更改。 conf文件并重新启动数据库以反映更改。 在这种情况下,您应该考虑其他选择来限制或不允许远程访问MySQL,例如在本地运行防火墙,过滤需要远程登录的客户端的IP地址或使用适当的IP地址创建MySQL用户。授予登录服务器。

第2步 - 安装Nginx Web服务器

我们将在FreeBSD上为我们的FEMP安装的下一个重要守护进程是由Nginx服务表示的Web服务器。 在FreeBSD上安装Nginx web服务器的过程非常简单。 Nginx Web服务器可以从FreeBSD 11.x Ports提供的二进制文件中安装。 通过www部分中的Ports存储库的简单搜索,可以显示Nginx软件可用的预编译版本列表,如下面的命令摘录所示。

ls /usr/ports/www/ | grep nginx

执行包管理命令可以显示相同的结果,如下图所示。

pkg search –o nginx

在FreeBSD上列出Nginx的版本

为了在FreeBSD上安装最常用的Nginx版本,运行下面的命令。 在安装二进制包时,包管理器会询问您是否同意下载和安装Nginx包。 通常,您应该在提示中键入yes或y以开始安装过程。 为了避免提示在发出命令时添加-y标志: pkg -y install nginx

pkg install nginx

在FreeBSD上安装Nginx

在您的系统上安装了Nginx Web服务器软件之后,您应该通过执行以下命令来启用并运行该服务。

sysrc nginx_enable=”yes”

service nginx start

启动Nginx服务

您可以执行sockstat命令来检查Nginx服务是否在您的系统上启动,以及它绑定在哪个网络套接字上。 通常,它应该在*:80 TCP套接字上默认绑定。 您可以使用grep命令行筛选器仅显示匹配nginx服务器的套接字。

sockstat -4 -6 | grep nginx

检查Nginx是否使用sockstat命令启动

为了访问Nginx的默认网页,请在网络中的计算机上打开浏览器,并通过HTTP协议导航到您的服务器的IP地址。 如果您已经注册了域名,或者您在本地使用了本地DNS服务器,则可以在浏览器的URI字段中填写机器的完全限定域名或域名。 标题消息“欢迎使用nginx!” 在浏览器中应该会显示一些HTML行,如下图所示。

Nginx的欢迎页面

在FreeBSD 11.x中为Nginx存储网络文件的位置是/ usr / local / www / nginx /目录。 这个目录是一个到nginx-dist目录的符号链接。 要部署网站,请将html或php脚本文件复制到此目录中。 为了更改Nginx默认的webroot目录,打开/ usr / local / etc / nginx /目录下的Nginx配置文件,并更新root语句行,如下例所示。

nano /usr/local/etc/nginx/nginx.conf

这将是Nginx新的webroot路径:

root       /usr/local/www/new_html_directory;

更改Nginx Web根目录

第3步 - 安装PHP编程语言

默认情况下,Nginx Web服务器不能直接解析PHP脚本,Nginx需要通过FastCGI网关将PHP代码传递给PHP-FPM守护进程,后者解释并执行PHP脚本。 为了在FreeBSD中安装PHP-FPM守护进程,通过发出以下命令来搜索可用的PHP预编译二进制包。

ls /usr/ports/lang/ | grep php

pkg search –o php

从FreeBSD Ports存储库中提供的大量PHP版本中,通过发出以下命令,选择安装最新版本的PHP解释器(目前是PHP 7.1版本)。

pkg install php71

为了安装一些额外的PHP扩展,可能需要部署复杂的Web应用程序,请发出以下命令。 官方支持的PHP扩展的列表可以通过访问以下链接找到: http : //php.net/manual/en/extensions.alphabetical.php

如果您打算建立一个基于内容管理系统的网站,请查看CMS文档,以便找出您系统的要求,尤其是需要哪些PHP模块或扩展。

php71-mcrypt mod_php71 php71-mbstring php71-curl php71-zlib php71-gd php71-json

由于我们在设置中运行的是数据库服务器,因此我们还应该安装PHP解释器用来连接到MariaDB数据库的PHP数据库驱动程序扩展。

pkg install php71-mysqli

接下来,通过编辑PHP-FPM配置文件来更新PHP-FPM用户和组,以匹配Nginx运行时用户。 将用户和组的行变量更改为www ,如下面的摘录所示。

cp /usr/local/etc/php-fpm.d/www.conf{,.backup}

nano /usr/local/etc/php-fpm.d/www.conf

改变下面的行看起来如下。

user = www
group = www

  更改PHP用户

默认情况下,Nginx守护进程以“ nobody ”系统用户的特权运行。 通过编辑/usr/local/etc/nginx/nginx.conf文件更改Nginx运行时用户以匹配PHP-FPM运行时用户,并更新以下行:

user www;

用户www用户

默认情况下,FreeBSD中的PHP-FPM守护进程在localhost:9000 TCP端口上打开一个网络套接字,处于监听状态。 要显示这个套接字,你可以使用sockstat命令,如下面的例子所示。

sockstat -4 -6| grep php-fpm

检查php-fpm套接字

为了让Nginx Web服务器在127.0.0.1:9000网络套接字上与PHP FastCGI网关交换PHP脚本,打开Nginx配置文件并更新PHP-FPM块,如下面的示例所示。

用于Nginx的PHP FastCGI网关示例:

        location ~ \.php$ {
        root               /usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;   
        include        fastcgi_params;
               }

Nginx的PHP配置

完成上述所有更改后,通过发出以下命令,基于默认生产文件为PHP创建配置文件。 您可以通过编辑php.ini文件中的变量来更改PHP运行时设置。

ln -s /usr/local/etc/php.ini-production /usr/local/etc/php.ini

最后,为了应用到目前为止所做的所有更改,请启用系统范围内的PHP-FPM守护进程,并通过发出以下命令来重新启动PHP-FPM和Nginx服务。

sysrc php_fpm_enable=yes

service php-fpm restart

测试nginx配置的语法错误:

nginx –t  

service nginx restart

测试nginx语法并重新启动nginx

为了在FreeBSD中获得当前PHP的FEMP栈信息,通过发出以下命令在服务器文档根目录下创建一个phpinfo.php文件。

echo "<?php phpinfo(); ?>" | tee /usr/local/www/nginx/phpinfo.php

然后,打开一个浏览器并通过访问服务器的域名或公共IP地址后面的/phpinfo.php文件导航到phpinfo.php页面,如下图所示。

PHPinfo输出

就这样! 您已经在FreeBSD 11中成功安装并配置了FEMP。现在,环境已经准备就绪,可以开始在您的场所部署动态Web应用程序。