在Gentoo Linux中安装LEMP(Linux、Nginx、MySQL/MariaDB、PHP/PHP-FPM和PhpMyAdmin)

Gentoo 是最快的 Linux 发行版之一,因为它基于源代码构建,并通过它的软件管理程序 Portage 提供了构建完整的 Web 开发平台所需的工具,这种平台运行速度非常快,并具有很高的可定制化程度。

Install Nginx in Gentoo Linux

本主题将带您逐步完成构建完整的 Web 环境平台的安装过程,使用 LEMP(Linux Nginx、MySQL/MariaDB、PHP-FPM/PhpMyadmin),并借助 Portage 包管理提供的 USE 标志,这些标志在编译过程中提供一组包功能 – 模块或设置,用于构建 Web 平台,将极大地调整服务器配置。

要求

  1. 使用加固配置文件对 Gentoo 进行安装,用于互联网服务器 – Gentoo 安装指南
  2. 配置具有静态 IP 地址的网络。

步骤 1:安装 Nginx Web 服务器

1. 在尝试安装 Nginx 之前,请确保您的 NIC 已配置为静态 IP 地址,并确保 Portage 源和系统已经更新。

$ sudo su -
# emerge --sync
# emerge --update --deep --with-bdeps=y @world
Update Gentoo Linux

2. 更新完成后,通过将 Nginx USE 标志 回显到 Portage 的 make.conf 文件中,选择首选设置和模块进行 Nginx 安装。首先运行以下命令列出 Nginx 的默认安装模块。

# emerge -pv nginx

要获取详细的模块信息(软件包的USE标志),请使用equery命令。

# equery uses nginx
List All Flag Modules

然后使用以下命令安装Nginx。

# emerge --ask nginx
Install Nginx Web Server

如果除了默认模块外需要额外的模块(如WebDAV、fancyindex、GeoIP等),供Nginx编译时使用,请将它们全部追加到Portage的make.conf文件中,使用NGINX_MODULES_HTTP指令,然后重新编译Nginx。

# echo 'NGINX_MODULES_HTTP="dav auth_pam fancyindex geoip fastcgi uwsgi gzip rewrite"' >> /etc/portage/make.conf
# emerge --ask nginx
Compile Nginx for New Modules

3. 在Portage完成Nginx的安装后,启动http守护进程,并通过将浏览器指向http://localhost来验证它。

Verify Nginx Web Server

第2步:安装PHP

4. 要在Nginx服务器上使用PHP动态网页编程语言,请安装PHP-FastCGI进程管理器FPM),通过在Portage的USE标志中追加fpm和其他重要的PHP扩展,并确保删除Apache扩展。

# emerge -pv php
Install PHP in Gentoo
# equery uses php
PHP Extension Selection
# echo " dev-lang/php fpm cgi curl gd imap mysql mysqli pdo zip json xcache apc zlib zip truetype -apache2 " >> /etc/portage/package.use
# emerge --ask php

5. 在启动PHP-FPM之前,需要对服务配置文件进行一些更改。打开php-fpm配置文件,并进行以下更改。

# nano /etc/php/fpm-php5.5/php-fpm.conf

找到并取消注释以下指令,使其看起来像这样。

error_log = /var/log/php-fpm.log
listen = 127.0.0.1:9000    ## Here you can use any HTTP socket (IP-PORT combination ) you want  ##
pm.start_servers = 20

6. 编辑完PHP-FPM配置文件后,更改PHP-FPM日志文件权限并启动服务。

# chmod 755 /var/log/php-fpm.log
# /etc/init.d/php-fpm start

即使PHP-FPM服务已启动,Nginx仍无法与PHP网关通信,因此需要对Nginx配置文件进行一些更改。

第3步:编辑Nginx配置

7. Nginx的默认模板配置文件只提供了一个仅供本地主机使用的基本HTTP套接字。要更改此行为并启用虚拟主机,请打开位于路径/etc/nginx/nginx.conf文件并进行以下配置。

# nano /etc/nginx/nginx.conf

找到对应于本地主机并侦听127.0.0.1 IP地址的第一个server块,并将其所有语句注释掉,使其看起来像下面截图中的样子。

Disable Basic HTTP Configuration

不要关闭文件,直接移动到底部,在最后一个闭合的括号“ } “之前添加以下语句。

