在一台服务器上通过supervisor对该服务器的进程进行管理,很容易实现。网上有很多教程,比如我之前的博客:supervisor的使用教程
如果在多台服务器上都部署了supervisor做进程守护,每个supervisor都有各自的web管理,那么如果要管理多台服务器上的程序时,岂不是要登陆多个supervisor页面控制台吗?如果能把它们集合在一个页面上统一进行控制,那该有多好呢?是的,已经有人研发了这么一个工具–supervisord-monitor,这是一个php研发的工具,代码托管在gitlab,最近一次更新是四个月前。
https://github.com/mlazarov/supervisord-monitor
我们只需要把supervisord-monitor 部署到一台服务器上,就可以对其他服务器进行集群式管理了,当然,前提条件是每台服务器都必须安装supervisor,并配置运行好。
1、安装php
由于supervisord-monitor是php写的,因此首先需要安装php.
yum -y install php-fpm
我们进入到php安装后的配置文件中,将用户组修改为同nginx一致。
vim /etc/php-fpm.d/www.conf
user = root
group = root
由于是自己的服务器,我这里用的都是root用户。用root启动php时,会报错,需要按照如下进行启动。
/usr/sbin/php-fpm -R &
通过netstat -antp
查看进程,我们可以看到php-fpm在本地端口9000上运行成功。
通过ps aux|grep php-fpm
查看进程,可以看到php-fpm以root用户运次着。
2、测试php
我们先测试下nginx是否成功运行。直接在浏览器中输入服务器ip地址,我这里开的是虚拟机,地址为:192.168.134.130,在浏览器中输入后,显示如下界面则,成功运行。
然后,我们测试下php页面能否正常打开。
进入到nginx的配置:
vim /etc/nginx/nginx.conf
在server段落添加如下location:
#add
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCHEME $scheme;
include fastcgi_params;
}
然后再添加index.php页面:
vim /usr/share/nginx/html/index.php
写入如下php测试页面:
<?php
phpinfo();
?>
保存后,重启下nginx:
pikll -9 nginx # 杀死nginx进程
nginx # 重启nginx
好吧,我一般都是通过杀死进程的方式重启nginx的。
然后,在浏览器中输入:192.168.134.130/index.php
出现php的配置信息页面,则nginx + php-fpm配置成功。
如果出现将index.php下载下来的情况,有可能是因为php的user同nginx的不一致。
3、安装supervisord-monitor
通过git将supervisord-monitor下载下来。我这里将其下载到/root目录下。
git clone https://github.com/mlazarov/supervisord-monitor.git
其目录结构如下:
[root@localhost ~]# tree /root/supervisord-monitor/ -L 1
/root/supervisord-monitor/
├── application
├── composer.json
├── package.json
├── public_html
├── Readme.md
├── supervisord-monitor.png
└── system
其中application文件夹下为配置文件,public_html为前端显示页面。
首先进入到application中,将默认的配置文件重命名下:
cd /root/supervisord-monitor/application/config
cp supervisor.php.example supervisor.php
然后打开该配置文件,我们的所有需要连接的服务器都是在这个文件中进行设置的。
vim supervisor.php
按照如下格式,输入需要连接的服务器的ip地址和用户名密码即可。
$config['supervisor_servers'] = array(
'192.168.134.130' => array(
'url' => 'http://192.168.134.130/RPC2',
'port' => '9001',
'username' => 'user',
'password' => '123'
),
);
4、设置nginx
新建一个nginx配置文件,专门用来管理supervisord-mointor。
vim /etc/nginx/conf.d/supervisor.conf
写入如下配置:
server {
listen 80 default_server;
server_name 192.168.134.130;
root /root/supervisord-monitor/public_html;
location / {
index index.php index.html;
}
location /control/ {
index index.php;
rewrite /(.*)$ /index.php?$1 last;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCHEME $scheme;
include fastcgi_params;
}
}
保存后,重启nginx。
再次在浏览器中打开:192.168.134.130,一切顺利的话,便可以进入到如下界面,可以对多个服务器上的进程进行监管。
其中,第一个是我后加的,还是在前面提到的/root/supervisord-monitor/application/config/supervisor.php
中进行添加的。
5、给网站加密码
到这里我们就做好了服务器集群进程的管理了,但是有一点,这个网站如果不加密的话,任何人都可以在任何浏览器上登录,随便管理我们的服务器,这样太危险了。为此,我们通过htpasswd对该网页进行加密处理,需要登录才能进入网页。
首先,安装httpd-tools:
yum -y install httpd-tools
然后在指定位置创建密码文件,这里我们创建在supervisord-monitor的配置文件中:
htpasswd -c /root/supervisord-monitor/application/config/password admin # 创建password文件,以及用户的登录名admin
New password: admin
Re-type new password: admin
Adding password for user admin
这样我们就创建了一个用户名及密码都为admin的账户。
最后,再将其写入到nginx的配置中即可:
vim /etc/nginx/conf.d/supervisor.conf
添加如下:
auth_basic "Please input password"; #这里是验证时的提示信息
auth_basic_user_file /root/supervisord-monitor/application/config/password; # 刚才配置的password文件
再次重启nginx后,登录网站,会弹出登录窗口。登录即可。
这样我们便完成了supervisor的集群式管理。