LAMP/LNMP纯净原版一键Shell安装开发进度(2)

王志勇 发表于 2019年09月17日 09:42

昨天开始开发LNMP的一键安装,进展很快,几乎已经快要完成Ubuntu 16下的LNMP+自带PHP、LNMP+PPA+PHP 7.X。之所以进展这样快,是因为有很多语句可以和原来的LAMP语句共用。LNMP的一键安装环境开发比LAMP复杂不少,主要一是不同系统Nginx的配置文件路径不一;二是www.conf文件的路径不一;三是php-fpm的重启进程名不一。解决办法是,www.conf采用find查找的方法;Nginx的PHP服务进程名用service --status-all | grep 'php'查找fpm进程的方法。

对于LNMP不同系统Nginx的配置文件路径不一,唯一的解决办法是Ubuntu、Debian、CentOS这三家每推出一个新的主版本,则必须再调试一遍,如果有不同,就在一键Shell命令里添加新规则。

特别是Nginx的PHP服务进程,Ubuntu 14下是php5-fpm,重启fpm进程的命令是service php5-fpm restart,CentOS 6下是php-fpm,重启fpm进程的命令是service php-fpm restart。

到了Ubuntu 16,自带的PHP软件源的进程是php7.0-fpm,重启fpm进程的命令是service php7.0-fpm restart

PPA+PHP的重启fpm进程的命令,同样服务进程名要加版本号,例如:
service php7.4-fpm restart
service php7.3-fpm restart
service php5.6-fpm restart
等等。

LNMP和LAMP有一点不同的是,当修改了Apache的配置文件或php.ini,只需重启Apache。而LNMP则需要重启Nginx、重启fpm进程

作为一键通用版,要判断这个PHP的服务进程名是十分困难的,幸好有service --status-all这个命令可以显示所有的服务,并从中筛选出关键词“php”或“fpm”,命令为service --status-all | grep 'php',即可显示出PHP的服务进程名,显示的结果为:

[ + ] php7.4-fpm

这时,要把php7.4-fpm前的[ + ]和空格全都去掉。用这个Shell替换语句:
将${a1}里的所有123替换为321:

b1=${a1//123/321};

所以[ + ]和空格全都去掉的Shell程序是:
a1=`service --status-all | grep 'php'`;
a1=${a1// /};
a1=${a1//[/};
a1=${a1//+]/};
a1=${a1//-]/};

所以,通用的LNMP下的重启fpm进程的命令是:

a1=`service --status-all | grep 'php'`; a1=${a1// /}; a1=${a1//[/}; a1=${a1//+]/}; a1=${a1//-]/}; if [ "$a1"x != ''x ]; then service $a1 restart; fi;

LNMP下的重启Nginx、fpm进程的命令是:(已集成在一键Shell命令中)

service nginx restart; a1=`service --status-all | grep 'php'`; a1=${a1// /}; a1=${a1//[/}; a1=${a1//+]/}; a1=${a1//-]/}; if [ "$a1"x != ''x ]; then service $a1 restart; fi;

2019-09-18 09:08更新:
service --status-all | grep 'php'这条命令在Ubnutu 16下完美运行,只显示一个fpm服务进程。但在Ubuntu 12下会显示很多别的服务进程,所以这条命令无法用,需要进行改进。
(更新完)

开发LNMP安装还有一个困难是,因为我作为作者个人的主力生产环境是LAMP,而LNMP的生产环境一个都没有部署,所以更熟悉LAMP环境。Apache的功能比Nginx多很多,而且性能也并不比Nginx差。现阶段我暂时用不到Nginx,只有在开发中才会安装、配置、测试。而现阶段国内使用Apache的用户越来越少,大部分人都使用Nginx,所以我需要强迫自己把Nginx用起来。

www.conf在通用版中,采用find查找的方法:
a1=`find /etc -name 'www.conf'`;
a1就是这个www.conf文件,它的作用主要用来修改listen,必须改为listen=127.0.0.1:9000,否则很多Nginx+PHP安装后,一直是502错误,这是安装LNMP成功的关键

在去年写的Ubuntu 14+Nginx+PHP,如 http://www.auiou.com/relevant/00000941.jsp
这次调试中发现,Ubuntu 16和Ubuntu 14下还是有些不同。

上述这篇链接,已经在这个新编写的一键Shell命令里全自动配置,配置的步骤也和上述链接里写的完全一样。

开发这个LNMP一键安装命令,需要修改Nginx配置文件里的这段:
#location ~ .php$ {
# fastcgi_split_path_info ^(.+.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_index index.php;
# include fastcgi_params;
#}

让一键安装程序自动修改的方案,我是先让程序备份一次这个文件,然后采用sed命令,只替换掉#location ~ .php$这一行使其写入正确的代码如下:

location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

这时PHP才能运行。PHP能运行之后,再用PHP程序删除带有#的行。PHP程序的功能比Shell程序多得多,修改之后再用Shell命令替换配置好的文件。

2条评论:
1   游客 2019-09-18 00:00
无意中看到,没想到现在还有人持续在用博客,怀念。。。

自由勇 2019-09-18 06:13
谢谢关注!:)

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写