mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 01:39:25 +08:00
PHP-FPM设置多个应用池
This commit is contained in:
@@ -8,10 +8,10 @@ listen.group = {$PHP_GROUP}
|
||||
listen.backlog = 4096
|
||||
|
||||
pm = dynamic
|
||||
pm.max_children = 50
|
||||
pm.start_servers = 5
|
||||
pm.min_spare_servers = 5
|
||||
pm.max_spare_servers = 35
|
||||
pm.max_children = 3
|
||||
pm.start_servers = 1
|
||||
pm.min_spare_servers = 1
|
||||
pm.max_spare_servers = 2
|
||||
pm.status_path = /phpfpm_status_{$PHP_VERSION}_backup
|
||||
pm.max_requests = 1000
|
||||
request_terminate_timeout = 30
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<p onclick="phpCommonFunc($('.plugin_version').attr('version'));">常用功能</p>
|
||||
<p onclick="pluginConfig('php', $('.plugin_version').attr('version'));">配置文件</p>
|
||||
<p onclick="disableFunc($('.plugin_version').attr('version'));">禁用函数</p>
|
||||
<p onclick="pluginConfig('php', $('.plugin_version').attr('version'),'get_fpm_conf_file');">FPM配置</p>
|
||||
<p onclick="phpFpmConfigFile($('.plugin_version').attr('version'),'get_fpm_conf_file');">FPM配置</p>
|
||||
<p onclick="getFpmConfig($('.plugin_version').attr('version'));">性能调整</p>
|
||||
<p onclick="getFpmStatus($('.plugin_version').attr('version'));">负载状况</p>
|
||||
<p onclick="getSessionConfig($('.plugin_version').attr('version'));" title="session管理">会话管理</p>
|
||||
|
||||
+32
-13
@@ -59,7 +59,6 @@ def getArgs():
|
||||
else:
|
||||
t = t.split(':', 1)
|
||||
tmp[t[0]] = t[1]
|
||||
tmp[t[0]] = t[1]
|
||||
elif args_len > 1:
|
||||
for i in range(len(args)):
|
||||
t = args[i].split(':')
|
||||
@@ -80,6 +79,9 @@ def getConf(version):
|
||||
|
||||
|
||||
def getFpmConfFile(version, pool='www'):
|
||||
args = getArgs()
|
||||
if 'pool' in args:
|
||||
pool = args['pool']
|
||||
return getServerDir() + '/' + version + '/etc/php-fpm.d/'+pool+'.conf'
|
||||
|
||||
def getFpmFile(version):
|
||||
@@ -220,15 +222,16 @@ def phpFpmReplace(version):
|
||||
mw.writeFile(desc_php_fpm, content)
|
||||
|
||||
|
||||
def phpFpmWwwReplace(version):
|
||||
|
||||
def phpFpmPoolReplace(version, pool = 'www'):
|
||||
service_php_fpm_dir = getServerDir() + '/' + version + '/etc/php-fpm.d/'
|
||||
|
||||
if not os.path.exists(service_php_fpm_dir):
|
||||
os.mkdir(service_php_fpm_dir)
|
||||
|
||||
service_php_fpmwww = service_php_fpm_dir + '/www.conf'
|
||||
service_php_fpmwww = service_php_fpm_dir + '/'+pool+'.conf'
|
||||
if not os.path.exists(service_php_fpmwww):
|
||||
tpl_php_fpmwww = getPluginDir() + '/conf/www.conf'
|
||||
tpl_php_fpmwww = getPluginDir() + '/conf/'+pool+'.conf'
|
||||
content = mw.readFile(tpl_php_fpmwww)
|
||||
content = contentReplace(content, version)
|
||||
mw.writeFile(service_php_fpmwww, content)
|
||||
@@ -269,7 +272,8 @@ def initReplace(version):
|
||||
mw.execShell('chmod +x ' + file_bin)
|
||||
|
||||
phpPrependFile(version)
|
||||
phpFpmWwwReplace(version)
|
||||
phpFpmPoolReplace(version, 'www')
|
||||
phpFpmPoolReplace(version, 'backup')
|
||||
phpFpmReplace(version)
|
||||
|
||||
session_path = getServerDir() + '/tmp/session'
|
||||
@@ -542,9 +546,13 @@ def setMaxSize(version):
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def getFpmConfig(version):
|
||||
def getFpmConfig(version, pool = 'www'):
|
||||
args = getArgs()
|
||||
pool = 'www'
|
||||
if 'pool' in args:
|
||||
pool = args['pool']
|
||||
|
||||
filefpm = getServerDir() + '/' + version + '/etc/php-fpm.d/www.conf'
|
||||
filefpm = getServerDir() + '/' + version + '/etc/php-fpm.d/'+pool+'.conf'
|
||||
conf = mw.readFile(filefpm)
|
||||
data = {}
|
||||
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*"
|
||||
@@ -580,8 +588,10 @@ def setFpmConfig(version):
|
||||
min_spare_servers = args['min_spare_servers']
|
||||
max_spare_servers = args['max_spare_servers']
|
||||
pm = args['pm']
|
||||
pool = args['pool']
|
||||
|
||||
file = getServerDir() + '/' + version + '/etc/php-fpm.d/www.conf'
|
||||
|
||||
file = getServerDir() + '/' + version + '/etc/php-fpm.d/'+pool+'.conf'
|
||||
conf = mw.readFile(file)
|
||||
|
||||
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*"
|
||||
@@ -624,8 +634,10 @@ def setFpmConfig(version):
|
||||
# return True
|
||||
|
||||
|
||||
def getFpmAddress(version):
|
||||
def getFpmAddress(version, pool='www'):
|
||||
fpm_address = '/tmp/php-cgi-{}.sock'.format(version)
|
||||
if pool != 'www':
|
||||
fpm_address = '/tmp/php-cgi-{}.{}.sock'.format(version,pool)
|
||||
php_fpm_file = getFpmConfFile(version)
|
||||
try:
|
||||
content = readFile(php_fpm_file)
|
||||
@@ -656,14 +668,21 @@ def getFpmStatus(version):
|
||||
if stat == 'stop':
|
||||
return mw.returnJson(False, 'PHP[' + version + ']未启动!!!')
|
||||
|
||||
sock_file = getFpmAddress(version)
|
||||
args = getArgs()
|
||||
pool = 'www'
|
||||
if 'pool' in args:
|
||||
pool = args['pool']
|
||||
|
||||
sock_file = getFpmAddress(version, pool)
|
||||
uri = '/phpfpm_status_' + version + '?json'
|
||||
if pool != 'www':
|
||||
uri = '/phpfpm_status_' + version + '_'+pool+'?json'
|
||||
try:
|
||||
sock_data = mw.requestFcgiPHP(
|
||||
sock_file, '/phpfpm_status_' + version + '?json')
|
||||
sock_data = mw.requestFcgiPHP(sock_file, uri)
|
||||
except Exception as e:
|
||||
return mw.returnJson(False, str(e))
|
||||
|
||||
# print(data)
|
||||
|
||||
result = str(sock_data, encoding='utf-8')
|
||||
data = json.loads(result)
|
||||
fTime = time.localtime(int(data['start time']))
|
||||
|
||||
+123
-8
@@ -188,9 +188,89 @@ function phpFpmRoot(version){
|
||||
});
|
||||
}
|
||||
|
||||
function phpFpmConfigFile(version, func, pool = 'www'){
|
||||
var _name = 'php';
|
||||
if ( typeof(version) == 'undefined' ){
|
||||
version = '';
|
||||
}
|
||||
|
||||
function getFpmConfig(version){
|
||||
phpPost('get_fpm_conf', version, {}, function(data){
|
||||
var func_name = 'conf';
|
||||
if ( typeof(func) != 'undefined' ){
|
||||
func_name = func;
|
||||
}
|
||||
|
||||
var poolSelect = "<select class='bt-input-text' name='pool' style='width:100px;'>\
|
||||
<option value='www' " + (pool == 'www' ? 'selected' : '') + ">www</option>\
|
||||
<option value='backup' " + (pool == 'backup' ? 'selected' : '') + ">backup</option>\
|
||||
</select>";
|
||||
|
||||
var con = '<p style="color: #666; margin-bottom: 7px">提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!</p>\
|
||||
<textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\
|
||||
<button id="onlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">保存</button>\
|
||||
'+poolSelect+'\
|
||||
<ul class="help-info-text c7 ptb15">\
|
||||
<li>此处为'+ _name + version +'应用池配置文件,若您不了解配置规则,请勿随意修改。</li>\
|
||||
</ul>';
|
||||
|
||||
|
||||
var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||
|
||||
var request_data = {name:_name, func:func_name,version:version};
|
||||
request_data['args'] = JSON.stringify({'pool':pool});
|
||||
|
||||
$.post('/plugins/run', request_data, function (data) {
|
||||
layer.close(loadT);
|
||||
|
||||
try{
|
||||
var jdata = $.parseJSON(data.data);
|
||||
if (!jdata['status']){
|
||||
layer.msg(jdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
}catch(err){/*console.log(err);*/}
|
||||
|
||||
$(".soft-man-con").html(con);
|
||||
|
||||
var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||
var fileName = data.data;
|
||||
$.post('/files/get_body', 'path=' + fileName, function(rdata) {
|
||||
layer.close(loadT2);
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
$("#textBody").empty().text(rdata.data.data);
|
||||
$(".CodeMirror").remove();
|
||||
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {
|
||||
extraKeys: {
|
||||
"Ctrl-Space": "autocomplete",
|
||||
"Ctrl-F": "findPersistent",
|
||||
"Ctrl-H": "replaceAll",
|
||||
"Ctrl-S": function() {
|
||||
$("#textBody").text(editor.getValue());
|
||||
pluginConfigSave(fileName);
|
||||
}
|
||||
},
|
||||
lineNumbers: true,
|
||||
matchBrackets:true,
|
||||
});
|
||||
editor.focus();
|
||||
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
|
||||
$("#onlineEditFileBtn").click(function(){
|
||||
$("#textBody").text(editor.getValue());
|
||||
pluginConfigSave(fileName);
|
||||
});
|
||||
},'json');
|
||||
|
||||
$('select[name="pool"]').change(function(){
|
||||
var pool = $(this).val();
|
||||
phpFpmConfigFile(version, func, pool);
|
||||
});
|
||||
},'json');
|
||||
}
|
||||
|
||||
function getFpmConfig(version, pool = 'www'){
|
||||
phpPost('get_fpm_conf', version, {'pool':pool}, function(data){
|
||||
// console.log(data);
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// console.log(rdata);
|
||||
@@ -207,7 +287,12 @@ function getFpmConfig(version){
|
||||
for (var i = 0; i < pms.length; i++) {
|
||||
pmList += '<option value="' + pms[i].name + '" ' + ((pms[i].name == rdata.pm) ? 'selected' : '') + '>' + pms[i].title + '</option>';
|
||||
}
|
||||
|
||||
var poolHtml = "<option value='www' " + (pool == 'www' ? 'selected' : '') + ">www</option>" +
|
||||
"<option value='backup' " + (pool == 'backup' ? 'selected' : '') + ">backup</option>";
|
||||
|
||||
var body = "<div class='bingfa'>" +
|
||||
"<p class='line'><span class='span_tit'>应用池[pool]:</span><select class='bt-input-text' name='pool' style='width:100px;'>" + poolHtml + "</select></p>" +
|
||||
"<p class='line'><span class='span_tit'>并发方案:</span><select class='bt-input-text' name='limit' style='width:100px;'>" + limitList + "</select></p>" +
|
||||
"<p class='line'><span class='span_tit'>运行模式:</span><select class='bt-input-text' name='pm' style='width:100px;'>" + pmList + "</select><span class='c9'>*PHP-FPM运行模式</span></p>" +
|
||||
"<p class='line'><span class='span_tit'>max_children:</span><input class='bt-input-text' type='number' name='max_children' value='" + rdata.max_children + "' /><span class='c9'>*允许创建的最大子进程数</span></p>" +
|
||||
@@ -273,11 +358,17 @@ function getFpmConfig(version){
|
||||
$("input[name='min_spare_servers']").val(min_spare_servers);
|
||||
$("input[name='max_spare_servers']").val(max_spare_servers);
|
||||
});
|
||||
|
||||
$('select[name="pool"]').change(function(){
|
||||
var pool = $(this).val();
|
||||
getFpmConfig(version, pool);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setFpmConfig(version){
|
||||
var max_children = Number($("input[name='max_children']").val());
|
||||
var pool = $("select[name='pool']").val();
|
||||
var start_servers = Number($("input[name='start_servers']").val());
|
||||
var min_spare_servers = Number($("input[name='min_spare_servers']").val());
|
||||
var max_spare_servers = Number($("input[name='max_spare_servers']").val());
|
||||
@@ -315,6 +406,7 @@ function setFpmConfig(version){
|
||||
min_spare_servers:min_spare_servers,
|
||||
max_spare_servers:max_spare_servers,
|
||||
pm:pm,
|
||||
pool:pool,
|
||||
};
|
||||
phpPost('set_fpm_conf', version, data, function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
@@ -323,8 +415,8 @@ function setFpmConfig(version){
|
||||
}
|
||||
|
||||
|
||||
function getFpmStatus(version){
|
||||
phpPost('get_fpm_status', version, '', function(ret_data){
|
||||
function getFpmStatus(version, pool = 'www'){
|
||||
phpPost('get_fpm_status', version, {'pool':pool}, function(ret_data){
|
||||
var tmp_data = $.parseJSON(ret_data.data);
|
||||
if(!tmp_data.status){
|
||||
layer.msg(tmp_data.msg, { icon: tmp_data.status ? 1 : 2 });
|
||||
@@ -340,8 +432,24 @@ function getFpmStatus(version){
|
||||
} else if(rdata['process manager'] == 'ondemand'){
|
||||
php_fpm_status = '按需';
|
||||
}
|
||||
|
||||
var con = "<div style='height:420px;overflow:hidden;'><table class='table table-hover table-bordered GetPHPStatus' style='margin:0;padding:0'>\
|
||||
|
||||
var select_pool_www = '';
|
||||
var select_pool_backup = '';
|
||||
if (pool == 'www'){
|
||||
select_pool_www = 'selected';
|
||||
}
|
||||
if (pool == 'backup'){
|
||||
select_pool_backup = 'selected';
|
||||
}
|
||||
|
||||
var con = "<div style='height:430px;'>\
|
||||
<p style='text-align:center;padding-bottom:10px;'>\
|
||||
<select class='bt-input-text' name='pool' style='width:200px;'>\
|
||||
<option value='www' "+select_pool_www+">www</option>\
|
||||
<option value='backup' "+select_pool_backup+">backup</option>\
|
||||
</select>\
|
||||
</p>\
|
||||
<table class='table table-hover table-bordered get_fpm_status' style='margin:0;padding:0'>\
|
||||
<tr><th>应用池(pool)</th><td>" + rdata.pool + "</td></tr>\
|
||||
<tr><th>进程管理方式(process manager)</th><td>" + php_fpm_status + "</td></tr>\
|
||||
<tr><th>启动日期(start time)</th><td>" + rdata['start time'] + "</td></tr>\
|
||||
@@ -355,9 +463,16 @@ function getFpmStatus(version){
|
||||
<tr><th>最大活跃进程数量(max active processes)</th><td>" + rdata['max active processes'] + "</td></tr>\
|
||||
<tr><th>到达进程上限次数(max children reached)</th><td>" + rdata['max children reached'] + "</td></tr>\
|
||||
<tr><th>慢请求数量(slow requests)</th><td>" + rdata['slow requests'] + "</td></tr>\
|
||||
</table></div>";
|
||||
</table>\
|
||||
</div>";
|
||||
$(".soft-man-con").html(con);
|
||||
$(".GetPHPStatus td,.GetPHPStatus th").css("padding", "7px");
|
||||
$(".get_fpm_status td,.get_fpm_status th").css("padding", "7px");
|
||||
|
||||
|
||||
$('select[name="pool"]').change(function(){
|
||||
var pool = $(this).val();
|
||||
getFpmStatus(version, pool);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user