在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
在本指南中,我们将使用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
在FreeBSD上运行sockstat命令很快就揭示了MariaDB对外部网络连接的开放性,可以通过3306 / TCP端口从任何网络远程访问。
sockstat -4 -6
为了完全禁用到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
如果您正在开发需要访问此计算机上的数据库的远程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版本,运行下面的命令。 在安装二进制包时,包管理器会询问您是否同意下载和安装Nginx包。 通常,您应该在提示中键入yes或y以开始安装过程。 为了避免提示在发出命令时添加-y标志: pkg -y install nginx 。
pkg install nginx
在您的系统上安装了Nginx Web服务器软件之后,您应该通过执行以下命令来启用并运行该服务。
sysrc nginx_enable=”yes”
service nginx start
您可以执行sockstat命令来检查Nginx服务是否在您的系统上启动,以及它绑定在哪个网络套接字上。 通常,它应该在*:80 TCP套接字上默认绑定。 您可以使用grep命令行筛选器仅显示匹配nginx服务器的套接字。
sockstat -4 -6 | grep nginx
为了访问Nginx的默认网页,请在网络中的计算机上打开浏览器,并通过HTTP协议导航到您的服务器的IP地址。 如果您已经注册了域名,或者您在本地使用了本地DNS服务器,则可以在浏览器的URI字段中填写机器的完全限定域名或域名。 标题消息“欢迎使用nginx!” 在浏览器中应该会显示一些HTML行,如下图所示。
在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;
第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
默认情况下,Nginx守护进程以“ nobody ”系统用户的特权运行。 通过编辑/usr/local/etc/nginx/nginx.conf文件更改Nginx运行时用户以匹配PHP-FPM运行时用户,并更新以下行:
user www;
默认情况下,FreeBSD中的PHP-FPM守护进程在localhost:9000 TCP端口上打开一个网络套接字,处于监听状态。 要显示这个套接字,你可以使用sockstat命令,如下面的例子所示。
sockstat -4 -6| grep 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;
}
完成上述所有更改后,通过发出以下命令,基于默认生产文件为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
为了在FreeBSD中获得当前PHP的FEMP栈信息,通过发出以下命令在服务器文档根目录下创建一个phpinfo.php文件。
echo "<?php phpinfo(); ?>" | tee /usr/local/www/nginx/phpinfo.php
然后,打开一个浏览器并通过访问服务器的域名或公共IP地址后面的/phpinfo.php文件导航到phpinfo.php页面,如下图所示。
就这样! 您已经在FreeBSD 11中成功安装并配置了FEMP。现在,环境已经准备就绪,可以开始在您的场所部署动态Web应用程序。