Include /etc/nginx/sites-enabled/*.conf;
Enable Nginx Virtual Host

8. 接下来为HTTP和HTTPS协议在localhost上创建sites-enabledsites-available(未使用的虚拟主机)Nginx目录和配置文件。

# mkdir /etc/nginx/sites-available
# mkdir /etc/nginx/sites-enabled

为localhost创建以下文件配置。

# nano /etc/nginx/sites-available/localhost.conf

添加以下文件内容。

server {
               listen 80;
               server_name localhost;

               access_log /var/log/nginx/localhost_access_log main;
               error_log /var/log/nginx/localhost_error_log info;

               root /var/www/localhost/htdocs;

                location / {
                index index.html index.htm index.php;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;

                                }

                         location ~ \.php$ {
                       # Test for non-existent scripts or throw a 404 error
                       # Without this line, nginx will blindly send any request ending in .php to php-fpm
                       try_files $uri =404;
                        include /etc/nginx/fastcgi.conf;
                       fastcgi_pass 127.0.0.1:9000;  ## Make sure the socket corresponds with PHP-FPM conf file
                        }
                }
Create Nginx Virtual Host Configuration

针对带SSL的localhost创建以下配置文件。

# nano /etc/nginx/sites-available/localhost-ssl.conf

添加以下文件内容。

server {
               listen 443 ssl;
               server_name localhost;

            ssl on;
               ssl_certificate /etc/ssl/nginx/nginx.pem;
               ssl_certificate_key /etc/ssl/nginx/nginx.key;

               access_log /var/log/nginx/localhost.ssl_access_log main;
               error_log /var/log/nginx/localhost.ssl_error_log info;

               root /var/www/localhost/htdocs;

                                location / {
                index index.html index.htm index.php;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                                 }                                                

                      location ~ \.php$ {
                       # Test for non-existent scripts or throw a 404 error
                       # Without this line, nginx will blindly send any request ending in .php to php-fpm
                       try_files $uri =404;
                       include /etc/nginx/fastcgi.conf;
                       fastcgi_pass 127.0.0.1:9000;
                                }
                }
Create SSL Nginx Virtual Host

9. 现在是时候在系统可执行路径($PATH shell变量)上创建两个脚本,充当命令以激活或禁用Nginx虚拟主机。

创建第一个Bash脚本命名为n2ensite,通过在sites-enabledsites-available之间创建指定主机的符号链接来启用虚拟主机配置文件。

# nano /usr/local/bin/n2eniste

添加以下文件内容。

#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi

avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2ensite virtual_site"
                echo -e "\nAvailable virtual hosts:\n$site"
                exit 0
else

if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi

if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo /etc/init.d/ nginx restart"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi
Create Virtual Host Enable Script

10. 然后创建第二个名为n2dissite的脚本,该脚本将从sites-enabled Nginx路径中删除指定的活动虚拟主机,内容如下。

# nano /usr/local/bin/n2dissite

添加以下内容。

#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2dissite virtual_site"
                echo -e "\nAvailable virtual hosts: \n$site"
                exit 0
else

if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi

if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Nginx: sudo /etc/init.d/nginx restart"
exit 0
fi
fi
Create Virtual Host Disable Script

11. 编辑完Bash脚本后,附加执行权限并激活本地主机虚拟主机 – 使用虚拟主机配置文件名,不包括.conf扩展名,然后重新启动Nginx和PHP-FPM服务以应用更改。

# chmod +x /usr/local/bin/n2dissite
# chmod +x /usr/local/bin/n2ensite
# n2ensite localhost
# n2ensite localhost-ssl
# service nginx restart
# service php-fpm restart
Restart Nginx and PHP-FPM

12. 为了测试配置,在本地主机默认的Web文件根路径(/var/www/localhost/htdocs)上创建一个PHP信息文件,并将浏览器重定向到https://localhost/info.phphttp://localhost/info.php

echo "<?php phpinfo(); ?>" /var/www/localhost/htdocs/info.php
Verify PHP Configuration

使用本地主机虚拟主机配置文件作为模板,结合Nginx的n2enmodn2dismod,您现在可以轻松添加任意数量的网站,但请确保您有用于面向互联网的Web服务器的有效DNS指针,或者在系统hosts文件中使用本地条目。

第四步:安装MySQL/MariaDB + PhpMyAdmin

要安装MySQL数据库和MySQL的PhpMyAdmin Web界面,请使用在在Gentoo上安装LAMP中提供的相同步骤。

13. 如果要使用MariaDB,作为MySQL的替代,请使用以下命令获取USE flags并安装它。

# emerge -pv mariadb
# emerge --ask mariadb
Install MariaDB Database

如果与MySQL发生软件包冲突,请将以下行添加到Portage的package.accept.keywords中。

# echo “=dev-db/mariadb-5.5.37-r1 ~amd64” >> /etc/portage/package.accept.keywords
# echo “=virtual/mysql-5.5 ~amd64” >> /etc/portage/package.accept.keywords
# emerge --ask mariadb

14.安装完MySQL数据库后,启动服务并使用mysql_secure_installation进行安全设置(更改root密码,禁用非本地登录的root账户,移除匿名用户/测试数据库)

# service mysql start
# mysql_secure_installation

15.输入MySQL数据库,使用mysql -u root -p命令测试其功能,然后用exit命令退出

# mysql -u root -p

MariaDB > show databases;
MariaDB > exit;
Verify MySQL Connectivity

16.如果您对MySQL命令行不太熟悉,可以通过执行以下命令安装PhpMyAdmin Web前端

# emerge -pv dev-db/phpmyadmin
# echo “dev-db/phpmyadmin setup vhosts” >> /etc/portage/package.use
# emerge  --ask dev-db/phpmyadmin
Install PhpMyAdmin

17.在PhpMyAdmin安装完成后,根据示例配置文件创建配置文件,将blowfish_secret密码串更改为随机字符串,然后创建一个符号链接,链接源为/usr/share/webapps/phpmyadmin/phpmyadmin_version_number/htdocs/,目标为您希望访问PhpMyAdmin Web接口的虚拟主机文档根路径

# cd /usr/share/webapps/phpmyadmin/4.2.2/htdocs/
# cp config.sample.inc.php  config.inc.php
# nano config.inc.php
Configure PHPMyAdmin
# ln -s /usr/share/webapps/phpmyadmin/4.2.2/htdocs/  /var/www/localhost/htdocs/phpmyadmin
Create a PhpMyAdmin Symbolic Link

18.访问PhpMyAdmin Web界面通过浏览器,使用以下URL地址https://localhost/phpmyadmin

Verify PhpMyAdmin Login

19.最后一步是在整个系统中启用服务,以便在重新启动后自动启动

# rc-update add nginx default
# rc-update add php-fpm default
# rc-update add mysql default
Enable Services System Wide

现在我们已经为Web托管设置了基本环境,如果您只使用HTML、JavaScript和PHP动态生成页面,不需要SSL网站,上述配置对您应该是满意的。

Source:
https://www.tecmint.com/install-lemp-in-gentoo-linux/