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

本主题将带您逐步完成构建完整的 Web 环境平台的安装过程,使用 LEMP(Linux Nginx、MySQL/MariaDB、PHP-FPM/PhpMyadmin),并借助 Portage 包管理提供的 USE 标志,这些标志在编译过程中提供一组包功能 – 模块或设置,用于构建 Web 平台,将极大地调整服务器配置。
要求
- 使用加固配置文件对 Gentoo 进行安装,用于互联网服务器 – Gentoo 安装指南。
- 配置具有静态 IP 地址的网络。
步骤 1:安装 Nginx Web 服务器
1. 在尝试安装 Nginx 之前,请确保您的 NIC 已配置为静态 IP 地址,并确保 Portage 源和系统已经更新。
$ sudo su - # emerge --sync # emerge --update --deep --with-bdeps=y @world

2. 更新完成后,通过将 Nginx USE 标志 回显到 Portage 的 make.conf 文件中,选择首选设置和模块进行 Nginx 安装。首先运行以下命令列出 Nginx 的默认安装模块。
# emerge -pv nginx
要获取详细的模块信息(软件包的USE标志),请使用equery命令。
# equery uses nginx

然后使用以下命令安装Nginx。
# emerge --ask nginx

如果除了默认模块外需要额外的模块(如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

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

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

# equery uses php

# 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块,并将其所有语句注释掉,使其看起来像下面截图中的样子。

不要关闭文件,直接移动到底部,在最后一个闭合的括号“ } “之前添加以下语句。
Include /etc/nginx/sites-enabled/*.conf;

8. 接下来为HTTP和HTTPS协议在localhost上创建sites-enabled和sites-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 } }

针对带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; } }

9. 现在是时候在系统可执行路径($PATH shell变量)上创建两个脚本,充当命令以激活或禁用Nginx虚拟主机。
创建第一个Bash脚本命名为n2ensite,通过在sites-enabled和sites-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

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

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

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

使用本地主机虚拟主机配置文件作为模板,结合Nginx的n2enmod和n2dismod,您现在可以轻松添加任意数量的网站,但请确保您有用于面向互联网的Web服务器的有效DNS指针,或者在系统hosts文件中使用本地条目。
第四步:安装MySQL/MariaDB + PhpMyAdmin
要安装MySQL数据库和MySQL的PhpMyAdmin Web界面,请使用在在Gentoo上安装LAMP中提供的相同步骤。
13. 如果要使用MariaDB,作为MySQL的替代,请使用以下命令获取USE flags并安装它。
# emerge -pv mariadb # emerge --ask mariadb

如果与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;

16.如果您对MySQL命令行不太熟悉,可以通过执行以下命令安装PhpMyAdmin Web前端
# emerge -pv dev-db/phpmyadmin # echo “dev-db/phpmyadmin setup vhosts” >> /etc/portage/package.use # emerge --ask dev-db/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

# ln -s /usr/share/webapps/phpmyadmin/4.2.2/htdocs/ /var/www/localhost/htdocs/phpmyadmin

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

19.最后一步是在整个系统中启用服务,以便在重新启动后自动启动
# rc-update add nginx default # rc-update add php-fpm default # rc-update add mysql default

现在我们已经为Web托管设置了基本环境,如果您只使用HTML、JavaScript和PHP动态生成页面,不需要SSL网站,上述配置对您应该是满意的。
Source:
https://www.tecmint.com/install-lemp-in-gentoo-linux/