From c28573e2775c8662ef04c805a11b03aa0468d7b1 Mon Sep 17 00:00:00 2001 From: yel-hadd Date: Fri, 17 Jan 2025 11:48:40 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=202a13a?= =?UTF-8?q?afad33505a62dbd55a8123417c16b2db3fc=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 +- assets/{app-9207fd63.js => app-b6225602.js} | 4 +- assets/index.html-0dda4817.js | 1 - ...tml-8ac94d64.js => index.html-2fa95f1b.js} | 20 +-- ...tml-afce4ad2.js => index.html-376dbb0d.js} | 10 +- ...tml-a7c97b2a.js => index.html-451f0f35.js} | 14 +- ...tml-5e807dce.js => index.html-a33d9863.js} | 146 +++++++++--------- assets/index.html-f8088e8a.js | 1 + cln/account_settings/convert.html | 4 +- cln/account_settings/index.html | 4 +- cln/billing/index.html | 4 +- cln/cln_for_resellers/conversion.html | 4 +- cln/cln_for_resellers/index.html | 4 +- cln/dashboard/index.html | 4 +- cln/index.html | 4 +- cln/introduction/index.html | 4 +- cln/payment_methods/index.html | 4 +- cln/purchase/index.html | 4 +- cln/shared/faq/index.html | 4 +- cln/shared/features/index.html | 4 +- cln/spacewalk/regular.html | 4 +- cln/spacewalk/reseller.html | 4 +- cln/terminology/index.html | 4 +- cln/whmcs_advantage/index.html | 4 +- cln/whmcs_plugin/index.html | 4 +- cln/wpos-plugin/index.html | 4 +- cloudlinuxos/alt-ea_packages/index.html | 4 +- cloudlinuxos/apache2nginx/index.html | 4 +- .../cloudlinux_installation/index.html | 4 +- .../cloudlinux_os_components/index.html | 10 +- cloudlinuxos/cloudlinux_os_kernel/index.html | 10 +- cloudlinuxos/command-line_tools/index.html | 4 +- .../control_panel_integration/index.html | 4 +- cloudlinuxos/deprecated/index.html | 4 +- cloudlinuxos/elevate/index.html | 6 +- cloudlinuxos/faq/index.html | 4 +- cloudlinuxos/features/index.html | 4 +- .../for_cloudlinux_partners/index.html | 4 +- .../for_cloudlinux_partners/whmcs_saved.html | 4 +- cloudlinuxos/limits/index.html | 4 +- cloudlinuxos/lve_manager/index.html | 10 +- cloudlinuxos/shared-pro/index.html | 4 +- index.html | 4 +- introduction/admin/index.html | 4 +- .../cloudlinux-os-editions/index.html | 4 +- introduction/solo/index.html | 4 +- ubuntu/faq/index.html | 4 +- ubuntu/features/index.html | 4 +- ubuntu/installation/index.html | 4 +- ubuntu/introduction/index.html | 6 +- ubuntu/troubleshooting/index.html | 4 +- ubuntu/uninstalling/index.html | 4 +- user-docs/index.html | 4 +- .../index.html | 4 +- .../user-docs-solo-cloudlinux/index.html | 4 +- 55 files changed, 205 insertions(+), 205 deletions(-) rename assets/{app-9207fd63.js => app-b6225602.js} (95%) delete mode 100644 assets/index.html-0dda4817.js rename assets/{index.html-8ac94d64.js => index.html-2fa95f1b.js} (51%) rename assets/{index.html-afce4ad2.js => index.html-376dbb0d.js} (64%) rename assets/{index.html-a7c97b2a.js => index.html-451f0f35.js} (87%) rename assets/{index.html-5e807dce.js => index.html-a33d9863.js} (83%) create mode 100644 assets/index.html-f8088e8a.js diff --git a/404.html b/404.html index aa0a10dd..66223da3 100644 --- a/404.html +++ b/404.html @@ -51,10 +51,10 @@ })(); - +
- + diff --git a/assets/app-9207fd63.js b/assets/app-b6225602.js similarity index 95% rename from assets/app-9207fd63.js rename to assets/app-b6225602.js index f3b4a46b..a99c64ea 100644 --- a/assets/app-9207fd63.js +++ b/assets/app-b6225602.js @@ -1,4 +1,4 @@ -var en=Object.defineProperty;var tn=(e,t,n)=>t in e?en(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var T=(e,t,n)=>(tn(e,typeof t!="symbol"?t+"":t,n),n);import{d as w,r as P,a as nn,b as sn,i as fe,c as on,e as ln,f as rn,g as Me,h as an,j as un,o as oe,k as D,l as ne,m as q,_ as B,n as d,p as b,q as v,u as k,t as I,F as W,s as j,v as S,w as Z,x as Be,y as ze,R as cn,z as L,A as Q,B as $,T as Ae,C as x,D as _e,E as be,G as dn,H as X,I as J,J as se,K as De,L as We,M as hn,N as re,O as ae,P as z,Q as xt,S as ge,U as pn,V as Y,W as fn,X as kt,Y as gn,Z as mn,$ as _n,a0 as bn,a1 as vn,a2 as yn,a3 as wn}from"./framework-dd156d1c.js";const xn="modulepreload",kn=function(e){return"/"+e},rt={},h=function(t,n,s){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=kn(o),o in rt)return;rt[o]=!0;const l=o.endsWith(".css"),r=l?'[rel="stylesheet"]':"";if(!!s)for(let c=i.length-1;c>=0;c--){const p=i[c];if(p.href===o&&(!l||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${r}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":xn,l||(u.as="script",u.crossOrigin=""),u.href=o,document.head.appendChild(u),l)return new Promise((c,p)=>{u.addEventListener("load",c),u.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},Ke={"v-8daa1a0e":()=>h(()=>import("./index.html-3b293775.js"),[]).then(({data:e})=>e),"v-74457223":()=>h(()=>import("./index.html-6df021ce.js"),[]).then(({data:e})=>e),"v-257d9eea":()=>h(()=>import("./index.html-5f5b585a.js"),[]).then(({data:e})=>e),"v-19b6f117":()=>h(()=>import("./index.html-ac8928eb.js"),[]).then(({data:e})=>e),"v-2a99c19d":()=>h(()=>import("./convert.html-f72b4278.js"),[]).then(({data:e})=>e),"v-531ecc37":()=>h(()=>import("./index.html-81fdb6dc.js"),[]).then(({data:e})=>e),"v-7b6817fe":()=>h(()=>import("./index.html-b1035221.js"),[]).then(({data:e})=>e),"v-09dd2362":()=>h(()=>import("./conversion.html-d288c2ad.js"),[]).then(({data:e})=>e),"v-44b5ca7e":()=>h(()=>import("./index.html-8f2405df.js"),[]).then(({data:e})=>e),"v-25bd0a12":()=>h(()=>import("./index.html-8c5ecf17.js"),[]).then(({data:e})=>e),"v-bcec460e":()=>h(()=>import("./index.html-cc8131a7.js"),[]).then(({data:e})=>e),"v-38fce08b":()=>h(()=>import("./index.html-faa1c9ca.js"),[]).then(({data:e})=>e),"v-92fb1a40":()=>h(()=>import("./regular.html-3b7030a1.js"),[]).then(({data:e})=>e),"v-07bc00e4":()=>h(()=>import("./reseller.html-57f304ce.js"),[]).then(({data:e})=>e),"v-67fe297f":()=>h(()=>import("./index.html-eafa4c34.js"),[]).then(({data:e})=>e),"v-cc245b0c":()=>h(()=>import("./index.html-92c4383f.js"),[]).then(({data:e})=>e),"v-1e772bf4":()=>h(()=>import("./index.html-b8f45164.js"),[]).then(({data:e})=>e),"v-e3f0a4a2":()=>h(()=>import("./index.html-ec2bd0a3.js"),[]).then(({data:e})=>e),"v-314a68d6":()=>h(()=>import("./index.html-143f0ae3.js"),[]).then(({data:e})=>e),"v-8e328fb4":()=>h(()=>import("./index.html-114131e7.js"),[]).then(({data:e})=>e),"v-592f0ff0":()=>h(()=>import("./index.html-bf8a75b9.js"),[]).then(({data:e})=>e),"v-7a46618b":()=>h(()=>import("./index.html-85444986.js"),[]).then(({data:e})=>e),"v-53f16644":()=>h(()=>import("./index.html-4bcf3d6e.js"),[]).then(({data:e})=>e),"v-81e6b46c":()=>h(()=>import("./index.html-ef4e2bb6.js"),[]).then(({data:e})=>e),"v-28178fcb":()=>h(()=>import("./index.html-8785f9a0.js"),[]).then(({data:e})=>e),"v-3b71926e":()=>h(()=>import("./index.html-2d6a804d.js"),[]).then(({data:e})=>e),"v-189980a8":()=>h(()=>import("./index.html-f0a459e7.js"),[]).then(({data:e})=>e),"v-76c3dae8":()=>h(()=>import("./index.html-7bf33f8f.js"),[]).then(({data:e})=>e),"v-3c6dbe82":()=>h(()=>import("./index.html-5205b84f.js"),[]).then(({data:e})=>e),"v-023a4d6d":()=>h(()=>import("./index.html-cf3e6950.js"),[]).then(({data:e})=>e),"v-de1629dc":()=>h(()=>import("./whmcs_saved.html-44210070.js"),[]).then(({data:e})=>e),"v-3bff88f8":()=>h(()=>import("./index.html-ef33aada.js"),[]).then(({data:e})=>e),"v-1cfc8d0e":()=>h(()=>import("./index.html-1a901f49.js"),[]).then(({data:e})=>e),"v-71441512":()=>h(()=>import("./index.html-7ad21d0c.js"),[]).then(({data:e})=>e),"v-112bcebc":()=>h(()=>import("./index.html-06621422.js"),[]).then(({data:e})=>e),"v-1f45cb3a":()=>h(()=>import("./index.html-81beb05e.js"),[]).then(({data:e})=>e),"v-1de76098":()=>h(()=>import("./index.html-70efdd1b.js"),[]).then(({data:e})=>e),"v-27c2a530":()=>h(()=>import("./index.html-fac878d6.js"),[]).then(({data:e})=>e),"v-a7fa213a":()=>h(()=>import("./index.html-b698656f.js"),[]).then(({data:e})=>e),"v-379536f4":()=>h(()=>import("./index.html-781941ff.js"),[]).then(({data:e})=>e),"v-4cbda6a6":()=>h(()=>import("./index.html-f0fd3107.js"),[]).then(({data:e})=>e),"v-f23b5fb8":()=>h(()=>import("./index.html-4b035f13.js"),[]).then(({data:e})=>e),"v-00097080":()=>h(()=>import("./index.html-63fea01f.js"),[]).then(({data:e})=>e),"v-92a4f5fa":()=>h(()=>import("./index.html-296cc19b.js"),[]).then(({data:e})=>e),"v-1e15a9dd":()=>h(()=>import("./index.html-3f4cbfef.js"),[]).then(({data:e})=>e),"v-36e14580":()=>h(()=>import("./index.html-ad9ff012.js"),[]).then(({data:e})=>e),"v-eb8332ea":()=>h(()=>import("./index.html-84ce9456.js"),[]).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html-e0575d4e.js"),[]).then(({data:e})=>e)},Sn=JSON.parse(`{"base":"/","lang":"en-US","title":"","description":"","head":[["script",{"type":"text/javascript","id":"hs-script-loader","async":true,"defer":true,"src":"//js.hs-scripts.com/5408110.js"}],["script",{},"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-T538N4K');\\n "],["script",{},"\\n (function() {\\n var routes = {\\"/?compatiblity_matrix.html\\":\\"/cloudlinuxos/limits/#compatibility-matrix\\",\\"/cloudlinux_os_components/#installation-5\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-5\\",\\"/cloudlinux_os_components/#installation-and-update-2\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-1\\",\\"/?cagefs_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-1\\",\\"/mysql_governor.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#mysql-governor\\",\\"?backing_up_mysql.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#backing-up-mysql\\",\\"/mod_lsapi_troubleshooting.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#troubleshooting-3\\",\\"/cloudlinux_installation/#registering-cloudlinux-server\\":\\"/cloudlinuxos/cloudlinux_installation/#license-activation\\",\\"/apache_mod_lsapi.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"/cagefs.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#cagefs\\",\\"/change_mysql_version.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#change-mysql-version\\",\\"/cldiag.html\\":\\"/cloudlinuxos/command-line_tools/#cldiag\\",\\"/custom_php_ini_options.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options\\",\\"?apache_mod_lsapi.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"?custom_php_ini_options.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options\\",\\"?hybrid_kernel.html\\":\\"/cloudlinuxos/cloudlinux_os_kernel/#hybrid-kernels\\",\\"?installation.html\\":\\"/cloudlinuxos/cloudlinux_installation/\\",\\"?link_traversal_protection.html\\":\\"/cloudlinuxos/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection\\",\\"?lve_limits_with_packages.html\\":\\"/cloudlinuxos/lve_manager/#packages\\",\\"?lve_pam_module.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#lve-pam-module\\",\\"?php_selector_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-3\\",\\"?virtuozzo_and_openvz.html\\":\\"/cloudlinuxos/cloudlinux_installation/#virtuozzo-and-openvz\\",\\"/installation-wizard.html\\":\\"/cloudlinuxos/lve_manager/#installation-wizard\\",\\"/lve-limits-validation.html\\":\\"/cloudlinuxos/limits/#limits-validation\\",\\"/mysql_governor_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-2\\",\\"/node_js_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#node-js-selector\\",\\"/php_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#php-selector\\",\\"/php_selector_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-3\\",\\"/python_and_ruby_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#python-selector\\",\\"/reseller_limits.html\\":\\"/cloudlinuxos/limits/#reseller-limits\\",\\"/cloudlinux-os-plus/#x-ray-autotracing\\":\\"/cloudlinuxos/shared-pro/#x-ray-autotracing\\",\\"/cloudlinux_installation/#activation\\":\\"/cloudlinuxos/cloudlinux_installation/#license-activation\\",\\"/cloudlinux_installation/#converting-existing-servers\\":\\"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers\\",\\"/cloudlinux_installation/#known-restrictions-and-issues\\":\\"/cloudlinuxos/cloudlinux_installation/#known-restrictions-and-issues\\",\\"/cloudlinux_installation/#uninstalling\\":\\"/cloudlinuxos/cloudlinux_installation/#uninstalling\\",\\"/cloudlinux_os_components/#customize-lve-stats2-notifications\\":\\"/cloudlinuxos/cloudlinux_os_components/#customize-lve-stats2-notifications\\",\\"/cloudlinux_os_components/#installation-enabling-and-disabling\\":\\"/cloudlinuxos/command-line_tools/#cagefs\\",\\"/cloudlinux-os-plus/#faq-2\\":\\"/cloudlinuxos/shared-pro/#faq-2\\",\\"/cloudlinux-os-plus/#installation-2\\":\\"/cloudlinuxos/shared-pro/#installation-1\\",\\"/cloudlinux-os-plus/#i-started-a-tracing-task-and-made-requests-to-url-but-did-not-see-any-results-in-the-ui-what-should-i-do\\":\\"/cloudlinuxos/shared-pro/#i-started-a-tracing-task-and-made-requests-to-url-but-did-not-see-any-results-in-the-ui-what-should-i-do\\",\\"/control_panel_integration/#mysql-governor\\":\\"/cloudlinuxos/control_panel_integration/#mysql-governor\\",\\"/control_panel_integration/#the-list-of-the-integration-scripts\\":\\"/cloudlinuxos/control_panel_integration/#the-list-of-the-integration-scripts\\",\\"/ffmpeg\\":\\"/cloudlinuxos/cloudlinux_os_components/#ffmpeg\\",\\"/limits/#limits-validation\\":\\"/cloudlinuxos/limits/#limits-validation\\",\\"/php_selector/#litespeed-support\\":\\"/cloudlinuxos/cloudlinux_os_components/#litespeed-support\\",\\"/python_selector\\":\\"/cloudlinuxos/cloudlinux_os_components/#python-selector\\",\\"/python_selector/#installation\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-1\\",\\"/user-docs/user-docs-shared-cloudlinux/#acceleratewp\\":\\"/user-docs/user-docs-shared-pro-cloudlinux/#acceleratewp\\",\\"/cloudlinux-os-plus\\":\\"/cloudlinuxos/shared-pro/\\",\\"/cloudlinuxos\\":\\"/cloudlinuxos/cloudlinux_installation/#installation\\",\\"/shared\\":\\"/cloudlinuxos/\\",\\"/shared-pro/accelerate-wp/#set-upgrade-url-for-cdn\\":\\"/cloudlinuxos/shared-pro/#set-upgrade-url-for-cdn\\",\\"/shared-pro/\\":\\"/cloudlinuxos/shared-pro/\\",\\"/cloudlinuxos-pro/introduction/\\":\\"/cloudlinuxos/shared-pro/#introduction\\",\\"/shared-pro/accelerate-wp\\":\\"/cloudlinuxos/shared-pro/#acceleratewp\\",\\"/cloudlinuxos/shared-pro/accelerate-wp/\\":\\"/cloudlinuxos/shared-pro/#acceleratewp\\",\\"/solo/introduction/\\":\\"/introduction/solo/\\",\\"/solo/activation/\\":\\"/introduction/solo/#license-activation\\",\\"/solo/faq/\\":\\"/introduction/solo/#faq\\",\\"/admin/description/\\":\\"/introduction/admin/\\",\\"/admin/installation/\\":\\"/introduction/admin/#licensing\\",\\"/admin/components/\\":\\"/introduction/admin/#components\\",\\"/admin/faq/\\":\\"/introduction/admin/#faq\\",\\"/introduction/\\":\\"/introduction/cloudlinux-os-editions/\\",\\"/introduction/#cloudlinux-os-life-cycle\\":\\"/introduction/cloudlinux-os-editions/#cloudlinux-os-life-cycle\\",\\"/introduction/#cloudlinux-9\\":\\"/cloudlinuxos/cloudlinux_installation/#requirements\\"};\\n \\n // Function to normalize a URL by removing a trailing slash and leading characters\\n function normalizeUrl(url) {\\n url = url.endsWith('/') ? url.slice(0, -1) : url;\\n url = url.startsWith('/') ? url.slice(1) : url;\\n url = url.startsWith('?') ? url.slice(1) : url;\\n return url;\\n }\\n \\n var currentPath = window.location.pathname + window.location.search + window.location.hash;\\n currentPath = normalizeUrl(currentPath);\\n \\n for (var route_url in routes) {\\n if (normalizeUrl(route_url) === currentPath) {\\n window.location.href = routes[route_url];\\n break; // Exit the loop after redirecting\\n }\\n }\\n })();\\n "],["script",{},"\\n (function() {\\n // Trigger the scroll event without actually scrolling\\n function triggerScrollEvent() {\\n const targetElement = window;\\n const scrollEvent = new Event('scroll', {\\n bubbles: true,\\n cancelable: true,\\n });\\n targetElement.dispatchEvent(scrollEvent);\\n }\\n \\n // Call the triggerScrollEvent and scrollBodyDown functions after the page is fully loaded\\n window.addEventListener('load', () => {\\n triggerScrollEvent();\\n });\\n })();\\n "]],"locales":{}}`),St={"v-8daa1a0e":w(()=>h(()=>import("./index.html-2d2e15a0.js"),["assets/index.html-2d2e15a0.js","assets/framework-dd156d1c.js"])),"v-74457223":w(()=>h(()=>import("./index.html-95029f41.js"),["assets/index.html-95029f41.js","assets/framework-dd156d1c.js"])),"v-257d9eea":w(()=>h(()=>import("./index.html-239d3e4c.js"),["assets/index.html-239d3e4c.js","assets/framework-dd156d1c.js"])),"v-19b6f117":w(()=>h(()=>import("./index.html-7eb0774a.js"),["assets/index.html-7eb0774a.js","assets/framework-dd156d1c.js"])),"v-2a99c19d":w(()=>h(()=>import("./convert.html-c5b02693.js"),["assets/convert.html-c5b02693.js","assets/framework-dd156d1c.js"])),"v-531ecc37":w(()=>h(()=>import("./index.html-c01f28b0.js"),["assets/index.html-c01f28b0.js","assets/framework-dd156d1c.js"])),"v-7b6817fe":w(()=>h(()=>import("./index.html-23f0e9d9.js"),["assets/index.html-23f0e9d9.js","assets/framework-dd156d1c.js"])),"v-09dd2362":w(()=>h(()=>import("./conversion.html-4931f873.js"),["assets/conversion.html-4931f873.js","assets/framework-dd156d1c.js"])),"v-44b5ca7e":w(()=>h(()=>import("./index.html-67a00f90.js"),["assets/index.html-67a00f90.js","assets/framework-dd156d1c.js"])),"v-25bd0a12":w(()=>h(()=>import("./index.html-e8f408fb.js"),["assets/index.html-e8f408fb.js","assets/framework-dd156d1c.js"])),"v-bcec460e":w(()=>h(()=>import("./index.html-0b5bb9d8.js"),["assets/index.html-0b5bb9d8.js","assets/framework-dd156d1c.js"])),"v-38fce08b":w(()=>h(()=>import("./index.html-416551eb.js"),["assets/index.html-416551eb.js","assets/framework-dd156d1c.js"])),"v-92fb1a40":w(()=>h(()=>import("./regular.html-727e3287.js"),["assets/regular.html-727e3287.js","assets/framework-dd156d1c.js"])),"v-07bc00e4":w(()=>h(()=>import("./reseller.html-1ad4daef.js"),["assets/reseller.html-1ad4daef.js","assets/framework-dd156d1c.js"])),"v-67fe297f":w(()=>h(()=>import("./index.html-235aa62c.js"),["assets/index.html-235aa62c.js","assets/framework-dd156d1c.js"])),"v-cc245b0c":w(()=>h(()=>import("./index.html-68da1cef.js"),["assets/index.html-68da1cef.js","assets/framework-dd156d1c.js"])),"v-1e772bf4":w(()=>h(()=>import("./index.html-d46e973b.js"),["assets/index.html-d46e973b.js","assets/framework-dd156d1c.js"])),"v-e3f0a4a2":w(()=>h(()=>import("./index.html-f589b3b2.js"),["assets/index.html-f589b3b2.js","assets/framework-dd156d1c.js"])),"v-314a68d6":w(()=>h(()=>import("./index.html-a9baaf48.js"),["assets/index.html-a9baaf48.js","assets/framework-dd156d1c.js"])),"v-8e328fb4":w(()=>h(()=>import("./index.html-57badc88.js"),["assets/index.html-57badc88.js","assets/framework-dd156d1c.js"])),"v-592f0ff0":w(()=>h(()=>import("./index.html-bcdbcc69.js"),["assets/index.html-bcdbcc69.js","assets/framework-dd156d1c.js"])),"v-7a46618b":w(()=>h(()=>import("./index.html-5e807dce.js"),["assets/index.html-5e807dce.js","assets/framework-dd156d1c.js"])),"v-53f16644":w(()=>h(()=>import("./index.html-a7c97b2a.js"),["assets/index.html-a7c97b2a.js","assets/framework-dd156d1c.js"])),"v-81e6b46c":w(()=>h(()=>import("./index.html-d7184692.js"),["assets/index.html-d7184692.js","assets/framework-dd156d1c.js"])),"v-28178fcb":w(()=>h(()=>import("./index.html-10ff2e04.js"),["assets/index.html-10ff2e04.js","assets/framework-dd156d1c.js"])),"v-3b71926e":w(()=>h(()=>import("./index.html-aa840e1d.js"),["assets/index.html-aa840e1d.js","assets/framework-dd156d1c.js"])),"v-189980a8":w(()=>h(()=>import("./index.html-afce4ad2.js"),["assets/index.html-afce4ad2.js","assets/framework-dd156d1c.js"])),"v-76c3dae8":w(()=>h(()=>import("./index.html-b2d7b92c.js"),["assets/index.html-b2d7b92c.js","assets/framework-dd156d1c.js"])),"v-3c6dbe82":w(()=>h(()=>import("./index.html-b89c8e27.js"),["assets/index.html-b89c8e27.js","assets/framework-dd156d1c.js"])),"v-023a4d6d":w(()=>h(()=>import("./index.html-7f6654eb.js"),["assets/index.html-7f6654eb.js","assets/framework-dd156d1c.js"])),"v-de1629dc":w(()=>h(()=>import("./whmcs_saved.html-94ab76c4.js"),["assets/whmcs_saved.html-94ab76c4.js","assets/framework-dd156d1c.js"])),"v-3bff88f8":w(()=>h(()=>import("./index.html-8641f2a0.js"),["assets/index.html-8641f2a0.js","assets/framework-dd156d1c.js"])),"v-1cfc8d0e":w(()=>h(()=>import("./index.html-8ac94d64.js"),["assets/index.html-8ac94d64.js","assets/framework-dd156d1c.js"])),"v-71441512":w(()=>h(()=>import("./index.html-16b21d93.js"),["assets/index.html-16b21d93.js","assets/framework-dd156d1c.js"])),"v-112bcebc":w(()=>h(()=>import("./index.html-d7989310.js"),["assets/index.html-d7989310.js","assets/framework-dd156d1c.js"])),"v-1f45cb3a":w(()=>h(()=>import("./index.html-db88118b.js"),["assets/index.html-db88118b.js","assets/framework-dd156d1c.js"])),"v-1de76098":w(()=>h(()=>import("./index.html-5fa5155c.js"),["assets/index.html-5fa5155c.js","assets/framework-dd156d1c.js"])),"v-27c2a530":w(()=>h(()=>import("./index.html-2c2dfb23.js"),["assets/index.html-2c2dfb23.js","assets/framework-dd156d1c.js"])),"v-a7fa213a":w(()=>h(()=>import("./index.html-392312fd.js"),["assets/index.html-392312fd.js","assets/framework-dd156d1c.js"])),"v-379536f4":w(()=>h(()=>import("./index.html-9e8a5565.js"),["assets/index.html-9e8a5565.js","assets/framework-dd156d1c.js"])),"v-4cbda6a6":w(()=>h(()=>import("./index.html-0dda4817.js"),["assets/index.html-0dda4817.js","assets/framework-dd156d1c.js"])),"v-f23b5fb8":w(()=>h(()=>import("./index.html-d84cb147.js"),["assets/index.html-d84cb147.js","assets/framework-dd156d1c.js"])),"v-00097080":w(()=>h(()=>import("./index.html-66cd7b98.js"),["assets/index.html-66cd7b98.js","assets/framework-dd156d1c.js"])),"v-92a4f5fa":w(()=>h(()=>import("./index.html-d83c55c6.js"),["assets/index.html-d83c55c6.js","assets/framework-dd156d1c.js"])),"v-1e15a9dd":w(()=>h(()=>import("./index.html-0f9b9ad5.js"),["assets/index.html-0f9b9ad5.js","assets/framework-dd156d1c.js"])),"v-36e14580":w(()=>h(()=>import("./index.html-8ce3571d.js"),["assets/index.html-8ce3571d.js","assets/framework-dd156d1c.js"])),"v-eb8332ea":w(()=>h(()=>import("./index.html-a64109ea.js"),["assets/index.html-a64109ea.js","assets/framework-dd156d1c.js"])),"v-3706649a":w(()=>h(()=>import("./404.html-2ec8d8e0.js"),["assets/404.html-2ec8d8e0.js","assets/framework-dd156d1c.js"]))};var En=Symbol(""),Ln=P(Ke),Et=nn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),le=P(Et),ce=()=>le,Lt=Symbol(""),Se=()=>{const e=q(Lt);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Ot=Symbol(""),On=()=>{const e=q(Ot);if(!e)throw new Error("usePageHead() is called without provider.");return e},$n=Symbol(""),$t=Symbol(""),Dt=()=>{const e=q($t);if(!e)throw new Error("usePageLang() is called without provider.");return e},At=Symbol(""),Dn=()=>{const e=q(At);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Rt=Symbol(""),Tt=()=>{const e=q(Rt);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},we=P(Sn),An=Symbol(""),Rn=Symbol(""),Tn="Layout",Pn="NotFound",te=sn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Ln.value[e];return await(t==null?void 0:t())??Et},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const s=fe(t.description)?t.description:n.description,i=[...on(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:s}]];return ln(i)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let n;if(e.path){const s=e.frontmatter.layout;fe(s)?n=s:n=Tn}else n=Pn;return t[n]},resolveRouteLocale:(e,t)=>rn(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Vn=Me({name:"ClientOnly",setup(e,t){const n=P(!1);return oe(()=>{n.value=!0}),()=>{var s,i;return n.value?(i=(s=t.slots).default)==null?void 0:i.call(s):null}}}),Cn=Me({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=ce(),n=D(()=>St[e.pageKey||t.value.key]);return()=>n.value?ne(n.value):ne("div","404 Not Found")}}),In=(e={})=>e,G=e=>an(e)?e:`/${un(e)}`;const Mn={enhance:({app:e})=>{}};function Bn(e){return{all:e=e||new Map,on:function(t,n){var s=e.get(t);s?s.push(n):e.set(t,[n])},off:function(t,n){var s=e.get(t);s&&(n?s.splice(s.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var s=e.get(t);s&&s.slice().map(function(i){i(n)}),(s=e.get("*"))&&s.slice().map(function(i){i(t,n)})}}}const zn={class:"footer__img"},qn=["href"],Hn=["src","alt"],Fn={class:"footer-company-title"},Nn={class:"social"},Wn={class:"social_links"},jn=["href"],Gn={class:"footer-social-text"},Un={class:"social-icons-wrapper"},Kn=["href"],Zn=["src"],Qn={__name:"Footer",setup(e){const{social:t,cloudlinuxSite:n,footerCustomLogo:s,footerCustomAltText:i,locales:o}=q("themeConfig"),l=Se(),r=D(()=>new Date().getFullYear()),a=D(()=>l.value.layout==="HomeLayout");return(u,c)=>(d(),b("div",{class:Z(["footer",{"footer-default-layout":!a.value}])},[v("div",zn,[v("a",{href:k(n)},[v("img",{src:k(G)(k(s)),alt:k(i)},null,8,Hn)],8,qn)]),v("div",Fn,I(r.value)+". CloudLinux Inc ",1),v("div",Nn,[v("div",Wn,[(d(!0),b(W,null,j(k(o).bottomLinks,p=>(d(),b("a",{href:p.url,target:"_blank"},I(p.text),9,jn))),256))]),v("span",Gn,I(k(o).stayInTouch),1),v("div",Un,[(d(!0),b(W,null,j(k(t),p=>(d(),b("a",{class:"social-icons-link",href:p==null?void 0:p.url,target:"_blank"},[p.icon?(d(),b("img",{key:0,class:"social-icons-link-img",src:k(G)(p==null?void 0:p.icon),alt:"footer logo"},null,8,Zn)):S("v-if",!0)],8,Kn))),256))])])],2))}},Re=B(Qn,[["__scopeId","data-v-f2902e71"],["__file","Footer.vue"]]),Pt={"/user-docs/":[{collapsable:!1,children:["/user-docs/user-docs-shared-pro-cloudlinux/","/user-docs/user-docs-solo-cloudlinux/"]}],"/introduction/":[{collapsable:!1,children:["/introduction/cloudlinux-os-editions/","/introduction/solo/","/introduction/admin/"]}],"/cln/":[{collapsable:!1,children:["/cln/introduction/","/cln/terminology/","/cln/dashboard/","/cln/billing/","/cln/payment_methods/","/cln/purchase/","/cln/account_settings/","/cln/cln_for_resellers/","/cln/whmcs_plugin/","/cln/whmcs_advantage/"]}],"/ubuntu/":[{collapsable:!1,children:["/ubuntu/introduction/","/ubuntu/faq/","/ubuntu/features/","/ubuntu/installation/","/ubuntu/troubleshooting/","/ubuntu/uninstalling/"]}],"/cloudlinuxos/":[{collapsable:!1,children:["/cloudlinuxos/cloudlinux_installation/","/cloudlinuxos/elevate/","/cloudlinuxos/limits/","/cloudlinuxos/lve_manager/","/cloudlinuxos/cloudlinux_os_components/","/cloudlinuxos/shared-pro/","/cloudlinuxos/command-line_tools/","/cloudlinuxos/apache2nginx/","/cloudlinuxos/alt-ea_packages/","/cloudlinuxos/control_panel_integration/","/cloudlinuxos/cloudlinux_os_kernel/","/cloudlinuxos/for_cloudlinux_partners/","/cloudlinuxos/deprecated/"]}],"/sub-system-ubuntu/":[{collapsable:!1,children:["/sub-system-ubuntu/introduction/","/sub-system-ubuntu/faq/","/sub-system-ubuntu/installation/","/sub-system-ubuntu/troubleshooting/","/sub-system-ubuntu/uninstalling/"]}]},Ze=/#.*$/,Xn=/\.(md|html)$/,pe=/\/$/,je=/^(https?:|mailto:|tel:)/;function me(e){return decodeURI(e).replace(Ze,"").replace(Xn,"")}function Jn(e){const t=e==null?void 0:e.match(Ze);if(t)return t[0]}function Yn(e){return je.test(e)}function es(e){if(Yn(e))return e;const t=e==null?void 0:e.match(Ze),n=t?t[0]:"",s=me(e);return pe.test(s)?e:s+".html"+n}function Te(e,t){const n=e.hash,s=Jn(t);if(s&&n!==s)return!1;const i=me(e.path),o=me(t);return i===o}function Pe(e,t,n){n&&(t=ts(t,n));const s=me(t);for(let i=0;iCt(o,n,s)):[]}function ns(e){e=e.map(n=>Object.assign({},JSON.parse(JSON.stringify(n))));let t;return e.forEach(n=>{n.level!==1?t=n:t&&(t.children||(t.children=[])).push(n)}),e.filter(n=>n.level!==1)}function ss(e,t){if(Array.isArray(t))return{base:"/",config:t};for(const n in t)if(os(e.path).indexOf(n)===0)return{base:n,config:t[n]};return null}function os(e){return/(\.html|\/)$/.test(e)?e:e+"/"}function Ct(e,t,n,s){if(typeof e=="string")return Pe(t,e,n);if(Array.isArray(e))return Object.assign(Pe(t,e[0],n),{title:e[1]});{s&&console.error("[vuepress] Nested sidebar groups are not supported. Consider using navbar + categories instead.");const i=e.children||[];return{type:"group",title:e.title,children:i.map(o=>Ct(o,t,n,!0)),collapsable:e.collapsable!==!1}}}const is={functional:!0,props:["item","closeSidebarDrawer"],render({item:e,closeSidebarDrawer:t}){var c,p;if(!e)return;const n=ce(),s=Be(),i=ze(),o=Te(s,e==null?void 0:e.path),l=(e==null?void 0:e.type)==="auto"?o||e.children.some(_=>Te(s,e.basePath+"#"+_.slug)):o,r=ls(ne,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),l,e.headers,t,i),a=((c=n.value.frontmatter)==null?void 0:c.sidebarDepth)!=null?(p=n.value.frontmatter)==null?void 0:p.sidebarDepth:5,u=a??1;if((e==null?void 0:e.type)==="auto")return[r,Ge(ne,e.children,e.basePath,s,u,1,t)];if(e.headers&&e.headers.length){const _=ns(e.headers);return[r,Ge(ne,_,e==null?void 0:e.path,s,u,1,t)]}return Qe(ne,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),l,e.children,0,t)}};function Qe(e,t,n,s,i,o=0,l){const r=e(cn,{"data-anchor":t,to:t,activeClass:"",exactActiveClass:"",class:{active:s,"sidebar-link":!0,["link-depth-level-"+o]:!0}},()=>[n]);return e("div",{class:{active:s,collapsed:!0,"sidebar-link-container":!!(i!=null&&i.length)},onClick:a=>{a.target.classList.toggle("collapsed"),a.target.tagName!=="DIV"&&l()}},[r])}function ls(e,t,n,s,i,o,l){const r=!!i&&i.some(a=>a.level!==1);return e("div",{class:{active:s,collapsed:s,"sidebar-header":!0,"sidebar-link":!0,"sidebar-header--empty":!r},onClick:a=>{const u=a.target.classList,c=a.target.querySelector("a");u.toggle("collapsed"),c&&l.push(c.getAttribute("href"))}},[Qe(e,t,n,s,null,0,o)])}function Ge(e,t,n,s,i,o=1,l){return!t||o>i?null:e("ul",{class:"sidebar-sub-headers"},t.map(r=>{const a=Te(s,n+"#"+r.slug);return e("li",{class:{collapsible:o<3,"sidebar-sub-header":!0}},[Qe(e,n+"#"+r.slug,r.title,a,r.children,o,l),Ge(e,r.children,n,s,i,o+1,l)])}))}const It=B(is,[["__file","SidebarLink.vue"]]);const rs={__name:"DropdownTransition",setup(e){const t=s=>{s.style.height=s.scrollHeight+"px"},n=s=>{s.style.height=""};return(s,i)=>(d(),L(Ae,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:Q(()=>[$(s.$slots,"default")]),_:3}))}},as=B(rs,[["__file","DropdownTransition.vue"]]);const us={key:0,ref:"items",class:"sidebar-group-items"},cs={__name:"SidebarGroup",props:{item:{type:Object,required:!0},first:{type:Boolean,required:!0},open:{type:Boolean,required:!0},collapsable:{type:Boolean,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}}},setup(e){return(t,n)=>(d(),b("div",{class:Z(["sidebar-group",{first:e.first,collapsable:e.collapsable}])},[x(as,null,{default:Q(()=>{var s;return[e.open||!e.collapsable?(d(),b("ul",us,[(d(!0),b(W,null,j((s=e.item)==null?void 0:s.children,i=>(d(),b("li",null,[x(It,{closeSidebarDrawer:e.closeSidebarDrawer,item:i},null,8,["closeSidebarDrawer","item"])]))),256))],512)):S("v-if",!0)]}),_:1})],2))}},ds=B(cs,[["__file","SidebarGroup.vue"]]);const hs={class:"sidebar"},ps={key:0,class:"sidebar-links"},fs={__name:"Sidebar",props:{items:{type:Array,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}},isMobileWidth:{type:Boolean}},setup(e){const t=e,n=D(()=>t.items),s=Be(),i=ce(),o=D(()=>Vt(i.value,s,n.value)),l=P(0),r=()=>{const g=p(s,t.items);g>-1&&(l.value=g)},a=g=>{l.value=g===l.value?-1:g},u=g=>{const m=g.getBoundingClientRect();return m.top>=0&&m.left>=0&&m.bottom<=(window.innerHeight/2||document.documentElement.clientHeight/2)&&m.right<=(window.innerWidth||document.documentElement.clientWidth)};_e(()=>s,r);const c=()=>{const g=document.querySelectorAll(".header-anchor"),m=document.querySelector(".sidebar"),f=m.querySelectorAll("a"),y=m.querySelectorAll(".collapsible.sidebar-sub-header"),V=Array.from(f).map(O=>O.getAttribute("data-anchor"));g.forEach(O=>{O.getAttribute("data-anchor")||O.setAttribute("data-anchor",i.value.path+O.hash)}),g.forEach(O=>{if(u(O)){const C=V.find(E=>E===O.getAttribute("data-anchor"));y.forEach(E=>{E.querySelectorAll(".sidebar-link-container").forEach(M=>{E.querySelector(`a[data-anchor="${C}"]`)?M.classList.remove("collapsed"):M.classList.add("collapsed")})}),m.querySelector(`a[data-anchor="${C}"]`)&&(f.forEach(E=>E.classList.remove("active")),m.querySelector(`a[data-anchor="${C}"]`).classList.add("active"))}})},p=(g,m)=>{for(let f=0;fTe(g,V.path)))return f}return-1},_=()=>{const g=window.location.hash,m=document.querySelectorAll(".sidebar a");m.forEach(f=>{if(f.getAttribute("data-anchor")===g){m.forEach(V=>V.classList.remove("active")),f.classList.add("active");const y=f.closest(".collapsible");y&&y.classList.remove("collapsed")}})};return oe(()=>{r(),t.isMobileWidth||window.addEventListener("scroll",c),t.isMobileWidth||window.addEventListener("resize",c),window.addEventListener("hashchange",_)}),be(()=>{window.removeEventListener("scroll",c),window.removeEventListener("resize",c),window.removeEventListener("hashchange",_)}),(g,m)=>(d(),b("div",hs,[$(g.$slots,"top"),o.value.length?(d(),b("ul",ps,[(d(!0),b(W,null,j(o.value,(f,y)=>(d(),b("li",{key:y},[f.type==="group"?(d(),L(ds,{key:0,item:f,first:y===0,open:y===l.value,closeSidebarDrawer:e.closeSidebarDrawer,collapsable:!!(f.collapsable||f.collapsible),onToggle:V=>a(y)},null,8,["item","first","open","closeSidebarDrawer","collapsable","onToggle"])):(d(),L(It,{key:1,closeSidebarDrawer:e.closeSidebarDrawer,item:f},null,8,["closeSidebarDrawer","item"]))]))),128))])):S("v-if",!0),$(g.$slots,"bottom")]))}},Mt=B(fs,[["__file","Sidebar.vue"]]);var gs=Object.defineProperty,ms=Object.defineProperties,_s=Object.getOwnPropertyDescriptors,at=Object.getOwnPropertySymbols,bs=Object.prototype.hasOwnProperty,vs=Object.prototype.propertyIsEnumerable,ut=(e,t,n)=>t in e?gs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,he=(e,t)=>{for(var n in t||(t={}))bs.call(t,n)&&ut(e,n,t[n]);if(at)for(var n of at(t))vs.call(t,n)&&ut(e,n,t[n]);return e},ct=(e,t)=>ms(e,_s(t));const ys={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer(){this.autoscroll&&this.maybeAdjustScroll()},open(e){this.autoscroll&&e&&this.$nextTick(()=>this.maybeAdjustScroll())}},methods:{maybeAdjustScroll(){var e;const t=((e=this.$refs.dropdownMenu)==null?void 0:e.children[this.typeAheadPointer])||!1;if(t){const n=this.getDropdownViewport(),{top:s,bottom:i,height:o}=t.getBoundingClientRect();if(sn.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(n.height-o)}},getDropdownViewport(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},ws={data(){return{typeAheadPointer:-1}},watch:{filteredOptions(){for(let e=0;e=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown(){for(let e=this.typeAheadPointer+1;e{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},ks={},Ss={xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"},Es=v("path",{d:"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z"},null,-1),Ls=[Es];function Os(e,t){return d(),b("svg",Ss,Ls)}const $s=Xe(ks,[["render",Os]]),Ds={},As={xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"},Rs=v("path",{d:"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"},null,-1),Ts=[Rs];function Ps(e,t){return d(),b("svg",As,Ts)}const Vs=Xe(Ds,[["render",Ps]]),dt={Deselect:$s,OpenIndicator:Vs},Cs={mounted(e,{instance:t}){if(t.appendToBody){const{height:n,top:s,left:i,width:o}=t.$refs.toggle.getBoundingClientRect();let l=window.scrollX||window.pageXOffset,r=window.scrollY||window.pageYOffset;e.unbindPosition=t.calculatePosition(e,t,{width:o+"px",left:l+i+"px",top:r+s+n+"px"}),document.body.appendChild(e)}},unmounted(e,{instance:t}){t.appendToBody&&(e.unbindPosition&&typeof e.unbindPosition=="function"&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}};function Is(e){const t={};return Object.keys(e).sort().forEach(n=>{t[n]=e[n]}),JSON.stringify(t)}let Ms=0;function Bs(){return++Ms}const zs={components:he({},dt),directives:{appendToBody:Cs},mixins:[ys,ws,xs],compatConfig:{MODE:3},emits:["open","close","update:modelValue","search","search:compositionstart","search:compositionend","search:keydown","search:blur","search:focus","search:input","option:created","option:selecting","option:selected","option:deselecting","option:deselected"],props:{modelValue:{},components:{type:Object,default:()=>({})},options:{type:Array,default(){return[]}},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!0},deselectFromDropdown:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},placeholder:{type:String,default:""},transition:{type:String,default:"vs__fade"},clearSearchOnSelect:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},label:{type:String,default:"label"},autocomplete:{type:String,default:"off"},reduce:{type:Function,default:e=>e},selectable:{type:Function,default:e=>!0},getOptionLabel:{type:Function,default(e){return typeof e=="object"?e.hasOwnProperty(this.label)?e[this.label]:console.warn(`[vue-select warn]: Label key "option.${this.label}" does not exist in options object ${JSON.stringify(e)}. +var en=Object.defineProperty;var tn=(e,t,n)=>t in e?en(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var T=(e,t,n)=>(tn(e,typeof t!="symbol"?t+"":t,n),n);import{d as w,r as P,a as nn,b as sn,i as fe,c as on,e as ln,f as rn,g as Me,h as an,j as un,o as oe,k as D,l as ne,m as q,_ as B,n as d,p as b,q as v,u as k,t as I,F as W,s as j,v as S,w as Z,x as Be,y as ze,R as cn,z as L,A as Q,B as $,T as Ae,C as x,D as _e,E as be,G as dn,H as X,I as J,J as se,K as De,L as We,M as hn,N as re,O as ae,P as z,Q as xt,S as ge,U as pn,V as Y,W as fn,X as kt,Y as gn,Z as mn,$ as _n,a0 as bn,a1 as vn,a2 as yn,a3 as wn}from"./framework-dd156d1c.js";const xn="modulepreload",kn=function(e){return"/"+e},rt={},h=function(t,n,s){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=kn(o),o in rt)return;rt[o]=!0;const l=o.endsWith(".css"),r=l?'[rel="stylesheet"]':"";if(!!s)for(let c=i.length-1;c>=0;c--){const p=i[c];if(p.href===o&&(!l||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${r}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":xn,l||(u.as="script",u.crossOrigin=""),u.href=o,document.head.appendChild(u),l)return new Promise((c,p)=>{u.addEventListener("load",c),u.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},Ke={"v-8daa1a0e":()=>h(()=>import("./index.html-3b293775.js"),[]).then(({data:e})=>e),"v-74457223":()=>h(()=>import("./index.html-6df021ce.js"),[]).then(({data:e})=>e),"v-257d9eea":()=>h(()=>import("./index.html-5f5b585a.js"),[]).then(({data:e})=>e),"v-19b6f117":()=>h(()=>import("./index.html-ac8928eb.js"),[]).then(({data:e})=>e),"v-2a99c19d":()=>h(()=>import("./convert.html-f72b4278.js"),[]).then(({data:e})=>e),"v-531ecc37":()=>h(()=>import("./index.html-81fdb6dc.js"),[]).then(({data:e})=>e),"v-7b6817fe":()=>h(()=>import("./index.html-b1035221.js"),[]).then(({data:e})=>e),"v-09dd2362":()=>h(()=>import("./conversion.html-d288c2ad.js"),[]).then(({data:e})=>e),"v-44b5ca7e":()=>h(()=>import("./index.html-8f2405df.js"),[]).then(({data:e})=>e),"v-25bd0a12":()=>h(()=>import("./index.html-8c5ecf17.js"),[]).then(({data:e})=>e),"v-bcec460e":()=>h(()=>import("./index.html-cc8131a7.js"),[]).then(({data:e})=>e),"v-38fce08b":()=>h(()=>import("./index.html-faa1c9ca.js"),[]).then(({data:e})=>e),"v-92fb1a40":()=>h(()=>import("./regular.html-3b7030a1.js"),[]).then(({data:e})=>e),"v-07bc00e4":()=>h(()=>import("./reseller.html-57f304ce.js"),[]).then(({data:e})=>e),"v-67fe297f":()=>h(()=>import("./index.html-eafa4c34.js"),[]).then(({data:e})=>e),"v-cc245b0c":()=>h(()=>import("./index.html-92c4383f.js"),[]).then(({data:e})=>e),"v-1e772bf4":()=>h(()=>import("./index.html-b8f45164.js"),[]).then(({data:e})=>e),"v-e3f0a4a2":()=>h(()=>import("./index.html-ec2bd0a3.js"),[]).then(({data:e})=>e),"v-112bcebc":()=>h(()=>import("./index.html-06621422.js"),[]).then(({data:e})=>e),"v-1f45cb3a":()=>h(()=>import("./index.html-81beb05e.js"),[]).then(({data:e})=>e),"v-1de76098":()=>h(()=>import("./index.html-70efdd1b.js"),[]).then(({data:e})=>e),"v-314a68d6":()=>h(()=>import("./index.html-143f0ae3.js"),[]).then(({data:e})=>e),"v-8e328fb4":()=>h(()=>import("./index.html-114131e7.js"),[]).then(({data:e})=>e),"v-592f0ff0":()=>h(()=>import("./index.html-bf8a75b9.js"),[]).then(({data:e})=>e),"v-7a46618b":()=>h(()=>import("./index.html-85444986.js"),[]).then(({data:e})=>e),"v-53f16644":()=>h(()=>import("./index.html-4bcf3d6e.js"),[]).then(({data:e})=>e),"v-81e6b46c":()=>h(()=>import("./index.html-ef4e2bb6.js"),[]).then(({data:e})=>e),"v-28178fcb":()=>h(()=>import("./index.html-8785f9a0.js"),[]).then(({data:e})=>e),"v-3b71926e":()=>h(()=>import("./index.html-2d6a804d.js"),[]).then(({data:e})=>e),"v-189980a8":()=>h(()=>import("./index.html-f0a459e7.js"),[]).then(({data:e})=>e),"v-76c3dae8":()=>h(()=>import("./index.html-7bf33f8f.js"),[]).then(({data:e})=>e),"v-3c6dbe82":()=>h(()=>import("./index.html-5205b84f.js"),[]).then(({data:e})=>e),"v-023a4d6d":()=>h(()=>import("./index.html-cf3e6950.js"),[]).then(({data:e})=>e),"v-de1629dc":()=>h(()=>import("./whmcs_saved.html-44210070.js"),[]).then(({data:e})=>e),"v-3bff88f8":()=>h(()=>import("./index.html-ef33aada.js"),[]).then(({data:e})=>e),"v-1cfc8d0e":()=>h(()=>import("./index.html-1a901f49.js"),[]).then(({data:e})=>e),"v-71441512":()=>h(()=>import("./index.html-7ad21d0c.js"),[]).then(({data:e})=>e),"v-27c2a530":()=>h(()=>import("./index.html-fac878d6.js"),[]).then(({data:e})=>e),"v-a7fa213a":()=>h(()=>import("./index.html-b698656f.js"),[]).then(({data:e})=>e),"v-379536f4":()=>h(()=>import("./index.html-781941ff.js"),[]).then(({data:e})=>e),"v-4cbda6a6":()=>h(()=>import("./index.html-f0fd3107.js"),[]).then(({data:e})=>e),"v-f23b5fb8":()=>h(()=>import("./index.html-4b035f13.js"),[]).then(({data:e})=>e),"v-00097080":()=>h(()=>import("./index.html-63fea01f.js"),[]).then(({data:e})=>e),"v-92a4f5fa":()=>h(()=>import("./index.html-296cc19b.js"),[]).then(({data:e})=>e),"v-1e15a9dd":()=>h(()=>import("./index.html-3f4cbfef.js"),[]).then(({data:e})=>e),"v-36e14580":()=>h(()=>import("./index.html-ad9ff012.js"),[]).then(({data:e})=>e),"v-eb8332ea":()=>h(()=>import("./index.html-84ce9456.js"),[]).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html-e0575d4e.js"),[]).then(({data:e})=>e)},Sn=JSON.parse(`{"base":"/","lang":"en-US","title":"","description":"","head":[["script",{"type":"text/javascript","id":"hs-script-loader","async":true,"defer":true,"src":"//js.hs-scripts.com/5408110.js"}],["script",{},"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-T538N4K');\\n "],["script",{},"\\n (function() {\\n var routes = {\\"/?compatiblity_matrix.html\\":\\"/cloudlinuxos/limits/#compatibility-matrix\\",\\"/cloudlinux_os_components/#installation-5\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-5\\",\\"/cloudlinux_os_components/#installation-and-update-2\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-1\\",\\"/?cagefs_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-1\\",\\"/mysql_governor.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#mysql-governor\\",\\"?backing_up_mysql.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#backing-up-mysql\\",\\"/mod_lsapi_troubleshooting.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#troubleshooting-3\\",\\"/cloudlinux_installation/#registering-cloudlinux-server\\":\\"/cloudlinuxos/cloudlinux_installation/#license-activation\\",\\"/apache_mod_lsapi.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"/cagefs.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#cagefs\\",\\"/change_mysql_version.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#change-mysql-version\\",\\"/cldiag.html\\":\\"/cloudlinuxos/command-line_tools/#cldiag\\",\\"/custom_php_ini_options.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options\\",\\"?apache_mod_lsapi.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"?custom_php_ini_options.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options\\",\\"?hybrid_kernel.html\\":\\"/cloudlinuxos/cloudlinux_os_kernel/#hybrid-kernels\\",\\"?installation.html\\":\\"/cloudlinuxos/cloudlinux_installation/\\",\\"?link_traversal_protection.html\\":\\"/cloudlinuxos/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection\\",\\"?lve_limits_with_packages.html\\":\\"/cloudlinuxos/lve_manager/#packages\\",\\"?lve_pam_module.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#lve-pam-module\\",\\"?php_selector_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-3\\",\\"?virtuozzo_and_openvz.html\\":\\"/cloudlinuxos/cloudlinux_installation/#virtuozzo-and-openvz\\",\\"/installation-wizard.html\\":\\"/cloudlinuxos/lve_manager/#installation-wizard\\",\\"/lve-limits-validation.html\\":\\"/cloudlinuxos/limits/#limits-validation\\",\\"/mysql_governor_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-2\\",\\"/node_js_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#node-js-selector\\",\\"/php_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#php-selector\\",\\"/php_selector_installation.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-3\\",\\"/python_and_ruby_selector.html\\":\\"/cloudlinuxos/cloudlinux_os_components/#python-selector\\",\\"/reseller_limits.html\\":\\"/cloudlinuxos/limits/#reseller-limits\\",\\"/cloudlinux-os-plus/#x-ray-autotracing\\":\\"/cloudlinuxos/shared-pro/#x-ray-autotracing\\",\\"/cloudlinux_installation/#activation\\":\\"/cloudlinuxos/cloudlinux_installation/#license-activation\\",\\"/cloudlinux_installation/#converting-existing-servers\\":\\"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers\\",\\"/cloudlinux_installation/#known-restrictions-and-issues\\":\\"/cloudlinuxos/cloudlinux_installation/#known-restrictions-and-issues\\",\\"/cloudlinux_installation/#uninstalling\\":\\"/cloudlinuxos/cloudlinux_installation/#uninstalling\\",\\"/cloudlinux_os_components/#customize-lve-stats2-notifications\\":\\"/cloudlinuxos/cloudlinux_os_components/#customize-lve-stats2-notifications\\",\\"/cloudlinux_os_components/#installation-enabling-and-disabling\\":\\"/cloudlinuxos/command-line_tools/#cagefs\\",\\"/cloudlinux-os-plus/#faq-2\\":\\"/cloudlinuxos/shared-pro/#faq-2\\",\\"/cloudlinux-os-plus/#installation-2\\":\\"/cloudlinuxos/shared-pro/#installation-1\\",\\"/cloudlinux-os-plus/#i-started-a-tracing-task-and-made-requests-to-url-but-did-not-see-any-results-in-the-ui-what-should-i-do\\":\\"/cloudlinuxos/shared-pro/#i-started-a-tracing-task-and-made-requests-to-url-but-did-not-see-any-results-in-the-ui-what-should-i-do\\",\\"/control_panel_integration/#mysql-governor\\":\\"/cloudlinuxos/control_panel_integration/#mysql-governor\\",\\"/control_panel_integration/#the-list-of-the-integration-scripts\\":\\"/cloudlinuxos/control_panel_integration/#the-list-of-the-integration-scripts\\",\\"/ffmpeg\\":\\"/cloudlinuxos/cloudlinux_os_components/#ffmpeg\\",\\"/limits/#limits-validation\\":\\"/cloudlinuxos/limits/#limits-validation\\",\\"/php_selector/#litespeed-support\\":\\"/cloudlinuxos/cloudlinux_os_components/#litespeed-support\\",\\"/python_selector\\":\\"/cloudlinuxos/cloudlinux_os_components/#python-selector\\",\\"/python_selector/#installation\\":\\"/cloudlinuxos/cloudlinux_os_components/#installation-1\\",\\"/user-docs/user-docs-shared-cloudlinux/#acceleratewp\\":\\"/user-docs/user-docs-shared-pro-cloudlinux/#acceleratewp\\",\\"/cloudlinux-os-plus\\":\\"/cloudlinuxos/shared-pro/\\",\\"/cloudlinuxos\\":\\"/cloudlinuxos/cloudlinux_installation/#installation\\",\\"/shared\\":\\"/cloudlinuxos/\\",\\"/shared-pro/accelerate-wp/#set-upgrade-url-for-cdn\\":\\"/cloudlinuxos/shared-pro/#set-upgrade-url-for-cdn\\",\\"/shared-pro/\\":\\"/cloudlinuxos/shared-pro/\\",\\"/cloudlinuxos-pro/introduction/\\":\\"/cloudlinuxos/shared-pro/#introduction\\",\\"/shared-pro/accelerate-wp\\":\\"/cloudlinuxos/shared-pro/#acceleratewp\\",\\"/cloudlinuxos/shared-pro/accelerate-wp/\\":\\"/cloudlinuxos/shared-pro/#acceleratewp\\",\\"/solo/introduction/\\":\\"/introduction/solo/\\",\\"/solo/activation/\\":\\"/introduction/solo/#license-activation\\",\\"/solo/faq/\\":\\"/introduction/solo/#faq\\",\\"/admin/description/\\":\\"/introduction/admin/\\",\\"/admin/installation/\\":\\"/introduction/admin/#licensing\\",\\"/admin/components/\\":\\"/introduction/admin/#components\\",\\"/admin/faq/\\":\\"/introduction/admin/#faq\\",\\"/introduction/\\":\\"/introduction/cloudlinux-os-editions/\\",\\"/introduction/#cloudlinux-os-life-cycle\\":\\"/introduction/cloudlinux-os-editions/#cloudlinux-os-life-cycle\\",\\"/introduction/#cloudlinux-9\\":\\"/cloudlinuxos/cloudlinux_installation/#requirements\\"};\\n \\n // Function to normalize a URL by removing a trailing slash and leading characters\\n function normalizeUrl(url) {\\n url = url.endsWith('/') ? url.slice(0, -1) : url;\\n url = url.startsWith('/') ? url.slice(1) : url;\\n url = url.startsWith('?') ? url.slice(1) : url;\\n return url;\\n }\\n \\n var currentPath = window.location.pathname + window.location.search + window.location.hash;\\n currentPath = normalizeUrl(currentPath);\\n \\n for (var route_url in routes) {\\n if (normalizeUrl(route_url) === currentPath) {\\n window.location.href = routes[route_url];\\n break; // Exit the loop after redirecting\\n }\\n }\\n })();\\n "],["script",{},"\\n (function() {\\n // Trigger the scroll event without actually scrolling\\n function triggerScrollEvent() {\\n const targetElement = window;\\n const scrollEvent = new Event('scroll', {\\n bubbles: true,\\n cancelable: true,\\n });\\n targetElement.dispatchEvent(scrollEvent);\\n }\\n \\n // Call the triggerScrollEvent and scrollBodyDown functions after the page is fully loaded\\n window.addEventListener('load', () => {\\n triggerScrollEvent();\\n });\\n })();\\n "]],"locales":{}}`),St={"v-8daa1a0e":w(()=>h(()=>import("./index.html-2d2e15a0.js"),["assets/index.html-2d2e15a0.js","assets/framework-dd156d1c.js"])),"v-74457223":w(()=>h(()=>import("./index.html-95029f41.js"),["assets/index.html-95029f41.js","assets/framework-dd156d1c.js"])),"v-257d9eea":w(()=>h(()=>import("./index.html-239d3e4c.js"),["assets/index.html-239d3e4c.js","assets/framework-dd156d1c.js"])),"v-19b6f117":w(()=>h(()=>import("./index.html-7eb0774a.js"),["assets/index.html-7eb0774a.js","assets/framework-dd156d1c.js"])),"v-2a99c19d":w(()=>h(()=>import("./convert.html-c5b02693.js"),["assets/convert.html-c5b02693.js","assets/framework-dd156d1c.js"])),"v-531ecc37":w(()=>h(()=>import("./index.html-c01f28b0.js"),["assets/index.html-c01f28b0.js","assets/framework-dd156d1c.js"])),"v-7b6817fe":w(()=>h(()=>import("./index.html-23f0e9d9.js"),["assets/index.html-23f0e9d9.js","assets/framework-dd156d1c.js"])),"v-09dd2362":w(()=>h(()=>import("./conversion.html-4931f873.js"),["assets/conversion.html-4931f873.js","assets/framework-dd156d1c.js"])),"v-44b5ca7e":w(()=>h(()=>import("./index.html-67a00f90.js"),["assets/index.html-67a00f90.js","assets/framework-dd156d1c.js"])),"v-25bd0a12":w(()=>h(()=>import("./index.html-e8f408fb.js"),["assets/index.html-e8f408fb.js","assets/framework-dd156d1c.js"])),"v-bcec460e":w(()=>h(()=>import("./index.html-0b5bb9d8.js"),["assets/index.html-0b5bb9d8.js","assets/framework-dd156d1c.js"])),"v-38fce08b":w(()=>h(()=>import("./index.html-416551eb.js"),["assets/index.html-416551eb.js","assets/framework-dd156d1c.js"])),"v-92fb1a40":w(()=>h(()=>import("./regular.html-727e3287.js"),["assets/regular.html-727e3287.js","assets/framework-dd156d1c.js"])),"v-07bc00e4":w(()=>h(()=>import("./reseller.html-1ad4daef.js"),["assets/reseller.html-1ad4daef.js","assets/framework-dd156d1c.js"])),"v-67fe297f":w(()=>h(()=>import("./index.html-235aa62c.js"),["assets/index.html-235aa62c.js","assets/framework-dd156d1c.js"])),"v-cc245b0c":w(()=>h(()=>import("./index.html-68da1cef.js"),["assets/index.html-68da1cef.js","assets/framework-dd156d1c.js"])),"v-1e772bf4":w(()=>h(()=>import("./index.html-d46e973b.js"),["assets/index.html-d46e973b.js","assets/framework-dd156d1c.js"])),"v-e3f0a4a2":w(()=>h(()=>import("./index.html-f589b3b2.js"),["assets/index.html-f589b3b2.js","assets/framework-dd156d1c.js"])),"v-112bcebc":w(()=>h(()=>import("./index.html-d7989310.js"),["assets/index.html-d7989310.js","assets/framework-dd156d1c.js"])),"v-1f45cb3a":w(()=>h(()=>import("./index.html-db88118b.js"),["assets/index.html-db88118b.js","assets/framework-dd156d1c.js"])),"v-1de76098":w(()=>h(()=>import("./index.html-5fa5155c.js"),["assets/index.html-5fa5155c.js","assets/framework-dd156d1c.js"])),"v-314a68d6":w(()=>h(()=>import("./index.html-a9baaf48.js"),["assets/index.html-a9baaf48.js","assets/framework-dd156d1c.js"])),"v-8e328fb4":w(()=>h(()=>import("./index.html-57badc88.js"),["assets/index.html-57badc88.js","assets/framework-dd156d1c.js"])),"v-592f0ff0":w(()=>h(()=>import("./index.html-bcdbcc69.js"),["assets/index.html-bcdbcc69.js","assets/framework-dd156d1c.js"])),"v-7a46618b":w(()=>h(()=>import("./index.html-a33d9863.js"),["assets/index.html-a33d9863.js","assets/framework-dd156d1c.js"])),"v-53f16644":w(()=>h(()=>import("./index.html-451f0f35.js"),["assets/index.html-451f0f35.js","assets/framework-dd156d1c.js"])),"v-81e6b46c":w(()=>h(()=>import("./index.html-d7184692.js"),["assets/index.html-d7184692.js","assets/framework-dd156d1c.js"])),"v-28178fcb":w(()=>h(()=>import("./index.html-10ff2e04.js"),["assets/index.html-10ff2e04.js","assets/framework-dd156d1c.js"])),"v-3b71926e":w(()=>h(()=>import("./index.html-aa840e1d.js"),["assets/index.html-aa840e1d.js","assets/framework-dd156d1c.js"])),"v-189980a8":w(()=>h(()=>import("./index.html-376dbb0d.js"),["assets/index.html-376dbb0d.js","assets/framework-dd156d1c.js"])),"v-76c3dae8":w(()=>h(()=>import("./index.html-b2d7b92c.js"),["assets/index.html-b2d7b92c.js","assets/framework-dd156d1c.js"])),"v-3c6dbe82":w(()=>h(()=>import("./index.html-b89c8e27.js"),["assets/index.html-b89c8e27.js","assets/framework-dd156d1c.js"])),"v-023a4d6d":w(()=>h(()=>import("./index.html-7f6654eb.js"),["assets/index.html-7f6654eb.js","assets/framework-dd156d1c.js"])),"v-de1629dc":w(()=>h(()=>import("./whmcs_saved.html-94ab76c4.js"),["assets/whmcs_saved.html-94ab76c4.js","assets/framework-dd156d1c.js"])),"v-3bff88f8":w(()=>h(()=>import("./index.html-8641f2a0.js"),["assets/index.html-8641f2a0.js","assets/framework-dd156d1c.js"])),"v-1cfc8d0e":w(()=>h(()=>import("./index.html-2fa95f1b.js"),["assets/index.html-2fa95f1b.js","assets/framework-dd156d1c.js"])),"v-71441512":w(()=>h(()=>import("./index.html-16b21d93.js"),["assets/index.html-16b21d93.js","assets/framework-dd156d1c.js"])),"v-27c2a530":w(()=>h(()=>import("./index.html-2c2dfb23.js"),["assets/index.html-2c2dfb23.js","assets/framework-dd156d1c.js"])),"v-a7fa213a":w(()=>h(()=>import("./index.html-392312fd.js"),["assets/index.html-392312fd.js","assets/framework-dd156d1c.js"])),"v-379536f4":w(()=>h(()=>import("./index.html-9e8a5565.js"),["assets/index.html-9e8a5565.js","assets/framework-dd156d1c.js"])),"v-4cbda6a6":w(()=>h(()=>import("./index.html-f8088e8a.js"),["assets/index.html-f8088e8a.js","assets/framework-dd156d1c.js"])),"v-f23b5fb8":w(()=>h(()=>import("./index.html-d84cb147.js"),["assets/index.html-d84cb147.js","assets/framework-dd156d1c.js"])),"v-00097080":w(()=>h(()=>import("./index.html-66cd7b98.js"),["assets/index.html-66cd7b98.js","assets/framework-dd156d1c.js"])),"v-92a4f5fa":w(()=>h(()=>import("./index.html-d83c55c6.js"),["assets/index.html-d83c55c6.js","assets/framework-dd156d1c.js"])),"v-1e15a9dd":w(()=>h(()=>import("./index.html-0f9b9ad5.js"),["assets/index.html-0f9b9ad5.js","assets/framework-dd156d1c.js"])),"v-36e14580":w(()=>h(()=>import("./index.html-8ce3571d.js"),["assets/index.html-8ce3571d.js","assets/framework-dd156d1c.js"])),"v-eb8332ea":w(()=>h(()=>import("./index.html-a64109ea.js"),["assets/index.html-a64109ea.js","assets/framework-dd156d1c.js"])),"v-3706649a":w(()=>h(()=>import("./404.html-2ec8d8e0.js"),["assets/404.html-2ec8d8e0.js","assets/framework-dd156d1c.js"]))};var En=Symbol(""),Ln=P(Ke),Et=nn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),le=P(Et),ce=()=>le,Lt=Symbol(""),Se=()=>{const e=q(Lt);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Ot=Symbol(""),On=()=>{const e=q(Ot);if(!e)throw new Error("usePageHead() is called without provider.");return e},$n=Symbol(""),$t=Symbol(""),Dt=()=>{const e=q($t);if(!e)throw new Error("usePageLang() is called without provider.");return e},At=Symbol(""),Dn=()=>{const e=q(At);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Rt=Symbol(""),Tt=()=>{const e=q(Rt);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},we=P(Sn),An=Symbol(""),Rn=Symbol(""),Tn="Layout",Pn="NotFound",te=sn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Ln.value[e];return await(t==null?void 0:t())??Et},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const s=fe(t.description)?t.description:n.description,i=[...on(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:s}]];return ln(i)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let n;if(e.path){const s=e.frontmatter.layout;fe(s)?n=s:n=Tn}else n=Pn;return t[n]},resolveRouteLocale:(e,t)=>rn(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Vn=Me({name:"ClientOnly",setup(e,t){const n=P(!1);return oe(()=>{n.value=!0}),()=>{var s,i;return n.value?(i=(s=t.slots).default)==null?void 0:i.call(s):null}}}),Cn=Me({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=ce(),n=D(()=>St[e.pageKey||t.value.key]);return()=>n.value?ne(n.value):ne("div","404 Not Found")}}),In=(e={})=>e,G=e=>an(e)?e:`/${un(e)}`;const Mn={enhance:({app:e})=>{}};function Bn(e){return{all:e=e||new Map,on:function(t,n){var s=e.get(t);s?s.push(n):e.set(t,[n])},off:function(t,n){var s=e.get(t);s&&(n?s.splice(s.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var s=e.get(t);s&&s.slice().map(function(i){i(n)}),(s=e.get("*"))&&s.slice().map(function(i){i(t,n)})}}}const zn={class:"footer__img"},qn=["href"],Hn=["src","alt"],Fn={class:"footer-company-title"},Nn={class:"social"},Wn={class:"social_links"},jn=["href"],Gn={class:"footer-social-text"},Un={class:"social-icons-wrapper"},Kn=["href"],Zn=["src"],Qn={__name:"Footer",setup(e){const{social:t,cloudlinuxSite:n,footerCustomLogo:s,footerCustomAltText:i,locales:o}=q("themeConfig"),l=Se(),r=D(()=>new Date().getFullYear()),a=D(()=>l.value.layout==="HomeLayout");return(u,c)=>(d(),b("div",{class:Z(["footer",{"footer-default-layout":!a.value}])},[v("div",zn,[v("a",{href:k(n)},[v("img",{src:k(G)(k(s)),alt:k(i)},null,8,Hn)],8,qn)]),v("div",Fn,I(r.value)+". CloudLinux Inc ",1),v("div",Nn,[v("div",Wn,[(d(!0),b(W,null,j(k(o).bottomLinks,p=>(d(),b("a",{href:p.url,target:"_blank"},I(p.text),9,jn))),256))]),v("span",Gn,I(k(o).stayInTouch),1),v("div",Un,[(d(!0),b(W,null,j(k(t),p=>(d(),b("a",{class:"social-icons-link",href:p==null?void 0:p.url,target:"_blank"},[p.icon?(d(),b("img",{key:0,class:"social-icons-link-img",src:k(G)(p==null?void 0:p.icon),alt:"footer logo"},null,8,Zn)):S("v-if",!0)],8,Kn))),256))])])],2))}},Re=B(Qn,[["__scopeId","data-v-f2902e71"],["__file","Footer.vue"]]),Pt={"/user-docs/":[{collapsable:!1,children:["/user-docs/user-docs-shared-pro-cloudlinux/","/user-docs/user-docs-solo-cloudlinux/"]}],"/introduction/":[{collapsable:!1,children:["/introduction/cloudlinux-os-editions/","/introduction/solo/","/introduction/admin/"]}],"/cln/":[{collapsable:!1,children:["/cln/introduction/","/cln/terminology/","/cln/dashboard/","/cln/billing/","/cln/payment_methods/","/cln/purchase/","/cln/account_settings/","/cln/cln_for_resellers/","/cln/whmcs_plugin/","/cln/whmcs_advantage/"]}],"/ubuntu/":[{collapsable:!1,children:["/ubuntu/introduction/","/ubuntu/faq/","/ubuntu/features/","/ubuntu/installation/","/ubuntu/troubleshooting/","/ubuntu/uninstalling/"]}],"/cloudlinuxos/":[{collapsable:!1,children:["/cloudlinuxos/cloudlinux_installation/","/cloudlinuxos/elevate/","/cloudlinuxos/limits/","/cloudlinuxos/lve_manager/","/cloudlinuxos/cloudlinux_os_components/","/cloudlinuxos/shared-pro/","/cloudlinuxos/command-line_tools/","/cloudlinuxos/apache2nginx/","/cloudlinuxos/alt-ea_packages/","/cloudlinuxos/control_panel_integration/","/cloudlinuxos/cloudlinux_os_kernel/","/cloudlinuxos/for_cloudlinux_partners/","/cloudlinuxos/deprecated/"]}],"/sub-system-ubuntu/":[{collapsable:!1,children:["/sub-system-ubuntu/introduction/","/sub-system-ubuntu/faq/","/sub-system-ubuntu/installation/","/sub-system-ubuntu/troubleshooting/","/sub-system-ubuntu/uninstalling/"]}]},Ze=/#.*$/,Xn=/\.(md|html)$/,pe=/\/$/,je=/^(https?:|mailto:|tel:)/;function me(e){return decodeURI(e).replace(Ze,"").replace(Xn,"")}function Jn(e){const t=e==null?void 0:e.match(Ze);if(t)return t[0]}function Yn(e){return je.test(e)}function es(e){if(Yn(e))return e;const t=e==null?void 0:e.match(Ze),n=t?t[0]:"",s=me(e);return pe.test(s)?e:s+".html"+n}function Te(e,t){const n=e.hash,s=Jn(t);if(s&&n!==s)return!1;const i=me(e.path),o=me(t);return i===o}function Pe(e,t,n){n&&(t=ts(t,n));const s=me(t);for(let i=0;iCt(o,n,s)):[]}function ns(e){e=e.map(n=>Object.assign({},JSON.parse(JSON.stringify(n))));let t;return e.forEach(n=>{n.level!==1?t=n:t&&(t.children||(t.children=[])).push(n)}),e.filter(n=>n.level!==1)}function ss(e,t){if(Array.isArray(t))return{base:"/",config:t};for(const n in t)if(os(e.path).indexOf(n)===0)return{base:n,config:t[n]};return null}function os(e){return/(\.html|\/)$/.test(e)?e:e+"/"}function Ct(e,t,n,s){if(typeof e=="string")return Pe(t,e,n);if(Array.isArray(e))return Object.assign(Pe(t,e[0],n),{title:e[1]});{s&&console.error("[vuepress] Nested sidebar groups are not supported. Consider using navbar + categories instead.");const i=e.children||[];return{type:"group",title:e.title,children:i.map(o=>Ct(o,t,n,!0)),collapsable:e.collapsable!==!1}}}const is={functional:!0,props:["item","closeSidebarDrawer"],render({item:e,closeSidebarDrawer:t}){var c,p;if(!e)return;const n=ce(),s=Be(),i=ze(),o=Te(s,e==null?void 0:e.path),l=(e==null?void 0:e.type)==="auto"?o||e.children.some(_=>Te(s,e.basePath+"#"+_.slug)):o,r=ls(ne,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),l,e.headers,t,i),a=((c=n.value.frontmatter)==null?void 0:c.sidebarDepth)!=null?(p=n.value.frontmatter)==null?void 0:p.sidebarDepth:5,u=a??1;if((e==null?void 0:e.type)==="auto")return[r,Ge(ne,e.children,e.basePath,s,u,1,t)];if(e.headers&&e.headers.length){const _=ns(e.headers);return[r,Ge(ne,_,e==null?void 0:e.path,s,u,1,t)]}return Qe(ne,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),l,e.children,0,t)}};function Qe(e,t,n,s,i,o=0,l){const r=e(cn,{"data-anchor":t,to:t,activeClass:"",exactActiveClass:"",class:{active:s,"sidebar-link":!0,["link-depth-level-"+o]:!0}},()=>[n]);return e("div",{class:{active:s,collapsed:!0,"sidebar-link-container":!!(i!=null&&i.length)},onClick:a=>{a.target.classList.toggle("collapsed"),a.target.tagName!=="DIV"&&l()}},[r])}function ls(e,t,n,s,i,o,l){const r=!!i&&i.some(a=>a.level!==1);return e("div",{class:{active:s,collapsed:s,"sidebar-header":!0,"sidebar-link":!0,"sidebar-header--empty":!r},onClick:a=>{const u=a.target.classList,c=a.target.querySelector("a");u.toggle("collapsed"),c&&l.push(c.getAttribute("href"))}},[Qe(e,t,n,s,null,0,o)])}function Ge(e,t,n,s,i,o=1,l){return!t||o>i?null:e("ul",{class:"sidebar-sub-headers"},t.map(r=>{const a=Te(s,n+"#"+r.slug);return e("li",{class:{collapsible:o<3,"sidebar-sub-header":!0}},[Qe(e,n+"#"+r.slug,r.title,a,r.children,o,l),Ge(e,r.children,n,s,i,o+1,l)])}))}const It=B(is,[["__file","SidebarLink.vue"]]);const rs={__name:"DropdownTransition",setup(e){const t=s=>{s.style.height=s.scrollHeight+"px"},n=s=>{s.style.height=""};return(s,i)=>(d(),L(Ae,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:Q(()=>[$(s.$slots,"default")]),_:3}))}},as=B(rs,[["__file","DropdownTransition.vue"]]);const us={key:0,ref:"items",class:"sidebar-group-items"},cs={__name:"SidebarGroup",props:{item:{type:Object,required:!0},first:{type:Boolean,required:!0},open:{type:Boolean,required:!0},collapsable:{type:Boolean,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}}},setup(e){return(t,n)=>(d(),b("div",{class:Z(["sidebar-group",{first:e.first,collapsable:e.collapsable}])},[x(as,null,{default:Q(()=>{var s;return[e.open||!e.collapsable?(d(),b("ul",us,[(d(!0),b(W,null,j((s=e.item)==null?void 0:s.children,i=>(d(),b("li",null,[x(It,{closeSidebarDrawer:e.closeSidebarDrawer,item:i},null,8,["closeSidebarDrawer","item"])]))),256))],512)):S("v-if",!0)]}),_:1})],2))}},ds=B(cs,[["__file","SidebarGroup.vue"]]);const hs={class:"sidebar"},ps={key:0,class:"sidebar-links"},fs={__name:"Sidebar",props:{items:{type:Array,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}},isMobileWidth:{type:Boolean}},setup(e){const t=e,n=D(()=>t.items),s=Be(),i=ce(),o=D(()=>Vt(i.value,s,n.value)),l=P(0),r=()=>{const g=p(s,t.items);g>-1&&(l.value=g)},a=g=>{l.value=g===l.value?-1:g},u=g=>{const m=g.getBoundingClientRect();return m.top>=0&&m.left>=0&&m.bottom<=(window.innerHeight/2||document.documentElement.clientHeight/2)&&m.right<=(window.innerWidth||document.documentElement.clientWidth)};_e(()=>s,r);const c=()=>{const g=document.querySelectorAll(".header-anchor"),m=document.querySelector(".sidebar"),f=m.querySelectorAll("a"),y=m.querySelectorAll(".collapsible.sidebar-sub-header"),V=Array.from(f).map(O=>O.getAttribute("data-anchor"));g.forEach(O=>{O.getAttribute("data-anchor")||O.setAttribute("data-anchor",i.value.path+O.hash)}),g.forEach(O=>{if(u(O)){const C=V.find(E=>E===O.getAttribute("data-anchor"));y.forEach(E=>{E.querySelectorAll(".sidebar-link-container").forEach(M=>{E.querySelector(`a[data-anchor="${C}"]`)?M.classList.remove("collapsed"):M.classList.add("collapsed")})}),m.querySelector(`a[data-anchor="${C}"]`)&&(f.forEach(E=>E.classList.remove("active")),m.querySelector(`a[data-anchor="${C}"]`).classList.add("active"))}})},p=(g,m)=>{for(let f=0;fTe(g,V.path)))return f}return-1},_=()=>{const g=window.location.hash,m=document.querySelectorAll(".sidebar a");m.forEach(f=>{if(f.getAttribute("data-anchor")===g){m.forEach(V=>V.classList.remove("active")),f.classList.add("active");const y=f.closest(".collapsible");y&&y.classList.remove("collapsed")}})};return oe(()=>{r(),t.isMobileWidth||window.addEventListener("scroll",c),t.isMobileWidth||window.addEventListener("resize",c),window.addEventListener("hashchange",_)}),be(()=>{window.removeEventListener("scroll",c),window.removeEventListener("resize",c),window.removeEventListener("hashchange",_)}),(g,m)=>(d(),b("div",hs,[$(g.$slots,"top"),o.value.length?(d(),b("ul",ps,[(d(!0),b(W,null,j(o.value,(f,y)=>(d(),b("li",{key:y},[f.type==="group"?(d(),L(ds,{key:0,item:f,first:y===0,open:y===l.value,closeSidebarDrawer:e.closeSidebarDrawer,collapsable:!!(f.collapsable||f.collapsible),onToggle:V=>a(y)},null,8,["item","first","open","closeSidebarDrawer","collapsable","onToggle"])):(d(),L(It,{key:1,closeSidebarDrawer:e.closeSidebarDrawer,item:f},null,8,["closeSidebarDrawer","item"]))]))),128))])):S("v-if",!0),$(g.$slots,"bottom")]))}},Mt=B(fs,[["__file","Sidebar.vue"]]);var gs=Object.defineProperty,ms=Object.defineProperties,_s=Object.getOwnPropertyDescriptors,at=Object.getOwnPropertySymbols,bs=Object.prototype.hasOwnProperty,vs=Object.prototype.propertyIsEnumerable,ut=(e,t,n)=>t in e?gs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,he=(e,t)=>{for(var n in t||(t={}))bs.call(t,n)&&ut(e,n,t[n]);if(at)for(var n of at(t))vs.call(t,n)&&ut(e,n,t[n]);return e},ct=(e,t)=>ms(e,_s(t));const ys={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer(){this.autoscroll&&this.maybeAdjustScroll()},open(e){this.autoscroll&&e&&this.$nextTick(()=>this.maybeAdjustScroll())}},methods:{maybeAdjustScroll(){var e;const t=((e=this.$refs.dropdownMenu)==null?void 0:e.children[this.typeAheadPointer])||!1;if(t){const n=this.getDropdownViewport(),{top:s,bottom:i,height:o}=t.getBoundingClientRect();if(sn.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(n.height-o)}},getDropdownViewport(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},ws={data(){return{typeAheadPointer:-1}},watch:{filteredOptions(){for(let e=0;e=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown(){for(let e=this.typeAheadPointer+1;e{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},ks={},Ss={xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"},Es=v("path",{d:"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z"},null,-1),Ls=[Es];function Os(e,t){return d(),b("svg",Ss,Ls)}const $s=Xe(ks,[["render",Os]]),Ds={},As={xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"},Rs=v("path",{d:"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"},null,-1),Ts=[Rs];function Ps(e,t){return d(),b("svg",As,Ts)}const Vs=Xe(Ds,[["render",Ps]]),dt={Deselect:$s,OpenIndicator:Vs},Cs={mounted(e,{instance:t}){if(t.appendToBody){const{height:n,top:s,left:i,width:o}=t.$refs.toggle.getBoundingClientRect();let l=window.scrollX||window.pageXOffset,r=window.scrollY||window.pageYOffset;e.unbindPosition=t.calculatePosition(e,t,{width:o+"px",left:l+i+"px",top:r+s+n+"px"}),document.body.appendChild(e)}},unmounted(e,{instance:t}){t.appendToBody&&(e.unbindPosition&&typeof e.unbindPosition=="function"&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}};function Is(e){const t={};return Object.keys(e).sort().forEach(n=>{t[n]=e[n]}),JSON.stringify(t)}let Ms=0;function Bs(){return++Ms}const zs={components:he({},dt),directives:{appendToBody:Cs},mixins:[ys,ws,xs],compatConfig:{MODE:3},emits:["open","close","update:modelValue","search","search:compositionstart","search:compositionend","search:keydown","search:blur","search:focus","search:input","option:created","option:selecting","option:selected","option:deselecting","option:deselected"],props:{modelValue:{},components:{type:Object,default:()=>({})},options:{type:Array,default(){return[]}},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!0},deselectFromDropdown:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},placeholder:{type:String,default:""},transition:{type:String,default:"vs__fade"},clearSearchOnSelect:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},label:{type:String,default:"label"},autocomplete:{type:String,default:"off"},reduce:{type:Function,default:e=>e},selectable:{type:Function,default:e=>!0},getOptionLabel:{type:Function,default(e){return typeof e=="object"?e.hasOwnProperty(this.label)?e[this.label]:console.warn(`[vue-select warn]: Label key "option.${this.label}" does not exist in options object ${JSON.stringify(e)}. https://vue-select.org/api/props.html#getoptionlabel`):e}},getOptionKey:{type:Function,default(e){if(typeof e!="object")return e;try{return e.hasOwnProperty("id")?e.id:Is(e)}catch(t){return console.warn(`[vue-select warn]: Could not stringify this option to generate unique key. Please provide'getOptionKey' prop to return a unique key for each option. https://vue-select.org/api/props.html#getoptionkey`,e,t)}}},onTab:{type:Function,default:function(){this.selectOnTab&&!this.isComposing&&this.typeAheadSelect()}},taggable:{type:Boolean,default:!1},tabindex:{type:Number,default:null},pushTags:{type:Boolean,default:!1},filterable:{type:Boolean,default:!0},filterBy:{type:Function,default(e,t,n){return(t||"").toLocaleLowerCase().indexOf(n.toLocaleLowerCase())>-1}},filter:{type:Function,default(e,t){return e.filter(n=>{let s=this.getOptionLabel(n);return typeof s=="number"&&(s=s.toString()),this.filterBy(n,s,t)})}},createOption:{type:Function,default(e){return typeof this.optionList[0]=="object"?{[this.label]:e}:e}},resetOnOptionsChange:{default:!1,validator:e=>["function","boolean"].includes(typeof e)},clearSearchOnBlur:{type:Function,default:function({clearSearchOnSelect:e,multiple:t}){return e&&!t}},noDrop:{type:Boolean,default:!1},inputId:{type:String},dir:{type:String,default:"auto"},selectOnTab:{type:Boolean,default:!1},selectOnKeyCodes:{type:Array,default:()=>[13]},searchInputQuerySelector:{type:String,default:"[type=search]"},mapKeydown:{type:Function,default:(e,t)=>e},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default(e,t,{width:n,top:s,left:i}){e.style.top=s,e.style.left=i,e.style.width=n}},dropdownShouldOpen:{type:Function,default({noDrop:e,open:t,mutableLoading:n}){return e?!1:t&&!n}},uid:{type:[String,Number],default:()=>Bs()}},data(){return{search:"",open:!1,isComposing:!1,pushedTags:[],_value:[],deselectButtons:[]}},computed:{isReducingValues(){return this.$props.reduce!==this.$options.props.reduce.default},isTrackingValues(){return typeof this.modelValue>"u"||this.isReducingValues},selectedValue(){let e=this.modelValue;return this.isTrackingValues&&(e=this.$data._value),e!=null&&e!==""?[].concat(e):[]},optionList(){return this.options.concat(this.pushTags?this.pushedTags:[])},searchEl(){return this.$slots.search?this.$refs.selectedOptions.querySelector(this.searchInputQuerySelector):this.$refs.search},scope(){const e={search:this.search,loading:this.loading,searching:this.searching,filteredOptions:this.filteredOptions};return{search:{attributes:he({disabled:this.disabled,placeholder:this.searchPlaceholder,tabindex:this.tabindex,readonly:!this.searchable,id:this.inputId,"aria-autocomplete":"list","aria-labelledby":`vs${this.uid}__combobox`,"aria-controls":`vs${this.uid}__listbox`,ref:"search",type:"search",autocomplete:this.autocomplete,value:this.search},this.dropdownOpen&&this.filteredOptions[this.typeAheadPointer]?{"aria-activedescendant":`vs${this.uid}__option-${this.typeAheadPointer}`}:{}),events:{compositionstart:()=>this.isComposing=!0,compositionend:()=>this.isComposing=!1,keydown:this.onSearchKeyDown,blur:this.onSearchBlur,focus:this.onSearchFocus,input:t=>this.search=t.target.value}},spinner:{loading:this.mutableLoading},noOptions:{search:this.search,loading:this.mutableLoading,searching:this.searching},openIndicator:{attributes:{ref:"openIndicator",role:"presentation",class:"vs__open-indicator"}},listHeader:e,listFooter:e,header:ct(he({},e),{deselect:this.deselect}),footer:ct(he({},e),{deselect:this.deselect})}},childComponents(){return he(he({},dt),this.components)},stateClasses(){return{"vs--open":this.dropdownOpen,"vs--single":!this.multiple,"vs--multiple":this.multiple,"vs--searching":this.searching&&!this.noDrop,"vs--searchable":this.searchable&&!this.noDrop,"vs--unsearchable":!this.searchable,"vs--loading":this.mutableLoading,"vs--disabled":this.disabled}},searching(){return!!this.search},dropdownOpen(){return this.dropdownShouldOpen(this)},searchPlaceholder(){return this.isValueEmpty&&this.placeholder?this.placeholder:void 0},filteredOptions(){const e=[].concat(this.optionList);if(!this.filterable&&!this.taggable)return e;const t=this.search.length?this.filter(e,this.search,this):e;if(this.taggable&&this.search.length){const n=this.createOption(this.search);this.optionExists(n)||t.unshift(n)}return t},isValueEmpty(){return this.selectedValue.length===0},showClearButton(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options(e,t){const n=()=>typeof this.resetOnOptionsChange=="function"?this.resetOnOptionsChange(e,t,this.selectedValue):this.resetOnOptionsChange;!this.taggable&&n()&&this.clearSelection(),this.modelValue&&this.isTrackingValues&&this.setInternalValueFromOptions(this.modelValue)},modelValue:{immediate:!0,handler(e){this.isTrackingValues&&this.setInternalValueFromOptions(e)}},multiple(){this.clearSelection()},open(e){this.$emit(e?"open":"close")}},created(){this.mutableLoading=this.loading},methods:{setInternalValueFromOptions(e){Array.isArray(e)?this.$data._value=e.map(t=>this.findOptionFromReducedValue(t)):this.$data._value=this.findOptionFromReducedValue(e)},select(e){this.$emit("option:selecting",e),this.isOptionSelected(e)?this.deselectFromDropdown&&(this.clearable||this.multiple&&this.selectedValue.length>1)&&this.deselect(e):(this.taggable&&!this.optionExists(e)&&(this.$emit("option:created",e),this.pushTag(e)),this.multiple&&(e=this.selectedValue.concat(e)),this.updateValue(e),this.$emit("option:selected",e)),this.onAfterSelect(e)},deselect(e){this.$emit("option:deselecting",e),this.updateValue(this.selectedValue.filter(t=>!this.optionComparator(t,e))),this.$emit("option:deselected",e)},clearSelection(){this.updateValue(this.multiple?[]:null)},onAfterSelect(e){this.closeOnSelect&&(this.open=!this.open,this.searchEl.blur()),this.clearSearchOnSelect&&(this.search="")},updateValue(e){typeof this.modelValue>"u"&&(this.$data._value=e),e!==null&&(Array.isArray(e)?e=e.map(t=>this.reduce(t)):e=this.reduce(e)),this.$emit("update:modelValue",e)},toggleDropdown(e){const t=e.target!==this.searchEl;t&&e.preventDefault();const n=[...this.deselectButtons||[],this.$refs.clearButton];if(this.searchEl===void 0||n.filter(Boolean).some(s=>s.contains(e.target)||s===e.target)){e.preventDefault();return}this.open&&t?this.searchEl.blur():this.disabled||(this.open=!0,this.searchEl.focus())},isOptionSelected(e){return this.selectedValue.some(t=>this.optionComparator(t,e))},isOptionDeselectable(e){return this.isOptionSelected(e)&&this.deselectFromDropdown},optionComparator(e,t){return this.getOptionKey(e)===this.getOptionKey(t)},findOptionFromReducedValue(e){const t=s=>JSON.stringify(this.reduce(s))===JSON.stringify(e),n=[...this.options,...this.pushedTags].filter(t);return n.length===1?n[0]:n.find(s=>this.optionComparator(s,this.$data._value))||e},closeSearchOptions(){this.open=!1,this.$emit("search:blur")},maybeDeleteValue(){if(!this.searchEl.value.length&&this.selectedValue&&this.selectedValue.length&&this.clearable){let e=null;this.multiple&&(e=[...this.selectedValue.slice(0,this.selectedValue.length-1)]),this.updateValue(e)}},optionExists(e){return this.optionList.some(t=>this.optionComparator(t,e))},normalizeOptionForSlot(e){return typeof e=="object"?e:{[this.label]:e}},pushTag(e){this.pushedTags.push(e)},onEscape(){this.search.length?this.search="":this.searchEl.blur()},onSearchBlur(){if(this.mousedown&&!this.searching)this.mousedown=!1;else{const{clearSearchOnSelect:e,multiple:t}=this;this.clearSearchOnBlur({clearSearchOnSelect:e,multiple:t})&&(this.search=""),this.closeSearchOptions();return}if(this.search.length===0&&this.options.length===0){this.closeSearchOptions();return}},onSearchFocus(){this.open=!0,this.$emit("search:focus")},onMousedown(){this.mousedown=!0},onMouseUp(){this.mousedown=!1},onSearchKeyDown(e){const t=i=>(i.preventDefault(),!this.isComposing&&this.typeAheadSelect()),n={8:i=>this.maybeDeleteValue(),9:i=>this.onTab(),27:i=>this.onEscape(),38:i=>(i.preventDefault(),this.typeAheadUp()),40:i=>(i.preventDefault(),this.typeAheadDown())};this.selectOnKeyCodes.forEach(i=>n[i]=t);const s=this.mapKeydown(n,this);if(typeof s[e.keyCode]=="function")return s[e.keyCode](e)}}},qs=["dir"],Hs=["id","aria-expanded","aria-owns"],Fs={ref:"selectedOptions",class:"vs__selected-options"},Ns=["disabled","title","aria-label","onClick"],Ws={ref:"actions",class:"vs__actions"},js=["disabled"],Gs={class:"vs__spinner"},Us=["id"],Ks=["id","aria-selected","onMouseover","onClick"],Zs={key:0,class:"vs__no-options"},Qs=se(" Sorry, no matching options. "),Xs=["id"];function Js(e,t,n,s,i,o){const l=dn("append-to-body");return d(),b("div",{dir:n.dir,class:Z(["v-select",o.stateClasses])},[$(e.$slots,"header",X(J(o.scope.header))),v("div",{id:`vs${n.uid}__combobox`,ref:"toggle",class:"vs__dropdown-toggle",role:"combobox","aria-expanded":o.dropdownOpen.toString(),"aria-owns":`vs${n.uid}__listbox`,"aria-label":"Search for option",onMousedown:t[1]||(t[1]=r=>o.toggleDropdown(r))},[v("div",Fs,[(d(!0),b(W,null,j(o.selectedValue,(r,a)=>$(e.$slots,"selected-option-container",{option:o.normalizeOptionForSlot(r),deselect:o.deselect,multiple:n.multiple,disabled:n.disabled},()=>[(d(),b("span",{key:n.getOptionKey(r),class:"vs__selected"},[$(e.$slots,"selected-option",X(J(o.normalizeOptionForSlot(r))),()=>[se(I(n.getOptionLabel(r)),1)]),n.multiple?(d(),b("button",{key:0,ref_for:!0,ref:u=>i.deselectButtons[a]=u,disabled:n.disabled,type:"button",class:"vs__deselect",title:`Deselect ${n.getOptionLabel(r)}`,"aria-label":`Deselect ${n.getOptionLabel(r)}`,onClick:u=>o.deselect(r)},[(d(),L(De(o.childComponents.Deselect)))],8,Ns)):S("",!0)]))])),256)),$(e.$slots,"search",X(J(o.scope.search)),()=>[v("input",We({class:"vs__search"},o.scope.search.attributes,hn(o.scope.search.events)),null,16)])],512),v("div",Ws,[re(v("button",{ref:"clearButton",disabled:n.disabled,type:"button",class:"vs__clear",title:"Clear Selected","aria-label":"Clear Selected",onClick:t[0]||(t[0]=(...r)=>o.clearSelection&&o.clearSelection(...r))},[(d(),L(De(o.childComponents.Deselect)))],8,js),[[ae,o.showClearButton]]),$(e.$slots,"open-indicator",X(J(o.scope.openIndicator)),()=>[n.noDrop?S("",!0):(d(),L(De(o.childComponents.OpenIndicator),X(We({key:0},o.scope.openIndicator.attributes)),null,16))]),$(e.$slots,"spinner",X(J(o.scope.spinner)),()=>[re(v("div",Gs,"Loading...",512),[[ae,e.mutableLoading]])])],512)],40,Hs),x(Ae,{name:n.transition},{default:Q(()=>[o.dropdownOpen?re((d(),b("ul",{id:`vs${n.uid}__listbox`,ref:"dropdownMenu",key:`vs${n.uid}__listbox`,class:"vs__dropdown-menu",role:"listbox",tabindex:"-1",onMousedown:t[2]||(t[2]=z((...r)=>o.onMousedown&&o.onMousedown(...r),["prevent"])),onMouseup:t[3]||(t[3]=(...r)=>o.onMouseUp&&o.onMouseUp(...r))},[$(e.$slots,"list-header",X(J(o.scope.listHeader))),(d(!0),b(W,null,j(o.filteredOptions,(r,a)=>(d(),b("li",{id:`vs${n.uid}__option-${a}`,key:n.getOptionKey(r),role:"option",class:Z(["vs__dropdown-option",{"vs__dropdown-option--deselect":o.isOptionDeselectable(r)&&a===e.typeAheadPointer,"vs__dropdown-option--selected":o.isOptionSelected(r),"vs__dropdown-option--highlight":a===e.typeAheadPointer,"vs__dropdown-option--disabled":!n.selectable(r)}]),"aria-selected":a===e.typeAheadPointer?!0:null,onMouseover:u=>n.selectable(r)?e.typeAheadPointer=a:null,onClick:z(u=>n.selectable(r)?o.select(r):null,["prevent","stop"])},[$(e.$slots,"option",X(J(o.normalizeOptionForSlot(r))),()=>[se(I(n.getOptionLabel(r)),1)])],42,Ks))),128)),o.filteredOptions.length===0?(d(),b("li",Zs,[$(e.$slots,"no-options",X(J(o.scope.noOptions)),()=>[Qs])])):S("",!0),$(e.$slots,"list-footer",X(J(o.scope.listFooter)))],40,Us)),[[l]]):(d(),b("ul",{key:1,id:`vs${n.uid}__listbox`,role:"listbox",style:{display:"none",visibility:"hidden"}},null,8,Xs))]),_:3},8,["name"]),$(e.$slots,"footer",X(J(o.scope.footer)))],10,qs)}const Ys=Xe(zs,[["render",Js]]);const eo=["src"],to={key:1},no={__name:"DSelect",props:{withIcon:{type:Boolean,default:!0},modelValue:{type:Object,default:()=>({label:"",value:""})},options:{type:Array,default:()=>[]}},emits:["changeSidebarItems","update:selectedValue","update:model-value"],setup(e,{emit:t}){const{searchSelectIcon:n}=q("themeConfig"),s=t,i=r=>{s("changeSidebarItems",r),s("update:model-value",r)},o=P(),l=()=>{o.value&&(o.value.open=!1)};return oe(()=>window.addEventListener("click",r=>{var a;(a=o.value)!=null&&a.$el.contains(r.target)||l()})),be(()=>window.removeEventListener("click",l)),(r,a)=>(d(),L(k(Ys),{ref_key:"dropdown",ref:o,"onUpdate:modelValue":i,"model-value":e.modelValue,label:"title",value:"link",clearable:!1,searchable:!1,options:e.options},{"open-indicator":Q(({attributes:u})=>[e.withIcon?(d(),b("div",We({key:0,class:"select-icon"},u),[v("img",{src:k(G)(k(n)),alt:"search Icon"},null,8,eo)],16)):(d(),b("span",to))]),_:1},8,["model-value","options"]))}},Bt=B(no,[["__file","DSelect.vue"]]),so={class:"sidebar-drawer__mobile"},oo={class:"sidebar-header"},io=Me({__name:"SidebarDrawer",props:{allPages:{type:Array,required:!0,default:()=>[]},documents:{type:Array,required:!0,default:()=>[]},closeSidebarDrawer:{type:Function,default:()=>{}},modelValue:{type:Object,required:!0,default:()=>{}},isMobileWidth:{type:Boolean}},emits:["changeSidebarItems","update:model-value"],setup(e){return(t,n)=>(d(),b("div",so,[x(Mt,{closeSidebarDrawer:e.closeSidebarDrawer,items:e.allPages,isMobileWidth:e.isMobileWidth},{top:Q(()=>[v("div",oo,[n[2]||(n[2]=v("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1)),x(Bt,{modelValue:e.modelValue,"onUpdate:modelValue":n[0]||(n[0]=s=>t.$emit("update:model-value",s)),onChangeSidebarItems:n[1]||(n[1]=s=>t.$emit("changeSidebarItems",s)),"with-icon":"",options:e.documents},null,8,["modelValue","options"])])]),_:1},8,["closeSidebarDrawer","items","isMobileWidth"])]))}});const lo=B(io,[["__file","SidebarDrawer.vue"]]);function Je(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let de=Je();function zt(e){de=e}const xe={exec:()=>null};function R(e,t=""){let n=typeof e=="string"?e:e.source;const s={replace:(i,o)=>{let l=typeof o=="string"?o:o.source;return l=l.replace(H.caret,"$1"),n=n.replace(i,l),s},getRegex:()=>new RegExp(n,t)};return s}const H={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},ro=/^(?:[ \t]*(?:\n|$))+/,ao=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,uo=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ee=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,co=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,qt=/(?:[*+-]|\d{1,9}[.)])/,Ht=R(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,qt).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),Ye=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ho=/^[^\n]+/,et=/(?!\s*\])(?:\\.|[^\[\]\\])+/,po=R(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",et).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),fo=R(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,qt).getRegex(),qe="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",tt=/|$))/,go=R("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",tt).replace("tag",qe).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Ft=R(Ye).replace("hr",Ee).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe).getRegex(),mo=R(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Ft).getRegex(),nt={blockquote:mo,code:ao,def:po,fences:uo,heading:co,hr:Ee,html:go,lheading:Ht,list:fo,newline:ro,paragraph:Ft,table:xe,text:ho},ht=R("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ee).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe).getRegex(),_o={...nt,table:ht,paragraph:R(Ye).replace("hr",Ee).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ht).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe).getRegex()},bo={...nt,html:R(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",tt).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:xe,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:R(Ye).replace("hr",Ee).replace("heading",` *#{1,6} *[^ ]`).replace("lheading",Ht).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},vo=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,yo=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Nt=/^( {2,}|\\)\n(?!\s*$)/,wo=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Gt=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Lo=R(Gt,"u").replace(/punct/g,He).getRegex(),Oo=R(Gt,"u").replace(/punct/g,jt).getRegex(),Ut="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",$o=R(Ut,"gu").replace(/notPunctSpace/g,Wt).replace(/punctSpace/g,st).replace(/punct/g,He).getRegex(),Do=R(Ut,"gu").replace(/notPunctSpace/g,So).replace(/punctSpace/g,ko).replace(/punct/g,jt).getRegex(),Ao=R("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Wt).replace(/punctSpace/g,st).replace(/punct/g,He).getRegex(),Ro=R(/\\(punct)/,"gu").replace(/punct/g,He).getRegex(),To=R(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Po=R(tt).replace("(?:-->|$)","-->").getRegex(),Vo=R("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Po).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ve=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Co=R(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Ve).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Kt=R(/^!?\[(label)\]\[(ref)\]/).replace("label",Ve).replace("ref",et).getRegex(),Zt=R(/^!?\[(ref)\](?:\[\])?/).replace("ref",et).getRegex(),Io=R("reflink|nolink(?!\\()","g").replace("reflink",Kt).replace("nolink",Zt).getRegex(),ot={_backpedal:xe,anyPunctuation:Ro,autolink:To,blockSkip:Eo,br:Nt,code:yo,del:xe,emStrongLDelim:Lo,emStrongRDelimAst:$o,emStrongRDelimUnd:Ao,escape:vo,link:Co,nolink:Zt,punctuation:xo,reflink:Kt,reflinkSearch:Io,tag:Vo,text:wo,url:xe},Mo={...ot,link:R(/^!?\[(label)\]\((.*?)\)/).replace("label",Ve).getRegex(),reflink:R(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ve).getRegex()},Ue={...ot,emStrongRDelimAst:Do,emStrongLDelim:Oo,url:R(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},pt=e=>zo[e];function ee(e,t){if(t){if(H.escapeTest.test(e))return e.replace(H.escapeReplace,pt)}else if(H.escapeTestNoEncode.test(e))return e.replace(H.escapeReplaceNoEncode,pt);return e}function ft(e){try{e=encodeURI(e).replace(H.percentDecode,"%")}catch{return null}return e}function gt(e,t){var o;const n=e.replace(H.findPipe,(l,r,a)=>{let u=!1,c=r;for(;--c>=0&&a[c]==="\\";)u=!u;return u?"|":" |"}),s=n.split(H.splitPipe);let i=0;if(s[0].trim()||s.shift(),s.length>0&&!((o=s.at(-1))!=null&&o.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length `}tablecell(t){const n=this.parser.parseInline(t.tokens),s=t.header?"th":"td";return(t.align?`<${s} align="${t.align}">`:`<${s}>`)+n+` `}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${ee(t,!0)}`}br(t){return"
"}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:n,tokens:s}){const i=this.parser.parseInline(s),o=ft(t);if(o===null)return i;t=o;let l='
",l}image({href:t,title:n,text:s}){const i=ft(t);if(i===null)return ee(s);t=i;let o=`${s}{const u=r[a].flat(1/0);s=s.concat(this.walkTokens(u,n))}):r.tokens&&(s=s.concat(this.walkTokens(r.tokens,n)))}}return s}use(...t){const n=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(s=>{const i={...s};if(i.async=this.defaults.async||i.async||!1,s.extensions&&(s.extensions.forEach(o=>{if(!o.name)throw new Error("extension name required");if("renderer"in o){const l=n.renderers[o.name];l?n.renderers[o.name]=function(...r){let a=o.renderer.apply(this,r);return a===!1&&(a=l.apply(this,r)),a}:n.renderers[o.name]=o.renderer}if("tokenizer"in o){if(!o.level||o.level!=="block"&&o.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const l=n[o.level];l?l.unshift(o.tokenizer):n[o.level]=[o.tokenizer],o.start&&(o.level==="block"?n.startBlock?n.startBlock.push(o.start):n.startBlock=[o.start]:o.level==="inline"&&(n.startInline?n.startInline.push(o.start):n.startInline=[o.start]))}"childTokens"in o&&o.childTokens&&(n.childTokens[o.name]=o.childTokens)}),i.extensions=n),s.renderer){const o=this.defaults.renderer||new Ie(this.defaults);for(const l in s.renderer){if(!(l in o))throw new Error(`renderer '${l}' does not exist`);if(["options","parser"].includes(l))continue;const r=l,a=s.renderer[r],u=o[r];o[r]=(...c)=>{let p=a.apply(o,c);return p===!1&&(p=u.apply(o,c)),p||""}}i.renderer=o}if(s.tokenizer){const o=this.defaults.tokenizer||new Ce(this.defaults);for(const l in s.tokenizer){if(!(l in o))throw new Error(`tokenizer '${l}' does not exist`);if(["options","rules","lexer"].includes(l))continue;const r=l,a=s.tokenizer[r],u=o[r];o[r]=(...c)=>{let p=a.apply(o,c);return p===!1&&(p=u.apply(o,c)),p}}i.tokenizer=o}if(s.hooks){const o=this.defaults.hooks||new ke;for(const l in s.hooks){if(!(l in o))throw new Error(`hook '${l}' does not exist`);if(["options","block"].includes(l))continue;const r=l,a=s.hooks[r],u=o[r];ke.passThroughHooks.has(l)?o[r]=c=>{if(this.defaults.async)return Promise.resolve(a.call(o,c)).then(_=>u.call(o,_));const p=a.call(o,c);return u.call(o,p)}:o[r]=(...c)=>{let p=a.apply(o,c);return p===!1&&(p=u.apply(o,c)),p}}i.hooks=o}if(s.walkTokens){const o=this.defaults.walkTokens,l=s.walkTokens;i.walkTokens=function(r){let a=[];return a.push(l.call(this,r)),o&&(a=a.concat(o.call(this,r))),a}}this.defaults={...this.defaults,...i}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,n){return U.lex(t,n??this.defaults)}parser(t,n){return K.parse(t,n??this.defaults)}parseMarkdown(t){return(s,i)=>{const o={...i},l={...this.defaults,...o},r=this.onError(!!l.silent,!!l.async);if(this.defaults.async===!0&&o.async===!1)return r(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof s>"u"||s===null)return r(new Error("marked(): input parameter is undefined or null"));if(typeof s!="string")return r(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(s)+", string expected"));l.hooks&&(l.hooks.options=l,l.hooks.block=t);const a=l.hooks?l.hooks.provideLexer():t?U.lex:U.lexInline,u=l.hooks?l.hooks.provideParser():t?K.parse:K.parseInline;if(l.async)return Promise.resolve(l.hooks?l.hooks.preprocess(s):s).then(c=>a(c,l)).then(c=>l.hooks?l.hooks.processAllTokens(c):c).then(c=>l.walkTokens?Promise.all(this.walkTokens(c,l.walkTokens)).then(()=>c):c).then(c=>u(c,l)).then(c=>l.hooks?l.hooks.postprocess(c):c).catch(r);try{l.hooks&&(s=l.hooks.preprocess(s));let c=a(s,l);l.hooks&&(c=l.hooks.processAllTokens(c)),l.walkTokens&&this.walkTokens(c,l.walkTokens);let p=u(c,l);return l.hooks&&(p=l.hooks.postprocess(p)),p}catch(c){return r(c)}}}onError(t,n){return s=>{if(s.message+=` -Please report this to https://github.com/markedjs/marked.`,t){const i="

An error occurred:

"+ee(s.message+"",!0)+"
";return n?Promise.resolve(i):i}if(n)return Promise.reject(s);throw s}}}const ue=new Fo;function A(e,t){return ue.parse(e,t)}A.options=A.setOptions=function(e){return ue.setOptions(e),A.defaults=ue.defaults,zt(A.defaults),A};A.getDefaults=Je;A.defaults=de;A.use=function(...e){return ue.use(...e),A.defaults=ue.defaults,zt(A.defaults),A};A.walkTokens=function(e,t){return ue.walkTokens(e,t)};A.parseInline=ue.parseInline;A.Parser=K;A.parser=K.parse;A.Renderer=Ie;A.TextRenderer=it;A.Lexer=U;A.lexer=U.lex;A.Tokenizer=Ce;A.Hooks=ke;A.parse=A;A.options;A.setOptions;A.use;A.walkTokens;A.parseInline;K.parse;U.lex;const No={key:0,class:"drawer-main__search-results"},Wo=["onClick"],jo=["innerHTML"],Go=["innerHTML"],Uo=["innerHTML"],Ko={key:1},Zo={key:0,class:"no_results"},Qo={__name:"DrawerSearchResult",props:{data:{type:[Array,Object],required:!0},modelValue:{type:String,required:!0}},setup(e){const t=new A.Renderer;t.heading=function(m){return typeof m!="string"?"":`${m}`},t.image=function(){return""},t.table=function(){return""};const n=m=>{let f=A(m,{renderer:t});return f=f.replace(/
/g,""),f},s=e,{MAX_VISIBLE_RESULT:i}=q("themeConfig"),o=P(!1),l=m=>{const f=new URL(window.location.href);if(f.pathname+f.hash===m){window.location.reload();return}window.location.href=f.origin+m},r=m=>{const f=new URL(m);return f.pathname+f.hash},a=D(()=>{var m;return o.value?s.data:(m=s.data)==null?void 0:m.slice(0,i)}),u=D(()=>s.data.length-a.value.length),c=()=>{o.value=!0},p=m=>m.split("->").map(y=>y.trim()).pop(),_=m=>{let f=m.split("->").map(y=>y.trim());return f.pop(),f.join(" > ")},g=(m,f)=>{if(!f.trim())return m;const y=new RegExp(`(${f.split(/\s+/).join("|")})`,"gi");return m.replace(y,"$1")};return(m,f)=>e.data.length?(d(),b("section",No,[(d(!0),b(W,null,j(a.value,(y,V)=>(d(),b("div",{key:y.objectID||V,class:"search-result",onClick:O=>l(r(y.url))},[v("div",{class:"search-result__title",innerHTML:g(p(y.title),e.modelValue)},null,8,jo),v("div",{class:"search-result__breadcrumb",innerHTML:g(_(y.title),e.modelValue)},null,8,Go),v("div",{class:"search-result__text",innerHTML:g(n(y.preview),e.modelValue)},null,8,Uo)],8,Wo))),128)),u.value>0?(d(),b("div",{key:0,class:"show-more",onClick:c},[v("p",null,"Show "+I(u.value)+" more results",1)])):S("v-if",!0)])):(d(),b("div",Ko,[e.modelValue.length?S("v-if",!0):(d(),b("p",Zo,"Please type your search query, then press Enter or click the search button."))]))}},Xo=B(Qo,[["__file","DrawerSearchResult.vue"]]);const Jo={class:"drawer-header"},Yo={class:"drawer-cross"},ei=["src"],ti={class:"drawer-main"},ni={class:"drawer-main__wrapper"},si={__name:"Drawer",props:{isOpenDrawer:{type:Boolean,required:!0,default:!1},isMobileWidth:{type:Boolean,required:!0,default:!1},modelValue:{type:String,required:!0,default:""},homeLayoutSearchResult:{type:Array,required:!0,default:()=>[]}},emits:["closeDrawer","update:modelValue"],setup(e,{emit:t}){const n=e,s=t,i=D(()=>n.homeLayoutSearchResult),o=()=>{s("closeDrawer")};return _e(()=>n.isOpenDrawer,()=>{document.body.classList.toggle("disable-scroll",n.isOpenDrawer)}),(l,r)=>(d(),b("div",null,[v("div",{class:Z(["drawer",{"is-open":e.isOpenDrawer}])},[v("div",Jo,[r[0]||(r[0]=v("div",{class:"drawer-header__wrapper"},[v("h2",{class:"drawer-header__paragraph"},"How can we help you?"),v("div",{id:"drawerSearch"})],-1)),v("div",Yo,[v("img",{onClick:o,class:"drawer-cross__img",src:k(G)("/global/cross.svg"),alt:"cross"},null,8,ei),v("p",{onClick:o,class:"drawer-cross__text"},"close")])]),v("main",null,[v("div",ti,[v("div",ni,[r[1]||(r[1]=v("div",{class:"drawer-main__breadcrumb"},[S(" Optional breadcrumb can stay here ")],-1)),x(Xo,{modelValue:e.modelValue,data:i.value},null,8,["modelValue","data"])])]),e.isOpenDrawer&&e.isMobileWidth?(d(),L(Re,{key:0,class:"drawer-footer__mobile"})):S("v-if",!0)])],2),e.isOpenDrawer&&!e.isMobileWidth?(d(),L(Re,{key:0,class:"drawer-footer"})):S("v-if",!0)]))}},oi=B(si,[["__file","Drawer.vue"]]);const ii=["value","placeholder"],li=["src"],ri={key:1,class:"spinner"},ai={__name:"DrawerSearch",props:{options:{type:[Object,Array],required:!0},modelValue:{type:String,required:!0},isOpenDrawer:{type:Boolean,required:!0},isMobileWidth:{type:Boolean}},emits:["openDrawer","update:modelValue","result"],setup(e,{emit:t}){const{MAX_HITS_PER_PAGE:n}=q("themeConfig"),{headerDefaultSearchIcon:s,headerSearchIcon:i,headerSearchPlaceholder:o}=q("themeConfig"),l=e,r=t,a=Se(),u=D(()=>a.value.layout==="HomeLayout"),c=D(()=>l.isOpenDrawer?"drawer-header__search":u.value?"header-layout__search":"header-layout__search-default"),p=D(()=>l.isOpenDrawer?"drawer-header__search-icon":u.value?"header-layout__search-icon":"header-layout__search-icon-default"),_=D(()=>u.value||l.isOpenDrawer?i:s),g=D(()=>l.isOpenDrawer?"Search":u.value?o:"Search"),m=D(()=>l.isMobileWidth?"Search accross all CloudLinux Docs":g.value);function f(C){return C.cloudlinux_docs.map(E=>{var Le,lt;const M=E.title.split("->").map(Yt=>Yt.trim()),F={lvl0:M[0]||null,lvl1:M[1]||null,lvl2:M[2]||null,lvl3:M[3]||null,lvl4:M[4]||null,lvl5:null,lvl6:null},ie=E.url.split("#")[1]||"",N=E.id;return{anchor:ie,content:null,hierarchy:F,url:E.url,title:E.title,preview:E.preview,category:E.category,section:E.section,objectID:N,_highlightResult:{hierarchy:{lvl0:{value:F.lvl0||"",matchLevel:"none",matchedWords:[]},lvl1:{value:F.lvl1||"",matchLevel:"full",fullyHighlighted:!1,matchedWords:[(Le=F.lvl1)==null?void 0:Le.toLowerCase()]}},hierarchy_camel:[{lvl0:{value:F.lvl0||"",matchLevel:"none",matchedWords:[]},lvl1:{value:`${F.lvl1||""}`,matchLevel:"full",fullyHighlighted:!1,matchedWords:[(lt=F.lvl1)==null?void 0:lt.toLowerCase()]}}]}}})}async function y(C,E=10){const M="https://global-search.cl-edu.com/search";let F=encodeURIComponent(C),ie=`${M}?query=${F}&collections=cloudlinux_docs&n_results=${E}&source=cloudlinux_docs`;try{const N=await fetch(ie);if(!N.ok)throw new Error(`HTTP error! status: ${N.status}`);return await N.json()}catch(N){return console.error("Error querying global search:",N),null}}const V=P(!1),O=async()=>{V.value=!0;const C=await y(l.modelValue,n);if(V.value=!1,C){const E=f(C);r("result",E),r("openDrawer")}};return _e(()=>l.options,async C=>{},{immediate:!0}),(C,E)=>(d(),b("form",{id:"search-form",class:"drawer-header__input",onSubmit:z(O,["prevent"])},[v("input",{type:"text",value:e.modelValue,onInput:E[0]||(E[0]=M=>C.$emit("update:modelValue",M.target.value)),id:"algolia-search-input",placeholder:m.value,class:Z(c.value),maxlength:"100"},null,42,ii),v("div",{class:Z(p.value)},[V.value?S("v-if",!0):(d(),b("img",{key:0,onClick:O,alt:"search icon",src:k(G)(_.value)},null,8,li)),V.value?(d(),b("div",ri)):S("v-if",!0)],2)],32))}},_t=B(ai,[["__file","DrawerSearch.vue"]]);const ui={class:"header-layout__search-container"},ci={key:0,class:"header-layout__search-title"},di={__name:"HeaderLayoutSearch",props:{isMobileWidth:{type:Boolean,default:!1},closeSidebarDrawer:{type:Function}},setup(e,{expose:t}){const n=e,{headerSearch:s,algoliaOptions:i}=q("themeConfig"),o=Se(),l=P(!1),r=P(!1),a=P(""),u=P([]);_e(()=>a.value,()=>{a.value||(u.value=[])});const c=m=>{u.value=m},p=D(()=>o.value.layout==="HomeLayout"),_=()=>{l.value=!0,r.value=!0,n.closeSidebarDrawer&&n.closeSidebarDrawer()},g=()=>{u.value.length=0,a.value="",l.value=!1,r.value=!1};return t({openDrawer:_,closeDrawer:g,mobileDrawerVisible:r}),(m,f)=>(d(),b("div",ui,[p.value?(d(),b("h1",ci,I(k(s)),1)):S("v-if",!0),l.value?(d(),L(xt,{key:1,to:"#drawerSearch"},[x(_t,{options:k(i),modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=y=>a.value=y),isMobileWidth:e.isMobileWidth,onOpenDrawer:_,isOpenDrawer:l.value,onResult:c},null,8,["options","modelValue","isMobileWidth","isOpenDrawer"])])):(d(),L(_t,{key:2,isMobileWidth:e.isMobileWidth,options:k(i),modelValue:a.value,"onUpdate:modelValue":f[1]||(f[1]=y=>a.value=y),onOpenDrawer:_,isOpenDrawer:l.value,onResult:c},null,8,["isMobileWidth","options","modelValue","isOpenDrawer"])),x(oi,{homeLayoutSearchResult:u.value,modelValue:a.value,"onUpdate:modelValue":f[2]||(f[2]=y=>a.value=y),onCloseDrawer:g,isOpenDrawer:l.value,isMobileWidth:e.isMobileWidth},null,8,["homeLayoutSearchResult","modelValue","isOpenDrawer","isMobileWidth"])]))}},bt=B(di,[["__file","HeaderLayoutSearch.vue"]]);const hi={class:"header-products-wrapper"},pi={key:0,class:"dropdown-wrapper"},fi=["href"],gi={key:1,class:"dropdown-wrapper"},mi=["href"],_i=["src"],bi={class:"header-products-wrapper-paragraph"},vi=["src"],yi={__name:"HeaderProducts",props:{isMobileWidth:{type:Boolean}},setup(e){const{productsTitle:t,arrowDownIcon:n,productsList:s,productsURLs:i}=q("themeConfig"),o=P(!1),l=P(null),r=a=>{!a.composedPath().includes(l.value)&&(o.value=!1)};return oe(()=>{document.addEventListener("click",r)}),be(()=>{document.removeEventListener("click",r)}),(a,u)=>(d(),b("div",hi,[v("div",{ref_key:"menu",ref:l,class:"dropdown"},[e.isMobileWidth?(d(),L(xt,{key:0,to:"body"},[o.value?(d(),b("div",pi,[(d(!0),b(W,null,j(k(s),(c,p)=>(d(),b("p",{class:"dropdown-content__paragraph",key:c},[v("a",{class:"dropdown-content__link",href:k(i)[p]},I(c),9,fi)]))),128))])):S("v-if",!0)])):S("v-if",!0),o.value&&!e.isMobileWidth?(d(),b("div",gi,[(d(!0),b(W,null,j(k(s),(c,p)=>(d(),b("p",{class:"dropdown-content__paragraph",key:c},[v("a",{class:"dropdown-content__link",href:k(i)[p]},I(c),9,mi)]))),128))])):S("v-if",!0),v("div",{onClick:u[0]||(u[0]=c=>o.value=!o.value),class:"header-products-container"},[v("img",{class:"header-products-container__img",alt:"hamburger menu",src:k(G)("/global/hamburger-menu.svg")},null,8,_i),v("p",bi,I(k(t)),1),v("img",{class:Z(["products-icon__default",{"products-icon__rotate":o.value}]),width:"10",height:"8",src:k(G)(k(n)),alt:"arrow down icon"},null,10,vi)])],512)]))}},wi=B(yi,[["__file","HeaderProducts.vue"]]);const xi={class:"navbar-header"},ki={class:"navbar-header__logo-wrapper"},Si=["src"],Ei=["src"],Li=["href","onClick"],Oi={__name:"HeaderLayout",props:{isMobileWidth:{type:Boolean},closeSidebarDrawer:{type:Function}},setup(e){const{siteLogo:t,defaultURL:n,locales:s,headerDefaultSearchIcon:i}=q("themeConfig"),o=P(null),l=Se(),r=Tt(),a=P(null),u=()=>{var g;return(g=a==null?void 0:a.value)==null?void 0:g.openDrawer()},c=D(()=>l.value.layout==="HomeLayout"),p=D(()=>(r.value+n).replace(/\/+/g,"/")),_=g=>{if(g.type)switch(g.type){case"event":var g=new CustomEvent(g.name);document.dispatchEvent(g)}};return(g,m)=>{var y;const f=ge("router-link");return d(),b("header",{class:Z(["navbar",{fixed:!c.value}])},[v("div",xi,[v("div",ki,[x(f,{to:p.value,class:"home-link"},{default:Q(()=>[k(t)?(d(),b("img",{key:0,class:"logo",src:k(G)(k(t)),alt:"logo header"},null,8,Si)):S("v-if",!0)]),_:1},8,["to"]),c.value?S("v-if",!0):(d(),L(bt,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:a,class:Z({"header-mobile__hidden":!((y=a.value)!=null&&y.mobileDrawerVisible)}),isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","class","isMobileWidth"]))]),v("div",{class:"links",style:pn({"max-width":o.value+"px"})},[v("img",{onClick:u,class:"navbar-header__mobile-search",src:k(G)(k(i)),alt:"icon image"},null,8,Ei),x(wi,{isMobileWidth:e.isMobileWidth},null,8,["isMobileWidth"]),(d(!0),b(W,null,j(k(s).navbarLinks,V=>(d(),b("a",{href:V.url,target:"_blank",class:Z(V.class),onClick:O=>_(V.event)},I(V.text),11,Li))),256))],4)]),c.value?(d(),L(bt,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:a,isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","isMobileWidth"])):S("v-if",!0)],2)}}},Qt=B(Oi,[["__file","HeaderLayout.vue"]]);const $i={class:"back-to-top"},Di={__name:"BackToTop",props:{boundary:{type:Number,default:200}},setup(e){const t=e,n=P(!1),s=()=>{window&&(n.value=window.pageYOffset>t.boundary)},i=()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0};return oe(()=>{window&&(s(),window.addEventListener("scroll",s))}),be(()=>{window&&window.removeEventListener("scroll",s)}),(o,l)=>(d(),b("div",$i,[v("a",{class:Z([{active:n.value},"nav-arrow top back-to-top__link"]),onClick:i},l[0]||(l[0]=[v("span",{class:"back-to-top__link-span"},"Scroll up",-1)]),2)]))}},Ai=B(Di,[["__scopeId","data-v-1eb13e00"],["__file","BackToTop.vue"]]);const Ri={class:"breadcrumb-wrapper"},Ti={class:"breadcrumb-title"},Pi={__name:"Breadcrumb",setup(e){const t=ce(),{locales:{siteTitle:n}}=q("themeConfig"),s=D(()=>{const i=[];return t.value.path!=="/"&&i.push({path:t.value.path,title:t.value.title}),i});return(i,o)=>{const l=ge("router-link");return d(),b("div",Ri,[v("span",Ti,I(k(n))+":",1),(d(!0),b(W,null,j(s.value,r=>(d(),L(l,{class:"breadcrumb",key:r.path,to:r.path},{default:Q(()=>[se(I(r.title),1)]),_:2},1032,["to"]))),128))])}}},Vi=B(Pi,[["__scopeId","data-v-9445381a"],["__file","Breadcrumb.vue"]]);const Ci={key:0,class:"page-nav"},Ii={__name:"PageNav",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array}},setup(e){const t=e,n=Tt(),s=ce(),i=D(()=>{const u=s.value.frontmatter.prev;return u===!1?null:u?Pe(t.allPages,u,n):l(s.value,t.sidebarItems)}),o=D(()=>{const u=s.value.frontmatter.next;return u===!1?null:u?Pe(t.allPages,u,n):r(s.value,t.sidebarItems)}),l=(u,c)=>a(u,c,-1),r=(u,c)=>a(u,c,1),a=(u,c,p)=>{const _=[];c.forEach(g=>{g.type==="group"?_.push(...g.children||[]):_.push(g)});for(let g=0;g<_.length;g++){const m=_[g];if((m==null?void 0:m.type)==="page"&&m.path===u.path)return _[g+p]}};return(u,c)=>{const p=ge("router-link");return i.value||o.value?(d(),b("div",Ci,[i.value?(d(),L(p,{key:0,class:"nav-arrow left",to:i.value.path},null,8,["to"])):S("v-if",!0),o.value?(d(),L(p,{key:1,class:"nav-arrow right",to:o.value.path},null,8,["to"])):S("v-if",!0)])):S("v-if",!0)}}},Mi=B(Ii,[["__file","PageNav.vue"]]);const Bi={class:"page"},zi=["src"],qi={class:"page-nav-wrapper"},Hi={key:0,class:"page-edit"},Fi={class:"edit-link"},Ni=["src"],Wi=["href"],ji={__name:"Page",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array,default:()=>[]},isMobileWidth:{type:Boolean}},setup(e,{expose:t}){const{githubEditIcon:n,githubRepository:s,allowGithubEdit:i,githubMainDir:o="",githubBranch:l="master",docsRepo:r=s,editLinkText:a}=q("themeConfig"),u=e,c=ce();Dt();const p=Se(),_=P(u.isMobileWidth),g=()=>_.value=!0,m=()=>_.value=!1,f=D(()=>{if(p.value.editLink===!1)return;let O=me(c.value.path);if(pe.test(O)?O+="README.md":O+=".md",r&&i)return V(s,r,o,l,O)}),y=D(()=>a||"Edit this page"),V=(O,C,E,M,F)=>/bitbucket.org/.test(O)?(je.test(C)?C:O).replace(pe,"")+`/${M}`+(E?"/"+E.replace(pe,""):"")+F+`?mode=edit&spa=0&at=${M}&fileviewer=file-view-default`:(je.test(C)?C:`https://github.com/${C}`).replace(pe,"")+`/tree/${M}`+(E?"/"+E.replace(pe,""):"")+F;return t({isOpenMobileSidebarMenu:_,closeSidebarDrawer:m}),(O,C)=>{const E=ge("Content");return d(),b("div",Bi,[$(O.$slots,"top"),x(Vi,{class:"page-breadcrumb"}),v("img",{onClick:g,class:"page-mobile__sidebar-menu",src:k(G)("/global/sidebar-menu.svg"),alt:"sidebar hamburger menu"},null,8,zi),v("div",qi,[x(Mi,{"sidebar-items":e.sidebarItems,allPages:e.allPages},null,8,["sidebar-items","allPages"])]),x(E,{class:"content",custom:!1}),k(i)?(d(),b("div",Hi,[v("div",Fi,[v("img",{src:k(G)(k(n)),alt:"icon pen"},null,8,Ni),v("a",{href:f.value,target:"_blank",rel:"noopener noreferrer"},I(y.value),9,Wi)])])):S("v-if",!0),x(Ai),$(O.$slots,"bottom")])}}},Gi=B(ji,[["__file","Page.vue"]]);const Ui={class:"theme-container"},Ki={key:0,class:"sidebar-header"},Zi={__name:"Layout",setup(e){const{documents:t,MOBILE_BREAKPOINT:n}=q("themeConfig"),s=P(null),i=P(null),o=ze(),l=Be(),r=ce(),a=P([]),u=P(!1),c=D(()=>r.value&&a.value.length?Vt(r.value,l,a.value):[]),p=m=>o.push(m.link),_=()=>{var y;const m=(y=r.value)==null?void 0:y.path,f=m.indexOf("/",m.indexOf("/")+1);return m.substr(0,f)},g=()=>{u.value=window.innerWidth<=n};return oe(()=>{Object.values(Ke).map(m=>m().then(f=>{a.value.push(f)})),i.value=t.find(m=>{var f;return(f=m.link)==null?void 0:f.startsWith(_())}),window.addEventListener("resize",g),u.value=window.innerWidth<=n}),be(()=>{window.removeEventListener("resize",g)}),(m,f)=>{var y,V,O,C,E;return d(),b("div",Ui,[x(Qt,{closeSidebarDrawer:(y=s.value)==null?void 0:y.closeSidebarDrawer,isMobileWidth:u.value},null,8,["closeSidebarDrawer","isMobileWidth"]),a.value.length&&!((V=s.value)!=null&&V.isOpenMobileSidebarMenu)&&!u.value?(d(),L(Mt,{key:0,items:a.value,closeSidebarDrawer:(O=s.value)==null?void 0:O.closeSidebarDrawer},{top:Q(()=>[k(t)?(d(),b("div",Ki,[f[2]||(f[2]=v("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1)),x(Bt,{"with-icon":"",modelValue:i.value,"onUpdate:modelValue":f[0]||(f[0]=M=>i.value=M),onChangeSidebarItems:p,options:k(t)},null,8,["modelValue","options"])])):S("v-if",!0)]),_:1},8,["items","closeSidebarDrawer"])):S("v-if",!0),x(Gi,{ref_key:"pageRef",ref:s,sidebarItems:c.value,allPages:a.value,isMobileWidth:u.value},null,8,["sidebarItems","allPages","isMobileWidth"]),a.value.length&&((C=s.value)!=null&&C.isOpenMobileSidebarMenu)&&u.value?(d(),L(lo,{key:1,onChangeSidebarItems:p,"all-pages":a.value,documents:k(t),modelValue:i.value,"onUpdate:modelValue":f[1]||(f[1]=M=>i.value=M),closeSidebarDrawer:(E=s.value)==null?void 0:E.closeSidebarDrawer,isMobileWidth:u.value},null,8,["all-pages","documents","modelValue","closeSidebarDrawer","isMobileWidth"])):S("v-if",!0),x(Re)])}}},Qi=B(Zi,[["__file","Layout.vue"]]);const Xi={class:"docs-card-container"},Ji={class:"docs-card-container__header"},Yi=["src"],el={key:0,class:"docs-card-container__header-paragraph"},tl={class:"docs-card-container__main"},nl={key:0,class:"docs-card-container__main-paragraph"},sl={class:"docs-card-container__footer"},ol={__name:"DocsCard",props:{card:{type:Object,default:null}},setup(e){const t=e,n=ze(),s=()=>{var i;return n.push((i=t.card)==null?void 0:i.link)};return(i,o)=>(d(),b("div",Xi,[v("div",Ji,[v("img",{width:"20",height:"20",src:k(G)("collections-bookmark.svg"),alt:"document icon"},null,8,Yi),e.card.title?(d(),b("p",el,I(e.card.title),1)):S("v-if",!0)]),v("div",tl,[e.card.description?(d(),b("p",nl,I(e.card.description),1)):S("v-if",!0)]),v("div",sl,[v("button",{onClick:o[0]||(o[0]=l=>s()),class:"docs-card-container__footer-btn"},"View Documentation")])]))}},il=B(ol,[["__file","DocsCard.vue"]]);const ll={class:"docs-cards-wrapper"},rl={__name:"DocsCardsWrapper",setup(e){const{documents:t}=q("themeConfig");return(n,s)=>(d(),b("div",ll,[(d(!0),b(W,null,j(k(t),(i,o)=>(d(),L(il,{key:o,card:i},null,8,["card"]))),128))]))}},al=B(rl,[["__file","DocsCardsWrapper.vue"]]),ul={class:"theme-container"},cl={__name:"HomeLayout",setup(e){const{MOBILE_BREAKPOINT:t}=q("themeConfig"),n=P(!1),s=()=>n.value=window.innerWidth<=t;return oe(()=>{window.addEventListener("resize",s),n.value=window.innerWidth<=t}),be(()=>window.removeEventListener("resize",s)),(i,o)=>(d(),b("div",ul,[x(Qt,{isMobileWidth:n.value},null,8,["isMobileWidth"]),x(al),x(Re)]))}},dl=B(cl,[["__file","HomeLayout.vue"]]);const hl={class:"custom-container"},pl=["src"],fl={__name:"NotFound",setup(e){const t=Be(),n=ze(),s=P(!1),i=P(""),o=(l,r)=>{var u;let a=!1;if(!a&&((u=l.children)==null?void 0:u.length)>0)for(let c of l.children){const p=r+"/"+c.link;if(p.search(t.path)!==-1){n.push(p),a=!0;return}l.children.length>0&&o(c,r)}};return oe(async()=>{var r;const l=Object==null?void 0:Object.values(Ke);for(let a of l){const u=await a();let c=u.path;if(c.at(-1)==="/"&&(c=c.slice(0,-1)),((r=u.headers)==null?void 0:r.length)>0)for(let p of u.headers){const _=c+"/"+p.link;if(_.search(t.path)!==-1){n.push(_);return}o(p,c)}}if(t.fullPath.startsWith("/legacy")){const a=t.fullPath.replace("/legacy","/cloudlinuxos");window.location.href=a}else if(t.fullPath.startsWith("/shared")){const a=t.fullPath.replace("/shared","/cloudlinuxos");n.push(a),window.location.href=a}else n.push("/not-found.html"),window.location.href="/not-found.html"}),(l,r)=>(d(),b("div",hl,[s.value?(d(),b("iframe",{key:0,src:i.value,style:{width:"100%",height:"100vh",border:"none"}},null,8,pl)):S("v-if",!0)]))}},gl=B(fl,[["__file","NotFound.vue"]]),ml=[{text:"Knowledge base",url:"https://cloudlinux.zendesk.com/hc/en-us/categories/360002375940"},{text:"Forum",url:"https://forum.cloudlinux.com/"},{text:"Blog",url:"https://blog.cloudlinux.com/"},{text:"Privacy Policy",url:"https://www.cloudlinux.com/privacy-policy/"}],_l=[{text:"Ask GPT?",event:{type:"event",name:"botui-open"},class:"btn"},{text:"Submit support request",url:"https://www.cloudlinux.com/support-portal/",class:"btn"},{text:"Try Free",url:"https://cloudlinux.com/trial",class:"btn btn-white"}],bl=[{title:"Introduction to Cloudlinux OS",description:"Introduction to CloudLinux OS editions and their description.",link:"/introduction/cloudlinux-os-editions/"},{title:"CloudLinux OS",description:"Optimizes shared hosting environments by enhancing stability, security, and performance through user isolation and efficient resource management. Featuring tools like LVE resource limits, CageFS, and multiple language selectors, it empowers hosting providers to offer superior services.",link:"/cloudlinuxos/cloudlinux_installation/"},{title:"AccelerateWP",description:"AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.",link:"/cloudlinuxos/shared-pro/#acceleratewp"},{title:"CLN - CloudLinux Licenses",description:"CLN is a CloudLinux Network designed to easily manage your licenses of CloudLinux products and services by means of a user-friendly interface.",link:"/cln/introduction/"},{title:"CloudLinux Subsystem For Ubuntu",description:"CloudLinux subsystem on Ubuntu is a scope of deb-packages that allows using CloudLinux features on Ubuntu OS.",link:"/ubuntu/introduction/"},{title:"End-user Documents",description:"Documentation section for end-users on Cloudlinux OS.",link:"/user-docs/user-docs-shared-pro-cloudlinux/"}],vl=[{url:"https://www.facebook.com/cloudlinux/",icon:"footer-social/fb.png"},{url:"https://twitter.com/cloudlinuxos/",icon:"footer-social/tw.png"},{url:"https://linkedin.com/company/cloudlinux",icon:"footer-social/in.png"},{url:"https://www.youtube.com/channel/UCZ3YMHWnMP7TaxlXVay5-aw",icon:"footer-social/ytube.png"}];function Fe(e){return e===0?!1:Array.isArray(e)&&e.length===0?!0:!e}function yl(e){return(...t)=>!e(...t)}function wl(e,t){return e===void 0&&(e="undefined"),e===null&&(e="null"),e===!1&&(e="false"),e.toString().toLowerCase().indexOf(t.trim())!==-1}function Xt(e,t,n,s){return t?e.filter(i=>wl(s(i,n),t)).sort((i,o)=>s(i,n).length-s(o,n).length):e}function xl(e){return e.filter(t=>!t.$isLabel)}function Ne(e,t){return n=>n.reduce((s,i)=>i[e]&&i[e].length?(s.push({$groupLabel:i[t],$isLabel:!0}),s.concat(i[e])):s,[])}function kl(e,t,n,s,i){return o=>o.map(l=>{if(!l[n])return console.warn("Options passed to vue-multiselect do not contain groups, despite the config."),[];const r=Xt(l[n],e,t,i);return r.length?{[s]:l[s],[n]:r}:[]})}const vt=(...e)=>t=>e.reduce((n,s)=>s(n),t);var Sl={data(){return{search:"",isOpen:!1,preferredOpenDirection:"below",optimizedHeight:this.maxHeight}},props:{internalSearch:{type:Boolean,default:!0},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},trackBy:{type:String},label:{type:String},searchable:{type:Boolean,default:!0},clearOnSelect:{type:Boolean,default:!0},hideSelected:{type:Boolean,default:!1},placeholder:{type:String,default:"Select option"},allowEmpty:{type:Boolean,default:!0},resetAfter:{type:Boolean,default:!1},closeOnSelect:{type:Boolean,default:!0},customLabel:{type:Function,default(e,t){return Fe(e)?"":t?e[t]:e}},taggable:{type:Boolean,default:!1},tagPlaceholder:{type:String,default:"Press enter to create a tag"},tagPosition:{type:String,default:"top"},max:{type:[Number,Boolean],default:!1},id:{default:null},optionsLimit:{type:Number,default:1e3},groupValues:{type:String},groupLabel:{type:String},groupSelect:{type:Boolean,default:!1},blockKeys:{type:Array,default(){return[]}},preserveSearch:{type:Boolean,default:!1},preselectFirst:{type:Boolean,default:!1},preventAutofocus:{type:Boolean,default:!1}},mounted(){!this.multiple&&this.max&&console.warn("[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false."),this.preselectFirst&&!this.internalValue.length&&this.options.length&&this.select(this.filteredOptions[0])},computed:{internalValue(){return this.modelValue||this.modelValue===0?Array.isArray(this.modelValue)?this.modelValue:[this.modelValue]:[]},filteredOptions(){const e=this.search||"",t=e.toLowerCase().trim();let n=this.options.concat();return this.internalSearch?n=this.groupValues?this.filterAndFlat(n,t,this.label):Xt(n,t,this.label,this.customLabel):n=this.groupValues?Ne(this.groupValues,this.groupLabel)(n):n,n=this.hideSelected?n.filter(yl(this.isSelected)):n,this.taggable&&t.length&&!this.isExistingOption(t)&&(this.tagPosition==="bottom"?n.push({isTag:!0,label:e}):n.unshift({isTag:!0,label:e})),n.slice(0,this.optionsLimit)},valueKeys(){return this.trackBy?this.internalValue.map(e=>e[this.trackBy]):this.internalValue},optionKeys(){return(this.groupValues?this.flatAndStrip(this.options):this.options).map(t=>this.customLabel(t,this.label).toString().toLowerCase())},currentOptionLabel(){return this.multiple?this.searchable?"":this.placeholder:this.internalValue.length?this.getOptionLabel(this.internalValue[0]):this.searchable?"":this.placeholder}},watch:{internalValue:{handler(){this.resetAfter&&this.internalValue.length&&(this.search="",this.$emit("update:modelValue",this.multiple?[]:null))},deep:!0},search(){this.$emit("search-change",this.search)}},emits:["open","search-change","close","select","update:modelValue","remove","tag"],methods:{getValue(){return this.multiple?this.internalValue:this.internalValue.length===0?null:this.internalValue[0]},filterAndFlat(e,t,n){return vt(kl(t,n,this.groupValues,this.groupLabel,this.customLabel),Ne(this.groupValues,this.groupLabel))(e)},flatAndStrip(e){return vt(Ne(this.groupValues,this.groupLabel),xl)(e)},updateSearch(e){this.search=e},isExistingOption(e){return this.options?this.optionKeys.indexOf(e)>-1:!1},isSelected(e){const t=this.trackBy?e[this.trackBy]:e;return this.valueKeys.indexOf(t)>-1},isOptionDisabled(e){return!!e.$isDisabled},getOptionLabel(e){if(Fe(e))return"";if(e.isTag)return e.label;if(e.$isLabel)return e.$groupLabel;const t=this.customLabel(e,this.label);return Fe(t)?"":t},select(e,t){if(e.$isLabel&&this.groupSelect){this.selectGroup(e);return}if(!(this.blockKeys.indexOf(t)!==-1||this.disabled||e.$isDisabled||e.$isLabel)&&!(this.max&&this.multiple&&this.internalValue.length===this.max)&&!(t==="Tab"&&!this.pointerDirty)){if(e.isTag)this.$emit("tag",e.label,this.id),this.search="",this.closeOnSelect&&!this.multiple&&this.deactivate();else{if(this.isSelected(e)){t!=="Tab"&&this.removeElement(e);return}this.multiple?this.$emit("update:modelValue",this.internalValue.concat([e])):this.$emit("update:modelValue",e),this.$emit("select",e,this.id),this.clearOnSelect&&(this.search="")}this.closeOnSelect&&this.deactivate()}},selectGroup(e){const t=this.options.find(n=>n[this.groupLabel]===e.$groupLabel);if(t){if(this.wholeGroupSelected(t)){this.$emit("remove",t[this.groupValues],this.id);const n=this.internalValue.filter(s=>t[this.groupValues].indexOf(s)===-1);this.$emit("update:modelValue",n)}else{let n=t[this.groupValues].filter(s=>!(this.isOptionDisabled(s)||this.isSelected(s)));this.max&&n.splice(this.max-this.internalValue.length),this.$emit("select",n,this.id),this.$emit("update:modelValue",this.internalValue.concat(n))}this.closeOnSelect&&this.deactivate()}},wholeGroupSelected(e){return e[this.groupValues].every(t=>this.isSelected(t)||this.isOptionDisabled(t))},wholeGroupDisabled(e){return e[this.groupValues].every(this.isOptionDisabled)},removeElement(e,t=!0){if(this.disabled||e.$isDisabled)return;if(!this.allowEmpty&&this.internalValue.length<=1){this.deactivate();return}const n=typeof e=="object"?this.valueKeys.indexOf(e[this.trackBy]):this.valueKeys.indexOf(e);if(this.multiple){const s=this.internalValue.slice(0,n).concat(this.internalValue.slice(n+1));this.$emit("update:modelValue",s)}else this.$emit("update:modelValue",null);this.$emit("remove",e,this.id),this.closeOnSelect&&t&&this.deactivate()},removeLastElement(){this.blockKeys.indexOf("Delete")===-1&&this.search.length===0&&Array.isArray(this.internalValue)&&this.internalValue.length&&this.removeElement(this.internalValue[this.internalValue.length-1],!1)},activate(){this.isOpen||this.disabled||(this.adjustPosition(),this.groupValues&&this.pointer===0&&this.filteredOptions.length&&(this.pointer=1),this.isOpen=!0,this.searchable?(this.preserveSearch||(this.search=""),this.preventAutofocus||this.$nextTick(()=>this.$refs.search&&this.$refs.search.focus())):this.preventAutofocus||typeof this.$el<"u"&&this.$el.focus(),this.$emit("open",this.id))},deactivate(){this.isOpen&&(this.isOpen=!1,this.searchable?typeof this.$refs.search<"u"&&this.$refs.search.blur():typeof this.$el<"u"&&this.$el.blur(),this.preserveSearch||(this.search=""),this.$emit("close",this.getValue(),this.id))},toggle(){this.isOpen?this.deactivate():this.activate()},adjustPosition(){if(typeof window>"u")return;const e=this.$el.getBoundingClientRect().top,t=window.innerHeight-this.$el.getBoundingClientRect().bottom;t>this.maxHeight||t>e||this.openDirection==="below"||this.openDirection==="bottom"?(this.preferredOpenDirection="below",this.optimizedHeight=Math.min(t-40,this.maxHeight)):(this.preferredOpenDirection="above",this.optimizedHeight=Math.min(e-40,this.maxHeight))}}},El={data(){return{pointer:0,pointerDirty:!1}},props:{showPointer:{type:Boolean,default:!0},optionHeight:{type:Number,default:40}},computed:{pointerPosition(){return this.pointer*this.optionHeight},visibleElements(){return this.optimizedHeight/this.optionHeight}},watch:{filteredOptions(){this.pointerAdjust()},isOpen(){this.pointerDirty=!1},pointer(){this.$refs.search&&this.$refs.search.setAttribute("aria-activedescendant",this.id+"-"+this.pointer.toString())}},methods:{optionHighlight(e,t){return{"multiselect__option--highlight":e===this.pointer&&this.showPointer,"multiselect__option--selected":this.isSelected(t)}},groupHighlight(e,t){if(!this.groupSelect)return["multiselect__option--disabled",{"multiselect__option--group":t.$isLabel}];const n=this.options.find(s=>s[this.groupLabel]===t.$groupLabel);return n&&!this.wholeGroupDisabled(n)?["multiselect__option--group",{"multiselect__option--highlight":e===this.pointer&&this.showPointer},{"multiselect__option--group-selected":this.wholeGroupSelected(n)}]:"multiselect__option--disabled"},addPointerElement({key:e}="Enter"){this.filteredOptions.length>0&&this.select(this.filteredOptions[this.pointer],e),this.pointerReset()},pointerForward(){this.pointer0?(this.pointer--,this.$refs.list.scrollTop>=this.pointerPosition&&(this.$refs.list.scrollTop=this.pointerPosition),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerBackward()):this.filteredOptions[this.pointer]&&this.filteredOptions[0].$isLabel&&!this.groupSelect&&this.pointerForward(),this.pointerDirty=!0},pointerReset(){this.closeOnSelect&&(this.pointer=0,this.$refs.list&&(this.$refs.list.scrollTop=0))},pointerAdjust(){this.pointer>=this.filteredOptions.length-1&&(this.pointer=this.filteredOptions.length?this.filteredOptions.length-1:0),this.filteredOptions.length>0&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()},pointerSet(e){this.pointer=e,this.pointerDirty=!0}}},Jt={name:"vue-multiselect",mixins:[Sl,El],compatConfig:{MODE:3,ATTR_ENUMERATED_COERCION:!1},props:{name:{type:String,default:""},modelValue:{type:null,default(){return[]}},selectLabel:{type:String,default:"Press enter to select"},selectGroupLabel:{type:String,default:"Press enter to select group"},selectedLabel:{type:String,default:"Selected"},deselectLabel:{type:String,default:"Press enter to remove"},deselectGroupLabel:{type:String,default:"Press enter to deselect group"},showLabels:{type:Boolean,default:!0},limit:{type:Number,default:99999},maxHeight:{type:Number,default:300},limitText:{type:Function,default:e=>`and ${e} more`},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},openDirection:{type:String,default:""},showNoOptions:{type:Boolean,default:!0},showNoResults:{type:Boolean,default:!0},tabindex:{type:Number,default:0}},computed:{hasOptionGroup(){return this.groupValues&&this.groupLabel&&this.groupSelect},isSingleLabelVisible(){return(this.singleValue||this.singleValue===0)&&(!this.isOpen||!this.searchable)&&!this.visibleValues.length},isPlaceholderVisible(){return!this.internalValue.length&&(!this.searchable||!this.isOpen)},visibleValues(){return this.multiple?this.internalValue.slice(0,this.limit):[]},singleValue(){return this.internalValue[0]},deselectLabelText(){return this.showLabels?this.deselectLabel:""},deselectGroupLabelText(){return this.showLabels?this.deselectGroupLabel:""},selectLabelText(){return this.showLabels?this.selectLabel:""},selectGroupLabelText(){return this.showLabels?this.selectGroupLabel:""},selectedLabelText(){return this.showLabels?this.selectedLabel:""},inputStyle(){return this.searchable||this.multiple&&this.modelValue&&this.modelValue.length?this.isOpen?{width:"100%"}:{width:"0",position:"absolute",padding:"0"}:""},contentStyle(){return this.options.length?{display:"inline-block"}:{display:"block"}},isAbove(){return this.openDirection==="above"||this.openDirection==="top"?!0:this.openDirection==="below"||this.openDirection==="bottom"?!1:this.preferredOpenDirection==="above"},showSearchInput(){return this.searchable&&(this.hasSingleSelectedSlot&&(this.visibleSingleValue||this.visibleSingleValue===0)?this.isOpen:!0)}}};const Ll={ref:"tags",class:"multiselect__tags"},Ol={class:"multiselect__tags-wrap"},$l={class:"multiselect__spinner"},Dl={key:0},Al={class:"multiselect__option"},Rl={class:"multiselect__option"},Tl=se("No elements found. Consider changing the search query."),Pl={class:"multiselect__option"},Vl=se("List is empty.");function Cl(e,t,n,s,i,o){return d(),L("div",{tabindex:e.searchable?-1:n.tabindex,class:[{"multiselect--active":e.isOpen,"multiselect--disabled":n.disabled,"multiselect--above":o.isAbove,"multiselect--has-options-group":o.hasOptionGroup},"multiselect"],onFocus:t[14]||(t[14]=l=>e.activate()),onBlur:t[15]||(t[15]=l=>e.searchable?!1:e.deactivate()),onKeydown:[t[16]||(t[16]=Y(z(l=>e.pointerForward(),["self","prevent"]),["down"])),t[17]||(t[17]=Y(z(l=>e.pointerBackward(),["self","prevent"]),["up"]))],onKeypress:t[18]||(t[18]=Y(z(l=>e.addPointerElement(l),["stop","self"]),["enter","tab"])),onKeyup:t[19]||(t[19]=Y(l=>e.deactivate(),["esc"])),role:"combobox","aria-owns":"listbox-"+e.id},[$(e.$slots,"caret",{toggle:e.toggle},()=>[x("div",{onMousedown:t[1]||(t[1]=z(l=>e.toggle(),["prevent","stop"])),class:"multiselect__select"},null,32)]),$(e.$slots,"clear",{search:e.search}),x("div",Ll,[$(e.$slots,"selection",{search:e.search,remove:e.removeElement,values:o.visibleValues,isOpen:e.isOpen},()=>[re(x("div",Ol,[(d(!0),L(W,null,j(o.visibleValues,(l,r)=>$(e.$slots,"tag",{option:l,search:e.search,remove:e.removeElement},()=>[(d(),L("span",{class:"multiselect__tag",key:r},[x("span",{textContent:I(e.getOptionLabel(l))},null,8,["textContent"]),x("i",{tabindex:"1",onKeypress:Y(z(a=>e.removeElement(l),["prevent"]),["enter"]),onMousedown:z(a=>e.removeElement(l),["prevent"]),class:"multiselect__tag-icon"},null,40,["onKeypress","onMousedown"])]))])),256))],512),[[ae,o.visibleValues.length>0]]),e.internalValue&&e.internalValue.length>n.limit?$(e.$slots,"limit",{key:0},()=>[x("strong",{class:"multiselect__strong",textContent:I(n.limitText(e.internalValue.length-n.limit))},null,8,["textContent"])]):S("v-if",!0)]),x(Ae,{name:"multiselect__loading"},{default:Q(()=>[$(e.$slots,"loading",{},()=>[re(x("div",$l,null,512),[[ae,n.loading]])])]),_:3}),e.searchable?(d(),L("input",{key:0,ref:"search",name:n.name,id:e.id,type:"text",autocomplete:"off",spellcheck:"false",placeholder:e.placeholder,style:o.inputStyle,value:e.search,disabled:n.disabled,tabindex:n.tabindex,onInput:t[2]||(t[2]=l=>e.updateSearch(l.target.value)),onFocus:t[3]||(t[3]=z(l=>e.activate(),["prevent"])),onBlur:t[4]||(t[4]=z(l=>e.deactivate(),["prevent"])),onKeyup:t[5]||(t[5]=Y(l=>e.deactivate(),["esc"])),onKeydown:[t[6]||(t[6]=Y(z(l=>e.pointerForward(),["prevent"]),["down"])),t[7]||(t[7]=Y(z(l=>e.pointerBackward(),["prevent"]),["up"])),t[9]||(t[9]=Y(z(l=>e.removeLastElement(),["stop"]),["delete"]))],onKeypress:t[8]||(t[8]=Y(z(l=>e.addPointerElement(l),["prevent","stop","self"]),["enter"])),class:"multiselect__input","aria-controls":"listbox-"+e.id},null,44,["name","id","placeholder","value","disabled","tabindex","aria-controls"])):S("v-if",!0),o.isSingleLabelVisible?(d(),L("span",{key:1,class:"multiselect__single",onMousedown:t[10]||(t[10]=z((...l)=>e.toggle&&e.toggle(...l),["prevent"]))},[$(e.$slots,"singleLabel",{option:o.singleValue},()=>[se(I(e.currentOptionLabel),1)])],32)):S("v-if",!0),o.isPlaceholderVisible?(d(),L("span",{key:2,class:"multiselect__placeholder",onMousedown:t[11]||(t[11]=z((...l)=>e.toggle&&e.toggle(...l),["prevent"]))},[$(e.$slots,"placeholder",{},()=>[se(I(e.placeholder),1)])],32)):S("v-if",!0)],512),x(Ae,{name:"multiselect"},{default:Q(()=>[re(x("div",{class:"multiselect__content-wrapper",onFocus:t[12]||(t[12]=(...l)=>e.activate&&e.activate(...l)),tabindex:"-1",onMousedown:t[13]||(t[13]=z(()=>{},["prevent"])),style:{maxHeight:e.optimizedHeight+"px"},ref:"list"},[x("ul",{class:"multiselect__content",style:o.contentStyle,role:"listbox",id:"listbox-"+e.id},[$(e.$slots,"beforeList"),e.multiple&&e.max===e.internalValue.length?(d(),L("li",Dl,[x("span",Al,[$(e.$slots,"maxElements",{},()=>[se("Maximum of "+I(e.max)+" options selected. First remove a selected option to select another.",1)])])])):S("v-if",!0),!e.max||e.internalValue.length(d(),L("li",{class:"multiselect__element",key:r,id:e.id+"-"+r,role:l&&(l.$isLabel||l.$isDisabled)?null:"option"},[l&&(l.$isLabel||l.$isDisabled)?S("v-if",!0):(d(),L("span",{key:0,class:[e.optionHighlight(r,l),"multiselect__option"],onClick:z(a=>e.select(l),["stop"]),onMouseenter:z(a=>e.pointerSet(r),["self"]),"data-select":l&&l.isTag?e.tagPlaceholder:o.selectLabelText,"data-selected":o.selectedLabelText,"data-deselect":o.deselectLabelText},[$(e.$slots,"option",{option:l,search:e.search,index:r},()=>[x("span",null,I(e.getOptionLabel(l)),1)])],42,["onClick","onMouseenter","data-select","data-selected","data-deselect"])),l&&(l.$isLabel||l.$isDisabled)?(d(),L("span",{key:1,"data-select":e.groupSelect&&o.selectGroupLabelText,"data-deselect":e.groupSelect&&o.deselectGroupLabelText,class:[e.groupHighlight(r,l),"multiselect__option"],onMouseenter:z(a=>e.groupSelect&&e.pointerSet(r),["self"]),onMousedown:z(a=>e.selectGroup(l),["prevent"])},[$(e.$slots,"option",{option:l,search:e.search,index:r},()=>[x("span",null,I(e.getOptionLabel(l)),1)])],42,["data-select","data-deselect","onMouseenter","onMousedown"])):S("v-if",!0)],8,["id","role"]))),128)):S("v-if",!0),re(x("li",null,[x("span",Rl,[$(e.$slots,"noResult",{search:e.search},()=>[Tl])])],512),[[ae,n.showNoResults&&e.filteredOptions.length===0&&e.search&&!n.loading]]),re(x("li",null,[x("span",Pl,[$(e.$slots,"noOptions",{},()=>[Vl])])],512),[[ae,n.showNoOptions&&(e.options.length===0||o.hasOptionGroup===!0&&e.filteredOptions.length===0)&&!e.search&&!n.loading]]),$(e.$slots,"afterList")],12,["id"])],36),[[ae,e.isOpen]])]),_:3})],42,["tabindex","aria-owns"])}Jt.render=Cl;const yt="/assets/bot-6afebef6.png";const Il={components:{BotIcon:yt,Multiselect:Jt},data(){return{dynamicComponent:null,messages:[],isConnected:!1,waitResponse:!1,botOptions:{botAvatarImg:yt,botTitle:"AI Bot",colorScheme:"#3f83f8",boardContentBg:"#f4f4f4",msgBubbleBgBot:"#fff",msgBubbleBgUser:"#3f83f8",inputPlaceholder:"Ask a new question"},docName:"cloudlinux-documentation",tags:[],options:[{name:"CloudLinux OS Legacy (Shared)",value:["level-0","shared"]},{name:"CloudLinux OS Shared Pro",value:["level-0","shared-pro"]},{name:"AccelerateWP",value:["level-1","accelerate-wp"]},{name:"CLN",value:["level-0","cln"]},{name:"CloudLinux Solo",value:["level-0","solo"]},{name:"CloudLinux OS Admin",value:["level-0","admin"]},{name:"CloudLinux Subsystem For Ubuntu",value:["level-0","ubuntu"]},{name:"End-user Documents",value:["level-0","user-docs"]}]}},mounted(){h(()=>import("./vue-bot-ui.common-d7beca41.js").then(e=>e.v),["assets/vue-bot-ui.common-d7beca41.js","assets/framework-dd156d1c.js"]).then(e=>{this.dynamicComponent=fn(e.VueBotUI)}),console.log("Starting connection..."),this.connection=new WebSocket("wss://doc-bot.cloudlinux.com:2096"),this.connection.onmessage=e=>{const t=JSON.parse(e.data);this.messages.push({agent:"bot",type:"markdown",text:t.text}),this.waitResponse=!1,setTimeout(()=>{this.messages.push({agent:"bot",type:"rate",id:t.id})},1e3)},this.connection.onclose=()=>{console.log("Connection closed"),this.isConnected=!1},this.connection.onopen=()=>{console.log("Successfully connected to the websocket server..."),this.isConnected=!0}},methods:{messageSendHandler(e){this.messages.push({agent:"user",type:"text",text:e.text});let t=[];this.tags.length!==this.options.length&&(t=this.tags.map(n=>n.value)),this.connection.send(JSON.stringify({type:"question",text:e.text,"doc-name":this.docName,tags:t})),this.waitResponse=!0},messageToServer(e){this.connection.send(JSON.stringify({"doc-name":this.docName,...e}))}}},Ml={id:"bot-ui"},Bl={class:"qkb-board-header__title"},zl={class:"qkb-board-header__select_field"};function ql(e,t,n,s,i,o){const l=ge("multiselect"),r=ge("ClientOnly");return d(),L(r,null,{default:Q(()=>[v("div",Ml,[i.dynamicComponent&&i.isConnected?(d(),L(De(i.dynamicComponent),{key:0,messages:i.messages,options:i.botOptions,"bot-typing":i.waitResponse,"input-disable":i.waitResponse,onMsgSend:o.messageSendHandler,onMsgToServer:o.messageToServer},{header:Q(()=>[v("div",Bl,I(i.botOptions.botTitle),1),v("div",zl,[x(l,{modelValue:i.tags,"onUpdate:modelValue":t[0]||(t[0]=a=>i.tags=a),options:i.options,multiple:!0,"close-on-select":!0,limit:3,label:"name","track-by":"value",placeholder:"Select section"},null,8,["modelValue","options"])])]),_:1},40,["messages","options","bot-typing","input-disable","onMsgSend","onMsgToServer"])):S("v-if",!0)])]),_:1})}const Hl=B(Il,[["render",ql],["__file","Chat.vue"]]),Fl=In({rootComponents:[Hl],async enhance({app:e}){e.config.globalProperties.$eventBus=Bn()},layouts:{Layout:Qi,HomeLayout:dl,NotFound:gl},setup(){kt("themeConfig",{cloudlinuxSite:"https://cloudlinux.com",defaultURL:"/",githubBranch:"master",allowGithubEdit:!0,githubMainDir:"docs",githubRepository:"cloudlinux/cloudlinux-documentation",MOBILE_BREAKPOINT:767,documents:bl,arrowDownIcon:"arrows/arrow-down.svg",githubEditIcon:"global/pen.svg",footerCustomLogo:"global/we-are-cloudlinux.svg",headerDefaultSearchIcon:"global/search.svg",siteLogo:"global/logo.svg",searchSelectIcon:"arrows/select-down.svg",headerSearchIcon:"global/header-search.svg",headerSearch:"CloudLinux Product Documentation",headerSearchPlaceholder:"Search across all CloudLinux product documentation",locales:{bottomLinks:ml,editLinkText:"Edit this page",sidebar:Pt,siteTitle:"Documentation",stayInTouch:"Stay in touch",navbarLinks:_l},productsList:["CloudLinux","Imunify","TuxCare"],productsTitle:"Products",productsURLs:["https://docs.cloudlinux.com","https://docs.imunify360.com","https://docs.tuxcare.com"],social:vl,algoliaOptions:{apiKey:"e6b9d79daf71aa98e2e2a51d4556f9d4",indexName:"cloudlinuxos",appId:"0TCNL6CGX8"},MAX_VISIBLE_RESULT:12,MAX_VISIBLE_ROWS:12,MAX_HITS_PER_PAGE:12})}}),$e=[Mn,Fl],Nl=[["v-8daa1a0e","/",{},["/index.html","/README.md"]],["v-74457223","/cln/",{},["/cln/index.html","/cln/README.md"]],["v-257d9eea","/user-docs/",{},["/user-docs/index.html","/user-docs/README.md"]],["v-19b6f117","/cln/account_settings/",{},["/cln/account_settings/index.html","/cln/account_settings/README.md"]],["v-2a99c19d","/cln/account_settings/convert.html",{},["/cln/account_settings/convert","/cln/account_settings/convert.md"]],["v-531ecc37","/cln/billing/",{},["/cln/billing/index.html","/cln/billing/README.md"]],["v-7b6817fe","/cln/cln_for_resellers/",{},["/cln/cln_for_resellers/index.html","/cln/cln_for_resellers/README.md"]],["v-09dd2362","/cln/cln_for_resellers/conversion.html",{},["/cln/cln_for_resellers/conversion","/cln/cln_for_resellers/conversion.md"]],["v-44b5ca7e","/cln/dashboard/",{},["/cln/dashboard/index.html","/cln/dashboard/README.md"]],["v-25bd0a12","/cln/introduction/",{},["/cln/introduction/index.html","/cln/introduction/README.md"]],["v-bcec460e","/cln/payment_methods/",{},["/cln/payment_methods/index.html","/cln/payment_methods/README.md"]],["v-38fce08b","/cln/purchase/",{},["/cln/purchase/index.html","/cln/purchase/README.md"]],["v-92fb1a40","/cln/spacewalk/regular.html",{},["/cln/spacewalk/regular","/cln/spacewalk/regular.md"]],["v-07bc00e4","/cln/spacewalk/reseller.html",{},["/cln/spacewalk/reseller","/cln/spacewalk/reseller.md"]],["v-67fe297f","/cln/terminology/",{},["/cln/terminology/index.html","/cln/terminology/README.md"]],["v-cc245b0c","/cln/whmcs_advantage/",{},["/cln/whmcs_advantage/index.html","/cln/whmcs_advantage/README.md"]],["v-1e772bf4","/cln/whmcs_plugin/",{},["/cln/whmcs_plugin/index.html","/cln/whmcs_plugin/README.md"]],["v-e3f0a4a2","/cln/wpos-plugin/",{},["/cln/wpos-plugin/index.html","/cln/wpos-plugin/README.md"]],["v-314a68d6","/cloudlinuxos/alt-ea_packages/",{},["/cloudlinuxos/alt-ea_packages/index.html","/cloudlinuxos/alt-ea_packages/README.md"]],["v-8e328fb4","/cloudlinuxos/apache2nginx/",{},["/cloudlinuxos/apache2nginx/index.html","/cloudlinuxos/apache2nginx/README.md"]],["v-592f0ff0","/cloudlinuxos/cloudlinux_installation/",{},["/cloudlinuxos/cloudlinux_installation/index.html","/cloudlinuxos/cloudlinux_installation/README.md"]],["v-7a46618b","/cloudlinuxos/cloudlinux_os_components/",{},["/cloudlinuxos/cloudlinux_os_components/index.html","/cloudlinuxos/cloudlinux_os_components/README.md"]],["v-53f16644","/cloudlinuxos/cloudlinux_os_kernel/",{},["/cloudlinuxos/cloudlinux_os_kernel/index.html","/cloudlinuxos/cloudlinux_os_kernel/README.md"]],["v-81e6b46c","/cloudlinuxos/command-line_tools/",{},["/cloudlinuxos/command-line_tools/index.html","/cloudlinuxos/command-line_tools/README.md"]],["v-28178fcb","/cloudlinuxos/control_panel_integration/",{},["/cloudlinuxos/control_panel_integration/index.html","/cloudlinuxos/control_panel_integration/README.md"]],["v-3b71926e","/cloudlinuxos/deprecated/",{},["/cloudlinuxos/deprecated/index.html","/cloudlinuxos/deprecated/README.md"]],["v-189980a8","/cloudlinuxos/elevate/",{},["/cloudlinuxos/elevate/index.html","/cloudlinuxos/elevate/README.md"]],["v-76c3dae8","/cloudlinuxos/faq/",{},["/cloudlinuxos/faq/index.html","/cloudlinuxos/faq/README.md"]],["v-3c6dbe82","/cloudlinuxos/features/",{},["/cloudlinuxos/features/index.html","/cloudlinuxos/features/README.md"]],["v-023a4d6d","/cloudlinuxos/for_cloudlinux_partners/",{},["/cloudlinuxos/for_cloudlinux_partners/index.html","/cloudlinuxos/for_cloudlinux_partners/README.md"]],["v-de1629dc","/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html",{},["/cloudlinuxos/for_cloudlinux_partners/whmcs_saved","/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.md"]],["v-3bff88f8","/cloudlinuxos/limits/",{},["/cloudlinuxos/limits/index.html","/cloudlinuxos/limits/README.md"]],["v-1cfc8d0e","/cloudlinuxos/lve_manager/",{},["/cloudlinuxos/lve_manager/index.html","/cloudlinuxos/lve_manager/README.md"]],["v-71441512","/cloudlinuxos/shared-pro/",{},["/cloudlinuxos/shared-pro/index.html","/cloudlinuxos/shared-pro/README.md"]],["v-112bcebc","/introduction/admin/",{},["/introduction/admin/index.html","/introduction/admin/README.md"]],["v-1f45cb3a","/introduction/cloudlinux-os-editions/",{},["/introduction/cloudlinux-os-editions/index.html","/introduction/cloudlinux-os-editions/README.md"]],["v-1de76098","/introduction/solo/",{},["/introduction/solo/index.html","/introduction/solo/README.md"]],["v-27c2a530","/ubuntu/faq/",{},["/ubuntu/faq/index.html","/ubuntu/faq/README.md"]],["v-a7fa213a","/ubuntu/features/",{},["/ubuntu/features/index.html","/ubuntu/features/README.md"]],["v-379536f4","/ubuntu/installation/",{},["/ubuntu/installation/index.html","/ubuntu/installation/README.md"]],["v-4cbda6a6","/ubuntu/introduction/",{},["/ubuntu/introduction/index.html","/ubuntu/introduction/README.md"]],["v-f23b5fb8","/ubuntu/troubleshooting/",{},["/ubuntu/troubleshooting/index.html","/ubuntu/troubleshooting/README.md"]],["v-00097080","/ubuntu/uninstalling/",{},["/ubuntu/uninstalling/index.html","/ubuntu/uninstalling/README.md"]],["v-92a4f5fa","/user-docs/user-docs-shared-pro-cloudlinux/",{},["/user-docs/user-docs-shared-pro-cloudlinux/index.html","/user-docs/user-docs-shared-pro-cloudlinux/README.md"]],["v-1e15a9dd","/user-docs/user-docs-solo-cloudlinux/",{},["/user-docs/user-docs-solo-cloudlinux/index.html","/user-docs/user-docs-solo-cloudlinux/README.md"]],["v-36e14580","/cln/shared/faq/",{},["/cln/shared/faq/index.html","/cln/shared/faq/README.md"]],["v-eb8332ea","/cln/shared/features/",{},["/cln/shared/features/index.html","/cln/shared/features/README.md"]],["v-3706649a","/404.html",{},["/404"]]];var wt=Me({name:"Vuepress",setup(){const e=Dn();return()=>ne(e.value)}}),Wl=()=>Nl.reduce((e,[t,n,s,i])=>(e.push({name:t,path:n,component:wt,meta:s},...i.map(o=>({path:o,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:wt}]),jl=vn,Gl=()=>{const e=gn({history:jl(mn("/")),routes:Wl(),scrollBehavior:(t,n,s)=>s||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var s;(t.path!==n.path||n===_n)&&([le.value]=await Promise.all([te.resolvePageData(t.name),(s=St[t.name])==null?void 0:s.__asyncLoader()]))}),e},Ul=e=>{e.component("ClientOnly",Vn),e.component("Content",Cn)},Kl=(e,t,n)=>{const s=P(t.currentRoute.value.path);_e(()=>t.currentRoute.value.path,_=>s.value=_);const i=D(()=>te.resolveLayouts(n)),o=D(()=>te.resolveRouteLocale(we.value.locales,s.value)),l=D(()=>te.resolveSiteLocaleData(we.value,o.value)),r=D(()=>te.resolvePageFrontmatter(le.value)),a=D(()=>te.resolvePageHeadTitle(le.value,l.value)),u=D(()=>te.resolvePageHead(a.value,r.value,l.value)),c=D(()=>te.resolvePageLang(le.value)),p=D(()=>te.resolvePageLayout(le.value,i.value));return e.provide(En,i),e.provide(Lt,r),e.provide($n,a),e.provide(Ot,u),e.provide($t,c),e.provide(At,p),e.provide(Rt,o),e.provide(An,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>u.value},$headTitle:{get:()=>a.value},$lang:{get:()=>c.value},$page:{get:()=>le.value},$routeLocale:{get:()=>o.value},$site:{get:()=>we.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>G}}),{layouts:i,pageData:le,pageFrontmatter:r,pageHead:u,pageHeadTitle:a,pageLang:c,pageLayout:p,routeLocale:o,siteData:we,siteLocaleData:l}},Zl=()=>{const e=On(),t=Dt(),n=P([]),s=()=>{e.value.forEach(o=>{const l=Ql(o);l&&n.value.push(l)})},i=()=>{document.documentElement.lang=t.value,n.value.forEach(o=>{o.parentNode===document.head&&document.head.removeChild(o)}),n.value.splice(0,n.value.length),e.value.forEach(o=>{const l=Xl(o);l!==null&&(document.head.appendChild(l),n.value.push(l))})};kt(Rn,i),oe(()=>{s(),i(),_e(()=>e.value,()=>i())})},Ql=([e,t,n=""])=>{const s=Object.entries(t).map(([r,a])=>fe(a)?`[${r}=${JSON.stringify(a)}]`:a===!0?`[${r}]`:"").join(""),i=`head > ${e}${s}`;return Array.from(document.querySelectorAll(i)).find(r=>r.innerText===n)||null},Xl=([e,t,n])=>{if(!fe(e))return null;const s=document.createElement(e);return wn(t)&&Object.entries(t).forEach(([i,o])=>{fe(o)?s.setAttribute(i,o):o===!0&&s.setAttribute(i,"")}),fe(n)&&s.appendChild(document.createTextNode(n)),s},Jl=bn,Yl=async()=>{var n;const e=Jl({name:"VuepressApp",setup(){var s;Zl();for(const i of $e)(s=i.setup)==null||s.call(i);return()=>[ne(yn),...$e.flatMap(({rootComponents:i=[]})=>i.map(o=>ne(o)))]}}),t=Gl();Ul(e),Kl(e,t,$e);for(const s of $e)await((n=s.enhance)==null?void 0:n.call(s,{app:e,router:t,siteData:we}));return e.use(t),{app:e,router:t}};Yl().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Yl as createVueApp}; +Please report this to https://github.com/markedjs/marked.`,t){const i="

An error occurred:

"+ee(s.message+"",!0)+"
";return n?Promise.resolve(i):i}if(n)return Promise.reject(s);throw s}}}const ue=new Fo;function A(e,t){return ue.parse(e,t)}A.options=A.setOptions=function(e){return ue.setOptions(e),A.defaults=ue.defaults,zt(A.defaults),A};A.getDefaults=Je;A.defaults=de;A.use=function(...e){return ue.use(...e),A.defaults=ue.defaults,zt(A.defaults),A};A.walkTokens=function(e,t){return ue.walkTokens(e,t)};A.parseInline=ue.parseInline;A.Parser=K;A.parser=K.parse;A.Renderer=Ie;A.TextRenderer=it;A.Lexer=U;A.lexer=U.lex;A.Tokenizer=Ce;A.Hooks=ke;A.parse=A;A.options;A.setOptions;A.use;A.walkTokens;A.parseInline;K.parse;U.lex;const No={key:0,class:"drawer-main__search-results"},Wo=["onClick"],jo=["innerHTML"],Go=["innerHTML"],Uo=["innerHTML"],Ko={key:1},Zo={key:0,class:"no_results"},Qo={__name:"DrawerSearchResult",props:{data:{type:[Array,Object],required:!0},modelValue:{type:String,required:!0}},setup(e){const t=new A.Renderer;t.heading=function(m){return typeof m!="string"?"":`${m}`},t.image=function(){return""},t.table=function(){return""};const n=m=>{let f=A(m,{renderer:t});return f=f.replace(/
/g,""),f},s=e,{MAX_VISIBLE_RESULT:i}=q("themeConfig"),o=P(!1),l=m=>{const f=new URL(window.location.href);if(f.pathname+f.hash===m){window.location.reload();return}window.location.href=f.origin+m},r=m=>{const f=new URL(m);return f.pathname+f.hash},a=D(()=>{var m;return o.value?s.data:(m=s.data)==null?void 0:m.slice(0,i)}),u=D(()=>s.data.length-a.value.length),c=()=>{o.value=!0},p=m=>m.split("->").map(y=>y.trim()).pop(),_=m=>{let f=m.split("->").map(y=>y.trim());return f.pop(),f.join(" > ")},g=(m,f)=>{if(!f.trim())return m;const y=new RegExp(`(${f.split(/\s+/).join("|")})`,"gi");return m.replace(y,"$1")};return(m,f)=>e.data.length?(d(),b("section",No,[(d(!0),b(W,null,j(a.value,(y,V)=>(d(),b("div",{key:y.objectID||V,class:"search-result",onClick:O=>l(r(y.url))},[v("div",{class:"search-result__title",innerHTML:g(p(y.title),e.modelValue)},null,8,jo),v("div",{class:"search-result__breadcrumb",innerHTML:g(_(y.title),e.modelValue)},null,8,Go),v("div",{class:"search-result__text",innerHTML:g(n(y.preview),e.modelValue)},null,8,Uo)],8,Wo))),128)),u.value>0?(d(),b("div",{key:0,class:"show-more",onClick:c},[v("p",null,"Show "+I(u.value)+" more results",1)])):S("v-if",!0)])):(d(),b("div",Ko,[e.modelValue.length?S("v-if",!0):(d(),b("p",Zo,"Please type your search query, then press Enter or click the search button."))]))}},Xo=B(Qo,[["__file","DrawerSearchResult.vue"]]);const Jo={class:"drawer-header"},Yo={class:"drawer-cross"},ei=["src"],ti={class:"drawer-main"},ni={class:"drawer-main__wrapper"},si={__name:"Drawer",props:{isOpenDrawer:{type:Boolean,required:!0,default:!1},isMobileWidth:{type:Boolean,required:!0,default:!1},modelValue:{type:String,required:!0,default:""},homeLayoutSearchResult:{type:Array,required:!0,default:()=>[]}},emits:["closeDrawer","update:modelValue"],setup(e,{emit:t}){const n=e,s=t,i=D(()=>n.homeLayoutSearchResult),o=()=>{s("closeDrawer")};return _e(()=>n.isOpenDrawer,()=>{document.body.classList.toggle("disable-scroll",n.isOpenDrawer)}),(l,r)=>(d(),b("div",null,[v("div",{class:Z(["drawer",{"is-open":e.isOpenDrawer}])},[v("div",Jo,[r[0]||(r[0]=v("div",{class:"drawer-header__wrapper"},[v("h2",{class:"drawer-header__paragraph"},"How can we help you?"),v("div",{id:"drawerSearch"})],-1)),v("div",Yo,[v("img",{onClick:o,class:"drawer-cross__img",src:k(G)("/global/cross.svg"),alt:"cross"},null,8,ei),v("p",{onClick:o,class:"drawer-cross__text"},"close")])]),v("main",null,[v("div",ti,[v("div",ni,[r[1]||(r[1]=v("div",{class:"drawer-main__breadcrumb"},[S(" Optional breadcrumb can stay here ")],-1)),x(Xo,{modelValue:e.modelValue,data:i.value},null,8,["modelValue","data"])])]),e.isOpenDrawer&&e.isMobileWidth?(d(),L(Re,{key:0,class:"drawer-footer__mobile"})):S("v-if",!0)])],2),e.isOpenDrawer&&!e.isMobileWidth?(d(),L(Re,{key:0,class:"drawer-footer"})):S("v-if",!0)]))}},oi=B(si,[["__file","Drawer.vue"]]);const ii=["value","placeholder"],li=["src"],ri={key:1,class:"spinner"},ai={__name:"DrawerSearch",props:{options:{type:[Object,Array],required:!0},modelValue:{type:String,required:!0},isOpenDrawer:{type:Boolean,required:!0},isMobileWidth:{type:Boolean}},emits:["openDrawer","update:modelValue","result"],setup(e,{emit:t}){const{MAX_HITS_PER_PAGE:n}=q("themeConfig"),{headerDefaultSearchIcon:s,headerSearchIcon:i,headerSearchPlaceholder:o}=q("themeConfig"),l=e,r=t,a=Se(),u=D(()=>a.value.layout==="HomeLayout"),c=D(()=>l.isOpenDrawer?"drawer-header__search":u.value?"header-layout__search":"header-layout__search-default"),p=D(()=>l.isOpenDrawer?"drawer-header__search-icon":u.value?"header-layout__search-icon":"header-layout__search-icon-default"),_=D(()=>u.value||l.isOpenDrawer?i:s),g=D(()=>l.isOpenDrawer?"Search":u.value?o:"Search"),m=D(()=>l.isMobileWidth?"Search accross all CloudLinux Docs":g.value);function f(C){return C.cloudlinux_docs.map(E=>{var Le,lt;const M=E.title.split("->").map(Yt=>Yt.trim()),F={lvl0:M[0]||null,lvl1:M[1]||null,lvl2:M[2]||null,lvl3:M[3]||null,lvl4:M[4]||null,lvl5:null,lvl6:null},ie=E.url.split("#")[1]||"",N=E.id;return{anchor:ie,content:null,hierarchy:F,url:E.url,title:E.title,preview:E.preview,category:E.category,section:E.section,objectID:N,_highlightResult:{hierarchy:{lvl0:{value:F.lvl0||"",matchLevel:"none",matchedWords:[]},lvl1:{value:F.lvl1||"",matchLevel:"full",fullyHighlighted:!1,matchedWords:[(Le=F.lvl1)==null?void 0:Le.toLowerCase()]}},hierarchy_camel:[{lvl0:{value:F.lvl0||"",matchLevel:"none",matchedWords:[]},lvl1:{value:`${F.lvl1||""}`,matchLevel:"full",fullyHighlighted:!1,matchedWords:[(lt=F.lvl1)==null?void 0:lt.toLowerCase()]}}]}}})}async function y(C,E=10){const M="https://global-search.cl-edu.com/search";let F=encodeURIComponent(C),ie=`${M}?query=${F}&collections=cloudlinux_docs&n_results=${E}&source=cloudlinux_docs`;try{const N=await fetch(ie);if(!N.ok)throw new Error(`HTTP error! status: ${N.status}`);return await N.json()}catch(N){return console.error("Error querying global search:",N),null}}const V=P(!1),O=async()=>{V.value=!0;const C=await y(l.modelValue,n);if(V.value=!1,C){const E=f(C);r("result",E),r("openDrawer")}};return _e(()=>l.options,async C=>{},{immediate:!0}),(C,E)=>(d(),b("form",{id:"search-form",class:"drawer-header__input",onSubmit:z(O,["prevent"])},[v("input",{type:"text",value:e.modelValue,onInput:E[0]||(E[0]=M=>C.$emit("update:modelValue",M.target.value)),id:"algolia-search-input",placeholder:m.value,class:Z(c.value),maxlength:"100"},null,42,ii),v("div",{class:Z(p.value)},[V.value?S("v-if",!0):(d(),b("img",{key:0,onClick:O,alt:"search icon",src:k(G)(_.value)},null,8,li)),V.value?(d(),b("div",ri)):S("v-if",!0)],2)],32))}},_t=B(ai,[["__file","DrawerSearch.vue"]]);const ui={class:"header-layout__search-container"},ci={key:0,class:"header-layout__search-title"},di={__name:"HeaderLayoutSearch",props:{isMobileWidth:{type:Boolean,default:!1},closeSidebarDrawer:{type:Function}},setup(e,{expose:t}){const n=e,{headerSearch:s,algoliaOptions:i}=q("themeConfig"),o=Se(),l=P(!1),r=P(!1),a=P(""),u=P([]);_e(()=>a.value,()=>{a.value||(u.value=[])});const c=m=>{u.value=m},p=D(()=>o.value.layout==="HomeLayout"),_=()=>{l.value=!0,r.value=!0,n.closeSidebarDrawer&&n.closeSidebarDrawer()},g=()=>{u.value.length=0,a.value="",l.value=!1,r.value=!1};return t({openDrawer:_,closeDrawer:g,mobileDrawerVisible:r}),(m,f)=>(d(),b("div",ui,[p.value?(d(),b("h1",ci,I(k(s)),1)):S("v-if",!0),l.value?(d(),L(xt,{key:1,to:"#drawerSearch"},[x(_t,{options:k(i),modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=y=>a.value=y),isMobileWidth:e.isMobileWidth,onOpenDrawer:_,isOpenDrawer:l.value,onResult:c},null,8,["options","modelValue","isMobileWidth","isOpenDrawer"])])):(d(),L(_t,{key:2,isMobileWidth:e.isMobileWidth,options:k(i),modelValue:a.value,"onUpdate:modelValue":f[1]||(f[1]=y=>a.value=y),onOpenDrawer:_,isOpenDrawer:l.value,onResult:c},null,8,["isMobileWidth","options","modelValue","isOpenDrawer"])),x(oi,{homeLayoutSearchResult:u.value,modelValue:a.value,"onUpdate:modelValue":f[2]||(f[2]=y=>a.value=y),onCloseDrawer:g,isOpenDrawer:l.value,isMobileWidth:e.isMobileWidth},null,8,["homeLayoutSearchResult","modelValue","isOpenDrawer","isMobileWidth"])]))}},bt=B(di,[["__file","HeaderLayoutSearch.vue"]]);const hi={class:"header-products-wrapper"},pi={key:0,class:"dropdown-wrapper"},fi=["href"],gi={key:1,class:"dropdown-wrapper"},mi=["href"],_i=["src"],bi={class:"header-products-wrapper-paragraph"},vi=["src"],yi={__name:"HeaderProducts",props:{isMobileWidth:{type:Boolean}},setup(e){const{productsTitle:t,arrowDownIcon:n,productsList:s,productsURLs:i}=q("themeConfig"),o=P(!1),l=P(null),r=a=>{!a.composedPath().includes(l.value)&&(o.value=!1)};return oe(()=>{document.addEventListener("click",r)}),be(()=>{document.removeEventListener("click",r)}),(a,u)=>(d(),b("div",hi,[v("div",{ref_key:"menu",ref:l,class:"dropdown"},[e.isMobileWidth?(d(),L(xt,{key:0,to:"body"},[o.value?(d(),b("div",pi,[(d(!0),b(W,null,j(k(s),(c,p)=>(d(),b("p",{class:"dropdown-content__paragraph",key:c},[v("a",{class:"dropdown-content__link",href:k(i)[p]},I(c),9,fi)]))),128))])):S("v-if",!0)])):S("v-if",!0),o.value&&!e.isMobileWidth?(d(),b("div",gi,[(d(!0),b(W,null,j(k(s),(c,p)=>(d(),b("p",{class:"dropdown-content__paragraph",key:c},[v("a",{class:"dropdown-content__link",href:k(i)[p]},I(c),9,mi)]))),128))])):S("v-if",!0),v("div",{onClick:u[0]||(u[0]=c=>o.value=!o.value),class:"header-products-container"},[v("img",{class:"header-products-container__img",alt:"hamburger menu",src:k(G)("/global/hamburger-menu.svg")},null,8,_i),v("p",bi,I(k(t)),1),v("img",{class:Z(["products-icon__default",{"products-icon__rotate":o.value}]),width:"10",height:"8",src:k(G)(k(n)),alt:"arrow down icon"},null,10,vi)])],512)]))}},wi=B(yi,[["__file","HeaderProducts.vue"]]);const xi={class:"navbar-header"},ki={class:"navbar-header__logo-wrapper"},Si=["src"],Ei=["src"],Li=["href","onClick"],Oi={__name:"HeaderLayout",props:{isMobileWidth:{type:Boolean},closeSidebarDrawer:{type:Function}},setup(e){const{siteLogo:t,defaultURL:n,locales:s,headerDefaultSearchIcon:i}=q("themeConfig"),o=P(null),l=Se(),r=Tt(),a=P(null),u=()=>{var g;return(g=a==null?void 0:a.value)==null?void 0:g.openDrawer()},c=D(()=>l.value.layout==="HomeLayout"),p=D(()=>(r.value+n).replace(/\/+/g,"/")),_=g=>{if(g.type)switch(g.type){case"event":var g=new CustomEvent(g.name);document.dispatchEvent(g)}};return(g,m)=>{var y;const f=ge("router-link");return d(),b("header",{class:Z(["navbar",{fixed:!c.value}])},[v("div",xi,[v("div",ki,[x(f,{to:p.value,class:"home-link"},{default:Q(()=>[k(t)?(d(),b("img",{key:0,class:"logo",src:k(G)(k(t)),alt:"logo header"},null,8,Si)):S("v-if",!0)]),_:1},8,["to"]),c.value?S("v-if",!0):(d(),L(bt,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:a,class:Z({"header-mobile__hidden":!((y=a.value)!=null&&y.mobileDrawerVisible)}),isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","class","isMobileWidth"]))]),v("div",{class:"links",style:pn({"max-width":o.value+"px"})},[v("img",{onClick:u,class:"navbar-header__mobile-search",src:k(G)(k(i)),alt:"icon image"},null,8,Ei),x(wi,{isMobileWidth:e.isMobileWidth},null,8,["isMobileWidth"]),(d(!0),b(W,null,j(k(s).navbarLinks,V=>(d(),b("a",{href:V.url,target:"_blank",class:Z(V.class),onClick:O=>_(V.event)},I(V.text),11,Li))),256))],4)]),c.value?(d(),L(bt,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:a,isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","isMobileWidth"])):S("v-if",!0)],2)}}},Qt=B(Oi,[["__file","HeaderLayout.vue"]]);const $i={class:"back-to-top"},Di={__name:"BackToTop",props:{boundary:{type:Number,default:200}},setup(e){const t=e,n=P(!1),s=()=>{window&&(n.value=window.pageYOffset>t.boundary)},i=()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0};return oe(()=>{window&&(s(),window.addEventListener("scroll",s))}),be(()=>{window&&window.removeEventListener("scroll",s)}),(o,l)=>(d(),b("div",$i,[v("a",{class:Z([{active:n.value},"nav-arrow top back-to-top__link"]),onClick:i},l[0]||(l[0]=[v("span",{class:"back-to-top__link-span"},"Scroll up",-1)]),2)]))}},Ai=B(Di,[["__scopeId","data-v-1eb13e00"],["__file","BackToTop.vue"]]);const Ri={class:"breadcrumb-wrapper"},Ti={class:"breadcrumb-title"},Pi={__name:"Breadcrumb",setup(e){const t=ce(),{locales:{siteTitle:n}}=q("themeConfig"),s=D(()=>{const i=[];return t.value.path!=="/"&&i.push({path:t.value.path,title:t.value.title}),i});return(i,o)=>{const l=ge("router-link");return d(),b("div",Ri,[v("span",Ti,I(k(n))+":",1),(d(!0),b(W,null,j(s.value,r=>(d(),L(l,{class:"breadcrumb",key:r.path,to:r.path},{default:Q(()=>[se(I(r.title),1)]),_:2},1032,["to"]))),128))])}}},Vi=B(Pi,[["__scopeId","data-v-9445381a"],["__file","Breadcrumb.vue"]]);const Ci={key:0,class:"page-nav"},Ii={__name:"PageNav",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array}},setup(e){const t=e,n=Tt(),s=ce(),i=D(()=>{const u=s.value.frontmatter.prev;return u===!1?null:u?Pe(t.allPages,u,n):l(s.value,t.sidebarItems)}),o=D(()=>{const u=s.value.frontmatter.next;return u===!1?null:u?Pe(t.allPages,u,n):r(s.value,t.sidebarItems)}),l=(u,c)=>a(u,c,-1),r=(u,c)=>a(u,c,1),a=(u,c,p)=>{const _=[];c.forEach(g=>{g.type==="group"?_.push(...g.children||[]):_.push(g)});for(let g=0;g<_.length;g++){const m=_[g];if((m==null?void 0:m.type)==="page"&&m.path===u.path)return _[g+p]}};return(u,c)=>{const p=ge("router-link");return i.value||o.value?(d(),b("div",Ci,[i.value?(d(),L(p,{key:0,class:"nav-arrow left",to:i.value.path},null,8,["to"])):S("v-if",!0),o.value?(d(),L(p,{key:1,class:"nav-arrow right",to:o.value.path},null,8,["to"])):S("v-if",!0)])):S("v-if",!0)}}},Mi=B(Ii,[["__file","PageNav.vue"]]);const Bi={class:"page"},zi=["src"],qi={class:"page-nav-wrapper"},Hi={key:0,class:"page-edit"},Fi={class:"edit-link"},Ni=["src"],Wi=["href"],ji={__name:"Page",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array,default:()=>[]},isMobileWidth:{type:Boolean}},setup(e,{expose:t}){const{githubEditIcon:n,githubRepository:s,allowGithubEdit:i,githubMainDir:o="",githubBranch:l="master",docsRepo:r=s,editLinkText:a}=q("themeConfig"),u=e,c=ce();Dt();const p=Se(),_=P(u.isMobileWidth),g=()=>_.value=!0,m=()=>_.value=!1,f=D(()=>{if(p.value.editLink===!1)return;let O=me(c.value.path);if(pe.test(O)?O+="README.md":O+=".md",r&&i)return V(s,r,o,l,O)}),y=D(()=>a||"Edit this page"),V=(O,C,E,M,F)=>/bitbucket.org/.test(O)?(je.test(C)?C:O).replace(pe,"")+`/${M}`+(E?"/"+E.replace(pe,""):"")+F+`?mode=edit&spa=0&at=${M}&fileviewer=file-view-default`:(je.test(C)?C:`https://github.com/${C}`).replace(pe,"")+`/tree/${M}`+(E?"/"+E.replace(pe,""):"")+F;return t({isOpenMobileSidebarMenu:_,closeSidebarDrawer:m}),(O,C)=>{const E=ge("Content");return d(),b("div",Bi,[$(O.$slots,"top"),x(Vi,{class:"page-breadcrumb"}),v("img",{onClick:g,class:"page-mobile__sidebar-menu",src:k(G)("/global/sidebar-menu.svg"),alt:"sidebar hamburger menu"},null,8,zi),v("div",qi,[x(Mi,{"sidebar-items":e.sidebarItems,allPages:e.allPages},null,8,["sidebar-items","allPages"])]),x(E,{class:"content",custom:!1}),k(i)?(d(),b("div",Hi,[v("div",Fi,[v("img",{src:k(G)(k(n)),alt:"icon pen"},null,8,Ni),v("a",{href:f.value,target:"_blank",rel:"noopener noreferrer"},I(y.value),9,Wi)])])):S("v-if",!0),x(Ai),$(O.$slots,"bottom")])}}},Gi=B(ji,[["__file","Page.vue"]]);const Ui={class:"theme-container"},Ki={key:0,class:"sidebar-header"},Zi={__name:"Layout",setup(e){const{documents:t,MOBILE_BREAKPOINT:n}=q("themeConfig"),s=P(null),i=P(null),o=ze(),l=Be(),r=ce(),a=P([]),u=P(!1),c=D(()=>r.value&&a.value.length?Vt(r.value,l,a.value):[]),p=m=>o.push(m.link),_=()=>{var y;const m=(y=r.value)==null?void 0:y.path,f=m.indexOf("/",m.indexOf("/")+1);return m.substr(0,f)},g=()=>{u.value=window.innerWidth<=n};return oe(()=>{Object.values(Ke).map(m=>m().then(f=>{a.value.push(f)})),i.value=t.find(m=>{var f;return(f=m.link)==null?void 0:f.startsWith(_())}),window.addEventListener("resize",g),u.value=window.innerWidth<=n}),be(()=>{window.removeEventListener("resize",g)}),(m,f)=>{var y,V,O,C,E;return d(),b("div",Ui,[x(Qt,{closeSidebarDrawer:(y=s.value)==null?void 0:y.closeSidebarDrawer,isMobileWidth:u.value},null,8,["closeSidebarDrawer","isMobileWidth"]),a.value.length&&!((V=s.value)!=null&&V.isOpenMobileSidebarMenu)&&!u.value?(d(),L(Mt,{key:0,items:a.value,closeSidebarDrawer:(O=s.value)==null?void 0:O.closeSidebarDrawer},{top:Q(()=>[k(t)?(d(),b("div",Ki,[f[2]||(f[2]=v("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1)),x(Bt,{"with-icon":"",modelValue:i.value,"onUpdate:modelValue":f[0]||(f[0]=M=>i.value=M),onChangeSidebarItems:p,options:k(t)},null,8,["modelValue","options"])])):S("v-if",!0)]),_:1},8,["items","closeSidebarDrawer"])):S("v-if",!0),x(Gi,{ref_key:"pageRef",ref:s,sidebarItems:c.value,allPages:a.value,isMobileWidth:u.value},null,8,["sidebarItems","allPages","isMobileWidth"]),a.value.length&&((C=s.value)!=null&&C.isOpenMobileSidebarMenu)&&u.value?(d(),L(lo,{key:1,onChangeSidebarItems:p,"all-pages":a.value,documents:k(t),modelValue:i.value,"onUpdate:modelValue":f[1]||(f[1]=M=>i.value=M),closeSidebarDrawer:(E=s.value)==null?void 0:E.closeSidebarDrawer,isMobileWidth:u.value},null,8,["all-pages","documents","modelValue","closeSidebarDrawer","isMobileWidth"])):S("v-if",!0),x(Re)])}}},Qi=B(Zi,[["__file","Layout.vue"]]);const Xi={class:"docs-card-container"},Ji={class:"docs-card-container__header"},Yi=["src"],el={key:0,class:"docs-card-container__header-paragraph"},tl={class:"docs-card-container__main"},nl={key:0,class:"docs-card-container__main-paragraph"},sl={class:"docs-card-container__footer"},ol={__name:"DocsCard",props:{card:{type:Object,default:null}},setup(e){const t=e,n=ze(),s=()=>{var i;return n.push((i=t.card)==null?void 0:i.link)};return(i,o)=>(d(),b("div",Xi,[v("div",Ji,[v("img",{width:"20",height:"20",src:k(G)("collections-bookmark.svg"),alt:"document icon"},null,8,Yi),e.card.title?(d(),b("p",el,I(e.card.title),1)):S("v-if",!0)]),v("div",tl,[e.card.description?(d(),b("p",nl,I(e.card.description),1)):S("v-if",!0)]),v("div",sl,[v("button",{onClick:o[0]||(o[0]=l=>s()),class:"docs-card-container__footer-btn"},"View Documentation")])]))}},il=B(ol,[["__file","DocsCard.vue"]]);const ll={class:"docs-cards-wrapper"},rl={__name:"DocsCardsWrapper",setup(e){const{documents:t}=q("themeConfig");return(n,s)=>(d(),b("div",ll,[(d(!0),b(W,null,j(k(t),(i,o)=>(d(),L(il,{key:o,card:i},null,8,["card"]))),128))]))}},al=B(rl,[["__file","DocsCardsWrapper.vue"]]),ul={class:"theme-container"},cl={__name:"HomeLayout",setup(e){const{MOBILE_BREAKPOINT:t}=q("themeConfig"),n=P(!1),s=()=>n.value=window.innerWidth<=t;return oe(()=>{window.addEventListener("resize",s),n.value=window.innerWidth<=t}),be(()=>window.removeEventListener("resize",s)),(i,o)=>(d(),b("div",ul,[x(Qt,{isMobileWidth:n.value},null,8,["isMobileWidth"]),x(al),x(Re)]))}},dl=B(cl,[["__file","HomeLayout.vue"]]);const hl={class:"custom-container"},pl=["src"],fl={__name:"NotFound",setup(e){const t=Be(),n=ze(),s=P(!1),i=P(""),o=(l,r)=>{var u;let a=!1;if(!a&&((u=l.children)==null?void 0:u.length)>0)for(let c of l.children){const p=r+"/"+c.link;if(p.search(t.path)!==-1){n.push(p),a=!0;return}l.children.length>0&&o(c,r)}};return oe(async()=>{var r;const l=Object==null?void 0:Object.values(Ke);for(let a of l){const u=await a();let c=u.path;if(c.at(-1)==="/"&&(c=c.slice(0,-1)),((r=u.headers)==null?void 0:r.length)>0)for(let p of u.headers){const _=c+"/"+p.link;if(_.search(t.path)!==-1){n.push(_);return}o(p,c)}}if(t.fullPath.startsWith("/legacy")){const a=t.fullPath.replace("/legacy","/cloudlinuxos");window.location.href=a}else if(t.fullPath.startsWith("/shared")){const a=t.fullPath.replace("/shared","/cloudlinuxos");n.push(a),window.location.href=a}else n.push("/not-found.html"),window.location.href="/not-found.html"}),(l,r)=>(d(),b("div",hl,[s.value?(d(),b("iframe",{key:0,src:i.value,style:{width:"100%",height:"100vh",border:"none"}},null,8,pl)):S("v-if",!0)]))}},gl=B(fl,[["__file","NotFound.vue"]]),ml=[{text:"Knowledge base",url:"https://cloudlinux.zendesk.com/hc/en-us/categories/360002375940"},{text:"Forum",url:"https://forum.cloudlinux.com/"},{text:"Blog",url:"https://blog.cloudlinux.com/"},{text:"Privacy Policy",url:"https://www.cloudlinux.com/privacy-policy/"}],_l=[{text:"Ask GPT?",event:{type:"event",name:"botui-open"},class:"btn"},{text:"Submit support request",url:"https://www.cloudlinux.com/support-portal/",class:"btn"},{text:"Try Free",url:"https://cloudlinux.com/trial",class:"btn btn-white"}],bl=[{title:"Introduction to Cloudlinux OS",description:"Introduction to CloudLinux OS editions and their description.",link:"/introduction/cloudlinux-os-editions/"},{title:"CloudLinux OS",description:"Optimizes shared hosting environments by enhancing stability, security, and performance through user isolation and efficient resource management. Featuring tools like LVE resource limits, CageFS, and multiple language selectors, it empowers hosting providers to offer superior services.",link:"/cloudlinuxos/cloudlinux_installation/"},{title:"AccelerateWP",description:"AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.",link:"/cloudlinuxos/shared-pro/#acceleratewp"},{title:"CLN - CloudLinux Licenses",description:"CLN is a CloudLinux Network designed to easily manage your licenses of CloudLinux products and services by means of a user-friendly interface.",link:"/cln/introduction/"},{title:"CloudLinux Subsystem For Ubuntu",description:"CloudLinux subsystem on Ubuntu is a scope of deb-packages that allows using CloudLinux features on Ubuntu OS.",link:"/ubuntu/introduction/"},{title:"End-user Documents",description:"Documentation section for end-users on Cloudlinux OS.",link:"/user-docs/user-docs-shared-pro-cloudlinux/"}],vl=[{url:"https://www.facebook.com/cloudlinux/",icon:"footer-social/fb.png"},{url:"https://twitter.com/cloudlinuxos/",icon:"footer-social/tw.png"},{url:"https://linkedin.com/company/cloudlinux",icon:"footer-social/in.png"},{url:"https://www.youtube.com/channel/UCZ3YMHWnMP7TaxlXVay5-aw",icon:"footer-social/ytube.png"}];function Fe(e){return e===0?!1:Array.isArray(e)&&e.length===0?!0:!e}function yl(e){return(...t)=>!e(...t)}function wl(e,t){return e===void 0&&(e="undefined"),e===null&&(e="null"),e===!1&&(e="false"),e.toString().toLowerCase().indexOf(t.trim())!==-1}function Xt(e,t,n,s){return t?e.filter(i=>wl(s(i,n),t)).sort((i,o)=>s(i,n).length-s(o,n).length):e}function xl(e){return e.filter(t=>!t.$isLabel)}function Ne(e,t){return n=>n.reduce((s,i)=>i[e]&&i[e].length?(s.push({$groupLabel:i[t],$isLabel:!0}),s.concat(i[e])):s,[])}function kl(e,t,n,s,i){return o=>o.map(l=>{if(!l[n])return console.warn("Options passed to vue-multiselect do not contain groups, despite the config."),[];const r=Xt(l[n],e,t,i);return r.length?{[s]:l[s],[n]:r}:[]})}const vt=(...e)=>t=>e.reduce((n,s)=>s(n),t);var Sl={data(){return{search:"",isOpen:!1,preferredOpenDirection:"below",optimizedHeight:this.maxHeight}},props:{internalSearch:{type:Boolean,default:!0},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},trackBy:{type:String},label:{type:String},searchable:{type:Boolean,default:!0},clearOnSelect:{type:Boolean,default:!0},hideSelected:{type:Boolean,default:!1},placeholder:{type:String,default:"Select option"},allowEmpty:{type:Boolean,default:!0},resetAfter:{type:Boolean,default:!1},closeOnSelect:{type:Boolean,default:!0},customLabel:{type:Function,default(e,t){return Fe(e)?"":t?e[t]:e}},taggable:{type:Boolean,default:!1},tagPlaceholder:{type:String,default:"Press enter to create a tag"},tagPosition:{type:String,default:"top"},max:{type:[Number,Boolean],default:!1},id:{default:null},optionsLimit:{type:Number,default:1e3},groupValues:{type:String},groupLabel:{type:String},groupSelect:{type:Boolean,default:!1},blockKeys:{type:Array,default(){return[]}},preserveSearch:{type:Boolean,default:!1},preselectFirst:{type:Boolean,default:!1},preventAutofocus:{type:Boolean,default:!1}},mounted(){!this.multiple&&this.max&&console.warn("[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false."),this.preselectFirst&&!this.internalValue.length&&this.options.length&&this.select(this.filteredOptions[0])},computed:{internalValue(){return this.modelValue||this.modelValue===0?Array.isArray(this.modelValue)?this.modelValue:[this.modelValue]:[]},filteredOptions(){const e=this.search||"",t=e.toLowerCase().trim();let n=this.options.concat();return this.internalSearch?n=this.groupValues?this.filterAndFlat(n,t,this.label):Xt(n,t,this.label,this.customLabel):n=this.groupValues?Ne(this.groupValues,this.groupLabel)(n):n,n=this.hideSelected?n.filter(yl(this.isSelected)):n,this.taggable&&t.length&&!this.isExistingOption(t)&&(this.tagPosition==="bottom"?n.push({isTag:!0,label:e}):n.unshift({isTag:!0,label:e})),n.slice(0,this.optionsLimit)},valueKeys(){return this.trackBy?this.internalValue.map(e=>e[this.trackBy]):this.internalValue},optionKeys(){return(this.groupValues?this.flatAndStrip(this.options):this.options).map(t=>this.customLabel(t,this.label).toString().toLowerCase())},currentOptionLabel(){return this.multiple?this.searchable?"":this.placeholder:this.internalValue.length?this.getOptionLabel(this.internalValue[0]):this.searchable?"":this.placeholder}},watch:{internalValue:{handler(){this.resetAfter&&this.internalValue.length&&(this.search="",this.$emit("update:modelValue",this.multiple?[]:null))},deep:!0},search(){this.$emit("search-change",this.search)}},emits:["open","search-change","close","select","update:modelValue","remove","tag"],methods:{getValue(){return this.multiple?this.internalValue:this.internalValue.length===0?null:this.internalValue[0]},filterAndFlat(e,t,n){return vt(kl(t,n,this.groupValues,this.groupLabel,this.customLabel),Ne(this.groupValues,this.groupLabel))(e)},flatAndStrip(e){return vt(Ne(this.groupValues,this.groupLabel),xl)(e)},updateSearch(e){this.search=e},isExistingOption(e){return this.options?this.optionKeys.indexOf(e)>-1:!1},isSelected(e){const t=this.trackBy?e[this.trackBy]:e;return this.valueKeys.indexOf(t)>-1},isOptionDisabled(e){return!!e.$isDisabled},getOptionLabel(e){if(Fe(e))return"";if(e.isTag)return e.label;if(e.$isLabel)return e.$groupLabel;const t=this.customLabel(e,this.label);return Fe(t)?"":t},select(e,t){if(e.$isLabel&&this.groupSelect){this.selectGroup(e);return}if(!(this.blockKeys.indexOf(t)!==-1||this.disabled||e.$isDisabled||e.$isLabel)&&!(this.max&&this.multiple&&this.internalValue.length===this.max)&&!(t==="Tab"&&!this.pointerDirty)){if(e.isTag)this.$emit("tag",e.label,this.id),this.search="",this.closeOnSelect&&!this.multiple&&this.deactivate();else{if(this.isSelected(e)){t!=="Tab"&&this.removeElement(e);return}this.multiple?this.$emit("update:modelValue",this.internalValue.concat([e])):this.$emit("update:modelValue",e),this.$emit("select",e,this.id),this.clearOnSelect&&(this.search="")}this.closeOnSelect&&this.deactivate()}},selectGroup(e){const t=this.options.find(n=>n[this.groupLabel]===e.$groupLabel);if(t){if(this.wholeGroupSelected(t)){this.$emit("remove",t[this.groupValues],this.id);const n=this.internalValue.filter(s=>t[this.groupValues].indexOf(s)===-1);this.$emit("update:modelValue",n)}else{let n=t[this.groupValues].filter(s=>!(this.isOptionDisabled(s)||this.isSelected(s)));this.max&&n.splice(this.max-this.internalValue.length),this.$emit("select",n,this.id),this.$emit("update:modelValue",this.internalValue.concat(n))}this.closeOnSelect&&this.deactivate()}},wholeGroupSelected(e){return e[this.groupValues].every(t=>this.isSelected(t)||this.isOptionDisabled(t))},wholeGroupDisabled(e){return e[this.groupValues].every(this.isOptionDisabled)},removeElement(e,t=!0){if(this.disabled||e.$isDisabled)return;if(!this.allowEmpty&&this.internalValue.length<=1){this.deactivate();return}const n=typeof e=="object"?this.valueKeys.indexOf(e[this.trackBy]):this.valueKeys.indexOf(e);if(this.multiple){const s=this.internalValue.slice(0,n).concat(this.internalValue.slice(n+1));this.$emit("update:modelValue",s)}else this.$emit("update:modelValue",null);this.$emit("remove",e,this.id),this.closeOnSelect&&t&&this.deactivate()},removeLastElement(){this.blockKeys.indexOf("Delete")===-1&&this.search.length===0&&Array.isArray(this.internalValue)&&this.internalValue.length&&this.removeElement(this.internalValue[this.internalValue.length-1],!1)},activate(){this.isOpen||this.disabled||(this.adjustPosition(),this.groupValues&&this.pointer===0&&this.filteredOptions.length&&(this.pointer=1),this.isOpen=!0,this.searchable?(this.preserveSearch||(this.search=""),this.preventAutofocus||this.$nextTick(()=>this.$refs.search&&this.$refs.search.focus())):this.preventAutofocus||typeof this.$el<"u"&&this.$el.focus(),this.$emit("open",this.id))},deactivate(){this.isOpen&&(this.isOpen=!1,this.searchable?typeof this.$refs.search<"u"&&this.$refs.search.blur():typeof this.$el<"u"&&this.$el.blur(),this.preserveSearch||(this.search=""),this.$emit("close",this.getValue(),this.id))},toggle(){this.isOpen?this.deactivate():this.activate()},adjustPosition(){if(typeof window>"u")return;const e=this.$el.getBoundingClientRect().top,t=window.innerHeight-this.$el.getBoundingClientRect().bottom;t>this.maxHeight||t>e||this.openDirection==="below"||this.openDirection==="bottom"?(this.preferredOpenDirection="below",this.optimizedHeight=Math.min(t-40,this.maxHeight)):(this.preferredOpenDirection="above",this.optimizedHeight=Math.min(e-40,this.maxHeight))}}},El={data(){return{pointer:0,pointerDirty:!1}},props:{showPointer:{type:Boolean,default:!0},optionHeight:{type:Number,default:40}},computed:{pointerPosition(){return this.pointer*this.optionHeight},visibleElements(){return this.optimizedHeight/this.optionHeight}},watch:{filteredOptions(){this.pointerAdjust()},isOpen(){this.pointerDirty=!1},pointer(){this.$refs.search&&this.$refs.search.setAttribute("aria-activedescendant",this.id+"-"+this.pointer.toString())}},methods:{optionHighlight(e,t){return{"multiselect__option--highlight":e===this.pointer&&this.showPointer,"multiselect__option--selected":this.isSelected(t)}},groupHighlight(e,t){if(!this.groupSelect)return["multiselect__option--disabled",{"multiselect__option--group":t.$isLabel}];const n=this.options.find(s=>s[this.groupLabel]===t.$groupLabel);return n&&!this.wholeGroupDisabled(n)?["multiselect__option--group",{"multiselect__option--highlight":e===this.pointer&&this.showPointer},{"multiselect__option--group-selected":this.wholeGroupSelected(n)}]:"multiselect__option--disabled"},addPointerElement({key:e}="Enter"){this.filteredOptions.length>0&&this.select(this.filteredOptions[this.pointer],e),this.pointerReset()},pointerForward(){this.pointer0?(this.pointer--,this.$refs.list.scrollTop>=this.pointerPosition&&(this.$refs.list.scrollTop=this.pointerPosition),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerBackward()):this.filteredOptions[this.pointer]&&this.filteredOptions[0].$isLabel&&!this.groupSelect&&this.pointerForward(),this.pointerDirty=!0},pointerReset(){this.closeOnSelect&&(this.pointer=0,this.$refs.list&&(this.$refs.list.scrollTop=0))},pointerAdjust(){this.pointer>=this.filteredOptions.length-1&&(this.pointer=this.filteredOptions.length?this.filteredOptions.length-1:0),this.filteredOptions.length>0&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()},pointerSet(e){this.pointer=e,this.pointerDirty=!0}}},Jt={name:"vue-multiselect",mixins:[Sl,El],compatConfig:{MODE:3,ATTR_ENUMERATED_COERCION:!1},props:{name:{type:String,default:""},modelValue:{type:null,default(){return[]}},selectLabel:{type:String,default:"Press enter to select"},selectGroupLabel:{type:String,default:"Press enter to select group"},selectedLabel:{type:String,default:"Selected"},deselectLabel:{type:String,default:"Press enter to remove"},deselectGroupLabel:{type:String,default:"Press enter to deselect group"},showLabels:{type:Boolean,default:!0},limit:{type:Number,default:99999},maxHeight:{type:Number,default:300},limitText:{type:Function,default:e=>`and ${e} more`},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},openDirection:{type:String,default:""},showNoOptions:{type:Boolean,default:!0},showNoResults:{type:Boolean,default:!0},tabindex:{type:Number,default:0}},computed:{hasOptionGroup(){return this.groupValues&&this.groupLabel&&this.groupSelect},isSingleLabelVisible(){return(this.singleValue||this.singleValue===0)&&(!this.isOpen||!this.searchable)&&!this.visibleValues.length},isPlaceholderVisible(){return!this.internalValue.length&&(!this.searchable||!this.isOpen)},visibleValues(){return this.multiple?this.internalValue.slice(0,this.limit):[]},singleValue(){return this.internalValue[0]},deselectLabelText(){return this.showLabels?this.deselectLabel:""},deselectGroupLabelText(){return this.showLabels?this.deselectGroupLabel:""},selectLabelText(){return this.showLabels?this.selectLabel:""},selectGroupLabelText(){return this.showLabels?this.selectGroupLabel:""},selectedLabelText(){return this.showLabels?this.selectedLabel:""},inputStyle(){return this.searchable||this.multiple&&this.modelValue&&this.modelValue.length?this.isOpen?{width:"100%"}:{width:"0",position:"absolute",padding:"0"}:""},contentStyle(){return this.options.length?{display:"inline-block"}:{display:"block"}},isAbove(){return this.openDirection==="above"||this.openDirection==="top"?!0:this.openDirection==="below"||this.openDirection==="bottom"?!1:this.preferredOpenDirection==="above"},showSearchInput(){return this.searchable&&(this.hasSingleSelectedSlot&&(this.visibleSingleValue||this.visibleSingleValue===0)?this.isOpen:!0)}}};const Ll={ref:"tags",class:"multiselect__tags"},Ol={class:"multiselect__tags-wrap"},$l={class:"multiselect__spinner"},Dl={key:0},Al={class:"multiselect__option"},Rl={class:"multiselect__option"},Tl=se("No elements found. Consider changing the search query."),Pl={class:"multiselect__option"},Vl=se("List is empty.");function Cl(e,t,n,s,i,o){return d(),L("div",{tabindex:e.searchable?-1:n.tabindex,class:[{"multiselect--active":e.isOpen,"multiselect--disabled":n.disabled,"multiselect--above":o.isAbove,"multiselect--has-options-group":o.hasOptionGroup},"multiselect"],onFocus:t[14]||(t[14]=l=>e.activate()),onBlur:t[15]||(t[15]=l=>e.searchable?!1:e.deactivate()),onKeydown:[t[16]||(t[16]=Y(z(l=>e.pointerForward(),["self","prevent"]),["down"])),t[17]||(t[17]=Y(z(l=>e.pointerBackward(),["self","prevent"]),["up"]))],onKeypress:t[18]||(t[18]=Y(z(l=>e.addPointerElement(l),["stop","self"]),["enter","tab"])),onKeyup:t[19]||(t[19]=Y(l=>e.deactivate(),["esc"])),role:"combobox","aria-owns":"listbox-"+e.id},[$(e.$slots,"caret",{toggle:e.toggle},()=>[x("div",{onMousedown:t[1]||(t[1]=z(l=>e.toggle(),["prevent","stop"])),class:"multiselect__select"},null,32)]),$(e.$slots,"clear",{search:e.search}),x("div",Ll,[$(e.$slots,"selection",{search:e.search,remove:e.removeElement,values:o.visibleValues,isOpen:e.isOpen},()=>[re(x("div",Ol,[(d(!0),L(W,null,j(o.visibleValues,(l,r)=>$(e.$slots,"tag",{option:l,search:e.search,remove:e.removeElement},()=>[(d(),L("span",{class:"multiselect__tag",key:r},[x("span",{textContent:I(e.getOptionLabel(l))},null,8,["textContent"]),x("i",{tabindex:"1",onKeypress:Y(z(a=>e.removeElement(l),["prevent"]),["enter"]),onMousedown:z(a=>e.removeElement(l),["prevent"]),class:"multiselect__tag-icon"},null,40,["onKeypress","onMousedown"])]))])),256))],512),[[ae,o.visibleValues.length>0]]),e.internalValue&&e.internalValue.length>n.limit?$(e.$slots,"limit",{key:0},()=>[x("strong",{class:"multiselect__strong",textContent:I(n.limitText(e.internalValue.length-n.limit))},null,8,["textContent"])]):S("v-if",!0)]),x(Ae,{name:"multiselect__loading"},{default:Q(()=>[$(e.$slots,"loading",{},()=>[re(x("div",$l,null,512),[[ae,n.loading]])])]),_:3}),e.searchable?(d(),L("input",{key:0,ref:"search",name:n.name,id:e.id,type:"text",autocomplete:"off",spellcheck:"false",placeholder:e.placeholder,style:o.inputStyle,value:e.search,disabled:n.disabled,tabindex:n.tabindex,onInput:t[2]||(t[2]=l=>e.updateSearch(l.target.value)),onFocus:t[3]||(t[3]=z(l=>e.activate(),["prevent"])),onBlur:t[4]||(t[4]=z(l=>e.deactivate(),["prevent"])),onKeyup:t[5]||(t[5]=Y(l=>e.deactivate(),["esc"])),onKeydown:[t[6]||(t[6]=Y(z(l=>e.pointerForward(),["prevent"]),["down"])),t[7]||(t[7]=Y(z(l=>e.pointerBackward(),["prevent"]),["up"])),t[9]||(t[9]=Y(z(l=>e.removeLastElement(),["stop"]),["delete"]))],onKeypress:t[8]||(t[8]=Y(z(l=>e.addPointerElement(l),["prevent","stop","self"]),["enter"])),class:"multiselect__input","aria-controls":"listbox-"+e.id},null,44,["name","id","placeholder","value","disabled","tabindex","aria-controls"])):S("v-if",!0),o.isSingleLabelVisible?(d(),L("span",{key:1,class:"multiselect__single",onMousedown:t[10]||(t[10]=z((...l)=>e.toggle&&e.toggle(...l),["prevent"]))},[$(e.$slots,"singleLabel",{option:o.singleValue},()=>[se(I(e.currentOptionLabel),1)])],32)):S("v-if",!0),o.isPlaceholderVisible?(d(),L("span",{key:2,class:"multiselect__placeholder",onMousedown:t[11]||(t[11]=z((...l)=>e.toggle&&e.toggle(...l),["prevent"]))},[$(e.$slots,"placeholder",{},()=>[se(I(e.placeholder),1)])],32)):S("v-if",!0)],512),x(Ae,{name:"multiselect"},{default:Q(()=>[re(x("div",{class:"multiselect__content-wrapper",onFocus:t[12]||(t[12]=(...l)=>e.activate&&e.activate(...l)),tabindex:"-1",onMousedown:t[13]||(t[13]=z(()=>{},["prevent"])),style:{maxHeight:e.optimizedHeight+"px"},ref:"list"},[x("ul",{class:"multiselect__content",style:o.contentStyle,role:"listbox",id:"listbox-"+e.id},[$(e.$slots,"beforeList"),e.multiple&&e.max===e.internalValue.length?(d(),L("li",Dl,[x("span",Al,[$(e.$slots,"maxElements",{},()=>[se("Maximum of "+I(e.max)+" options selected. First remove a selected option to select another.",1)])])])):S("v-if",!0),!e.max||e.internalValue.length(d(),L("li",{class:"multiselect__element",key:r,id:e.id+"-"+r,role:l&&(l.$isLabel||l.$isDisabled)?null:"option"},[l&&(l.$isLabel||l.$isDisabled)?S("v-if",!0):(d(),L("span",{key:0,class:[e.optionHighlight(r,l),"multiselect__option"],onClick:z(a=>e.select(l),["stop"]),onMouseenter:z(a=>e.pointerSet(r),["self"]),"data-select":l&&l.isTag?e.tagPlaceholder:o.selectLabelText,"data-selected":o.selectedLabelText,"data-deselect":o.deselectLabelText},[$(e.$slots,"option",{option:l,search:e.search,index:r},()=>[x("span",null,I(e.getOptionLabel(l)),1)])],42,["onClick","onMouseenter","data-select","data-selected","data-deselect"])),l&&(l.$isLabel||l.$isDisabled)?(d(),L("span",{key:1,"data-select":e.groupSelect&&o.selectGroupLabelText,"data-deselect":e.groupSelect&&o.deselectGroupLabelText,class:[e.groupHighlight(r,l),"multiselect__option"],onMouseenter:z(a=>e.groupSelect&&e.pointerSet(r),["self"]),onMousedown:z(a=>e.selectGroup(l),["prevent"])},[$(e.$slots,"option",{option:l,search:e.search,index:r},()=>[x("span",null,I(e.getOptionLabel(l)),1)])],42,["data-select","data-deselect","onMouseenter","onMousedown"])):S("v-if",!0)],8,["id","role"]))),128)):S("v-if",!0),re(x("li",null,[x("span",Rl,[$(e.$slots,"noResult",{search:e.search},()=>[Tl])])],512),[[ae,n.showNoResults&&e.filteredOptions.length===0&&e.search&&!n.loading]]),re(x("li",null,[x("span",Pl,[$(e.$slots,"noOptions",{},()=>[Vl])])],512),[[ae,n.showNoOptions&&(e.options.length===0||o.hasOptionGroup===!0&&e.filteredOptions.length===0)&&!e.search&&!n.loading]]),$(e.$slots,"afterList")],12,["id"])],36),[[ae,e.isOpen]])]),_:3})],42,["tabindex","aria-owns"])}Jt.render=Cl;const yt="/assets/bot-6afebef6.png";const Il={components:{BotIcon:yt,Multiselect:Jt},data(){return{dynamicComponent:null,messages:[],isConnected:!1,waitResponse:!1,botOptions:{botAvatarImg:yt,botTitle:"AI Bot",colorScheme:"#3f83f8",boardContentBg:"#f4f4f4",msgBubbleBgBot:"#fff",msgBubbleBgUser:"#3f83f8",inputPlaceholder:"Ask a new question"},docName:"cloudlinux-documentation",tags:[],options:[{name:"CloudLinux OS Legacy (Shared)",value:["level-0","shared"]},{name:"CloudLinux OS Shared Pro",value:["level-0","shared-pro"]},{name:"AccelerateWP",value:["level-1","accelerate-wp"]},{name:"CLN",value:["level-0","cln"]},{name:"CloudLinux Solo",value:["level-0","solo"]},{name:"CloudLinux OS Admin",value:["level-0","admin"]},{name:"CloudLinux Subsystem For Ubuntu",value:["level-0","ubuntu"]},{name:"End-user Documents",value:["level-0","user-docs"]}]}},mounted(){h(()=>import("./vue-bot-ui.common-d7beca41.js").then(e=>e.v),["assets/vue-bot-ui.common-d7beca41.js","assets/framework-dd156d1c.js"]).then(e=>{this.dynamicComponent=fn(e.VueBotUI)}),console.log("Starting connection..."),this.connection=new WebSocket("wss://doc-bot.cloudlinux.com:2096"),this.connection.onmessage=e=>{const t=JSON.parse(e.data);this.messages.push({agent:"bot",type:"markdown",text:t.text}),this.waitResponse=!1,setTimeout(()=>{this.messages.push({agent:"bot",type:"rate",id:t.id})},1e3)},this.connection.onclose=()=>{console.log("Connection closed"),this.isConnected=!1},this.connection.onopen=()=>{console.log("Successfully connected to the websocket server..."),this.isConnected=!0}},methods:{messageSendHandler(e){this.messages.push({agent:"user",type:"text",text:e.text});let t=[];this.tags.length!==this.options.length&&(t=this.tags.map(n=>n.value)),this.connection.send(JSON.stringify({type:"question",text:e.text,"doc-name":this.docName,tags:t})),this.waitResponse=!0},messageToServer(e){this.connection.send(JSON.stringify({"doc-name":this.docName,...e}))}}},Ml={id:"bot-ui"},Bl={class:"qkb-board-header__title"},zl={class:"qkb-board-header__select_field"};function ql(e,t,n,s,i,o){const l=ge("multiselect"),r=ge("ClientOnly");return d(),L(r,null,{default:Q(()=>[v("div",Ml,[i.dynamicComponent&&i.isConnected?(d(),L(De(i.dynamicComponent),{key:0,messages:i.messages,options:i.botOptions,"bot-typing":i.waitResponse,"input-disable":i.waitResponse,onMsgSend:o.messageSendHandler,onMsgToServer:o.messageToServer},{header:Q(()=>[v("div",Bl,I(i.botOptions.botTitle),1),v("div",zl,[x(l,{modelValue:i.tags,"onUpdate:modelValue":t[0]||(t[0]=a=>i.tags=a),options:i.options,multiple:!0,"close-on-select":!0,limit:3,label:"name","track-by":"value",placeholder:"Select section"},null,8,["modelValue","options"])])]),_:1},40,["messages","options","bot-typing","input-disable","onMsgSend","onMsgToServer"])):S("v-if",!0)])]),_:1})}const Hl=B(Il,[["render",ql],["__file","Chat.vue"]]),Fl=In({rootComponents:[Hl],async enhance({app:e}){e.config.globalProperties.$eventBus=Bn()},layouts:{Layout:Qi,HomeLayout:dl,NotFound:gl},setup(){kt("themeConfig",{cloudlinuxSite:"https://cloudlinux.com",defaultURL:"/",githubBranch:"master",allowGithubEdit:!0,githubMainDir:"docs",githubRepository:"cloudlinux/cloudlinux-documentation",MOBILE_BREAKPOINT:767,documents:bl,arrowDownIcon:"arrows/arrow-down.svg",githubEditIcon:"global/pen.svg",footerCustomLogo:"global/we-are-cloudlinux.svg",headerDefaultSearchIcon:"global/search.svg",siteLogo:"global/logo.svg",searchSelectIcon:"arrows/select-down.svg",headerSearchIcon:"global/header-search.svg",headerSearch:"CloudLinux Product Documentation",headerSearchPlaceholder:"Search across all CloudLinux product documentation",locales:{bottomLinks:ml,editLinkText:"Edit this page",sidebar:Pt,siteTitle:"Documentation",stayInTouch:"Stay in touch",navbarLinks:_l},productsList:["CloudLinux","Imunify","TuxCare"],productsTitle:"Products",productsURLs:["https://docs.cloudlinux.com","https://docs.imunify360.com","https://docs.tuxcare.com"],social:vl,algoliaOptions:{apiKey:"e6b9d79daf71aa98e2e2a51d4556f9d4",indexName:"cloudlinuxos",appId:"0TCNL6CGX8"},MAX_VISIBLE_RESULT:12,MAX_VISIBLE_ROWS:12,MAX_HITS_PER_PAGE:12})}}),$e=[Mn,Fl],Nl=[["v-8daa1a0e","/",{},["/index.html","/README.md"]],["v-74457223","/cln/",{},["/cln/index.html","/cln/README.md"]],["v-257d9eea","/user-docs/",{},["/user-docs/index.html","/user-docs/README.md"]],["v-19b6f117","/cln/account_settings/",{},["/cln/account_settings/index.html","/cln/account_settings/README.md"]],["v-2a99c19d","/cln/account_settings/convert.html",{},["/cln/account_settings/convert","/cln/account_settings/convert.md"]],["v-531ecc37","/cln/billing/",{},["/cln/billing/index.html","/cln/billing/README.md"]],["v-7b6817fe","/cln/cln_for_resellers/",{},["/cln/cln_for_resellers/index.html","/cln/cln_for_resellers/README.md"]],["v-09dd2362","/cln/cln_for_resellers/conversion.html",{},["/cln/cln_for_resellers/conversion","/cln/cln_for_resellers/conversion.md"]],["v-44b5ca7e","/cln/dashboard/",{},["/cln/dashboard/index.html","/cln/dashboard/README.md"]],["v-25bd0a12","/cln/introduction/",{},["/cln/introduction/index.html","/cln/introduction/README.md"]],["v-bcec460e","/cln/payment_methods/",{},["/cln/payment_methods/index.html","/cln/payment_methods/README.md"]],["v-38fce08b","/cln/purchase/",{},["/cln/purchase/index.html","/cln/purchase/README.md"]],["v-92fb1a40","/cln/spacewalk/regular.html",{},["/cln/spacewalk/regular","/cln/spacewalk/regular.md"]],["v-07bc00e4","/cln/spacewalk/reseller.html",{},["/cln/spacewalk/reseller","/cln/spacewalk/reseller.md"]],["v-67fe297f","/cln/terminology/",{},["/cln/terminology/index.html","/cln/terminology/README.md"]],["v-cc245b0c","/cln/whmcs_advantage/",{},["/cln/whmcs_advantage/index.html","/cln/whmcs_advantage/README.md"]],["v-1e772bf4","/cln/whmcs_plugin/",{},["/cln/whmcs_plugin/index.html","/cln/whmcs_plugin/README.md"]],["v-e3f0a4a2","/cln/wpos-plugin/",{},["/cln/wpos-plugin/index.html","/cln/wpos-plugin/README.md"]],["v-112bcebc","/introduction/admin/",{},["/introduction/admin/index.html","/introduction/admin/README.md"]],["v-1f45cb3a","/introduction/cloudlinux-os-editions/",{},["/introduction/cloudlinux-os-editions/index.html","/introduction/cloudlinux-os-editions/README.md"]],["v-1de76098","/introduction/solo/",{},["/introduction/solo/index.html","/introduction/solo/README.md"]],["v-314a68d6","/cloudlinuxos/alt-ea_packages/",{},["/cloudlinuxos/alt-ea_packages/index.html","/cloudlinuxos/alt-ea_packages/README.md"]],["v-8e328fb4","/cloudlinuxos/apache2nginx/",{},["/cloudlinuxos/apache2nginx/index.html","/cloudlinuxos/apache2nginx/README.md"]],["v-592f0ff0","/cloudlinuxos/cloudlinux_installation/",{},["/cloudlinuxos/cloudlinux_installation/index.html","/cloudlinuxos/cloudlinux_installation/README.md"]],["v-7a46618b","/cloudlinuxos/cloudlinux_os_components/",{},["/cloudlinuxos/cloudlinux_os_components/index.html","/cloudlinuxos/cloudlinux_os_components/README.md"]],["v-53f16644","/cloudlinuxos/cloudlinux_os_kernel/",{},["/cloudlinuxos/cloudlinux_os_kernel/index.html","/cloudlinuxos/cloudlinux_os_kernel/README.md"]],["v-81e6b46c","/cloudlinuxos/command-line_tools/",{},["/cloudlinuxos/command-line_tools/index.html","/cloudlinuxos/command-line_tools/README.md"]],["v-28178fcb","/cloudlinuxos/control_panel_integration/",{},["/cloudlinuxos/control_panel_integration/index.html","/cloudlinuxos/control_panel_integration/README.md"]],["v-3b71926e","/cloudlinuxos/deprecated/",{},["/cloudlinuxos/deprecated/index.html","/cloudlinuxos/deprecated/README.md"]],["v-189980a8","/cloudlinuxos/elevate/",{},["/cloudlinuxos/elevate/index.html","/cloudlinuxos/elevate/README.md"]],["v-76c3dae8","/cloudlinuxos/faq/",{},["/cloudlinuxos/faq/index.html","/cloudlinuxos/faq/README.md"]],["v-3c6dbe82","/cloudlinuxos/features/",{},["/cloudlinuxos/features/index.html","/cloudlinuxos/features/README.md"]],["v-023a4d6d","/cloudlinuxos/for_cloudlinux_partners/",{},["/cloudlinuxos/for_cloudlinux_partners/index.html","/cloudlinuxos/for_cloudlinux_partners/README.md"]],["v-de1629dc","/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html",{},["/cloudlinuxos/for_cloudlinux_partners/whmcs_saved","/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.md"]],["v-3bff88f8","/cloudlinuxos/limits/",{},["/cloudlinuxos/limits/index.html","/cloudlinuxos/limits/README.md"]],["v-1cfc8d0e","/cloudlinuxos/lve_manager/",{},["/cloudlinuxos/lve_manager/index.html","/cloudlinuxos/lve_manager/README.md"]],["v-71441512","/cloudlinuxos/shared-pro/",{},["/cloudlinuxos/shared-pro/index.html","/cloudlinuxos/shared-pro/README.md"]],["v-27c2a530","/ubuntu/faq/",{},["/ubuntu/faq/index.html","/ubuntu/faq/README.md"]],["v-a7fa213a","/ubuntu/features/",{},["/ubuntu/features/index.html","/ubuntu/features/README.md"]],["v-379536f4","/ubuntu/installation/",{},["/ubuntu/installation/index.html","/ubuntu/installation/README.md"]],["v-4cbda6a6","/ubuntu/introduction/",{},["/ubuntu/introduction/index.html","/ubuntu/introduction/README.md"]],["v-f23b5fb8","/ubuntu/troubleshooting/",{},["/ubuntu/troubleshooting/index.html","/ubuntu/troubleshooting/README.md"]],["v-00097080","/ubuntu/uninstalling/",{},["/ubuntu/uninstalling/index.html","/ubuntu/uninstalling/README.md"]],["v-92a4f5fa","/user-docs/user-docs-shared-pro-cloudlinux/",{},["/user-docs/user-docs-shared-pro-cloudlinux/index.html","/user-docs/user-docs-shared-pro-cloudlinux/README.md"]],["v-1e15a9dd","/user-docs/user-docs-solo-cloudlinux/",{},["/user-docs/user-docs-solo-cloudlinux/index.html","/user-docs/user-docs-solo-cloudlinux/README.md"]],["v-36e14580","/cln/shared/faq/",{},["/cln/shared/faq/index.html","/cln/shared/faq/README.md"]],["v-eb8332ea","/cln/shared/features/",{},["/cln/shared/features/index.html","/cln/shared/features/README.md"]],["v-3706649a","/404.html",{},["/404"]]];var wt=Me({name:"Vuepress",setup(){const e=Dn();return()=>ne(e.value)}}),Wl=()=>Nl.reduce((e,[t,n,s,i])=>(e.push({name:t,path:n,component:wt,meta:s},...i.map(o=>({path:o,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:wt}]),jl=vn,Gl=()=>{const e=gn({history:jl(mn("/")),routes:Wl(),scrollBehavior:(t,n,s)=>s||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var s;(t.path!==n.path||n===_n)&&([le.value]=await Promise.all([te.resolvePageData(t.name),(s=St[t.name])==null?void 0:s.__asyncLoader()]))}),e},Ul=e=>{e.component("ClientOnly",Vn),e.component("Content",Cn)},Kl=(e,t,n)=>{const s=P(t.currentRoute.value.path);_e(()=>t.currentRoute.value.path,_=>s.value=_);const i=D(()=>te.resolveLayouts(n)),o=D(()=>te.resolveRouteLocale(we.value.locales,s.value)),l=D(()=>te.resolveSiteLocaleData(we.value,o.value)),r=D(()=>te.resolvePageFrontmatter(le.value)),a=D(()=>te.resolvePageHeadTitle(le.value,l.value)),u=D(()=>te.resolvePageHead(a.value,r.value,l.value)),c=D(()=>te.resolvePageLang(le.value)),p=D(()=>te.resolvePageLayout(le.value,i.value));return e.provide(En,i),e.provide(Lt,r),e.provide($n,a),e.provide(Ot,u),e.provide($t,c),e.provide(At,p),e.provide(Rt,o),e.provide(An,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>u.value},$headTitle:{get:()=>a.value},$lang:{get:()=>c.value},$page:{get:()=>le.value},$routeLocale:{get:()=>o.value},$site:{get:()=>we.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>G}}),{layouts:i,pageData:le,pageFrontmatter:r,pageHead:u,pageHeadTitle:a,pageLang:c,pageLayout:p,routeLocale:o,siteData:we,siteLocaleData:l}},Zl=()=>{const e=On(),t=Dt(),n=P([]),s=()=>{e.value.forEach(o=>{const l=Ql(o);l&&n.value.push(l)})},i=()=>{document.documentElement.lang=t.value,n.value.forEach(o=>{o.parentNode===document.head&&document.head.removeChild(o)}),n.value.splice(0,n.value.length),e.value.forEach(o=>{const l=Xl(o);l!==null&&(document.head.appendChild(l),n.value.push(l))})};kt(Rn,i),oe(()=>{s(),i(),_e(()=>e.value,()=>i())})},Ql=([e,t,n=""])=>{const s=Object.entries(t).map(([r,a])=>fe(a)?`[${r}=${JSON.stringify(a)}]`:a===!0?`[${r}]`:"").join(""),i=`head > ${e}${s}`;return Array.from(document.querySelectorAll(i)).find(r=>r.innerText===n)||null},Xl=([e,t,n])=>{if(!fe(e))return null;const s=document.createElement(e);return wn(t)&&Object.entries(t).forEach(([i,o])=>{fe(o)?s.setAttribute(i,o):o===!0&&s.setAttribute(i,"")}),fe(n)&&s.appendChild(document.createTextNode(n)),s},Jl=bn,Yl=async()=>{var n;const e=Jl({name:"VuepressApp",setup(){var s;Zl();for(const i of $e)(s=i.setup)==null||s.call(i);return()=>[ne(yn),...$e.flatMap(({rootComponents:i=[]})=>i.map(o=>ne(o)))]}}),t=Gl();Ul(e),Kl(e,t,$e);for(const s of $e)await((n=s.enhance)==null?void 0:n.call(s,{app:e,router:t,siteData:we}));return e.use(t),{app:e,router:t}};Yl().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Yl as createVueApp}; diff --git a/assets/index.html-0dda4817.js b/assets/index.html-0dda4817.js deleted file mode 100644 index c01e8b73..00000000 --- a/assets/index.html-0dda4817.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,S as d,n as u,p as g,a4 as o,q as n,C as s,A as r,J as e}from"./framework-dd156d1c.js";const x={},y={style:{"text-align":"center"}},f={style:{"text-align":"center"}},p={style:{"text-align":"center"}},Y={style:{"text-align":"center"}},a={style:{"text-align":"center"}},m={style:{"text-align":"center"}},b={style:{"text-align":"center"}},S={style:{"text-align":"center"}},N={style:{"text-align":"center"}},L={style:{"text-align":"center"}},C={style:{"text-align":"center"}},v={style:{"text-align":"center"}},P={style:{"text-align":"center"}},k={style:{"text-align":"center"}},w={style:{"text-align":"center"}},O={style:{"text-align":"center"}},U={style:{"text-align":"center"}},A={style:{"text-align":"center"}};function R(V,t){const l=d("font");return u(),g("div",null,[t[108]||(t[108]=o('

Introduction

Disclaimer

  • All mentioned in this documentation trademarks, logos, and copyrights are property of their respective owners and are only mentioned for informative purposes.
  • Ubuntu is a registered trademark of Canonical Ltd.

CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. It is a Stable version of a free extension designed exclusively for Ubuntu® 22.04 LTS users.

Supported version of Ubuntu

We support Ubuntu 22.04 LTS.

CloudLinux OS editions comparison

CloudLinux Subsystem for Ubuntu supports the same editions as CloudLinux OS, with some exceptions.

In the table below, a feature marked with "No" for the CloudLinux Subsystem for Ubuntu means that no edition of CloudLinux Subsystem for Ubuntu supports this feature.

',8)),n("table",null,[n("thead",null,[n("tr",null,[t[1]||(t[1]=n("th",{style:{"text-align":"center"}},[n("strong",null,"Features")],-1)),t[2]||(t[2]=n("th",{style:{"text-align":"center"}},[n("strong",null,"CloudLinux OS Solo")],-1)),t[3]||(t[3]=n("th",{style:{"text-align":"center"}},[n("strong",null,"CloudLinux OS Admin")],-1)),t[4]||(t[4]=n("th",{style:{"text-align":"center"}},[n("strong",null,"CloudLinux OS Legacy (Shared)")],-1)),t[5]||(t[5]=n("th",{style:{"text-align":"center"}},[n("strong",null,"CloudLinux OS Shared Pro")],-1)),n("th",y,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[0]||(t[0]=[e("CloudLinux Subsystem For Ubuntu")])),_:1})])])])]),n("tbody",null,[n("tr",null,[t[7]||(t[7]=n("td",{style:{"text-align":"center"}},"Maximum amount of hosting accounts",-1)),t[8]||(t[8]=n("td",{style:{"text-align":"center"}},"1",-1)),t[9]||(t[9]=n("td",{style:{"text-align":"center"}},"5",-1)),t[10]||(t[10]=n("td",{style:{"text-align":"center"}},"unlimited",-1)),t[11]||(t[11]=n("td",{style:{"text-align":"center"}},"unlimited",-1)),n("td",f,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[6]||(t[6]=[e("unlimited")])),_:1})])])]),n("tr",null,[t[13]||(t[13]=n("td",{style:{"text-align":"center"}},"Resource Limits (LVE)",-1)),t[14]||(t[14]=n("td",{style:{"text-align":"center"}},"No*",-1)),t[15]||(t[15]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("**")],-1)),t[16]||(t[16]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[17]||(t[17]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",p,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[12]||(t[12]=[e("Yes")])),_:1})])])]),n("tr",null,[t[19]||(t[19]=n("td",{style:{"text-align":"center"}},"Cage FS",-1)),t[20]||(t[20]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[21]||(t[21]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[22]||(t[22]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[23]||(t[23]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",Y,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[18]||(t[18]=[e("Yes")])),_:1})])])]),n("tr",null,[t[25]||(t[25]=n("td",{style:{"text-align":"center"}},"MySQL Governor",-1)),t[26]||(t[26]=n("td",{style:{"text-align":"center"}},"No",-1)),t[27]||(t[27]=n("td",{style:{"text-align":"center"}},"No",-1)),t[28]||(t[28]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[29]||(t[29]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",a,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[24]||(t[24]=[e("Yes")])),_:1})])])]),n("tr",null,[t[31]||(t[31]=n("td",{style:{"text-align":"center"}},"PHP Selector",-1)),t[32]||(t[32]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[33]||(t[33]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[34]||(t[34]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[35]||(t[35]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",m,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[30]||(t[30]=[e("Yes")])),_:1})])])]),n("tr",null,[t[37]||(t[37]=n("td",{style:{"text-align":"center"}},"Python/Node.js Selectors",-1)),t[38]||(t[38]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),t[39]||(t[39]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),t[40]||(t[40]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),t[41]||(t[41]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),n("td",b,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[36]||(t[36]=[e("No")])),_:1})])])]),n("tr",null,[t[43]||(t[43]=n("td",{style:{"text-align":"center"}},"Ruby Selector",-1)),t[44]||(t[44]=n("td",{style:{"text-align":"center"}},"No",-1)),t[45]||(t[45]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),t[46]||(t[46]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),t[47]||(t[47]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes"),e("***")],-1)),n("td",S,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[42]||(t[42]=[e("No")])),_:1})])])]),n("tr",null,[t[49]||(t[49]=n("td",{style:{"text-align":"center"}},"HardenedPHP",-1)),t[50]||(t[50]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[51]||(t[51]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[52]||(t[52]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[53]||(t[53]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",N,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[48]||(t[48]=[e("Yes")])),_:1})])])]),n("tr",null,[t[55]||(t[55]=n("td",{style:{"text-align":"center"}},"Apache mod_lsapi PRO",-1)),t[56]||(t[56]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[57]||(t[57]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[58]||(t[58]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[59]||(t[59]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",L,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[54]||(t[54]=[e("Yes")])),_:1})])])]),n("tr",null,[t[61]||(t[61]=n("td",{style:{"text-align":"center"}},"SecureLinks",-1)),t[62]||(t[62]=n("td",{style:{"text-align":"center"}},"No",-1)),t[63]||(t[63]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[64]||(t[64]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[65]||(t[65]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",C,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[60]||(t[60]=[e("Yes")])),_:1})])])]),n("tr",null,[t[67]||(t[67]=n("td",{style:{"text-align":"center"}},"Website monitoring tool",-1)),t[68]||(t[68]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[69]||(t[69]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[70]||(t[70]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[71]||(t[71]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",v,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[66]||(t[66]=[e("No")])),_:1})])])]),n("tr",null,[t[73]||(t[73]=n("td",{style:{"text-align":"center"}},"Website monitoring alerts",-1)),t[74]||(t[74]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[75]||(t[75]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[76]||(t[76]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[77]||(t[77]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",P,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[72]||(t[72]=[e("No")])),_:1})])])]),n("tr",null,[t[79]||(t[79]=n("td",{style:{"text-align":"center"}},"Slow Site analyzer",-1)),t[80]||(t[80]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[81]||(t[81]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[82]||(t[82]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[83]||(t[83]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",k,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[78]||(t[78]=[e("No")])),_:1})])])]),n("tr",null,[t[85]||(t[85]=n("td",{style:{"text-align":"center"}},"PHP X-Ray",-1)),t[86]||(t[86]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[87]||(t[87]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[88]||(t[88]=n("td",{style:{"text-align":"center"}},"No",-1)),t[89]||(t[89]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",w,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[84]||(t[84]=[e("No")])),_:1})])])]),n("tr",null,[t[91]||(t[91]=n("td",{style:{"text-align":"center"}},"Centralized Monitoring",-1)),t[92]||(t[92]=n("td",{style:{"text-align":"center"}},"No",-1)),t[93]||(t[93]=n("td",{style:{"text-align":"center"}},"No",-1)),t[94]||(t[94]=n("td",{style:{"text-align":"center"}},"No",-1)),t[95]||(t[95]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",O,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[90]||(t[90]=[e("No")])),_:1})])])]),n("tr",null,[t[97]||(t[97]=n("td",{style:{"text-align":"center"}},"AccelerateWP",-1)),t[98]||(t[98]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[99]||(t[99]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[100]||(t[100]=n("td",{style:{"text-align":"center"}},"No",-1)),t[101]||(t[101]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",U,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[96]||(t[96]=[e("No")])),_:1})])])]),n("tr",null,[t[103]||(t[103]=n("td",{style:{"text-align":"center"}},"Support 24/7",-1)),t[104]||(t[104]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[105]||(t[105]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[106]||(t[106]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),t[107]||(t[107]=n("td",{style:{"text-align":"center"}},[n("strong",null,"Yes")],-1)),n("td",A,[n("strong",null,[s(l,{color:"#2c98f0"},{default:r(()=>t[102]||(t[102]=[e("Yes")])),_:1})])])])])]),t[109]||(t[109]=o('

* Only inodes limits are available.

** Limits are disabled by default.

*** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin, and servers with custom panels with own integration.

Supported control panels

PanelSupported
cPanel from v.102Yes
PleskNo
DirectAdminNo
Other panelsYes
No control panelYes
',5))])}const W=i(x,[["render",R],["__file","index.html.vue"]]);export{W as default}; diff --git a/assets/index.html-8ac94d64.js b/assets/index.html-2fa95f1b.js similarity index 51% rename from assets/index.html-8ac94d64.js rename to assets/index.html-2fa95f1b.js index 06702f5a..e2cf2406 100644 --- a/assets/index.html-8ac94d64.js +++ b/assets/index.html-2fa95f1b.js @@ -1,22 +1,22 @@ -import{_ as m,S as r,n as g,p as h,q as s,J as a,C as n,A as l,a4 as o}from"./framework-dd156d1c.js";const f="/images/cloudlinuxos/lve_manager/installationwizardmain_zoom70.webp",b="/images/cloudlinuxos/lve_manager/wizard-dashboard_zoom60.webp",v="/images/cloudlinuxos/lve_manager/installationwizardstep1_zoom70.webp",y="/images/cloudlinuxos/lve_manager/wizardcagefs_zoom90.webp",w="/images/cloudlinuxos/lve_manager/wizard_lsapi_zoom90.webp",x="/images/cloudlinuxos/lve_manager/wizard_mysqlgovernor_zoom90.webp",P="/images/cloudlinuxos/lve_manager/wizard_node.jsselector_zoom90.webp",S="/images/cloudlinuxos/lve_manager/wizard_ruby_selector_zoom90.webp",k="/images/cloudlinuxos/lve_manager/wizard_python_selector_zoom90.webp",C="/images/cloudlinuxos/lve_manager/wizard_php_selector_zoom90.webp",L="/images/cloudlinuxos/lve_manager/wizard_installation_status_zoom70.webp",M="/images/cloudlinuxos/lve_manager/wizardsuccess_zoom90.webp",T="/images/cloudlinuxos/lve_manager/wizardinstallremove_zoom90.webp",_="/images/cloudlinuxos/lve_manager/wizard_warning_zoom70.webp",p="/images/cloudlinuxos/lve_manager/wizard_download_btn.webp",d="/images/cloudlinuxos/lve_manager/wizard_try_again_btn.webp",u="/images/cloudlinuxos/lve_manager/wizard_close_btn.webp",A="/images/cloudlinuxos/lve_manager/wizardautoinstallationfails_zoom80.webp",E="/images/cloudlinuxos/lve_manager/wizardbroken_zoom70.webp",I="/images/cloudlinuxos/lve_manager/lvemanagermainmenu_zoom80.webp",N="/images/cloudlinuxos/lve_manager/pic_warning.webp",R="/images/cloudlinuxos/lve_manager/pic_error.webp",H="/images/cloudlinuxos/lve_manager/pic_info.webp",D="/images/cloudlinuxos/lve_manager/pic_success.webp",U="/images/cloudlinuxos/lve_manager/dashboard_zoom70.webp",q="/images/cloudlinuxos/lve_manager/PHPSelectorDashboardMalfunction.webp",j="/images/cloudlinuxos/lve_manager/man_01_zoom73.webp",z="/images/cloudlinuxos/lve_manager/userstabhoster_zoom70.webp",F="/images/cloudlinuxos/lve_manager/actionshoster.webp",O="/images/cloudlinuxos/lve_manager/historyhoster.webp",V="/images/cloudlinuxos/lve_manager/CageFSEnabledUsers.webp",W="/images/cloudlinuxos/lve_manager/GroupDisableCageFS.webp",G="/images/cloudlinuxos/lve_manager/statisticstabhoster_zoom70.webp",Y="/images/cloudlinuxos/lve_manager/history_charts_zoom70.webp",Q="/images/cloudlinuxos/lve_manager/options-general.webp",B="/images/cloudlinuxos/lve_manager/lve-faults-email-notifications.webp",K="/images/cloudlinuxos/lve_manager/faults-to-include.webp",X="/images/cloudlinuxos/lve_manager/minimum-number-of-faults-to-notify.webp",J="/images/cloudlinuxos/lve_manager/inode-limits.webp",Z="/images/cloudlinuxos/lve_manager/user-interface-settings.webp",$="/images/cloudlinuxos/lve_manager/mysql-governor-settings.webp",ee="/images/cloudlinuxos/lve_manager/options-cagefs.webp",se="/images/cloudlinuxos/lve_manager/options-nodejs.webp",ae="/images/cloudlinuxos/lve_manager/options-python-selector.webp",ne="/images/cloudlinuxos/lve_manager/packageshostertab_zoom70.webp",te="/images/cloudlinuxos/lve_manager/mysql_packages_limits.webp",le="/images/cloudlinuxos/lve_manager/mysql_packages_limits_edit.webp",oe="/images/cloudlinuxos/lve_manager/php_selector.webp",ie="/images/cloudlinuxos/lve_manager/NewSelector.webp",re="/images/cloudlinuxos/lve_manager/Domains.webp",pe="/images/cloudlinuxos/lve_manager/SelectorFilters.webp",de="/images/cloudlinuxos/lve_manager/UsePHPSelector.webp",ue="/images/cloudlinuxos/lve_manager/Error1.webp",ce="/images/cloudlinuxos/lve_manager/CageFSInit.webp",me="/images/cloudlinuxos/lve_manager/Error2.webp",ge="/images/cloudlinuxos/lve_manager/CageFSEnable.webp",he="/images/cloudlinuxos/lve_manager/Error3.webp",fe="/images/cloudlinuxos/lve_manager/RunDiagnostic.webp",be="/images/cloudlinuxos/lve_manager/Issue1.webp",ve="/images/cloudlinuxos/lve_manager/Issue2.webp",ye="/images/cloudlinuxos/lve_manager/Issue3.webp",we="/images/cloudlinuxos/lve_manager/Issue4.webp",xe="/images/cloudlinuxos/lve_manager/PythonGeneral.webp",Pe="/images/cloudlinuxos/lve_manager/PythonEnableDisable.webp",c="/images/cloudlinuxos/lve_manager/PythonEndUserIcon.webp",Se="/images/cloudlinuxos/lve_manager/PythonEnabled.webp",ke="/images/cloudlinuxos/lve_manager/PythonInstall.webp",Ce="/images/cloudlinuxos/lve_manager/PythonChangeDefaultVersion.webp",Le="/images/cloudlinuxos/lve_manager/PythonDomains.webp",Me="/images/cloudlinuxos/lve_manager/nodejsgeneral_zoom70.webp",Te="/images/cloudlinuxos/lve_manager/nodejsslider_zoom70.webp",_e="/images/cloudlinuxos/lve_manager/nodejsselectorlogo_zoom70.webp",Ae="/images/cloudlinuxos/lve_manager/nodejsenable_zoom70.webp",Ee="/images/cloudlinuxos/lve_manager/nodejsconfirmation_zoom70.webp",Ie="/images/cloudlinuxos/lve_manager/nodejsmakedefault_zoom70.webp",Ne="/images/cloudlinuxos/lve_manager/nodejsselectordomains_zoom70.webp",Re="/images/cloudlinuxos/lve_manager/WebsiteMonitoringMain.webp",He="/images/cloudlinuxos/lve_manager/Code200.webp",De="/images/cloudlinuxos/lve_manager/TopSlow.webp",Ue="/images/cloudlinuxos/lve_manager/WebsiteMonitoringPHPSiteAnalyzer.webp",qe="/images/cloudlinuxos/lve_manager/WebsiteMonitoringSlider.webp",je="/images/cloudlinuxos/lve_manager/WebsiteMonitoringSlider1.webp",ze="/images/cloudlinuxos/lve_manager/EmailNotifications.webp",Fe="/images/cloudlinuxos/lve_manager/SlowSiteAnalyzerEmailNotifications.webp",Oe="/images/cloudlinuxos/lve_manager/currentusagetabresellerr_zoom70.webp",Ve="/images/cloudlinuxos/lve_manager/historicalusageresellertab_zoom70.webp",We="/images/cloudlinuxos/lve_manager/userstabreseller_zoom70.webp",Ge="/images/cloudlinuxos/lve_manager/userstabpopup_zoom70.webp",Ye="/images/cloudlinuxos/lve_manager/statisticstabreseller_zoom70.webp",Qe="/images/cloudlinuxos/lve_manager/sevendayschartresellers_zoom70.webp",Be="/images/cloudlinuxos/lve_manager/optionsresellernotify_zoom70.webp",Ke="/images/cloudlinuxos/lve_manager/options02_zoom70.webp",Xe="/images/cloudlinuxos/lve_manager/options03_zoom70.webp",Je="/images/cloudlinuxos/lve_manager/packagesreseller_zoom70.webp",Ze="/images/cloudlinuxos/lve_manager/PHP_version_message_cPanel_admin.webp",$e="/images/cloudlinuxos/lve_manager/PHP_version_message_DirectAdmin_admin.webp",es="/images/cloudlinuxos/lve_manager/PHP_version_message_cPanel_user.webp",ss="/images/cloudlinuxos/lve_manager/PHP_version_message_DirectAdmin_user.webp",as="/images/cloudlinuxos/lve_manager/client_resource_usage.webp",ns="/images/cloudlinuxos/lve_manager/RU-dashboard.webp",ts="/images/cloudlinuxos/lve_manager/RU-no-issues.webp",ls="/images/cloudlinuxos/lve_manager/RU-current-usage.webp",os="/images/cloudlinuxos/lve_manager/RU-current-usage-table.webp",is="/images/cloudlinuxos/lve_manager/RU-faults-chart.webp",rs="/images/cloudlinuxos/lve_manager/RU-usage-table.webp",ps="/images/cloudlinuxos/lve_manager/RU-snapshots.webp",ds="/images/cloudlinuxos/lve_manager/RU-db-queries.webp",us="/images/cloudlinuxos/lve_manager/RU-HTTP-queries.webp",cs="/images/cloudlinuxos/lve_manager/TurningOnOffNotifications.webp",ms="/images/cloudlinuxos/lve_manager/PythonEUWebApp.webp",gs="/images/cloudlinuxos/lve_manager/PythonCreateApp1.webp",hs="/images/cloudlinuxos/lve_manager/PythonEnvVar.webp",fs="/images/cloudlinuxos/lve_manager/PythonStartStopApp.webp",bs="/images/cloudlinuxos/lve_manager/PythonRestartRemove.webp",vs="/images/cloudlinuxos/lve_manager/PythonSelectorEditApp.webp",ys="/images/cloudlinuxos/lve_manager/Node.jsClientPlugin.webp",ws="/images/cloudlinuxos/lve_manager/nodejsusermain_zoom70.webp",xs="/images/cloudlinuxos/lve_manager/nodejsuseruistartstop_zoom70.webp",Ps="/images/cloudlinuxos/lve_manager/nodejsuseruirestartremove_zoom70.webp",Ss="/images/cloudlinuxos/lve_manager/Node.js-Selector-edit-app.webp",ks="/images/cloudlinuxos/lve_manager/RubyClientPluginStart.webp",Cs="/images/cloudlinuxos/lve_manager/RubyClientPlugin1.webp",Ls="/images/cloudlinuxos/lve_manager/PHPSelectorClientPlugin.webp",Ms="/images/cloudlinuxos/lve_manager/php_selector_customer.webp",Ts="/images/cloudlinuxos/lve_manager/php_selector_options.webp",_s="/images/cloudlinuxos/lve_manager/MyDomainsTab.webp",As="/images/cloudlinuxos/lve_manager/UsePHPSelector1.webp",Es="/images/cloudlinuxos/lve_manager/SetVersion.webp",Is="/images/cloudlinuxos/lve_manager/lve-extension_01.webp",Ns="/images/cloudlinuxos/lve_manager/lve-extension_02.webp",Rs="/images/cloudlinuxos/lve_manager/lve-extension_03.webp",Hs="/images/cloudlinuxos/lve_manager/lve-extension_04.webp",Ds="/images/cloudlinuxos/lve_manager/lve-extension_05.webp",Us={},qs={class:"notranslate"},js={class:"tip custom-block"},zs={class:"notranslate"},Fs={id:"notifications-color-codes",tabindex:"-1"},Os={class:"notranslate"},Vs={class:"notranslate"},Ws={class:"notranslate"},Gs={class:"notranslate"},Ys={class:"notranslate"},Qs={class:"warning custom-block"},Bs={class:"notranslate"},Ks={class:"notranslate"},Xs={class:"notranslate"},Js={class:"notranslate"},Zs={class:"notranslate"},$s={class:"notranslate"},ea={class:"notranslate"},sa={class:"notranslate"},aa={class:"notranslate"},na={class:"tip custom-block"},ta={id:"selector-tab-additional-features",tabindex:"-1"},la={id:"php-selector-troubleshooting",tabindex:"-1"},oa={id:"php-selector-diagnostic-tool-and-notifications",tabindex:"-1"},ia={class:"tip custom-block"},ra={class:"tip custom-block"},pa={class:"tip custom-block"},da={class:"warning custom-block"},ua={class:"notranslate"},ca={class:"notranslate"},ma={class:"notranslate"},ga={class:"notranslate"},ha={class:"notranslate"},fa={class:"notranslate"},ba={class:"tip custom-block"},va={class:"tip custom-block"},ya={id:"php-selector-my-domains-tab",tabindex:"-1"};function wa(xa,e){const t=r("RouterLink"),i=r("Badge");return g(),h("div",null,[e[299]||(e[299]=s("h1",{id:"cloudlinux-manager-ui",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-manager-ui","aria-hidden":"true"},"#"),a(" CloudLinux Manager UI")],-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#installation-wizard"},{default:l(()=>e[0]||(e[0]=[a("Installation wizard")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#cloudlinux-manager"},{default:l(()=>e[1]||(e[1]=[a("CloudLinux Manager")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/limits/#inodes"},{default:l(()=>e[2]||(e[2]=[a("Inodes limits")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#control-panel-integration-guide"},{default:l(()=>e[3]||(e[3]=[a("Control panel integration guide")])),_:1})])]),e[300]||(e[300]=o(`

CloudLinux Manager is a plugin for most popular control panels including cPanel, Plesk, DirectAdmin, InterWorx, and CyberPanel. It allows you to control and monitor limits, and set limits on per package bases.

CloudLinux Manager is installed by default on most servers. If it is missing you can always install it by running:

yum install lvemanager
-

Installation wizard

`,4)),s("div",qs,[s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#overview"},{default:l(()=>e[4]||(e[4]=[a("Overview")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#set-up"},{default:l(()=>e[5]||(e[5]=[a("Set up")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#cloudlinux-os-components"},{default:l(()=>e[6]||(e[6]=[a("CloudLinux OS components")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#cagefs"},{default:l(()=>e[7]||(e[7]=[a("CageFS")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#lsapi"},{default:l(()=>e[8]||(e[8]=[a("LSAPI")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#mysql-governor"},{default:l(()=>e[9]||(e[9]=[a("MySQL Governor")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#node-js-selector"},{default:l(()=>e[10]||(e[10]=[a("Node.js Selector")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#ruby-selector"},{default:l(()=>e[11]||(e[11]=[a("Ruby Selector")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#python-selector"},{default:l(()=>e[12]||(e[12]=[a("Python Selector")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector"},{default:l(()=>e[13]||(e[13]=[a("PHP Selector")])),_:1})])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#installation-process-and-possible-errors"},{default:l(()=>e[14]||(e[14]=[a("Installation process and possible errors")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#wizard-fatal-error"},{default:l(()=>e[15]||(e[15]=[a("Wizard fatal error")])),_:1})])])])]),e[16]||(e[16]=o('

Overview

CloudLinux OS Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin.

Set up

As you have CloudLinux OS installed, navigate to CloudLinux OS CloudLinux Manager in your control panel. CloudLinux OS Installation Wizard starts automatically if lvemanager package is installed for the first time (not updated).

To start setting up your CloudLinux OS, click Start Wizard, otherwise click Skip Wizard, and you will be redirected to the CloudLinux Manager Dashboard.

Note

Installation statuses of all components are duplicated inside their corresponding boxes on the Dashboard. All Wizard actions are available there as well. Dashboard will be automatically updated as soon as the installation process finishes.

The next step is selecting required components to be installed.

Click Finish and Install to complete installation or click Skip Wizard to go back to the Dashboard.

You can find a complete description of the CloudLinux OS components below.

CloudLinux OS components

',12))]),e[301]||(e[301]=o('

CageFS

A virtualized per-user file system encapsulates each customer into a ‘cage’ preventing them from seeing each other files and viewing sensitive information (e.g., system files)

Toggle the sliders to enable CageFS by default for new and/or existing users.

Note

CageFS is a requirement for PHP Selector operation.

LSAPI

It is the fastest and most reliable way to serve PHP pages for Apache web-servers, a drop-in replacement for SuPHP, FCGID, RUID2, and ITK.

',8)),s("p",null,[e[18]||(e[18]=a("LSAPI requires CRIU to operate and we also recommend you to use mod_suexec. You can find details in our ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:l(()=>e[17]||(e[17]=[a("documentation")])),_:1}),e[19]||(e[19]=a("."))]),e[302]||(e[302]=s("div",{class:"notranslate"},[s("h4",{id:"mysql-governor",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#mysql-governor","aria-hidden":"true"},"#"),a(),s("strong",null,"MySQL Governor")])],-1)),e[303]||(e[303]=s("p",null,"Monitors MySQL usage to throttle abusers, preventing server overload and improving overall performance.",-1)),e[304]||(e[304]=s("p",null,[s("img",{src:x,alt:""})],-1)),s("div",js,[e[24]||(e[24]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[21]||(e[21]=s("span",{class:"notranslate"},"MySQL Governor",-1)),e[22]||(e[22]=a(" can be automatically installed only with cPanel/WHM and DirectAdmin - use CLI instructions available ")),n(t,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:l(()=>e[20]||(e[20]=[a("here")])),_:1}),e[23]||(e[23]=a(" in all other cases."))])]),e[305]||(e[305]=o('

We recommend you to create a full database backup before the MySQL Governor installation.

Node.js Selector

Allows end users to create Node.js applications and select the specific version of Node.js and other parameters.

Here you can choose versions to be installed and the version to be used as default.

Ruby Selector

Allows end users to select the specific version of Ruby they need.

Here you can choose Ruby versions to be installed.

Python Selector

Allows end users to select the default version of Python and set the required versions for installation.

Here you can choose Python versions to be installed.

PHP Selector

Allows end users to select the specific version of PHP they need, with over 120 PHP extensions to choose from.

',15)),s("p",null,[e[26]||(e[26]=a("Go to ")),e[27]||(e[27]=s("span",{class:"notranslate"},"CloudLinux Manager",-1)),e[28]||(e[28]=a(" settings to set up ")),e[29]||(e[29]=s("span",{class:"notranslate"}," PHP Selector",-1)),e[30]||(e[30]=a(" options and parameters. Read more in the ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-4"},{default:l(()=>e[25]||(e[25]=[a("PHP Selector documentation")])),_:1}),e[31]||(e[31]=a("."))]),e[306]||(e[306]=o('

Note

CageFS should be enabled for PHP Selector to operate.

When the components to be installed are selected and configured, and installation is started, you will be redirected to the CloudLinux Manager | Dashboard.

Installation process and possible errors

Installation status is displayed throughout the process in the Dashboard. Click Installing to show modules installation state.

All installed modules are displayed on the Dashboard. When installation is completed successfully, you will see the following status.

If you decide to remove failed module or a module to be installed by clicking the (X) button, a confirmation dialog will appear.

After confirming the action, the module will disappear from the list.

If module installation fails, the Installing button changes to Warning and the module indicator will turn red.

  • Click to download the error log.
  • Click to try to install a module again.
  • Click to remove a specific module from the installation queue. The module will be displayed on the Dashboard but will not be installed.

If module auto-installation fails, you will see that the module indicator turns yellow.

In this case, you can download a log for details and try to install the module again.

Wizard fatal error

In case of a fatal error, you will see the following warning.

  • Click to download the error log.
  • Click to try to install module(s) again.
  • Click to cancel installation. The canceled modules will be removed from the installation process.

You can contact our support team for further assistance anytime by submitting a ticket in our helpdesk system.

CloudLinux Manager

',22)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#notifications-color-codes"},{default:l(()=>e[32]||(e[32]=[a("Notifications color codes")])),_:1})])]),e[307]||(e[307]=o('

cPanel CloudLinux Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics.

Administrator credentials allow controlling limits for host users.

Log in as administrator to get access to the following functionality:

  • Dashboard provides a quick overview of statistics and all administrative information for server administrators.
  • Current usage tab - allows monitoring users resource usage at the moment;
  • Users tab with the list of all users allows viewing and managing all the users limits;
  • Statistics tab displays the statistics of resource usage for proper timeframe or proper users;
  • Options tab - allows setting LVE Faults email notifications for users;
  • Packages allows managing packages limits;
  • PHP Selector tab.

For more details, please go to the ImunifyAV documentation.

',6)),s("div",zs,[s("h4",Fs,[e[33]||(e[33]=s("a",{class:"header-anchor",href:"#notifications-color-codes","aria-hidden":"true"},"#",-1)),e[34]||(e[34]=a(" Notifications color codes ")),n(i,{type:"info",text:"CloudLinux Manager 5.3.7-1+"})]),e[35]||(e[35]=o('

In the CloudLinux Manager UI we use the following color codes for notifications:

  • warning
  • error
  • information
  • success

The following actions are available in the action notifications (error, success)

  • follow a link
  • copy a command
  • copy a whole traceback

The following actions are available in the system notifications (information, warning):

  • follow a link
  • copy a command
  • copy a whole message
  • mark a notification as “Read”
  • snooze a notification
',6))]),e[308]||(e[308]=o('

Dashboard

Note

Available starting from CloudLinux Manager 4.0-26.8

CloudLinux OS dashboard provides a quick overview of statistics and all administrative information for server administrators.

Go to CloudLinux Manager | Dashboard.

The CloudLinux OS Dashboard provides the following information:

',6)),s("ul",null,[e[75]||(e[75]=s("li",null,[s("span",{class:"notranslate"},"End Users hitting limits"),a(" — number of users reaching their limit in any kind of resource. Data is within the last 24 hours.")],-1)),e[76]||(e[76]=s("li",null,[s("span",{class:"notranslate"},"Resellers hitting limits"),a(" —  number of enrolled Resellers that are reaching their limit in any kind of resource. Data is within the last 24 hours.")],-1)),s("li",null,[s("span",Os,[n(t,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:l(()=>e[36]||(e[36]=[a("Node.js Selector")])),_:1})]),e[37]||(e[37]=o(' block displays the following data:
  • Node.js Selector status (Enabled/Disabled/Not installed) —  displays a current status of the Node.js Selector.

    • To manage Node.js Selector, click Manage. You will be redirected to LVE Manager | Options | Node.js Selector.

    • Click Install to install Node.js Selector, you will be redirected to CloudLinux Manager | Options | Node.js.Selector.

  • Default version — the current default version of Node.js set in your system. Click Manage to change the default version account wide.

  • Applications —  number of installed/all applications for the account.

',2))]),e[77]||(e[77]=o('
  • Ruby Selector block displays the following data:
    • Ruby Selector status (Enabled/Disabled/Not installed) — displays a current status of the Ruby Selector.

      • To manage Ruby Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Ruby Selector.

      • Click Install to install Ruby Selector, you will be redirected to CloudLinux Manager | Options | Ruby Selector.

    • Applications — number of installed/all applications for the account.

  • ',1)),s("li",null,[s("span",Vs,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-1"},{default:l(()=>e[38]||(e[38]=[a("PHP Selector")])),_:1})]),e[52]||(e[52]=a(" block displays the following data: ")),s("ul",null,[s("li",null,[e[40]||(e[40]=s("span",{class:"notranslate"},"Default version",-1)),e[41]||(e[41]=a(" — the default version of PHP binaries. Click ")),e[42]||(e[42]=s("span",{class:"notranslate"},[s("em",null,"Manage")],-1)),e[43]||(e[43]=a(" to change the default version, enable or disable ")),e[44]||(e[44]=s("span",{class:"notranslate"},"PHP Selector",-1)),e[45]||(e[45]=a(", change the list of supported versions, and choose default modules. You will be redirected to ")),e[46]||(e[46]=s("span",{class:"notranslate"},"CloudLinux Manager | PHP Selector",-1)),e[47]||(e[47]=a(".")),e[48]||(e[48]=s("br",null,null,-1)),e[49]||(e[49]=a(" PHP Selector (cPanel) has malfunctions warnings about ")),n(t,{to:"/cloudlinuxos/lve_manager/#errors"},{default:l(()=>e[39]||(e[39]=[a("the most common issues")])),_:1}),e[50]||(e[50]=a(". ")),e[51]||(e[51]=s("img",{src:q,alt:""},null,-1))])])]),s("li",null,[s("span",Ws,[n(t,{to:"/cloudlinuxos/lve_manager/#python-selector-1"},{default:l(()=>e[53]||(e[53]=[a("Python Selector")])),_:1})]),e[54]||(e[54]=o(' block displays the following data:
    • Python Selector status (Enabled/Disabled/Not installed — displays a current status of the Python Selector.

      • To manage Python Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Python Selector.

      • Click Install to install Python Selector, you will be redirected to CloudLinux Manager | Options | Python Selector.

    • Applications —  number of installed/all applications for the account.

    ',2))]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#reseller-interface"},{default:l(()=>e[55]||(e[55]=[a("Reseller Limits")])),_:1}),e[56]||(e[56]=o(' block displays the following data:
    • Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click Manage. You will be redirected to CloudLinux Manager | Users tab.
    • Reseller’s accounts with Reseller Limits/all —  the number of Reseller accounts with Reseller Limits enabled versus the total number of Reseller accounts.
    • Reseller’s End Users with enabled Reseller Limits/all — the number of end users with Reseller Limits enabled versus all End Users that belong to all resellers.
    ',2))]),s("li",null,[s("span",Gs,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor"},{default:l(()=>e[57]||(e[57]=[a("MySQL Governor")])),_:1})]),e[62]||(e[62]=a(" block displays the following data: ")),s("ul",null,[e[60]||(e[60]=o('
  • MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click Manage. You will be redirected to CloudLinux Manager | Options | MySQL Governor Mode of Operation. Click Install to install MySQL Governor.
  • ',1)),s("li",null,[s("span",Ys,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:l(()=>e[58]||(e[58]=[a("Mode")])),_:1})]),e[59]||(e[59]=o(' — displays the MySQL Governor mode of operation. Click Manage to change the mode.
    • Single — single LVE is used for all customers that go over their DB limits (deprecated).
    • Off — monitor Only, no DB query limits are applied.
    • All — all queries are run inside user's LVE.
    • Abusers — only queries that go over DB limits are executed inside that user's LVE (this is the default mode).
    ',6))]),e[61]||(e[61]=s("li",null,[s("span",{class:"notranslate"},"Database version"),a(" —  displays a current version of "),s("span",{class:"notranslate"},"MySQL/MariaDB/Percona"),a(" server installed in the system.")],-1))])]),s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:l(()=>e[63]||(e[63]=[a("CageFS")])),_:1}),e[64]||(e[64]=o(' block displays the following data:
    • CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click Manage. You will be redirected to CloudLinux Manager | Options | CageFS. Click Install to install CageFS.
    • Mode displays the current CageFS mode of operation.
    • End users — displays the number of users with CageFS enabled/all.
    ',2))]),s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:l(()=>e[65]||(e[65]=[a("ModLSAPI")])),_:1}),e[74]||(e[74]=a(" block displays the following data: ")),s("ul",null,[e[69]||(e[69]=s("li",null,[a("Mod_lsapi status ("),s("span",{class:"notranslate"},"Enabled/Disabled/Not installed"),a("). Click "),s("span",{class:"notranslate"},[s("em",null,"Install")]),a(" to install Mod_lsapi.")],-1)),e[70]||(e[70]=s("li",null,"Module version displays the running version of Mod_lsapi.",-1)),s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support"},{default:l(()=>e[66]||(e[66]=[a("Criu_status")])),_:1}),e[67]||(e[67]=a(" displays the status of lsapi_criu: ")),e[68]||(e[68]=s("ul",null,[s("li",null,[s("span",{class:"notranslate"},"Running"),a(" —  means that lsapi_criu is working.")]),s("li",null,[s("span",{class:"notranslate"},"Stopped"),a(" —  means that lsapi_criu is not working.")])],-1))]),e[71]||(e[71]=s("li",null,[s("span",{class:"notranslate"},"Total Domains"),a(" displays the total number of domains with Mod_lsapi configured as PHP handler.")],-1)),e[72]||(e[72]=s("li",null,[s("span",{class:"notranslate"},"Criu_version"),a(" displays the running version of lsapi_criu.")],-1)),e[73]||(e[73]=s("li",null,"LSAPI with connection pool.",-1))])])]),e[309]||(e[309]=o('

    Note

    • If statistics for server is absent for any reasons, you can update it by pressing the Refresh button. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.
    • If statistics collection is turned off it is not displayed. If you wish to get daily statistics for your server, please turn it on by adding cl_statistics_enabled=1 parameter to the /etc/sysconfig/cloudlinux file.
    • Data for the Dashboard is collected once per day. If you want to update data manually, press Refresh. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.

    Current usage

    Choose Current usage tab to monitor users resource usage at the moment displayed in the table.

    Current usage table provides the information on the usage of Speed, memory, IO, IOPS, Number of Processes, and Entry Processes.

    Resource usage values are being refreshed every 10 seconds which is set in Auto-refresh field. You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button. Usage values will not change until the next manual refresh.

    Tick Hide MySQL usage checkbox to hide the information on MySQL usage.

    To expand the list of users click on the number above and in the dropdown choose the number of user to be displayed on the page.

    The list of users can be filtered by Username and Domain.

    Hoster can view all types of users:

    • End users
    • Resellers
    • Reseller’s end users
    • Reseller’s end users (no Reseller limit).

    But hoster can only manage:

    • End users
    • Resellers
    • Reseller’s end users (no Reseller limit)

    To manage Reseller’s end users hoster should login as a reseller.

    Users

    ',15)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#actions"},{default:l(()=>e[78]||(e[78]=[a("Actions")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#group-actions-for-users-with-enabled-cagefs"},{default:l(()=>e[79]||(e[79]=[a("Group actions for users with enabled CageFS")])),_:1})])]),e[310]||(e[310]=o('

    Choose Users tab to view the list of all users in the system and manage their limits.

    Note

    A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller).

    • Tick Show users with CageFS enabled to show users with CageFS file system enabled.
    • Tick Show only ignored users to show users with ignored MySQL Governor.

    The following filters are available:

    • Manage by
      • End users
      • Resellers
      • Reseller's end users
      • Reseller's end users (no Reseller limit)
    • Show only
      • Ignored users - show users with ignored MySQL Governor.
      • Users with CageFS enabled

    Also, you can search user by his Username, domain or LVE ID in the Search field.

    Actions

    Click pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Enable/disable CageFS
    • Reset - to reset limits to default values
    • Apply Do not limit to set the limits to unlimited;
    • Setting the limits values:
      • SPEED
      • SPEED MYSQL
      • VMEM
      • PMEM
      • IO
      • MySQL IO
      • IOPS
      • EP
      • NPROC
      • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings).

    Click Save to save changes or Cancel to close the pop-up.

    Click on History symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period.

    Group actions for users with enabled CageFS

    ',15)),s("div",Qs,[e[83]||(e[83]=s("p",{class:"custom-block-title"},"Note",-1)),e[84]||(e[84]=s("p",null,"If CageFS is disabled, group actions are not available. See how you can enable CageFS:",-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-users"},{default:l(()=>e[80]||(e[80]=[a("Managing users")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:l(()=>e[81]||(e[81]=[a("CageFS CLI")])),_:1})]),e[82]||(e[82]=s("li",null,"via cPanel CageFS User Manager plugin.",-1))])]),e[311]||(e[311]=o('
    • View users with enabled CageFS

      To view users with enabled CageFS, click Show only >> Users with CageFS enabled

    • Disable CageFS for several users

      To disable CageFS for several users, do the following.

      • Select a particular user or select all users
      • Click CageFS >> Disable.

    Statistics

    Choose Statistics tab to view end users, resellers and resellers’ end users limits usage statistics.

    The following parameters can be displayed in the statistics table:

    • SPEED usage per user;
    • IO usage per user;
    • EP usage per user;
    • VMEM usage per user;
    • PMEM usage per user;
    • NPROC usage per user;
    • IOPS usage per user;
    • MySQL usage per user.

    Click Show and select columns from the drop-down to set which parameters should be displayed in the table.

    Statistics table can be filtered by:

    • Timeframe - to view the statistics for a particular period;
    • Limit - to view a particular limit type usage only;
    • Top LVEs - to view top used limits only;
    • LVE approaching limit - to view the limits that are approaching maximum provided value;
    • Fault LVE - the limits that have reached the maximum value.

    Click Manage to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down.

    Click chart symbol in the View column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time.

    Options

    The following sections are available to set the required options:

    ',14)),s("ul",null,[s("li",null,[s("span",Bs,[n(t,{to:"/cloudlinuxos/lve_manager/#lve-faults-email-notifications"},{default:l(()=>e[85]||(e[85]=[a("LVE Faults Email Notifications")])),_:1})]),e[86]||(e[86]=a(" - allows to set the required type of notification"))]),s("li",null,[s("span",Ks,[n(t,{to:"/cloudlinuxos/lve_manager/#faults-to-include"},{default:l(()=>e[87]||(e[87]=[a("Faults to include")])),_:1})]),e[88]||(e[88]=a(" - allows to include required limits to the notifications"))]),s("li",null,[s("span",Xs,[n(t,{to:"/cloudlinuxos/lve_manager/#minimum-number-of-faults-to-notify"},{default:l(()=>e[89]||(e[89]=[a("Minimum number of Faults to notify")])),_:1})]),e[90]||(e[90]=a(" - allows to set a number of faults required for the notification to be sent for hoster, reseller, and user"))]),s("li",null,[s("span",Js,[n(t,{to:"/cloudlinuxos/lve_manager/#inode-limits"},{default:l(()=>e[91]||(e[91]=[a("Inode limits")])),_:1})]),e[92]||(e[92]=a(" - allows to manage inode limits"))]),s("li",null,[s("span",Zs,[n(t,{to:"/cloudlinuxos/lve_manager/#user-interface-settings"},{default:l(()=>e[93]||(e[93]=[a("User interface settings")])),_:1})]),e[94]||(e[94]=a(" - allows to manage user interface settings"))]),s("li",null,[s("span",$s,[n(t,{to:"/cloudlinuxos/lve_manager/#mysql-governor-settings"},{default:l(()=>e[95]||(e[95]=[a("MySQL Governor settings")])),_:1})]),e[96]||(e[96]=a(" - allows to manage MySQL Governor settings (if MySQL Governor is installed)"))]),s("li",null,[s("span",ea,[n(t,{to:"/cloudlinuxos/lve_manager/#cagefs-2"},{default:l(()=>e[97]||(e[97]=[a("CageFS")])),_:1})]),e[98]||(e[98]=a(" - allows to manage CageFS settings"))]),s("li",null,[s("span",sa,[n(t,{to:"/cloudlinuxos/lve_manager/#node-js"},{default:l(()=>e[99]||(e[99]=[a("Node.js")])),_:1})]),e[100]||(e[100]=a(" - allows to enable/disable and manage Node.js Selector"))]),s("li",null,[s("span",aa,[n(t,{to:"/cloudlinuxos/lve_manager/#python-selector-section"},{default:l(()=>e[101]||(e[101]=[a("Python Selector")])),_:1})]),e[102]||(e[102]=a(" - allows to enable/disable and manage Python Selector"))])]),e[312]||(e[312]=o('

    LVE Faults Email Notifications

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the administrator should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose Options tab to manage LVE Faults email notifications.

    The following types of notification are available:

    • Notify Hoster - receive notifications on users and its own LVE faults
    • Notify Reseller - allows reseller receiving notifications on their user's LVE faults
    • Notify Customers - allow host's users receiving notifications on their LVE faults
    • Notify Reseller's customers - allows resller's users receiving notifications on their LVE faults

    Faults to include

    Tick checkboxes to include required limits to the notifications:

    • SPEED - include SPEED limit fault to the notification
    • IO - include I/O limit fault info to the notification
    • IOPS - include IOPS limit fault info to the notification
    • Memory - include Memory limit fault info to the notification
    • Concurrent connections - include concurrent connections limit fault info to the notification
    • NPROC - include NPROC limit fault info to the notification.

    Minimum number of Faults to notify

    Set a number of faults required for the notification to be sent for:

    • Hoster and Reseller
    • User

    Set the frequency of email notifications sending to:

    • Hoster and Reseller
    • User

    Inode limits

    Allows to reset inode limits and show/hide end-user inode usage.

    User interface settings

    Allows to manage user interface settings:

    • Hide LVE end user usage statistic - a user will not be able to see his usage statistic in his web interface
    • Hide Ruby App in web-interface - a user will not be able to see Ruby Selector in his web interface

    MySQL Governor settings

    Allows to manage MySQL Governor settings.

    MySQL Governor Mode of operation

    • Off - monitor Only – not throttle customer's queries, only monitor MySQL usage.
    • Single - single restricted LVE for all restricted customers – all queries for all restricted customers well be sharing the same LVE.
    • Abusers - use LVE for a user to restrict queries (default mode) – if a user goes over the limits, all his queries will execute inside his LVE.
    • All - always run queries inside user's LVE – limits are applied to both PHP & MySQL queries at the same time.

    MySQL Governor restrict type mode

    • Period – allows to restrict users for a specified time period
    • Limit (default mode) – allows to restrict/automatically unrestrict users that hit limits/don't hit limits during 'unlimit=time'

    Unlimit users automatically in

    Allows to unlimit users automatically if they don't hit the limits during the specified number of seconds/minutes/hours/days.

    Restricted time periods

    User restriction time period for different levels of restriction and the timeout to apply a higher restriction level.

    • Level1
    • Level2
    • Level3
    • Level4
    • Timeout

    User maximum connections

    The number of simultaneous connections of a restricted user (in the LVE mode).

    Path to script

    To be triggered when account is restricted.

    MySQL Governor restrict-log file URL and format

    • URL – where the log file is placed in the file system
    • Format – log file format: short, medium, long, very long

    MySQL Governor error-log file URL and logging level

    • URL – where the log file is placed in the file system
    • Level – logging level: error, debug

    Kill slow SELECT queries

    • Kill slow queries – stop running slow select queries
    • URL – log file URL, where killed queries will be saved
    • Timeout – number of seconds while slow request can be finished, otherwise, it will be canceled

    Gather data for detailed statistics

    Tick if yes.

    Log restricted user's queries

    Tick if yes.

    CageFS

    Allows to manage CageFS settings:

    ',56)),s("ul",null,[e[106]||(e[106]=s("li",null,[s("strong",null,"CageFS"),a(" - enable/disable CageFS")],-1)),s("li",null,[e[104]||(e[104]=s("strong",null,[s("span",{class:"notranslate"},"CageFS Skeleton")],-1)),e[105]||(e[105]=a(" - click to update CageFS skeleton. See: ")),n(t,{to:"/cloudlinuxos/control_panel_integration/#updating-cagefs-skeleton"},{default:l(()=>e[103]||(e[103]=[a("Updating CageFS skeleton")])),_:1})]),e[107]||(e[107]=s("li",null,[s("strong",null,[s("span",{class:"notranslate"},"New users will be disabled by default in CageFS")]),a(" - toggle to enable/disable new users in CageFS by default.")],-1))]),e[313]||(e[313]=s("h4",{id:"node-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js","aria-hidden":"true"},"#"),a(" Node.js")],-1)),e[314]||(e[314]=s("p",null,[s("img",{src:se,alt:""})],-1)),e[315]||(e[315]=s("p",null,"Allows to enable/disable and manage Node.js Selector.",-1)),e[316]||(e[316]=s("p",null,"See more:",-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:l(()=>e[108]||(e[108]=[a("Node.js Selector UI")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:l(()=>e[109]||(e[109]=[a("Node.js Selector")])),_:1})])]),e[317]||(e[317]=s("h4",{id:"python-selector-section",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#python-selector-section","aria-hidden":"true"},"#"),a(" Python Selector section")],-1)),e[318]||(e[318]=s("p",null,[s("img",{src:ae,alt:""})],-1)),e[319]||(e[319]=s("p",null,"Allows to enable/disable and manage Python Selector.",-1)),e[320]||(e[320]=s("p",null,"See more:",-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#python-selector-2"},{default:l(()=>e[110]||(e[110]=[a("Python Selector UI")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:l(()=>e[111]||(e[111]=[a("Python Selector")])),_:1})])]),e[321]||(e[321]=o('

    When you've done with settings, click Save Changes to apply changes.

    Packages

    Packages tab allows setting the limits for as many users as you need by editing packages of proper limits. Each account belonging to a proper package adheres to those limits.

    Note

    Limits from the package will not be applied if the package’s owner differs from the owner of the account you’re trying to apply limits to. Default limits will be applied instead.

    Choose Packages tab to view and modify:

    • limits for user packages (created by hoster);
    • limits for reseller packages (created by hoster);
    • limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)).

    To modify package limits click on a pencil symbol in Actions column in a particular package row. The following limits for this package are available for setting:

    • SPEED in percent (%);
    • Virtual memory (VMEM) (can be set as unlimited by setting 0);
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits (IO) (can be set as unlimited by setting 0);
    • IOPS limits;
    • Concurrent connections (EP);
    • Number of processes (NPROC) (can be set as unlimited by setting 0);
    • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings.)

    When limits are set click Save to apply changes or Cancel to close the window.

    Note

    VE_DEFAULT package is not a real package, it's a view for default limits. You can modify default limits on a Users tab.

    On cPanel limits of package named default are applied to users with default package assigned.

    MySQL Governor package limits

    Starting from the:

    governor-mysql - 1.2-80
    +import{_ as u,S as c,n as m,p as g,q as s,J as a,C as t,A as l,a4 as o}from"./framework-dd156d1c.js";const h="/images/cloudlinuxos/lve_manager/installationwizardmain_zoom70.webp",f="/images/cloudlinuxos/lve_manager/wizard-dashboard_zoom60.webp",b="/images/cloudlinuxos/lve_manager/installationwizardstep1_zoom70.webp",v="/images/cloudlinuxos/lve_manager/wizardcagefs_zoom90.webp",y="/images/cloudlinuxos/lve_manager/wizard_lsapi_zoom90.webp",w="/images/cloudlinuxos/lve_manager/wizard_mysqlgovernor_zoom90.webp",x="/images/cloudlinuxos/lve_manager/wizard_node.jsselector_zoom90.webp",P="/images/cloudlinuxos/lve_manager/wizard_ruby_selector_zoom90.webp",S="/images/cloudlinuxos/lve_manager/wizard_python_selector_zoom90.webp",k="/images/cloudlinuxos/lve_manager/wizard_php_selector_zoom90.webp",C="/images/cloudlinuxos/lve_manager/wizard_installation_status_zoom70.webp",L="/images/cloudlinuxos/lve_manager/wizardsuccess_zoom90.webp",M="/images/cloudlinuxos/lve_manager/wizardinstallremove_zoom90.webp",T="/images/cloudlinuxos/lve_manager/wizard_warning_zoom70.webp",i="/images/cloudlinuxos/lve_manager/wizard_download_btn.webp",r="/images/cloudlinuxos/lve_manager/wizard_try_again_btn.webp",p="/images/cloudlinuxos/lve_manager/wizard_close_btn.webp",_="/images/cloudlinuxos/lve_manager/wizardautoinstallationfails_zoom80.webp",A="/images/cloudlinuxos/lve_manager/wizardbroken_zoom70.webp",E="/images/cloudlinuxos/lve_manager/lvemanagermainmenu_zoom80.webp",I="/images/cloudlinuxos/lve_manager/pic_warning.webp",N="/images/cloudlinuxos/lve_manager/pic_error.webp",R="/images/cloudlinuxos/lve_manager/pic_info.webp",H="/images/cloudlinuxos/lve_manager/pic_success.webp",D="/images/cloudlinuxos/lve_manager/dashboard_zoom70.webp",U="/images/cloudlinuxos/lve_manager/PHPSelectorDashboardMalfunction.webp",q="/images/cloudlinuxos/lve_manager/man_01_zoom73.webp",j="/images/cloudlinuxos/lve_manager/userstabhoster_zoom70.webp",z="/images/cloudlinuxos/lve_manager/actionshoster.webp",F="/images/cloudlinuxos/lve_manager/historyhoster.webp",O="/images/cloudlinuxos/lve_manager/CageFSEnabledUsers.webp",V="/images/cloudlinuxos/lve_manager/GroupDisableCageFS.webp",W="/images/cloudlinuxos/lve_manager/statisticstabhoster_zoom70.webp",G="/images/cloudlinuxos/lve_manager/history_charts_zoom70.webp",Y="/images/cloudlinuxos/lve_manager/options-general.webp",Q="/images/cloudlinuxos/lve_manager/lve-faults-email-notifications.webp",B="/images/cloudlinuxos/lve_manager/faults-to-include.webp",K="/images/cloudlinuxos/lve_manager/minimum-number-of-faults-to-notify.webp",X="/images/cloudlinuxos/lve_manager/inode-limits.webp",J="/images/cloudlinuxos/lve_manager/user-interface-settings.webp",Z="/images/cloudlinuxos/lve_manager/mysql-governor-settings.webp",$="/images/cloudlinuxos/lve_manager/options-cagefs.webp",ee="/images/cloudlinuxos/lve_manager/options-nodejs.webp",se="/images/cloudlinuxos/lve_manager/options-python-selector.webp",ae="/images/cloudlinuxos/lve_manager/packageshostertab_zoom70.webp",ne="/images/cloudlinuxos/lve_manager/mysql_packages_limits.webp",te="/images/cloudlinuxos/lve_manager/mysql_packages_limits_edit.webp",le="/images/cloudlinuxos/lve_manager/php_selector.webp",oe="/images/cloudlinuxos/lve_manager/NewSelector.webp",ie="/images/cloudlinuxos/lve_manager/Domains.webp",re="/images/cloudlinuxos/lve_manager/SelectorFilters.webp",pe="/images/cloudlinuxos/lve_manager/UsePHPSelector.webp",de="/images/cloudlinuxos/lve_manager/Error1.webp",ue="/images/cloudlinuxos/lve_manager/CageFSInit.webp",ce="/images/cloudlinuxos/lve_manager/Error2.webp",me="/images/cloudlinuxos/lve_manager/CageFSEnable.webp",ge="/images/cloudlinuxos/lve_manager/Error3.webp",he="/images/cloudlinuxos/lve_manager/RunDiagnostic.webp",fe="/images/cloudlinuxos/lve_manager/Issue1.webp",be="/images/cloudlinuxos/lve_manager/Issue2.webp",ve="/images/cloudlinuxos/lve_manager/Issue3.webp",ye="/images/cloudlinuxos/lve_manager/Issue4.webp",we="/images/cloudlinuxos/lve_manager/PythonGeneral.webp",xe="/images/cloudlinuxos/lve_manager/PythonEnableDisable.webp",d="/images/cloudlinuxos/lve_manager/PythonEndUserIcon.webp",Pe="/images/cloudlinuxos/lve_manager/PythonEnabled.webp",Se="/images/cloudlinuxos/lve_manager/PythonInstall.webp",ke="/images/cloudlinuxos/lve_manager/PythonChangeDefaultVersion.webp",Ce="/images/cloudlinuxos/lve_manager/PythonDomains.webp",Le="/images/cloudlinuxos/lve_manager/nodejsgeneral_zoom70.webp",Me="/images/cloudlinuxos/lve_manager/nodejsslider_zoom70.webp",Te="/images/cloudlinuxos/lve_manager/nodejsselectorlogo_zoom70.webp",_e="/images/cloudlinuxos/lve_manager/nodejsenable_zoom70.webp",Ae="/images/cloudlinuxos/lve_manager/nodejsconfirmation_zoom70.webp",Ee="/images/cloudlinuxos/lve_manager/nodejsmakedefault_zoom70.webp",Ie="/images/cloudlinuxos/lve_manager/nodejsselectordomains_zoom70.webp",Ne="/images/cloudlinuxos/lve_manager/WebsiteMonitoringMain.webp",Re="/images/cloudlinuxos/lve_manager/Code200.webp",He="/images/cloudlinuxos/lve_manager/TopSlow.webp",De="/images/cloudlinuxos/lve_manager/WebsiteMonitoringPHPSiteAnalyzer.webp",Ue="/images/cloudlinuxos/lve_manager/WebsiteMonitoringSlider.webp",qe="/images/cloudlinuxos/lve_manager/WebsiteMonitoringSlider1.webp",je="/images/cloudlinuxos/lve_manager/EmailNotifications.webp",ze="/images/cloudlinuxos/lve_manager/SlowSiteAnalyzerEmailNotifications.webp",Fe="/images/cloudlinuxos/lve_manager/currentusagetabresellerr_zoom70.webp",Oe="/images/cloudlinuxos/lve_manager/historicalusageresellertab_zoom70.webp",Ve="/images/cloudlinuxos/lve_manager/userstabreseller_zoom70.webp",We="/images/cloudlinuxos/lve_manager/userstabpopup_zoom70.webp",Ge="/images/cloudlinuxos/lve_manager/statisticstabreseller_zoom70.webp",Ye="/images/cloudlinuxos/lve_manager/sevendayschartresellers_zoom70.webp",Qe="/images/cloudlinuxos/lve_manager/optionsresellernotify_zoom70.webp",Be="/images/cloudlinuxos/lve_manager/options02_zoom70.webp",Ke="/images/cloudlinuxos/lve_manager/options03_zoom70.webp",Xe="/images/cloudlinuxos/lve_manager/packagesreseller_zoom70.webp",Je="/images/cloudlinuxos/lve_manager/PHP_version_message_cPanel_admin.webp",Ze="/images/cloudlinuxos/lve_manager/PHP_version_message_DirectAdmin_admin.webp",$e="/images/cloudlinuxos/lve_manager/PHP_version_message_cPanel_user.webp",es="/images/cloudlinuxos/lve_manager/PHP_version_message_DirectAdmin_user.webp",ss="/images/cloudlinuxos/lve_manager/client_resource_usage.webp",as="/images/cloudlinuxos/lve_manager/RU-dashboard.webp",ns="/images/cloudlinuxos/lve_manager/RU-no-issues.webp",ts="/images/cloudlinuxos/lve_manager/RU-current-usage.webp",ls="/images/cloudlinuxos/lve_manager/RU-current-usage-table.webp",os="/images/cloudlinuxos/lve_manager/RU-faults-chart.webp",is="/images/cloudlinuxos/lve_manager/RU-usage-table.webp",rs="/images/cloudlinuxos/lve_manager/RU-snapshots.webp",ps="/images/cloudlinuxos/lve_manager/RU-db-queries.webp",ds="/images/cloudlinuxos/lve_manager/RU-HTTP-queries.webp",us="/images/cloudlinuxos/lve_manager/TurningOnOffNotifications.webp",cs="/images/cloudlinuxos/lve_manager/PythonEUWebApp.webp",ms="/images/cloudlinuxos/lve_manager/PythonCreateApp1.webp",gs="/images/cloudlinuxos/lve_manager/PythonEnvVar.webp",hs="/images/cloudlinuxos/lve_manager/PythonStartStopApp.webp",fs="/images/cloudlinuxos/lve_manager/PythonRestartRemove.webp",bs="/images/cloudlinuxos/lve_manager/PythonSelectorEditApp.webp",vs="/images/cloudlinuxos/lve_manager/Node.jsClientPlugin.webp",ys="/images/cloudlinuxos/lve_manager/nodejsusermain_zoom70.webp",ws="/images/cloudlinuxos/lve_manager/nodejsuseruistartstop_zoom70.webp",xs="/images/cloudlinuxos/lve_manager/nodejsuseruirestartremove_zoom70.webp",Ps="/images/cloudlinuxos/lve_manager/Node.js-Selector-edit-app.webp",Ss="/images/cloudlinuxos/lve_manager/RubyClientPluginStart.webp",ks="/images/cloudlinuxos/lve_manager/RubyClientPlugin1.webp",Cs="/images/cloudlinuxos/lve_manager/PHPSelectorClientPlugin.webp",Ls="/images/cloudlinuxos/lve_manager/php_selector_customer.webp",Ms="/images/cloudlinuxos/lve_manager/php_selector_options.webp",Ts="/images/cloudlinuxos/lve_manager/MyDomainsTab.webp",_s="/images/cloudlinuxos/lve_manager/UsePHPSelector1.webp",As="/images/cloudlinuxos/lve_manager/SetVersion.webp",Es="/images/cloudlinuxos/lve_manager/lve-extension_01.webp",Is="/images/cloudlinuxos/lve_manager/lve-extension_02.webp",Ns="/images/cloudlinuxos/lve_manager/lve-extension_03.webp",Rs="/images/cloudlinuxos/lve_manager/lve-extension_04.webp",Hs="/images/cloudlinuxos/lve_manager/lve-extension_05.webp",Ds={},Us={class:"notranslate"},qs={class:"tip custom-block"},js={class:"notranslate"},zs={class:"notranslate"},Fs={class:"notranslate"},Os={class:"notranslate"},Vs={class:"notranslate"},Ws={class:"warning custom-block"},Gs={class:"notranslate"},Ys={class:"notranslate"},Qs={class:"notranslate"},Bs={class:"notranslate"},Ks={class:"notranslate"},Xs={class:"notranslate"},Js={class:"notranslate"},Zs={class:"notranslate"},$s={class:"notranslate"},ea={class:"tip custom-block"},sa={class:"tip custom-block"},aa={class:"tip custom-block"},na={class:"tip custom-block"},ta={class:"warning custom-block"},la={class:"notranslate"},oa={class:"notranslate"},ia={class:"notranslate"},ra={class:"notranslate"},pa={class:"notranslate"},da={class:"notranslate"},ua={class:"tip custom-block"},ca={class:"tip custom-block"};function ma(ga,e){const n=c("RouterLink");return m(),g("div",null,[e[285]||(e[285]=s("h1",{id:"cloudlinux-manager-ui",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-manager-ui","aria-hidden":"true"},"#"),a(" CloudLinux Manager UI")],-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#installation-wizard"},{default:l(()=>e[0]||(e[0]=[a("Installation wizard")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#cloudlinux-manager"},{default:l(()=>e[1]||(e[1]=[a("CloudLinux Manager")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/limits/#inodes"},{default:l(()=>e[2]||(e[2]=[a("Inodes limits")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#control-panel-integration-guide"},{default:l(()=>e[3]||(e[3]=[a("Control panel integration guide")])),_:1})])]),e[286]||(e[286]=o(`

    CloudLinux Manager is a plugin for most popular control panels including cPanel, Plesk, DirectAdmin, InterWorx, and CyberPanel. It allows you to control and monitor limits, and set limits on per package bases.

    CloudLinux Manager is installed by default on most servers. If it is missing you can always install it by running:

    yum install lvemanager
    +

    Installation wizard

    `,4)),s("div",Us,[s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#overview"},{default:l(()=>e[4]||(e[4]=[a("Overview")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#set-up"},{default:l(()=>e[5]||(e[5]=[a("Set up")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#cloudlinux-os-components"},{default:l(()=>e[6]||(e[6]=[a("CloudLinux OS components")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#cagefs"},{default:l(()=>e[7]||(e[7]=[a("CageFS")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#lsapi"},{default:l(()=>e[8]||(e[8]=[a("LSAPI")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#mysql-governor"},{default:l(()=>e[9]||(e[9]=[a("MySQL Governor")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector"},{default:l(()=>e[10]||(e[10]=[a("Node.js Selector")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#ruby-selector"},{default:l(()=>e[11]||(e[11]=[a("Ruby Selector")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#python-selector"},{default:l(()=>e[12]||(e[12]=[a("Python Selector")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector"},{default:l(()=>e[13]||(e[13]=[a("PHP Selector")])),_:1})])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#installation-process-and-possible-errors"},{default:l(()=>e[14]||(e[14]=[a("Installation process and possible errors")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#wizard-fatal-error"},{default:l(()=>e[15]||(e[15]=[a("Wizard fatal error")])),_:1})])])])]),e[16]||(e[16]=o('

    Overview

    CloudLinux OS Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin.

    Set up

    As you have CloudLinux OS installed, navigate to CloudLinux OS CloudLinux Manager in your control panel. CloudLinux OS Installation Wizard starts automatically if lvemanager package is installed for the first time (not updated).

    To start setting up your CloudLinux OS, click Start Wizard, otherwise click Skip Wizard, and you will be redirected to the CloudLinux Manager Dashboard.

    Note

    Installation statuses of all components are duplicated inside their corresponding boxes on the Dashboard. All Wizard actions are available there as well. Dashboard will be automatically updated as soon as the installation process finishes.

    The next step is selecting required components to be installed.

    Click Finish and Install to complete installation or click Skip Wizard to go back to the Dashboard.

    You can find a complete description of the CloudLinux OS components below.

    CloudLinux OS components

    ',12))]),e[287]||(e[287]=o('

    CageFS

    A virtualized per-user file system encapsulates each customer into a ‘cage’ preventing them from seeing each other files and viewing sensitive information (e.g., system files)

    Toggle the sliders to enable CageFS by default for new and/or existing users.

    Note

    CageFS is a requirement for PHP Selector operation.

    LSAPI

    It is the fastest and most reliable way to serve PHP pages for Apache web-servers, a drop-in replacement for SuPHP, FCGID, RUID2, and ITK.

    ',8)),s("p",null,[e[18]||(e[18]=a("LSAPI requires CRIU to operate and we also recommend you to use mod_suexec. You can find details in our ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:l(()=>e[17]||(e[17]=[a("documentation")])),_:1}),e[19]||(e[19]=a("."))]),e[288]||(e[288]=s("div",{class:"notranslate"},[s("h4",{id:"mysql-governor",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#mysql-governor","aria-hidden":"true"},"#"),a(),s("strong",null,"MySQL Governor")])],-1)),e[289]||(e[289]=s("p",null,"Monitors MySQL usage to throttle abusers, preventing server overload and improving overall performance.",-1)),e[290]||(e[290]=s("p",null,[s("img",{src:w,alt:""})],-1)),s("div",qs,[e[24]||(e[24]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[21]||(e[21]=s("span",{class:"notranslate"},"MySQL Governor",-1)),e[22]||(e[22]=a(" can be automatically installed only with cPanel/WHM and DirectAdmin - use CLI instructions available ")),t(n,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:l(()=>e[20]||(e[20]=[a("here")])),_:1}),e[23]||(e[23]=a(" in all other cases."))])]),e[291]||(e[291]=o('

    We recommend you to create a full database backup before the MySQL Governor installation.

    Node.js Selector

    Allows end users to create Node.js applications and select the specific version of Node.js and other parameters.

    Here you can choose versions to be installed and the version to be used as default.

    Ruby Selector

    Allows end users to select the specific version of Ruby they need.

    Here you can choose Ruby versions to be installed.

    Python Selector

    Allows end users to select the default version of Python and set the required versions for installation.

    Here you can choose Python versions to be installed.

    PHP Selector

    Allows end users to select the specific version of PHP they need, with over 120 PHP extensions to choose from.

    ',15)),s("p",null,[e[26]||(e[26]=a("Go to ")),e[27]||(e[27]=s("span",{class:"notranslate"},"CloudLinux Manager",-1)),e[28]||(e[28]=a(" settings to set up ")),e[29]||(e[29]=s("span",{class:"notranslate"}," PHP Selector",-1)),e[30]||(e[30]=a(" options and parameters. Read more in the ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-4"},{default:l(()=>e[25]||(e[25]=[a("PHP Selector documentation")])),_:1}),e[31]||(e[31]=a("."))]),e[292]||(e[292]=o('

    Note

    CageFS should be enabled for PHP Selector to operate.

    When the components to be installed are selected and configured, and installation is started, you will be redirected to the CloudLinux Manager | Dashboard.

    Installation process and possible errors

    Installation status is displayed throughout the process in the Dashboard. Click Installing to show modules installation state.

    All installed modules are displayed on the Dashboard. When installation is completed successfully, you will see the following status.

    If you decide to remove failed module or a module to be installed by clicking the (X) button, a confirmation dialog will appear.

    After confirming the action, the module will disappear from the list.

    If module installation fails, the Installing button changes to Warning and the module indicator will turn red.

    • Click to download the error log.
    • Click to try to install a module again.
    • Click to remove a specific module from the installation queue. The module will be displayed on the Dashboard but will not be installed.

    If module auto-installation fails, you will see that the module indicator turns yellow.

    In this case, you can download a log for details and try to install the module again.

    Wizard fatal error

    In case of a fatal error, you will see the following warning.

    • Click to download the error log.
    • Click to try to install module(s) again.
    • Click to cancel installation. The canceled modules will be removed from the installation process.

    You can contact our support team for further assistance anytime by submitting a ticket in our helpdesk system.

    CloudLinux Manager

    ',22)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#notifications-color-codes"},{default:l(()=>e[32]||(e[32]=[a("Notifications color codes")])),_:1})])]),e[293]||(e[293]=o('

    cPanel CloudLinux Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics.

    Administrator credentials allow controlling limits for host users.

    Log in as administrator to get access to the following functionality:

    • Dashboard provides a quick overview of statistics and all administrative information for server administrators.
    • Current usage tab - allows monitoring users resource usage at the moment;
    • Users tab with the list of all users allows viewing and managing all the users limits;
    • Statistics tab displays the statistics of resource usage for proper timeframe or proper users;
    • Options tab - allows setting LVE Faults email notifications for users;
    • Packages allows managing packages limits;
    • PHP Selector tab.

    For more details, please go to the ImunifyAV documentation.

    ',6)),e[294]||(e[294]=s("div",{class:"notranslate"},[s("h4",{id:"notifications-color-codes",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#notifications-color-codes","aria-hidden":"true"},"#"),a(" Notifications color codes "),s("Badge",{type:"info",text:"CloudLinux Manager 5.3.7-1+"})]),s("p",null,"In the CloudLinux Manager UI we use the following color codes for notifications:"),s("ul",null,[s("li",null,[s("img",{src:I,alt:""}),a(" warning")]),s("li",null,[s("img",{src:N,alt:""}),a(" error")]),s("li",null,[s("img",{src:R,alt:""}),a(" information")]),s("li",null,[s("img",{src:H,alt:""}),a(" success")])]),s("p",null,"The following actions are available in the action notifications (error, success)"),s("ul",null,[s("li",null,"follow a link"),s("li",null,"copy a command"),s("li",null,"copy a whole traceback")]),s("p",null,"The following actions are available in the system notifications (information, warning):"),s("ul",null,[s("li",null,"follow a link"),s("li",null,"copy a command"),s("li",null,"copy a whole message"),s("li",null,"mark a notification as “Read”"),s("li",null,"snooze a notification")])],-1)),e[295]||(e[295]=o('

    Dashboard

    Note

    Available starting from CloudLinux Manager 4.0-26.8

    CloudLinux OS dashboard provides a quick overview of statistics and all administrative information for server administrators.

    Go to CloudLinux Manager | Dashboard.

    The CloudLinux OS Dashboard provides the following information:

    ',6)),s("ul",null,[e[72]||(e[72]=s("li",null,[s("span",{class:"notranslate"},"End Users hitting limits"),a(" — number of users reaching their limit in any kind of resource. Data is within the last 24 hours.")],-1)),e[73]||(e[73]=s("li",null,[s("span",{class:"notranslate"},"Resellers hitting limits"),a(" —  number of enrolled Resellers that are reaching their limit in any kind of resource. Data is within the last 24 hours.")],-1)),s("li",null,[s("span",js,[t(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:l(()=>e[33]||(e[33]=[a("Node.js Selector")])),_:1})]),e[34]||(e[34]=o(' block displays the following data:
    • Node.js Selector status (Enabled/Disabled/Not installed) —  displays a current status of the Node.js Selector.

      • To manage Node.js Selector, click Manage. You will be redirected to LVE Manager | Options | Node.js Selector.

      • Click Install to install Node.js Selector, you will be redirected to CloudLinux Manager | Options | Node.js.Selector.

    • Default version — the current default version of Node.js set in your system. Click Manage to change the default version account wide.

    • Applications —  number of installed/all applications for the account.

    ',2))]),e[74]||(e[74]=o('
  • Ruby Selector block displays the following data:
    • Ruby Selector status (Enabled/Disabled/Not installed) — displays a current status of the Ruby Selector.

      • To manage Ruby Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Ruby Selector.

      • Click Install to install Ruby Selector, you will be redirected to CloudLinux Manager | Options | Ruby Selector.

    • Applications — number of installed/all applications for the account.

  • ',1)),s("li",null,[s("span",zs,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-1"},{default:l(()=>e[35]||(e[35]=[a("PHP Selector")])),_:1})]),e[49]||(e[49]=a(" block displays the following data: ")),s("ul",null,[s("li",null,[e[37]||(e[37]=s("span",{class:"notranslate"},"Default version",-1)),e[38]||(e[38]=a(" — the default version of PHP binaries. Click ")),e[39]||(e[39]=s("span",{class:"notranslate"},[s("em",null,"Manage")],-1)),e[40]||(e[40]=a(" to change the default version, enable or disable ")),e[41]||(e[41]=s("span",{class:"notranslate"},"PHP Selector",-1)),e[42]||(e[42]=a(", change the list of supported versions, and choose default modules. You will be redirected to ")),e[43]||(e[43]=s("span",{class:"notranslate"},"CloudLinux Manager | PHP Selector",-1)),e[44]||(e[44]=a(".")),e[45]||(e[45]=s("br",null,null,-1)),e[46]||(e[46]=a(" PHP Selector (cPanel) has malfunctions warnings about ")),t(n,{to:"/cloudlinuxos/lve_manager/#errors"},{default:l(()=>e[36]||(e[36]=[a("the most common issues")])),_:1}),e[47]||(e[47]=a(". ")),e[48]||(e[48]=s("img",{src:U,alt:""},null,-1))])])]),s("li",null,[s("span",Fs,[t(n,{to:"/cloudlinuxos/lve_manager/#python-selector-1"},{default:l(()=>e[50]||(e[50]=[a("Python Selector")])),_:1})]),e[51]||(e[51]=o(' block displays the following data:
    • Python Selector status (Enabled/Disabled/Not installed — displays a current status of the Python Selector.

      • To manage Python Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Python Selector.

      • Click Install to install Python Selector, you will be redirected to CloudLinux Manager | Options | Python Selector.

    • Applications —  number of installed/all applications for the account.

    ',2))]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#reseller-interface"},{default:l(()=>e[52]||(e[52]=[a("Reseller Limits")])),_:1}),e[53]||(e[53]=o(' block displays the following data:
    • Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click Manage. You will be redirected to CloudLinux Manager | Users tab.
    • Reseller’s accounts with Reseller Limits/all —  the number of Reseller accounts with Reseller Limits enabled versus the total number of Reseller accounts.
    • Reseller’s End Users with enabled Reseller Limits/all — the number of end users with Reseller Limits enabled versus all End Users that belong to all resellers.
    ',2))]),s("li",null,[s("span",Os,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor"},{default:l(()=>e[54]||(e[54]=[a("MySQL Governor")])),_:1})]),e[59]||(e[59]=a(" block displays the following data: ")),s("ul",null,[e[57]||(e[57]=o('
  • MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click Manage. You will be redirected to CloudLinux Manager | Options | MySQL Governor Mode of Operation. Click Install to install MySQL Governor.
  • ',1)),s("li",null,[s("span",Vs,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:l(()=>e[55]||(e[55]=[a("Mode")])),_:1})]),e[56]||(e[56]=o(' — displays the MySQL Governor mode of operation. Click Manage to change the mode.
    • Single — single LVE is used for all customers that go over their DB limits (deprecated).
    • Off — monitor Only, no DB query limits are applied.
    • All — all queries are run inside user's LVE.
    • Abusers — only queries that go over DB limits are executed inside that user's LVE (this is the default mode).
    ',6))]),e[58]||(e[58]=s("li",null,[s("span",{class:"notranslate"},"Database version"),a(" —  displays a current version of "),s("span",{class:"notranslate"},"MySQL/MariaDB/Percona"),a(" server installed in the system.")],-1))])]),s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:l(()=>e[60]||(e[60]=[a("CageFS")])),_:1}),e[61]||(e[61]=o(' block displays the following data:
    • CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click Manage. You will be redirected to CloudLinux Manager | Options | CageFS. Click Install to install CageFS.
    • Mode displays the current CageFS mode of operation.
    • End users — displays the number of users with CageFS enabled/all.
    ',2))]),s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:l(()=>e[62]||(e[62]=[a("ModLSAPI")])),_:1}),e[71]||(e[71]=a(" block displays the following data: ")),s("ul",null,[e[66]||(e[66]=s("li",null,[a("Mod_lsapi status ("),s("span",{class:"notranslate"},"Enabled/Disabled/Not installed"),a("). Click "),s("span",{class:"notranslate"},[s("em",null,"Install")]),a(" to install Mod_lsapi.")],-1)),e[67]||(e[67]=s("li",null,"Module version displays the running version of Mod_lsapi.",-1)),s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support"},{default:l(()=>e[63]||(e[63]=[a("Criu_status")])),_:1}),e[64]||(e[64]=a(" displays the status of lsapi_criu: ")),e[65]||(e[65]=s("ul",null,[s("li",null,[s("span",{class:"notranslate"},"Running"),a(" —  means that lsapi_criu is working.")]),s("li",null,[s("span",{class:"notranslate"},"Stopped"),a(" —  means that lsapi_criu is not working.")])],-1))]),e[68]||(e[68]=s("li",null,[s("span",{class:"notranslate"},"Total Domains"),a(" displays the total number of domains with Mod_lsapi configured as PHP handler.")],-1)),e[69]||(e[69]=s("li",null,[s("span",{class:"notranslate"},"Criu_version"),a(" displays the running version of lsapi_criu.")],-1)),e[70]||(e[70]=s("li",null,"LSAPI with connection pool.",-1))])])]),e[296]||(e[296]=o('

    Note

    • If statistics for server is absent for any reasons, you can update it by pressing the Refresh button. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.
    • If statistics collection is turned off it is not displayed. If you wish to get daily statistics for your server, please turn it on by adding cl_statistics_enabled=1 parameter to the /etc/sysconfig/cloudlinux file.
    • Data for the Dashboard is collected once per day. If you want to update data manually, press Refresh. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.

    Current usage

    Choose Current usage tab to monitor users resource usage at the moment displayed in the table.

    Current usage table provides the information on the usage of Speed, memory, IO, IOPS, Number of Processes, and Entry Processes.

    Resource usage values are being refreshed every 10 seconds which is set in Auto-refresh field. You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button. Usage values will not change until the next manual refresh.

    Tick Hide MySQL usage checkbox to hide the information on MySQL usage.

    To expand the list of users click on the number above and in the dropdown choose the number of user to be displayed on the page.

    The list of users can be filtered by Username and Domain.

    Hoster can view all types of users:

    • End users
    • Resellers
    • Reseller’s end users
    • Reseller’s end users (no Reseller limit).

    But hoster can only manage:

    • End users
    • Resellers
    • Reseller’s end users (no Reseller limit)

    To manage Reseller’s end users hoster should login as a reseller.

    Users

    ',15)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#actions"},{default:l(()=>e[75]||(e[75]=[a("Actions")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#group-actions-for-users-with-enabled-cagefs"},{default:l(()=>e[76]||(e[76]=[a("Group actions for users with enabled CageFS")])),_:1})])]),e[297]||(e[297]=o('

    Choose Users tab to view the list of all users in the system and manage their limits.

    Note

    A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller).

    • Tick Show users with CageFS enabled to show users with CageFS file system enabled.
    • Tick Show only ignored users to show users with ignored MySQL Governor.

    The following filters are available:

    • Manage by
      • End users
      • Resellers
      • Reseller's end users
      • Reseller's end users (no Reseller limit)
    • Show only
      • Ignored users - show users with ignored MySQL Governor.
      • Users with CageFS enabled

    Also, you can search user by his Username, domain or LVE ID in the Search field.

    Actions

    Click pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Enable/disable CageFS
    • Reset - to reset limits to default values
    • Apply Do not limit to set the limits to unlimited;
    • Setting the limits values:
      • SPEED
      • SPEED MYSQL
      • VMEM
      • PMEM
      • IO
      • MySQL IO
      • IOPS
      • EP
      • NPROC
      • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings).

    Click Save to save changes or Cancel to close the pop-up.

    Click on History symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period.

    Group actions for users with enabled CageFS

    ',15)),s("div",Ws,[e[80]||(e[80]=s("p",{class:"custom-block-title"},"Note",-1)),e[81]||(e[81]=s("p",null,"If CageFS is disabled, group actions are not available. See how you can enable CageFS:",-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-users"},{default:l(()=>e[77]||(e[77]=[a("Managing users")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:l(()=>e[78]||(e[78]=[a("CageFS CLI")])),_:1})]),e[79]||(e[79]=s("li",null,"via cPanel CageFS User Manager plugin.",-1))])]),e[298]||(e[298]=o('
    • View users with enabled CageFS

      To view users with enabled CageFS, click Show only >> Users with CageFS enabled

    • Disable CageFS for several users

      To disable CageFS for several users, do the following.

      • Select a particular user or select all users
      • Click CageFS >> Disable.

    Statistics

    Choose Statistics tab to view end users, resellers and resellers’ end users limits usage statistics.

    The following parameters can be displayed in the statistics table:

    • SPEED usage per user;
    • IO usage per user;
    • EP usage per user;
    • VMEM usage per user;
    • PMEM usage per user;
    • NPROC usage per user;
    • IOPS usage per user;
    • MySQL usage per user.

    Click Show and select columns from the drop-down to set which parameters should be displayed in the table.

    Statistics table can be filtered by:

    • Timeframe - to view the statistics for a particular period;
    • Limit - to view a particular limit type usage only;
    • Top LVEs - to view top used limits only;
    • LVE approaching limit - to view the limits that are approaching maximum provided value;
    • Fault LVE - the limits that have reached the maximum value.

    Click Manage to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down.

    Click chart symbol in the View column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time.

    Options

    The following sections are available to set the required options:

    ',14)),s("ul",null,[s("li",null,[s("span",Gs,[t(n,{to:"/cloudlinuxos/lve_manager/#lve-faults-email-notifications"},{default:l(()=>e[82]||(e[82]=[a("LVE Faults Email Notifications")])),_:1})]),e[83]||(e[83]=a(" - allows to set the required type of notification"))]),s("li",null,[s("span",Ys,[t(n,{to:"/cloudlinuxos/lve_manager/#faults-to-include"},{default:l(()=>e[84]||(e[84]=[a("Faults to include")])),_:1})]),e[85]||(e[85]=a(" - allows to include required limits to the notifications"))]),s("li",null,[s("span",Qs,[t(n,{to:"/cloudlinuxos/lve_manager/#minimum-number-of-faults-to-notify"},{default:l(()=>e[86]||(e[86]=[a("Minimum number of Faults to notify")])),_:1})]),e[87]||(e[87]=a(" - allows to set a number of faults required for the notification to be sent for hoster, reseller, and user"))]),s("li",null,[s("span",Bs,[t(n,{to:"/cloudlinuxos/lve_manager/#inode-limits"},{default:l(()=>e[88]||(e[88]=[a("Inode limits")])),_:1})]),e[89]||(e[89]=a(" - allows to manage inode limits"))]),s("li",null,[s("span",Ks,[t(n,{to:"/cloudlinuxos/lve_manager/#user-interface-settings"},{default:l(()=>e[90]||(e[90]=[a("User interface settings")])),_:1})]),e[91]||(e[91]=a(" - allows to manage user interface settings"))]),s("li",null,[s("span",Xs,[t(n,{to:"/cloudlinuxos/lve_manager/#mysql-governor-settings"},{default:l(()=>e[92]||(e[92]=[a("MySQL Governor settings")])),_:1})]),e[93]||(e[93]=a(" - allows to manage MySQL Governor settings (if MySQL Governor is installed)"))]),s("li",null,[s("span",Js,[t(n,{to:"/cloudlinuxos/lve_manager/#cagefs-2"},{default:l(()=>e[94]||(e[94]=[a("CageFS")])),_:1})]),e[95]||(e[95]=a(" - allows to manage CageFS settings"))]),s("li",null,[s("span",Zs,[t(n,{to:"/cloudlinuxos/lve_manager/#node-js"},{default:l(()=>e[96]||(e[96]=[a("Node.js")])),_:1})]),e[97]||(e[97]=a(" - allows to enable/disable and manage Node.js Selector"))]),s("li",null,[s("span",$s,[t(n,{to:"/cloudlinuxos/lve_manager/#python-selector-section"},{default:l(()=>e[98]||(e[98]=[a("Python Selector")])),_:1})]),e[99]||(e[99]=a(" - allows to enable/disable and manage Python Selector"))])]),e[299]||(e[299]=o('

    LVE Faults Email Notifications

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the administrator should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose Options tab to manage LVE Faults email notifications.

    The following types of notification are available:

    • Notify Hoster - receive notifications on users and its own LVE faults
    • Notify Reseller - allows reseller receiving notifications on their user's LVE faults
    • Notify Customers - allow host's users receiving notifications on their LVE faults
    • Notify Reseller's customers - allows resller's users receiving notifications on their LVE faults

    Faults to include

    Tick checkboxes to include required limits to the notifications:

    • SPEED - include SPEED limit fault to the notification
    • IO - include I/O limit fault info to the notification
    • IOPS - include IOPS limit fault info to the notification
    • Memory - include Memory limit fault info to the notification
    • Concurrent connections - include concurrent connections limit fault info to the notification
    • NPROC - include NPROC limit fault info to the notification.

    Minimum number of Faults to notify

    Set a number of faults required for the notification to be sent for:

    • Hoster and Reseller
    • User

    Set the frequency of email notifications sending to:

    • Hoster and Reseller
    • User

    Inode limits

    Allows to reset inode limits and show/hide end-user inode usage.

    User interface settings

    Allows to manage user interface settings:

    • Hide LVE end user usage statistic - a user will not be able to see his usage statistic in his web interface
    • Hide Ruby App in web-interface - a user will not be able to see Ruby Selector in his web interface

    MySQL Governor settings

    Allows to manage MySQL Governor settings.

    MySQL Governor Mode of operation

    • Off - monitor Only – not throttle customer's queries, only monitor MySQL usage.
    • Single - single restricted LVE for all restricted customers – all queries for all restricted customers well be sharing the same LVE.
    • Abusers - use LVE for a user to restrict queries (default mode) – if a user goes over the limits, all his queries will execute inside his LVE.
    • All - always run queries inside user's LVE – limits are applied to both PHP & MySQL queries at the same time.

    MySQL Governor restrict type mode

    • Period – allows to restrict users for a specified time period
    • Limit (default mode) – allows to restrict/automatically unrestrict users that hit limits/don't hit limits during 'unlimit=time'

    Unlimit users automatically in

    Allows to unlimit users automatically if they don't hit the limits during the specified number of seconds/minutes/hours/days.

    Restricted time periods

    User restriction time period for different levels of restriction and the timeout to apply a higher restriction level.

    • Level1
    • Level2
    • Level3
    • Level4
    • Timeout

    User maximum connections

    The number of simultaneous connections of a restricted user (in the LVE mode).

    Path to script

    To be triggered when account is restricted.

    MySQL Governor restrict-log file URL and format

    • URL – where the log file is placed in the file system
    • Format – log file format: short, medium, long, very long

    MySQL Governor error-log file URL and logging level

    • URL – where the log file is placed in the file system
    • Level – logging level: error, debug

    Kill slow SELECT queries

    • Kill slow queries – stop running slow select queries
    • URL – log file URL, where killed queries will be saved
    • Timeout – number of seconds while slow request can be finished, otherwise, it will be canceled

    Gather data for detailed statistics

    Tick if yes.

    Log restricted user's queries

    Tick if yes.

    CageFS

    Allows to manage CageFS settings:

    ',56)),s("ul",null,[e[103]||(e[103]=s("li",null,[s("strong",null,"CageFS"),a(" - enable/disable CageFS")],-1)),s("li",null,[e[101]||(e[101]=s("strong",null,[s("span",{class:"notranslate"},"CageFS Skeleton")],-1)),e[102]||(e[102]=a(" - click to update CageFS skeleton. See: ")),t(n,{to:"/cloudlinuxos/control_panel_integration/#updating-cagefs-skeleton"},{default:l(()=>e[100]||(e[100]=[a("Updating CageFS skeleton")])),_:1})]),e[104]||(e[104]=s("li",null,[s("strong",null,[s("span",{class:"notranslate"},"New users will be disabled by default in CageFS")]),a(" - toggle to enable/disable new users in CageFS by default.")],-1))]),e[300]||(e[300]=s("h4",{id:"node-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js","aria-hidden":"true"},"#"),a(" Node.js")],-1)),e[301]||(e[301]=s("p",null,[s("img",{src:ee,alt:""})],-1)),e[302]||(e[302]=s("p",null,"Allows to enable/disable and manage Node.js Selector.",-1)),e[303]||(e[303]=s("p",null,"See more:",-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:l(()=>e[105]||(e[105]=[a("Node.js Selector UI")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:l(()=>e[106]||(e[106]=[a("Node.js Selector")])),_:1})])]),e[304]||(e[304]=s("h4",{id:"python-selector-section",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#python-selector-section","aria-hidden":"true"},"#"),a(" Python Selector section")],-1)),e[305]||(e[305]=s("p",null,[s("img",{src:se,alt:""})],-1)),e[306]||(e[306]=s("p",null,"Allows to enable/disable and manage Python Selector.",-1)),e[307]||(e[307]=s("p",null,"See more:",-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#python-selector-2"},{default:l(()=>e[107]||(e[107]=[a("Python Selector UI")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:l(()=>e[108]||(e[108]=[a("Python Selector")])),_:1})])]),e[308]||(e[308]=o('

    When you've done with settings, click Save Changes to apply changes.

    Packages

    Packages tab allows setting the limits for as many users as you need by editing packages of proper limits. Each account belonging to a proper package adheres to those limits.

    Note

    Limits from the package will not be applied if the package’s owner differs from the owner of the account you’re trying to apply limits to. Default limits will be applied instead.

    Choose Packages tab to view and modify:

    • limits for user packages (created by hoster);
    • limits for reseller packages (created by hoster);
    • limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)).

    To modify package limits click on a pencil symbol in Actions column in a particular package row. The following limits for this package are available for setting:

    • SPEED in percent (%);
    • Virtual memory (VMEM) (can be set as unlimited by setting 0);
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits (IO) (can be set as unlimited by setting 0);
    • IOPS limits;
    • Concurrent connections (EP);
    • Number of processes (NPROC) (can be set as unlimited by setting 0);
    • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings.)

    When limits are set click Save to apply changes or Cancel to close the window.

    Note

    VE_DEFAULT package is not a real package, it's a view for default limits. You can modify default limits on a Users tab.

    On cPanel limits of package named default are applied to users with default package assigned.

    MySQL Governor package limits

    Starting from the:

    governor-mysql - 1.2-80
     lvemanager - 7.8.3-1
     lve-utils - 6.4.6-1
     alt-python27-cllib - 3.2.40-1
     

    The possibility to manage Mysql Governor package limits was added. This can be done via CloudLinux Manager or via command line.

    How to install

    yum update governor-mysql lvemanager lve-utils alt-python27-cllib
    -

    Meaning

    In all previous versions admin had possibility to manage individual MySQL Governor limits like:

    • SPEED MYSQL
    • MySQL IO

    Now admin can manage all those limits for hosting packages and this will increase the convenience of administration.

    All principles of working with MySQL Governor package limits are the same as for LVE limits:

    • Initial limits for package can be settled from the the LVE extension (cPanel only) or they are inherited from the DEFAULT package (user).
    • Non default (updated) package limits will not be changed in case DEFAULT limits are changed.
    • Users in the package inherit package’s limits or have individual limits.
    • Individual user limits can be reseted to the package’s limits.
    • In case of reseller’s packages and users Mysql Governor limits can be managed only by admin.

    Manage MySQL Governor limits

    To view the package limits open this page:

    To manage the package limits edit the needed package:

    PHP Selector

    ',29)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#selector-tab"},{default:l(()=>e[112]||(e[112]=[a("Selector tab")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#selector-tab-additional-features"},{default:l(()=>e[113]||(e[113]=[a("Selector tab additional features (cPanel)")])),_:1}),e[116]||(e[116]=s("sup",null," CloudLinux Manager 6.0.1-2",-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-troubleshooting"},{default:l(()=>e[114]||(e[114]=[a("PHP Selector troubleshooting (cPanel)")])),_:1}),e[115]||(e[115]=s("sup",null," CloudLinux Manager 6.0.1-2",-1))])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-diagnostic-tool-and-notifications"},{default:l(()=>e[117]||(e[117]=[a("PHP Selector diagnostic tool and notifications")])),_:1}),e[118]||(e[118]=s("sup",null," CloudLinux Manager 6.0.1-2",-1))])]),e[322]||(e[322]=o('

    Selector tab

    Selector tab allows controlling PHP Selector settings.

    • In Selector is section choose Enabled or Disabled from the dropdown list to enable or disable PHP Selector.
    • In Default PHP version choose a proper PHP version or Native from dropdown list to apply.
    • In Hide php extensions for end-user you can enable/disable the ability for end-user to select PHP extensions in his web interface.
    • In Supported versions choose required PHP versions to support.

    Choose default modules from the list for a proper PHP version or for native.

    ',5)),s("div",na,[e[121]||(e[121]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[120]||(e[120]=a("You can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:l(()=>e[119]||(e[119]=[a("PHP Selector CLI")])),_:1})])]),s("h4",ta,[e[122]||(e[122]=s("a",{class:"header-anchor",href:"#selector-tab-additional-features","aria-hidden":"true"},"#",-1)),e[123]||(e[123]=a(" Selector tab additional features ")),n(i,{type:"info",text:"cPanel"}),e[124]||(e[124]=a()),n(i,{type:"info",text:"CloudLinux Manager 6.0.1-2"})]),e[323]||(e[323]=o('

    Go to cPanel admin interface → CloudLinux manager → Selector

    Selector tab has two sub tabs: Main settings and Domains.

    • Main settings sub tab allows to config general settings for PHP Selector
      • Selector is: allows to enable/disable PHP Selector
      • Default PHP version: allows to set PHP version by default
      • Hide PHP extensions for end-user: allows to hide PHP extensions
      • Hide "My domains" page for end-user: allows to disable such tab for end-user
      • Supported versions: allows to select supported PHP versions
    • Domains sub tab contains the list of User-Domain pairs to visualize which PHP Selector is used by a domain

    Admin can filter the list:

    If an admin clicks Use PHP selector in the Action table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and php-fpm is disabled. Users' websites will use the version set in CloudLinux OS PHP Selector (user interface). Group operation also can be used.

    ',9)),s("h4",la,[e[125]||(e[125]=s("a",{class:"header-anchor",href:"#php-selector-troubleshooting","aria-hidden":"true"},"#",-1)),e[126]||(e[126]=a(" PHP Selector troubleshooting ")),n(i,{type:"info",text:"cPanel"}),e[127]||(e[127]=a()),n(i,{type:"info",text:"CloudLinux Manager 6.0.1-2"})]),e[324]||(e[324]=s("p",null,[a("You can see the following errors in the "),s("span",{class:"notranslate"},[s("em",null,"Domains")]),a(" tab.")],-1)),e[325]||(e[325]=s("ol",null,[s("li",null,[s("span",{class:"notranslate"},"PHP Selector cannot be activated for this domain. Initialize CageFS in the Options tab first"),a(".")])],-1)),e[326]||(e[326]=s("p",null,[s("img",{src:ue,alt:""})],-1)),e[327]||(e[327]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[129]||(e[129]=a("Initialize CageFS in the Options tab (see ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[128]||(e[128]=[a("installation instructions")])),_:1}),e[130]||(e[130]=a(")."))]),e[328]||(e[328]=s("p",null,[s("img",{src:ce,alt:""})],-1)),e[329]||(e[329]=s("ol",{start:"2"},[s("li",null,[s("span",{class:"notranslate"},"PHP Selector cannot be activated for this domain. Enable CageFS for this user in the Users tab first"),a(".")])],-1)),e[330]||(e[330]=s("p",null,[s("img",{src:me,alt:""})],-1)),e[331]||(e[331]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[132]||(e[132]=a("Enable CageFS in the Users tab (see ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[131]||(e[131]=[a("installation instructions")])),_:1}),e[133]||(e[133]=a(")."))]),e[332]||(e[332]=s("p",null,[s("img",{src:ge,alt:""})],-1)),e[333]||(e[333]=s("ul",null,[s("li",null,"You can enable CageFS for one user by individual slider (for lve 1001 in the picture above)"),s("li",null,"You can enable CageFS for a group of user by the CageFS button (for lve 1002, 1003 in the picture above)")],-1)),e[334]||(e[334]=s("ol",{start:"3"},[s("li",null,"Some PHP related issues need to be resolved in order to enable domain management. Find the list of PHP related issues that prevent domain management above.")],-1)),e[335]||(e[335]=s("p",null,[s("img",{src:he,alt:""})],-1)),e[336]||(e[336]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[135]||(e[135]=a("If you cannot see Diagnostic tool notifications, you can restart it. Then you can fix the issues using ")),n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-diagnostic-tool-and-notifications"},{default:l(()=>e[134]||(e[134]=[a("these instructions")])),_:1}),e[136]||(e[136]=a("."))]),s("h4",oa,[e[137]||(e[137]=s("a",{class:"header-anchor",href:"#php-selector-diagnostic-tool-and-notifications","aria-hidden":"true"},"#",-1)),e[138]||(e[138]=a(" PHP Selector diagnostic tool and notifications ")),n(i,{type:"info",text:"CloudLinux Manager 6.0.1-2"})]),e[337]||(e[337]=s("p",null,[a("The diagnostic tool allows to catch some issues. You can start diagnostic by clicking "),s("span",{class:"notranslate"},[s("em",null,"Run diagnostic")]),a(" button.")],-1)),e[338]||(e[338]=s("p",null,[s("img",{src:fe,alt:""})],-1)),e[339]||(e[339]=s("p",null,"The most popular errors and solutions:",-1)),e[340]||(e[340]=s("ol",null,[s("li",null,"Your PHP Handler does not support CLoudLinux OS PHP Selector")],-1)),e[341]||(e[341]=s("p",null,[s("img",{src:be,alt:""})],-1)),s("p",null,[e[140]||(e[140]=s("strong",null,"Solution",-1)),e[141]||(e[141]=a(": install ")),e[142]||(e[142]=s("code",null,"mod_suexec",-1)),e[143]||(e[143]=a(" (see instructions ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-5"},{default:l(()=>e[139]||(e[139]=[a("here")])),_:1}),e[144]||(e[144]=a(") and then run the following command:"))]),e[342]||(e[342]=o(`
    cagefsctl --force-update
    -
    1. Incorrect config file format

    Solution: correct the file format via SSH.

    1. Some domains have neither PHP version selected in MultiPHP Manager no system default version or have php-fpm enabled.

    ',6)),s("p",null,[e[146]||(e[146]=s("strong",null,"Solution",-1)),e[147]||(e[147]=a(": see ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[145]||(e[145]=[a("installation instructions")])),_:1}),e[148]||(e[148]=a(" for cPanel users"))]),e[343]||(e[343]=s("ol",{start:"4"},[s("li",null,"MultiPHP system default version is not ea-php")],-1)),e[344]||(e[344]=s("p",null,[s("img",{src:we,alt:""})],-1)),s("p",null,[e[150]||(e[150]=s("strong",null,"Solution",-1)),e[151]||(e[151]=a(": see ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[149]||(e[149]=[a("installation instructions")])),_:1}),e[152]||(e[152]=a(" for cPanel users"))]),s("p",null,[e[154]||(e[154]=a("In the CloudLinux Manager v.6.0.6-1 the diagnostic tool can not catch problems with CageFS. See ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[153]||(e[153]=[a("installation instructions")])),_:1}),e[155]||(e[155]=a(" for cPanel users."))]),e[345]||(e[345]=s("h3",{id:"python-selector-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#python-selector-1","aria-hidden":"true"},"#"),a(" Python Selector")],-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-enable-disable-python-selector"},{default:l(()=>e[156]||(e[156]=[a("How to enable/disable Python Selector")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-manage-python-selector"},{default:l(()=>e[157]||(e[157]=[a("How to manage Python Selector")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#enable-and-disable-particular-python-version"},{default:l(()=>e[158]||(e[158]=[a("Enable and disable particular Python version")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#install-and-delete-particular-python-version"},{default:l(()=>e[159]||(e[159]=[a("Install and delete particular Python version")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#make-a-particular-python-version-as-a-default"},{default:l(()=>e[160]||(e[160]=[a("Make a particular Python version as a default")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#applications-column"},{default:l(()=>e[161]||(e[161]=[a("Applications column")])),_:1})])]),e[346]||(e[346]=o('

    Hoster interface allows to enable and disable Python Selector and manage individual Python versions.

    Go to CloudLinux Manager → Options Tab → Python Selector.

    A list of installed Python versions is displayed. There are several columns in the list.

    • Version — displays Python version.
    • Path — Python package location.
    • Applications — number of applications that use this Python version. Click on an application number to go to the list of applications.
    • Enabled — displays if particular Python version is enabled.
    • Actions — allows to install, delete, and make default a particular Python version.

    To display all changes immediately click Refresh.

    How to enable/disable Python Selector

    To enable Python Selector move a slider to Enable and complete the action by clicking Agree or click Cancel to close the popup. To disable Python Selector move a slider back to Disable.

    Note

    If you disable Python, all users won't be able to manage their applications

    Note

    Python Selector icon in end user interface is hidden when Python is disabled.

    How to manage Python Selector

    In the list of installed Python versions you can enable and disable, install and delete, and set a particular Python version as a default.

    Enable and disable particular Python version

    To enable particular Python version do the following:

    • Move a disabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To disable particular Python version do the following:

    • Move an enabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Install and delete particular Python version

    To install particular Python version do the following:

    • Click Install button in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To delete particular Python version do the following:

    • Click Bin icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to start uninstalling process. Or close popup without changes by clicking Cancel button.

    Note

    It is impossible:

    • to remove default Python version
    • to remove version with applications
    • to install or remove version if another installation/uninstalling process is running

    Make a particular Python version as a default

    ',28)),s("div",ia,[e[165]||(e[165]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[163]||(e[163]=a("You can set a particular Python version as a default version in the CloudLinux OS ")),n(t,{to:"/cloudlinuxos/lve_manager/#cloudlinux-installation-wizard"},{default:l(()=>e[162]||(e[162]=[a("installation wizard")])),_:1}),e[164]||(e[164]=a(" during the first installation."))])]),e[347]||(e[347]=o('

    To make a particular Python version as a default version, do the following:

    • Click Double-Tick icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Note

    It is impossible to make disabled Python version as a default version

    Applications column

    To view and operate with the list of domains with Python versions click a number in the Applications column for a particular Python version. A section with a list of Domains for particular Python version will be displayed.

    Domains are displayed by three. To load more domains click Load More button.

    To change Python version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation popup will be displayed.
    • In the popup choose Python version from a dropdown.
    • Click Change to confirm the action or Cancel to close the popup.
    • To refresh state of applications in current version you can click Refresh.

    Note

    All packages of the application(s) will be re-installed.

    ',11)),s("div",ra,[e[168]||(e[168]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[167]||(e[167]=a("You can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#hoster"},{default:l(()=>e[166]||(e[166]=[a("Python Selector CLI")])),_:1})])]),s("p",null,[e[170]||(e[170]=a("See also: ")),n(t,{to:"/cloudlinuxos/lve_manager/#python-selector-client-plugin"},{default:l(()=>e[169]||(e[169]=[a("Python Selector client plugin")])),_:1})]),e[348]||(e[348]=s("h3",{id:"node-js-selector-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js-selector-1","aria-hidden":"true"},"#"),a(" Node.js Selector")],-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-enable-disable-node-js"},{default:l(()=>e[171]||(e[171]=[a("How to enable/disable Node.js")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-manage-node-js"},{default:l(()=>e[172]||(e[172]=[a("How to manage Node.js")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#enable-and-disable-particular-node-js-version"},{default:l(()=>e[173]||(e[173]=[a("Enable and disable particular Node.js version")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#install-and-delete-particular-node-js-version"},{default:l(()=>e[174]||(e[174]=[a("Install and delete particular Node.js version")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#make-a-particular-node-js-version-as-a-default"},{default:l(()=>e[175]||(e[175]=[a("Make a particular Node.js version as a default")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#applications-column-2"},{default:l(()=>e[176]||(e[176]=[a("Applications column")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#application-error-log"},{default:l(()=>e[177]||(e[177]=[a("Application error log")])),_:1})])]),e[349]||(e[349]=o('

    Hoster interface allows to enable and disable Node.js, and manage individual Node.js versions.

    Go to CloudLinux Manager → Options Tab → Node.js Section. A list of installed Node.js versions is displayed. There are several columns in the list.

    • Version — displays Node.js version.
    • Path — Node.js package location.
    • Applications — number of applications that use this Node.js version. Click on a digit to go to the list of applications.
    • Enabled — displays if particular Node.js version is enabled.
    • Actions — allows to install, delete, and make default a particular Node.js version.

    To display all changes immediately click Refresh link.

    How to enable/disable Node.js

    • To enable Node.js move the slider to Enable.
    • To disable Node.js move the slider back to Disable.

    Note

    If you disable Node.js, its version for all your applications will not be changed, but you can not add a new application to this version.

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    How to manage Node.js

    The list of installed Node.js versions allows to enable and disable, install and delete, and set a particular Node.js version as a default.

    Enable and disable particular Node.js version

    To enable particular Node.js version do the following:

    • Move a disabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To disable particular Node.js version do the following:

    • Move an enabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Install and delete particular Node.js version

    To install particular Node.js version do the following:

    • Click Install button in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To delete particular Node.js version do the following:

    • Click Bin icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to start uninstall process.
    • Or just close a pop-up without any changes.

    Note

    It is impossible:

    • to remove default Node.js version;
    • to remove version with applications;
    • to install or remove version if another installation/uninstall process is running.

    Make a particular Node.js version as a default

    To make a particular Node.js version as a default do the following:

    • Click Double-Tick icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Note

    It is impossible to make a disabled version default.

    Applications column

    To view and operate with the list of domains with Node.js versions click on a number in the Applications column for a particular Node.js version. A section with a list of Domains for particular Node.js version will be displayed.

    Domains are displayed by three. To load more domains click on Load More button.

    To change Node.js version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation pop-up will be displayed.
    • In the pop-up choose Node.js version from a drop-down.
    • Click Change to confirm the action or Cancel to close the pop-up.
    • To refresh state of applications in current version you can click Refresh link.

    Note

    All packages of the application(s) will be re-installed.

    ',38)),s("div",pa,[e[180]||(e[180]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[179]||(e[179]=a("You can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#hoster-2"},{default:l(()=>e[178]||(e[178]=[a("Node.js Selector CLI")])),_:1})])]),s("p",null,[e[182]||(e[182]=a("See also: ")),n(t,{to:"/cloudlinuxos/lve_manager/#node-js-selector-client-plugin"},{default:l(()=>e[181]||(e[181]=[a("Node.js Selector client plugin")])),_:1})]),e[350]||(e[350]=o(`

    Application error log

    Since alt-mod-passenger version 5.3.7-3 we have included support for the PassengerAppLogFile directive.

    Syntax: PassengerAppLogFile path
    +

    Meaning

    In all previous versions admin had possibility to manage individual MySQL Governor limits like:

    • SPEED MYSQL
    • MySQL IO

    Now admin can manage all those limits for hosting packages and this will increase the convenience of administration.

    All principles of working with MySQL Governor package limits are the same as for LVE limits:

    • Initial limits for package can be settled from the the LVE extension (cPanel only) or they are inherited from the DEFAULT package (user).
    • Non default (updated) package limits will not be changed in case DEFAULT limits are changed.
    • Users in the package inherit package’s limits or have individual limits.
    • Individual user limits can be reseted to the package’s limits.
    • In case of reseller’s packages and users Mysql Governor limits can be managed only by admin.

    Manage MySQL Governor limits

    To view the package limits open this page:

    To manage the package limits edit the needed package:

    PHP Selector

    ',29)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#selector-tab"},{default:l(()=>e[109]||(e[109]=[a("Selector tab")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#selector-tab-additional-features"},{default:l(()=>e[110]||(e[110]=[a("Selector tab additional features (cPanel)")])),_:1}),e[113]||(e[113]=s("sup",null," CloudLinux Manager 6.0.1-2",-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-troubleshooting"},{default:l(()=>e[111]||(e[111]=[a("PHP Selector troubleshooting (cPanel)")])),_:1}),e[112]||(e[112]=s("sup",null," CloudLinux Manager 6.0.1-2",-1))])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-diagnostic-tool-and-notifications"},{default:l(()=>e[114]||(e[114]=[a("PHP Selector diagnostic tool and notifications")])),_:1}),e[115]||(e[115]=s("sup",null," CloudLinux Manager 6.0.1-2",-1))])]),e[309]||(e[309]=o('

    Selector tab

    Selector tab allows controlling PHP Selector settings.

    • In Selector is section choose Enabled or Disabled from the dropdown list to enable or disable PHP Selector.
    • In Default PHP version choose a proper PHP version or Native from dropdown list to apply.
    • In Hide php extensions for end-user you can enable/disable the ability for end-user to select PHP extensions in his web interface.
    • In Supported versions choose required PHP versions to support.

    Choose default modules from the list for a proper PHP version or for native.

    ',5)),s("div",ea,[e[118]||(e[118]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[117]||(e[117]=a("You can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:l(()=>e[116]||(e[116]=[a("PHP Selector CLI")])),_:1})])]),e[310]||(e[310]=s("h4",{id:"selector-tab-additional-features",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#selector-tab-additional-features","aria-hidden":"true"},"#"),a(" Selector tab additional features "),s("Badge",{type:"info",text:"cPanel"}),a(),s("Badge",{type:"info",text:"CloudLinux Manager 6.0.1-2"})],-1)),e[311]||(e[311]=o('

    Go to cPanel admin interface → CloudLinux manager → Selector

    Selector tab has two sub tabs: Main settings and Domains.

    • Main settings sub tab allows to config general settings for PHP Selector
      • Selector is: allows to enable/disable PHP Selector
      • Default PHP version: allows to set PHP version by default
      • Hide PHP extensions for end-user: allows to hide PHP extensions
      • Hide "My domains" page for end-user: allows to disable such tab for end-user
      • Supported versions: allows to select supported PHP versions
    • Domains sub tab contains the list of User-Domain pairs to visualize which PHP Selector is used by a domain

    Admin can filter the list:

    If an admin clicks Use PHP selector in the Action table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and php-fpm is disabled. Users' websites will use the version set in CloudLinux OS PHP Selector (user interface). Group operation also can be used.

    ',9)),e[312]||(e[312]=s("h4",{id:"php-selector-troubleshooting",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#php-selector-troubleshooting","aria-hidden":"true"},"#"),a(" PHP Selector troubleshooting "),s("Badge",{type:"info",text:"cPanel"}),a(),s("Badge",{type:"info",text:"CloudLinux Manager 6.0.1-2"})],-1)),e[313]||(e[313]=s("p",null,[a("You can see the following errors in the "),s("span",{class:"notranslate"},[s("em",null,"Domains")]),a(" tab.")],-1)),e[314]||(e[314]=s("ol",null,[s("li",null,[s("span",{class:"notranslate"},"PHP Selector cannot be activated for this domain. Initialize CageFS in the Options tab first"),a(".")])],-1)),e[315]||(e[315]=s("p",null,[s("img",{src:de,alt:""})],-1)),e[316]||(e[316]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[120]||(e[120]=a("Initialize CageFS in the Options tab (see ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[119]||(e[119]=[a("installation instructions")])),_:1}),e[121]||(e[121]=a(")."))]),e[317]||(e[317]=s("p",null,[s("img",{src:ue,alt:""})],-1)),e[318]||(e[318]=s("ol",{start:"2"},[s("li",null,[s("span",{class:"notranslate"},"PHP Selector cannot be activated for this domain. Enable CageFS for this user in the Users tab first"),a(".")])],-1)),e[319]||(e[319]=s("p",null,[s("img",{src:ce,alt:""})],-1)),e[320]||(e[320]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[123]||(e[123]=a("Enable CageFS in the Users tab (see ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[122]||(e[122]=[a("installation instructions")])),_:1}),e[124]||(e[124]=a(")."))]),e[321]||(e[321]=s("p",null,[s("img",{src:me,alt:""})],-1)),e[322]||(e[322]=s("ul",null,[s("li",null,"You can enable CageFS for one user by individual slider (for lve 1001 in the picture above)"),s("li",null,"You can enable CageFS for a group of user by the CageFS button (for lve 1002, 1003 in the picture above)")],-1)),e[323]||(e[323]=s("ol",{start:"3"},[s("li",null,"Some PHP related issues need to be resolved in order to enable domain management. Find the list of PHP related issues that prevent domain management above.")],-1)),e[324]||(e[324]=s("p",null,[s("img",{src:ge,alt:""})],-1)),e[325]||(e[325]=s("p",null,[s("strong",null,"Solution")],-1)),s("p",null,[e[126]||(e[126]=a("If you cannot see Diagnostic tool notifications, you can restart it. Then you can fix the issues using ")),t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-diagnostic-tool-and-notifications"},{default:l(()=>e[125]||(e[125]=[a("these instructions")])),_:1}),e[127]||(e[127]=a("."))]),e[326]||(e[326]=s("h4",{id:"php-selector-diagnostic-tool-and-notifications",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#php-selector-diagnostic-tool-and-notifications","aria-hidden":"true"},"#"),a(" PHP Selector diagnostic tool and notifications "),s("Badge",{type:"info",text:"CloudLinux Manager 6.0.1-2"})],-1)),e[327]||(e[327]=s("p",null,[a("The diagnostic tool allows to catch some issues. You can start diagnostic by clicking "),s("span",{class:"notranslate"},[s("em",null,"Run diagnostic")]),a(" button.")],-1)),e[328]||(e[328]=s("p",null,[s("img",{src:he,alt:""})],-1)),e[329]||(e[329]=s("p",null,"The most popular errors and solutions:",-1)),e[330]||(e[330]=s("ol",null,[s("li",null,"Your PHP Handler does not support CLoudLinux OS PHP Selector")],-1)),e[331]||(e[331]=s("p",null,[s("img",{src:fe,alt:""})],-1)),s("p",null,[e[129]||(e[129]=s("strong",null,"Solution",-1)),e[130]||(e[130]=a(": install ")),e[131]||(e[131]=s("code",null,"mod_suexec",-1)),e[132]||(e[132]=a(" (see instructions ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-5"},{default:l(()=>e[128]||(e[128]=[a("here")])),_:1}),e[133]||(e[133]=a(") and then run the following command:"))]),e[332]||(e[332]=o(`
    cagefsctl --force-update
    +
    1. Incorrect config file format

    Solution: correct the file format via SSH.

    1. Some domains have neither PHP version selected in MultiPHP Manager no system default version or have php-fpm enabled.

    ',6)),s("p",null,[e[135]||(e[135]=s("strong",null,"Solution",-1)),e[136]||(e[136]=a(": see ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[134]||(e[134]=[a("installation instructions")])),_:1}),e[137]||(e[137]=a(" for cPanel users"))]),e[333]||(e[333]=s("ol",{start:"4"},[s("li",null,"MultiPHP system default version is not ea-php")],-1)),e[334]||(e[334]=s("p",null,[s("img",{src:ye,alt:""})],-1)),s("p",null,[e[139]||(e[139]=s("strong",null,"Solution",-1)),e[140]||(e[140]=a(": see ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[138]||(e[138]=[a("installation instructions")])),_:1}),e[141]||(e[141]=a(" for cPanel users"))]),s("p",null,[e[143]||(e[143]=a("In the CloudLinux Manager v.6.0.6-1 the diagnostic tool can not catch problems with CageFS. See ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-instructions-for-cpanel-users"},{default:l(()=>e[142]||(e[142]=[a("installation instructions")])),_:1}),e[144]||(e[144]=a(" for cPanel users."))]),e[335]||(e[335]=s("h3",{id:"python-selector-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#python-selector-1","aria-hidden":"true"},"#"),a(" Python Selector")],-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-enable-disable-python-selector"},{default:l(()=>e[145]||(e[145]=[a("How to enable/disable Python Selector")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-manage-python-selector"},{default:l(()=>e[146]||(e[146]=[a("How to manage Python Selector")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#enable-and-disable-particular-python-version"},{default:l(()=>e[147]||(e[147]=[a("Enable and disable particular Python version")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#install-and-delete-particular-python-version"},{default:l(()=>e[148]||(e[148]=[a("Install and delete particular Python version")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#make-a-particular-python-version-as-a-default"},{default:l(()=>e[149]||(e[149]=[a("Make a particular Python version as a default")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#applications-column"},{default:l(()=>e[150]||(e[150]=[a("Applications column")])),_:1})])]),e[336]||(e[336]=o('

    Hoster interface allows to enable and disable Python Selector and manage individual Python versions.

    Go to CloudLinux Manager → Options Tab → Python Selector.

    A list of installed Python versions is displayed. There are several columns in the list.

    • Version — displays Python version.
    • Path — Python package location.
    • Applications — number of applications that use this Python version. Click on an application number to go to the list of applications.
    • Enabled — displays if particular Python version is enabled.
    • Actions — allows to install, delete, and make default a particular Python version.

    To display all changes immediately click Refresh.

    How to enable/disable Python Selector

    To enable Python Selector move a slider to Enable and complete the action by clicking Agree or click Cancel to close the popup. To disable Python Selector move a slider back to Disable.

    Note

    If you disable Python, all users won't be able to manage their applications

    Note

    Python Selector icon in end user interface is hidden when Python is disabled.

    How to manage Python Selector

    In the list of installed Python versions you can enable and disable, install and delete, and set a particular Python version as a default.

    Enable and disable particular Python version

    To enable particular Python version do the following:

    • Move a disabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To disable particular Python version do the following:

    • Move an enabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Install and delete particular Python version

    To install particular Python version do the following:

    • Click Install button in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To delete particular Python version do the following:

    • Click Bin icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to start uninstalling process. Or close popup without changes by clicking Cancel button.

    Note

    It is impossible:

    • to remove default Python version
    • to remove version with applications
    • to install or remove version if another installation/uninstalling process is running

    Make a particular Python version as a default

    ',28)),s("div",sa,[e[154]||(e[154]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[152]||(e[152]=a("You can set a particular Python version as a default version in the CloudLinux OS ")),t(n,{to:"/cloudlinuxos/lve_manager/#cloudlinux-installation-wizard"},{default:l(()=>e[151]||(e[151]=[a("installation wizard")])),_:1}),e[153]||(e[153]=a(" during the first installation."))])]),e[337]||(e[337]=o('

    To make a particular Python version as a default version, do the following:

    • Click Double-Tick icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Note

    It is impossible to make disabled Python version as a default version

    Applications column

    To view and operate with the list of domains with Python versions click a number in the Applications column for a particular Python version. A section with a list of Domains for particular Python version will be displayed.

    Domains are displayed by three. To load more domains click Load More button.

    To change Python version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation popup will be displayed.
    • In the popup choose Python version from a dropdown.
    • Click Change to confirm the action or Cancel to close the popup.
    • To refresh state of applications in current version you can click Refresh.

    Note

    All packages of the application(s) will be re-installed.

    ',11)),s("div",aa,[e[157]||(e[157]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[156]||(e[156]=a("You can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#hoster"},{default:l(()=>e[155]||(e[155]=[a("Python Selector CLI")])),_:1})])]),s("p",null,[e[159]||(e[159]=a("See also: ")),t(n,{to:"/cloudlinuxos/lve_manager/#python-selector-client-plugin"},{default:l(()=>e[158]||(e[158]=[a("Python Selector client plugin")])),_:1})]),e[338]||(e[338]=s("h3",{id:"node-js-selector-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js-selector-1","aria-hidden":"true"},"#"),a(" Node.js Selector")],-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-enable-disable-node-js"},{default:l(()=>e[160]||(e[160]=[a("How to enable/disable Node.js")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-manage-node-js"},{default:l(()=>e[161]||(e[161]=[a("How to manage Node.js")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#enable-and-disable-particular-node-js-version"},{default:l(()=>e[162]||(e[162]=[a("Enable and disable particular Node.js version")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#install-and-delete-particular-node-js-version"},{default:l(()=>e[163]||(e[163]=[a("Install and delete particular Node.js version")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#make-a-particular-node-js-version-as-a-default"},{default:l(()=>e[164]||(e[164]=[a("Make a particular Node.js version as a default")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#applications-column-2"},{default:l(()=>e[165]||(e[165]=[a("Applications column")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#application-error-log"},{default:l(()=>e[166]||(e[166]=[a("Application error log")])),_:1})])]),e[339]||(e[339]=o('

    Hoster interface allows to enable and disable Node.js, and manage individual Node.js versions.

    Go to CloudLinux Manager → Options Tab → Node.js Section. A list of installed Node.js versions is displayed. There are several columns in the list.

    • Version — displays Node.js version.
    • Path — Node.js package location.
    • Applications — number of applications that use this Node.js version. Click on a digit to go to the list of applications.
    • Enabled — displays if particular Node.js version is enabled.
    • Actions — allows to install, delete, and make default a particular Node.js version.

    To display all changes immediately click Refresh link.

    How to enable/disable Node.js

    • To enable Node.js move the slider to Enable.
    • To disable Node.js move the slider back to Disable.

    Note

    If you disable Node.js, its version for all your applications will not be changed, but you can not add a new application to this version.

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    How to manage Node.js

    The list of installed Node.js versions allows to enable and disable, install and delete, and set a particular Node.js version as a default.

    Enable and disable particular Node.js version

    To enable particular Node.js version do the following:

    • Move a disabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To disable particular Node.js version do the following:

    • Move an enabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Install and delete particular Node.js version

    To install particular Node.js version do the following:

    • Click Install button in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To delete particular Node.js version do the following:

    • Click Bin icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to start uninstall process.
    • Or just close a pop-up without any changes.

    Note

    It is impossible:

    • to remove default Node.js version;
    • to remove version with applications;
    • to install or remove version if another installation/uninstall process is running.

    Make a particular Node.js version as a default

    To make a particular Node.js version as a default do the following:

    • Click Double-Tick icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Note

    It is impossible to make a disabled version default.

    Applications column

    To view and operate with the list of domains with Node.js versions click on a number in the Applications column for a particular Node.js version. A section with a list of Domains for particular Node.js version will be displayed.

    Domains are displayed by three. To load more domains click on Load More button.

    To change Node.js version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation pop-up will be displayed.
    • In the pop-up choose Node.js version from a drop-down.
    • Click Change to confirm the action or Cancel to close the pop-up.
    • To refresh state of applications in current version you can click Refresh link.

    Note

    All packages of the application(s) will be re-installed.

    ',38)),s("div",na,[e[169]||(e[169]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[168]||(e[168]=a("You can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#hoster-2"},{default:l(()=>e[167]||(e[167]=[a("Node.js Selector CLI")])),_:1})])]),s("p",null,[e[171]||(e[171]=a("See also: ")),t(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector-client-plugin"},{default:l(()=>e[170]||(e[170]=[a("Node.js Selector client plugin")])),_:1})]),e[340]||(e[340]=o(`

    Application error log

    Since alt-mod-passenger version 5.3.7-3 we have included support for the PassengerAppLogFile directive.

    Syntax: PassengerAppLogFile path
     Default: PassengerAppLogFile path-to-passenger-log-file
     Context: virtual host, htaccess
    -

    By default, Passenger log messages are all written to the Passenger log file. With this option, you can have the app specific messages logged to a different file in addition. In alt-mod-passenger , you can use it in the context of a virtual host or in the htaccess file.

    `,4)),s("p",null,[e[184]||(e[184]=a("See also: ")),n(t,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:l(()=>e[183]||(e[183]=[a("Node.js Selector CLI tools")])),_:1}),e[185]||(e[185]=a("."))]),e[351]||(e[351]=s("h3",{id:"website-monitoring-tool-and-slow-site-analyzer",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#website-monitoring-tool-and-slow-site-analyzer","aria-hidden":"true"},"#"),a(" Website monitoring tool and Slow Site analyzer")],-1)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#website-monitoring-tab"},{default:l(()=>e[186]||(e[186]=[a("Website monitoring tab")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#main"},{default:l(()=>e[187]||(e[187]=[a("Main")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-slow-site-analyzer"},{default:l(()=>e[188]||(e[188]=[a("PHP Slow Site analyzer")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#settings"},{default:l(()=>e[189]||(e[189]=[a("Settings")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#what-is-the-density-threshold"},{default:l(()=>e[190]||(e[190]=[a("What is the density threshold?")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#email-notifications"},{default:l(()=>e[191]||(e[191]=[a("Email notifications")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/command-line_tools/#the-cloudlinux-ssa-manager-utility"},{default:l(()=>e[192]||(e[192]=[a("The cloudlinux-ssa-manager CLI utility")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/command-line_tools/#the-wmt-api-utility"},{default:l(()=>e[193]||(e[193]=[a("The wmt-api CLI utility")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#faq"},{default:l(()=>e[194]||(e[194]=[a("FAQ")])),_:1})])]),e[352]||(e[352]=o(`

    Website monitoring tool is a new tool that collects the statistics of the domains' availability and responsiveness, as well as errors that occur when accessing these domains. An admin can get email reports with the statistics. The website monitoring tool uses the simple curl request like curl http://domain.com to get domains’ statistics.

    PHP Slow Site analyzer is a new tool that generates daily reports for the server administrator with information about the top N slow PHP-based domains and URLs. Slow Site analyzer tracks all PHP-based requests and selects slow ones by certain rules.

    Note

    Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    Installation

    To install the tool, run the following command:

    yum update lvemanager
    -
    `,6)),s("div",da,[e[202]||(e[202]=s("p",{class:"custom-block-title"},"Warning",-1)),e[203]||(e[203]=s("p",null,[a("For now, there is no any possibility to remove the "),s("code",null,"alt-php-ssa"),a(" and "),s("code",null,"cl-web-monitoring-tool"),a(" packages so that the "),s("em",null,"Website monitoring"),a(" tab will be removed. This possibility will be added in the future releases.")],-1)),s("p",null,[e[196]||(e[196]=a("You can turn off the ")),e[197]||(e[197]=s("em",null,"Website monitoring",-1)),e[198]||(e[198]=a(", ")),e[199]||(e[199]=s("em",null,"PHP Sites Analyzer",-1)),e[200]||(e[200]=a(" in the ")),s("em",null,[n(t,{to:"/cloudlinuxos/lve_manager/#settings"},{default:l(()=>e[195]||(e[195]=[a("Settings")])),_:1})]),e[201]||(e[201]=a(" subtab, so sites statistics will stop collecting and there will be no additional load on the server."))])]),e[353]||(e[353]=o('

    Website monitoring tab

    You can configure the Website monitoring tool and Slow Site analyzer and view the daily reports in the CloudLinux Manager -> Website monitoring tab.

    There are Main, PHP Site analyzer, and Settings subtabs here.

    Main

    This subtab views the latest report (for the previous day) of the Website monitoring tool.

    Remember that report is created every 24 hours and all changes in configuration (the Settings tab) or in the list of domains will be applied for the next 24 hours (from midnight).

    • Total number of requests - requests that were sent to all domains, existing on the servers

    • Successful requests - the number of requests for all domains with

    • Requests with errors - the number of requests for all domains which status code is not 200

    • Not started requests due to short check interval - this metric is used to adjust configuration. If it is not equal 0, an admin should increase the value of Requests sending interval, because the tool does not fit into this interval to send requests to all domains.

    • Slowest websites in 24h and Websites with most errors in 24h - in these sections you can find the number of domains that was exposed here.

    PHP Slow Site analyzer

    Note

    The Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    This is an example of a report from the Slow Site analyzer. The report shows the number of slow requests per domain and its URLs and the average duration of each slow URL.

    ',12)),s("p",null,[e[205]||(e[205]=a("You can find the explanation of the ")),e[206]||(e[206]=s("strong",null,"Slow requests density in period",-1)),e[207]||(e[207]=a()),n(t,{to:"/cloudlinuxos/lve_manager/#what-is-the-density-threshold"},{default:l(()=>e[204]||(e[204]=[a("here")])),_:1}),e[208]||(e[208]=a("."))]),e[354]||(e[354]=o('

    Settings

    Here, an admin can configure the Website monitoring and the PHP Site analyzer.

    Note

    All settings which was changed after starting Website monitoring and Slow site analyzer will be applied for the next 24h (from midnight).

    To enable or disable Website monitoring, use the following slider.

    • Enable summary notifications - turn on/off summary daily email report notifications
    • Enable alert notifications - turn on/off immediate alert email notifications
    • Domains and URLs Ignore List - domains and URLs that will not be requested and displayed in reports; supported formats: example.com, http://example.com
    • Top N slow websites to show - this number (N) will be used to select the top N domains from the list of all domains, sorted by response duration (Slowest websites list). And this number also will be used to select the top N domains from the list of all domains, sorted by amount of errors (Websites with most errors list).
    • Check every X minutes - this is a period in minutes between requests to the same domain.
    • Time allowed for response - if there is no answer from the website for this period of time, the Website Monitoring tool will regard this behaviour as the HTTP 408 error.
    • Concurrent requests limit - how many concurrent requests can be done by the Website Monitoring tool.

    To enable or disable the Slow site analyzer, use the following slider.

    Note

    Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    • Enable Autotracing - turn on/off Autotracing;
    • Enable summary notifications - turn on/off summary daily email report notifications;
    • Top N slow websites to show - Set the number of top slow websites to show in the “PHP Sites Analyzer“ report;
    • Top slow URLs - this number (N) will be used to select the top N URLs for each domain, marked as slow;
    • Slow request duration - the duration of a request in seconds. If the request duration was less than specified in this setting then this request will not be marked as slow;
    • Slow requests number - number of slow requests in the period of time to mark the URL as a slow one;
    • Analysis time - the period of time in hours required to analyze slow requests;
    • Enable slow requests density threshold - turn on/off slow requests density threshold;
    • Slow requests density threshold - can be in the interval [0..1], by default it is 0.8. The density threshold can be disabled. And the Domains and URLs Ignore List can be specified;
    • Domains and URLs Ignore List - domains and URLs that will not be displayed in reports;

    What is the density threshold?

    We try to find the most interesting requests for the optimisation from all number of requests to domains during 24 hours. The Density threshold parameter helps to find the most visited URLs and the most popular requests.

    A density threshold is a numerical measure of some type of correlation, meaning the power of the statistical relationship between slow requests and all requests to the domain. If this parameter is enabled then the resulting table will contain slow requests that have exceeded the specified threshold. Requests with the highest density are usually the most distributed per day and are considered valuable to users, thus interesting for optimization.

    Slow requests that represent bursts of activity and are weakly related to all activity per domain typically have a low density and will be weeded out.

    Email notifications

    Email notifications are created by the Web monitoring tools.

    Example of the Web monitoring tools report.

    Example of the PHP Slow site analyzer report.

    FAQ

    Q: Does this feature consume a lot server resources for collecting website and PHP data? If I enable it can this slow down the server?

    A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring should not create a significant load and you can keep it always on.


    Q: Can I change the default value to 10, for example for the "Top N slow websites to show" setting?

    A: This number is simply the number of the slowest responding sites. All sites are sampled during the day. When generating a report, all sites' responses are sorted by response time from highest to lowest, and to make the report readable, only the first N sites are taken. You can specify N as all existing sites or only the 5 slowest. This number does not affect the server load, it only affects the report that will be visible in the UI or emailed to the administrator.


    Q: What would you recommend: to enable the Website monitoring tool for some days and then disable or I can keep it always turned on?

    A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring tool should not create a significant load and you can keep it always on.

    Reseller interface

    Reseller interface is designed to manage limits for resellers’ end users, to monitor statistics and the history of resource usage and to modify reseller’s end user packages limits.

    Log in under a particular reseller credentials to have access to the following functionality:

    ',32)),s("ul",null,[s("li",null,[s("span",ua,[n(t,{to:"/cloudlinuxos/lve_manager/#current-usage-tab"},{default:l(()=>e[209]||(e[209]=[a("Current Usage")])),_:1})]),e[210]||(e[210]=a(" tab - allows to monitor resellers’ end users resource usage at the moment;"))]),s("li",null,[s("span",ca,[n(t,{to:"/cloudlinuxos/lve_manager/#historical-usage-tab"},{default:l(()=>e[211]||(e[211]=[a("Historical Usage")])),_:1})]),e[212]||(e[212]=a(" tab - allows to control resellers’ end users resource usage history;"))]),s("li",null,[s("span",ma,[n(t,{to:"/cloudlinuxos/lve_manager/#users-tab"},{default:l(()=>e[213]||(e[213]=[a("Users")])),_:1})]),e[214]||(e[214]=a(" tab with the list of all resellers’ end users allows to view and manage all the reseller’s end user limits;"))]),s("li",null,[s("span",ga,[n(t,{to:"/cloudlinuxos/lve_manager/#statistics-tab"},{default:l(()=>e[215]||(e[215]=[a("Statistics")])),_:1})]),e[216]||(e[216]=a(" tab displays the statistics of resource usage for particular timeframe or particular reseller's end user;"))]),s("li",null,[s("span",ha,[n(t,{to:"/cloudlinuxos/lve_manager/#options-tab"},{default:l(()=>e[217]||(e[217]=[a("Options")])),_:1})]),e[218]||(e[218]=a(" tab allows to set LVE Faults email notifications."))]),s("li",null,[s("span",fa,[n(t,{to:"/cloudlinuxos/lve_manager/#packages-tab"},{default:l(()=>e[219]||(e[219]=[a("Packages")])),_:1})]),e[220]||(e[220]=a(" tab allows to manage reseller’s end user packages limits."))])]),e[355]||(e[355]=o('

    Reseller can manage all his end users via Reseller Interface. Reseller cannot manage INODE or MYSQL limits, neither his own nor for his users.

    Current Usage tab

    Current usage table provides the information on the usage of the following:

    • SPEED (All)
    • memory (MEM)
    • data throughput (IO)(All)
    • read/write operations per second (IOPS)
    • number of processes (PNO)
    • entry processes (EP)

    Resource usage data is being refreshed every 10 seconds which is set by default in Auto-refresh field. You can set Auto-refresh time by choosing the value from the drop-down.

    You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button.

    Usage values will not change until the next manual refresh. To unfreeze click on unpause button. The countdown will continue.

    Reseller cannot manage INODE or MYSQL limits. Neither his own, nor for his users.

    The bottom line star in the table displays the total reseller resource usage. It means, that all the usage of resellers’ end users and of his own is displayed as a summary for each parameter.

    Historical Usage tab

    Choose Historical Usage tab to view reseller and resellers’ end users resource usage history and faults. The list of users can be filtered by Timeframe.

    When reseller’s end user reaches the limits set by hoster for the reseller, this will be displayed on the chart.

    Note

    In this case reseller’s end user would not necessarily reaches his limits set by the reseller. These faults are not displayed on the chart.

    On the Historical Usage page the reseller is also able to see the list of Top 5 Reseller’s end users (based on resource usage, for the same period as charts/overall usage). Click History in the Actions column to view resource usage statistics for particular user.

    Click LVE Statistics on the top of the Top 5 list to go to the Statistics page to view or manage the rest of users.

    Users tab

    Choose Users tab to view and manage the list of all resellers’ end users and resource usage limits provided for them. The following limits are available for the resellers’ end users:

    • SPEED
    • PMEM
    • IO
    • IOPS
    • EP
    • NPROC

    You can filter the list by Username, Domain, LVE ID.

    Tick Show only ignored users to display only users with MySQL Governor disabled.

    Actions column

    Click on a pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Click Reset to reset limits to default values.
    • Click Apply for Do not limit to set unlimited resources to a user.
    • Set values for PEED, PMEM, IO, IOPS, EP, and NPROC and click Save to save changes or Cancel to close the window.

    Statistics tab

    Choose Statistics tab to view resource usage limits statistics.

    Statistics table can be filtered by Timeframe, Limit, Top LVEs, LVE approaching limit, Fault LVE.

    The following parameters are displayed:

    • SPEED per user;
    • PMEM usage per user;
    • IO usage per user;
    • EP usage per user;
    • NPROC usage per user;
    • IOPS usage per user.

    Use Charts in the View column to view detailed resource usage charts for a particular period of time.

    For example, 7 days period chart.

    Options tab

    Choose Options tab to set user email notifications for resellers’ end users.

    In LVE Faults email notifications section tick appropriate checkboxes to set the required type of notification.

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the reseller should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    • Notify me on users faults - notify reseller when his users have exceeded limits.
    • Notify Customers - notify resellers’ end users when they have exceeded limits.
    • Notify me when I hit my limits - notify reseller when overall resource usage limits are reached.

    In Faults to include section tick checkboxes to include particular limits to email notifications.

    In Minimum number of Faults to notify section enter the number of faults required for the notification to be sent for reseller and customer. You can also set the reseller notification frequency.

    Set the frequency of sending the reseller email notifications in Notify Reseller Every ... days/hours/minutes/seconds section.

    Click Save Changes to apply changes.

    Packages tab

    Choose Packages tab to view and modify limits for reseller’s packages.

    Click pencil icon in a package row to set the following limits for a package:

    • SPEED limit;
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits;
    • IOPS limits;
    • Concurrent connections (EP) limits.

    When limits are set click Save to apply changes.

    LVE plugins branding

    Note

    Requires CloudLinux Manager 2.0-33+

    It is possible to apply branding to the LVE Plugins in cPanel end users’ interface. To brand the cPanel end users' interface please do the following:

    • Create a script that will patch CloudLinux Manager files (with branding data, for example, image and logo) after every update of lvemanager rpm package;

    • Locate this script in /usr/share/l.v.e-manager/branding_script;

    • Make this script executable by running the command:

    chmod a+x /usr/share/l.v.e-manager/branding_script
    +

    By default, Passenger log messages are all written to the Passenger log file. With this option, you can have the app specific messages logged to a different file in addition. In alt-mod-passenger , you can use it in the context of a virtual host or in the htaccess file.

    `,4)),s("p",null,[e[173]||(e[173]=a("See also: ")),t(n,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:l(()=>e[172]||(e[172]=[a("Node.js Selector CLI tools")])),_:1}),e[174]||(e[174]=a("."))]),e[341]||(e[341]=s("h3",{id:"website-monitoring-tool-and-slow-site-analyzer",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#website-monitoring-tool-and-slow-site-analyzer","aria-hidden":"true"},"#"),a(" Website monitoring tool and Slow Site analyzer")],-1)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#website-monitoring-tab"},{default:l(()=>e[175]||(e[175]=[a("Website monitoring tab")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#main"},{default:l(()=>e[176]||(e[176]=[a("Main")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-slow-site-analyzer"},{default:l(()=>e[177]||(e[177]=[a("PHP Slow Site analyzer")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#settings"},{default:l(()=>e[178]||(e[178]=[a("Settings")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#what-is-the-density-threshold"},{default:l(()=>e[179]||(e[179]=[a("What is the density threshold?")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#email-notifications"},{default:l(()=>e[180]||(e[180]=[a("Email notifications")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/command-line_tools/#the-cloudlinux-ssa-manager-utility"},{default:l(()=>e[181]||(e[181]=[a("The cloudlinux-ssa-manager CLI utility")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/command-line_tools/#the-wmt-api-utility"},{default:l(()=>e[182]||(e[182]=[a("The wmt-api CLI utility")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#faq"},{default:l(()=>e[183]||(e[183]=[a("FAQ")])),_:1})])]),e[342]||(e[342]=o(`

    Website monitoring tool is a new tool that collects the statistics of the domains' availability and responsiveness, as well as errors that occur when accessing these domains. An admin can get email reports with the statistics. The website monitoring tool uses the simple curl request like curl http://domain.com to get domains’ statistics.

    PHP Slow Site analyzer is a new tool that generates daily reports for the server administrator with information about the top N slow PHP-based domains and URLs. Slow Site analyzer tracks all PHP-based requests and selects slow ones by certain rules.

    Note

    Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    Installation

    To install the tool, run the following command:

    yum update lvemanager
    +
    `,6)),s("div",ta,[e[191]||(e[191]=s("p",{class:"custom-block-title"},"Warning",-1)),e[192]||(e[192]=s("p",null,[a("For now, there is no any possibility to remove the "),s("code",null,"alt-php-ssa"),a(" and "),s("code",null,"cl-web-monitoring-tool"),a(" packages so that the "),s("em",null,"Website monitoring"),a(" tab will be removed. This possibility will be added in the future releases.")],-1)),s("p",null,[e[185]||(e[185]=a("You can turn off the ")),e[186]||(e[186]=s("em",null,"Website monitoring",-1)),e[187]||(e[187]=a(", ")),e[188]||(e[188]=s("em",null,"PHP Sites Analyzer",-1)),e[189]||(e[189]=a(" in the ")),s("em",null,[t(n,{to:"/cloudlinuxos/lve_manager/#settings"},{default:l(()=>e[184]||(e[184]=[a("Settings")])),_:1})]),e[190]||(e[190]=a(" subtab, so sites statistics will stop collecting and there will be no additional load on the server."))])]),e[343]||(e[343]=o('

    Website monitoring tab

    You can configure the Website monitoring tool and Slow Site analyzer and view the daily reports in the CloudLinux Manager -> Website monitoring tab.

    There are Main, PHP Site analyzer, and Settings subtabs here.

    Main

    This subtab views the latest report (for the previous day) of the Website monitoring tool.

    Remember that report is created every 24 hours and all changes in configuration (the Settings tab) or in the list of domains will be applied for the next 24 hours (from midnight).

    • Total number of requests - requests that were sent to all domains, existing on the servers

    • Successful requests - the number of requests for all domains with

    • Requests with errors - the number of requests for all domains which status code is not 200

    • Not started requests due to short check interval - this metric is used to adjust configuration. If it is not equal 0, an admin should increase the value of Requests sending interval, because the tool does not fit into this interval to send requests to all domains.

    • Slowest websites in 24h and Websites with most errors in 24h - in these sections you can find the number of domains that was exposed here.

    PHP Slow Site analyzer

    Note

    The Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    This is an example of a report from the Slow Site analyzer. The report shows the number of slow requests per domain and its URLs and the average duration of each slow URL.

    ',12)),s("p",null,[e[194]||(e[194]=a("You can find the explanation of the ")),e[195]||(e[195]=s("strong",null,"Slow requests density in period",-1)),e[196]||(e[196]=a()),t(n,{to:"/cloudlinuxos/lve_manager/#what-is-the-density-threshold"},{default:l(()=>e[193]||(e[193]=[a("here")])),_:1}),e[197]||(e[197]=a("."))]),e[344]||(e[344]=o('

    Settings

    Here, an admin can configure the Website monitoring and the PHP Site analyzer.

    Note

    All settings which was changed after starting Website monitoring and Slow site analyzer will be applied for the next 24h (from midnight).

    To enable or disable Website monitoring, use the following slider.

    • Enable summary notifications - turn on/off summary daily email report notifications
    • Enable alert notifications - turn on/off immediate alert email notifications
    • Domains and URLs Ignore List - domains and URLs that will not be requested and displayed in reports; supported formats: example.com, http://example.com
    • Top N slow websites to show - this number (N) will be used to select the top N domains from the list of all domains, sorted by response duration (Slowest websites list). And this number also will be used to select the top N domains from the list of all domains, sorted by amount of errors (Websites with most errors list).
    • Check every X minutes - this is a period in minutes between requests to the same domain.
    • Time allowed for response - if there is no answer from the website for this period of time, the Website Monitoring tool will regard this behaviour as the HTTP 408 error.
    • Concurrent requests limit - how many concurrent requests can be done by the Website Monitoring tool.

    To enable or disable the Slow site analyzer, use the following slider.

    Note

    Slow Site analyzer is not available for CloudLinux OS Legacy (Shared) 6.

    • Enable Autotracing - turn on/off Autotracing;
    • Enable summary notifications - turn on/off summary daily email report notifications;
    • Top N slow websites to show - Set the number of top slow websites to show in the “PHP Sites Analyzer“ report;
    • Top slow URLs - this number (N) will be used to select the top N URLs for each domain, marked as slow;
    • Slow request duration - the duration of a request in seconds. If the request duration was less than specified in this setting then this request will not be marked as slow;
    • Slow requests number - number of slow requests in the period of time to mark the URL as a slow one;
    • Analysis time - the period of time in hours required to analyze slow requests;
    • Enable slow requests density threshold - turn on/off slow requests density threshold;
    • Slow requests density threshold - can be in the interval [0..1], by default it is 0.8. The density threshold can be disabled. And the Domains and URLs Ignore List can be specified;
    • Domains and URLs Ignore List - domains and URLs that will not be displayed in reports;

    What is the density threshold?

    We try to find the most interesting requests for the optimisation from all number of requests to domains during 24 hours. The Density threshold parameter helps to find the most visited URLs and the most popular requests.

    A density threshold is a numerical measure of some type of correlation, meaning the power of the statistical relationship between slow requests and all requests to the domain. If this parameter is enabled then the resulting table will contain slow requests that have exceeded the specified threshold. Requests with the highest density are usually the most distributed per day and are considered valuable to users, thus interesting for optimization.

    Slow requests that represent bursts of activity and are weakly related to all activity per domain typically have a low density and will be weeded out.

    Email notifications

    Email notifications are created by the Web monitoring tools.

    Example of the Web monitoring tools report.

    Example of the PHP Slow site analyzer report.

    FAQ

    Q: Does this feature consume a lot server resources for collecting website and PHP data? If I enable it can this slow down the server?

    A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring should not create a significant load and you can keep it always on.


    Q: Can I change the default value to 10, for example for the "Top N slow websites to show" setting?

    A: This number is simply the number of the slowest responding sites. All sites are sampled during the day. When generating a report, all sites' responses are sorted by response time from highest to lowest, and to make the report readable, only the first N sites are taken. You can specify N as all existing sites or only the 5 slowest. This number does not affect the server load, it only affects the report that will be visible in the UI or emailed to the administrator.


    Q: What would you recommend: to enable the Website monitoring tool for some days and then disable or I can keep it always turned on?

    A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring tool should not create a significant load and you can keep it always on.

    Reseller interface

    Reseller interface is designed to manage limits for resellers’ end users, to monitor statistics and the history of resource usage and to modify reseller’s end user packages limits.

    Log in under a particular reseller credentials to have access to the following functionality:

    ',32)),s("ul",null,[s("li",null,[s("span",la,[t(n,{to:"/cloudlinuxos/lve_manager/#current-usage-tab"},{default:l(()=>e[198]||(e[198]=[a("Current Usage")])),_:1})]),e[199]||(e[199]=a(" tab - allows to monitor resellers’ end users resource usage at the moment;"))]),s("li",null,[s("span",oa,[t(n,{to:"/cloudlinuxos/lve_manager/#historical-usage-tab"},{default:l(()=>e[200]||(e[200]=[a("Historical Usage")])),_:1})]),e[201]||(e[201]=a(" tab - allows to control resellers’ end users resource usage history;"))]),s("li",null,[s("span",ia,[t(n,{to:"/cloudlinuxos/lve_manager/#users-tab"},{default:l(()=>e[202]||(e[202]=[a("Users")])),_:1})]),e[203]||(e[203]=a(" tab with the list of all resellers’ end users allows to view and manage all the reseller’s end user limits;"))]),s("li",null,[s("span",ra,[t(n,{to:"/cloudlinuxos/lve_manager/#statistics-tab"},{default:l(()=>e[204]||(e[204]=[a("Statistics")])),_:1})]),e[205]||(e[205]=a(" tab displays the statistics of resource usage for particular timeframe or particular reseller's end user;"))]),s("li",null,[s("span",pa,[t(n,{to:"/cloudlinuxos/lve_manager/#options-tab"},{default:l(()=>e[206]||(e[206]=[a("Options")])),_:1})]),e[207]||(e[207]=a(" tab allows to set LVE Faults email notifications."))]),s("li",null,[s("span",da,[t(n,{to:"/cloudlinuxos/lve_manager/#packages-tab"},{default:l(()=>e[208]||(e[208]=[a("Packages")])),_:1})]),e[209]||(e[209]=a(" tab allows to manage reseller’s end user packages limits."))])]),e[345]||(e[345]=o('

    Reseller can manage all his end users via Reseller Interface. Reseller cannot manage INODE or MYSQL limits, neither his own nor for his users.

    Current Usage tab

    Current usage table provides the information on the usage of the following:

    • SPEED (All)
    • memory (MEM)
    • data throughput (IO)(All)
    • read/write operations per second (IOPS)
    • number of processes (PNO)
    • entry processes (EP)

    Resource usage data is being refreshed every 10 seconds which is set by default in Auto-refresh field. You can set Auto-refresh time by choosing the value from the drop-down.

    You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button.

    Usage values will not change until the next manual refresh. To unfreeze click on unpause button. The countdown will continue.

    Reseller cannot manage INODE or MYSQL limits. Neither his own, nor for his users.

    The bottom line star in the table displays the total reseller resource usage. It means, that all the usage of resellers’ end users and of his own is displayed as a summary for each parameter.

    Historical Usage tab

    Choose Historical Usage tab to view reseller and resellers’ end users resource usage history and faults. The list of users can be filtered by Timeframe.

    When reseller’s end user reaches the limits set by hoster for the reseller, this will be displayed on the chart.

    Note

    In this case reseller’s end user would not necessarily reaches his limits set by the reseller. These faults are not displayed on the chart.

    On the Historical Usage page the reseller is also able to see the list of Top 5 Reseller’s end users (based on resource usage, for the same period as charts/overall usage). Click History in the Actions column to view resource usage statistics for particular user.

    Click LVE Statistics on the top of the Top 5 list to go to the Statistics page to view or manage the rest of users.

    Users tab

    Choose Users tab to view and manage the list of all resellers’ end users and resource usage limits provided for them. The following limits are available for the resellers’ end users:

    • SPEED
    • PMEM
    • IO
    • IOPS
    • EP
    • NPROC

    You can filter the list by Username, Domain, LVE ID.

    Tick Show only ignored users to display only users with MySQL Governor disabled.

    Actions column

    Click on a pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Click Reset to reset limits to default values.
    • Click Apply for Do not limit to set unlimited resources to a user.
    • Set values for PEED, PMEM, IO, IOPS, EP, and NPROC and click Save to save changes or Cancel to close the window.

    Statistics tab

    Choose Statistics tab to view resource usage limits statistics.

    Statistics table can be filtered by Timeframe, Limit, Top LVEs, LVE approaching limit, Fault LVE.

    The following parameters are displayed:

    • SPEED per user;
    • PMEM usage per user;
    • IO usage per user;
    • EP usage per user;
    • NPROC usage per user;
    • IOPS usage per user.

    Use Charts in the View column to view detailed resource usage charts for a particular period of time.

    For example, 7 days period chart.

    Options tab

    Choose Options tab to set user email notifications for resellers’ end users.

    In LVE Faults email notifications section tick appropriate checkboxes to set the required type of notification.

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the reseller should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    • Notify me on users faults - notify reseller when his users have exceeded limits.
    • Notify Customers - notify resellers’ end users when they have exceeded limits.
    • Notify me when I hit my limits - notify reseller when overall resource usage limits are reached.

    In Faults to include section tick checkboxes to include particular limits to email notifications.

    In Minimum number of Faults to notify section enter the number of faults required for the notification to be sent for reseller and customer. You can also set the reseller notification frequency.

    Set the frequency of sending the reseller email notifications in Notify Reseller Every ... days/hours/minutes/seconds section.

    Click Save Changes to apply changes.

    Packages tab

    Choose Packages tab to view and modify limits for reseller’s packages.

    Click pencil icon in a package row to set the following limits for a package:

    • SPEED limit;
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits;
    • IOPS limits;
    • Concurrent connections (EP) limits.

    When limits are set click Save to apply changes.

    LVE plugins branding

    Note

    Requires CloudLinux Manager 2.0-33+

    It is possible to apply branding to the LVE Plugins in cPanel end users’ interface. To brand the cPanel end users' interface please do the following:

    • Create a script that will patch CloudLinux Manager files (with branding data, for example, image and logo) after every update of lvemanager rpm package;

    • Locate this script in /usr/share/l.v.e-manager/branding_script;

    • Make this script executable by running the command:

    chmod a+x /usr/share/l.v.e-manager/branding_script
     

    When done, the branding script will be executed while every update of lvemanager package and all branding changes will be applied in the end user’s interface.

    Note

    Modifying the CloudLinux Manager WHM plugin (/usr/local/cpanel/whostmgr/docroot/cgi/CloudLinux.cgi) via branding_script is not allowed.

    User message for PHP version

    Since version 1.0-4 CloudLinux Manager acquired a feature of adding user messages to PHP versions*. To add a message, you should create a file in /opt/alt/phpXX/name_modifier with a message that you want to be shown to a user.

    For example, if you need to add the following message Don't use this PHP version to PHP version 4.4, you should create the following file:

    /opt/alt/php44/name_modifier:
     
     echo 'Don\`t use this php version' > /opt/alt/php44/name_modifier
    -

    As a result, CloudLinux Manager will automatically pick up this message and will show it in web-interface to administrator (see Figure 1.1 for cPanel, Figure 1.2 for DirectAdmin) and to user (see Figure 2.1 for cPanel, Figure 2.2 for DirectAdmin). You can add messages to other PHP versions this way as well.

    Figure 1.1 cPanel CloudLinux Manager (administrator)
    Figure 1.2 DirectAdmin CloudLinux Manager (administrator)
    Figure 2.1 cPanel CloudLinux Manager (user)
    Figure 2.2 DirectAdmin CloudLinux Manager (user)

    Note

    *For cPanel and DirectAdmin only.

    Client plugins

    ',75)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#resource-usage-client-plugin"},{default:l(()=>e[221]||(e[221]=[a("Resource Usage client plugin")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#dashboard-2"},{default:l(()=>e[222]||(e[222]=[a("Dashboard")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#current-usage-3"},{default:l(()=>e[223]||(e[223]=[a("Current Usage")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#current-usage-table"},{default:l(()=>e[224]||(e[224]=[a("Current Usage table")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#filters"},{default:l(()=>e[225]||(e[225]=[a("Filters")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#charts"},{default:l(()=>e[226]||(e[226]=[a("Charts")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#usage"},{default:l(()=>e[227]||(e[227]=[a("Usage")])),_:1})])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#snapshot"},{default:l(()=>e[228]||(e[228]=[a("Snapshot")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#server-processes-snapshots"},{default:l(()=>e[229]||(e[229]=[a("Server processes snapshots")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#process-list"},{default:l(()=>e[230]||(e[230]=[a("Process list")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#database-queries-cpanel-only"},{default:l(()=>e[231]||(e[231]=[a("Database queries (cPanel only)")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#http-queries"},{default:l(()=>e[232]||(e[232]=[a("HTTP queries")])),_:1})])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#python-selector-client-plugin"},{default:l(()=>e[233]||(e[233]=[a("Python Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-manage-an-application"},{default:l(()=>e[234]||(e[234]=[a("How to manage an application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#create-application"},{default:l(()=>e[235]||(e[235]=[a("Create application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#start-application"},{default:l(()=>e[236]||(e[236]=[a("Start application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#stop-application"},{default:l(()=>e[237]||(e[237]=[a("Stop application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#restart-application"},{default:l(()=>e[238]||(e[238]=[a("Restart application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#remove-application"},{default:l(()=>e[239]||(e[239]=[a("Remove application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#edit-application"},{default:l(()=>e[240]||(e[240]=[a("Edit application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#migrate-application"},{default:l(()=>e[241]||(e[241]=[a("Migrate application")])),_:1})])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#node-js-selector-client-plugin"},{default:l(()=>e[242]||(e[242]=[a("Node.js Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#how-to-manage-application"},{default:l(()=>e[243]||(e[243]=[a("How to manage application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#start-application-2"},{default:l(()=>e[244]||(e[244]=[a("Start application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#stop-application-2"},{default:l(()=>e[245]||(e[245]=[a("Stop application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#restart-application-2"},{default:l(()=>e[246]||(e[246]=[a("Restart application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#remove-application-2"},{default:l(()=>e[247]||(e[247]=[a("Remove application")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#edit-application-2"},{default:l(()=>e[248]||(e[248]=[a("Edit application")])),_:1})])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#ruby-selector-client-plugin"},{default:l(()=>e[249]||(e[249]=[a("Ruby Selector client plugin")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-client-plugin"},{default:l(()=>e[250]||(e[250]=[a("PHP Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#php-selector-my-domains-tab"},{default:l(()=>e[251]||(e[251]=[a("PHP Selector. My Domains tab (cPanel)")])),_:1}),e[252]||(e[252]=a()),e[253]||(e[253]=s("sup",null,"CloudLinux Manager 6.0.1-2",-1))])])]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#cloudlinux-manager-options"},{default:l(()=>e[254]||(e[254]=[a("CloudLinux Manager options")])),_:1}),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#changing-settings-manually"},{default:l(()=>e[255]||(e[255]=[a("Changing settings manually")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#changing-settings-in-the-config-file"},{default:l(()=>e[256]||(e[256]=[a("Changing settings in the config file")])),_:1})])])])]),e[356]||(e[356]=o('

    Resource Usage client plugin

    Client resource usage plugin for cPanel, Plesk, and DirectAdmin allows host’s end users to view and monitor resource usage.

    Go to your control panel and click CPU and concurrent connection usage.

    Here you can see three tabs:

    • Dashboard: displays the general condition of your site. If your site is limited, this displays on the Dashboard.
    • Current usage: here you can find full information on the resource usage displayed in charts and tables.
    • Snapshot: server snapshots with processes list and database and HTTP queries.

    Dashboard

    Go to the Dashboard tab to see the general condition of your site. If your site is limited, you can see this on the Dashboard with the resource you are limited over. To see detailed information about resource usage, click Details.

    If your site is not limited, you will see the plain Dashboard.

    Current Usage

    Go to the Current Usage tab to see the detailed information about resource usage on your server.

    Note

    It's possible to add the normalized_user_cpu = N value to the /etc/sysconfig/cloudlinux file. So you can see for example CPU Usage X/200 (%) in the scenario where a user's LVE CPU limit is 200%. If the value is equal to Y, CPU Usage cannot get greater than 100%.

    Current Usage table

    The Current Usage table displays resource usage.

    Warning

    Inodes usage is displayed if it is enabled and Inodes limits are set for the user. cPanel only.

    • Description: resource name
    • Usage: resource usage value
    • Limit: resource usage limit
    • Fault: number of faults

    Filters

    You can filter charts and the Usage table by timeframe and time unit (day, hour, minute).

    Charts

    The following resources are displayed in charts:

    • CPU
    • Virtual Memory
    • Physical Memory
    • Input/Output
    • Io operations
    • Entry Processes
    • Processes

    All charts have the color legend:

    • Green — average resource usage
    • Red — limit set for this parameter
    • Blue — database
    • Green-cyan — faults (limit violations)

    You can also see the Faults chart with all faults for all resources.

    Usage

    The Usage table displays information on each resource usage sorted by timeframe and time unit.

    • From-To: period
    • A: average
    • L: limit
    • F: faults

    Use controls below the table to navigate through it.

    Snapshot

    Go to the Snapshot tab to see server snapshots with processes list and database and HTTP queries.

    You can choose a date and a snapshot to display in the table.

    Server process snapshots

    ',39)),s("p",null,[e[258]||(e[258]=a("When a CloudLinux OS user hits LVE limits, appropriate faults are generated and the ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats-2"},{default:l(()=>e[257]||(e[257]=[a("lvestats")])),_:1}),e[259]||(e[259]=a(" package generates a server process snapshot. The snapshot is a list of running applications and a list of running MySQL queries right after the faults happened."))]),e[357]||(e[357]=o(`

    Snapshots allow users to investigate the reason of accounts hitting their limits. Several snapshots are generated for each incident. An incident is a state when multiple faults are generated in a given time period. The time period is configurable. By default, if faults are generated within a period of 300 seconds, we consider them to be a single incident.

    The snapshot configuration options are available in

    /etc/sysconfig/lvestats.config/SnapshotSaver.cfg
    -
    • period_between_incidents = 300 by default, time in seconds
    • snapshots_per_minute = 2 by default, maximum number of snapshots per minute
    • max_snapshots_per_incident = 10 by default, maximum number of snapshots for an incident
    `,4)),s("p",null,[e[261]||(e[261]=a("To access ")),e[262]||(e[262]=s("span",{class:"notranslate"},[s("strong",null,"Snapshots")],-1)),e[263]||(e[263]=a(" you can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#lve-read-snapshot"},{default:l(()=>e[260]||(e[260]=[a("lve-read-snapshot")])),_:1}),e[264]||(e[264]=a(" utility."))]),e[358]||(e[358]=o(`

    Note

    The list of processes in a snapshot is close but not similar to the real processes list when faults were generated. It happens because of delay when the faults are happened and the snapshot is taken by the system.

    The list of MySQL queries is an output of a query:

    SELECT command, time, info FROM information_schema.processlist
    +

    As a result, CloudLinux Manager will automatically pick up this message and will show it in web-interface to administrator (see Figure 1.1 for cPanel, Figure 1.2 for DirectAdmin) and to user (see Figure 2.1 for cPanel, Figure 2.2 for DirectAdmin). You can add messages to other PHP versions this way as well.

    Figure 1.1 cPanel CloudLinux Manager (administrator)
    Figure 1.2 DirectAdmin CloudLinux Manager (administrator)
    Figure 2.1 cPanel CloudLinux Manager (user)
    Figure 2.2 DirectAdmin CloudLinux Manager (user)

    Note

    *For cPanel and DirectAdmin only.

    Client plugins

    ',75)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#resource-usage-client-plugin"},{default:l(()=>e[210]||(e[210]=[a("Resource Usage client plugin")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#dashboard-2"},{default:l(()=>e[211]||(e[211]=[a("Dashboard")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#current-usage-3"},{default:l(()=>e[212]||(e[212]=[a("Current Usage")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#current-usage-table"},{default:l(()=>e[213]||(e[213]=[a("Current Usage table")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#filters"},{default:l(()=>e[214]||(e[214]=[a("Filters")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#charts"},{default:l(()=>e[215]||(e[215]=[a("Charts")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#usage"},{default:l(()=>e[216]||(e[216]=[a("Usage")])),_:1})])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#snapshot"},{default:l(()=>e[217]||(e[217]=[a("Snapshot")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#server-processes-snapshots"},{default:l(()=>e[218]||(e[218]=[a("Server processes snapshots")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#process-list"},{default:l(()=>e[219]||(e[219]=[a("Process list")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#database-queries-cpanel-only"},{default:l(()=>e[220]||(e[220]=[a("Database queries (cPanel only)")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#http-queries"},{default:l(()=>e[221]||(e[221]=[a("HTTP queries")])),_:1})])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#python-selector-client-plugin"},{default:l(()=>e[222]||(e[222]=[a("Python Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-manage-an-application"},{default:l(()=>e[223]||(e[223]=[a("How to manage an application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#create-application"},{default:l(()=>e[224]||(e[224]=[a("Create application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#start-application"},{default:l(()=>e[225]||(e[225]=[a("Start application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#stop-application"},{default:l(()=>e[226]||(e[226]=[a("Stop application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#restart-application"},{default:l(()=>e[227]||(e[227]=[a("Restart application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#remove-application"},{default:l(()=>e[228]||(e[228]=[a("Remove application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#edit-application"},{default:l(()=>e[229]||(e[229]=[a("Edit application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#migrate-application"},{default:l(()=>e[230]||(e[230]=[a("Migrate application")])),_:1})])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector-client-plugin"},{default:l(()=>e[231]||(e[231]=[a("Node.js Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#how-to-manage-application"},{default:l(()=>e[232]||(e[232]=[a("How to manage application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#start-application-2"},{default:l(()=>e[233]||(e[233]=[a("Start application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#stop-application-2"},{default:l(()=>e[234]||(e[234]=[a("Stop application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#restart-application-2"},{default:l(()=>e[235]||(e[235]=[a("Restart application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#remove-application-2"},{default:l(()=>e[236]||(e[236]=[a("Remove application")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#edit-application-2"},{default:l(()=>e[237]||(e[237]=[a("Edit application")])),_:1})])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#ruby-selector-client-plugin"},{default:l(()=>e[238]||(e[238]=[a("Ruby Selector client plugin")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-client-plugin"},{default:l(()=>e[239]||(e[239]=[a("PHP Selector client plugin")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#php-selector-my-domains-tab"},{default:l(()=>e[240]||(e[240]=[a("PHP Selector. My Domains tab (cPanel)")])),_:1}),e[241]||(e[241]=a()),e[242]||(e[242]=s("sup",null,"CloudLinux Manager 6.0.1-2",-1))])])]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#cloudlinux-manager-options"},{default:l(()=>e[243]||(e[243]=[a("CloudLinux Manager options")])),_:1}),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#changing-settings-manually"},{default:l(()=>e[244]||(e[244]=[a("Changing settings manually")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#changing-settings-in-the-config-file"},{default:l(()=>e[245]||(e[245]=[a("Changing settings in the config file")])),_:1})])])])]),e[346]||(e[346]=o('

    Resource Usage client plugin

    Client resource usage plugin for cPanel, Plesk, and DirectAdmin allows host’s end users to view and monitor resource usage.

    Go to your control panel and click CPU and concurrent connection usage.

    Here you can see three tabs:

    • Dashboard: displays the general condition of your site. If your site is limited, this displays on the Dashboard.
    • Current usage: here you can find full information on the resource usage displayed in charts and tables.
    • Snapshot: server snapshots with processes list and database and HTTP queries.

    Dashboard

    Go to the Dashboard tab to see the general condition of your site. If your site is limited, you can see this on the Dashboard with the resource you are limited over. To see detailed information about resource usage, click Details.

    If your site is not limited, you will see the plain Dashboard.

    Current Usage

    Go to the Current Usage tab to see the detailed information about resource usage on your server.

    Note

    It's possible to add the normalized_user_cpu = N value to the /etc/sysconfig/cloudlinux file. So you can see for example CPU Usage X/200 (%) in the scenario where a user's LVE CPU limit is 200%. If the value is equal to Y, CPU Usage cannot get greater than 100%.

    Current Usage table

    The Current Usage table displays resource usage.

    Warning

    Inodes usage is displayed if it is enabled and Inodes limits are set for the user. cPanel only.

    • Description: resource name
    • Usage: resource usage value
    • Limit: resource usage limit
    • Fault: number of faults

    Filters

    You can filter charts and the Usage table by timeframe and time unit (day, hour, minute).

    Charts

    The following resources are displayed in charts:

    • CPU
    • Virtual Memory
    • Physical Memory
    • Input/Output
    • Io operations
    • Entry Processes
    • Processes

    All charts have the color legend:

    • Green — average resource usage
    • Red — limit set for this parameter
    • Blue — database
    • Green-cyan — faults (limit violations)

    You can also see the Faults chart with all faults for all resources.

    Usage

    The Usage table displays information on each resource usage sorted by timeframe and time unit.

    • From-To: period
    • A: average
    • L: limit
    • F: faults

    Use controls below the table to navigate through it.

    Snapshot

    Go to the Snapshot tab to see server snapshots with processes list and database and HTTP queries.

    You can choose a date and a snapshot to display in the table.

    Server process snapshots

    ',39)),s("p",null,[e[247]||(e[247]=a("When a CloudLinux OS user hits LVE limits, appropriate faults are generated and the ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats-2"},{default:l(()=>e[246]||(e[246]=[a("lvestats")])),_:1}),e[248]||(e[248]=a(" package generates a server process snapshot. The snapshot is a list of running applications and a list of running MySQL queries right after the faults happened."))]),e[347]||(e[347]=o(`

    Snapshots allow users to investigate the reason of accounts hitting their limits. Several snapshots are generated for each incident. An incident is a state when multiple faults are generated in a given time period. The time period is configurable. By default, if faults are generated within a period of 300 seconds, we consider them to be a single incident.

    The snapshot configuration options are available in

    /etc/sysconfig/lvestats.config/SnapshotSaver.cfg
    +
    • period_between_incidents = 300 by default, time in seconds
    • snapshots_per_minute = 2 by default, maximum number of snapshots per minute
    • max_snapshots_per_incident = 10 by default, maximum number of snapshots for an incident
    `,4)),s("p",null,[e[250]||(e[250]=a("To access ")),e[251]||(e[251]=s("span",{class:"notranslate"},[s("strong",null,"Snapshots")],-1)),e[252]||(e[252]=a(" you can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#lve-read-snapshot"},{default:l(()=>e[249]||(e[249]=[a("lve-read-snapshot")])),_:1}),e[253]||(e[253]=a(" utility."))]),e[348]||(e[348]=o(`

    Note

    The list of processes in a snapshot is close but not similar to the real processes list when faults were generated. It happens because of delay when the faults are happened and the snapshot is taken by the system.

    The list of MySQL queries is an output of a query:

    SELECT command, time, info FROM information_schema.processlist
     
     WHERE user = '%username';
    -

    Process list

    Displays information on processes in the selected snapshot.

    • PID: process ID
    • CMD: what command was run
    • CPU: CPU usage
    • MEM: memory usage

    Database queries (cPanel only)

    Displays information on database queries in the selected snapshot.

    HTTP queries

    Displays information on HTTP queries in the selected snapshot.

    Turning On / Off email notifications per user

    The following packages are required:

    • lvemanager-7.3.0-1
    • lve-stats-4.1.4-1

    A user can disable LVE-Stats notifications about hitting LVE limits by himself.

    The feature is available via Resource Usage client plugin | Options | LVE Stats Email Notifications

    Python Selector client plugin

    Note

    Python Selector icon in end user interface is hidden when Python is disabled

    End User interface allows end users to setup and manage Python for their web applications.

    Go to cPanel → Software Section → Setup Python App.

    Web Applications page is displayed.

    There are several columns in the list:

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Status — started/stopped — displays if an application is running or not and version of the application.
    • Actions — allows to migrate, start, restart, stop, edit, and remove a particular application.

    How to manage an application

    Create application

    NB! Do not use "python37", "python38", "python311" (i.e. "python{version number}") as names for your applications as this causes unexpected errors.

    ',29)),s("ol",null,[e[271]||(e[271]=s("li",null,[s("p",null,[a("Click "),s("span",{class:"notranslate"},[s("em",null,"Create Application")]),a(" to create an application. The Create Application tab opens.")]),s("p",null,[s("img",{src:gs,alt:""})])],-1)),s("li",null,[e[270]||(e[270]=s("p",null,"Specify the following:",-1)),s("ul",null,[e[269]||(e[269]=o('
  • Python version — select from the dropdown (required);
  • Application root — physical address to your application on a server that corresponds with its URI (required);
  • Application URL — HTTP/HTTPS link to your application (optional);
  • Application startup file — the file where WSGI callable object is located. It is required for application to run. Default is passenger_wsgi.py;
  • Application Entry point — WSGI callable object for your application (optional). Default is application;
  • ',5)),s("li",null,[e[266]||(e[266]=s("span",{class:"notranslate"},"Passenger log file",-1)),e[267]||(e[267]=a(" — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using ")),n(t,{to:"/command-line_tools/#new-python-selector"},{default:l(()=>e[265]||(e[265]=[a("cloudlinux-selector utility")])),_:1}),e[268]||(e[268]=a(")."))])])]),e[272]||(e[272]=s("li",null,[s("p",null,[a("Optionally, add environment variable. To do so, click "),s("span",{class:"notranslate"},[s("em",null,"Add Variable")]),a(" and specify variable name and value, then click the "),s("span",{class:"notranslate"},[s("em",null,"Done")]),a(" or "),s("span",{class:"notranslate"},[s("em",null,"Cancel")]),a(" to close an adding form.")])],-1))]),e[359]||(e[359]=o('

    To delete or edit environment variable, click Bin or Pencil for the required variable.

    Start application

    To start a stopped application do the following:

    • Click Start in the Actions column in a stopped application row.
    • When an action is completed a Start changes to Stop.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop changes to Start.

    Restart application

    To restart a started application do the following:

    • Click Restart in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin in the Actions column in a particular application row.
    • In the confirmation popup click Agree to start removing or Cancel to close the popup.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation popup will be displayed.

    Edit application

    To edit application do the following:

    • Click the Pencil in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    ',21)),s("ul",null,[e[276]||(e[276]=o('
  • Restart application — click Restart.
  • Stop application — click Stop App.
  • Remove application — click Destroy and confirm the action in a popup.
  • Change Python version — choose Python version from a dropdown.
  • Change Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
  • Change Application URL — specify in a field an HTTP/HTTPS link to the application.
  • Open Application URL — click the Open.
  • Change Application startup file — specify as NAME.py file.
  • Change Application Entry point — specify WSGI callable object for your application.
  • ',9)),s("li",null,[e[274]||(e[274]=a("Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using ")),n(t,{to:"/cloudlinuxos/command-line_tools/#new-python-selector"},{default:l(()=>e[273]||(e[273]=[a("cloudlinux-selector")])),_:1}),e[275]||(e[275]=a(" utility)."))]),e[277]||(e[277]=o('
  • Run pip install command — click Run pip install to install the package(s) described in the configuration file.
  • Add Configuration files — click Add and specify all required information.
  • Edit available configuration file — click Edit, the file opens in a new popup.
  • Remove available configuration file from the list — click Remove and confirm the action or click Cancel to close the popup.
  • Add Environment variables — click Add Variable and specify a name and a value.
  • ',5))]),e[360]||(e[360]=s("p",null,[a("Click "),s("span",{class:"notranslate"},[s("em",null,"Save")]),a(" to save all changes or "),s("span",{class:"notranslate"},[s("em",null,"Cancel")]),a(" to close the tab.")],-1)),e[361]||(e[361]=s("h4",{id:"migrate-application",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#migrate-application","aria-hidden":"true"},"#"),a(" Migrate application")],-1)),s("p",null,[e[279]||(e[279]=a("For details see ")),n(t,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-migrate-an-application-to-the-new-python-selector"},{default:l(()=>e[278]||(e[278]=[a("How to migrate an application to the new Python Selector")])),_:1})]),s("div",ba,[e[282]||(e[282]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[281]||(e[281]=a("You can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#end-user"},{default:l(()=>e[280]||(e[280]=[a("Python Selector CLI")])),_:1})])]),e[362]||(e[362]=o('

    Node.js Selector client plugin

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    End User interface allows end users to setup and manage Node.js for their web applications.
    Go to cPanel → Software Section → Setup Node.js App.

    Web Applications page is displayed.

    There are several columns in the list.

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Mode — can be production or development.
    • Status — started/stopped — displays if an application is running or not and version of application.
    • Actions — allows to start, restart, stop, edit, and remove a particular application.

    How to manage application

    Start application

    To start a stopped application do the following:

    • Click Start icon in the Actions column in a stopped application row.
    • When an action is completed a Start icon changes to Stop icon.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop icon changes to Start icon.

    Restart application

    To restart started application do the following:

    • Click Restart icon in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin icon in the Actions column in a particular application row.
    • In the confirmation pop-up click Agree to start removing or Cancel to close pop-up.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation pop-up will be displayed.

    Edit application

    To edit application do the following:

    • Click Pencil icon in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    ',28)),s("ul",null,[e[286]||(e[286]=o('
  • Restart application — click Restart button.
  • Stop Node.js — click Stop Node.js button.
  • Run JavaScript script — click Run JS Script button to run a command specified in the Scripts section of the package.json file. Specify the name of the script to run plus any parameters then click Ok .
  • Remove application — click Delete button and confirm the action in a pop-up.
  • Change Node.js version — choose Node.js version from a drop-down.
  • Change Application mode — choose application mode from a drop-down. Available modes are Production and Development .
  • Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
  • Application URL — specify in a field an HTTP/HTTPS link to the application.
  • Application startup file — specify as NAME.js file .
  • ',9)),s("li",null,[e[284]||(e[284]=a("Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Node.js applications via UI (or using ")),n(t,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:l(()=>e[283]||(e[283]=[a("cloudlinux-selector")])),_:1}),e[285]||(e[285]=a(" utility)."))]),e[287]||(e[287]=s("li",null,[a("Run "),s("span",{class:"notranslate"}," npm install command "),a(" — click "),s("span",{class:"notranslate"},[s("em",null,"Run npm install")]),a(" button to install the package(s) described in the "),s("span",{class:"notranslate"}," package.json "),a(" file.")],-1)),e[288]||(e[288]=s("li",null,[a("Add Environment variables — click "),s("span",{class:"notranslate"},[s("em",null,"Add Variable")]),a(" and specify a name and a value.")],-1))]),s("div",va,[e[291]||(e[291]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[290]||(e[290]=a("You can also use ")),n(t,{to:"/cloudlinuxos/command-line_tools/#end-user-2"},{default:l(()=>e[289]||(e[289]=[a("Node.js Selector CLI")])),_:1})])]),e[363]||(e[363]=o('

    Ruby Selector client plugin

    End user interface allows end users to setup and manage Ruby for their web applications.

    Go to cPanel → Software Section → Setup Ruby App.

    Setup Ruby application page is displayed.

    Here you can do the following:

    • Setup a new application.
    • View/edit/restart/remove the existing application.

    PHP Selector client plugin

    End user interface allows end users to select and manage PHP extensions and options for the particular PHP version.

    Go to cPanel → Software Section → Select PHP Version.

    PHP Extensions page opens.

    Here you can choose extensions for the particular PHP version, the current PHP version and reset to default.

    To manage PHP options, click Switch to PHP options.

    All changes are saved automatically.

    • allow_url_fopen. Allows PHP file functions to retrieve data from remote locations over FTP or HTTP. This option is a great security risk, thus do not turn it on without necessity.
    • display_errors. Determines whether errors should be printed to the screen as part of the output or if they should not be shown to a user.
    • error_reporting. The error reporting level.
    • file_uploads. Allows uploading files over HTTP.
    • include_path. The list of directories where scripts look for files (similar to system's PATH variable). To separate directories, use a colon (:) For example: .:/dir/inc:/usr/lib/php
    • log_errors. Tells whether to log errors. By default, errors are logged in the server's error log. Use the error_log directive to specify the path to your own log file.
    • mail.force_extra_parameters. Additional parameters for the mail() function used to send mail. For example, to use your custom Sendmail configuration: -C /dir/conf.cf
    • max_execution_time. The maximum time in seconds a script is allowed to run before it is terminated.
    • max_input_time. The maximum time in seconds a script is allowed to parse input data.
    • memory_limit. The maximum amount of memory in bytes a script is allowed to allocate. Set the value to -1 to have no memory limit (not recommended). Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    • open_basedir. The list of directories used to limit the files that can be opened by PHP. If the file is outside the specified directories, PHP scripts will refuse to open it. To separate directories, use a colon. For example: /dir/upload:/usr/tmp.
    • post_max_size. The maximum size in bytes of data that can be posted with the POST method. Typically, should be larger than upload_max_filesize and smaller than memory_limit. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 16M.
    • session.save_path. The directory where PHP writes session data (files). For example: /dir/tmp
    • short_open_tag. Allows the short form of the PHP open tag.
    • upload_max_filesize. The maximum size in bytes of an uploaded file. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    ',19)),s("h4",ya,[e[292]||(e[292]=s("a",{class:"header-anchor",href:"#php-selector-my-domains-tab","aria-hidden":"true"},"#",-1)),e[293]||(e[293]=a(" PHP Selector. My Domains tab ")),n(i,{type:"info",text:"cPanel"}),e[294]||(e[294]=a()),n(i,{type:"info",text:"CloudLinux Manager 6.0.1-2"})]),e[364]||(e[364]=o('

    The My Domains tab contains a list of user’s domains to visualize which PHP Selector is used by domain.

    A user can configure a domain to use CloudLinux OS PHP Selector.

    1. Click Use PHP Selector

    1. Set a version in PHP Selector

    Note

    If php-fpm is enabled for a domain the only administrator can set it to disable.

    CloudLinux Manager options

    You can change CloudLinux Manager settings for a server manually via cPanel/WHM or, if you have many servers, you can change CloudLinux Manager settings for them in the config file.

    Changing settings manually

    • Log in to cPanel, go to WHM, choose CloudLinux OS and click Options.
    • Change settings.

    Changing settings in the config file

    You can modify the following options in the config file /var/cpanel/cpanel.config directly for example via Puppet.

    lve_hideextensionsHides (when =1) range of php extensions for user in Select PHP version
    lve_hideuserstat Hides (when =1) LVE statistics in cPanel Stats Bar (UI)
    lve_showinodeusageDisplays (when =1) used inodes in cPanel (UI)
    lve_hide_selectorTurns off UI PHP Selector (Select PHP Version option)
    lve_enablerubyappDisplays (when =1) Ruby Selector in user’s interface (UI)

    Note

    It is not allowed to change lve_enablepythonapp option in the config file directly.

    You can use cloudlinux-selector utility to change lve_enablepythonapp option:

    cloudlinux-selector set --json --interpreter=python --selector-status=enabled
    +

    Process list

    Displays information on processes in the selected snapshot.

    • PID: process ID
    • CMD: what command was run
    • CPU: CPU usage
    • MEM: memory usage

    Database queries (cPanel only)

    Displays information on database queries in the selected snapshot.

    HTTP queries

    Displays information on HTTP queries in the selected snapshot.

    Turning On / Off email notifications per user

    The following packages are required:

    • lvemanager-7.3.0-1
    • lve-stats-4.1.4-1

    A user can disable LVE-Stats notifications about hitting LVE limits by himself.

    The feature is available via Resource Usage client plugin | Options | LVE Stats Email Notifications

    Python Selector client plugin

    Note

    Python Selector icon in end user interface is hidden when Python is disabled

    End User interface allows end users to setup and manage Python for their web applications.

    Go to cPanel → Software Section → Setup Python App.

    Web Applications page is displayed.

    There are several columns in the list:

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Status — started/stopped — displays if an application is running or not and version of the application.
    • Actions — allows to migrate, start, restart, stop, edit, and remove a particular application.

    How to manage an application

    Create application

    NB! Do not use "python37", "python38", "python311" (i.e. "python{version number}") as names for your applications as this causes unexpected errors.

    ',29)),s("ol",null,[e[260]||(e[260]=s("li",null,[s("p",null,[a("Click "),s("span",{class:"notranslate"},[s("em",null,"Create Application")]),a(" to create an application. The Create Application tab opens.")]),s("p",null,[s("img",{src:ms,alt:""})])],-1)),s("li",null,[e[259]||(e[259]=s("p",null,"Specify the following:",-1)),s("ul",null,[e[258]||(e[258]=o('
  • Python version — select from the dropdown (required);
  • Application root — physical address to your application on a server that corresponds with its URI (required);
  • Application URL — HTTP/HTTPS link to your application (optional);
  • Application startup file — the file where WSGI callable object is located. It is required for application to run. Default is passenger_wsgi.py;
  • Application Entry point — WSGI callable object for your application (optional). Default is application;
  • ',5)),s("li",null,[e[255]||(e[255]=s("span",{class:"notranslate"},"Passenger log file",-1)),e[256]||(e[256]=a(" — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using ")),t(n,{to:"/command-line_tools/#new-python-selector"},{default:l(()=>e[254]||(e[254]=[a("cloudlinux-selector utility")])),_:1}),e[257]||(e[257]=a(")."))])])]),e[261]||(e[261]=s("li",null,[s("p",null,[a("Optionally, add environment variable. To do so, click "),s("span",{class:"notranslate"},[s("em",null,"Add Variable")]),a(" and specify variable name and value, then click the "),s("span",{class:"notranslate"},[s("em",null,"Done")]),a(" or "),s("span",{class:"notranslate"},[s("em",null,"Cancel")]),a(" to close an adding form.")])],-1))]),e[349]||(e[349]=o('

    To delete or edit environment variable, click Bin or Pencil for the required variable.

    Start application

    To start a stopped application do the following:

    • Click Start in the Actions column in a stopped application row.
    • When an action is completed a Start changes to Stop.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop changes to Start.

    Restart application

    To restart a started application do the following:

    • Click Restart in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin in the Actions column in a particular application row.
    • In the confirmation popup click Agree to start removing or Cancel to close the popup.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation popup will be displayed.

    Edit application

    To edit application do the following:

    • Click the Pencil in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    ',21)),s("ul",null,[e[265]||(e[265]=o('
  • Restart application — click Restart.
  • Stop application — click Stop App.
  • Remove application — click Destroy and confirm the action in a popup.
  • Change Python version — choose Python version from a dropdown.
  • Change Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
  • Change Application URL — specify in a field an HTTP/HTTPS link to the application.
  • Open Application URL — click the Open.
  • Change Application startup file — specify as NAME.py file.
  • Change Application Entry point — specify WSGI callable object for your application.
  • ',9)),s("li",null,[e[263]||(e[263]=a("Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using ")),t(n,{to:"/cloudlinuxos/command-line_tools/#new-python-selector"},{default:l(()=>e[262]||(e[262]=[a("cloudlinux-selector")])),_:1}),e[264]||(e[264]=a(" utility)."))]),e[266]||(e[266]=o('
  • Run pip install command — click Run pip install to install the package(s) described in the configuration file.
  • Add Configuration files — click Add and specify all required information.
  • Edit available configuration file — click Edit, the file opens in a new popup.
  • Remove available configuration file from the list — click Remove and confirm the action or click Cancel to close the popup.
  • Add Environment variables — click Add Variable and specify a name and a value.
  • ',5))]),e[350]||(e[350]=s("p",null,[a("Click "),s("span",{class:"notranslate"},[s("em",null,"Save")]),a(" to save all changes or "),s("span",{class:"notranslate"},[s("em",null,"Cancel")]),a(" to close the tab.")],-1)),e[351]||(e[351]=s("h4",{id:"migrate-application",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#migrate-application","aria-hidden":"true"},"#"),a(" Migrate application")],-1)),s("p",null,[e[268]||(e[268]=a("For details see ")),t(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-migrate-an-application-to-the-new-python-selector"},{default:l(()=>e[267]||(e[267]=[a("How to migrate an application to the new Python Selector")])),_:1})]),s("div",ua,[e[271]||(e[271]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[270]||(e[270]=a("You can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#end-user"},{default:l(()=>e[269]||(e[269]=[a("Python Selector CLI")])),_:1})])]),e[352]||(e[352]=o('

    Node.js Selector client plugin

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    End User interface allows end users to setup and manage Node.js for their web applications.
    Go to cPanel → Software Section → Setup Node.js App.

    Web Applications page is displayed.

    There are several columns in the list.

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Mode — can be production or development.
    • Status — started/stopped — displays if an application is running or not and version of application.
    • Actions — allows to start, restart, stop, edit, and remove a particular application.

    How to manage application

    Start application

    To start a stopped application do the following:

    • Click Start icon in the Actions column in a stopped application row.
    • When an action is completed a Start icon changes to Stop icon.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop icon changes to Start icon.

    Restart application

    To restart started application do the following:

    • Click Restart icon in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin icon in the Actions column in a particular application row.
    • In the confirmation pop-up click Agree to start removing or Cancel to close pop-up.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation pop-up will be displayed.

    Edit application

    To edit application do the following:

    • Click Pencil icon in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    ',28)),s("ul",null,[e[275]||(e[275]=o('
  • Restart application — click Restart button.
  • Stop Node.js — click Stop Node.js button.
  • Run JavaScript script — click Run JS Script button to run a command specified in the Scripts section of the package.json file. Specify the name of the script to run plus any parameters then click Ok .
  • Remove application — click Delete button and confirm the action in a pop-up.
  • Change Node.js version — choose Node.js version from a drop-down.
  • Change Application mode — choose application mode from a drop-down. Available modes are Production and Development .
  • Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
  • Application URL — specify in a field an HTTP/HTTPS link to the application.
  • Application startup file — specify as NAME.js file .
  • ',9)),s("li",null,[e[273]||(e[273]=a("Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Node.js applications via UI (or using ")),t(n,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:l(()=>e[272]||(e[272]=[a("cloudlinux-selector")])),_:1}),e[274]||(e[274]=a(" utility)."))]),e[276]||(e[276]=s("li",null,[a("Run "),s("span",{class:"notranslate"}," npm install command "),a(" — click "),s("span",{class:"notranslate"},[s("em",null,"Run npm install")]),a(" button to install the package(s) described in the "),s("span",{class:"notranslate"}," package.json "),a(" file.")],-1)),e[277]||(e[277]=s("li",null,[a("Add Environment variables — click "),s("span",{class:"notranslate"},[s("em",null,"Add Variable")]),a(" and specify a name and a value.")],-1))]),s("div",ca,[e[280]||(e[280]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[279]||(e[279]=a("You can also use ")),t(n,{to:"/cloudlinuxos/command-line_tools/#end-user-2"},{default:l(()=>e[278]||(e[278]=[a("Node.js Selector CLI")])),_:1})])]),e[353]||(e[353]=o('

    Ruby Selector client plugin

    End user interface allows end users to setup and manage Ruby for their web applications.

    Go to cPanel → Software Section → Setup Ruby App.

    Setup Ruby application page is displayed.

    Here you can do the following:

    • Setup a new application.
    • View/edit/restart/remove the existing application.

    PHP Selector client plugin

    End user interface allows end users to select and manage PHP extensions and options for the particular PHP version.

    Go to cPanel → Software Section → Select PHP Version.

    PHP Extensions page opens.

    Here you can choose extensions for the particular PHP version, the current PHP version and reset to default.

    To manage PHP options, click Switch to PHP options.

    All changes are saved automatically.

    • allow_url_fopen. Allows PHP file functions to retrieve data from remote locations over FTP or HTTP. This option is a great security risk, thus do not turn it on without necessity.
    • display_errors. Determines whether errors should be printed to the screen as part of the output or if they should not be shown to a user.
    • error_reporting. The error reporting level.
    • file_uploads. Allows uploading files over HTTP.
    • include_path. The list of directories where scripts look for files (similar to system's PATH variable). To separate directories, use a colon (:) For example: .:/dir/inc:/usr/lib/php
    • log_errors. Tells whether to log errors. By default, errors are logged in the server's error log. Use the error_log directive to specify the path to your own log file.
    • mail.force_extra_parameters. Additional parameters for the mail() function used to send mail. For example, to use your custom Sendmail configuration: -C /dir/conf.cf
    • max_execution_time. The maximum time in seconds a script is allowed to run before it is terminated.
    • max_input_time. The maximum time in seconds a script is allowed to parse input data.
    • memory_limit. The maximum amount of memory in bytes a script is allowed to allocate. Set the value to -1 to have no memory limit (not recommended). Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    • open_basedir. The list of directories used to limit the files that can be opened by PHP. If the file is outside the specified directories, PHP scripts will refuse to open it. To separate directories, use a colon. For example: /dir/upload:/usr/tmp.
    • post_max_size. The maximum size in bytes of data that can be posted with the POST method. Typically, should be larger than upload_max_filesize and smaller than memory_limit. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 16M.
    • session.save_path. The directory where PHP writes session data (files). For example: /dir/tmp
    • short_open_tag. Allows the short form of the PHP open tag.
    • upload_max_filesize. The maximum size in bytes of an uploaded file. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    ',19)),e[354]||(e[354]=s("h4",{id:"php-selector-my-domains-tab",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#php-selector-my-domains-tab","aria-hidden":"true"},"#"),a(" PHP Selector. My Domains tab "),s("Badge",{type:"info",text:"cPanel"}),a(),s("Badge",{type:"info",text:"CloudLinux Manager 6.0.1-2"})],-1)),e[355]||(e[355]=o('

    The My Domains tab contains a list of user’s domains to visualize which PHP Selector is used by domain.

    A user can configure a domain to use CloudLinux OS PHP Selector.

    1. Click Use PHP Selector

    1. Set a version in PHP Selector

    Note

    If php-fpm is enabled for a domain the only administrator can set it to disable.

    CloudLinux Manager options

    You can change CloudLinux Manager settings for a server manually via cPanel/WHM or, if you have many servers, you can change CloudLinux Manager settings for them in the config file.

    Changing settings manually

    • Log in to cPanel, go to WHM, choose CloudLinux OS and click Options.
    • Change settings.

    Changing settings in the config file

    You can modify the following options in the config file /var/cpanel/cpanel.config directly for example via Puppet.

    lve_hideextensionsHides (when =1) range of php extensions for user in Select PHP version
    lve_hideuserstat Hides (when =1) LVE statistics in cPanel Stats Bar (UI)
    lve_showinodeusageDisplays (when =1) used inodes in cPanel (UI)
    lve_hide_selectorTurns off UI PHP Selector (Select PHP Version option)
    lve_enablerubyappDisplays (when =1) Ruby Selector in user’s interface (UI)

    Note

    It is not allowed to change lve_enablepythonapp option in the config file directly.

    You can use cloudlinux-selector utility to change lve_enablepythonapp option:

    cloudlinux-selector set --json --interpreter=python --selector-status=enabled
     

    Or you can change it via WHM -> CloudLinux Manager -> Options -> Python Selector -> Python

    After modifying the config files directly, you should execute the following command to apply changes:

    /usr/share/l.v.e-manager/utils/dynamicui.py --sync-conf=all
    -

    cPanel LVE Extension

    `,22)),s("ul",null,[s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#add-package-extension"},{default:l(()=>e[295]||(e[295]=[a("Add Package Extension")])),_:1})]),s("li",null,[n(t,{to:"/cloudlinuxos/lve_manager/#edit-package-extensions"},{default:l(()=>e[296]||(e[296]=[a("Edit Package Extensions")])),_:1})])]),e[365]||(e[365]=o('

    Note

    CloudLinux Manager 1.0-9.8+

    cPanel LVE Extension allows to control LVE limits for packages via cPanel hosting packages control interface and via cPanel WHM API . It simplifies integration with existing billing systems for cPanel (like WHMCS for example).

    Add Package Extension

    To add LVE Settings to standard cPanel package, go to Packages | Add a Package.

    Note

    You can find the information on how to add a package in official cPanel documentation on the link: https://documentation.cpanel.net/display/ALD/Add+a+Package

    Tick LVE Settings in the bottom of the page to open LVE Settings form.

    You can specify the following options:

    Note

    Your changes to LVE Settings will appear in the system after a little while.

    Speed SettingsMaximum CPU usage for an account. Must be in the range 1 - 100 (but obligatory > 0 ) if old format is used; use % or Mhz\\Ghz to set CPU limit as speed; Type DEFAULT to use default value.
    Memory Settings Pmem - Maximum physical memory usage for an account. Vmem - Maximum virtual memory usage for an account. Must be a positive number. Postfix allowed only in KGMT. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Max entry proc Settings Maximum number of entry processes (concurrent connections) for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Nproc Settings Maximum number of processes usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IO Settings Maximum I/O (input/output) usage speed for an account. Is measured in Kb/s. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IOPS Settings Maximum IOPS (input/output operations per second) usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 to unlimited resource.

    Click Add to apply your changes.

    Edit Package Extensions

    You can edit limits in any convenient for you way - in Edit a Package section, in the CloudLinux Manager or even via WHM API.

    Edit a Package

    To edit package extensions, go to Packages | Edit a Package. Choose a package from the Package list and click Edit.

    CloudLinux Manager

    To edit package extensions, go to CloudLinux Manager | Server Configuration | CloudLinux OS CloudLinux Manager | Packages and click pencil (edit) icon.

    WHM API

    To learn how to work with package extensions limits using WHM API, please read the official cPanel documentation: https://documentation.cpanel.net/display/SDK/Guide+to+Package+Extensions+-+Data+Behavior+and+Changes

    Control panel integration guide

    ',24)),s("p",null,[n(t,{to:"/cloudlinuxos/control_panel_integration/"},{default:l(()=>e[297]||(e[297]=[a("Here")])),_:1}),e[298]||(e[298]=a(" you will find the instructions and common techniques used to integrate your software with CloudLinux OS."))])])}const Sa=m(Us,[["render",wa],["__file","index.html.vue"]]);export{Sa as default}; +

    cPanel LVE Extension

    `,22)),s("ul",null,[s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#add-package-extension"},{default:l(()=>e[281]||(e[281]=[a("Add Package Extension")])),_:1})]),s("li",null,[t(n,{to:"/cloudlinuxos/lve_manager/#edit-package-extensions"},{default:l(()=>e[282]||(e[282]=[a("Edit Package Extensions")])),_:1})])]),e[356]||(e[356]=o('

    Note

    CloudLinux Manager 1.0-9.8+

    cPanel LVE Extension allows to control LVE limits for packages via cPanel hosting packages control interface and via cPanel WHM API . It simplifies integration with existing billing systems for cPanel (like WHMCS for example).

    Add Package Extension

    To add LVE Settings to standard cPanel package, go to Packages | Add a Package.

    Note

    You can find the information on how to add a package in official cPanel documentation on the link: https://documentation.cpanel.net/display/ALD/Add+a+Package

    Tick LVE Settings in the bottom of the page to open LVE Settings form.

    You can specify the following options:

    Note

    Your changes to LVE Settings will appear in the system after a little while.

    Speed SettingsMaximum CPU usage for an account. Must be in the range 1 - 100 (but obligatory > 0 ) if old format is used; use % or Mhz\\Ghz to set CPU limit as speed; Type DEFAULT to use default value.
    Memory Settings Pmem - Maximum physical memory usage for an account. Vmem - Maximum virtual memory usage for an account. Must be a positive number. Postfix allowed only in KGMT. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Max entry proc Settings Maximum number of entry processes (concurrent connections) for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Nproc Settings Maximum number of processes usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IO Settings Maximum I/O (input/output) usage speed for an account. Is measured in Kb/s. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IOPS Settings Maximum IOPS (input/output operations per second) usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 to unlimited resource.

    Click Add to apply your changes.

    Edit Package Extensions

    You can edit limits in any convenient for you way - in Edit a Package section, in the CloudLinux Manager or even via WHM API.

    Edit a Package

    To edit package extensions, go to Packages | Edit a Package. Choose a package from the Package list and click Edit.

    CloudLinux Manager

    To edit package extensions, go to CloudLinux Manager | Server Configuration | CloudLinux OS CloudLinux Manager | Packages and click pencil (edit) icon.

    WHM API

    To learn how to work with package extensions limits using WHM API, please read the official cPanel documentation: https://documentation.cpanel.net/display/SDK/Guide+to+Package+Extensions+-+Data+Behavior+and+Changes

    Control panel integration guide

    ',24)),s("p",null,[t(n,{to:"/cloudlinuxos/control_panel_integration/"},{default:l(()=>e[283]||(e[283]=[a("Here")])),_:1}),e[284]||(e[284]=a(" you will find the instructions and common techniques used to integrate your software with CloudLinux OS."))])])}const fa=u(Ds,[["render",ma],["__file","index.html.vue"]]);export{fa as default}; diff --git a/assets/index.html-afce4ad2.js b/assets/index.html-376dbb0d.js similarity index 64% rename from assets/index.html-afce4ad2.js rename to assets/index.html-376dbb0d.js index e161142c..ae1a49be 100644 --- a/assets/index.html-afce4ad2.js +++ b/assets/index.html-376dbb0d.js @@ -1,8 +1,8 @@ -import{_ as p,S as l,n as u,p as c,q as t,J as a,C as o,A as i,a4 as s}from"./framework-dd156d1c.js";const h={},g={class:"table-of-contents"},m={class:"tip custom-block"};function f(v,e){const n=l("router-link"),d=l("font"),r=l("RouterLink");return u(),c("div",null,[e[71]||(e[71]=t("h1",{id:"elevate",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#elevate","aria-hidden":"true"},"#"),a(" ELevate")],-1)),t("nav",g,[t("ul",null,[t("li",null,[o(n,{to:"#faq"},{default:i(()=>e[0]||(e[0]=[a("FAQ")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#what-is-elevate"},{default:i(()=>e[1]||(e[1]=[a("What is ELevate?")])),_:1})]),t("li",null,[o(n,{to:"#is-it-ready-for-production-use"},{default:i(()=>e[2]||(e[2]=[a("Is it ready for production use?")])),_:1})]),t("li",null,[o(n,{to:"#can-it-break-something-on-my-system"},{default:i(()=>e[3]||(e[3]=[a("Can it break something on my system?")])),_:1})]),t("li",null,[o(n,{to:"#will-it-upgrade-everything-i-have-on-my-system"},{default:i(()=>e[4]||(e[4]=[a("Will it upgrade everything I have on my system?")])),_:1})]),t("li",null,[o(n,{to:"#what-packages-can-i-expect-to-be-upgraded"},{default:i(()=>e[5]||(e[5]=[a("What packages can I expect to be upgraded?")])),_:1})]),t("li",null,[o(n,{to:"#will-it-interrupt-my-server-s-functionality"},{default:i(()=>e[6]||(e[6]=[a("Will it interrupt my server's functionality?")])),_:1})]),t("li",null,[o(n,{to:"#how-long-does-it-take"},{default:i(()=>e[7]||(e[7]=[a("How long does it take?")])),_:1})]),t("li",null,[o(n,{to:"#how-do-i-use-it"},{default:i(()=>e[8]||(e[8]=[a("How do I use it?")])),_:1})]),t("li",null,[o(n,{to:"#i-ran-into-a-problem-during-the-upgrade-process-what-do-i-do"},{default:i(()=>e[9]||(e[9]=[a("I ran into a problem during the upgrade process, what do I do?")])),_:1})]),t("li",null,[o(n,{to:"#the-troubleshooting-section-doesn-t-have-an-issue-that-i-m-having-what-now"},{default:i(()=>e[10]||(e[10]=[a("The Troubleshooting section doesn't have an issue that I'm having. What now?")])),_:1})])])]),t("li",null,[o(n,{to:"#troubleshooting"},{default:i(()=>e[11]||(e[11]=[a("Troubleshooting")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#common-issues"},{default:i(()=>e[12]||(e[12]=[a("Common issues")])),_:1})]),t("li",null,[o(n,{to:"#elevate-cpanel-scenario-issues"},{default:i(()=>e[13]||(e[13]=[a("ELevate cPanel Scenario issues")])),_:1})])])]),t("li",null,[o(n,{to:"#known-issues"},{default:i(()=>e[14]||(e[14]=[a("Known issues")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#web-servers"},{default:i(()=>e[15]||(e[15]=[a("Web servers")])),_:1})])])]),t("li",null,[o(n,{to:"#contribution"},{default:i(()=>e[16]||(e[16]=[a("Contribution")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#extending-cloudlinux-elevate-to-support-new-components-system-types"},{default:i(()=>e[17]||(e[17]=[a("Extending CloudLinux Elevate to support new components/system types")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-no-panel-or-a-custom-panel"},{default:i(()=>e[18]||(e[18]=[a("ELevate Scenario - CloudLinux 7 with no panel or a custom panel")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#pre-upgrade"},{default:i(()=>e[19]||(e[19]=[a("Pre-upgrade")])),_:1})]),t("li",null,[o(n,{to:"#transaction-configuration-files"},{default:i(()=>e[20]||(e[20]=[a("Transaction Configuration Files")])),_:1})]),t("li",null,[o(n,{to:"#upgrade"},{default:i(()=>e[21]||(e[21]=[a("Upgrade")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-cpanel"},{default:i(()=>e[22]||(e[22]=[a("ELevate Scenario - CloudLinux 7 with cPanel")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#upgrade-process-overview"},{default:i(()=>e[23]||(e[23]=[a("Upgrade process overview")])),_:1})]),t("li",null,[o(n,{to:"#preparing"},{default:i(()=>e[24]||(e[24]=[a("Preparing")])),_:1})]),t("li",null,[o(n,{to:"#running"},{default:i(()=>e[25]||(e[25]=[a("Running")])),_:1})]),t("li",null,[o(n,{to:"#post-upgrade"},{default:i(()=>e[26]||(e[26]=[a("Post-upgrade")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-plesk"},{default:i(()=>e[27]||(e[27]=[a("ELevate Scenario - CloudLinux 7 with Plesk")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#preparation"},{default:i(()=>e[28]||(e[28]=[a("Preparation")])),_:1})]),t("li",null,[o(n,{to:"#running-1"},{default:i(()=>e[29]||(e[29]=[a("Running")])),_:1})]),t("li",null,[o(n,{to:"#monitoring-and-troubleshooting"},{default:i(()=>e[30]||(e[30]=[a("Monitoring and troubleshooting")])),_:1})]),t("li",null,[o(n,{to:"#reverting"},{default:i(()=>e[31]||(e[31]=[a("Reverting")])),_:1})])])])])]),e[72]||(e[72]=s('

    Please note that the CloudLinux Elevate tool is intended specifically for upgrading the CloudLinux OS. Upgrading to CloudLinux directly from a non-CloudLinux OS is not supported.

    While it is possible, it requires additional steps to be taken. Refer to this documentation section for details.

    We disclaim responsibility for incorrect or improper use of the tool. The support team will not be able to help you if you have not followed all the steps described in the documentation or converted a server with an unsupported control panel present.

    In addition, support will not be provided if you have any third-party utilities that do not function after the upgrade, according to Support policy. Examples: webservers, DNS servers, mail servers, database servers and other utilities that do not belong to our product line.

    FAQ

    What is ELevate?

    The ELevate project is an initiative to support migrations between major version of RHEL-derivatives.

    The CloudLinux ELevate variant, built on top of the AlmaLinux ELevate project, aims to provide a streamlined method of upgrading CloudLinux 7 systems to CloudLinux 8 in-place.

    The Leapp utility is the main tool used to perform the upgrade.

    The ELevate Scenario - CloudLinux 7 with cPanel uses the cPanel ELevate project as an additional layer of the upgrade process.

    The ELevate Scenario - CloudLinux 7 with Plesk also uses an additional layer - the cloudlinux7to8 project.

    ELevate is a project aimed to provide the ability to migrate between major versions of RHEL-based distributions from 7.x to 8.x. It combines Red Hat's Leapp framework with a community created library and service for the migration metadata set required for it.

    Is it ready for production use?

    While the ELevate project and its surrounding ecosystem is mature, support for CloudLinux has been introduced more recently.

    We guarantee functionality of CloudLinux products and services on the post-upgrade system. You are welcome to contact CloudLinux Support with any issues that occur with said products.

    However, we cannot guarantee that the third-party software and RPM packages will be updated correctly on all system configurations. See below.

    Systems with configurations and packages that substantially differ from a typical CloudLinux 7 installation could encounter issues previously not seen before.

    Can it break something on my system?

    It can.

    A full system upgrade is an inherently invasive procedure. In some cases, due to different system configurations, package errors or even power failures, you may encounter issues during the upgrade process that can't be automatically recovered from.

    ',18)),t("p",null,[e[33]||(e[33]=a("Said issues may be severe, ")),t("strong",null,[o(d,{color:"Red"},{default:i(()=>e[32]||(e[32]=[a("up to and including rendering the system completely inaccessible.")])),_:1})])]),e[73]||(e[73]=s('

    In addition, in some cases the conversion process may get stuck once the server boots into a temporary configuration that does not start any network interfaces. It is preferable to have a way to access the server without an SSH connection, for example, through VNC.

    The upgrade process itself is not designed to be reversible. While some of the changes can be undone, the process of reverting the system to its pre-upgrade state varies depending on the system's configuration and the point at which the upgrade failed. Thus, restoring the system from a backup is the most reliable way to recover from a failed upgrade.

    Due to all of the potential risks involved, we highly recommend never running ELevate on a system without a full server backup/snapshot ready.

    Ideally, perform a trial run in a disposable environment, like a VM or a sandbox, to verify that migration functions as expected before you attempt to migrate a system.

    Will it upgrade everything I have on my system?

    It depends. ELevate will not upgrade arbitrary software, especially one that isn't related to CloudLinux or a supported control panel.

    The ELevate project only supports a subset of package repositories it's aware of - that is, package repositories that are included in its configuration files.

    Packages from repositories Leapp is unaware of will not be upgraded.

    ',8)),t("p",null,[e[35]||(e[35]=a("It's possible to add missing repositories and packages to ELevate yourself, if you're so inclined. Please check the ")),o(r,{to:"/cloudlinuxos/elevate/#contribution"},{default:i(()=>e[34]||(e[34]=[a("Contribution")])),_:1}),e[36]||(e[36]=a(" section for more information on how to do so."))]),e[74]||(e[74]=s('

    What packages can I expect to be upgraded?

    Aside from CloudLinux and AlmaLinux packages, the CloudLinux Elevate includes the extendable "vendors" mechanism that contains migration data for some frequently used third-party system components.

    That migration data is only activated when the corresponding package repositories are present and enabled on the pre-upgrade system.

    Some of the vendors shipping by default include:

    • Imunify360 and KernelCare
    • EPEL (Extra Packages for Enterprise Linux)

    Will it interrupt my server's functionality?

    Yes.

    One of the major steps of the upgrade process involves rebooting into a custom initramfs environment, from which the system's software is upgraded. During that period of time, the system will be mostly non-functional and inaccessible.

    This stage may take up to an hour, so schedule the upgrade accordingly.

    During the preparation stages - that is, when the upgrade process is first initiated and before the system is rebooted - the system's services will function normally.

    Note that different upgrade scenarios behave somewhat differently during the preparation stage. For example, the cPanel scenario will disable the site functionality from the inital stage up until completion, while the no-panel/custom panel scenario will not.

    How long does it take?

    Depending on the amount and size of the packages that need to be updated, the upgrade process may take a long time, up to several hours. This time also varies with the machine's resources and the speed of internet connection.

    If the machine remains unresponsive for more than 2 hours after rebooting, assume the upgrade process failed during the post-reboot phase, and the machine cannot return to normal functionality automatically.

    How do I use it?

    Depending on the web panel you have installed on your system, the upgrade process will require different steps.

    At the moment, ELevate migration from CloudLinux 7 to CloudLinux 8 is supported on:

    • no panel/custom panel systems;
    • cPanel systems.
    • DirectAdmin systems.
    • Plesk systems.

    I have a CL7 system with no webpanel/a custom webpanel installed, how do I upgrade to CL8?

    In such case, you can upgrade through the Leapp tool directly.

    Please refer to the CloudLinux 7 with no panel/custom panel ELevate Scenario for step-by-step instructions.

    I have a CL7 system with cPanel installed, how do I upgrade to CL8?

    With cPanel present on the machine, you need to run the upgrade process through the elevate-cpanel tool.

    Please refer to the ELevate Scenario - CloudLinux 7 with cPanel for step-by-step instructions.

    I have a CL7 system with DirectAdmin installed, how do I upgrade to CL8?

    The DirectAdmin panel does not require any additional actions or tools compared to the no-panel upgrade scenario.

    You can make use of the CloudLinux 7 with no panel/custom panel ELevate Scenario to upgrade systems with the DirectAdmin panel much like you would for systems without one.

    I have a CL7 system with Plesk installed, how do I upgrade to CL8?

    Like cPanel, the Plesk panel requires you to make use of an additional tool to perform the upgrade on a system. In this case, you need to use the cloudlinux7to8 tool provided by the Plesk team.

    Please refer to the ELevate Scenario - CloudLinux 7 with Plesk for step-by-step instructions.

    I have a CL7 system with a different panel installed, how do I upgrade to CL8?

    Unfortunately, CloudLinux ELevate doesn't support these system configurations yet.

    Instead, you can create a new machine with CloudLinux 8 and migrate your system's license and configuration to it.

    Please refer to the following documentation links for instructions on how to do so:

    I have a CentOS 7 system I want to migrate to CloudLinux 8, can I use your tool to do so?

    Not in a single step. The CloudLinux Elevate tool specifically targets the upgrade path of CloudLinux 7 to CloudLinux 8, and trying to use a different OS as a starting point is unlikely to end well.

    If you have a non-CloudLinux OS you wish to upgrade, you have the following options available:

    ',38)),t("ul",null,[t("li",null,[o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[37]||(e[37]=[a("Convert your system to CloudLinux 7 normally")])),_:1}),e[38]||(e[38]=a(", then use the CloudLinux Elevate tool to migrate it to CloudLinux 8."))]),t("li",null,[e[40]||(e[40]=a("If you're using a CentOS 7 system without a panel, use the ")),e[41]||(e[41]=t("a",{href:"https://almalinux.org/elevate/",target:"_blank",rel:"noopener noreferrer"},"AlmaLinux Elevate",-1)),e[42]||(e[42]=a(" tool to upgrade it to AlmaLinux 8, then ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[39]||(e[39]=[a("convert it to CloudLinux normally")])),_:1}),e[43]||(e[43]=a("."))]),t("li",null,[e[45]||(e[45]=a("If you're using cPanel, you'll need to use the ")),e[46]||(e[46]=t("a",{href:"https://cpanel.github.io/elevate/",target:"_blank",rel:"noopener noreferrer"},"cPanel Elevate",-1)),e[47]||(e[47]=a(" tool instead. Use it to upgrade your system to AlmaLinux 8 + cPanel, then ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[44]||(e[44]=[a("convert it to CloudLinux normally")])),_:1}),e[48]||(e[48]=a("."))])]),e[75]||(e[75]=s(`

    Please note that the Elevate variants (AlmaLinux, cPanel) mentioned above are maintained by third parties. As such, should you encounter problems when using them, you should direct your questions/support requests to the maintainers of the tool you're using.

    I ran into a problem during the upgrade process, what do I do?

    Please check the Troubleshooting section directly below.

    The Troubleshooting section doesn't have an issue that I'm having. What now?

    First, try to narrow down the most probable source of the issue you've encountered, if possible.

    For cPanel-specific issues, cPanel ELevate issue tracker is the most appropriate place to report them.

    For CloudLinux-specific issues, report them in the CloudLinux ELevate issue tracker or contact CloudLinux Support with a description of the encountered problem.

    For issues with the underlying Leapp framework, report them in the AlmaLinux Leapp repository issue tracker.

    When filing an issue, include:

    • Steps to reproduce the issue
    • All files in /var/log/leapp
    • /var/lib/leapp/leapp.db
    • journalctl
    • If using the CloudLinux 7 with cPanel scenario, /var/log/elevate-cpanel.log
    • If you want, you can also send anything else would you like to provide (e.g. storage info)

    For your convenience you can pack all logs with this command:

    # tar -czf leapp-logs.tgz /var/log/leapp /var/lib/leapp/leapp.db

    Then you may attach only the leapp-logs.tgz file.

    For the no-panel scenario: before gathering data, if possible, re-run the leapp command that encountered an issue with the --debug flag, e.g.: leapp upgrade --debug.

    Troubleshooting

    Here is a list of common problems you may encounter during the upgrade attempt.

    Common issues

    These issues may be encountered during any ELevate Scenario.

    Newest kernel

    The preupgrade/upgrade process may halt with the following message:

    Inhibitor: Newest installed kernel not in use

    Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly.

    Kernel modules deprecated

    Some kernel modules are deprecated in the CloudLinux 8 major versions. To proceed with the upgade, unload them. Leapp will advise on the list of modules to be removed.

    rmmod floppy pata_acpi btrfs
    +import{_ as d,S as l,n as p,p as u,q as t,J as a,C as o,A as i,a4 as s}from"./framework-dd156d1c.js";const c={},h={class:"table-of-contents"},g={class:"tip custom-block"};function m(f,e){const n=l("router-link"),r=l("RouterLink");return p(),u("div",null,[e[69]||(e[69]=t("h1",{id:"elevate",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#elevate","aria-hidden":"true"},"#"),a(" ELevate")],-1)),t("nav",h,[t("ul",null,[t("li",null,[o(n,{to:"#faq"},{default:i(()=>e[0]||(e[0]=[a("FAQ")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#what-is-elevate"},{default:i(()=>e[1]||(e[1]=[a("What is ELevate?")])),_:1})]),t("li",null,[o(n,{to:"#is-it-ready-for-production-use"},{default:i(()=>e[2]||(e[2]=[a("Is it ready for production use?")])),_:1})]),t("li",null,[o(n,{to:"#can-it-break-something-on-my-system"},{default:i(()=>e[3]||(e[3]=[a("Can it break something on my system?")])),_:1})]),t("li",null,[o(n,{to:"#will-it-upgrade-everything-i-have-on-my-system"},{default:i(()=>e[4]||(e[4]=[a("Will it upgrade everything I have on my system?")])),_:1})]),t("li",null,[o(n,{to:"#what-packages-can-i-expect-to-be-upgraded"},{default:i(()=>e[5]||(e[5]=[a("What packages can I expect to be upgraded?")])),_:1})]),t("li",null,[o(n,{to:"#will-it-interrupt-my-server-s-functionality"},{default:i(()=>e[6]||(e[6]=[a("Will it interrupt my server's functionality?")])),_:1})]),t("li",null,[o(n,{to:"#how-long-does-it-take"},{default:i(()=>e[7]||(e[7]=[a("How long does it take?")])),_:1})]),t("li",null,[o(n,{to:"#how-do-i-use-it"},{default:i(()=>e[8]||(e[8]=[a("How do I use it?")])),_:1})]),t("li",null,[o(n,{to:"#i-ran-into-a-problem-during-the-upgrade-process-what-do-i-do"},{default:i(()=>e[9]||(e[9]=[a("I ran into a problem during the upgrade process, what do I do?")])),_:1})]),t("li",null,[o(n,{to:"#the-troubleshooting-section-doesn-t-have-an-issue-that-i-m-having-what-now"},{default:i(()=>e[10]||(e[10]=[a("The Troubleshooting section doesn't have an issue that I'm having. What now?")])),_:1})])])]),t("li",null,[o(n,{to:"#troubleshooting"},{default:i(()=>e[11]||(e[11]=[a("Troubleshooting")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#common-issues"},{default:i(()=>e[12]||(e[12]=[a("Common issues")])),_:1})]),t("li",null,[o(n,{to:"#elevate-cpanel-scenario-issues"},{default:i(()=>e[13]||(e[13]=[a("ELevate cPanel Scenario issues")])),_:1})])])]),t("li",null,[o(n,{to:"#known-issues"},{default:i(()=>e[14]||(e[14]=[a("Known issues")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#web-servers"},{default:i(()=>e[15]||(e[15]=[a("Web servers")])),_:1})])])]),t("li",null,[o(n,{to:"#contribution"},{default:i(()=>e[16]||(e[16]=[a("Contribution")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#extending-cloudlinux-elevate-to-support-new-components-system-types"},{default:i(()=>e[17]||(e[17]=[a("Extending CloudLinux Elevate to support new components/system types")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-no-panel-or-a-custom-panel"},{default:i(()=>e[18]||(e[18]=[a("ELevate Scenario - CloudLinux 7 with no panel or a custom panel")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#pre-upgrade"},{default:i(()=>e[19]||(e[19]=[a("Pre-upgrade")])),_:1})]),t("li",null,[o(n,{to:"#transaction-configuration-files"},{default:i(()=>e[20]||(e[20]=[a("Transaction Configuration Files")])),_:1})]),t("li",null,[o(n,{to:"#upgrade"},{default:i(()=>e[21]||(e[21]=[a("Upgrade")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-cpanel"},{default:i(()=>e[22]||(e[22]=[a("ELevate Scenario - CloudLinux 7 with cPanel")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#upgrade-process-overview"},{default:i(()=>e[23]||(e[23]=[a("Upgrade process overview")])),_:1})]),t("li",null,[o(n,{to:"#preparing"},{default:i(()=>e[24]||(e[24]=[a("Preparing")])),_:1})]),t("li",null,[o(n,{to:"#running"},{default:i(()=>e[25]||(e[25]=[a("Running")])),_:1})]),t("li",null,[o(n,{to:"#post-upgrade"},{default:i(()=>e[26]||(e[26]=[a("Post-upgrade")])),_:1})])])]),t("li",null,[o(n,{to:"#elevate-scenario-cloudlinux-7-with-plesk"},{default:i(()=>e[27]||(e[27]=[a("ELevate Scenario - CloudLinux 7 with Plesk")])),_:1}),t("ul",null,[t("li",null,[o(n,{to:"#preparation"},{default:i(()=>e[28]||(e[28]=[a("Preparation")])),_:1})]),t("li",null,[o(n,{to:"#running-1"},{default:i(()=>e[29]||(e[29]=[a("Running")])),_:1})]),t("li",null,[o(n,{to:"#monitoring-and-troubleshooting"},{default:i(()=>e[30]||(e[30]=[a("Monitoring and troubleshooting")])),_:1})]),t("li",null,[o(n,{to:"#reverting"},{default:i(()=>e[31]||(e[31]=[a("Reverting")])),_:1})])])])])]),e[70]||(e[70]=s('

    Please note that the CloudLinux Elevate tool is intended specifically for upgrading the CloudLinux OS. Upgrading to CloudLinux directly from a non-CloudLinux OS is not supported.

    While it is possible, it requires additional steps to be taken. Refer to this documentation section for details.

    We disclaim responsibility for incorrect or improper use of the tool. The support team will not be able to help you if you have not followed all the steps described in the documentation or converted a server with an unsupported control panel present.

    In addition, support will not be provided if you have any third-party utilities that do not function after the upgrade, according to Support policy. Examples: webservers, DNS servers, mail servers, database servers and other utilities that do not belong to our product line.

    FAQ

    What is ELevate?

    The ELevate project is an initiative to support migrations between major version of RHEL-derivatives.

    The CloudLinux ELevate variant, built on top of the AlmaLinux ELevate project, aims to provide a streamlined method of upgrading CloudLinux 7 systems to CloudLinux 8 in-place.

    The Leapp utility is the main tool used to perform the upgrade.

    The ELevate Scenario - CloudLinux 7 with cPanel uses the cPanel ELevate project as an additional layer of the upgrade process.

    The ELevate Scenario - CloudLinux 7 with Plesk also uses an additional layer - the cloudlinux7to8 project.

    ELevate is a project aimed to provide the ability to migrate between major versions of RHEL-based distributions from 7.x to 8.x. It combines Red Hat's Leapp framework with a community created library and service for the migration metadata set required for it.

    Is it ready for production use?

    While the ELevate project and its surrounding ecosystem is mature, support for CloudLinux has been introduced more recently.

    We guarantee functionality of CloudLinux products and services on the post-upgrade system. You are welcome to contact CloudLinux Support with any issues that occur with said products.

    However, we cannot guarantee that the third-party software and RPM packages will be updated correctly on all system configurations. See below.

    Systems with configurations and packages that substantially differ from a typical CloudLinux 7 installation could encounter issues previously not seen before.

    Can it break something on my system?

    It can.

    A full system upgrade is an inherently invasive procedure. In some cases, due to different system configurations, package errors or even power failures, you may encounter issues during the upgrade process that can't be automatically recovered from.

    Said issues may be severe, up to and including rendering the system completely inaccessible.

    In addition, in some cases the conversion process may get stuck once the server boots into a temporary configuration that does not start any network interfaces. It is preferable to have a way to access the server without an SSH connection, for example, through VNC.

    The upgrade process itself is not designed to be reversible. While some of the changes can be undone, the process of reverting the system to its pre-upgrade state varies depending on the system's configuration and the point at which the upgrade failed. Thus, restoring the system from a backup is the most reliable way to recover from a failed upgrade.

    Due to all of the potential risks involved, we highly recommend never running ELevate on a system without a full server backup/snapshot ready.

    Ideally, perform a trial run in a disposable environment, like a VM or a sandbox, to verify that migration functions as expected before you attempt to migrate a system.

    Will it upgrade everything I have on my system?

    It depends. ELevate will not upgrade arbitrary software, especially one that isn't related to CloudLinux or a supported control panel.

    The ELevate project only supports a subset of package repositories it's aware of - that is, package repositories that are included in its configuration files.

    Packages from repositories Leapp is unaware of will not be upgraded.

    ',27)),t("p",null,[e[33]||(e[33]=a("It's possible to add missing repositories and packages to ELevate yourself, if you're so inclined. Please check the ")),o(r,{to:"/cloudlinuxos/elevate/#contribution"},{default:i(()=>e[32]||(e[32]=[a("Contribution")])),_:1}),e[34]||(e[34]=a(" section for more information on how to do so."))]),e[71]||(e[71]=s('

    What packages can I expect to be upgraded?

    Aside from CloudLinux and AlmaLinux packages, the CloudLinux Elevate includes the extendable "vendors" mechanism that contains migration data for some frequently used third-party system components.

    That migration data is only activated when the corresponding package repositories are present and enabled on the pre-upgrade system.

    Some of the vendors shipping by default include:

    • Imunify360 and KernelCare
    • EPEL (Extra Packages for Enterprise Linux)

    Will it interrupt my server's functionality?

    Yes.

    One of the major steps of the upgrade process involves rebooting into a custom initramfs environment, from which the system's software is upgraded. During that period of time, the system will be mostly non-functional and inaccessible.

    This stage may take up to an hour, so schedule the upgrade accordingly.

    During the preparation stages - that is, when the upgrade process is first initiated and before the system is rebooted - the system's services will function normally.

    Note that different upgrade scenarios behave somewhat differently during the preparation stage. For example, the cPanel scenario will disable the site functionality from the inital stage up until completion, while the no-panel/custom panel scenario will not.

    How long does it take?

    Depending on the amount and size of the packages that need to be updated, the upgrade process may take a long time, up to several hours. This time also varies with the machine's resources and the speed of internet connection.

    If the machine remains unresponsive for more than 2 hours after rebooting, assume the upgrade process failed during the post-reboot phase, and the machine cannot return to normal functionality automatically.

    How do I use it?

    Depending on the web panel you have installed on your system, the upgrade process will require different steps.

    At the moment, ELevate migration from CloudLinux 7 to CloudLinux 8 is supported on:

    • no panel/custom panel systems;
    • cPanel systems.
    • DirectAdmin systems.
    • Plesk systems.

    I have a CL7 system with no webpanel/a custom webpanel installed, how do I upgrade to CL8?

    In such case, you can upgrade through the Leapp tool directly.

    Please refer to the CloudLinux 7 with no panel/custom panel ELevate Scenario for step-by-step instructions.

    I have a CL7 system with cPanel installed, how do I upgrade to CL8?

    With cPanel present on the machine, you need to run the upgrade process through the elevate-cpanel tool.

    Please refer to the ELevate Scenario - CloudLinux 7 with cPanel for step-by-step instructions.

    I have a CL7 system with DirectAdmin installed, how do I upgrade to CL8?

    The DirectAdmin panel does not require any additional actions or tools compared to the no-panel upgrade scenario.

    You can make use of the CloudLinux 7 with no panel/custom panel ELevate Scenario to upgrade systems with the DirectAdmin panel much like you would for systems without one.

    I have a CL7 system with Plesk installed, how do I upgrade to CL8?

    Like cPanel, the Plesk panel requires you to make use of an additional tool to perform the upgrade on a system. In this case, you need to use the cloudlinux7to8 tool provided by the Plesk team.

    Please refer to the ELevate Scenario - CloudLinux 7 with Plesk for step-by-step instructions.

    I have a CL7 system with a different panel installed, how do I upgrade to CL8?

    Unfortunately, CloudLinux ELevate doesn't support these system configurations yet.

    Instead, you can create a new machine with CloudLinux 8 and migrate your system's license and configuration to it.

    Please refer to the following documentation links for instructions on how to do so:

    I have a CentOS 7 system I want to migrate to CloudLinux 8, can I use your tool to do so?

    Not in a single step. The CloudLinux Elevate tool specifically targets the upgrade path of CloudLinux 7 to CloudLinux 8, and trying to use a different OS as a starting point is unlikely to end well.

    If you have a non-CloudLinux OS you wish to upgrade, you have the following options available:

    ',38)),t("ul",null,[t("li",null,[o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[35]||(e[35]=[a("Convert your system to CloudLinux 7 normally")])),_:1}),e[36]||(e[36]=a(", then use the CloudLinux Elevate tool to migrate it to CloudLinux 8."))]),t("li",null,[e[38]||(e[38]=a("If you're using a CentOS 7 system without a panel, use the ")),e[39]||(e[39]=t("a",{href:"https://almalinux.org/elevate/",target:"_blank",rel:"noopener noreferrer"},"AlmaLinux Elevate",-1)),e[40]||(e[40]=a(" tool to upgrade it to AlmaLinux 8, then ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[37]||(e[37]=[a("convert it to CloudLinux normally")])),_:1}),e[41]||(e[41]=a("."))]),t("li",null,[e[43]||(e[43]=a("If you're using cPanel, you'll need to use the ")),e[44]||(e[44]=t("a",{href:"https://cpanel.github.io/elevate/",target:"_blank",rel:"noopener noreferrer"},"cPanel Elevate",-1)),e[45]||(e[45]=a(" tool instead. Use it to upgrade your system to AlmaLinux 8 + cPanel, then ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#converting-existing-servers"},{default:i(()=>e[42]||(e[42]=[a("convert it to CloudLinux normally")])),_:1}),e[46]||(e[46]=a("."))])]),e[72]||(e[72]=s(`

    Please note that the Elevate variants (AlmaLinux, cPanel) mentioned above are maintained by third parties. As such, should you encounter problems when using them, you should direct your questions/support requests to the maintainers of the tool you're using.

    I ran into a problem during the upgrade process, what do I do?

    Please check the Troubleshooting section directly below.

    The Troubleshooting section doesn't have an issue that I'm having. What now?

    First, try to narrow down the most probable source of the issue you've encountered, if possible.

    For cPanel-specific issues, cPanel ELevate issue tracker is the most appropriate place to report them.

    For CloudLinux-specific issues, report them in the CloudLinux ELevate issue tracker or contact CloudLinux Support with a description of the encountered problem.

    For issues with the underlying Leapp framework, report them in the AlmaLinux Leapp repository issue tracker.

    When filing an issue, include:

    • Steps to reproduce the issue
    • All files in /var/log/leapp
    • /var/lib/leapp/leapp.db
    • journalctl
    • If using the CloudLinux 7 with cPanel scenario, /var/log/elevate-cpanel.log
    • If you want, you can also send anything else would you like to provide (e.g. storage info)

    For your convenience you can pack all logs with this command:

    # tar -czf leapp-logs.tgz /var/log/leapp /var/lib/leapp/leapp.db

    Then you may attach only the leapp-logs.tgz file.

    For the no-panel scenario: before gathering data, if possible, re-run the leapp command that encountered an issue with the --debug flag, e.g.: leapp upgrade --debug.

    Troubleshooting

    Here is a list of common problems you may encounter during the upgrade attempt.

    Common issues

    These issues may be encountered during any ELevate Scenario.

    Newest kernel

    The preupgrade/upgrade process may halt with the following message:

    Inhibitor: Newest installed kernel not in use

    Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly.

    Kernel modules deprecated

    Some kernel modules are deprecated in the CloudLinux 8 major versions. To proceed with the upgade, unload them. Leapp will advise on the list of modules to be removed.

    rmmod floppy pata_acpi btrfs
     

    Package repository defined multiple times

    You may encounter the following error message when attempting to upgrade:

    Inhibitor: A YUM/DNF repository defined multiple times
     

    Refer to the /var/log/leapp/leapp-report.txt for the details on the repository in question.

    To correct the issue, examine your yum reposiory configuration and clear out any dupicate entries before restarting the upgrade process.

    Package upgrades being pulled from incorrect repositories

    You may find that some packages on your system are listed in the preupgrade report in the message "Packages not signed by a known packager found on the system".

    This may mean two things:

    • that the packages listed are indeed unknown to Leapp, and cannot be included in the upgrade process, or;
    • that the corresponding package repositories were not recognized and the vendors mechanism could not be set up properly as a result.

    Make sure that all of the package repositories relevant to the current system state are present and enabled before proceeding with the upgrade. That will ensure that the Leapp tool correctly maps the source repositories to the target ones, and includes everything available into the migration process accordingly.

    Keep in mind that known vendor repositories must be enabled in order for the packages from them to be included into the upgrade.

    SSHD config default mismatch

    If your OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, this upgrade inhibitor will apperar.

    The option's default is "yes" in RHEL7, but will change in RHEL8 to "prohibit-password", which may affect your ability to log onto this machine after the upgrade.

    To prevent this from occuring, set the PermitRootLogin option explicity to preserve the default behaivour after migration:

    echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
     

    Alternatively, configure the SSHD so that the option is present explicitly, without leaving it to the default behaviour.

    Disabling PAM modules

    PAM module pam_pkcs11 is no longer available in RHEL-8 since it was replaced by SSSD. Leaving this module in PAM configuration may lock out the system.

    Allow Leapp to disable the pam_pkcs11 module in PAM configuration by adding an entry to the Leapp answerfile:

    sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True
    -

    CLN registration

    Should you encounter an issue with the switch_cln_channel actor, make sure that your system is registered with the CLN network.

    rhn_check; echo $?

    `,49)),t("p",null,[e[50]||(e[50]=a("If it is not, you may want to force a ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#license-activation"},{default:i(()=>e[49]||(e[49]=[a("re-registration.")])),_:1})]),e[76]||(e[76]=s(`

    CLN channel remains targeting CL8 after an unsuccessful migration

    If you roll back a machine after an unsuccessful migration, you may find that your server still pulls package updates from the CLN repository for CL8.

    This will be indicated by upgrades pulling packages from the cloudlinux-x86_64-server-8 repository.

    To switch back to the CL7 channel manually, run the following command:

    cln-switch-channel -t 7 -o -f
    +

    CLN registration

    Should you encounter an issue with the switch_cln_channel actor, make sure that your system is registered with the CLN network.

    rhn_check; echo $?

    `,49)),t("p",null,[e[48]||(e[48]=a("If it is not, you may want to force a ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#license-activation"},{default:i(()=>e[47]||(e[47]=[a("re-registration.")])),_:1})]),e[73]||(e[73]=s(`

    CLN channel remains targeting CL8 after an unsuccessful migration

    If you roll back a machine after an unsuccessful migration, you may find that your server still pulls package updates from the CLN repository for CL8.

    This will be indicated by upgrades pulling packages from the cloudlinux-x86_64-server-8 repository.

    To switch back to the CL7 channel manually, run the following command:

    cln-switch-channel -t 7 -o -f
     

    DNF plugin installation

    You may encounter issues with Leapp DNF actors failing with the following message: Cannot obtain data about the DNF configuration.

    To resolve this problem, ensure that the dnf config-manager plugin is installed and is functioning properly.

    If not, enable the corresponding package repository (e.g. centos-extras) and install it.

    dnf install 'dnf-command(config-manager)'

    DNF transaction failures

    The main upgrade transaction is performed while the system is booted into a custom InitRamFS. From there, all the package operations prepared during the previous steps are performed.

    While in this state, the system is inaccessble remotely via SSH. However, it can still be accessed through tools such as VNC.

    In some cases, the upgrade may encounter an unrecoverable error while running the transaction, which can result in the system remaining in a halfway-upgraded, unusable and partially inaccessible state.

    For example, if a package encounters a fatal error inside its %preun or %prein scriptlets during the upgrade, the transaction and the upgrade process may halt, leaving the system in an unusable state.

    It is recommended to remove such packages prior to the upgrade, or, alternatively, add them to the to_keep list (see Transaction Configuration Files section) to prevent Leapp from attempting to upgrade them.

    Missing upgrade package files

    In some cases, you may find the upgrade process halting at the main upgrade DNF transaction with a list of error messages similar to the following:

    2024-01-01 17:24:55.396 DEBUG    PID: 1053 leapp.workflow.RPMUpgrade.dnf_upgrade_transaction: Error opening /var/cache/dnf/almalinux8-baseos-f11d00b8ca777dac/packages/alt-php82-newrelic-10.16.0.5-1.el8.x86_64.rpm: No such file or directory
     2024-01-01 17:24:55.410 DEBUG    PID: 1053 leapp.workflow.RPMUpgrade.dnf_upgrade_transaction: Package "alt-php82-newrelic-10.16.0.5-1.el8.x86_64" from repository "almalinux8-baseos" has incorrect checksum
     

    In the known possible error scenario, this problem occurs when the upgrade packages were downloaded from CLN-provided package repositories, but CLN was then disabled due to a registration/networking error encountered.

    Check the version of the dnf-plugin-spacewalk being installed into the isolated upgrade environment in the logs. Its release must be either cloudlinux.2.leapp.2, or cloudlinux.5 and above for the CLN/upgrade integration functionality.

    Also, make sure that the following line is present:

    leapp.workflow.RPMUpgrade.dnf_upgrade_transaction: Leapp upgrade is running - using cache.
    @@ -33,8 +33,8 @@ You should disable these repositories and remove packages installed from them
     before continuing the update.
     
     Consider reporting this limitation to https://github.com/cpanel/elevate/issues
    -

    elevate-cpanel checks for presence of unknown enabled repositories and blocks the migration process if one is found.

    The packages from the listed repositories won't be properly upgraded if Leapp doesn't contain their data in its configuration files.

    It's recommended to follow the provided suggestion and remove the repositories and packages before running the upgrade.

    `,59)),t("p",null,[e[52]||(e[52]=a("If you'd like to add the configuration data for new repositories and packages to Leapp, please refer to the ")),o(r,{to:"/cloudlinuxos/elevate/#contribution"},{default:i(()=>e[51]||(e[51]=[a("Contribution")])),_:1}),e[53]||(e[53]=a(" section of the manual for information on the proper procedure for doing so."))]),e[77]||(e[77]=s('

    Known issues

    Web servers

    The Litespeed web server installation scheme is currently incompatible with the no-panel Elevate configuration.

    It can be updated after the upgrade is complete, but won't be automatically upgraded with the rest of the system during the ELevate process.

    Contribution

    ELevate is developed and built as a tool for RHEL-based distributives, not just CloudLinux specifically.

    ELevate supports migrating to/from other distributions and is open for all to contribute to and enhance.

    You can find more information and FAQ about the AlmaLinux ELevate this project is built upon at almalinux.org/elevate and Migration SIG, as well as contribute using the ELevate Contribution Guide.

    CloudLinux does not provide support related to integrating third-party repositories or packages into the upgrade process. However, you can add the aforementioned components to the Leapp database yourself.

    Extending CloudLinux Elevate to support new components/system types

    Suppose you have a no-panel system with additional software or a system with a custom panel installed. The standard CloudLinux Elevate upgrade will not upgrade such a system fully - the components that aren’t known to Elevate (i.e. those that aren’t present in its configuration files) won’t be touched during the upgrade and will remain the same on the post-upgrade system.

    Consider package repositories and the corresponding packages that are present on your system. The pre-upgrade/upgrade report will list the unrecognized or unsupported parts of these packages.

    ',12)),t("p",null,[e[55]||(e[55]=a("To get the report, ")),o(r,{to:"/cloudlinuxos/elevate/#pre-upgrade"},{default:i(()=>e[54]||(e[54]=[a("run the pre-upgrade procedure")])),_:1}),e[56]||(e[56]=a(" first. Check the Elevate pre-upgrade report (")),e[57]||(e[57]=t("code",null,"/var/log/leapp/leapp-report.txt",-1)),e[58]||(e[58]=a(")."))]),e[78]||(e[78]=s('

    Look for unknown/unsigned package reports in the list of the resulting messages.

    If you want to upgrade these packages during the Elevate process, you need to integrate them into the Elevate configuration files.

    Please check the Third-party integration section in the linked README for instructions on integrating new repositories and packages into the process.

    In the typical case, you’ll want to map all of your old package repositories (those present in CL7/RHEL7) to the new package repositories that will be present in the new upgraded system (CL8/RHEL8).

    When linked like this, the new repositories will be used by Leapp during the upgrade, and any present packages associated with these repositories will be upgraded.

    The package signatures should be added to the corresponding file for them to be accepted into the upgrade process.

    When there are discrepancies between the packages between the old and new OS versions (e.g. a single package was split into two, or two merged into one), they should be added into the package migration event list in order for Elevate to correctly upgrade them during the process.

    Note that Elevate only uses the provided information about new repositories during the upgrade. The state of yum/dnf configuration on the system after the upgrade depends on the repository configuration files brought by the updated packages. If your package repository configs aren’t connected to the packages being upgraded, you should consider adding a custom script to modify them for the new OS version.

    If mapping package repositories from old to new (CL7 repositories -> CL8 repositories), as well as mapping the package changes, is not sufficient for a successful upgrade of your system, consider adding custom Python scripts (called Leapp actors) that handle your upgrade scenario, e.g. configuration migrations, system modifications, etc.

    To summarize:

    ',10)),t("ul",null,[t("li",null,[o(r,{to:"/cloudlinuxos/elevate/#elevate-scenario-cloudlinux-7-with-no-panel-or-a-custom-panel"},{default:i(()=>e[59]||(e[59]=[a("Install CloudLinux Elevate")])),_:1}),e[60]||(e[60]=a(" and run ")),e[61]||(e[61]=t("code",null,"leapp preupgrade",-1)),e[62]||(e[62]=a("."))]),e[63]||(e[63]=t("li",null,[a("Check the pre-upgrade report ("),t("code",null,"/var/log/leapp/leapp-report.txt"),a(") for packages that will not be upgraded.")],-1)),e[64]||(e[64]=t("li",null,[a("For those packages that you want to see upgraded, "),t("a",{href:"https://github.com/CloudLinux/leapp-repository/tree/cloudlinux#third-party-integration",target:"_blank",rel:"noopener noreferrer"},"extend the Elevate configuration files"),a(" with package repository mappings and package migration events.")],-1)),e[65]||(e[65]=t("li",null,[a("If required, "),t("a",{href:"https://github.com/CloudLinux/leapp-repository/tree/cloudlinux#adding-complex-changes-custom-actors-for-migration",target:"_blank",rel:"noopener noreferrer"},"add additional custom scripts"),a(" (Leapp actors) to handle any extra arbitrary actions during the upgrade.")],-1)),e[66]||(e[66]=t("li",null,"Rerun the pre-upgrade procedure to ensure that your changes are integrated correctly, then test the upgrade process as desired.",-1))]),e[79]||(e[79]=s(`

    ELevate Scenario - CloudLinux 7 with no panel or a custom panel

    This scenario contains steps on how to upgrade CloudLinux 7 to CloudLinux 8 on no-panel/custom panel systems.

    1. First of all, make sure that your CloudLinux 7 is fully upgraded and on the latest kernel version.

    2. After that, download and install "elevate-release" package to configure necessary RPM repositories:

    sudo yum install https://repo.cloudlinux.com/elevate/elevate-release-latest-el7.noarch.rpm
    -
    1. Install leapp packages and migration data for the CloudLinux OS.

    Note

    In some cases, e.g. when directed by support, you may want to make use of the beta CloudLinux Leapp packages when running the upgrade.

    To do so, enable the cloudlinux-elevate-updates-testing repository, brought by the elevate-release package, before installing the leapp packages.

    `,6)),t("div",m,[e[70]||(e[70]=t("p",{class:"custom-block-title"},null,-1)),t("p",null,[e[68]||(e[68]=a("Note that ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#license-activation"},{default:i(()=>e[67]||(e[67]=[a("a valid license")])),_:1}),e[69]||(e[69]=a(" must be present for installation to work."))])]),e[80]||(e[80]=s(`
    sudo yum install -y leapp-upgrade leapp-data-cloudlinux
    +

    elevate-cpanel checks for presence of unknown enabled repositories and blocks the migration process if one is found.

    The packages from the listed repositories won't be properly upgraded if Leapp doesn't contain their data in its configuration files.

    It's recommended to follow the provided suggestion and remove the repositories and packages before running the upgrade.

    `,59)),t("p",null,[e[50]||(e[50]=a("If you'd like to add the configuration data for new repositories and packages to Leapp, please refer to the ")),o(r,{to:"/cloudlinuxos/elevate/#contribution"},{default:i(()=>e[49]||(e[49]=[a("Contribution")])),_:1}),e[51]||(e[51]=a(" section of the manual for information on the proper procedure for doing so."))]),e[74]||(e[74]=s('

    Known issues

    Web servers

    The Litespeed web server installation scheme is currently incompatible with the no-panel Elevate configuration.

    It can be updated after the upgrade is complete, but won't be automatically upgraded with the rest of the system during the ELevate process.

    Contribution

    ELevate is developed and built as a tool for RHEL-based distributives, not just CloudLinux specifically.

    ELevate supports migrating to/from other distributions and is open for all to contribute to and enhance.

    You can find more information and FAQ about the AlmaLinux ELevate this project is built upon at almalinux.org/elevate and Migration SIG, as well as contribute using the ELevate Contribution Guide.

    CloudLinux does not provide support related to integrating third-party repositories or packages into the upgrade process. However, you can add the aforementioned components to the Leapp database yourself.

    Extending CloudLinux Elevate to support new components/system types

    Suppose you have a no-panel system with additional software or a system with a custom panel installed. The standard CloudLinux Elevate upgrade will not upgrade such a system fully - the components that aren’t known to Elevate (i.e. those that aren’t present in its configuration files) won’t be touched during the upgrade and will remain the same on the post-upgrade system.

    Consider package repositories and the corresponding packages that are present on your system. The pre-upgrade/upgrade report will list the unrecognized or unsupported parts of these packages.

    ',12)),t("p",null,[e[53]||(e[53]=a("To get the report, ")),o(r,{to:"/cloudlinuxos/elevate/#pre-upgrade"},{default:i(()=>e[52]||(e[52]=[a("run the pre-upgrade procedure")])),_:1}),e[54]||(e[54]=a(" first. Check the Elevate pre-upgrade report (")),e[55]||(e[55]=t("code",null,"/var/log/leapp/leapp-report.txt",-1)),e[56]||(e[56]=a(")."))]),e[75]||(e[75]=s('

    Look for unknown/unsigned package reports in the list of the resulting messages.

    If you want to upgrade these packages during the Elevate process, you need to integrate them into the Elevate configuration files.

    Please check the Third-party integration section in the linked README for instructions on integrating new repositories and packages into the process.

    In the typical case, you’ll want to map all of your old package repositories (those present in CL7/RHEL7) to the new package repositories that will be present in the new upgraded system (CL8/RHEL8).

    When linked like this, the new repositories will be used by Leapp during the upgrade, and any present packages associated with these repositories will be upgraded.

    The package signatures should be added to the corresponding file for them to be accepted into the upgrade process.

    When there are discrepancies between the packages between the old and new OS versions (e.g. a single package was split into two, or two merged into one), they should be added into the package migration event list in order for Elevate to correctly upgrade them during the process.

    Note that Elevate only uses the provided information about new repositories during the upgrade. The state of yum/dnf configuration on the system after the upgrade depends on the repository configuration files brought by the updated packages. If your package repository configs aren’t connected to the packages being upgraded, you should consider adding a custom script to modify them for the new OS version.

    If mapping package repositories from old to new (CL7 repositories -> CL8 repositories), as well as mapping the package changes, is not sufficient for a successful upgrade of your system, consider adding custom Python scripts (called Leapp actors) that handle your upgrade scenario, e.g. configuration migrations, system modifications, etc.

    To summarize:

    ',10)),t("ul",null,[t("li",null,[o(r,{to:"/cloudlinuxos/elevate/#elevate-scenario-cloudlinux-7-with-no-panel-or-a-custom-panel"},{default:i(()=>e[57]||(e[57]=[a("Install CloudLinux Elevate")])),_:1}),e[58]||(e[58]=a(" and run ")),e[59]||(e[59]=t("code",null,"leapp preupgrade",-1)),e[60]||(e[60]=a("."))]),e[61]||(e[61]=t("li",null,[a("Check the pre-upgrade report ("),t("code",null,"/var/log/leapp/leapp-report.txt"),a(") for packages that will not be upgraded.")],-1)),e[62]||(e[62]=t("li",null,[a("For those packages that you want to see upgraded, "),t("a",{href:"https://github.com/CloudLinux/leapp-repository/tree/cloudlinux#third-party-integration",target:"_blank",rel:"noopener noreferrer"},"extend the Elevate configuration files"),a(" with package repository mappings and package migration events.")],-1)),e[63]||(e[63]=t("li",null,[a("If required, "),t("a",{href:"https://github.com/CloudLinux/leapp-repository/tree/cloudlinux#adding-complex-changes-custom-actors-for-migration",target:"_blank",rel:"noopener noreferrer"},"add additional custom scripts"),a(" (Leapp actors) to handle any extra arbitrary actions during the upgrade.")],-1)),e[64]||(e[64]=t("li",null,"Rerun the pre-upgrade procedure to ensure that your changes are integrated correctly, then test the upgrade process as desired.",-1))]),e[76]||(e[76]=s(`

    ELevate Scenario - CloudLinux 7 with no panel or a custom panel

    This scenario contains steps on how to upgrade CloudLinux 7 to CloudLinux 8 on no-panel/custom panel systems.

    1. First of all, make sure that your CloudLinux 7 is fully upgraded and on the latest kernel version.

    2. After that, download and install "elevate-release" package to configure necessary RPM repositories:

    sudo yum install https://repo.cloudlinux.com/elevate/elevate-release-latest-el7.noarch.rpm
    +
    1. Install leapp packages and migration data for the CloudLinux OS.

    Note

    In some cases, e.g. when directed by support, you may want to make use of the beta CloudLinux Leapp packages when running the upgrade.

    To do so, enable the cloudlinux-elevate-updates-testing repository, brought by the elevate-release package, before installing the leapp packages.

    `,6)),t("div",g,[e[68]||(e[68]=t("p",{class:"custom-block-title"},null,-1)),t("p",null,[e[66]||(e[66]=a("Note that ")),o(r,{to:"/cloudlinuxos/cloudlinux_installation/#license-activation"},{default:i(()=>e[65]||(e[65]=[a("a valid license")])),_:1}),e[67]||(e[67]=a(" must be present for installation to work."))])]),e[77]||(e[77]=s(`
    sudo yum install -y leapp-upgrade leapp-data-cloudlinux
     

    Pre-upgrade

    Start a preupgrade check. In the meanwhile, the Leapp utility creates a special /var/log/leapp/leapp-report.txt file that contains possible problems and recommended solutions. No rpm packages will be installed during this phase.

    WARNING

    The preupgrade check will likely fail as the default CloudLinux 7 doesn't meet all requirements for migration. That is expected.

    sudo leapp preupgrade
     

    This summary report will help you get a picture of whether it is possible to continue the upgrade.

    The preupgrade process may stall with the following message:

    Inhibitor: Newest installed kernel not in use
     

    Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly.

    Note

    In certain configurations, Leapp generates /var/log/leapp/answerfile with true/false questions. Leapp utility requires answers to all these questions in order to proceed with the upgrade.

    Once the preupgrade process completes, the results will be contained in the file /var/log/leapp/leapp-report.txt.

    It's advised to review the report and consider how the changes will affect your system.

    WARNING

    In particular, pay attention to the packages that will not be upgraded during the transaction.

    Should any packages or package repositories that are unknown to Leapp be detected, they will be listed in the report. Consider how leaving the listed items unupgraded will affect the stability of your system.

    If the packages listed as unknown in the report are critical for your system, proceeding with the upgrade is extremely likely to damage its functionality, up to making the machine unaccessible.

    If you'd like to perform an upgrade on a system with unknown packages/repositories reported, and you're confident about all the potential risks, consider first adding the unknown repositories to Leapp's database, as described here.

    Transaction Configuration Files

    If you want to manually override the framework's upgrade actions for specific packages, you may do so by editing the files contained in /etc/leapp/transaction/.

    These configuration files have priority over automatic package upgrade resolutions and Package Elevation Service data.

    The configuration files are as follows:

    • to_install
      • Install these packages. Don't remove them or preserve them as-is.
    • to_remove
      • Remove these packages. Do not attempt to keep them or upgrade them.
    • to_keep
      • Do not upgrade these packages. Keep them as they are on the system.
    • to_reinstall
      • Remove these packages during the update, then reinstall them. Mostly useful for packages that have the same version string between major versions, and thus won't be upgraded automatically.

    Upgrade

    Start an upgrade. You’ll be offered to reboot the system after this process is completed.

    sudo leapp upgrade
    @@ -60,4 +60,4 @@ cat /etc/os-release
     

    To monitor the progress of the conversion process in real time, use the --monitor flag.

    > ./cloudlinux7to8 --monitor
     ( stage 3 / action re-installing plesk components  ) 02:26 / 06:18
     

    Aside from the main Leapp logs contained in /var/log/leapp, the cloudlinux7to8 tool will create a log file in /var/log/plesk/cloudlinux7to8.log that contains additional information about the conversion process.

    Reverting

    If the process fails during the initial stages, you can attempt to revert the system to its original state by running the cloudlinux7to8 tool with the --revert flag.

    > ./cloudlinux7to8 --revert
    -

    The cloudlinux7to8 will undo some of the changes it made and restart Plesk services.

    Note that the revert process may not be able to fully restore the system to its original state, and you may need to restore from a backup if the system is left in an unusable state.

    You cannot use revert to undo the changes after the first reboot triggered by cloudlinux7to8.

    Also, the revert does not remove Leapp or packages installed by Leapp. Neither does it free persistent storage disk space reserved by Leapp.

    `,113))])}const y=p(h,[["render",f],["__file","index.html.vue"]]);export{y as default}; +

    The cloudlinux7to8 will undo some of the changes it made and restart Plesk services.

    Note that the revert process may not be able to fully restore the system to its original state, and you may need to restore from a backup if the system is left in an unusable state.

    You cannot use revert to undo the changes after the first reboot triggered by cloudlinux7to8.

    Also, the revert does not remove Leapp or packages installed by Leapp. Neither does it free persistent storage disk space reserved by Leapp.

    `,113))])}const b=d(c,[["render",m],["__file","index.html.vue"]]);export{b as default}; diff --git a/assets/index.html-a7c97b2a.js b/assets/index.html-451f0f35.js similarity index 87% rename from assets/index.html-a7c97b2a.js rename to assets/index.html-451f0f35.js index ff77cd36..1950e06c 100644 --- a/assets/index.html-a7c97b2a.js +++ b/assets/index.html-451f0f35.js @@ -1,19 +1,19 @@ -import{_ as d,S as r,n as c,p as u,q as s,J as n,C as a,A as i,a4 as l}from"./framework-dd156d1c.js";const p={},m={id:"fs-protected-symlinks-create",tabindex:"-1"},v={class:"notranslate"},h={id:"fs-process-symlinks-by-task",tabindex:"-1"},g={id:"enter-lve-when-using-cpanel-utilities",tabindex:"-1"};function f(b,e){const t=r("RouterLink"),o=r("Badge");return c(),u("div",null,[e[41]||(e[41]=s("h1",{id:"cloudlinux-os-kernel",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-os-kernel","aria-hidden":"true"},"#"),n(" CloudLinux OS kernel")],-1)),e[42]||(e[42]=s("p",null,[n("This documentation describes specific features of the CloudLinux kernel. In other cases the kernel has the same features and innovations as any similar RHEL kernel. More information about the actual kernel changes and releases can be obtained from our "),s("a",{href:"https://changelog.cloudlinux.com/",target:"_blank",rel:"noopener noreferrer"},"changelog"),n(".")],-1)),s("ul",null,[s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#cl9-lts-kernel"},{default:i(()=>e[0]||(e[0]=[n("CL9 LTS kernel")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#hybrid-kernels"},{default:i(()=>e[1]||(e[1]=[n("Hybrid Kernels")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection"},{default:i(()=>e[2]||(e[2]=[n("SecureLinks and Link Traversal Protection")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#file-change-api"},{default:i(()=>e[3]||(e[3]=[n("File change API")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#tuned-profiles-cloudlinux"},{default:i(()=>e[4]||(e[4]=[n("Tuned-profiles-cloudlinux")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#kernel-config-variables"},{default:i(()=>e[5]||(e[5]=[n("Kernel config variables")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#virtualized-proc-filesystem"},{default:i(()=>e[6]||(e[6]=[n("Virtualized /proc filesystem")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#ptrace-block"},{default:i(()=>e[7]||(e[7]=[n("Ptrace block")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#xen-xvda"},{default:i(()=>e[8]||(e[8]=[n("Xen XVDA")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#umask-behavior"},{default:i(()=>e[9]||(e[9]=[n("Umask behavior")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#io-limits-latency"},{default:i(()=>e[10]||(e[10]=[n("IO limits latency")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#reading-lve-usage"},{default:i(()=>e[11]||(e[11]=[n("Reading LVE usage")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#flashcache"},{default:i(()=>e[12]||(e[12]=[n("Flashcache")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#oom-killer-for-lve-processes"},{default:i(()=>e[13]||(e[13]=[n("OOM killer for LVE processes")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#file-system-quotas"},{default:i(()=>e[14]||(e[14]=[n("File system quotas")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#enter-lve-when-using-cpanel-utilities"},{default:i(()=>e[15]||(e[15]=[n("Enter LVE when using cPanel utilities")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#proactive-reporting-kernel-crash-events-with-sentry-and-kernel-panic-receiver"},{default:i(()=>e[16]||(e[16]=[n("Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver")])),_:1})])]),e[43]||(e[43]=l(`

    CL9 LTS kernel

    In CL9 we don’t have our own kernel, instead we use AlmaLinux’s one which gets regular upstream updates.

    For stability purposes we have also prepared the LTS (Long Term Support) kernel which is older than AlmaLinux by upstream version but has all security fixes / high scored CVEs.

    We recommend this kernel as it minimizes changes while maintaining comprehensive CVE coverage.

    How To Install

    Run the following commands:

    dnf install -y --allowerasing kernel-lts kmod-lve-lts perf-lts bpftool-lts
    +import{_ as o,S as r,n as d,p as c,q as s,J as n,C as t,A as i,a4 as l}from"./framework-dd156d1c.js";const u={},p={class:"notranslate"};function m(v,e){const a=r("RouterLink");return d(),c("div",null,[e[29]||(e[29]=s("h1",{id:"cloudlinux-os-kernel",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-os-kernel","aria-hidden":"true"},"#"),n(" CloudLinux OS kernel")],-1)),e[30]||(e[30]=s("p",null,[n("This documentation describes specific features of the CloudLinux kernel. In other cases the kernel has the same features and innovations as any similar RHEL kernel. More information about the actual kernel changes and releases can be obtained from our "),s("a",{href:"https://changelog.cloudlinux.com/",target:"_blank",rel:"noopener noreferrer"},"changelog"),n(".")],-1)),s("ul",null,[s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#cl9-lts-kernel"},{default:i(()=>e[0]||(e[0]=[n("CL9 LTS kernel")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#hybrid-kernels"},{default:i(()=>e[1]||(e[1]=[n("Hybrid Kernels")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection"},{default:i(()=>e[2]||(e[2]=[n("SecureLinks and Link Traversal Protection")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#file-change-api"},{default:i(()=>e[3]||(e[3]=[n("File change API")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#tuned-profiles-cloudlinux"},{default:i(()=>e[4]||(e[4]=[n("Tuned-profiles-cloudlinux")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#kernel-config-variables"},{default:i(()=>e[5]||(e[5]=[n("Kernel config variables")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#virtualized-proc-filesystem"},{default:i(()=>e[6]||(e[6]=[n("Virtualized /proc filesystem")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#ptrace-block"},{default:i(()=>e[7]||(e[7]=[n("Ptrace block")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#xen-xvda"},{default:i(()=>e[8]||(e[8]=[n("Xen XVDA")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#umask-behavior"},{default:i(()=>e[9]||(e[9]=[n("Umask behavior")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#io-limits-latency"},{default:i(()=>e[10]||(e[10]=[n("IO limits latency")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#reading-lve-usage"},{default:i(()=>e[11]||(e[11]=[n("Reading LVE usage")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#flashcache"},{default:i(()=>e[12]||(e[12]=[n("Flashcache")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#oom-killer-for-lve-processes"},{default:i(()=>e[13]||(e[13]=[n("OOM killer for LVE processes")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#file-system-quotas"},{default:i(()=>e[14]||(e[14]=[n("File system quotas")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#enter-lve-when-using-cpanel-utilities"},{default:i(()=>e[15]||(e[15]=[n("Enter LVE when using cPanel utilities")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#proactive-reporting-kernel-crash-events-with-sentry-and-kernel-panic-receiver"},{default:i(()=>e[16]||(e[16]=[n("Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver")])),_:1})])]),e[31]||(e[31]=l(`

    CL9 LTS kernel

    In CL9 we don’t have our own kernel, instead we use AlmaLinux’s one which gets regular upstream updates.

    For stability purposes we have also prepared the LTS (Long Term Support) kernel which is older than AlmaLinux by upstream version but has all security fixes / high scored CVEs.

    We recommend this kernel as it minimizes changes while maintaining comprehensive CVE coverage.

    How To Install

    Run the following commands:

    dnf install -y --allowerasing kernel-lts kmod-lve-lts perf-lts bpftool-lts
     
    reboot
     

    After the reboot, you should delete regular kernels to prevent regular updates from overwriting default boot kernel:

    dnf remove kernel-core
     

    Hybrid Kernels

    Hybrid kernels give you the ability to take advantage of the benefits and features available in newer kernels without having to completely upgrade to another version of the operating system. Example - for the CloudLinux 7 kernel, based on version 3.10, you can install a hybrid kernel (same as on CloudLinux 8), which is based on version 4.18. This provides more kernel options, memory and overall optimization, as well as a positive impact on system performance.

    How to migrate from the normal kernel to hybrid one

    Note

    The system must have an active CloudLinux OS license

    Warning

    If you use yum-plugin-protectbase, please make sure it is disabled before stating the normal-to-hybrid script.

    You should perform the following commands:

    yum update
     normal-to-hybrid
     

    Then if the script execution is completed without errors - perform the server reboot.

    Note

    You can always migrate from the hybrid kernel to normal one with the following commands:

    yum update
     hybrid-to-normal
    -

    Known limitations and issues of hybrid kernels

    CloudLinux OS 6 Hybrid kernel

    1. We do not remove Hybrid kernel after migration from Hybrid to the normal channel, but we remove linux-firmware package which is needed to boot Hybrid kernel. This is because CloudLinux OS 6 does not allow to remove the package of currently running kernel. Thus please don't reboot the server back to Hybrid kernel after you remove it.

    2. Kernel module signature isn't checking for now, as 3.10 kernel is using x509 certificates to generate keys and CloudLinux OS 6 cannot detect signatures created in such way.

    Note

    Link Traversal Protection is disabled by default for the CloudLinux OS.

    CloudLinux OS provides comprehensive protection against symbolic link attacks popular in shared hosting environment.

    The protection requires setting multiple kernel parameters to be enabled:

    SecureLinks:

    `,27)),s("ul",null,[s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-enforce-symlinksifowner"},{default:i(()=>e[17]||(e[17]=[n("fs.enforce_symlinksifowner")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-symlinkown-gid"},{default:i(()=>e[18]||(e[18]=[n("fs.symlinkown_gid")])),_:1})])]),e[44]||(e[44]=s("p",null,[s("strong",null,"Link Traversal Protection:")],-1)),s("ul",null,[s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-protected-symlinks-create"},{default:i(()=>e[19]||(e[19]=[n("fs.protected_symlinks_create")])),_:1})]),s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-process-symlinks-by-task"},{default:i(()=>e[20]||(e[20]=[n("fs.process_symlinks_by_task")])),_:1})])]),e[45]||(e[45]=l(`

    Please reffer to this article in order to know how to setup these parameters.

    fs.enforce_symlinksifowner

    To protect against symlink attack where attacker tricks Apache web server to read some other user PHP config files, or other sensitive file, enable:

    fs.enforce_symlinksifowner=1
    +

    Known limitations and issues of hybrid kernels

    CloudLinux OS 6 Hybrid kernel

    1. We do not remove Hybrid kernel after migration from Hybrid to the normal channel, but we remove linux-firmware package which is needed to boot Hybrid kernel. This is because CloudLinux OS 6 does not allow to remove the package of currently running kernel. Thus please don't reboot the server back to Hybrid kernel after you remove it.

    2. Kernel module signature isn't checking for now, as 3.10 kernel is using x509 certificates to generate keys and CloudLinux OS 6 cannot detect signatures created in such way.

    Note

    Link Traversal Protection is disabled by default for the CloudLinux OS.

    CloudLinux OS provides comprehensive protection against symbolic link attacks popular in shared hosting environment.

    The protection requires setting multiple kernel parameters to be enabled:

    SecureLinks:

    `,27)),s("ul",null,[s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-enforce-symlinksifowner"},{default:i(()=>e[17]||(e[17]=[n("fs.enforce_symlinksifowner")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-symlinkown-gid"},{default:i(()=>e[18]||(e[18]=[n("fs.symlinkown_gid")])),_:1})])]),e[32]||(e[32]=s("p",null,[s("strong",null,"Link Traversal Protection:")],-1)),s("ul",null,[s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-protected-symlinks-create"},{default:i(()=>e[19]||(e[19]=[n("fs.protected_symlinks_create")])),_:1})]),s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#fs-process-symlinks-by-task"},{default:i(()=>e[20]||(e[20]=[n("fs.process_symlinks_by_task")])),_:1})])]),e[33]||(e[33]=l(`

    Please reffer to this article in order to know how to setup these parameters.

    fs.enforce_symlinksifowner

    To protect against symlink attack where attacker tricks Apache web server to read some other user PHP config files, or other sensitive file, enable:

    fs.enforce_symlinksifowner=1
     

    Setting this parameter will deny any process running under gid fs.symlinkown_gid to follow the symlink if owner of the link doesn’t match the owner of the target file.

    Defaults:

    fs.enforce_symlinksifowner = 1
     fs.symlinkown_gid = 48
     
    fs.enforce_symlinksifowner = 0do not check symlink ownership
    fs.enforce_symlinksifowner = 1deny if symlink ownership doesn’t match target, and process gid matches _symlinkown_gid
    fs.enforce_symlinksifowner = 2deny if a process is in LVE or symlink ownership doesn’t match target, and process gid matches _symlinkown_gid

    When fs.enforce_symlinksifowner set to 1, processes with GID 48 will not be able to follow symlinks if they are owned by user1 , but point to file owned user2 .

    fs.symlinkown_gid

    On standard Apache installation, this webserver is usually running under GID 48. On cPanel servers, Apache is running under user nobody, GID 99.

    To change GID of processes that cannot follow symlink, edit the file /etc/sysctl.conf , add the line:

    fs.symlinkown_gid = XX
     

    And execute:

    sysctl -p
     

    To disable symlink owner match protection feature, set fs.enforce_symlinksifowner = 0 in /etc/sysctl.conf , and execute:

    sysctl -p
    -

    Note

    fs.symlinkown_gid parameter values for httpd service user and fs.proc_super_gid for nagios service user is written to /etc/sysctl.d/90-cloudlinux.conf.

    `,18)),s("h4",m,[e[21]||(e[21]=s("a",{class:"header-anchor",href:"#fs-protected-symlinks-create","aria-hidden":"true"},"#",-1)),e[22]||(e[22]=n()),e[23]||(e[23]=s("strong",null,"fs.protected_symlinks_create",-1)),e[24]||(e[24]=n()),a(o,{type:"info",text:"cPanel"})]),e[46]||(e[46]=l('

    Warning

    When used outside CageFS (from cPanel tools for instance), fs.protected_symlinks_create isn't sufficient for symlink protection. To fully protect symlink access in this case, use fs.process_symlinks_by_task=1 in addition to fs.protected_symlinks_create=1.

    ',1)),s("p",null,[s("span",v,[a(t,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[25]||(e[25]=[n("CageFS")])),_:1})]),e[26]||(e[26]=n(" is extremely powerful at stopping most information disclosure attacks, where a hacker could read sensitive files like ")),e[27]||(e[27]=s("span",{class:"notranslate"},[s("em",null,"/etc/passwd")],-1)),e[28]||(e[28]=n(" ."))]),e[47]||(e[47]=l(`

    Yet, CageFS does not work in each and every situation. For example, on cPanel servers, it is not enabled in WebDAV server, cPanel file manager and webmail, as well as some FTP servers don’t include proper change rooting.

    This allows an attacker to create symlink or hardlink to a sensitive file like /etc/passwd and then use WebDAV , filemanager, or webmail to read the content of that file.

    You can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own.

    This is done by set following kernel options to 1:

    fs.protected_symlinks_create = 1
    +

    Note

    fs.symlinkown_gid parameter values for httpd service user and fs.proc_super_gid for nagios service user is written to /etc/sysctl.d/90-cloudlinux.conf.

    `,18)),e[34]||(e[34]=s("h4",{id:"fs-protected-symlinks-create",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#fs-protected-symlinks-create","aria-hidden":"true"},"#"),n(),s("strong",null,"fs.protected_symlinks_create"),n(),s("Badge",{type:"info",text:"cPanel"})],-1)),e[35]||(e[35]=l('

    Warning

    When used outside CageFS (from cPanel tools for instance), fs.protected_symlinks_create isn't sufficient for symlink protection. To fully protect symlink access in this case, use fs.process_symlinks_by_task=1 in addition to fs.protected_symlinks_create=1.

    ',1)),s("p",null,[s("span",p,[t(a,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[21]||(e[21]=[n("CageFS")])),_:1})]),e[22]||(e[22]=n(" is extremely powerful at stopping most information disclosure attacks, where a hacker could read sensitive files like ")),e[23]||(e[23]=s("span",{class:"notranslate"},[s("em",null,"/etc/passwd")],-1)),e[24]||(e[24]=n(" ."))]),e[36]||(e[36]=l(`

    Yet, CageFS does not work in each and every situation. For example, on cPanel servers, it is not enabled in WebDAV server, cPanel file manager and webmail, as well as some FTP servers don’t include proper change rooting.

    This allows an attacker to create symlink or hardlink to a sensitive file like /etc/passwd and then use WebDAV , filemanager, or webmail to read the content of that file.

    You can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own.

    This is done by set following kernel options to 1:

    fs.protected_symlinks_create = 1
     fs.protected_hardlinks_create = 1
    -

    We do not recommend to use protected_symlinks option for cPanel users as it might break some of the cPanel functionality. Please read the known issues section before enabling this feature.

    `,6)),s("ul",null,[s("li",null,[a(t,{to:"/cloudlinuxos/cloudlinux_os_kernel/#known-issues-with-fs-protected-symlinks-create-1-on-cpanel-servers"},{default:i(()=>e[29]||(e[29]=[n("Known issues with fs.protected_symlinks_create=1 on cPanel servers")])),_:1})])]),s("h4",h,[e[30]||(e[30]=s("a",{class:"header-anchor",href:"#fs-process-symlinks-by-task","aria-hidden":"true"},"#",-1)),e[31]||(e[31]=n()),e[32]||(e[32]=s("strong",null,"fs.process_symlinks_by_task",-1)),e[33]||(e[33]=n()),a(o,{type:"info",text:"cPanel"})]),e[48]||(e[48]=l(`

    Note

    This option only available on CloudLinux 7 Hybrid or on CloudLinux 8. Also please note that this feature is available for cPanel only.

    This parameter is needed to protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID.

    To enable the protection for CloudLinux OS, set the fs.process_symlinks_by_task parameter to 1:

    fs.process_symlinks_by_task=1
    +

    We do not recommend to use protected_symlinks option for cPanel users as it might break some of the cPanel functionality. Please read the known issues section before enabling this feature.

    `,6)),s("ul",null,[s("li",null,[t(a,{to:"/cloudlinuxos/cloudlinux_os_kernel/#known-issues-with-fs-protected-symlinks-create-1-on-cpanel-servers"},{default:i(()=>e[25]||(e[25]=[n("Known issues with fs.protected_symlinks_create=1 on cPanel servers")])),_:1})])]),e[37]||(e[37]=s("h4",{id:"fs-process-symlinks-by-task",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#fs-process-symlinks-by-task","aria-hidden":"true"},"#"),n(),s("strong",null,"fs.process_symlinks_by_task"),n(),s("Badge",{type:"info",text:"cPanel"})],-1)),e[38]||(e[38]=l(`

    Note

    This option only available on CloudLinux 7 Hybrid or on CloudLinux 8. Also please note that this feature is available for cPanel only.

    This parameter is needed to protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID.

    To enable the protection for CloudLinux OS, set the fs.process_symlinks_by_task parameter to 1:

    fs.process_symlinks_by_task=1
     

    To disable the protection for CloudLinux OS 7 hybrid, set the fs.process_symlinks_by_task parameter to 0:

    fs.process_symlinks_by_task=0
     

    Here are some examples of what may go wrong on cPanel servers. If fs.protected_symlinks_create=1 is set on the server, it can cause the following issues:

    • rsync is failed

    If you use the rsync to copy/transfer files and they contain symlinks, you'll see the errors like these:

    "rsync error: some files could not be transferred (code 23)" and the transfer will be failed. 
     

    It affects rsync tasks as well as cPanel transfer tools.

    • backup extracting may not work. Errors during the restoration:
    Error extracting /home/domain/backups/home.tar.gz : /bin/tar: .cagefs/tmp/mysql.sock: Cannot create symlink to \`/var/lib/mysql/mysql.sock'.
    @@ -133,7 +133,7 @@ echo "0" > /sys/block/[blockname]/queue/rotational
     

    If you want to restrict an access even to those that are in the whitelist you should set kernel.proc_disable_net = 1 (by default it’s disabled).

    Virtualized /proc filesystem

    You can prevent user from seeing processes of other users (via ps/top command) as well as special files in /proc file system by setting fs.proc_can_see_other_uid sysctl.

    To do that, edit /etc/sysctl.conf

    fs.proc_can_see_other_uid=0
     fs.proc_super_gid=600
     
    And do:
    # sysctl -p
    -
    fs.proc_can_see_other_uid=0

    If fs.proc_can_see_other_uid is set to 0, users will not be able to see special files. If it is set to 1 - user will see other processes IDs in /proc filesystem.

    fs.proc_super_gid=XX

    `,127)),s("p",null,[e[35]||(e[35]=n("The fs.proc_super_gid sets group ID which will see system files in /proc, add any users to that group so they will see all files in /proc. Usually needed by some monitoring users like nagios or zabbix and ")),a(t,{to:"/cloudlinuxos/command-line_tools/#cldetect"},{default:i(()=>e[34]||(e[34]=[n("cldetect utility")])),_:1}),e[36]||(e[36]=n(" can configure few most commonly used monitoring software automatically."))]),e[49]||(e[49]=l(`

    Automatic configuration of a group in the fs.proc_super_gid

    Starting from lve-utils v.4.2.0-1, when installing (not updating) the lve-utils package it automatically creates the clsupergid group and registers this group in the fs.proc_super_gid (if this group was not created before). If a group was created in the fs.proc_super_gid earlier all stays the same.

    Virtualized /proc filesystem in CloudLinux OS 8/CloudLinux OS 7 hybrid will display all files to unprivileged users. But unprivileged users will have access only to the following files (as well as directories for PIDs for the user):

    /proc/cpuinfo
    +
    fs.proc_can_see_other_uid=0

    If fs.proc_can_see_other_uid is set to 0, users will not be able to see special files. If it is set to 1 - user will see other processes IDs in /proc filesystem.

    fs.proc_super_gid=XX

    `,127)),s("p",null,[e[27]||(e[27]=n("The fs.proc_super_gid sets group ID which will see system files in /proc, add any users to that group so they will see all files in /proc. Usually needed by some monitoring users like nagios or zabbix and ")),t(a,{to:"/cloudlinuxos/command-line_tools/#cldetect"},{default:i(()=>e[26]||(e[26]=[n("cldetect utility")])),_:1}),e[28]||(e[28]=n(" can configure few most commonly used monitoring software automatically."))]),e[39]||(e[39]=l(`

    Automatic configuration of a group in the fs.proc_super_gid

    Starting from lve-utils v.4.2.0-1, when installing (not updating) the lve-utils package it automatically creates the clsupergid group and registers this group in the fs.proc_super_gid (if this group was not created before). If a group was created in the fs.proc_super_gid earlier all stays the same.

    Virtualized /proc filesystem in CloudLinux OS 8/CloudLinux OS 7 hybrid will display all files to unprivileged users. But unprivileged users will have access only to the following files (as well as directories for PIDs for the user):

    /proc/cpuinfo
     /proc/version
     /proc/stat
     /proc/uptime
    @@ -178,10 +178,10 @@ kernel.user_ptrace_self = 0
     

    For CloudLinux OS 7:

    echo 1 > /proc/sys/kernel/memcg_oom_disable
     

    Also, add the following to /etc/sysctl.conf file to apply the same during boot:

    kernel.memcg_oom_disable=1
     

    File system quotas

    In Ext4 file system, the process with enabled capability CAP_SYS_RESOURCE is not checked on the quota exceeding by default. It allows userland utilities selectorctl and cagefs to operate without fails even if a user exceeds a quota.

    To disable quota checking in XFS file system set cap_res_quota_disable option to 1 using the following command:

    echo 1 > /proc/sys/fs/xfs/cap_res_quota_disable
    -
    `,98)),s("h2",g,[e[37]||(e[37]=s("a",{class:"header-anchor",href:"#enter-lve-when-using-cpanel-utilities","aria-hidden":"true"},"#",-1)),e[38]||(e[38]=n(" Enter LVE when using cPanel utilities ")),a(o,{type:"info",text:"cPanel"}),e[39]||(e[39]=n()),a(o,{text:"CloudLinux OS 7 hybrid"}),e[40]||(e[40]=n()),a(o,{text:"experimental",type:"warning"})]),e[50]||(e[50]=l(`

    cPanel tools might use more resources than desired, so to limit resource usage, you might want to enter the corresponding LVE when using cPanel tools on-behalf of a non-root user.

    This feature is considered experimental, as in this case there might be contention for LVE limits between cPanel tools and web-requests for a given user, which might not be suitable.

    The lve_setuid_enter parameter controls whether you want to enter the corresponding LVE when using cPanel tools on behalf of a non-root user.

    By default, the feature is disabled (0), to enable it, run the following for CloudLinux OS 7 hybrid:

    echo 1 > /sys/module/kmodlve/parameters/lve_setuid_enter
    +
    `,98)),e[40]||(e[40]=s("h2",{id:"enter-lve-when-using-cpanel-utilities",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#enter-lve-when-using-cpanel-utilities","aria-hidden":"true"},"#"),n(" Enter LVE when using cPanel utilities "),s("Badge",{type:"info",text:"cPanel"}),n(),s("Badge",{text:"CloudLinux OS 7 hybrid"}),n(),s("Badge",{text:"experimental",type:"warning"})],-1)),e[41]||(e[41]=l(`

    cPanel tools might use more resources than desired, so to limit resource usage, you might want to enter the corresponding LVE when using cPanel tools on-behalf of a non-root user.

    This feature is considered experimental, as in this case there might be contention for LVE limits between cPanel tools and web-requests for a given user, which might not be suitable.

    The lve_setuid_enter parameter controls whether you want to enter the corresponding LVE when using cPanel tools on behalf of a non-root user.

    By default, the feature is disabled (0), to enable it, run the following for CloudLinux OS 7 hybrid:

    echo 1 > /sys/module/kmodlve/parameters/lve_setuid_enter
     

    Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver

    As updating the kernel is one of the most sensitive tasks, we'd like to achieve the maximum stability along the way. In case something goes wrong, proactive reacting to kernel crashes can help tremendously.

    Our new tool, Kernel Panic Receiver, released in June 2020 allows you to to organize kernel panic logs. Kernel Panic Receiver is an open-source component designed to pre-emptively resolve any kernel-related issues.

    Visit the Kernel Panic Receiver project GitHub page.

    Usage

    To send required kernel logs from the clients' machines to Kernel Panic Receiver, we configure the default Linux kernel feature called netconsole.

    The configuration is done by the initscripts package, starting from the following versions:

    • For CloudLinux OS 6: 9.03.61-1.cloudlinux
    • For CloudLinux OS 7: 9.49.49-1.cloudlinux
    • For CloudLinux OS 8: 10.00.4-1.cloudlinux

    To update the initscripts package, run the following command:

    yum update initscripts --enablerepo=cloudlinux-updates-testing
     

    When a kernel panic occurs, the netconsole module sends logs to our server as plain text via the UDP protocol.

    What data is transferred by netconsole?

    The netconsole sends only OOPs-related messages from the kernel ring buffer. It doesn't transfer any sensitive data, such as usernames, encryption keys, paths, etc. So, there are no security problems you should worry about.

    Disabling the feature

    If you don't want to send us the data, you can turn the netconsole service off (we don't recommend it, though). To disable transferring the data, just comment the SYSLOGADDR parameter in the netconsole config file (/etc/sysconfig/netconsole):

    # For more information about this data transmission, check this page:
     # https://cloudlinux.zendesk.com/hc/en-us/articles/360016481200
     # SYSLOGADDR=sentrykernel.cloudlinux.com
     

    And stop the netconsole service by running the following command:

    service netconsole stop
    -

    Note

    Netconsole is used only for Kernel Panic Receiver, so disabling it doesn't lead to issues with other CloudLinux OS services.

    `,24))])}const y=d(p,[["render",f],["__file","index.html.vue"]]);export{y as default}; +

    Note

    Netconsole is used only for Kernel Panic Receiver, so disabling it doesn't lead to issues with other CloudLinux OS services.

    `,24))])}const g=o(u,[["render",m],["__file","index.html.vue"]]);export{g as default}; diff --git a/assets/index.html-5e807dce.js b/assets/index.html-a33d9863.js similarity index 83% rename from assets/index.html-5e807dce.js rename to assets/index.html-a33d9863.js index 9d5de447..963f5c46 100644 --- a/assets/index.html-5e807dce.js +++ b/assets/index.html-a33d9863.js @@ -1,9 +1,9 @@ -import{_ as m,S as o,n as g,p as v,q as s,J as t,C as n,A as a,a4 as l}from"./framework-dd156d1c.js";const h="/images/cloudlinuxos/cloudlinux_os_components/img1-zoom73.webp",b="/images/cloudlinuxos/cloudlinux_os_components/cpanel-enable-disable-cagefs.webp",f="/images/cloudlinuxos/cloudlinux_os_components/cpanel-update-cagefs-skeleton.webp",x="/images/cloudlinuxos/cloudlinux_os_components/cpanel-enable-disable-cagefs2.webp",y="/images/cloudlinuxos/cloudlinux_os_components/cpanel-cagefs-options.webp",w="/images/cloudlinuxos/cloudlinux_os_components/enable-disable-cagefs-for-user.webp",_="/images/cloudlinuxos/cloudlinux_os_components/plesk-update-cagefs-skeleton.webp",S="/images/cloudlinuxos/cloudlinux_os_components/ispmanager_cagefs_user_zoom98.webp",k="/images/cloudlinuxos/cloudlinux_os_components/img3.webp",c="/images/cloudlinuxos/cloudlinux_os_components/Chart1.webp",p="/images/cloudlinuxos/cloudlinux_os_components/Chart2.webp",u="/images/cloudlinuxos/cloudlinux_os_components/Chart3.webp",P="/images/cloudlinuxos/cloudlinux_os_components/NewTurnedOff.webp",E="/images/cloudlinuxos/cloudlinux_os_components/NewTurnedOn.webp",I="/images/cloudlinuxos/cloudlinux_os_components/cageFS-verify.webp",C="/images/cloudlinuxos/cloudlinux_os_components/not-initialized.webp",q="/images/cloudlinuxos/cloudlinux_os_components/CageFS-init.webp",L="/images/cloudlinuxos/cloudlinux_os_components/CageFS-enabled.webp",T="/images/cloudlinuxos/cloudlinux_os_components/enable-CageFS-to-user.webp",O="/images/cloudlinuxos/cloudlinux_os_components/check-ea-php.webp",D="/images/cloudlinuxos/cloudlinux_os_components/php-handlers.webp",A="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedForPlesk.webp",M="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedForOtherCP.webp",N="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedAdditionSettings.webp",R="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedExternalAppTab.webp",F="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedPlesk.webp",H="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedOtherCP.webp",U="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedHandlerName.webp",V="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedScriptHandler.webp",z="/images/cloudlinuxos/cloudlinux_os_components/custom_file_cPanel1.webp",X="/images/cloudlinuxos/cloudlinux_os_components/custom_file_cPanel2.webp",G="/images/cloudlinuxos/cloudlinux_os_components/screen1-phpselector-featuremanager.webp",j="/images/cloudlinuxos/cloudlinux_os_components/php_selector_options.webp",Y="/images/cloudlinuxos/cloudlinux_os_components/Ruby_supported_versions.webp",Q="/images/cloudlinuxos/cloudlinux_os_components/CL-hide-ruby.webp",B="/images/cloudlinuxos/cloudlinux_os_components/Nodejs_supported_versions.webp",W="/images/cloudlinuxos/cloudlinux_os_components/createapp_zoom70.webp",K="/images/cloudlinuxos/cloudlinux_os_components/setconfiguration_zoom70.webp",$="/images/cloudlinuxos/cloudlinux_os_components/runapp_zoom60.webp",J="/images/cloudlinuxos/cloudlinux_os_components/runningappdomain_zoom70.webp",Z="/images/cloudlinuxos/cloudlinux_os_components/errorapplog.webp",ee="/images/cloudlinuxos/cloudlinux_os_components/errorapplogsorry.webp",se="/images/cloudlinuxos/cloudlinux_os_components/mod_lsapidiagrammnew.webp",te="/images/cloudlinuxos/cloudlinux_os_components/plesk-php-settings.webp",ne="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_1.webp",ae="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_2.webp",ie="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_3.webp",le={},oe={class:"tip custom-block"},re={class:"tip custom-block"},de={class:"tip custom-block"},ce={class:"tip custom-block"},pe={class:"notranslate"},ue={class:"notranslate"},me={class:"tip custom-block"},ge={class:"danger custom-block"},ve={class:"tip custom-block"},he={class:"tip custom-block"},be={id:"how-to-hide-directory-inside-mount-point",tabindex:"-1"},fe={class:"tip custom-block"},xe={class:"tip custom-block"},ye={class:"tip custom-block"},we={class:"notranslate"},_e={class:"tip custom-block"},Se={class:"notranslate"},ke={class:"tip custom-block"},Pe={start:"3"},Ee={class:"notranslate"},Ie={class:"notranslate"},Ce={class:"notranslate"},qe={class:"tip custom-block"},Le={class:"tip custom-block"},Te={class:"tip custom-block"},Oe={class:"tip custom-block"},De={class:"tip custom-block"},Ae={id:"lsapi-server-tweak",tabindex:"-1"},Me={class:"notranslate"};function Ne(Re,e){const i=o("RouterLink"),r=o("Badge"),d=o("font");return g(),v("div",null,[e[674]||(e[674]=s("h1",{id:"cloudlinux-os-components",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-os-components","aria-hidden":"true"},"#"),t(" CloudLinux OS components")],-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/limits/#reseller-limits"},{default:a(()=>e[0]||(e[0]=[t("Reseller limits")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats-2"},{default:a(()=>e[1]||(e[1]=[t("LVE-Stats 2")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:a(()=>e[2]||(e[2]=[t("CageFS")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor"},{default:a(()=>e[3]||(e[3]=[t("MySQL Governor")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-selector"},{default:a(()=>e[4]||(e[4]=[t("PHP Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:a(()=>e[5]||(e[5]=[t("Python Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#ruby-selector"},{default:a(()=>e[6]||(e[6]=[t("Ruby Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:a(()=>e[7]||(e[7]=[t("Node.js Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:a(()=>e[8]||(e[8]=[t("Apache mod_lsapi PRO")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#nginx-lsapi-module"},{default:a(()=>e[9]||(e[9]=[t("NGINX lsapi module")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#additional-integration-components"},{default:a(()=>e[10]||(e[10]=[t("Additional integration components")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-suexec-module"},{default:a(()=>e[11]||(e[11]=[t("Apache suexec module")])),_:1})])]),e[675]||(e[675]=l('

    General information and requirements

    LVE-Stats 2

    General information and requirements

    ',3)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#why-is-it-needed"},{default:a(()=>e[12]||(e[12]=[t("Why is it needed?")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#major-improvements-and-features"},{default:a(()=>e[13]||(e[13]=[t("Major improvements and features")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#what-features-will-be-implemented-in-the-future"},{default:a(()=>e[14]||(e[14]=[t("What features will be implemented in the future?")])),_:1})])]),e[676]||(e[676]=l('

    Why is it needed?

    • Old LVE-statistics store averages as integer numbers, as % of CPU usage. If user used 100% of CPU for 1 second within an hour, it is only 1-2% for a minute, and 0 for 5 minutes. Data in old LVE-statistics is aggregated to 1-hour intervals. So, such peak load will noExat be recorded and we need to store data with much higher precision.
    • 100% CPU usage in old lve statistics means “all cores”. On 32 core servers usage is not visible for most users (as they are limited to 1 core).
    • Old LVE-statistics does not provide a way to determine a cause of LVE faults, i.e. what processes are running when user hits LVE limits.Example
    • Notifications in old LVE-statistics are not accurate because they are based on average values for CPU, IO, IOPS.
    • Old LVE-statistics functionality is hard to extend.

    Major improvements and features

    • increased precision of statistics;
    • CPU usage is calculated  in terms of % of a single core (100% usage means one core);
    • lvestats-server emulates and tracks faults for CPU, IO, IOPS;
    • lvestats-server saves “snapshots” of user’s processes and queries for each “incident” - added new lve-read-snapshot utility;
    • improved notifications about hitting LVE limits (more informative and without false positives);
    • implemented ability to add custom plugins;
    • MySQL and PostGreSQL support;
    • more pretty, scalable, interactive charts;
    • snapshots include HTTP-requests.
    ',4)),s("div",oe,[e[17]||(e[17]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mod-proctitle"},{default:a(()=>e[15]||(e[15]=[s("code",null,"mod_proctitle",-1)])),_:1}),e[16]||(e[16]=t(" has to be enabled for HTTP request collection to be available"))])]),e[677]||(e[677]=l('

    What features will be implemented in the future?

    • Notifications for control panels other than CPanel.
    • Burstable Limits/server health: We are monitoring server health ( LA , memory , idle CPU ) and automatically decreasing/increasing limits based on server health.
    • Reseller Limits: plugin would analyze usage per group of users (reseller’s usage), and do actions.
    • Suspend/notify plugin: would detect that user is being throttled for 10 minutes, and suspend him (just because), or notify, or increase limits.

    Installation and update

    ',3)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#downgrade"},{default:a(()=>e[18]||(e[18]=[t("Downgrade")])),_:1})])]),e[678]||(e[678]=l(`

    To install, please execute:

    yum install lve-stats
    +import{_ as c,S as p,n as u,p as m,q as s,J as t,C as a,A as i,a4 as l}from"./framework-dd156d1c.js";const g="/images/cloudlinuxos/cloudlinux_os_components/img1-zoom73.webp",v="/images/cloudlinuxos/cloudlinux_os_components/cpanel-enable-disable-cagefs.webp",h="/images/cloudlinuxos/cloudlinux_os_components/cpanel-update-cagefs-skeleton.webp",b="/images/cloudlinuxos/cloudlinux_os_components/cpanel-enable-disable-cagefs2.webp",f="/images/cloudlinuxos/cloudlinux_os_components/cpanel-cagefs-options.webp",x="/images/cloudlinuxos/cloudlinux_os_components/enable-disable-cagefs-for-user.webp",y="/images/cloudlinuxos/cloudlinux_os_components/plesk-update-cagefs-skeleton.webp",w="/images/cloudlinuxos/cloudlinux_os_components/ispmanager_cagefs_user_zoom98.webp",_="/images/cloudlinuxos/cloudlinux_os_components/img3.webp",o="/images/cloudlinuxos/cloudlinux_os_components/Chart1.webp",r="/images/cloudlinuxos/cloudlinux_os_components/Chart2.webp",d="/images/cloudlinuxos/cloudlinux_os_components/Chart3.webp",S="/images/cloudlinuxos/cloudlinux_os_components/NewTurnedOff.webp",k="/images/cloudlinuxos/cloudlinux_os_components/NewTurnedOn.webp",P="/images/cloudlinuxos/cloudlinux_os_components/cageFS-verify.webp",E="/images/cloudlinuxos/cloudlinux_os_components/not-initialized.webp",I="/images/cloudlinuxos/cloudlinux_os_components/CageFS-init.webp",C="/images/cloudlinuxos/cloudlinux_os_components/CageFS-enabled.webp",q="/images/cloudlinuxos/cloudlinux_os_components/enable-CageFS-to-user.webp",L="/images/cloudlinuxos/cloudlinux_os_components/check-ea-php.webp",T="/images/cloudlinuxos/cloudlinux_os_components/php-handlers.webp",O="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedForPlesk.webp",D="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedForOtherCP.webp",A="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedAdditionSettings.webp",M="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedExternalAppTab.webp",N="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedPlesk.webp",R="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedOtherCP.webp",F="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedHandlerName.webp",H="/images/cloudlinuxos/cloudlinux_os_components/LiteSpeedScriptHandler.webp",U="/images/cloudlinuxos/cloudlinux_os_components/custom_file_cPanel1.webp",V="/images/cloudlinuxos/cloudlinux_os_components/custom_file_cPanel2.webp",z="/images/cloudlinuxos/cloudlinux_os_components/screen1-phpselector-featuremanager.webp",X="/images/cloudlinuxos/cloudlinux_os_components/php_selector_options.webp",G="/images/cloudlinuxos/cloudlinux_os_components/Ruby_supported_versions.webp",j="/images/cloudlinuxos/cloudlinux_os_components/CL-hide-ruby.webp",Y="/images/cloudlinuxos/cloudlinux_os_components/Nodejs_supported_versions.webp",Q="/images/cloudlinuxos/cloudlinux_os_components/createapp_zoom70.webp",B="/images/cloudlinuxos/cloudlinux_os_components/setconfiguration_zoom70.webp",W="/images/cloudlinuxos/cloudlinux_os_components/runapp_zoom60.webp",K="/images/cloudlinuxos/cloudlinux_os_components/runningappdomain_zoom70.webp",$="/images/cloudlinuxos/cloudlinux_os_components/errorapplog.webp",J="/images/cloudlinuxos/cloudlinux_os_components/errorapplogsorry.webp",Z="/images/cloudlinuxos/cloudlinux_os_components/mod_lsapidiagrammnew.webp",ee="/images/cloudlinuxos/cloudlinux_os_components/plesk-php-settings.webp",se="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_1.webp",te="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_2.webp",ne="/images/cloudlinuxos/cloudlinux_os_components/mod_suexec_admin_ui_3.webp",ae={},ie={class:"tip custom-block"},le={class:"tip custom-block"},oe={class:"tip custom-block"},re={class:"tip custom-block"},de={class:"notranslate"},ce={class:"notranslate"},pe={class:"tip custom-block"},ue={class:"danger custom-block"},me={class:"tip custom-block"},ge={class:"tip custom-block"},ve={class:"tip custom-block"},he={class:"tip custom-block"},be={class:"tip custom-block"},fe={class:"notranslate"},xe={class:"tip custom-block"},ye={class:"notranslate"},we={class:"tip custom-block"},_e={start:"3"},Se={class:"notranslate"},ke={class:"notranslate"},Pe={class:"notranslate"},Ee={class:"tip custom-block"},Ie={class:"tip custom-block"},Ce={class:"tip custom-block"},qe={class:"tip custom-block"},Le={class:"tip custom-block"},Te={class:"notranslate"};function Oe(De,e){const n=p("RouterLink");return u(),m("div",null,[e[661]||(e[661]=s("h1",{id:"cloudlinux-os-components",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cloudlinux-os-components","aria-hidden":"true"},"#"),t(" CloudLinux OS components")],-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/limits/#reseller-limits"},{default:i(()=>e[0]||(e[0]=[t("Reseller limits")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats-2"},{default:i(()=>e[1]||(e[1]=[t("LVE-Stats 2")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[2]||(e[2]=[t("CageFS")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor"},{default:i(()=>e[3]||(e[3]=[t("MySQL Governor")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-selector"},{default:i(()=>e[4]||(e[4]=[t("PHP Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:i(()=>e[5]||(e[5]=[t("Python Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#ruby-selector"},{default:i(()=>e[6]||(e[6]=[t("Ruby Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:i(()=>e[7]||(e[7]=[t("Node.js Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-mod-lsapi-pro"},{default:i(()=>e[8]||(e[8]=[t("Apache mod_lsapi PRO")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#nginx-lsapi-module"},{default:i(()=>e[9]||(e[9]=[t("NGINX lsapi module")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#additional-integration-components"},{default:i(()=>e[10]||(e[10]=[t("Additional integration components")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-suexec-module"},{default:i(()=>e[11]||(e[11]=[t("Apache suexec module")])),_:1})])]),e[662]||(e[662]=l('

    General information and requirements

    LVE-Stats 2

    General information and requirements

    ',3)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#why-is-it-needed"},{default:i(()=>e[12]||(e[12]=[t("Why is it needed?")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#major-improvements-and-features"},{default:i(()=>e[13]||(e[13]=[t("Major improvements and features")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#what-features-will-be-implemented-in-the-future"},{default:i(()=>e[14]||(e[14]=[t("What features will be implemented in the future?")])),_:1})])]),e[663]||(e[663]=l('

    Why is it needed?

    • Old LVE-statistics store averages as integer numbers, as % of CPU usage. If user used 100% of CPU for 1 second within an hour, it is only 1-2% for a minute, and 0 for 5 minutes. Data in old LVE-statistics is aggregated to 1-hour intervals. So, such peak load will noExat be recorded and we need to store data with much higher precision.
    • 100% CPU usage in old lve statistics means “all cores”. On 32 core servers usage is not visible for most users (as they are limited to 1 core).
    • Old LVE-statistics does not provide a way to determine a cause of LVE faults, i.e. what processes are running when user hits LVE limits.Example
    • Notifications in old LVE-statistics are not accurate because they are based on average values for CPU, IO, IOPS.
    • Old LVE-statistics functionality is hard to extend.

    Major improvements and features

    • increased precision of statistics;
    • CPU usage is calculated  in terms of % of a single core (100% usage means one core);
    • lvestats-server emulates and tracks faults for CPU, IO, IOPS;
    • lvestats-server saves “snapshots” of user’s processes and queries for each “incident” - added new lve-read-snapshot utility;
    • improved notifications about hitting LVE limits (more informative and without false positives);
    • implemented ability to add custom plugins;
    • MySQL and PostGreSQL support;
    • more pretty, scalable, interactive charts;
    • snapshots include HTTP-requests.
    ',4)),s("div",ie,[e[17]||(e[17]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mod-proctitle"},{default:i(()=>e[15]||(e[15]=[s("code",null,"mod_proctitle",-1)])),_:1}),e[16]||(e[16]=t(" has to be enabled for HTTP request collection to be available"))])]),e[664]||(e[664]=l('

    What features will be implemented in the future?

    • Notifications for control panels other than CPanel.
    • Burstable Limits/server health: We are monitoring server health ( LA , memory , idle CPU ) and automatically decreasing/increasing limits based on server health.
    • Reseller Limits: plugin would analyze usage per group of users (reseller’s usage), and do actions.
    • Suspend/notify plugin: would detect that user is being throttled for 10 minutes, and suspend him (just because), or notify, or increase limits.

    Installation and update

    ',3)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#downgrade"},{default:i(()=>e[18]||(e[18]=[t("Downgrade")])),_:1})])]),e[665]||(e[665]=l(`

    To install, please execute:

    yum install lve-stats
     

    To update:

    yum update lve-stats
    -

    Settings of old lve-stats (ver. 0.x) are imported automatically on the first install/update of a new lve-stats package.

    SQLite database file is located in /var/lve/lvestats2.db, data from old lve-stats (ver. 0.x) are being migrated automatically in the background. Migrating process can last 2-8 hours (during this time lags are possible when admin is trying to check statistics, at the same time users will not be affected). Migrating the latest 30 days, SQLite DB stable migration is provided.

    Currently, the new lve-stats supports all databases available in CloudLinux OS.

    `,7)),s("div",re,[e[21]||(e[21]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[20]||(e[20]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:a(()=>e[19]||(e[19]=[t("LVE-stats 2 CLI")])),_:1})])]),e[679]||(e[679]=l(`

    Downgrade

    If you have any problems after update, downgrade lve-stats2 to the previous stable version by running:

    yum downgrade lve-stats
    -

    and contact CloudLinux OS support at https://cloudlinux.zendesk.com/hc/requests/new

    Note

    You may need to rename *.rpmsave files to original ones in order to restore settings for old lve-stats (/etc/sysconfig/lvestats, /etc/sysconfig/cloudlinux-notify).

    `,5)),s("div",de,[e[24]||(e[24]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[23]||(e[23]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:a(()=>e[22]||(e[22]=[t("LVE-stats 2 CLI")])),_:1})])]),e[680]||(e[680]=l(`

    Configuration

    The main configuration file /etc/sysconfig/lvestats2 contains the following options:

    • db_type - selects appropriate database type to use;

    • connect-string - connection string for PostGreSQL and MySQL database, has the following form:

      connect_string = USER:PASSWORD@HOST[:PORT]/DATABASE
      -

      Default port is used for specific database, if port is not specified (typical port is 3306 for MySQL and 5432 for PostGreSQL). Connection string is not used for sqlite database.

    • server_id - sets the name of the server (at most 10 characters). This option is to use with centralized database ( PostGreSQL or MySQL). For use with sqlite database, value of this option should be "localhost" (without quotes).

    • plugins – path to directory containing custom plugins for lve-stats (default path /usr/share/lve-stats/plugins).

    • db_timeout - period of time to write data to database (in seconds); default value is 60 seconds.

    • timeout - timeout for custom plugins (seconds). If plugin execution does not finish within this period, plugin is terminated. Default value is 5 seconds.

    • interval - duration of one cycle of lvestats-server (seconds). This should be less than total duration of execution of all plugins. Default value is 5 seconds. Increasing this parameter makes precision of statistics worse.

    • keep_history_days - period of time (in days) to keep history in th database. Old data is removed from the database automatically. Default value is 30 days.

    • mode – sets compatibility output mode (compatibility with older lveinfo version

      • Value v1 enables compatibility with old version of lveinfo.
      • Value v2 enables extended output mode, but can break LVE plugins for control panels (statistics in LVE Manager, Resource Usage, etc). Support of v2 mode will be added to LVE plugins in the recent future. When mode parameter is absent, later version of lveinfo is implied.
    • disable_snapshots - disable snapshots and incidents. Possible values:

      • true
      • false
    • disable_mysql_snapshots - disable saving SQL queries to snapshots. Possible values:

      • true
      • false
    • hide_lve_more_than_maxuid - disable displaying LVE IDs greater than the max UID in resource usage. Possible values:

      • true
      • false
    • use_big_uids - the option is available from lvestats version 3.0.14-1. It allows using the user uids more than 109 and up to 231-2 (2 147 483 646). Top border is the biggest value which kmodlve can use as LVE ID. You should recreate lvestats database by command lve-create-db --recreate if you change the option's value from false to true. Possible values:

      • true
      • false

    Configuration files for plugins are located in /etc/sysconfig/lvestats.config directory.

    /etc/sysconfig/lvestats.config/SnapshotSaver.cfg contains the following options:

    • period_between_incidents - the minimal interval of time between incidents (in seconds). If minimal interval of time between LVE faults is greater than value specified, than new "incident" will begin and new snapshots will be saved. Default value is 300 seconds.
    • snapshots_per_minute - the maximum number of snapshots saved per minute for specific LVE id (default is 2).
    • max_snapshots_per_incident - the maximum number of snapshots saved for one "incident". Default is 10.
    • litespeed - enable or disable data import from LiteSpeed, default is auto (autodetect); On|on|1 - force use litespeed; Off|off|0 - force use apache

    /etc/sysconfig/lvestats.config/StatsNotifier.cfg contains the following options:

    • NOTIFY_ADMIN – enables notification for admin (Y/N, default N);
    • NOTIFY_RESELLER – enables notification for reseller (Y/N, default N);
    • NOTIFY_CUSTOMER - enables notification for customers (Y/N, default N);
    • NOTIFY_INCLUDE_RESELLER_CUSTOMERY=notify all users, N=notify only hoster's users (whos reseller is root), default = N;
    • NOTIFY_CPU – notify about CPU faults when customer hits 100% of his CPU limit (Y/N, default N);
    • NOTIFY_IO - notify about IO faults when customer hits 100% of his IO limit (Y/N, default N);
    • NOTIFY_IOPS - notify about IOPS faults when customer hits 100% of his IOPS limit (Y/N, default N);
    • NOTIFY_MEMORY - notify about memory faults (Y/N, default N);
    • NOTIFY_EP – notify about entry processes faults (Y/N, default N);
    • NOTIFY_NPROC – notify about number of processes faults (Y/N, default N);
    • NOTIFY_MIN_FAULTS_ADMIN – minimum number of faults to notify admin (default 1);
    • NOTIFY_MIN_FAULTS_USER – minimum number of faults to notify customer (default 1);
    • NOTIFY_INTERVAL_ADMIN – period of time to notify admin (default 12h);
    • NOTIFY_INTERVAL_USER – period of time to notify customer (default 12h);
    • NOTIFY_FROM_EMAIL - sender email address. For example: NOTIFY_FROM_EMAIL=main_admin@host.com;
    • NOTIFY_FROM_SUBJECT - email message subject. For example: NOTIFY_FROM_SUBJECT=Message from notifier
    • REPORT_ADMIN_EMAIL - custom email for admin reporting. For example: REPORT_ADMIN_EMAIL=report_email@host.com
    • NOTIFY_CHARSET_EMAIL – charset type for email. Available for lve-stats-2.9.4-1 and later. Default is us-ascii. For example: NOTIFY_CHARSET_EMAIL=utf-8. If your email templates include non-Latin letters, it is recommended to use the UTF-8 encoding.
    `,8)),s("p",null,[e[26]||(e[26]=t("These values can also be set using ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-config"},{default:a(()=>e[25]||(e[25]=[t("cloudlinux-config CLI")])),_:1}),e[27]||(e[27]=t(" utility"))]),e[681]||(e[681]=l(`

    Templates of notifications are located here:

    • /usr/share/lve/emails/en_US/admin_notify.txt
    • /usr/share/lve/emails/en_US/reseller_notify.txt
    • /usr/share/lve/emails/en_US/user_notify.txt
    • /usr/share/lve/emails/en_US/admin_notify.html
    • /usr/share/lve/emails/en_US/reseller_notify.html

    Note

    Notifications about LVE faults are implemented for CPanel, Plesk, and DirectAdmin.

    After changing any options above, please restart lvestats service:

    service lvestats restart
    -

    /etc/logrotate.d/lvestats - configuration file for /var/log/lve-stats.log rotation

    `,6)),s("div",ce,[e[30]||(e[30]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[29]||(e[29]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:a(()=>e[28]||(e[28]=[t("LVE-stats 2 CLI")])),_:1})])]),e[682]||(e[682]=s("h3",{id:"lve-stats2-and-db-servers-compatible-work-setup",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#lve-stats2-and-db-servers-compatible-work-setup","aria-hidden":"true"},"#"),t(" LVE-stats2 and DB servers compatible work setup")],-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats2-and-mysql-db-server-compatible-work-setup"},{default:a(()=>e[31]||(e[31]=[t("LVE-stats2 and MySQL DB server compatible work setup")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats2-and-postgresql-db-server-compatible-work-setup"},{default:a(()=>e[32]||(e[32]=[t("LVE-stats2 and PostgreSQL DB server compatible work setup")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#customize-lve-stats2-notifications"},{default:a(()=>e[33]||(e[33]=[t("Customize LVE-stats2 notifications")])),_:1})])]),e[683]||(e[683]=l(`

    LVE-stats2 and MySQL DB server compatible work setup

    Note

    Run all the commands below under root.

    1. MySQL server setup

    If MySQL Server is not installed, then install it according to control panel documentation.

    For non-panel system:

    • CloudLinux OS 6

      yum install mysql mysql-server
      +

      Settings of old lve-stats (ver. 0.x) are imported automatically on the first install/update of a new lve-stats package.

      SQLite database file is located in /var/lve/lvestats2.db, data from old lve-stats (ver. 0.x) are being migrated automatically in the background. Migrating process can last 2-8 hours (during this time lags are possible when admin is trying to check statistics, at the same time users will not be affected). Migrating the latest 30 days, SQLite DB stable migration is provided.

      Currently, the new lve-stats supports all databases available in CloudLinux OS.

      `,7)),s("div",le,[e[21]||(e[21]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[20]||(e[20]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:i(()=>e[19]||(e[19]=[t("LVE-stats 2 CLI")])),_:1})])]),e[666]||(e[666]=l(`

      Downgrade

      If you have any problems after update, downgrade lve-stats2 to the previous stable version by running:

      yum downgrade lve-stats
      +

      and contact CloudLinux OS support at https://cloudlinux.zendesk.com/hc/requests/new

      Note

      You may need to rename *.rpmsave files to original ones in order to restore settings for old lve-stats (/etc/sysconfig/lvestats, /etc/sysconfig/cloudlinux-notify).

      `,5)),s("div",oe,[e[24]||(e[24]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[23]||(e[23]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:i(()=>e[22]||(e[22]=[t("LVE-stats 2 CLI")])),_:1})])]),e[667]||(e[667]=l(`

      Configuration

      The main configuration file /etc/sysconfig/lvestats2 contains the following options:

      • db_type - selects appropriate database type to use;

      • connect-string - connection string for PostGreSQL and MySQL database, has the following form:

        connect_string = USER:PASSWORD@HOST[:PORT]/DATABASE
        +

        Default port is used for specific database, if port is not specified (typical port is 3306 for MySQL and 5432 for PostGreSQL). Connection string is not used for sqlite database.

      • server_id - sets the name of the server (at most 10 characters). This option is to use with centralized database ( PostGreSQL or MySQL). For use with sqlite database, value of this option should be "localhost" (without quotes).

      • plugins – path to directory containing custom plugins for lve-stats (default path /usr/share/lve-stats/plugins).

      • db_timeout - period of time to write data to database (in seconds); default value is 60 seconds.

      • timeout - timeout for custom plugins (seconds). If plugin execution does not finish within this period, plugin is terminated. Default value is 5 seconds.

      • interval - duration of one cycle of lvestats-server (seconds). This should be less than total duration of execution of all plugins. Default value is 5 seconds. Increasing this parameter makes precision of statistics worse.

      • keep_history_days - period of time (in days) to keep history in th database. Old data is removed from the database automatically. Default value is 30 days.

      • mode – sets compatibility output mode (compatibility with older lveinfo version

        • Value v1 enables compatibility with old version of lveinfo.
        • Value v2 enables extended output mode, but can break LVE plugins for control panels (statistics in LVE Manager, Resource Usage, etc). Support of v2 mode will be added to LVE plugins in the recent future. When mode parameter is absent, later version of lveinfo is implied.
      • disable_snapshots - disable snapshots and incidents. Possible values:

        • true
        • false
      • disable_mysql_snapshots - disable saving SQL queries to snapshots. Possible values:

        • true
        • false
      • hide_lve_more_than_maxuid - disable displaying LVE IDs greater than the max UID in resource usage. Possible values:

        • true
        • false
      • use_big_uids - the option is available from lvestats version 3.0.14-1. It allows using the user uids more than 109 and up to 231-2 (2 147 483 646). Top border is the biggest value which kmodlve can use as LVE ID. You should recreate lvestats database by command lve-create-db --recreate if you change the option's value from false to true. Possible values:

        • true
        • false

      Configuration files for plugins are located in /etc/sysconfig/lvestats.config directory.

      /etc/sysconfig/lvestats.config/SnapshotSaver.cfg contains the following options:

      • period_between_incidents - the minimal interval of time between incidents (in seconds). If minimal interval of time between LVE faults is greater than value specified, than new "incident" will begin and new snapshots will be saved. Default value is 300 seconds.
      • snapshots_per_minute - the maximum number of snapshots saved per minute for specific LVE id (default is 2).
      • max_snapshots_per_incident - the maximum number of snapshots saved for one "incident". Default is 10.
      • litespeed - enable or disable data import from LiteSpeed, default is auto (autodetect); On|on|1 - force use litespeed; Off|off|0 - force use apache

      /etc/sysconfig/lvestats.config/StatsNotifier.cfg contains the following options:

      • NOTIFY_ADMIN – enables notification for admin (Y/N, default N);
      • NOTIFY_RESELLER – enables notification for reseller (Y/N, default N);
      • NOTIFY_CUSTOMER - enables notification for customers (Y/N, default N);
      • NOTIFY_INCLUDE_RESELLER_CUSTOMERY=notify all users, N=notify only hoster's users (whos reseller is root), default = N;
      • NOTIFY_CPU – notify about CPU faults when customer hits 100% of his CPU limit (Y/N, default N);
      • NOTIFY_IO - notify about IO faults when customer hits 100% of his IO limit (Y/N, default N);
      • NOTIFY_IOPS - notify about IOPS faults when customer hits 100% of his IOPS limit (Y/N, default N);
      • NOTIFY_MEMORY - notify about memory faults (Y/N, default N);
      • NOTIFY_EP – notify about entry processes faults (Y/N, default N);
      • NOTIFY_NPROC – notify about number of processes faults (Y/N, default N);
      • NOTIFY_MIN_FAULTS_ADMIN – minimum number of faults to notify admin (default 1);
      • NOTIFY_MIN_FAULTS_USER – minimum number of faults to notify customer (default 1);
      • NOTIFY_INTERVAL_ADMIN – period of time to notify admin (default 12h);
      • NOTIFY_INTERVAL_USER – period of time to notify customer (default 12h);
      • NOTIFY_FROM_EMAIL - sender email address. For example: NOTIFY_FROM_EMAIL=main_admin@host.com;
      • NOTIFY_FROM_SUBJECT - email message subject. For example: NOTIFY_FROM_SUBJECT=Message from notifier
      • REPORT_ADMIN_EMAIL - custom email for admin reporting. For example: REPORT_ADMIN_EMAIL=report_email@host.com
      • NOTIFY_CHARSET_EMAIL – charset type for email. Available for lve-stats-2.9.4-1 and later. Default is us-ascii. For example: NOTIFY_CHARSET_EMAIL=utf-8. If your email templates include non-Latin letters, it is recommended to use the UTF-8 encoding.
      `,8)),s("p",null,[e[26]||(e[26]=t("These values can also be set using ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-config"},{default:i(()=>e[25]||(e[25]=[t("cloudlinux-config CLI")])),_:1}),e[27]||(e[27]=t(" utility"))]),e[668]||(e[668]=l(`

      Templates of notifications are located here:

      • /usr/share/lve/emails/en_US/admin_notify.txt
      • /usr/share/lve/emails/en_US/reseller_notify.txt
      • /usr/share/lve/emails/en_US/user_notify.txt
      • /usr/share/lve/emails/en_US/admin_notify.html
      • /usr/share/lve/emails/en_US/reseller_notify.html

      Note

      Notifications about LVE faults are implemented for CPanel, Plesk, and DirectAdmin.

      After changing any options above, please restart lvestats service:

      service lvestats restart
      +

      /etc/logrotate.d/lvestats - configuration file for /var/log/lve-stats.log rotation

      `,6)),s("div",re,[e[30]||(e[30]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[29]||(e[29]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:i(()=>e[28]||(e[28]=[t("LVE-stats 2 CLI")])),_:1})])]),e[669]||(e[669]=s("h3",{id:"lve-stats2-and-db-servers-compatible-work-setup",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#lve-stats2-and-db-servers-compatible-work-setup","aria-hidden":"true"},"#"),t(" LVE-stats2 and DB servers compatible work setup")],-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats2-and-mysql-db-server-compatible-work-setup"},{default:i(()=>e[31]||(e[31]=[t("LVE-stats2 and MySQL DB server compatible work setup")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lve-stats2-and-postgresql-db-server-compatible-work-setup"},{default:i(()=>e[32]||(e[32]=[t("LVE-stats2 and PostgreSQL DB server compatible work setup")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#customize-lve-stats2-notifications"},{default:i(()=>e[33]||(e[33]=[t("Customize LVE-stats2 notifications")])),_:1})])]),e[670]||(e[670]=l(`

      LVE-stats2 and MySQL DB server compatible work setup

      Note

      Run all the commands below under root.

      1. MySQL server setup

      If MySQL Server is not installed, then install it according to control panel documentation.

      For non-panel system:

      • CloudLinux OS 6

        yum install mysql mysql-server
         service mysqld start
         chkconfig mysqld on
         
      • CloudLinux OS 7

        yum install mariadb mariadb-server
        @@ -63,7 +63,7 @@ GRANT SELECT ON lve_stats2_history, lve_stats2_history_gov, lve_stats2_history_x
         

        After that сonnect_string will look as follows:

        сonnect_string=lvestats2:%5BYou_P%40%24%24%5D%3A@localhost/db_lvestats2
         

        Customize LVE-stats2 notifications

        Jinja2 is used as a template engine for the notifications.

        The templates for notifications are located in /usr/share/lve/emails/LOCALE, where LOCALE is the directory with localization name (language codes are formed according to ISO 639-1 and ISO 639-2).

        By default the templates for English are set: /usr/share/lve/emails/en_US..

        /usr/share/lve/emails/en_US contains the following templates:

        • admin_notify.html admin_notify.txt for administrator;
        • reseller_notify.html reseller_notify.txt for reseller;
        • user_notify.txt for user.

        Starting from lve-stats-4.1.2, it allows server administrators to use their own lvestats notifier email notification templates.

        To use the custom templates, place them and the locales.json file to the /etc/cl.emails.d/LOCALE directory. File names are the same as in general /etc/cl.emails.d/LOCALE file.

        If the /etc/cl.emails.d/LOCALE doesn't exist or doesn't contain the templates, you can use the /usr/share/lve/emails/LOCALE directory, as it was in previous versions of lve-stats.

        Please do not edit the templates in the the /usr/share/lve/emails and place the new updated templates in the /etc/cl.emails.d directory.

        The notification is formed as Multipart content type RFC1341(MIME).

        The plain text is taken from the .txt files, html version - from the .html template.

        In case when only one template is present (.txt or .html) the notification is sent as a Non-multipart content type notification.

        It is better to use Multipart content type notifications because when a mail client can not display an html-format message, then it will be displayed as plain text version.

        To localize notifications, copy standard templates into directory with the proper locale name and translate the template. Also you can customize the main template making proper changes into it.

        The list of variables that can be used in the template:

        VariableExampleDescription
        TONAMECustomerNotification receiver user name. Taken from profile in the control panel, by default - Customer for user, Administrator for administrator, Reseller for reseller.
        TOMAILsupport@cloudlinux.comNotification receiver email address.
        DOMAINwordpress.test247.cloudlinux.comMain domain. Available only for user.
        LOCALEen_USLocale in which the notification is sent. Available only for user.
        RESELLERrootUser reseller. Available only for user.
        PERIOD12 hoursVerification and notification sending period.
        LOGINwordpressUser login in the system.
        ID500User ID in the system.
        lPMem lEP PMemF lVMem anyF IOf VMemF lCPU aIOPS aEP aPMem IOPSf lIO lIOPS aIO EPf aCPU aVMem NprocF aNproc lNproc CPUfSee description in lveinfo --help output. Available only for users
        STATS_HTMLhtml table with the list of users that exceeded limits. Available for administrator and reseller.
        STATSASCII - table with the list of users that exceeded limits. Available only for admins and resellers.

        Sender’s email address by default is administrator email address from control panel settings (root@{hostn_name} if there is no email in the control panel).

        It can be changed with NOTIFY_FROM_EMAIL option in the config /etc/sysconfig/lvestats.config/StatsNotifier.cfg

        For example:

        NOTIFY_FROM_EMAIL=support@hostername.com

        To apply changes restart lve-stats service:

        service lvestats restart
         

        for CloudLinux OS 7

        systemctl restart lvestats.service
        -

        Default subject is Hosting account resources exceeded.  It can be changed for each template (and for localized templates as well). To change subject, in the very beginning of the file (no blank lines allowed in the beginning of the template) add the field Subject:, leave two blank lines after it and add template body.

        Customized subjects can be taken only from the templates with the resolution *.txt (admin_notify.txt, reseller_notify.txt, user_notify.txt). Changes apply without lvestats restart.

        For backward compatibility the subject can be also changed with the key NOTIFY_FROM_SUBJECT in the config /etc/sysconfig/lvestats.config/StatsNotifier.cfg.

        Customized subjects have the higher priority than the key NOTIFY_FROM_SUBJECT.

        Example for the file user_notify.txt

        `,105)),e[684]||(e[684]=s("div",{class:"notranslate"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{"v-pre":"",class:"language-text"},[s("code",null,`Subject: Customized subject example +

    Default subject is Hosting account resources exceeded.  It can be changed for each template (and for localized templates as well). To change subject, in the very beginning of the file (no blank lines allowed in the beginning of the template) add the field Subject:, leave two blank lines after it and add template body.

    Customized subjects can be taken only from the templates with the resolution *.txt (admin_notify.txt, reseller_notify.txt, user_notify.txt). Changes apply without lvestats restart.

    For backward compatibility the subject can be also changed with the key NOTIFY_FROM_SUBJECT in the config /etc/sysconfig/lvestats.config/StatsNotifier.cfg.

    Customized subjects have the higher priority than the key NOTIFY_FROM_SUBJECT.

    Example for the file user_notify.txt

    `,105)),e[671]||(e[671]=s("div",{class:"notranslate"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{"v-pre":"",class:"language-text"},[s("code",null,`Subject: Customized subject example Dear {{TONAME}}, Your {{DOMAIN}} web hosting account exceeded one or more of its resources within the last {{PERIOD}}. @@ -84,7 +84,7 @@ If your account is regularly exceeding it's available resources, please consider Sincerely, Your Friendly Web Hosting Support Team -`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])])],-1)),e[685]||(e[685]=l(`

    Note

    The email template should be in the UTF-8 encoding. The other encodings are not supported.

    Starting from lve-stats v. 3.0.15-1, it allows to localize the words that before were imported directly from the lve-stats program code and couldn't be changed.

    The email template looks like follows:

    Dear {{TONAME}},
    +`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])])],-1)),e[672]||(e[672]=l(`

    Note

    The email template should be in the UTF-8 encoding. The other encodings are not supported.

    Starting from lve-stats v. 3.0.15-1, it allows to localize the words that before were imported directly from the lve-stats program code and couldn't be changed.

    The email template looks like follows:

    Dear {{TONAME}},
     Following accounts experienced issues in the past {{PERIOD}}{% if HOSTNAME is defined %} on host {{HOSTNAME}}{% endif %}
     
     {{STATS}}
    @@ -100,9 +100,9 @@ Your Friendly Web Hosting Support Team
        "admin": "Administrator", "reseller": "Reseller", "customer": "Customer"
      }
     }
    -

    The file format should be JSON, and the file encoding should be UTF-8. If this file is found and successfully read, the words from it will be used in emails. In case of any file reading/parsing error, a corresponding message will be written in the lve-stats log, and the contents of the file will be completely ignored. If a key in the JSON file content is missing, then lve-stats notifier uses the word contained in the body of the program (just like in previous lve-stats versions). Also, this file allows you to override/localize the subject of the email.

    It should be noted that this override of the subject line is the highest priority. I.e., if you want to use the subject from the configuration file /etc/sysconfig/lvestats.config/StatsNotifier.cfg, then do not specify the NOTIFY_FROM_SUBJECT key in the locale_defines.json.

    Plugins

    `,10)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#creating-a-plugin-for-lve-stats2"},{default:a(()=>e[34]||(e[34]=[t("Creating a plugin for LVE-stats2")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#introduction"},{default:a(()=>e[35]||(e[35]=[t("Introduction")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#server-plugin-arrangement"},{default:a(()=>e[36]||(e[36]=[t("Server plugin arrangement")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#plugin-configuration"},{default:a(()=>e[37]||(e[37]=[t("Plugin configuration")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#types-of-plugins"},{default:a(()=>e[38]||(e[38]=[t("Types of plugins")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#examples-of-plugins"},{default:a(()=>e[39]||(e[39]=[t("Examples of plugins")])),_:1}),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#collector"},{default:a(()=>e[40]||(e[40]=[t("Collector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#analyzer"},{default:a(()=>e[41]||(e[41]=[t("Analyzer")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#persistor"},{default:a(()=>e[42]||(e[42]=[t("Persistor")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#notifier"},{default:a(()=>e[43]||(e[43]=[t("Notifier")])),_:1})])])]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#file-info-and-format-for-var-lve-info-file"},{default:a(()=>e[44]||(e[44]=[t("File info and format for /var/lve/info file")])),_:1})])]),e[686]||(e[686]=l(`

    LVE-stats2 comes with a set of generic plugins:

    Plugin NameOrderDefaultPeriod (seconds)Description
    LVECollector1000Y5Collects usage/limits data from /proc/lve/list
    CPUInfoCollector2000Y5collents info about CPU - /proc/cpuinfo
    LVEUsernamesCollector3000Y3600collects usernames & user ids to match uid <-> lve id later on
    LVEUsageAnalyzer4000Y5analyzes usage of LVE
    LveUsageAggregator5000Y60aggregates data by time periods
    DBGovSaver6000Y5Saves data about database governor
    FileSaver7000Y5Saves LVE data into /var/lve/info
    CloudLinuxTopFileSaver8000Y60saves data used by cloudlinux-top to /var/lve/cloudlinux-top.json
    DBSaver9000Y60save LVE data to database
    DbUsernamesSaver10000Y3600saves users name to database
    DBSaverX6011000Y3600saves aggregated hourly data into database
    SnapshotSaver12000Y30collects & saves snapshots data
    StatsNotifier13000Yvariednotify user/admin based on usage
    HistoryCleaner14000Y3600removes old usage
    ResMEMCollector1500N30collects physical memory usage from processes RES field instead of /proc/lve/list
    LVEDestroyer-N5destroys LVEs that weren't active for X iterations. Number of iterations is passed from config using iterations variable. iterations=0 means plugin disabled

    To enable non-default plugin, copy or link it to /usr/share/lve-stats/plugins directory.

    For example to enable ResMEMCollector plugin, do:

    ln -s /usr/share/lve-stats/plugins.other/res_mem_collector.py /usr/share/lve-stats/plugins/
    +

    The file format should be JSON, and the file encoding should be UTF-8. If this file is found and successfully read, the words from it will be used in emails. In case of any file reading/parsing error, a corresponding message will be written in the lve-stats log, and the contents of the file will be completely ignored. If a key in the JSON file content is missing, then lve-stats notifier uses the word contained in the body of the program (just like in previous lve-stats versions). Also, this file allows you to override/localize the subject of the email.

    It should be noted that this override of the subject line is the highest priority. I.e., if you want to use the subject from the configuration file /etc/sysconfig/lvestats.config/StatsNotifier.cfg, then do not specify the NOTIFY_FROM_SUBJECT key in the locale_defines.json.

    Plugins

    `,10)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#creating-a-plugin-for-lve-stats2"},{default:i(()=>e[34]||(e[34]=[t("Creating a plugin for LVE-stats2")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#introduction"},{default:i(()=>e[35]||(e[35]=[t("Introduction")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#server-plugin-arrangement"},{default:i(()=>e[36]||(e[36]=[t("Server plugin arrangement")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#plugin-configuration"},{default:i(()=>e[37]||(e[37]=[t("Plugin configuration")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#types-of-plugins"},{default:i(()=>e[38]||(e[38]=[t("Types of plugins")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#examples-of-plugins"},{default:i(()=>e[39]||(e[39]=[t("Examples of plugins")])),_:1}),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#collector"},{default:i(()=>e[40]||(e[40]=[t("Collector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#analyzer"},{default:i(()=>e[41]||(e[41]=[t("Analyzer")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#persistor"},{default:i(()=>e[42]||(e[42]=[t("Persistor")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#notifier"},{default:i(()=>e[43]||(e[43]=[t("Notifier")])),_:1})])])]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#file-info-and-format-for-var-lve-info-file"},{default:i(()=>e[44]||(e[44]=[t("File info and format for /var/lve/info file")])),_:1})])]),e[673]||(e[673]=l(`

    LVE-stats2 comes with a set of generic plugins:

    Plugin NameOrderDefaultPeriod (seconds)Description
    LVECollector1000Y5Collects usage/limits data from /proc/lve/list
    CPUInfoCollector2000Y5collents info about CPU - /proc/cpuinfo
    LVEUsernamesCollector3000Y3600collects usernames & user ids to match uid <-> lve id later on
    LVEUsageAnalyzer4000Y5analyzes usage of LVE
    LveUsageAggregator5000Y60aggregates data by time periods
    DBGovSaver6000Y5Saves data about database governor
    FileSaver7000Y5Saves LVE data into /var/lve/info
    CloudLinuxTopFileSaver8000Y60saves data used by cloudlinux-top to /var/lve/cloudlinux-top.json
    DBSaver9000Y60save LVE data to database
    DbUsernamesSaver10000Y3600saves users name to database
    DBSaverX6011000Y3600saves aggregated hourly data into database
    SnapshotSaver12000Y30collects & saves snapshots data
    StatsNotifier13000Yvariednotify user/admin based on usage
    HistoryCleaner14000Y3600removes old usage
    ResMEMCollector1500N30collects physical memory usage from processes RES field instead of /proc/lve/list
    LVEDestroyer-N5destroys LVEs that weren't active for X iterations. Number of iterations is passed from config using iterations variable. iterations=0 means plugin disabled

    To enable non-default plugin, copy or link it to /usr/share/lve-stats/plugins directory.

    For example to enable ResMEMCollector plugin, do:

    ln -s /usr/share/lve-stats/plugins.other/res_mem_collector.py /usr/share/lve-stats/plugins/
     service lvestats restart
    -

    Creating a plugin for LVE-stats2

    Introduction

    LVE Stats 2 complex has scalable architecture, which allows to connect custom plugins.

    LVE Stats server searches for plugins in the directory which is specified with plugins parameter of server’s /etc/sysconfig/lvestats2 configuration file. Default directory is /usr/share/lve-stats/plugins.

    Each plugin must be of a Python class, must be written in Python language and its file must have .py extension. Files with all other extensions will be ignored. For normal server work access permission 400 is enough; owner – root .

    Plugin classes can be of the same name, but better not, because classes' names can affect the set of parameters in set_config method. You can find detailed plugins' configuring information below, in appropriate chapter.

    `,11)),s("p",null,[e[46]||(e[46]=t("Plugin class must contain ")),e[47]||(e[47]=s("span",{class:"notranslate"},[s("em",null,"execute()")],-1)),e[48]||(e[48]=t(" method, which is invoked by the server every 5 seconds (by default, can be changed by interval parameter of configuration file). Also ")),e[49]||(e[49]=s("span",{class:"notranslate"}," set_config ",-1)),e[50]||(e[50]=t(" method (configuration settings) can be available. You can find more info in ")),s("span",pe,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#plugin-configuration"},{default:a(()=>e[45]||(e[45]=[t("Plugins Configuration")])),_:1})]),e[51]||(e[51]=t(" chapter."))]),e[687]||(e[687]=l(`

    Additionally the following attributes can be set (plugin class instance variable):

    • order (integer) - defines plugin's position in the server's plugin list, (more info in Servers Plugin Arrangement ).
    • timeout (integer or float ) – the longest allowable duration of one launch of the plugin (execute method). Default value of timeout parameter is 5 seconds.
    • period (integer) – sets the interval between two launches of execute plugin method in seconds. If not defined, then plugin runs every 5 seconds ( interval parameter in configuration file).

    When execute() method of the plugin is invoked, the server creates an attribute now in it, where launch time is recorded. This value is equal to what a standard Python function time.time() returns. All the plugins launched one after another receive the same  value of now attribute from the server. now is overwritten before execute() method is invoked.

    The previous value of now attribute is not saved by the server. If plugin needs it, it has to save it by itself.

    Plugin class can be inherited from LveStatsPlugin class, which is the part of the server itself. This is not obligatory, but inheritance can help to avoid different errors in servers work, particularly if a plugin doesn't contain required execute method.

    LveStatsPlugin class is defined in the file: /opt/alt/python27/lib/python2.7/site-packages/lvestats/core/plugin.py .

    Server plugin arrangement

    When the server starts, it performs the search of plugins in the directory specified in /etc/sysconfig/lvestats2 configuration file. This directory is scanned only when the server starts, therefore if any plugin was added into the directory, the server has to be restarted with the following command:

    service lvestats restart.
    +

    Creating a plugin for LVE-stats2

    Introduction

    LVE Stats 2 complex has scalable architecture, which allows to connect custom plugins.

    LVE Stats server searches for plugins in the directory which is specified with plugins parameter of server’s /etc/sysconfig/lvestats2 configuration file. Default directory is /usr/share/lve-stats/plugins.

    Each plugin must be of a Python class, must be written in Python language and its file must have .py extension. Files with all other extensions will be ignored. For normal server work access permission 400 is enough; owner – root .

    Plugin classes can be of the same name, but better not, because classes' names can affect the set of parameters in set_config method. You can find detailed plugins' configuring information below, in appropriate chapter.

    `,11)),s("p",null,[e[46]||(e[46]=t("Plugin class must contain ")),e[47]||(e[47]=s("span",{class:"notranslate"},[s("em",null,"execute()")],-1)),e[48]||(e[48]=t(" method, which is invoked by the server every 5 seconds (by default, can be changed by interval parameter of configuration file). Also ")),e[49]||(e[49]=s("span",{class:"notranslate"}," set_config ",-1)),e[50]||(e[50]=t(" method (configuration settings) can be available. You can find more info in ")),s("span",de,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#plugin-configuration"},{default:i(()=>e[45]||(e[45]=[t("Plugins Configuration")])),_:1})]),e[51]||(e[51]=t(" chapter."))]),e[674]||(e[674]=l(`

    Additionally the following attributes can be set (plugin class instance variable):

    • order (integer) - defines plugin's position in the server's plugin list, (more info in Servers Plugin Arrangement ).
    • timeout (integer or float ) – the longest allowable duration of one launch of the plugin (execute method). Default value of timeout parameter is 5 seconds.
    • period (integer) – sets the interval between two launches of execute plugin method in seconds. If not defined, then plugin runs every 5 seconds ( interval parameter in configuration file).

    When execute() method of the plugin is invoked, the server creates an attribute now in it, where launch time is recorded. This value is equal to what a standard Python function time.time() returns. All the plugins launched one after another receive the same  value of now attribute from the server. now is overwritten before execute() method is invoked.

    The previous value of now attribute is not saved by the server. If plugin needs it, it has to save it by itself.

    Plugin class can be inherited from LveStatsPlugin class, which is the part of the server itself. This is not obligatory, but inheritance can help to avoid different errors in servers work, particularly if a plugin doesn't contain required execute method.

    LveStatsPlugin class is defined in the file: /opt/alt/python27/lib/python2.7/site-packages/lvestats/core/plugin.py .

    Server plugin arrangement

    When the server starts, it performs the search of plugins in the directory specified in /etc/sysconfig/lvestats2 configuration file. This directory is scanned only when the server starts, therefore if any plugin was added into the directory, the server has to be restarted with the following command:

    service lvestats restart.
     

    After successful restart, the plugins are graded and executed ascending by order attribute. If any plugin order attribute is not set, it is considered as a Python language constant sys.maxint (which is usually 9223372036854775807). This in fact means that such plugins will be executed in the last. If any plugins has similar order meanings, their execution order is unpredictable.

    The server invokes execute method of all plugins one after another.

    When the server invokes execute() method of any plugin, it transmits a data dictionary ( lve_data argument) into plugin. The dictionary is common for all the plugins. Any plugin can read, write and change any data in this dictionary. LVE Stats 2 server doesn't control this area. That is why one must be careful while developing new plugins, in order not to change or corrupt other plugins' data which can break their functionality.

    If an exception occurs in execute() method, its text and python stack trace is recorded into server log /var/log/lve-stats and all the changes made to lve_data dictionary before the exception happened are lost.

    The keys of the lve_data dictionary are recommended to look like PluginName_Key , in order the plugins do not corrupt other data accidentally.

    Server contains some standard plugins which define and use the following keys in the common dictionary lve_data: LVE_VERSION, stats, old_stats, procs and lve_usage . User plugins can use data from these keys, but it is recommended not to change them if there is no special need, because it can break the next plugins in the execution queue.

    KeyContent
    LVE_VERSIONLVE version. The same as console command lvectl lve-version produces.
    statsDictionary, that contains lve id’s as keys and LVEStat class objects as values. Every LVEStat object contains values of usages and limits taken from /proc/lve/list file for every LVE Id . Dictionary keys – integer lve id , including 0 for “ default ” LVE. This dictionary is updated on each iteration of lvestats-server (every 5 seconds by default). LVEStat – is a standard server class, it can be imported with the command from lvestats.core.lvestat import LVEStat. The class is described in the file /opt/alt/python27/lib/python2.7/site-packages/lvestats/core/lvestat.py . Here you can find the whole list of data fields and their functions.
    old_statsstats content from the previous iteration. Before the first iteration – empty dictionary.
    totalHzWhen LVE_VERSION is 4, real CPU frequency in Hz multiplied by number of cores. When LVE_VERSION > 4, CPU speed is in conventional units and equals to 1000000000 * cores (1 GHz per core).
    procsQuantity of CPU cores.
    lve_usagesContains accumulated LVE statistics for each 5-seconds interval in current minute. Cleared each minute.
    lve_usageContains aggregated LVE Statistics for “previous” minute to store to database. Overwritten each minute.

    Each plugin’s instance lifetime is from the moment it was loaded till the server stops working. But if execute() method working time exceeds timeout, the plugin will be terminated and restarted in the next iteration. All changes to the lve_data dictionary will be lost.

    During servers graceful shutdown (restart, server shutdown, commands service lvestats stop, service lvestats restart ), each plugin receives SIGTERM signal. This is useful to correctly unload the plugin (terminate all subsidiary processes, save data to files etc.). If a plugin doesn't need to “finalize” its execution before termination, then there's no need to implement this signal handler. Below you can see an example of such handler.

    Note

    If a plugin implements handler for SIGTERM, then this handler must end with sys.exit(0) command. Otherwise plugin process will not be terminated correctly and will become orphaned.

    Plugin configuration

    LVE Stats 2 Server allows to configure each plugin separately.

    On initialization stage the server invokes set_config() method of the plugin and locates there a dictionary which contains:

    • all parameters from file /etc/sysconfig/lvestats2 (global).
    • plugin's individual configuration file parameters (if one exists). Configuration files must be located in /etc/sysconfig/lvestats.config directory, have .cfg extension and be the same format as /etc/sysconfig/lvestats2 . Files in this directory are matched with the plugins by name. For instance, if plugin class is Plugin1_class , then server will try to find and download /etc/sysconfig/lvestats.config/Plugin1_class.cfg. Names are case sensitive. If any plugin doesn't have an individual configuration file, then it's not an error. In this case plugin will just receive parameters from /etc/sysconfig/lvestats2 .

    Note

    An individual configuration file of every plugin is loaded after server configuration file. That is why if it contains any parameters with names similar to ones of server config, then plugin will use parameters from its individual config rather than server config parameters.

    If a plugin doesn't require any configuration to be done, then set_config method can be skipped.

    In addition, plugins can use their own configuration methods.

    Types of plugins

    According to server architecture, plugins can be of the following types:

    • collectors
    • analyzers
    • persistors
    • notifiers

    Collectors are designed to collect information; analyzers – to analyze it and form some other data on its basis; persistors – to save information from the common dictionary into files, databases, etc.; notifiers - to notify system users about any events.

    This division is rather arbitrary. There is an opportunity to execute all the actions on collection, analysis and saving the information in one and only plugin. But at the same time the division into functionally independent parts allows to build flexible and easily configurable system for collecting and processing the data.

    Also it is possible to implement the systems of lazy-write, planning of collecting/processing tasks and notifying users about different events.

    Examples of plugins

    Here is a practical example of a user plugin.

    Specification:

    1. To trace specified file size changes. The name of file being traced must be specified in configuration file, which allows to change it without modifying the plugin itself. If file size has been changed, it has to be written as a message into our log. The name of log must be specified in configuration file as well.

    2. File size must be checked with default interval (5 seconds), and log notification must be held once a minute (to avoid resource expend for possibly regular write).

    3. System administrator must receive emails with file size at the moment the email was sent. These notifications must be sent even if the file size hasn’t been changed. Notification emails must be read periodicity from configuration file as well as sender/receiver emails .

    As file size check, fixing the result and notification sending must be held with different periods, then it’s impossible to realize all the tasks by means of one plugin. The fact that one minute (60 seconds) is multiple to 5 seconds doesn’t matter in this case, because default period can be changed in server’s configuration file, but the condition of fixing the result once a minute is a part of the specification, which can not be violated. In addition, notification email period is known in advance, as it is specified by user in configuration file.

    That is why we realize 4 plugins: collector, analyzer, persistor and notifier.

    Collector

    Collector's aim is to determine the size of a proper file.

    # FSize_watcher_collector.py
     # Example plugin for monitoring file size.
     # Part 1. Collector
    @@ -266,7 +266,7 @@ class FSize_watcher_saver (LveStatsPlugin):
     

    Configuration file /etc/sysconfig/lvestats.config/FSize_watcher_saver.cfg:

    # Config file for FSize_watcher_saver.py plugin
     # Please define log filename here
     log_filename = /var/log/FSize_watcher.log
    -

    This plugin starts after analyzer (order=2) , checks new file size presence flag, and if positive – writes it into log. If the flag is cleared (which means the size hasn't changed), then plugin simply ends.

    Starts once in a minute (period=60).

    Also this plugin shows the work of signal handler.

    Plugin constructor registers handler-function of a proper signal: signal.signal(signal.SIGTERM, self.sigterm_handler) . This means, that when the server finishes its work, then sigterm_handler method of plugin class will be invoked. In the actual example the function just writes a notification into log, tracing the fact of it's invocation.

    `,66)),s("p",null,[e[53]||(e[53]=t("Pay attention on ")),e[54]||(e[54]=s("span",{class:"notranslate"},[s("em",null,"sys.exit(0)")],-1)),e[55]||(e[55]=t(" command in the end of the handler. Find the information on it in ")),s("span",ue,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#server-plugin-arrangement"},{default:a(()=>e[52]||(e[52]=[t("Server Plugin Arrangement")])),_:1})]),e[56]||(e[56]=t(" section."))]),e[688]||(e[688]=l(`

    In addition see into examples of file log /var/log/FSize_watcher.log formed by the plugins above:

    Tue Feb  3 13:06:24 2015 - FSize_watcher started. Monitoring file: /usr/local/cpanel/logs/access_log, saving data period=60 sec
    +

    This plugin starts after analyzer (order=2) , checks new file size presence flag, and if positive – writes it into log. If the flag is cleared (which means the size hasn't changed), then plugin simply ends.

    Starts once in a minute (period=60).

    Also this plugin shows the work of signal handler.

    Plugin constructor registers handler-function of a proper signal: signal.signal(signal.SIGTERM, self.sigterm_handler) . This means, that when the server finishes its work, then sigterm_handler method of plugin class will be invoked. In the actual example the function just writes a notification into log, tracing the fact of it's invocation.

    `,66)),s("p",null,[e[53]||(e[53]=t("Pay attention on ")),e[54]||(e[54]=s("span",{class:"notranslate"},[s("em",null,"sys.exit(0)")],-1)),e[55]||(e[55]=t(" command in the end of the handler. Find the information on it in ")),s("span",ce,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#server-plugin-arrangement"},{default:i(()=>e[52]||(e[52]=[t("Server Plugin Arrangement")])),_:1})]),e[56]||(e[56]=t(" section."))]),e[675]||(e[675]=l(`

    In addition see into examples of file log /var/log/FSize_watcher.log formed by the plugins above:

    Tue Feb  3 13:06:24 2015 - FSize_watcher started. Monitoring file: /usr/local/cpanel/logs/access_log, saving data period=60 sec
     Tue Feb  3 13:06:24 2015 - FSize_watcher: file size is 122972890 bytes
     Tue Feb  3 13:07:25 2015 - FSize_watcher: file size is 122975507 bytes
     Tue Feb  3 13:08:25 2015 - FSize_watcher: file size is 122978124 bytes
    @@ -426,13 +426,13 @@ LVE_VERSION >=6
     LVE_VERSION >=8
     #18 - liops  (limit IOPS)
     #19 - iops (average IOPS)
    -
    `,25)),s("div",me,[e[59]||(e[59]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[58]||(e[58]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:a(()=>e[57]||(e[57]=[t("LVE-stats 2 CLI")])),_:1})])]),e[689]||(e[689]=l('

    Troubleshooting

    lvestats service and utilities write fatal errors to system log.

    There is /var/log/lve-stats.log file with additional information (warnings, tracebacks for errors).

    To see which letters were sent via lves-tats notifier in the logs, do the following:

    1. In the /etc/sysconfig/lvestats2, specify logging_level=debug;
    2. Execute the service lvestats restart command.

    CageFS

    General information and requirements

    ',7)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#minimum-requirements"},{default:a(()=>e[60]||(e[60]=[t("Minimum Requirements")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs-quirks"},{default:a(()=>e[61]||(e[61]=[t("CageFS quirks")])),_:1})])]),e[690]||(e[690]=l('

    CageFS is a virtualized file system and a set of tools to contain each user in its own 'cage'. Each customer will have its own fully functional CageFS, with all the system files, tools, etc.

    The benefits of CageFS are:

    • Only safe binaries are available to user
    • User will not see any other users, and would have no way to detect presence of other users & their user names on the server
    • User will not be able to see server configuration files, such as Apache config files.
    • User's will have limited view of /proc file system, and will not be able to see other users' processes

    At the same time, user's environment will be fully functional, and user should not feel in any way restricted. No adjustments to user's scripts are needed. CageFS will cage any scripts execution done via:

    • Apache (suexec, suPHP, mod_fcgid, mod_fastcgi)
    • LiteSpeed Web Server
    • Cron Jobs
    • SSH
    • Any other PAM enabled service

    Note

    mod_php is not supported, MPM ITK requires a custom patch

    Note

    CageFS is not supported for H-Sphere.

    ',7)),s("p",null,[e[63]||(e[63]=t("See also ")),n(i,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:a(()=>e[62]||(e[62]=[t("Compatibility Matrix")])),_:1}),e[64]||(e[64]=t("."))]),e[691]||(e[691]=l('

    Minimum Requirements:

    • kernel: CL6 with lve1.2.17.1 or later, CL7.
    • 7GB of disk space.

    Depending on your setup, and number of users, you might also need:

    • Up to 8MB per customer in /var directory (to store custom /etc directory)
    • 5GB to 20GB in /usr/share directory (to store safe skeleton of a filesystem)
    ',4)),s("div",ge,[e[67]||(e[67]=s("p",{class:"custom-block-title"},"Warning",-1)),s("p",null,[e[66]||(e[66]=t("If at any time you decide to uninstall CageFS, please make sure you follow ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstalling"},{default:a(()=>e[65]||(e[65]=[t("uninstall instructions")])),_:1})])]),e[692]||(e[692]=l(`

    CageFS quirks

    Due to the nature of CageFS, some options will not work as before or will require some changes:

    • lastlog will not work (/var/log/lastlog).
    • PHP will load php.ini from /usr/selector/php.ini. That file is actually a link to the real php.ini file from your system. So the same php.ini will be loaded in the end.
    • You have to run cagefsctl --update any time you have modified php.ini, or you want to get new/updated software inside CageFS.
    • CageFS installation changes jailshell to regular bash on cPanel - read why.

    Installation and update

    To install CageFS:

    yum install cagefs
    +
    `,25)),s("div",pe,[e[59]||(e[59]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[58]||(e[58]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lve-stats-2"},{default:i(()=>e[57]||(e[57]=[t("LVE-stats 2 CLI")])),_:1})])]),e[676]||(e[676]=l('

    Troubleshooting

    lvestats service and utilities write fatal errors to system log.

    There is /var/log/lve-stats.log file with additional information (warnings, tracebacks for errors).

    To see which letters were sent via lves-tats notifier in the logs, do the following:

    1. In the /etc/sysconfig/lvestats2, specify logging_level=debug;
    2. Execute the service lvestats restart command.

    CageFS

    General information and requirements

    ',7)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#minimum-requirements"},{default:i(()=>e[60]||(e[60]=[t("Minimum Requirements")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs-quirks"},{default:i(()=>e[61]||(e[61]=[t("CageFS quirks")])),_:1})])]),e[677]||(e[677]=l('

    CageFS is a virtualized file system and a set of tools to contain each user in its own 'cage'. Each customer will have its own fully functional CageFS, with all the system files, tools, etc.

    The benefits of CageFS are:

    • Only safe binaries are available to user
    • User will not see any other users, and would have no way to detect presence of other users & their user names on the server
    • User will not be able to see server configuration files, such as Apache config files.
    • User's will have limited view of /proc file system, and will not be able to see other users' processes

    At the same time, user's environment will be fully functional, and user should not feel in any way restricted. No adjustments to user's scripts are needed. CageFS will cage any scripts execution done via:

    • Apache (suexec, suPHP, mod_fcgid, mod_fastcgi)
    • LiteSpeed Web Server
    • Cron Jobs
    • SSH
    • Any other PAM enabled service

    Note

    mod_php is not supported, MPM ITK requires a custom patch

    Note

    CageFS is not supported for H-Sphere.

    ',7)),s("p",null,[e[63]||(e[63]=t("See also ")),a(n,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:i(()=>e[62]||(e[62]=[t("Compatibility Matrix")])),_:1}),e[64]||(e[64]=t("."))]),e[678]||(e[678]=l('

    Minimum Requirements:

    • kernel: CL6 with lve1.2.17.1 or later, CL7.
    • 7GB of disk space.

    Depending on your setup, and number of users, you might also need:

    • Up to 8MB per customer in /var directory (to store custom /etc directory)
    • 5GB to 20GB in /usr/share directory (to store safe skeleton of a filesystem)
    ',4)),s("div",ue,[e[67]||(e[67]=s("p",{class:"custom-block-title"},"Warning",-1)),s("p",null,[e[66]||(e[66]=t("If at any time you decide to uninstall CageFS, please make sure you follow ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstalling"},{default:i(()=>e[65]||(e[65]=[t("uninstall instructions")])),_:1})])]),e[679]||(e[679]=l(`

    CageFS quirks

    Due to the nature of CageFS, some options will not work as before or will require some changes:

    • lastlog will not work (/var/log/lastlog).
    • PHP will load php.ini from /usr/selector/php.ini. That file is actually a link to the real php.ini file from your system. So the same php.ini will be loaded in the end.
    • You have to run cagefsctl --update any time you have modified php.ini, or you want to get new/updated software inside CageFS.
    • CageFS installation changes jailshell to regular bash on cPanel - read why.

    Installation and update

    To install CageFS:

    yum install cagefs
     /usr/sbin/cagefsctl --init
     

    That last command will create skeleton directory that might be around 7GB in size. If you don't have enough disk space in /usr/share, use following commands to have cagefs-skeleton being placed in a different location:

    mkdir /home/cagefs-skeleton
     ln -s /home/cagefs-skeleton /usr/share/cagefs-skeleton
     

    The commands above should be executed before the cagefsctl --init.

    Also, it is needed approximately 4Kb of disk space per one user for the /var/cagefs directory. You should place the /var/cagefs directory on partition, which is large enough and has disk quota enabled.

    For example, to create the /var/cagefs directory on the /home partition, execute the following commands before the cagefsctl --init:

    mkdir /home/cagefs
     ln -s /home/cagefs /var/cagefs
    -

    IMPORTANT

    Please make sure to turn on disk quota for a partition where the /var/cagefs directory is located, or move the /var/cagefs to a partition where disk quota is enabled. This is needed to prevent users from abusing disk quota inside CageFS.

    If the /var/cagefs directory is already created, you can move it. How to move the /var/cagefs directory: https://docs.cloudlinux.com./#moving-var-cagefs-directory

    IMPORTANT

    If you are placing skeleton in /home directory on cPanel servers, you must configure the following option in cPanel WHM: WHM -> Server Configuration -> Basic cPanel/WHM Setup -> Basic Config -> Additional home directories
    Change the value to blank (not default Home ). Without changing this option, cPanel will create new accounts in incorrect places.

    CageFS will automatically detect and configure all necessary files for:

    • cPanel
    • Plesk
    • DirectAdmin
    • ISPmanager
    • Interworx
    • MySQL
    • PostgreSQL
    • LiteSpeed

    Web interface to manage CageFS is available for cPanel, Plesk 10+, DirectAdmin, ISPmanager & Interworx. Command line tool would need to be used for other control panels.

    Once you initialized the template you can start enabling users. By default CageFS is disabled for all users.

    Starting from cagefs-6.1-27 fs.proc_can_see_other_uid will be migrated (one time) from /etc/sysctl.conf into /etc/sysctl.d/90-cloudlinux.conf . If this variable is not set in either file, it will default to 0.

    It is strongly advised against setting this variable in 90-cloudlinux.conf. Define it in /etc/sysctl.conf or in some other config file with an index number greater than 90-cloudlinux.conf, e.g. /etc/sysctl.d/95-custom.conf.

    `,21)),s("p",null,[e[69]||(e[69]=t("You can find more information on ")),e[70]||(e[70]=s("span",{class:"notranslate"},[s("code",null,"fs.proc_can_see_other_uid")],-1)),e[71]||(e[71]=t(" automatic migration in ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_kernel/#kernel-config-variables"},{default:a(()=>e[68]||(e[68]=[t("Kernel Config Variables")])),_:1}),e[72]||(e[72]=t("."))]),s("div",ve,[e[75]||(e[75]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[74]||(e[74]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:a(()=>e[73]||(e[73]=[t("CageFS CLI")])),_:1})])]),e[693]||(e[693]=l(`

    Uninstalling

    To uninstall CageFS, start by disabling and removing all directories:

    /usr/sbin/cagefsctl --remove-all
    +

    IMPORTANT

    Please make sure to turn on disk quota for a partition where the /var/cagefs directory is located, or move the /var/cagefs to a partition where disk quota is enabled. This is needed to prevent users from abusing disk quota inside CageFS.

    If the /var/cagefs directory is already created, you can move it. How to move the /var/cagefs directory: https://docs.cloudlinux.com./#moving-var-cagefs-directory

    IMPORTANT

    If you are placing skeleton in /home directory on cPanel servers, you must configure the following option in cPanel WHM: WHM -> Server Configuration -> Basic cPanel/WHM Setup -> Basic Config -> Additional home directories
    Change the value to blank (not default Home ). Without changing this option, cPanel will create new accounts in incorrect places.

    CageFS will automatically detect and configure all necessary files for:

    • cPanel
    • Plesk
    • DirectAdmin
    • ISPmanager
    • Interworx
    • MySQL
    • PostgreSQL
    • LiteSpeed

    Web interface to manage CageFS is available for cPanel, Plesk 10+, DirectAdmin, ISPmanager & Interworx. Command line tool would need to be used for other control panels.

    Once you initialized the template you can start enabling users. By default CageFS is disabled for all users.

    Starting from cagefs-6.1-27 fs.proc_can_see_other_uid will be migrated (one time) from /etc/sysctl.conf into /etc/sysctl.d/90-cloudlinux.conf . If this variable is not set in either file, it will default to 0.

    It is strongly advised against setting this variable in 90-cloudlinux.conf. Define it in /etc/sysctl.conf or in some other config file with an index number greater than 90-cloudlinux.conf, e.g. /etc/sysctl.d/95-custom.conf.

    `,21)),s("p",null,[e[69]||(e[69]=t("You can find more information on ")),e[70]||(e[70]=s("span",{class:"notranslate"},[s("code",null,"fs.proc_can_see_other_uid")],-1)),e[71]||(e[71]=t(" automatic migration in ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_kernel/#kernel-config-variables"},{default:i(()=>e[68]||(e[68]=[t("Kernel Config Variables")])),_:1}),e[72]||(e[72]=t("."))]),s("div",me,[e[75]||(e[75]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[74]||(e[74]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:i(()=>e[73]||(e[73]=[t("CageFS CLI")])),_:1})])]),e[680]||(e[680]=l(`

    Uninstalling

    To uninstall CageFS, start by disabling and removing all directories:

    /usr/sbin/cagefsctl --remove-all
     

    That command will: disable CageFS for all customers, unmount CageFS for all users, removes /usr/share/cagefs-skeleton & /var/cagefs directories. It will not remove /etc/cagefs directory.

    Remove CageFS RPM:

    yum remove cagefs
     

    Managing users

    CageFS provides for two modes of operations:

    1. Enabled for all, except those that are disabled.
    2. Disabled for all, except those that are enabled.

    Mode #1 is convenient for production operation, where you want all new users to automatically be added to CageFS. Mode #2 is convenient while you test CageFS, as it allows you to enable it on one by one for your customers.

    To start using CageFS you have to select one of the mode of operations:

    /usr/sbin/cagefsctl --enable-all
     
    or
    /usr/sbin/cagefsctl --disable-all
    @@ -442,7 +442,7 @@ ln -s /home/cagefs /var/cagefs
     
    To list all enabled users:
    /usr/sbin/cagefsctl --list-enabled
     
    To list all disabled users:
    /usr/sbin/cagefsctl --list-disabled
     
    To see current mode of operation:
    /usr/sbin/cagefsctl --display-user-mode
    -
    `,27)),s("div",he,[e[78]||(e[78]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[77]||(e[77]=t("You can also use ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:a(()=>e[76]||(e[76]=[t("CageFS CLI")])),_:1})])]),e[694]||(e[694]=s("h3",{id:"configuration-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-1","aria-hidden":"true"},"#"),t(" Configuration")],-1)),s("ul",null,[s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#file-system-templates"},{default:a(()=>e[79]||(e[79]=[t("File system templates")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-files"},{default:a(()=>e[80]||(e[80]=[t("Excluding files")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-users"},{default:a(()=>e[81]||(e[81]=[t("Excluding users")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mount-points"},{default:a(()=>e[82]||(e[82]=[t("Mount points")])),_:1})]),s("ul",null,[s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#per-user-virtual-mount-points"},{default:a(()=>e[83]||(e[83]=[t("Per user virtual mount points")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:a(()=>e[84]||(e[84]=[t("Split by username")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#splitted-by-user-s-uid-mounts"},{default:a(()=>e[85]||(e[85]=[t("Splitted by user’s UID mounts")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mounting-users-home-directory-inside-cagefs"},{default:a(()=>e[86]||(e[86]=[t("Mounting user’s home directory inside CageFS")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-hide-directory-inside-mount-point"},{default:a(()=>e[87]||(e[87]=[t("How to hide directory inside mount point")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#example"},{default:a(()=>e[88]||(e[88]=[t("Example")])),_:1})])])])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#base-home-directory"},{default:a(()=>e[89]||(e[89]=[t("Base home directory")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#postgresql-support"},{default:a(()=>e[90]||(e[90]=[t("PostgreSQL support")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#pam-configuration"},{default:a(()=>e[91]||(e[91]=[t("PAM configuration")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:a(()=>e[92]||(e[92]=[t("Filtering options for commands executed by proxyexec")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#executing-by-proxy"},{default:a(()=>e[93]||(e[93]=[t("Executing by proxy")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#users-with-duplicate-uids"},{default:a(()=>e[94]||(e[94]=[t("Users with duplicate UIDs")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#examples"},{default:a(()=>e[95]||(e[95]=[t("Examples")])),_:1})]),s("ul",null,[s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#example-1-make-users-in-cagefs-be-able-to-execute-a-script-which-must-work-outside-cagefs"},{default:a(()=>e[96]||(e[96]=[t("Example 1. Make users in CageFS be able to execute a script which must work outside CageFS")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#example-2-permissions-escalation"},{default:a(()=>e[97]||(e[97]=[t("Example 2. Permissions escalation")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#example-3-custom-proxyexec-wrapper"},{default:a(()=>e[98]||(e[98]=[t("Example 3. Custom proxyexec wrapper")])),_:1})])])])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-etc-files-per-customer"},{default:a(()=>e[99]||(e[99]=[t("Custom /etc files per customer")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#moving-cagefs-skeleton-directory"},{default:a(()=>e[100]||(e[100]=[t("Moving "),s("span",{class:"notranslate"}," cagefs-skeleton ",-1),t(" directory")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#moving-var-cagefs-directory"},{default:a(()=>e[101]||(e[101]=[t("Moving /var/cagefs directory")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#tmp-directories"},{default:a(()=>e[102]||(e[102]=[t("TMP directories")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#syslog"},{default:a(()=>e[103]||(e[103]=[t("Syslog")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-mount-points"},{default:a(()=>e[104]||(e[104]=[t("Excluding mount points")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#shared-memory-dev-shm-isolation-in-cagefs"},{default:a(()=>e[105]||(e[105]=[t("Shared memory (/dev/shm) isolation in CageFS")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#preventing-process-from-entering-cagefs-on-error"},{default:a(()=>e[106]||(e[106]=[t("Preventing process from entering CageFS on error")])),_:1})])])]),e[695]||(e[695]=l(`

    File system templates

    Warning

    Please do not modify any existing files in the /etc/cagefs/conf.d directory because they may be overwritten while updating CageFS package. You should create a new file with a unique name instead.

    CageFS creates a filesystem template in /usr/share/cagefs-skeleton directory. CageFS template will be mounted for each customer. The template is created by running:

    /usr/sbin/cagefsctl --init
    +
    `,27)),s("div",ge,[e[78]||(e[78]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[77]||(e[77]=t("You can also use ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:i(()=>e[76]||(e[76]=[t("CageFS CLI")])),_:1})])]),e[681]||(e[681]=s("h3",{id:"configuration-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-1","aria-hidden":"true"},"#"),t(" Configuration")],-1)),s("ul",null,[s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#file-system-templates"},{default:i(()=>e[79]||(e[79]=[t("File system templates")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-files"},{default:i(()=>e[80]||(e[80]=[t("Excluding files")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-users"},{default:i(()=>e[81]||(e[81]=[t("Excluding users")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mount-points"},{default:i(()=>e[82]||(e[82]=[t("Mount points")])),_:1})]),s("ul",null,[s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#per-user-virtual-mount-points"},{default:i(()=>e[83]||(e[83]=[t("Per user virtual mount points")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:i(()=>e[84]||(e[84]=[t("Split by username")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#splitted-by-user-s-uid-mounts"},{default:i(()=>e[85]||(e[85]=[t("Splitted by user’s UID mounts")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mounting-users-home-directory-inside-cagefs"},{default:i(()=>e[86]||(e[86]=[t("Mounting user’s home directory inside CageFS")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-hide-directory-inside-mount-point"},{default:i(()=>e[87]||(e[87]=[t("How to hide directory inside mount point")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#example"},{default:i(()=>e[88]||(e[88]=[t("Example")])),_:1})])])])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#base-home-directory"},{default:i(()=>e[89]||(e[89]=[t("Base home directory")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#postgresql-support"},{default:i(()=>e[90]||(e[90]=[t("PostgreSQL support")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#pam-configuration"},{default:i(()=>e[91]||(e[91]=[t("PAM configuration")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:i(()=>e[92]||(e[92]=[t("Filtering options for commands executed by proxyexec")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#executing-by-proxy"},{default:i(()=>e[93]||(e[93]=[t("Executing by proxy")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#users-with-duplicate-uids"},{default:i(()=>e[94]||(e[94]=[t("Users with duplicate UIDs")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#examples"},{default:i(()=>e[95]||(e[95]=[t("Examples")])),_:1})]),s("ul",null,[s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#example-1-make-users-in-cagefs-be-able-to-execute-a-script-which-must-work-outside-cagefs"},{default:i(()=>e[96]||(e[96]=[t("Example 1. Make users in CageFS be able to execute a script which must work outside CageFS")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#example-2-permissions-escalation"},{default:i(()=>e[97]||(e[97]=[t("Example 2. Permissions escalation")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#example-3-custom-proxyexec-wrapper"},{default:i(()=>e[98]||(e[98]=[t("Example 3. Custom proxyexec wrapper")])),_:1})])])])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-etc-files-per-customer"},{default:i(()=>e[99]||(e[99]=[t("Custom /etc files per customer")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#moving-cagefs-skeleton-directory"},{default:i(()=>e[100]||(e[100]=[t("Moving "),s("span",{class:"notranslate"}," cagefs-skeleton ",-1),t(" directory")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#moving-var-cagefs-directory"},{default:i(()=>e[101]||(e[101]=[t("Moving /var/cagefs directory")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#tmp-directories"},{default:i(()=>e[102]||(e[102]=[t("TMP directories")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#syslog"},{default:i(()=>e[103]||(e[103]=[t("Syslog")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-mount-points"},{default:i(()=>e[104]||(e[104]=[t("Excluding mount points")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#shared-memory-dev-shm-isolation-in-cagefs"},{default:i(()=>e[105]||(e[105]=[t("Shared memory (/dev/shm) isolation in CageFS")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#preventing-process-from-entering-cagefs-on-error"},{default:i(()=>e[106]||(e[106]=[t("Preventing process from entering CageFS on error")])),_:1})])])]),e[682]||(e[682]=l(`

    File system templates

    Warning

    Please do not modify any existing files in the /etc/cagefs/conf.d directory because they may be overwritten while updating CageFS package. You should create a new file with a unique name instead.

    CageFS creates a filesystem template in /usr/share/cagefs-skeleton directory. CageFS template will be mounted for each customer. The template is created by running:

    /usr/sbin/cagefsctl --init
     

    To update the template, you should run:

    /usr/sbin/cagefsctl --update
     

    The behavior of the commands (and the files copied into /usr/share/cagefs-skeleton directory) depends on the configuration files in /etc/cagefs/conf.d
    You can add additional files, users, groups and devices into CageFS template by adding .cfg file, and running:

    /usr/sbin/cagefsctl --update
     

    To delete files from CageFS template, remove corresponding .cfg file, and run:

    /usr/sbin/cagefsctl --update
    @@ -466,7 +466,7 @@ groups=smmsp
     cagefsctl --update
     

    Note

    ffmpeg RPM should be installed on the system already.

    Excluding files

    To exclude files and directories from CageFS, edit file:
    /etc/cagefs/custom.black.list
    And add files or directories in there, one per line.

    Execute the following command to apply changes:

    cagefsctl --force-update
     

    Please do not edit /etc/cagefs/black.list file because it is replaced during the update of CageFS package.

    Excluding users

    To exclude users from CageFS, create a file (any name would work) inside /etc/cagefs/exclude folder, and list users that you would like to exclude from CageFS in that file (each user in separate line).

    Then execute the following command to apply changes:

    cagefsctl --user-status USER
    -

    And check that the command shows Disabled.

    Mount points

    Note

    Please do not mount the entire /var directory into CageFS (i.e. do not add the /var to the cagefs.mp). This will break CageFS.

    CageFS creates individual namespace for each user, making it impossible for users to see each other's files and creating high level of isolation. The way namespace is organized:

    `,30)),s("ol",null,[e[111]||(e[111]=l('
  • /usr/share/cagefs-skeleton with safe files is created
  • Any directory from the server that needs to be shared across all users is mounted into /usr/share/cagefs-skeleton (a list of such directories is defined in /etc/cagefs/cagefs.mp)
  • /var/cagefs/[prefix]/username directory for each user. Prefix is defined as last two digits of user id. User id is taken from /etc/passwd file.
  • Separate /etc directory is created and populated for each user inside /var/cagefs/[prefix]/username
  • /tmp directory is mounted for each user separately into ~username/.cagefs/tmp directory
  • Additional custom directories can be mounted for each user by defining them in /etc/cagefs/cagefs.mp
  • ',6)),s("li",null,[e[108]||(e[108]=t("You can define custom directories per user using ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#per-user-virtual-mount-points"},{default:a(()=>e[107]||(e[107]=[t("virt.mp")])),_:1}),e[109]||(e[109]=t(" files ")),e[110]||(e[110]=s("em",null,"[CageFS 5.1 and higher]",-1))])]),e[696]||(e[696]=l(`

    To define individual custom directories in /etc/cagefs/cagefs.mp following format is used:

    @/full/path/to/directory,permission notation

    This is useful when you need to give each user its own copy of a particular system directory, like:

    @/var/run/screen,777

    Such entry would create separate /var/run/screen for each user, with permissions set to 777

    To modify mount points, edit /etc/cagefs/cagefs.mp. Here is an example of cagefs.mp:

    /var/lib/mysql
    +

    And check that the command shows Disabled.

    Mount points

    Note

    Please do not mount the entire /var directory into CageFS (i.e. do not add the /var to the cagefs.mp). This will break CageFS.

    CageFS creates individual namespace for each user, making it impossible for users to see each other's files and creating high level of isolation. The way namespace is organized:

    `,30)),s("ol",null,[e[111]||(e[111]=l('
  • /usr/share/cagefs-skeleton with safe files is created
  • Any directory from the server that needs to be shared across all users is mounted into /usr/share/cagefs-skeleton (a list of such directories is defined in /etc/cagefs/cagefs.mp)
  • /var/cagefs/[prefix]/username directory for each user. Prefix is defined as last two digits of user id. User id is taken from /etc/passwd file.
  • Separate /etc directory is created and populated for each user inside /var/cagefs/[prefix]/username
  • /tmp directory is mounted for each user separately into ~username/.cagefs/tmp directory
  • Additional custom directories can be mounted for each user by defining them in /etc/cagefs/cagefs.mp
  • ',6)),s("li",null,[e[108]||(e[108]=t("You can define custom directories per user using ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#per-user-virtual-mount-points"},{default:i(()=>e[107]||(e[107]=[t("virt.mp")])),_:1}),e[109]||(e[109]=t(" files ")),e[110]||(e[110]=s("em",null,"[CageFS 5.1 and higher]",-1))])]),e[683]||(e[683]=l(`

    To define individual custom directories in /etc/cagefs/cagefs.mp following format is used:

    @/full/path/to/directory,permission notation

    This is useful when you need to give each user its own copy of a particular system directory, like:

    @/var/run/screen,777

    Such entry would create separate /var/run/screen for each user, with permissions set to 777

    To modify mount points, edit /etc/cagefs/cagefs.mp. Here is an example of cagefs.mp:

    /var/lib/mysql
     /var/lib/dav
     /var/www/cgi-bin
     /var/spool
    @@ -477,7 +477,7 @@ cagefsctl --update
     @/var/spool/cron,700
     @/var/run/screen,777
     

    If you want to change mount points, make sure you re-initialize mount points for all customers:

    cagefsctl --remount-all
    -
    This command will kill all current processes and reset mount points.

    Per user virtual mount points

    [CageFS 5.1 and higher]

    `,12)),s("ul",null,[s("li",null,[s("em",null,[e[113]||(e[113]=t("Please, see ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:a(()=>e[112]||(e[112]=[t("Split by username")])),_:1}),e[114]||(e[114]=t(" feature, as it might be simpler to implement in some cases."))])])]),e[697]||(e[697]=l(`

    Starting with CageFS 5.1 you can specify additional directories to be mounted inside user's CageFS. This can be specified for each user. To specify virtual mount points for a user, create a file:

    /var/cagefs/[prefix]/[user]/virt.mp

    Inside that file, you can specify mount points in the following format:

    virtdir1,mask
    +
    This command will kill all current processes and reset mount points.

    Per user virtual mount points

    [CageFS 5.1 and higher]

    `,12)),s("ul",null,[s("li",null,[s("em",null,[e[113]||(e[113]=t("Please, see ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:i(()=>e[112]||(e[112]=[t("Split by username")])),_:1}),e[114]||(e[114]=t(" feature, as it might be simpler to implement in some cases."))])])]),e[684]||(e[684]=l(`

    Starting with CageFS 5.1 you can specify additional directories to be mounted inside user's CageFS. This can be specified for each user. To specify virtual mount points for a user, create a file:

    /var/cagefs/[prefix]/[user]/virt.mp

    Inside that file, you can specify mount points in the following format:

    virtdir1,mask
     @subdir1,mask
     @subdir2,mask
     virdir2,mask
    @@ -500,7 +500,7 @@ cltest2 uid 10001 has domains: cltest2.com, cltest2-addon.com
     /home/httpd/fcgi-bin/user2
     

    Then we can add the following line to /etc/cagefs/cagefs.mp file:

    %/home/httpd/fcgi-bin
     

    and execute:

    cagefsctl --remount-all
    -

    After that each subdirectory of /home/httpd/fcgi-bin will be mounted for appropriate user in CageFS: /home/httpd/fcgi-bin/user1 will be mounted for user1 and /home/httpd/fcgi-bin/user2 will be mounted for user2 .

    Splitted by user’s UID mounts

    Note

    Requires CageFS v.7.4.2-1 and later

    `,23)),s("p",null,[e[116]||(e[116]=t("In addition to ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:a(()=>e[115]||(e[115]=[t("splitted by username mounts")])),_:1}),e[117]||(e[117]=t(", there is an ability to “split” mounts by user’s UID. This feature is useful for systems with non-unique UIDs, i.e. when multiple users have the same UID."))]),e[698]||(e[698]=l(`

    Using splitted by UID mounts is more preferable over splitted by username mounts, because you can mount the same directory for all users with the same UID. Also, splitted by UID mounts work fine with renaming of the users (when username changes but UID remains the same).

    For example if you have a directory structure like the following:

    /data/uids/1000/data.db
    +

    After that each subdirectory of /home/httpd/fcgi-bin will be mounted for appropriate user in CageFS: /home/httpd/fcgi-bin/user1 will be mounted for user1 and /home/httpd/fcgi-bin/user2 will be mounted for user2 .

    Splitted by user’s UID mounts

    Note

    Requires CageFS v.7.4.2-1 and later

    `,23)),s("p",null,[e[116]||(e[116]=t("In addition to ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#split-by-username"},{default:i(()=>e[115]||(e[115]=[t("splitted by username mounts")])),_:1}),e[117]||(e[117]=t(", there is an ability to “split” mounts by user’s UID. This feature is useful for systems with non-unique UIDs, i.e. when multiple users have the same UID."))]),e[685]||(e[685]=l(`

    Using splitted by UID mounts is more preferable over splitted by username mounts, because you can mount the same directory for all users with the same UID. Also, splitted by UID mounts work fine with renaming of the users (when username changes but UID remains the same).

    For example if you have a directory structure like the following:

    /data/uids/1000/data.db
     /data/uids/1001/data.db
     

    Then you can add the following line to the /etc/cagefs/cagefs.mp file:

    */data/uids
     and execute
    @@ -508,7 +508,7 @@ cagefsctl --remount-all
     

    After that each subdirectory of the /data/uids will be mounted for the appropriate user in CageFS. The /data/uids/1000 directory will be mounted for the user with UID 1000 and the /data/uids/1001 directory will be mounted for the user with UID 1001.

    Mounting users home directory inside CageFS

    CageFS 6.1-1 (and later) has improved mounting user’s home directory that is applied for users with home directories like /home/user or /homeN/user (where N = 0,1,..9).

    In such case, earlier versions of CageFS always mount user’s home directory to /home/user and create symlink /homeN -> /home when needed, so user’s home directory can be accessed both via /home/user and /homeN/user . This quirk leads to some rare incompatibilities between CageFS and other software (for example OpenCart), because real path of user’s home directory in CageFS and in real file system can differ.

    New CageFS mounts user’s home directory in a way that its real path in CageFS is always the same as in real file system. Additionally, CageFS searches for symlinks like /homeX -> /homeY and /homeX/user -> /homeY/user in real system and creates such symlinks in user’s CageFS when found.

    This new mounting mode is enabled by default. You can switch to old mounting mode by executing the following commands:

    touch /etc/cagefs/disable.home.dirs.search
     cagefsctl --force-update
     cagefsctl --remount-all
    -

    Note

    New mounting mode will be disabled automatically when "mounting base home directory" mode is enabled (mount_basedir=1 setting in /etc/cagefs/cagefs.base.home.dirs file).

    `,13)),s("h4",be,[e[118]||(e[118]=s("a",{class:"header-anchor",href:"#how-to-hide-directory-inside-mount-point","aria-hidden":"true"},"#",-1)),e[119]||(e[119]=t(" How to hide directory inside mount point ")),n(r,{type:"warning",text:"CageFS 6.4.7-1 +"})]),s("div",fe,[e[122]||(e[122]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[121]||(e[121]=t("For files outside a mount point, use blacklisting, see: ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-files"},{default:a(()=>e[120]||(e[120]=[t("Excluding files")])),_:1})])]),e[699]||(e[699]=l(`

    To hide directories inside a mount point, create a file in the /etc/cagefs/empty.dirs directory (you can use any name) with a list of directories to be hidden (these directories will look like empty for users in CageFS).

    Note

    Please do not edit the supplied config file (/etc/cagefs/empty.dirs/emptied_dirs.default).

    Example

    Let’s take a /var/www directory which contains the following folders: icons and html. To hide the /var/www directory content from users inside CageFS, we will do the following:

    • Create the custom.empty file with a single record: /var/www
    • Place the custom.empty file to the /etc/cagefs/empty.dirs directory
    • Run the cagefsctl --remount-all command

    Now, all users inside CageFS will see the /var/www directory as an empty directory even if there is /var/www/html in the /etc/cagefs/cagefs.mp.

    Base home directory

    If you have a custom setup where home directories are in a special format, like: /home/$USERNAME/data , you can specify it using regular expressions. This is needed by CageFS to create safe home space for end user, where no other users are visible.

    We will create empty: /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in that directory

    To do that, create a file: /etc/cagefs/cagefs.base.home.dirs

    With content like:

    ^/home/
    +

    Note

    New mounting mode will be disabled automatically when "mounting base home directory" mode is enabled (mount_basedir=1 setting in /etc/cagefs/cagefs.base.home.dirs file).

    `,13)),e[686]||(e[686]=s("h4",{id:"how-to-hide-directory-inside-mount-point",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#how-to-hide-directory-inside-mount-point","aria-hidden":"true"},"#"),t(" How to hide directory inside mount point "),s("Badge",{type:"warning",text:"CageFS 6.4.7-1 +"})],-1)),s("div",ve,[e[120]||(e[120]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[119]||(e[119]=t("For files outside a mount point, use blacklisting, see: ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#excluding-files"},{default:i(()=>e[118]||(e[118]=[t("Excluding files")])),_:1})])]),e[687]||(e[687]=l(`

    To hide directories inside a mount point, create a file in the /etc/cagefs/empty.dirs directory (you can use any name) with a list of directories to be hidden (these directories will look like empty for users in CageFS).

    Note

    Please do not edit the supplied config file (/etc/cagefs/empty.dirs/emptied_dirs.default).

    Example

    Let’s take a /var/www directory which contains the following folders: icons and html. To hide the /var/www directory content from users inside CageFS, we will do the following:

    • Create the custom.empty file with a single record: /var/www
    • Place the custom.empty file to the /etc/cagefs/empty.dirs directory
    • Run the cagefsctl --remount-all command

    Now, all users inside CageFS will see the /var/www directory as an empty directory even if there is /var/www/html in the /etc/cagefs/cagefs.mp.

    Base home directory

    If you have a custom setup where home directories are in a special format, like: /home/$USERNAME/data , you can specify it using regular expressions. This is needed by CageFS to create safe home space for end user, where no other users are visible.

    We will create empty: /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in that directory

    To do that, create a file: /etc/cagefs/cagefs.base.home.dirs

    With content like:

    ^/home/
     ^/var/www/users/
     

    If there is no such file, the home directory without last component will be considered as a base dir, like with /home/$USERNAME we would create /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in there

    With /home/$USERNAME/data as a home dir, we would assume that /home/$USERNAME is the base directory, and we would create /var/cagefs/[prefix]/$USERNAME/home/$USERNAME/data and then we would mount /home/$USERNAME/data -- which would cause each user to see empty base directories for other users, exposing user names.

    Sharing home directory structure among users

    When you want to share directory structure among multiple users, you can add following line at the top of the /etc/cagefs/cagefs.base.home.dirs file. This is useful on the systems that support sites with multiple users, with different home directories inside the main 'site' directory.

    mount_basedir=1
     

    For example:

    user1 has home directory /var/www/vhosts/sitename.com/web_users/user1 user2 has home directory /var/www/vhosts/sitename.com/web_users/user2 site admin has home directory /var/www/vhosts/sitename.com

    So, content of /etc/cagefs/cagefs.base.home.dirs should be the following:

    mount_basedir=1
    @@ -584,8 +584,8 @@ cagefsctl --remount-all
         "strict_options": true
       }
     }
    -

    Executing by proxy

    Some software has to run outside CageFS to be able to complete its job. It includes such programs as passwd, sendmail, etc. CageFS provides proxyexec technology to accomplish this goal: you can define any program to run outside CageFS by specifying it in any file located in the /etc/cagefs/ which ends with .proxy.commands. In the examples below we use custom.proxy.commands, but you can use any other name, e.g. mysuperfile.proxy.commands.

    Warning

    Do not edit the existing /etc/cagefs/proxy.commands file as it will be overwritten with the next CageFS update.

    `,68)),s("p",null,[e[124]||(e[124]=t("Also you should create a ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#file-system-templates"},{default:a(()=>e[123]||(e[123]=[t("config file")])),_:1}),e[125]||(e[125]=t(" in ")),e[126]||(e[126]=s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/conf.d/")],-1)),e[127]||(e[127]=t(" and define there a path to the binary or to one of it's parent directories."))]),e[700]||(e[700]=l(`

    Warning

    Binary shouldn't be located in one of the directories specified in /etc/cagefs/cagefs.mp. Binaries from directories in /etc/cagefs/cagefs.mp are always executed inside cagefs.

    The syntax of the /etc/cagefs/[*.]proxy.commands file is as follows:

    ALIAS[:wrapper_name]=[username:]path_to_executable
    -
    `,3)),s("table",null,[e[138]||(e[138]=s("thead",null,[s("tr",null,[s("th",null,"Parameter"),s("th",null,"Description")])],-1)),s("tbody",null,[e[135]||(e[135]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"ALIAS")])]),s("td",null,[t("Any name unique within all "),s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/\\[*.\\]proxy.commands")]),t(" files. Used as an identifier.")])],-1)),s("tr",null,[e[134]||(e[134]=s("td",null,[s("span",{class:"notranslate"},[s("code",null,"wrapper_name")])],-1)),s("td",null,[e[129]||(e[129]=l('Optional field. The name of the wrapper file which is used as a replacement for an executable file (set by path_to_executable) inside CageFS.

    Possible values:
    - a name of a wrapper you place into the /usr/share/cagefs/safeprograms directory;
    - noproceed - a reserved word which means that the wrapper is not needed, e.g. when it is already installed by other ALIAS. Often used for the commands with several ALIAS as in the example below.
    - omit this field - default wrapper cagefs.proxy.program will be used.

    Used in cases when you'd like to give access only to the part of binary functions but it is not possible to do that using ',21)),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:a(()=>e[128]||(e[128]=[t("options filtering")])),_:1}),e[130]||(e[130]=t(".")),e[131]||(e[131]=s("br",null,null,-1)),e[132]||(e[132]=s("strong",null,"Note",-1)),e[133]||(e[133]=t(": wrapper works inside CageFS with user rights and executes “real” scripts using proxy daemon."))])]),e[136]||(e[136]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"path_to_executable")])]),s("td",null,"A path to an executable file that will run via proxyexec.")],-1)),e[137]||(e[137]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"username")])]),s("td",null,[t("Optional field. A name of a user on whose behalf "),s("span",{class:"notranslate"},[s("code",null,"path_to_executable")]),t(" will run in the real system. If "),s("span",{class:"notranslate"},[s("code",null,"username")]),t(" is not specified, then "),s("span",{class:"notranslate"},[s("code",null,"path_to_executable")]),t(" will run on behalf of the same user who is inside CageFS.")])],-1))])]),e[701]||(e[701]=l(`

    Once the program is defined, run this command to populate the skeleton:

    cagefsctl --force-update
    +

    Executing by proxy

    Some software has to run outside CageFS to be able to complete its job. It includes such programs as passwd, sendmail, etc. CageFS provides proxyexec technology to accomplish this goal: you can define any program to run outside CageFS by specifying it in any file located in the /etc/cagefs/ which ends with .proxy.commands. In the examples below we use custom.proxy.commands, but you can use any other name, e.g. mysuperfile.proxy.commands.

    Warning

    Do not edit the existing /etc/cagefs/proxy.commands file as it will be overwritten with the next CageFS update.

    `,68)),s("p",null,[e[122]||(e[122]=t("Also you should create a ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#file-system-templates"},{default:i(()=>e[121]||(e[121]=[t("config file")])),_:1}),e[123]||(e[123]=t(" in ")),e[124]||(e[124]=s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/conf.d/")],-1)),e[125]||(e[125]=t(" and define there a path to the binary or to one of it's parent directories."))]),e[688]||(e[688]=l(`

    Warning

    Binary shouldn't be located in one of the directories specified in /etc/cagefs/cagefs.mp. Binaries from directories in /etc/cagefs/cagefs.mp are always executed inside cagefs.

    The syntax of the /etc/cagefs/[*.]proxy.commands file is as follows:

    ALIAS[:wrapper_name]=[username:]path_to_executable
    +
    `,3)),s("table",null,[e[136]||(e[136]=s("thead",null,[s("tr",null,[s("th",null,"Parameter"),s("th",null,"Description")])],-1)),s("tbody",null,[e[133]||(e[133]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"ALIAS")])]),s("td",null,[t("Any name unique within all "),s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/\\[*.\\]proxy.commands")]),t(" files. Used as an identifier.")])],-1)),s("tr",null,[e[132]||(e[132]=s("td",null,[s("span",{class:"notranslate"},[s("code",null,"wrapper_name")])],-1)),s("td",null,[e[127]||(e[127]=l('Optional field. The name of the wrapper file which is used as a replacement for an executable file (set by path_to_executable) inside CageFS.

    Possible values:
    - a name of a wrapper you place into the /usr/share/cagefs/safeprograms directory;
    - noproceed - a reserved word which means that the wrapper is not needed, e.g. when it is already installed by other ALIAS. Often used for the commands with several ALIAS as in the example below.
    - omit this field - default wrapper cagefs.proxy.program will be used.

    Used in cases when you'd like to give access only to the part of binary functions but it is not possible to do that using ',21)),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:i(()=>e[126]||(e[126]=[t("options filtering")])),_:1}),e[128]||(e[128]=t(".")),e[129]||(e[129]=s("br",null,null,-1)),e[130]||(e[130]=s("strong",null,"Note",-1)),e[131]||(e[131]=t(": wrapper works inside CageFS with user rights and executes “real” scripts using proxy daemon."))])]),e[134]||(e[134]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"path_to_executable")])]),s("td",null,"A path to an executable file that will run via proxyexec.")],-1)),e[135]||(e[135]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"username")])]),s("td",null,[t("Optional field. A name of a user on whose behalf "),s("span",{class:"notranslate"},[s("code",null,"path_to_executable")]),t(" will run in the real system. If "),s("span",{class:"notranslate"},[s("code",null,"username")]),t(" is not specified, then "),s("span",{class:"notranslate"},[s("code",null,"path_to_executable")]),t(" will run on behalf of the same user who is inside CageFS.")])],-1))])]),e[689]||(e[689]=l(`

    Once the program is defined, run this command to populate the skeleton:

    cagefsctl --force-update
     

    Users with duplicate UIDs

    Sometimes hosters may have users with non-unique UIDs. Thus, proxyexec may traverse users' directories to find a specific one. That behavior turns into inappropriate if the user's directory is not cached locally (for example LDAP is used).

    To turn this feature off, run:

    touch /etc/cagefs/proxy.disable.duid
     

    Or to activate it back, run:

    rm /etc/cagefs/proxy.disable.duid
     

    Examples

    Let's have a script that must do some stuff outside CageFS and return a result to a user. Let's name it superbinary and place it into the /my/scripts/ directory.

    In the examples below, we will use a small script that:

    • checks if it works inside or outside of CageFS
    • prints a number of users in the /etc/passwd file

    We use the /etc/passwd file because it is truncated inside the cage by default and we can easily see the difference between CageFS and the “real” system by just counting lines in it.

    cat /opt/scripts/superbinary  
    @@ -667,7 +667,7 @@ I am running as: root
     Number or records in /etc/group: 76
     PROXYEXEC_UID=1226
     PROXYEXEC_GID=1227
    -
    `,54)),s("div",xe,[e[144]||(e[144]=s("p",{class:"custom-block-title"},"Notes and warnings",-1)),s("ol",null,[e[142]||(e[142]=s("li",null,[t("Make sure that a directory with your script is not listed in the "),s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/cagefs.mp")]),t(" (is not mounted inside the cage). Otherwise, the proxyexec will not work because CageFS will not be able to replace your script with a special wrapper inside the cage.")],-1)),s("li",null,[e[140]||(e[140]=t("Use this feature with caution because it gives users the ability to execute specified commands outside CageFS. SUID commands are extremely dangerous because they are executed not as a user, but as an owner of the file (typically root). You should give users the ability to execute safe commands only. These commands should not have known vulnerabilities. You should check that users cannot use these commands to get sensitive information on a server. You can disable specific dangerous options of programs executed via proxyexec using ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:a(()=>e[139]||(e[139]=[t("filtering options")])),_:1}),e[141]||(e[141]=t("."))]),e[143]||(e[143]=s("li",null,[t("In cPanel, all the scripts located in the "),s("span",{class:"notranslate"},[s("code",null,"/usr/local/cpanel/cgi-sys/")]),t(", that user might need to execute, should be added to the custom "),s("span",{class:"notranslate"},[s("code",null,"*.proxy.commands")]),t(" file.")],-1))])]),e[702]||(e[702]=l(`

    Custom /etc files per customer

    [4.0-5 and later]

    To create a custom file in /etc directory for end user, create a directory:
    /etc/cagefs/custom.etc/[username]

    Put all custom files, and sub-directories into that direcotry.

    For example, if you want to create custom /etc/hosts file for USER1 , create a directory:
    /etc/cagefs/custom.etc/USER1

    Inside that directory, create a hosts file, with the content for that user.

    After that execute:

    cagefsctl --update-etc USER1
    +
    `,54)),s("div",he,[e[142]||(e[142]=s("p",{class:"custom-block-title"},"Notes and warnings",-1)),s("ol",null,[e[140]||(e[140]=s("li",null,[t("Make sure that a directory with your script is not listed in the "),s("span",{class:"notranslate"},[s("code",null,"/etc/cagefs/cagefs.mp")]),t(" (is not mounted inside the cage). Otherwise, the proxyexec will not work because CageFS will not be able to replace your script with a special wrapper inside the cage.")],-1)),s("li",null,[e[138]||(e[138]=t("Use this feature with caution because it gives users the ability to execute specified commands outside CageFS. SUID commands are extremely dangerous because they are executed not as a user, but as an owner of the file (typically root). You should give users the ability to execute safe commands only. These commands should not have known vulnerabilities. You should check that users cannot use these commands to get sensitive information on a server. You can disable specific dangerous options of programs executed via proxyexec using ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec"},{default:i(()=>e[137]||(e[137]=[t("filtering options")])),_:1}),e[139]||(e[139]=t("."))]),e[141]||(e[141]=s("li",null,[t("In cPanel, all the scripts located in the "),s("span",{class:"notranslate"},[s("code",null,"/usr/local/cpanel/cgi-sys/")]),t(", that user might need to execute, should be added to the custom "),s("span",{class:"notranslate"},[s("code",null,"*.proxy.commands")]),t(" file.")],-1))])]),e[690]||(e[690]=l(`

    Custom /etc files per customer

    [4.0-5 and later]

    To create a custom file in /etc directory for end user, create a directory:
    /etc/cagefs/custom.etc/[username]

    Put all custom files, and sub-directories into that direcotry.

    For example, if you want to create custom /etc/hosts file for USER1 , create a directory:
    /etc/cagefs/custom.etc/USER1

    Inside that directory, create a hosts file, with the content for that user.

    After that execute:

    cagefsctl --update-etc USER1
     

    If you are making changes for multiple users, you can run:

    cagefsctl --update-etc
     

    To remove a custom file, remove it from /etc/cagefs/custom.etc/[USER] directory, and re-run:

    cagefsctl --update-etc
     

    Moving cagefs-skeleton directory

    Sometimes you might need to move cagefs-skeleton from /usr/share to another partition.

    There are two ways:

    1. If /usr/share/cagefs-skeleton is not created yet ( cagefsctl --init wasn't executed), then execute:
    mkdir /home/cagefs-skeleton 
    @@ -708,7 +708,7 @@ cagefsctl --remount-all
     cagefsctl --remount-all (cagefsctl --remount <user>)
     

    To disable it, run the following commands:

    rm -f /etc/cagefs/fail.on.error
     cagefsctl --remount-all (cagefsctl --remount <user>)
    -

    The message “Act like CageFS is disabled” in the /var/log/messages will be displayed regardless the file /etc/cagefs/fail.on.error is available or not.

    Integration with control panels

    `,116)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cpanel"},{default:a(()=>e[145]||(e[145]=[t("cPanel")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#plesk"},{default:a(()=>e[146]||(e[146]=[t("Plesk")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#ispmanager"},{default:a(()=>e[147]||(e[147]=[t("ISPManager")])),_:1})])]),e[703]||(e[703]=s("p",null,"CageFS comes with a plugin for various control panels.",-1)),e[704]||(e[704]=s("p",null,"The plugin allows to:",-1)),s("ul",null,[e[151]||(e[151]=s("li",null,"Initialize CageFS;",-1)),s("li",null,[e[149]||(e[149]=t("Select ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-users"},{default:a(()=>e[148]||(e[148]=[t("mode of operation")])),_:1}),e[150]||(e[150]=t(";"))]),e[152]||(e[152]=s("li",null,"See and modify the list of enabled/disabled users;",-1)),e[153]||(e[153]=s("li",null,"Update CageFS skeleton.",-1))]),e[705]||(e[705]=l('

    cPanel

    CageFS Plugin

    CageFS plugin for cPanel is located in Plugins section of WHM and called CageFS User Manager .

    Note

    Take a note that the configuration of CageFS for users is located at the Users tab in the main menu of LVE Manager and the global CageFS settings (Toggle, update skeleton and others) are located at the Options tab in the main menu of LVE Manager inside the section "CageFS".

    It allows to initialize CageFS, select users CageFS will be enabled for, as well as update CageFS skeleton.

    To enable CageFS for a proper user (users), in CageFS User Manager choose a user from the list on the right ( Disabled users) and click Toggle . The user will move to the list on the left ( Enabled users).

    To disable a user (users), choose a user from the list on the left ( Enabled users) and click Disable CageFS . The user will move to the list on the right ( Disabled users).

    To update CageFS skeleton, click Update CageFS Skeleton .

    CageFS inbuilt in Cloudlinux Manager

    To enable or disable CageFS for a proper user (users), in Cloudlinux Manager , go to the Users tab and use the Toggle next to the chosen user(s) from the list under the CageFS column.

    To update CageFS skeleton, go to Cloudlinux Manager > Options > CageFS and click on the Update button next to CageFS Skeleton:

    Plesk

    CageFS is an option inbuilt in Cloudlinux Manager that allows initializing and updating CageFS template, as well as managing users and mode of operation for CageFS.

    To enable or disable CageFS for a proper user (users), in Cloudlinux Manager , go to the Users tab and use the Toggle next to the chosen user(s) from the list under the CageFS column.

    To update CageFS skeleton, go to Cloudlinux Manager > Options > CageFS and click on the Update button next to CageFS Skeleton:

    ISPManager

    CageFS comes with plugin for ISP Manager to enable/disable CageFS on per user base. In edit user section chose Permission tab. Mark CageFS User Mode checkbox and click OK to apply.

    Or you can manage global CageFS settings via CageFS menu

    ',26)),s("p",null,[e[155]||(e[155]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:a(()=>e[154]||(e[154]=[t("CageFS CLI tools")])),_:1}),e[156]||(e[156]=t("."))]),e[706]||(e[706]=l('

    MySQL Governor

    General information and requirements

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    MySQL Governor is software to monitor and restrict MySQL usage in shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread.

    MySQL Governor has two active modes of operations:

    • off - In this mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage.
    • abusers - In this mode, once user goes over the limits specified in the MySQL Governor, all customer's queries will execute inside that user's LVE.
    ',6)),s("p",null,[e[158]||(e[158]=t("More details of the governor operation modes are described in the ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:a(()=>e[157]||(e[157]=[t("Modes of operation")])),_:1}),e[159]||(e[159]=t(" section"))]),e[707]||(e[707]=l('

    MySQL Governor allows to restrict customers who use too much resources. It supports following limits:

    CPU % CPU speed relative to one core. 150% would mean one and a half cores
    READ bytesbytes read. Cached reads are not counted, only those that were actually read from disk will be counted
    WRITE bytesbytes written. Cached writes are not counted, only once data is written to disk, it is counted
    ',2)),s("p",null,[e[161]||(e[161]=t("You can set different limits for different periods: current, short, med, long. By default those periods are defined as 1 second, 5 seconds, 1 minute and 5 minutes. They can be re-defined using ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-and-operation"},{default:a(()=>e[160]||(e[160]=[t("configuration file")])),_:1}),e[162]||(e[162]=t(". The idea is to use larger acceptable values for shorter periods. Like you could allow a customer to use two cores (200%) for one second, but only 1 core (on average) for 1 minute, and only 70% within 5 minutes. That would make sure that customer can burst for short periods of time."))]),e[708]||(e[708]=l('

    Customers will also be limited to a finite number of concurrent connections, this number is 30 by default and can be changed. This is done so they wouldn't use up all the MySQL connections to the server. MySQL Governor can also kill off slow SELECT queries.

    MySQL Governor limits interaction with LVE limits

    How is interaction between MySQL Governor and LVE organized?

    The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers.

    Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container.

    This is how common server resources can be managed.

    Why the СPU/IO charts are different for database and LVE usage?

    SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts:

    Blue chart (database):

    This is the user’s real IO Database usage which was calculated by MySQL Governor.

    Green chart (LVE):

    This is the user’s IO Database usage which was calculated by lve-stats.

    Also, for different types of database load (for example in case, there is a huge amount of short requests), CPU usage charts for LVE and database can be different.

    Take a look on this chart:

    Blue (database) CPU usage:

    It is calculated by MYSQL Governor and the value is identical with top/htop values.

    Green (LVE) CPU usage:

    It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time.

    For what purpose are the IO limits of MySQL Governor used?

    MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded.

    How exactly does IO limiting work for MySQL/MariaDB requests?

    There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly.

    Take a look at the next chart. The I/O load is synchronous with the CPU load.

    Installation and update

    ',27)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation"},{default:a(()=>e[163]||(e[163]=[t("Installation")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#upgrading-database-server"},{default:a(()=>e[164]||(e[164]=[t("Upgrading database server")])),_:1})])]),e[709]||(e[709]=l(`

    Installation

    IMPORTANT

    Please note that MariaDB 10.4 release isn’t supported by cPanel, thus you can’t install this version with MySQL Governor + cPanel. More details are available here: https://features.cpanel.net/topic/maria-10-4-support.

    IMPORTANT

    Please make full database backup (including system tables) before you upgrade MySQL or switch to MariaDB. This action will prevent data loss in case if something goes wrong.

    MySQL Governor is compatible only with MySQL 5.x, 8.0; MariaDB & Percona Server 5.6.

    To install MySQL Governor on your server install governor-mysql package at first:

    yum remove db-governor db-governor-mysql  # you can ignore errors if you don't have those packages installed
    +

    The message “Act like CageFS is disabled” in the /var/log/messages will be displayed regardless the file /etc/cagefs/fail.on.error is available or not.

    Integration with control panels

    `,116)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cpanel"},{default:i(()=>e[143]||(e[143]=[t("cPanel")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#plesk"},{default:i(()=>e[144]||(e[144]=[t("Plesk")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#ispmanager"},{default:i(()=>e[145]||(e[145]=[t("ISPManager")])),_:1})])]),e[691]||(e[691]=s("p",null,"CageFS comes with a plugin for various control panels.",-1)),e[692]||(e[692]=s("p",null,"The plugin allows to:",-1)),s("ul",null,[e[149]||(e[149]=s("li",null,"Initialize CageFS;",-1)),s("li",null,[e[147]||(e[147]=t("Select ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-users"},{default:i(()=>e[146]||(e[146]=[t("mode of operation")])),_:1}),e[148]||(e[148]=t(";"))]),e[150]||(e[150]=s("li",null,"See and modify the list of enabled/disabled users;",-1)),e[151]||(e[151]=s("li",null,"Update CageFS skeleton.",-1))]),e[693]||(e[693]=l('

    cPanel

    CageFS Plugin

    CageFS plugin for cPanel is located in Plugins section of WHM and called CageFS User Manager .

    Note

    Take a note that the configuration of CageFS for users is located at the Users tab in the main menu of LVE Manager and the global CageFS settings (Toggle, update skeleton and others) are located at the Options tab in the main menu of LVE Manager inside the section "CageFS".

    It allows to initialize CageFS, select users CageFS will be enabled for, as well as update CageFS skeleton.

    To enable CageFS for a proper user (users), in CageFS User Manager choose a user from the list on the right ( Disabled users) and click Toggle . The user will move to the list on the left ( Enabled users).

    To disable a user (users), choose a user from the list on the left ( Enabled users) and click Disable CageFS . The user will move to the list on the right ( Disabled users).

    To update CageFS skeleton, click Update CageFS Skeleton .

    CageFS inbuilt in Cloudlinux Manager

    To enable or disable CageFS for a proper user (users), in Cloudlinux Manager , go to the Users tab and use the Toggle next to the chosen user(s) from the list under the CageFS column.

    To update CageFS skeleton, go to Cloudlinux Manager > Options > CageFS and click on the Update button next to CageFS Skeleton:

    Plesk

    CageFS is an option inbuilt in Cloudlinux Manager that allows initializing and updating CageFS template, as well as managing users and mode of operation for CageFS.

    To enable or disable CageFS for a proper user (users), in Cloudlinux Manager , go to the Users tab and use the Toggle next to the chosen user(s) from the list under the CageFS column.

    To update CageFS skeleton, go to Cloudlinux Manager > Options > CageFS and click on the Update button next to CageFS Skeleton:

    ISPManager

    CageFS comes with plugin for ISP Manager to enable/disable CageFS on per user base. In edit user section chose Permission tab. Mark CageFS User Mode checkbox and click OK to apply.

    Or you can manage global CageFS settings via CageFS menu

    ',26)),s("p",null,[e[153]||(e[153]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cagefs"},{default:i(()=>e[152]||(e[152]=[t("CageFS CLI tools")])),_:1}),e[154]||(e[154]=t("."))]),e[694]||(e[694]=l('

    MySQL Governor

    General information and requirements

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    MySQL Governor is software to monitor and restrict MySQL usage in shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread.

    MySQL Governor has two active modes of operations:

    • off - In this mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage.
    • abusers - In this mode, once user goes over the limits specified in the MySQL Governor, all customer's queries will execute inside that user's LVE.
    ',6)),s("p",null,[e[156]||(e[156]=t("More details of the governor operation modes are described in the ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:i(()=>e[155]||(e[155]=[t("Modes of operation")])),_:1}),e[157]||(e[157]=t(" section"))]),e[695]||(e[695]=l('

    MySQL Governor allows to restrict customers who use too much resources. It supports following limits:

    CPU % CPU speed relative to one core. 150% would mean one and a half cores
    READ bytesbytes read. Cached reads are not counted, only those that were actually read from disk will be counted
    WRITE bytesbytes written. Cached writes are not counted, only once data is written to disk, it is counted
    ',2)),s("p",null,[e[159]||(e[159]=t("You can set different limits for different periods: current, short, med, long. By default those periods are defined as 1 second, 5 seconds, 1 minute and 5 minutes. They can be re-defined using ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-and-operation"},{default:i(()=>e[158]||(e[158]=[t("configuration file")])),_:1}),e[160]||(e[160]=t(". The idea is to use larger acceptable values for shorter periods. Like you could allow a customer to use two cores (200%) for one second, but only 1 core (on average) for 1 minute, and only 70% within 5 minutes. That would make sure that customer can burst for short periods of time."))]),e[696]||(e[696]=l('

    Customers will also be limited to a finite number of concurrent connections, this number is 30 by default and can be changed. This is done so they wouldn't use up all the MySQL connections to the server. MySQL Governor can also kill off slow SELECT queries.

    MySQL Governor limits interaction with LVE limits

    How is interaction between MySQL Governor and LVE organized?

    The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers.

    Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container.

    This is how common server resources can be managed.

    Why the СPU/IO charts are different for database and LVE usage?

    SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts:

    Blue chart (database):

    This is the user’s real IO Database usage which was calculated by MySQL Governor.

    Green chart (LVE):

    This is the user’s IO Database usage which was calculated by lve-stats.

    Also, for different types of database load (for example in case, there is a huge amount of short requests), CPU usage charts for LVE and database can be different.

    Take a look on this chart:

    Blue (database) CPU usage:

    It is calculated by MYSQL Governor and the value is identical with top/htop values.

    Green (LVE) CPU usage:

    It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time.

    For what purpose are the IO limits of MySQL Governor used?

    MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded.

    How exactly does IO limiting work for MySQL/MariaDB requests?

    There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly.

    Take a look at the next chart. The I/O load is synchronous with the CPU load.

    Installation and update

    ',27)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation"},{default:i(()=>e[161]||(e[161]=[t("Installation")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#upgrading-database-server"},{default:i(()=>e[162]||(e[162]=[t("Upgrading database server")])),_:1})])]),e[697]||(e[697]=l(`

    Installation

    IMPORTANT

    Please note that MariaDB 10.4 release isn’t supported by cPanel, thus you can’t install this version with MySQL Governor + cPanel. More details are available here: https://features.cpanel.net/topic/maria-10-4-support.

    IMPORTANT

    Please make full database backup (including system tables) before you upgrade MySQL or switch to MariaDB. This action will prevent data loss in case if something goes wrong.

    MySQL Governor is compatible only with MySQL 5.x, 8.0; MariaDB & Percona Server 5.6.

    To install MySQL Governor on your server install governor-mysql package at first:

    yum remove db-governor db-governor-mysql  # you can ignore errors if you don't have those packages installed
     yum install governor-mysql
     

    Then configure MySQL Governor properly.

    The installation is currently supported only on cPanel, Plesk, DirectAdmin, ISPmanager, InterWorx , as well as on servers without control panel.

    If you are installing CloudLinux OS on a server running MySQL already, set your current MySQL version before calling installation script:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --mysql-version=mysqlXX
     /usr/share/lve/dbgovernor/mysqlgovernor.py --install
    @@ -720,10 +720,10 @@ yum install governor-mysql
     /usr/share/lve/dbgovernor/mysqlgovernor.py --install
     

    MYSQL_VERSION could be chosen from the list of versions currently supported by MySQL Governor :

    mysql51MySQL v5.1
    mysql55MySQL v5.5
    mysql56MySQL v5.6
    mysql57MySQL v5.7
    mysql80MySQL v8.0 (requires MySQL Governor 1.2-37+)
    mariadb55MariaDB v5.5
    mariadb100MariaDB v10.0
    mariadb101MariaDB v10.1
    mariadb102MariaDB v 10.2
    mariadb103MariaDB v 10.3 [requires MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+]
    mariadb104MariaDB v 10.4 [requires MySQL Governor 1.2-53+]
    mariadb105MariaDB v 10.5 [requires MySQL Governor 1.2-62+]
    mariadb106MariaDB v 10.6 [requires MySQL Governor 1.2-76+]
    mariadb1011MariaDB v 10.11 [requires MySQL Governor 1.2-103+]
    percona56 Percona Server v 5.6

    Generally, stable and beta channels contain different version of MySQL packages - beta contains newer version than stable or the same one. If you would like to install beta packages, use --install-beta flag instead of --install when calling installation script:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --install-beta
     

    Starting with MySQL Governor version 1.2 when installing MySQL/MariaDB MySQL Governor asks for a confirmation of a database version to be installed. To avoid such behavior for the automatic installations, please use --yes flag.

    For example:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --install --yes
    -

    Please note that restore of previous packages in case of failed installation would also be confirmed with --yes flag.

    IMPORTANT

    Use --yes flag on your own risk, because it confirms installation in any case - even in case if there are troubles during installation (for example, network problems causing incomplete download of packages), everything would be confirmed.

    `,31)),s("div",ye,[e[167]||(e[167]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[166]||(e[166]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:a(()=>e[165]||(e[165]=[t("MySQL Governor CLI")])),_:1})])]),e[710]||(e[710]=l(`

    Upgrading database server

    Important

    Upgrade from MySQL 8 to MariaDB 10.x isn't supported due to compatibility issues between these database server versions and will break your database server completely. You can find more information about the compatibility issues here

    Warning

    Please note that DB Governor is capable of upgrading your database to a newer version, including sequential upgrades, but we make no guarantee that such upgrades do not affect the operation of the database, its components, control panel operation and other functions of database. Always create a backup copy of your data.

    In order to change MySQL version you should run the following commands:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --mysql-version=MYSQL_VERSION
    +

    Please note that restore of previous packages in case of failed installation would also be confirmed with --yes flag.

    IMPORTANT

    Use --yes flag on your own risk, because it confirms installation in any case - even in case if there are troubles during installation (for example, network problems causing incomplete download of packages), everything would be confirmed.

    `,31)),s("div",be,[e[165]||(e[165]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[164]||(e[164]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:i(()=>e[163]||(e[163]=[t("MySQL Governor CLI")])),_:1})])]),e[698]||(e[698]=l(`

    Upgrading database server

    Important

    Upgrade from MySQL 8 to MariaDB 10.x isn't supported due to compatibility issues between these database server versions and will break your database server completely. You can find more information about the compatibility issues here

    Warning

    Please note that DB Governor is capable of upgrading your database to a newer version, including sequential upgrades, but we make no guarantee that such upgrades do not affect the operation of the database, its components, control panel operation and other functions of database. Always create a backup copy of your data.

    In order to change MySQL version you should run the following commands:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --mysql-version=MYSQL_VERSION
     /usr/share/lve/dbgovernor/mysqlgovernor.py --install
     

    where MYSQL_VERSION is the target database server version that should be replaced with the value from the table above.

    IMPORTANT

    Make sure you have full database backup (including system tables) before you switch. This action will prevent data loss in case if something goes wrong.

    Uninstalling

    To remove MySQL Governor:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --delete
    -

    The script will install original MySQL server, and remove MySQL Governor.

    Configuration and operation

    `,12)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-2"},{default:a(()=>e[168]||(e[168]=[t("Configuration")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:a(()=>e[169]||(e[169]=[t("Modes of operation")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor-limits"},{default:a(()=>e[170]||(e[170]=[t("MySQL Governor limits")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#starting-and-stopping"},{default:a(()=>e[171]||(e[171]=[t("Starting and stopping")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:a(()=>e[172]||(e[172]=[t("Mapping a user to a database")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#log-files"},{default:a(()=>e[173]||(e[173]=[t("Log files")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#change-mysql-version"},{default:a(()=>e[174]||(e[174]=[t("Change MySQL version")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#privatedevices-mode-support"},{default:a(()=>e[175]||(e[175]=[t("PrivateDevices mode support")])),_:1})])]),e[711]||(e[711]=l('

    Configuration

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    MySQL Governor configuration is located in /etc/container/mysql-governor.xml

    ',3)),s("p",null,[e[177]||(e[177]=t("It is best to modify it using ")),s("span",we,[n(i,{to:"/cloudlinuxos/command-line_tools/#dbctl"},{default:a(()=>e[176]||(e[176]=[t("dbctl")])),_:1})]),e[178]||(e[178]=t(" tool."))]),e[712]||(e[712]=l(`

    Once configuration file is updated, please, restart the MySQL Governor using:

    service db_governor restart
    +

    The script will install original MySQL server, and remove MySQL Governor.

    Configuration and operation

    `,12)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-2"},{default:i(()=>e[166]||(e[166]=[t("Configuration")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#modes-of-operation"},{default:i(()=>e[167]||(e[167]=[t("Modes of operation")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mysql-governor-limits"},{default:i(()=>e[168]||(e[168]=[t("MySQL Governor limits")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#starting-and-stopping"},{default:i(()=>e[169]||(e[169]=[t("Starting and stopping")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:i(()=>e[170]||(e[170]=[t("Mapping a user to a database")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#log-files"},{default:i(()=>e[171]||(e[171]=[t("Log files")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#change-mysql-version"},{default:i(()=>e[172]||(e[172]=[t("Change MySQL version")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#privatedevices-mode-support"},{default:i(()=>e[173]||(e[173]=[t("PrivateDevices mode support")])),_:1})])]),e[699]||(e[699]=l('

    Configuration

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    MySQL Governor configuration is located in /etc/container/mysql-governor.xml

    ',3)),s("p",null,[e[175]||(e[175]=t("It is best to modify it using ")),s("span",fe,[a(n,{to:"/cloudlinuxos/command-line_tools/#dbctl"},{default:i(()=>e[174]||(e[174]=[t("dbctl")])),_:1})]),e[176]||(e[176]=t(" tool."))]),e[700]||(e[700]=l(`

    Once configuration file is updated, please, restart the MySQL Governor using:

    service db_governor restart
     
    Example configuration:
    <governor> 
     
     <!--  'off' - do not throttle anything, monitoring only -->
    @@ -806,7 +806,7 @@ user_max_connections="30"/>
     <debug_user name="xxx"/> 
     
     </governor>
    -
    `,4)),s("p",null,[e[180]||(e[180]=t("These values can also be set using ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-config"},{default:a(()=>e[179]||(e[179]=[t("cloudlinux-config")])),_:1}),e[181]||(e[181]=t(" CLI utility"))]),e[713]||(e[713]=l('

    Modes of operation

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    Note

    MySQL Governor 1.0+

    Active modes

    ',4)),s("ul",null,[s("li",null,[e[184]||(e[184]=s("strong",null,"abusers - Use LVE for a user to restrict queries (default mode)",-1)),e[185]||(e[185]=t(": In that mode, once user goes over the limits specified in the MySQL Governor , all customer's queries will execute inside that user's LVE. We believe this mode will help with the condition when the site is still fast, but MySQL is slow (restricted) for that user. If someone abuses MySQL, it will cause queries to share LVE with PHP processes, and PHP processes will also be throttled, causing fewer new queries being sent to MySQL. ")),s("em",null,[e[183]||(e[183]=t("Requires ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:a(()=>e[182]||(e[182]=[s("code",null,"dbuser-map",-1),t(" file")])),_:1})]),e[186]||(e[186]=t("."))]),e[187]||(e[187]=s("li",null,[s("strong",null,"off - Monitor Only"),t(": In that mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage to see the abusers at any given moment in time (and historically). This mode is good when you are just starting and want to see what is going on.")],-1))]),e[714]||(e[714]=s("hr",null,null,-1)),e[715]||(e[715]=s("p",null,[s("strong",null,"Deprecated modes")],-1)),s("ul",null,[s("li",null,[e[190]||(e[190]=s("strong",null,"all - Always run queries inside user's LVE (will be deprecated on September 1, 2021)",-1)),e[191]||(e[191]=t(": This way there is no need for separate limits for MySQL. Depending on overhead we see in the future, we might decide to use it as a primary way of operating MySQL Governor . The benefit of this approach is that limits are applied to both PHP & MySQL at the same time, all the time, preventing any spikes whatsoever. ")),s("em",null,[e[189]||(e[189]=t("Requires ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:a(()=>e[188]||(e[188]=[s("code",null,"dbuser-map",-1),t(" file")])),_:1})]),e[192]||(e[192]=t("."))]),e[193]||(e[193]=s("li",null,[s("strong",null,"single - Single restricted's LVE for all restricted customers (deprecated)"),t(": In that mode once customer reaches the limits specified in the MySQL Governor , all customer's queries will be running inside LVE with id 3. This means that when you have 5 customers restricted at the same time, all queries for all those 5 customers will be sharing the same LVE. The larger the number of restricted customers - the less resources per restricted customer will be available.")],-1)),e[194]||(e[194]=s("li",null,[s("strong",null,"on"),t(" - Synonym for "),s("strong",null,"single"),t(" mode")],-1))]),e[716]||(e[716]=l('

    Note

    After the all mode will be deprecated on September 1, 2021:

    • the users, having it, will continue to work with this mode;
    • all new installation will not have the all mode;
    • moving to the all mode will be forbidden.

    If the dbuser-map file is absent on the server, the abusers mode emulates the single.

    With the single and abusers mode, once user is restricted, the queries for that user will be limited as long as user is using more than limits specified. After a minute that user is using less, we will unrestricted that user.

    ',3)),s("p",null,[e[197]||(e[197]=t("You can specify modes of operation using ")),n(i,{to:"/cloudlinuxos/command-line_tools/#dbctl"},{default:a(()=>e[195]||(e[195]=[t("dbctl")])),_:1}),e[198]||(e[198]=t(" or by changing ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-3"},{default:a(()=>e[196]||(e[196]=[t("configuration file")])),_:1}),e[199]||(e[199]=t("."))]),e[717]||(e[717]=l(`

    MySQL Governor limits

    MySQL Governor limit setting recommendations

    Note

    Please note that these recommendations on setting limits for MySQL Governor are general. The exact values of the limits for the effective work of MySQL and the site as a whole depend on many factors.

    Here they are:

    • the load of the virtual server with incoming requests
    • the database size
    • SQL queries efficiency
    • absolute values of the LVE limits

    MySQL Governor allows setting the burstable limits for accounts. To provide that possibility, four levels of limits are defined: current, short, middle, and long. Correctly set limits can give users more CPU without having a bottleneck on MySQL.

    General principles of choosing the limits:

    • current and short can be more than the LVE limit and should not be less
    • setting the current and short limits more than the LVE limit prevents bottlenecks in SQL request processing
    • middle limit can be more or less that the LVE limit
    • long on the contrary, should not be more than the LVE limit
    • setting the middle and long limits less than the LVE limit prevents abuse of other processes in the account (Apache, PHP) by MySQL

    Example of choosing MySQL Governor limits

    • With the default LVE SPEED limit is 100, the possible values of the MySQL Governor CPU limits can be 250/150/110/90. I.e., we admit the short-term exceeding of the limits for processing SQL requests.
    • If you face spike CPU consumption with these limits, it is recommended to reduce the excess of the current and short limits over the LVE limit. For example, to the values 150/110/100/90.
    • If the average level of CPU consumption is too high, then it is recommended to reduce the middle and long limits, too. For example, to the values 150/100/80/50.
    • Then MySQL processes will fall into LVE and be limited by LVE limits more often.
    • The same clues are applicable to the IO limits – the current and short IO limits for MySQL Governor can exceed IO LVE limits, but the middle and long cannot.

    Starting and stopping

    To start:

    service db_governor start
    +
    `,4)),s("p",null,[e[178]||(e[178]=t("These values can also be set using ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-config"},{default:i(()=>e[177]||(e[177]=[t("cloudlinux-config")])),_:1}),e[179]||(e[179]=t(" CLI utility"))]),e[701]||(e[701]=l('

    Modes of operation

    Warning

    The "All" mode will be deprecated starting from September 1, 2021. You can read more here.

    Note

    MySQL Governor 1.0+

    Active modes

    ',4)),s("ul",null,[s("li",null,[e[182]||(e[182]=s("strong",null,"abusers - Use LVE for a user to restrict queries (default mode)",-1)),e[183]||(e[183]=t(": In that mode, once user goes over the limits specified in the MySQL Governor , all customer's queries will execute inside that user's LVE. We believe this mode will help with the condition when the site is still fast, but MySQL is slow (restricted) for that user. If someone abuses MySQL, it will cause queries to share LVE with PHP processes, and PHP processes will also be throttled, causing fewer new queries being sent to MySQL. ")),s("em",null,[e[181]||(e[181]=t("Requires ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:i(()=>e[180]||(e[180]=[s("code",null,"dbuser-map",-1),t(" file")])),_:1})]),e[184]||(e[184]=t("."))]),e[185]||(e[185]=s("li",null,[s("strong",null,"off - Monitor Only"),t(": In that mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage to see the abusers at any given moment in time (and historically). This mode is good when you are just starting and want to see what is going on.")],-1))]),e[702]||(e[702]=s("hr",null,null,-1)),e[703]||(e[703]=s("p",null,[s("strong",null,"Deprecated modes")],-1)),s("ul",null,[s("li",null,[e[188]||(e[188]=s("strong",null,"all - Always run queries inside user's LVE (will be deprecated on September 1, 2021)",-1)),e[189]||(e[189]=t(": This way there is no need for separate limits for MySQL. Depending on overhead we see in the future, we might decide to use it as a primary way of operating MySQL Governor . The benefit of this approach is that limits are applied to both PHP & MySQL at the same time, all the time, preventing any spikes whatsoever. ")),s("em",null,[e[187]||(e[187]=t("Requires ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mapping-a-user-to-a-database"},{default:i(()=>e[186]||(e[186]=[s("code",null,"dbuser-map",-1),t(" file")])),_:1})]),e[190]||(e[190]=t("."))]),e[191]||(e[191]=s("li",null,[s("strong",null,"single - Single restricted's LVE for all restricted customers (deprecated)"),t(": In that mode once customer reaches the limits specified in the MySQL Governor , all customer's queries will be running inside LVE with id 3. This means that when you have 5 customers restricted at the same time, all queries for all those 5 customers will be sharing the same LVE. The larger the number of restricted customers - the less resources per restricted customer will be available.")],-1)),e[192]||(e[192]=s("li",null,[s("strong",null,"on"),t(" - Synonym for "),s("strong",null,"single"),t(" mode")],-1))]),e[704]||(e[704]=l('

    Note

    After the all mode will be deprecated on September 1, 2021:

    • the users, having it, will continue to work with this mode;
    • all new installation will not have the all mode;
    • moving to the all mode will be forbidden.

    If the dbuser-map file is absent on the server, the abusers mode emulates the single.

    With the single and abusers mode, once user is restricted, the queries for that user will be limited as long as user is using more than limits specified. After a minute that user is using less, we will unrestricted that user.

    ',3)),s("p",null,[e[195]||(e[195]=t("You can specify modes of operation using ")),a(n,{to:"/cloudlinuxos/command-line_tools/#dbctl"},{default:i(()=>e[193]||(e[193]=[t("dbctl")])),_:1}),e[196]||(e[196]=t(" or by changing ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-3"},{default:i(()=>e[194]||(e[194]=[t("configuration file")])),_:1}),e[197]||(e[197]=t("."))]),e[705]||(e[705]=l(`

    MySQL Governor limits

    MySQL Governor limit setting recommendations

    Note

    Please note that these recommendations on setting limits for MySQL Governor are general. The exact values of the limits for the effective work of MySQL and the site as a whole depend on many factors.

    Here they are:

    • the load of the virtual server with incoming requests
    • the database size
    • SQL queries efficiency
    • absolute values of the LVE limits

    MySQL Governor allows setting the burstable limits for accounts. To provide that possibility, four levels of limits are defined: current, short, middle, and long. Correctly set limits can give users more CPU without having a bottleneck on MySQL.

    General principles of choosing the limits:

    • current and short can be more than the LVE limit and should not be less
    • setting the current and short limits more than the LVE limit prevents bottlenecks in SQL request processing
    • middle limit can be more or less that the LVE limit
    • long on the contrary, should not be more than the LVE limit
    • setting the middle and long limits less than the LVE limit prevents abuse of other processes in the account (Apache, PHP) by MySQL

    Example of choosing MySQL Governor limits

    • With the default LVE SPEED limit is 100, the possible values of the MySQL Governor CPU limits can be 250/150/110/90. I.e., we admit the short-term exceeding of the limits for processing SQL requests.
    • If you face spike CPU consumption with these limits, it is recommended to reduce the excess of the current and short limits over the LVE limit. For example, to the values 150/110/100/90.
    • If the average level of CPU consumption is too high, then it is recommended to reduce the middle and long limits, too. For example, to the values 150/100/80/50.
    • Then MySQL processes will fall into LVE and be limited by LVE limits more often.
    • The same clues are applicable to the IO limits – the current and short IO limits for MySQL Governor can exceed IO LVE limits, but the middle and long cannot.

    Starting and stopping

    To start:

    service db_governor start
     

    To stop:

    service db_governor stop
     

    Mapping a user to a database

    [ MySQL Governor 1.x]

    Traditionally MySQL Governor used prefixes to map user to database. With the latest version, we automatically generate user -> database user mapping for cPanel , Plesk and DirectAdmin control panels.

    The mapping file is recreated daily by cron.

    Mapping recreation is also triggered by the following events on cPanel servers:

    • creation of user
    • modification of user
    • removal of user

    You can also rebuild the mapping file manually on cPanel, Plesk and DirectAdmin control panels by running the following command:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --dbupdate
     

    The mapping file is located in: /etc/container/dbuser-map

    The format of the file:

    [dbuser_name1] [account_name1] [UID1]
    @@ -827,15 +827,15 @@ pupkin3a_12 pupkin3a 506
     
    • TRACKED_VALUES_DUMP=busy_time:xx,cpu_time:xx,...
    • SERVER_LOAD = load averages followed by output of vmstat
    • TRACKED_VALUES_DUMP is available with MEDIUM & LONG format
    • SERVER_LOAD is available with LONG format

    Kill_log

    MySQL Governor kill log is optional log located in the /var/log/dbgovernor-kill.log. Kill log is used to track all killed queries

    Change MySQL version

    If you would like to change to a different MySQL version, or switch to MariaDB you have to start by backing up existing databases.

    Note

    For experienced users only. Changing MySQL version is a quite complicated procedure, it causes system table structural changes which can lead to unexpected results. Think twice before proceeding.

    IMPORTANT

    Please make full database backup (including system tables) before you will do upgrade of MySQL or switch to MariaDB. This action will prevent data losing in case if something goes wrong.

    /usr/share/lve/dbgovernor/mysqlgovernor.py --mysql-version=MYSQL_VERSION
     /usr/share/lve/dbgovernor/mysqlgovernor.py --install
     
    • If you are using cPanel or DirectAdmin - recompile Apache .

    To install beta version of MySQL:

    /usr/share/lve/dbgovernor/mysqlgovernor.py --install-beta
    -

    MYSQL_VERSION can be one of the following:

    auto default version of MySQL for given OS release (or cPanel settings)
    mysql51MySQL v5.1
    mysql55MySQL v5.5
    mysql56MySQL v5.6
    mysql57MySQL v5.7
    mysql80MySQL v8.0 (requires MySQL Governor 1.2-37+)
    mariadb55MariaDB v5.5
    mariadb100MariaDB v10.0
    mariadb101MariaDB v10.1
    mariadb102MariaDB v 10.2
    mariadb103MariaDB v 10.3 [requires MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+ ]
    mariadb104MariaDB v 10.4 [requires MySQL Governor 1.2-53+]
    percona56Percona v 5.6
    • We don't recommend to downgrade from MySQL v5.6, MariaDB 10.x

    Note

    cPanel does not officially support MariaDB 10.4, that is why we don’t recommend to use it on cPanel servers. Use on your own risk for Plesk servers, because downgrade can corrupt your databases.

    Note

    MariaDB version 10.4 is not available for CloudLinux OS 6 yet.

    `,55)),s("div",_e,[e[202]||(e[202]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[201]||(e[201]=t("See also MySQL Governor ")),n(i,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:a(()=>e[200]||(e[200]=[t("CLI")])),_:1})])]),e[718]||(e[718]=l(`

    PrivateDevices mode support

    MySQL Governor v. 1.2-66 and later on Cloudlinux OS 7 and 8 supports the PrivateDevices mode for the mysqld service.

    To switch on the PrivateDevices mode, follow these steps.

    On Cloudlinux OS 7

    • Make sure that the systemd version is at least 219-78.2.cloudlinux.1
    • Add the following instruction into the Service section of the mysqld service file:
      PrivateDevices=true
      +

    MYSQL_VERSION can be one of the following:

    auto default version of MySQL for given OS release (or cPanel settings)
    mysql51MySQL v5.1
    mysql55MySQL v5.5
    mysql56MySQL v5.6
    mysql57MySQL v5.7
    mysql80MySQL v8.0 (requires MySQL Governor 1.2-37+)
    mariadb55MariaDB v5.5
    mariadb100MariaDB v10.0
    mariadb101MariaDB v10.1
    mariadb102MariaDB v 10.2
    mariadb103MariaDB v 10.3 [requires MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+ ]
    mariadb104MariaDB v 10.4 [requires MySQL Governor 1.2-53+]
    percona56Percona v 5.6
    • We don't recommend to downgrade from MySQL v5.6, MariaDB 10.x

    Note

    cPanel does not officially support MariaDB 10.4, that is why we don’t recommend to use it on cPanel servers. Use on your own risk for Plesk servers, because downgrade can corrupt your databases.

    Note

    MariaDB version 10.4 is not available for CloudLinux OS 6 yet.

    `,55)),s("div",xe,[e[200]||(e[200]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[199]||(e[199]=t("See also MySQL Governor ")),a(n,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:i(()=>e[198]||(e[198]=[t("CLI")])),_:1})])]),e[706]||(e[706]=l(`

    PrivateDevices mode support

    MySQL Governor v. 1.2-66 and later on Cloudlinux OS 7 and 8 supports the PrivateDevices mode for the mysqld service.

    To switch on the PrivateDevices mode, follow these steps.

    On Cloudlinux OS 7

    • Make sure that the systemd version is at least 219-78.2.cloudlinux.1
    • Add the following instruction into the Service section of the mysqld service file:
      PrivateDevices=true
       
    • Invoke systemctl daemon-reload
    • Restart mysqld service

    On Cloudlinux OS 8

    • Add the following instructions into the Service section of the mysqld service file:
      PrivateDevices=true
       DeviceAllow=/dev/lve
       BindPaths=/dev/lve 
       
    • Invoke systemctl daemon-reload
    • Restart mysqld service

    Backing up MySQL

    On cPanel server disable MySQL service monitoring before doing the job:

    whmapi1 configureservice service=mysql enabled=1 monitored=0
     

    The following script could be used before installing MySQL-governor and MySQL/MariaDB packages to create the backup:

    /usr/share/lve/dbgovernor/scripts/mysql_backup.sh
     

    The script mysql_backup.sh is provided starting from the Governor version 1.2-115.

    On cPanel server enable monitoring back:

    whmapi1 configureservice service=mysql enabled=1 monitored=1
    -

    Note

    This operation may take some time.

    `,16)),s("p",null,[e[204]||(e[204]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:a(()=>e[203]||(e[203]=[t("MySQL Governor CLI tools")])),_:1}),e[205]||(e[205]=t("."))]),e[719]||(e[719]=l(`

    MySQL Governor improvements for CPU calculation

    In MySQL Governor version 1.2-81, we provide improvements in the algorithm of calculation user CPU usage. New behavior helps to increase precision of resource distribution between server users. By default the new type of CPU usage calculation is tuned on.

    Server administrator can turn on/off the new type of CPU usage calculation by using the following command:

    dbctl --lve-improved-accuracy off
    -

    What is the impact of improvements?

    The calculation of CPU usage has become more accurate, so the dbtop utility provides more correct information to the MySQL Governor and it places user’s requests to the LVE in a proper moment. And as a result, such improvements reduce the possibility of absorbing whole server resources by one user.

    One mpre possible outcome of calculation improvements is that some server users will become in need of MySQL Governor limits reconfiguration.

    How to view the impact of improvements?

    Let’s check the CPU usage charts from CloudLinux statistics (lve-stats).

    The new type of  CPU usage calculation is turned off.

    In this case, CPU usage by database could be less than LVE average CPU usage (blue chart is lower than green chart):

    The new type of  CPU usage calculation is turned on.

    In this case, CPU usage by database become more similar to LVE average CPU usage (blue chart and green chart on the sceen):

    FAQ

    How is interaction between MySQL Governor and LVE organized?

    The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers.

    Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container.

    This is how common server resources can be managed.

    Why the СPU/IO charts are different for database and LVE usage?

    SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts:

    Blue chart (database):

    This is the user’s real IO Database usage which was calculated by MySQL Governor.

    Green chart (LVE):

    This is the user’s IO Database usage which was calculated by lve-stats.

    Also for different types of database load (for example in case, there is a huge amount of shot requests), CPU usage charts for LVE and database can be different.

    Take a look on this chart:

    Blue (database) CPU usage:

    It is calculated by MYSQL Governor and the value is identical with top/htop values.

    Green (LVE) CPU usage:

    It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time.

    For what purpose are the IO limits of MySQL Governor used?

    MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded.

    How exactly does IO limiting work for MySQL/MariaDB requests?

    There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly.

    Take a look at the next chart. The I/O load is synchronous with the CPU load.

    Troubleshooting

    MariaDB 5.5 and MariaDB 10.0: How to set LimitNOFILE correctly for systemd.

    MariaDB 5.5 and MariaDB 10.0 have only file for managing the service, but the file has LSB functions, so it is supported by systemd .

    For adding extra limits, do the following:

    1. Run:
    mkdir /etc/systemd/system/mariadb.service.d/
    +

    Note

    This operation may take some time.

    `,16)),s("p",null,[e[202]||(e[202]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#mysql-governor"},{default:i(()=>e[201]||(e[201]=[t("MySQL Governor CLI tools")])),_:1}),e[203]||(e[203]=t("."))]),e[707]||(e[707]=l(`

    MySQL Governor improvements for CPU calculation

    In MySQL Governor version 1.2-81, we provide improvements in the algorithm of calculation user CPU usage. New behavior helps to increase precision of resource distribution between server users. By default the new type of CPU usage calculation is tuned on.

    Server administrator can turn on/off the new type of CPU usage calculation by using the following command:

    dbctl --lve-improved-accuracy off
    +

    What is the impact of improvements?

    The calculation of CPU usage has become more accurate, so the dbtop utility provides more correct information to the MySQL Governor and it places user’s requests to the LVE in a proper moment. And as a result, such improvements reduce the possibility of absorbing whole server resources by one user.

    One mpre possible outcome of calculation improvements is that some server users will become in need of MySQL Governor limits reconfiguration.

    How to view the impact of improvements?

    Let’s check the CPU usage charts from CloudLinux statistics (lve-stats).

    The new type of  CPU usage calculation is turned off.

    In this case, CPU usage by database could be less than LVE average CPU usage (blue chart is lower than green chart):

    The new type of  CPU usage calculation is turned on.

    In this case, CPU usage by database become more similar to LVE average CPU usage (blue chart and green chart on the sceen):

    FAQ

    How is interaction between MySQL Governor and LVE organized?

    The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers.

    Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container.

    This is how common server resources can be managed.

    Why the СPU/IO charts are different for database and LVE usage?

    SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts:

    Blue chart (database):

    This is the user’s real IO Database usage which was calculated by MySQL Governor.

    Green chart (LVE):

    This is the user’s IO Database usage which was calculated by lve-stats.

    Also for different types of database load (for example in case, there is a huge amount of shot requests), CPU usage charts for LVE and database can be different.

    Take a look on this chart:

    Blue (database) CPU usage:

    It is calculated by MYSQL Governor and the value is identical with top/htop values.

    Green (LVE) CPU usage:

    It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time.

    For what purpose are the IO limits of MySQL Governor used?

    MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded.

    How exactly does IO limiting work for MySQL/MariaDB requests?

    There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly.

    Take a look at the next chart. The I/O load is synchronous with the CPU load.

    Troubleshooting

    MariaDB 5.5 and MariaDB 10.0: How to set LimitNOFILE correctly for systemd.

    MariaDB 5.5 and MariaDB 10.0 have only file for managing the service, but the file has LSB functions, so it is supported by systemd .

    For adding extra limits, do the following:

    1. Run:
    mkdir /etc/systemd/system/mariadb.service.d/
     
    1. Run:
    touch /etc/systemd/system/mariadb.service.d/limits.conf
     
    1. Add the following content to the the file /etc/systemd/system/mariadb.service.d/limits.conf :
    [Service] 
     LimitNOFILE=99999
    @@ -844,7 +844,7 @@ LimitNOFILE=99999
     

    The recommended approach to resolving such issues involves three primary steps:

    1. Verify the Presence of the Library.

    Use the command to ascertain the library's presence in the current version:

    yum provides '*/libexample_stubs.so'
     
    1. Recompiling the Affected Package.

    Recompile the affected package for each user, especially if using Python's mysql package (mysqlclient):

    pip install mysqlclient --force --no-cache-dir
     

    However, this is not the ideal solution since sites that are functional may break after a system update.

    1. Using Utilities to Modify Binary.

    If recompilation isn't feasible, patchelf utility can help remove references to the missing library in the binary:

    patchelf --remove-needed libexample_stubs.so path/to/affected/binary.so
    -

    Applying the aforementioned steps should rectify the issues, allowing MySQL Governor to function correctly with the updated libraries in cl-MySQL/cl-MariaDB packages.

    Always remember to back up your data and configurations before making any changes to ensure a safety net in case of any inadvertent errors. If you continue to face challenges, please reach out to our support team for assistance.

    Known limitations

    I/O LVE limits don't work for user’s SQL queries

    In the MySQL Governor default mode, once users go over the limits, all their SQL queries will execute inside that user's LVE.

    This technique was provided with the early 1.1.5 version of MySQL Governor.

    It turned out that memory limitation for MySQLrequests causes the OOM (Out Of Memory) issues and as a result database corruptions. So, it was decided not to apply LVE memory limits for SQL queries supplied by MySQL Governor. But the internal implementation of LVE is such that I/O and memory limits work together. That’s why the I/O LVE limits do not apply for user’s SQL queries now.

    Nevertheless, SQL queries inside LVE are restricted by CPU limit which indirectly limits I/O usage, too.

    PHP Selector

    General information and requirements

    The main requirements:

    `,83)),s("ul",null,[e[217]||(e[217]=s("li",null,"CageFS is installed",-1)),e[218]||(e[218]=s("li",null,"Alt-PHP packages are installed",-1)),s("li",null,[e[207]||(e[207]=t("Mod_suexec is installed. You can find installation instruction ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-suexec-module"},{default:a(()=>e[206]||(e[206]=[t("here")])),_:1})]),e[219]||(e[219]=s("li",null,"CageFS is initialized without errors",-1)),e[220]||(e[220]=s("li",null,"CageFS is enabled for a domain user-owner",-1)),s("li",null,[e[209]||(e[209]=t("An appropriate PHP handler is selected for PHP version which is system version. ")),e[210]||(e[210]=s("span",{class:"notranslate"}," PHP Selector ",-1)),e[211]||(e[211]=t(" is ")),e[212]||(e[212]=s("strong",null,"compatible",-1)),e[213]||(e[213]=t(" with the following technologies: ")),e[214]||(e[214]=s("span",{class:"notranslate"},[s("em",null,"suPHP, mod_fcgid, CGI (suexec), LiteSpeed")],-1)),e[215]||(e[215]=t(". See also ")),n(i,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:a(()=>e[208]||(e[208]=[t("Compatibility Matrix")])),_:1}),e[216]||(e[216]=t("."))]),e[221]||(e[221]=s("li",null,"PHP version in the CloudLinux OS PHP selector does not equal to the Native PHP version",-1))]),e[720]||(e[720]=l('

    Note

    PHP Selector is not supported for H-Sphere.

    Note

    PHP Selector requires native PHP to be installed, otherwise you will get an error message with a proposal to install PHP package. Here are some instructions for different control panels:

    1. for cPanel
    2. for Plesk
    3. for DirectAdmin

    After installing native PHP, please run the cloudlinux-selector setup --interpreter=php --json command in order to reconfigure CageFS and LVE Manager.

    Supported versions

    The mark x stands for a supported version.

    Cloudlinux 6Cloudlinux 7Cloudlinux 8Cloudlinux 9
    alt-php 5.1xxx
    alt-php 5.2xxxx
    alt-php 5.3xxxx
    alt-php 5.4xxxx
    alt-php 5.5xxxx
    alt-php 5.6xxxx
    alt-php 7.0xxxx
    alt-php 7.1xxxx
    alt-php 7.2xxxx
    alt-php 7.3xxxx
    alt-php 7.4xxxx
    alt-php 8.0xxxx
    alt-php 8.1xxxx
    alt-php 8.2xxxx
    alt-php 8.3xxxx

    Installation and update

    ',6)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#update"},{default:a(()=>e[222]||(e[222]=[t("Update")])),_:1})])]),s("p",null,[e[226]||(e[226]=t("The installation of ")),e[227]||(e[227]=s("span",{class:"notranslate"}," PHP Selector ",-1)),e[228]||(e[228]=t(" presumes that you already have ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:a(()=>e[223]||(e[223]=[t("CageFS")])),_:1}),e[229]||(e[229]=t(" & ")),s("span",Se,[n(i,{to:"/lve_manager/"},{default:a(()=>e[224]||(e[224]=[t("LVE Manager")])),_:1}),e[225]||(e[225]=t(" installed."))])]),s("p",null,[e[231]||(e[231]=t("Use ")),n(i,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:a(()=>e[230]||(e[230]=[t("compatibility matrix")])),_:1}),e[232]||(e[232]=t(" to check if your Web Server/PHP mode is supporting ")),e[233]||(e[233]=s("span",{class:"notranslate"}," PHP Selector. ",-1)),e[234]||(e[234]=t(" If not, you need a change to one of the supported models."))]),e[721]||(e[721]=l(`

    Installation of different versions of PHP & modules:

    yum groupinstall alt-php
    +

    Applying the aforementioned steps should rectify the issues, allowing MySQL Governor to function correctly with the updated libraries in cl-MySQL/cl-MariaDB packages.

    Always remember to back up your data and configurations before making any changes to ensure a safety net in case of any inadvertent errors. If you continue to face challenges, please reach out to our support team for assistance.

    Known limitations

    I/O LVE limits don't work for user’s SQL queries

    In the MySQL Governor default mode, once users go over the limits, all their SQL queries will execute inside that user's LVE.

    This technique was provided with the early 1.1.5 version of MySQL Governor.

    It turned out that memory limitation for MySQLrequests causes the OOM (Out Of Memory) issues and as a result database corruptions. So, it was decided not to apply LVE memory limits for SQL queries supplied by MySQL Governor. But the internal implementation of LVE is such that I/O and memory limits work together. That’s why the I/O LVE limits do not apply for user’s SQL queries now.

    Nevertheless, SQL queries inside LVE are restricted by CPU limit which indirectly limits I/O usage, too.

    PHP Selector

    General information and requirements

    The main requirements:

    `,83)),s("ul",null,[e[215]||(e[215]=s("li",null,"CageFS is installed",-1)),e[216]||(e[216]=s("li",null,"Alt-PHP packages are installed",-1)),s("li",null,[e[205]||(e[205]=t("Mod_suexec is installed. You can find installation instruction ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#apache-suexec-module"},{default:i(()=>e[204]||(e[204]=[t("here")])),_:1})]),e[217]||(e[217]=s("li",null,"CageFS is initialized without errors",-1)),e[218]||(e[218]=s("li",null,"CageFS is enabled for a domain user-owner",-1)),s("li",null,[e[207]||(e[207]=t("An appropriate PHP handler is selected for PHP version which is system version. ")),e[208]||(e[208]=s("span",{class:"notranslate"}," PHP Selector ",-1)),e[209]||(e[209]=t(" is ")),e[210]||(e[210]=s("strong",null,"compatible",-1)),e[211]||(e[211]=t(" with the following technologies: ")),e[212]||(e[212]=s("span",{class:"notranslate"},[s("em",null,"suPHP, mod_fcgid, CGI (suexec), LiteSpeed")],-1)),e[213]||(e[213]=t(". See also ")),a(n,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:i(()=>e[206]||(e[206]=[t("Compatibility Matrix")])),_:1}),e[214]||(e[214]=t("."))]),e[219]||(e[219]=s("li",null,"PHP version in the CloudLinux OS PHP selector does not equal to the Native PHP version",-1))]),e[708]||(e[708]=l('

    Note

    PHP Selector is not supported for H-Sphere.

    Note

    PHP Selector requires native PHP to be installed, otherwise you will get an error message with a proposal to install PHP package. Here are some instructions for different control panels:

    1. for cPanel
    2. for Plesk
    3. for DirectAdmin

    After installing native PHP, please run the cloudlinux-selector setup --interpreter=php --json command in order to reconfigure CageFS and LVE Manager.

    Supported versions

    The mark x stands for a supported version.

    Cloudlinux 6Cloudlinux 7Cloudlinux 8Cloudlinux 9
    alt-php 5.1xxx
    alt-php 5.2xxxx
    alt-php 5.3xxxx
    alt-php 5.4xxxx
    alt-php 5.5xxxx
    alt-php 5.6xxxx
    alt-php 7.0xxxx
    alt-php 7.1xxxx
    alt-php 7.2xxxx
    alt-php 7.3xxxx
    alt-php 7.4xxxx
    alt-php 8.0xxxx
    alt-php 8.1xxxx
    alt-php 8.2xxxx
    alt-php 8.3xxxx

    Installation and update

    ',6)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#update"},{default:i(()=>e[220]||(e[220]=[t("Update")])),_:1})])]),s("p",null,[e[224]||(e[224]=t("The installation of ")),e[225]||(e[225]=s("span",{class:"notranslate"}," PHP Selector ",-1)),e[226]||(e[226]=t(" presumes that you already have ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[221]||(e[221]=[t("CageFS")])),_:1}),e[227]||(e[227]=t(" & ")),s("span",ye,[a(n,{to:"/lve_manager/"},{default:i(()=>e[222]||(e[222]=[t("LVE Manager")])),_:1}),e[223]||(e[223]=t(" installed."))])]),s("p",null,[e[229]||(e[229]=t("Use ")),a(n,{to:"/cloudlinuxos/limits/#compatibility-matrix"},{default:i(()=>e[228]||(e[228]=[t("compatibility matrix")])),_:1}),e[230]||(e[230]=t(" to check if your Web Server/PHP mode is supporting ")),e[231]||(e[231]=s("span",{class:"notranslate"}," PHP Selector. ",-1)),e[232]||(e[232]=t(" If not, you need a change to one of the supported models."))]),e[709]||(e[709]=l(`

    Installation of different versions of PHP & modules:

    yum groupinstall alt-php
     

    Update CageFS & LVE Manager with support for PHP Alternatives:

    $ yum update cagefs lvemanager
     

    cPanel/WHM: Make sure 'Select PHP version' is enabled in Feature Manager .

    IMPORTANT

    Please, do not use settings like SuPHP_ConfigPath, PHPRC, PHP_INI_SCAN_DIR. Do not redefine path to php.ini and ini-files for PHP modules. Doing that can break PHP Selector functionality.

    For example, alternative php5.2 versions should load /opt/alt/php52/etc/php.ini file and scan /opt/alt/php52/etc/php.d directory for modules:

    Configuration File (php.ini) Path         /opt/alt/php52/etc
     Loaded Configuration File                 /opt/alt/php52/etc/php.ini
    @@ -852,18 +852,18 @@ Scan this dir for additional .ini files   /opt/alt/php52/etc/php.d
     additional .ini files parsed              /opt/alt/php52/etc/php.d/alt_php.ini
     

    Those are default locations for alt-php.

    If you need custom PHP settings per user, please change them via "Edit PHP settings" feature of PHP Selector .

    If a list of default modules is absent on the server in the /etc/cl.selector/defaults.cfg file for some alt-PHP version and there is nd_mysqli extension in this version, then on installation/update of the LVE Manager the mysqli extension will be disabled and nd_mysqli extension will be enabled automatically.

    • If nd_mysqli module is absent or a list of enabled modules is available, then they won't be changed automatically.
    • If alt-PHP is not installed on LVE Manager installation/update, then they won’t be changed automatically.

    To change the modules status (enabled/disabled) manually, run the following command in a console:

    /usr/sbin/cloudlinux-selector make-defaults-config --json --interpreter=php
     

    Update

    To update PHP Selector, run the following command:

    yum groupupdate alt-php
    -

    This command allows to install newly released versions in PHP Selector.

    `,18)),s("div",ke,[e[237]||(e[237]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[236]||(e[236]=t("See also PHP Selector ")),n(i,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:a(()=>e[235]||(e[235]=[t("CLI")])),_:1})])]),e[722]||(e[722]=l(`

    Installation instructions for cPanel users

    1. Install CageFS as root via SSH:
    yum install cagefs
    +

    This command allows to install newly released versions in PHP Selector.

    `,18)),s("div",we,[e[235]||(e[235]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[234]||(e[234]=t("See also PHP Selector ")),a(n,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:i(()=>e[233]||(e[233]=[t("CLI")])),_:1})])]),e[710]||(e[710]=l(`

    Installation instructions for cPanel users

    1. Install CageFS as root via SSH:
    yum install cagefs
     
    1. Install alt-php packages as root:
    yum groupinstall alt-php
    -
    `,5)),s("ol",Pe,[s("li",null,[e[239]||(e[239]=t("Install ")),e[240]||(e[240]=s("code",null,"mod_suexec",-1)),e[241]||(e[241]=t(" package as root. See installation instructions ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-5"},{default:a(()=>e[238]||(e[238]=[t("here")])),_:1}),e[242]||(e[242]=t("."))]),e[243]||(e[243]=s("li",null,"Verify that CageFS is initialized successfully.",-1))]),e[723]||(e[723]=l(`
    • via SSH by running the following command:
    cagefsctl --check-cagefs-initialized
    -
    • via cPanel admin interface

    Go to cPanel → Admin interface → LVE Manager → Dashboard → click Refresh

    If there is a problem you can see Not initialized

    1. Initilize CageF (if it is not initialized)
    • Via SSH
    ',9)),e[724]||(e[724]=s("div",{clas:"code"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{class:"language-text"},[s("code",null,`cagefsctl --init -`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"})])])],-1)),e[725]||(e[725]=l('
    • Via cPanel admin interface

      Go to cPanel → Admin interface → LVE manager → Options → CageFS INIT

    If CageFS was initialized after refreshing Dashboard you will see that CageFS is enabled:

    1. Enable CageFS to a user

    Go to cPanel → Admin interface → LVE manager → Users

    • For one user by individual slider (for LVE 1001 in the picture above)
    • For a group of user by the CageFS button (for LVE 1002 and 1003 in the picture above)
    1. Check that system PHP version is not alt-php (it should be ea-php)

    Go to cPanel → Admin interface → MultiPHP Manager → PHP versions

    1. Check that an appropriate PHP handler is selected for PHP version which is system version

    Go to cPanel Admin interface → MultiPHP Manager → PHP Handlers

    1. Check version for domain in MultiPHP Selector. It should be equal to the system default version

    Go to cPanel Admin interface → MultiPhp Manager → PHP versions → scroll to Set PHP Version per Domain

    1. Version for domain in User’s interface in PHP Selector should not be equal to the Native version.

    LiteSpeed support

    Note

    LiteSpeed detects CloudLinux OS and applies all settings out-of-the-box.

    Note

    If your LiteSpeed is installed to a non-standard, custom location path, create a symlink: ln -s /path/to/custom/lsws /usr/local/lsws then run cagefsctl --setup-cl-selector.

    If the settings were not applied, you can use the following steps to set up LiteSpeed to use PHP Selector.

    ',20)),s("ol",null,[s("li",null,[e[245]||(e[245]=t("Follow PHP Selector ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-4"},{default:a(()=>e[244]||(e[244]=[t("installation guide")])),_:1}),e[246]||(e[246]=t("."))]),e[247]||(e[247]=s("li",null,"Make sure the following settings are set in the LSWS Web Admin console:",-1))]),e[726]||(e[726]=l('
    • Configuration ➞ Server ➞ General ➞ CloudLinux OS: CageFS or CageFS without suEXEC
    • Configuration ➞ Server ➞ General ➞ PHP suEXEC: Yes

    How to set up LiteSpeed version 5.3+ to use PHP Selector

    For Plesk

    For other control panels

    Additionally, we recommend setting up the following parameters:

    • Configuration ➞ Server ➞ PHP:
    • Click Edit in the PHP Handler Defaults section
    • Set Yes in the Run On Startup
    • Make sure to set Max Idle Time (for example to 140)

    How to set up LiteSpeed version lower than 5.3 to use PHP Selector

    Go to the External App tab, External Application ➞ Add.

    • The Command line should be /var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper on Plesk.
    • For other control panels, the Command line should be /usr/local/bin/lsphp.
    • The Run On Start Up line must contain Yes or No.

    For Plesk

    For other control panels

    Settings in text format:

    Namelsphp_selector
    Addressuds://tmp/lshttpd/lsphp_selector.sock
    NotesNot Set
    Max Connections35
    EnvironmentPHP_LSAPI_MAX_REQUESTS=5000
    PHP_LSAPI_CHILDREN=35
    Initial Request Timeout (secs)60
    Retry Timeout (secs)0
    Persistent ConnectionYes
    Connection Keepalive TimeoutNot Set
    Response BufferingNo
    Auto StartThrough CGI Daemon (Async)
    Command* For Plesk /var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper
    * For other control panels /usr/local/bin/lsphp
    Back Log100
    Instances1
    suEXEC UserNot Set
    suEXEC GroupNot Set
    umaskNot Set
    Run On Start UpYes
    Max Idle Time70
    Priority0
    Memory Soft Limit (bytes)2047M
    Memory Hard Limit (bytes)2047M
    Process Soft Limit400
    Process Hard Limit500

    Go to the Script Handler tab. For required suffixes, change the Handler Name to lsphp_selector.

    Note

    In order to use PHP Selector and custom php.ini, lsphp5 needs to be in SuEXEC non-daemon mode.

    Note

    Some PHP configurations require more memory for SuExec to work properly. If you are getting error 500 after switching suEXEC to non-daemon mode, try to increase Memory Soft Limit and Memory Hard Limit for external App to at least 650/800M.

    ISPmanager support

    As of July 2013, PHP Selector support for ISPmanager is limited to command line utilities. You should still be able to use it.

    As always, PHP Selector requires CGI, FCGI or suPHP to work.

    You will need to do following modifications:

    Create new file /usr/local/bin/php-cgi-etc:

    #!/bin/bash
    +
    `,5)),s("ol",_e,[s("li",null,[e[237]||(e[237]=t("Install ")),e[238]||(e[238]=s("code",null,"mod_suexec",-1)),e[239]||(e[239]=t(" package as root. See installation instructions ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-5"},{default:i(()=>e[236]||(e[236]=[t("here")])),_:1}),e[240]||(e[240]=t("."))]),e[241]||(e[241]=s("li",null,"Verify that CageFS is initialized successfully.",-1))]),e[711]||(e[711]=l(`
    • via SSH by running the following command:
    cagefsctl --check-cagefs-initialized
    +
    • via cPanel admin interface

    Go to cPanel → Admin interface → LVE Manager → Dashboard → click Refresh

    If there is a problem you can see Not initialized

    1. Initilize CageF (if it is not initialized)
    • Via SSH
    ',9)),e[712]||(e[712]=s("div",{clas:"code"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{class:"language-text"},[s("code",null,`cagefsctl --init +`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"})])])],-1)),e[713]||(e[713]=l('
    • Via cPanel admin interface

      Go to cPanel → Admin interface → LVE manager → Options → CageFS INIT

    If CageFS was initialized after refreshing Dashboard you will see that CageFS is enabled:

    1. Enable CageFS to a user

    Go to cPanel → Admin interface → LVE manager → Users

    • For one user by individual slider (for LVE 1001 in the picture above)
    • For a group of user by the CageFS button (for LVE 1002 and 1003 in the picture above)
    1. Check that system PHP version is not alt-php (it should be ea-php)

    Go to cPanel → Admin interface → MultiPHP Manager → PHP versions

    1. Check that an appropriate PHP handler is selected for PHP version which is system version

    Go to cPanel Admin interface → MultiPHP Manager → PHP Handlers

    1. Check version for domain in MultiPHP Selector. It should be equal to the system default version

    Go to cPanel Admin interface → MultiPhp Manager → PHP versions → scroll to Set PHP Version per Domain

    1. Version for domain in User’s interface in PHP Selector should not be equal to the Native version.

    LiteSpeed support

    Note

    LiteSpeed detects CloudLinux OS and applies all settings out-of-the-box.

    Note

    If your LiteSpeed is installed to a non-standard, custom location path, create a symlink: ln -s /path/to/custom/lsws /usr/local/lsws then run cagefsctl --setup-cl-selector.

    If the settings were not applied, you can use the following steps to set up LiteSpeed to use PHP Selector.

    ',20)),s("ol",null,[s("li",null,[e[243]||(e[243]=t("Follow PHP Selector ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-4"},{default:i(()=>e[242]||(e[242]=[t("installation guide")])),_:1}),e[244]||(e[244]=t("."))]),e[245]||(e[245]=s("li",null,"Make sure the following settings are set in the LSWS Web Admin console:",-1))]),e[714]||(e[714]=l('
    • Configuration ➞ Server ➞ General ➞ CloudLinux OS: CageFS or CageFS without suEXEC
    • Configuration ➞ Server ➞ General ➞ PHP suEXEC: Yes

    How to set up LiteSpeed version 5.3+ to use PHP Selector

    For Plesk

    For other control panels

    Additionally, we recommend setting up the following parameters:

    • Configuration ➞ Server ➞ PHP:
    • Click Edit in the PHP Handler Defaults section
    • Set Yes in the Run On Startup
    • Make sure to set Max Idle Time (for example to 140)

    How to set up LiteSpeed version lower than 5.3 to use PHP Selector

    Go to the External App tab, External Application ➞ Add.

    • The Command line should be /var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper on Plesk.
    • For other control panels, the Command line should be /usr/local/bin/lsphp.
    • The Run On Start Up line must contain Yes or No.

    For Plesk

    For other control panels

    Settings in text format:

    Namelsphp_selector
    Addressuds://tmp/lshttpd/lsphp_selector.sock
    NotesNot Set
    Max Connections35
    EnvironmentPHP_LSAPI_MAX_REQUESTS=5000
    PHP_LSAPI_CHILDREN=35
    Initial Request Timeout (secs)60
    Retry Timeout (secs)0
    Persistent ConnectionYes
    Connection Keepalive TimeoutNot Set
    Response BufferingNo
    Auto StartThrough CGI Daemon (Async)
    Command* For Plesk /var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper
    * For other control panels /usr/local/bin/lsphp
    Back Log100
    Instances1
    suEXEC UserNot Set
    suEXEC GroupNot Set
    umaskNot Set
    Run On Start UpYes
    Max Idle Time70
    Priority0
    Memory Soft Limit (bytes)2047M
    Memory Hard Limit (bytes)2047M
    Process Soft Limit400
    Process Hard Limit500

    Go to the Script Handler tab. For required suffixes, change the Handler Name to lsphp_selector.

    Note

    In order to use PHP Selector and custom php.ini, lsphp5 needs to be in SuEXEC non-daemon mode.

    Note

    Some PHP configurations require more memory for SuExec to work properly. If you are getting error 500 after switching suEXEC to non-daemon mode, try to increase Memory Soft Limit and Memory Hard Limit for external App to at least 650/800M.

    ISPmanager support

    As of July 2013, PHP Selector support for ISPmanager is limited to command line utilities. You should still be able to use it.

    As always, PHP Selector requires CGI, FCGI or suPHP to work.

    You will need to do following modifications:

    Create new file /usr/local/bin/php-cgi-etc:

    #!/bin/bash
     /usr/bin/php-cgi -c /etc/php.ini "$@"
     
    Make that file executable:
    chmod +x /usr/local/bin/php-cgi-etc
     
    Edit file /usr/local/ispmgr/etc/ispmgr.conf

    Add a line:

    path phpcgibinary /usr/local/bin/php-cgi-etc
     

    Make sure there is no other lines with path phpcgibinary defined in the file.

    Restart ISPmanager :

    killall ispmgr
    -

    After that FCGID wrappers (/var/www/[USER]/data/php-bin/php) for new users will be like this:

    #!/usr/local/bin/php-cgi-etc

    You might need to edit/modify wrappers for existing users if you want them to be able to use PHP Selector. You can leave them as is for users that don't need such functionality.

    Uninstalling

    `,43)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#disabling-php-extension-globally"},{default:a(()=>e[248]||(e[248]=[t("Disabling PHP extension globally")])),_:1})])]),e[727]||(e[727]=l(`

    It is not possible to remove PHP Selector from the system completely as it is an essential part of LVE Manager and CageFS packages. However, you can make PHP Selector unavailable for cPanel and Plesk users.

    To do so, go to LVE Manager → PHP Selector and check Disabled as PHP Selector status. Doing so allows you to disable web-interface of the PHP Selector in the user interface but does not reset custom settings (choosing a version of PHP and modules).

    To disable PHP Selector and make it has no effect on a PHP version on the sites, run the following command:

    • this command resets PHP versions to Native:
    cagefsctl --cl-selector-reset-versions
    +

    After that FCGID wrappers (/var/www/[USER]/data/php-bin/php) for new users will be like this:

    #!/usr/local/bin/php-cgi-etc

    You might need to edit/modify wrappers for existing users if you want them to be able to use PHP Selector. You can leave them as is for users that don't need such functionality.

    Uninstalling

    `,43)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#disabling-php-extension-globally"},{default:i(()=>e[246]||(e[246]=[t("Disabling PHP extension globally")])),_:1})])]),e[715]||(e[715]=l(`

    It is not possible to remove PHP Selector from the system completely as it is an essential part of LVE Manager and CageFS packages. However, you can make PHP Selector unavailable for cPanel and Plesk users.

    To do so, go to LVE Manager → PHP Selector and check Disabled as PHP Selector status. Doing so allows you to disable web-interface of the PHP Selector in the user interface but does not reset custom settings (choosing a version of PHP and modules).

    To disable PHP Selector and make it has no effect on a PHP version on the sites, run the following command:

    • this command resets PHP versions to Native:
    cagefsctl --cl-selector-reset-versions
     
    • this command resets PHP modules to Default:
    cagefsctl --cl-selector-reset-modules
    -

    These commands can affect PHP version of your clients’ web sites. Use them with caution as improper usage might cause your clients’ web sites down.

    Note

    It is possible to manually uninstall the integral parts of PHP Selector - alt-php packages. However, since CloudLinux OS components heavily rely on them, we do not recommend doing so. Proceed with caution and keep an eye on yum dependencies if you decide to uninstall the packages.

    Disabling PHP extension globally

    If you want to disable PHP extension globally, you don't need to remove file /opt/alt/phpXX/etc/php.d.all/$EXTENSION.ini . You should just comment out "extension=" directives in it.

    The extension will be visible in PHP Selector interface, but selecting it in users's interface will take no effect - extension will be disabled in fact.

    Reinstalling of alt-php packages will not reset settings (will not enable extension again).

    Configuration and using

    `,14)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#setting-default-version-and-modules"},{default:a(()=>e[249]||(e[249]=[t("Setting default version and modules")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#individual-php-ini-files"},{default:a(()=>e[250]||(e[250]=[t("Individual PHP.ini files")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-add-additional-php-ini-file-for-a-user-inside-cagefs"},{default:a(()=>e[251]||(e[251]=[t("How to add additional php.ini file for a user inside CageFS")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#substitute-global-php-ini-for-individual-customer"},{default:a(()=>e[252]||(e[252]=[t("Substitute global php.ini for individual customer")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-substitute-global-php-ini-for-individual-customer-on-cpanel-server-with-easyapache4"},{default:a(()=>e[253]||(e[253]=[t("How to substitute global php.ini for individual customer on cPanel server with EasyApache4")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-interpreter-version"},{default:a(()=>e[254]||(e[254]=[t("Managing interpreter version")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#including-php-selector-only-with-some-packages-cpanel"},{default:a(()=>e[255]||(e[255]=[t("Including PHP Selector only with some packages - cPanel")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-extensions"},{default:a(()=>e[256]||(e[256]=[t("PHP extensions")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#ffmpeg"},{default:a(()=>e[257]||(e[257]=[t("FFmpeg")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#native-php-configuration"},{default:a(()=>e[258]||(e[258]=[t("Native PHP configuration")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-configure-alt-php72-zts-to-use-with-php-selector"},{default:a(()=>e[259]||(e[259]=[t("How to configure alt-php72-zts to use with PHP Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#using"},{default:a(()=>e[260]||(e[260]=[t("Using")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options"},{default:a(()=>e[261]||(e[261]=[t("Custom PHP.ini options")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#end-user-files-and-directories"},{default:a(()=>e[262]||(e[262]=[t("End user files and directories")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#compiling-your-own-extensions"},{default:a(()=>e[263]||(e[263]=[t("Compiling your own extensions")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#roll-your-own-php"},{default:a(()=>e[264]||(e[264]=[t("Roll your own PHP")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#detect-user-s-php-version"},{default:a(()=>e[265]||(e[265]=[t("Detect user's PHP version")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-selector-without-cagefs"},{default:a(()=>e[266]||(e[266]=[t("PHP Selector without CageFS")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuring-global%E2%80%9D-php-ini-options-for-all-alt-php-versions"},{default:a(()=>e[267]||(e[267]=[t('Configuring "global” php.ini options for all Alt-PHP versions')])),_:1})])]),e[728]||(e[728]=l(`

    Setting default version and modules

    Administrator can set default interpreter version and extensions for all users. All file operations are actually done by CageFS. CageFS takes settings from /etc/cl.selector/defaults.cfg. Currently the /etc/cl.selector/defaults.cfg is created and handled by CloudLinux OS PHP Selector scripts. It has the following format:

    [global]
    +

    These commands can affect PHP version of your clients’ web sites. Use them with caution as improper usage might cause your clients’ web sites down.

    Note

    It is possible to manually uninstall the integral parts of PHP Selector - alt-php packages. However, since CloudLinux OS components heavily rely on them, we do not recommend doing so. Proceed with caution and keep an eye on yum dependencies if you decide to uninstall the packages.

    Disabling PHP extension globally

    If you want to disable PHP extension globally, you don't need to remove file /opt/alt/phpXX/etc/php.d.all/$EXTENSION.ini . You should just comment out "extension=" directives in it.

    The extension will be visible in PHP Selector interface, but selecting it in users's interface will take no effect - extension will be disabled in fact.

    Reinstalling of alt-php packages will not reset settings (will not enable extension again).

    Configuration and using

    `,14)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#setting-default-version-and-modules"},{default:i(()=>e[247]||(e[247]=[t("Setting default version and modules")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#individual-php-ini-files"},{default:i(()=>e[248]||(e[248]=[t("Individual PHP.ini files")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-add-additional-php-ini-file-for-a-user-inside-cagefs"},{default:i(()=>e[249]||(e[249]=[t("How to add additional php.ini file for a user inside CageFS")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#substitute-global-php-ini-for-individual-customer"},{default:i(()=>e[250]||(e[250]=[t("Substitute global php.ini for individual customer")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-substitute-global-php-ini-for-individual-customer-on-cpanel-server-with-easyapache4"},{default:i(()=>e[251]||(e[251]=[t("How to substitute global php.ini for individual customer on cPanel server with EasyApache4")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#managing-interpreter-version"},{default:i(()=>e[252]||(e[252]=[t("Managing interpreter version")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#including-php-selector-only-with-some-packages-cpanel"},{default:i(()=>e[253]||(e[253]=[t("Including PHP Selector only with some packages - cPanel")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-extensions"},{default:i(()=>e[254]||(e[254]=[t("PHP extensions")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#ffmpeg"},{default:i(()=>e[255]||(e[255]=[t("FFmpeg")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#native-php-configuration"},{default:i(()=>e[256]||(e[256]=[t("Native PHP configuration")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-configure-alt-php72-zts-to-use-with-php-selector"},{default:i(()=>e[257]||(e[257]=[t("How to configure alt-php72-zts to use with PHP Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#using"},{default:i(()=>e[258]||(e[258]=[t("Using")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options"},{default:i(()=>e[259]||(e[259]=[t("Custom PHP.ini options")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#end-user-files-and-directories"},{default:i(()=>e[260]||(e[260]=[t("End user files and directories")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#compiling-your-own-extensions"},{default:i(()=>e[261]||(e[261]=[t("Compiling your own extensions")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#roll-your-own-php"},{default:i(()=>e[262]||(e[262]=[t("Roll your own PHP")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#detect-user-s-php-version"},{default:i(()=>e[263]||(e[263]=[t("Detect user's PHP version")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-selector-without-cagefs"},{default:i(()=>e[264]||(e[264]=[t("PHP Selector without CageFS")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuring-global%E2%80%9D-php-ini-options-for-all-alt-php-versions"},{default:i(()=>e[265]||(e[265]=[t('Configuring "global” php.ini options for all Alt-PHP versions')])),_:1})])]),e[716]||(e[716]=l(`

    Setting default version and modules

    Administrator can set default interpreter version and extensions for all users. All file operations are actually done by CageFS. CageFS takes settings from /etc/cl.selector/defaults.cfg. Currently the /etc/cl.selector/defaults.cfg is created and handled by CloudLinux OS PHP Selector scripts. It has the following format:

    [global]
     selector=enabled
     
     [versions]
    @@ -879,7 +879,7 @@ modules=json,zip,fileinfo
     
    to propagate the change.

    How to add additional php.ini file for a user inside CageFS

    If you want to create additional php.ini file for a user inside CageFS in order to change some specific PHP options for that user, you can execute the following:

    su -s /bin/bash - USER
     cd /etc/cl.php.d/alt-php72/
     echo "upload_tmp_dir=/tmp" >> custom.ini
    -

    The commands above create custom.ini file that will be used for alt-php72. By default this approach is valid only for alt-php version selected via PHP Selector. When /etc/cl.selector/symlinks.rules file contains php.d.location = selector line, then the approach is valid for all alt-php versions regardless whether it is selected in PHP Selector or not.

    `,16)),s("p",null,[e[269]||(e[269]=t("You can find more details ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#bundled-php-extensions"},{default:a(()=>e[268]||(e[268]=[t("here")])),_:1}),e[270]||(e[270]=t("."))]),s("p",null,[e[272]||(e[272]=t("But the recommended way is to modify PHP options via PHP Selector web or CLI interfaces, as described ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options"},{default:a(()=>e[271]||(e[271]=[t("here")])),_:1}),e[273]||(e[273]=t("."))]),e[729]||(e[729]=s("h4",{id:"substitute-global-php-ini-for-individual-customer",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#substitute-global-php-ini-for-individual-customer","aria-hidden":"true"},"#"),t(" Substitute global php.ini for individual customer")],-1)),e[730]||(e[730]=s("p",null,"Sometimes you might want to have a single customer with a different php.ini, than the rest of your customers.",-1)),s("p",null,[e[275]||(e[275]=t("To do that, you will use ")),s("span",Ee,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-etc-files-per-customer"},{default:a(()=>e[274]||(e[274]=[t("custom.etc directory functionality")])),_:1})])]),e[731]||(e[731]=l(`
    1. Move default php.ini into /etc directory and create a symlink to it:
    mv /usr/local/lib/php.ini /etc/php.ini
    +

    The commands above create custom.ini file that will be used for alt-php72. By default this approach is valid only for alt-php version selected via PHP Selector. When /etc/cl.selector/symlinks.rules file contains php.d.location = selector line, then the approach is valid for all alt-php versions regardless whether it is selected in PHP Selector or not.

    `,16)),s("p",null,[e[267]||(e[267]=t("You can find more details ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#bundled-php-extensions"},{default:i(()=>e[266]||(e[266]=[t("here")])),_:1}),e[268]||(e[268]=t("."))]),s("p",null,[e[270]||(e[270]=t("But the recommended way is to modify PHP options via PHP Selector web or CLI interfaces, as described ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-php-ini-options"},{default:i(()=>e[269]||(e[269]=[t("here")])),_:1}),e[271]||(e[271]=t("."))]),e[717]||(e[717]=s("h4",{id:"substitute-global-php-ini-for-individual-customer",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#substitute-global-php-ini-for-individual-customer","aria-hidden":"true"},"#"),t(" Substitute global php.ini for individual customer")],-1)),e[718]||(e[718]=s("p",null,"Sometimes you might want to have a single customer with a different php.ini, than the rest of your customers.",-1)),s("p",null,[e[273]||(e[273]=t("To do that, you will use ")),s("span",Se,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#custom-etc-files-per-customer"},{default:i(()=>e[272]||(e[272]=[t("custom.etc directory functionality")])),_:1})])]),e[719]||(e[719]=l(`
    1. Move default php.ini into /etc directory and create a symlink to it:
    mv /usr/local/lib/php.ini /etc/php.ini
     ln -fs /etc/php.ini /usr/local/lib/php.ini
     
    1. Change path to php.ini in /etc/cl.selector/native.conf file to:
    php.ini=/etc/php.ini
     
    1. For each user that needs custom file, create directory /etc/cagefs/custom.etc/USER_NAME/php.ini .

    For example if you want to create custom for USER1 and USER2 you would create files:
    /etc/cagefs/custom.etc/USER1/php.ini
    /etc/cagefs/custom.etc/USER2/php.ini

    Create such files for each user that should have custom file.

    1. Execute:
    cagefsctl --force-update 
    @@ -888,12 +888,12 @@ ln -fs /etc/php.ini /usr/local/lib/php.ini
     

    to apply changes to CageFS for specific users.

    How to substitute global php.ini for individual customer on cPanel server with EasyApache4

    Note

    It is enough to put php.ini in the directory where PHP script is located in order to run the PHP script with a custom php.ini when using SuPHP. Also, you can use cPanel MultiPHP Manager to create user’s custom php.ini file, and this approach should work for CGI, FCGI, and LSAPI. Recommended ways to manage php.ini settings per user are to use cPanel MultiPHP or CloudLinux OS PHP Selector interfaces.

    1. For each user that needs custom file, create directory /etc/cagefs/custom.etc/USER_NAME/php.ini.

      For example, if you want to create a custom file for USER1 and USER2 you would create files:

      /etc/cagefs/custom.etc/USER1/php.ini
       /etc/cagefs/custom.etc/USER2/php.ini
       

      Create such files for each user that should have a custom file.

    2. Execute the following command:

      $ cagefsctl --force-update
      -
    3. Configure php.ini load path for user’s domains.

    `,13)),s("ul",null,[e[287]||(e[287]=s("li",null,[s("p",null,[t("When using "),s("strong",null,"suphp"),t(" handler, you should use "),s("code",null,"SuPHP_ConfigPath"),t(" directive in virtual host configuration for these domains, or use this directive in "),s("code",null,".htaccess"),t(" files: "),s("code",null,"suPHP_ConfigPath/etc"),t(".")])],-1)),s("li",null,[s("p",null,[e[277]||(e[277]=t("When using ")),e[278]||(e[278]=s("strong",null,"mod_lsapi",-1)),e[279]||(e[279]=t(", you should use ")),e[280]||(e[280]=s("code",null,"lsapi_phprc",-1)),e[281]||(e[281]=t(" directive in virtual host configuration: ")),e[282]||(e[282]=s("code",null,"lsapi_phprc/etc/",-1)),e[283]||(e[283]=t(". You can find the detailed description of ")),e[284]||(e[284]=s("code",null,"mod_lsapi",-1)),e[285]||(e[285]=t(" directives ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:a(()=>e[276]||(e[276]=[t("here")])),_:1}),e[286]||(e[286]=t("."))])]),e[288]||(e[288]=l(`
  • When using FCGI or CGI, you should implement custom PHP wrapper and redefine the path to php.ini via -c command line option, like below:

    #!/bin/bash
    +
  • Configure php.ini load path for user’s domains.

  • `,13)),s("ul",null,[e[285]||(e[285]=s("li",null,[s("p",null,[t("When using "),s("strong",null,"suphp"),t(" handler, you should use "),s("code",null,"SuPHP_ConfigPath"),t(" directive in virtual host configuration for these domains, or use this directive in "),s("code",null,".htaccess"),t(" files: "),s("code",null,"suPHP_ConfigPath/etc"),t(".")])],-1)),s("li",null,[s("p",null,[e[275]||(e[275]=t("When using ")),e[276]||(e[276]=s("strong",null,"mod_lsapi",-1)),e[277]||(e[277]=t(", you should use ")),e[278]||(e[278]=s("code",null,"lsapi_phprc",-1)),e[279]||(e[279]=t(" directive in virtual host configuration: ")),e[280]||(e[280]=s("code",null,"lsapi_phprc/etc/",-1)),e[281]||(e[281]=t(". You can find the detailed description of ")),e[282]||(e[282]=s("code",null,"mod_lsapi",-1)),e[283]||(e[283]=t(" directives ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:i(()=>e[274]||(e[274]=[t("here")])),_:1}),e[284]||(e[284]=t("."))])]),e[286]||(e[286]=l(`
  • When using FCGI or CGI, you should implement custom PHP wrapper and redefine the path to php.ini via -c command line option, like below:

    #!/bin/bash
     [ -f /etc/php.ini ] && exec /usr/bin/php -c /etc/php.ini
     exec /usr/bin/php
    -
  • `,1))]),e[732]||(e[732]=l('

    Notes:

    1. You should restart Apache web server after modifying virtual host configuration for the domains.

    2. Custom php.ini may break switching PHP version via CloudLinux OS PHP Selector or cPanel MultiPHP Manager for the appropriate users or domains.

    3. When using cPanel ea-php for the domains, additional php.ini files may not be loaded, so you should load all needed PHP extensions in custom /etc/php.ini file:

    4. When using CloudLinux OS alt-php, additional php.ini files will be loaded:

    5. If you have modified anything in /etc/cagefs/custom.etc directory, you should execute one of the following:

      • to apply changes to CageFS for all users, run:
      cagefsctl --update-etc
      +
    6. `,1))]),e[720]||(e[720]=l('

      Notes:

      1. You should restart Apache web server after modifying virtual host configuration for the domains.

      2. Custom php.ini may break switching PHP version via CloudLinux OS PHP Selector or cPanel MultiPHP Manager for the appropriate users or domains.

      3. When using cPanel ea-php for the domains, additional php.ini files may not be loaded, so you should load all needed PHP extensions in custom /etc/php.ini file:

      4. When using CloudLinux OS alt-php, additional php.ini files will be loaded:

      5. If you have modified anything in /etc/cagefs/custom.etc directory, you should execute one of the following:

        • to apply changes to CageFS for all users, run:
        cagefsctl --update-etc
         
        • to apply changes to CageFS for specific users, run:
        cagefsctl --update-etc user1 user2
        -

      Managing interpreter version

      Managing interpreter versions is done by means of manipulating a set of symbolic links that point to different versions of interpreter binaries. For example, if default PHP binary is /usr/local/bin/php :

      • First we move the default binary inside CageFS to /usr/share/cagefs-skeleton/usr/selector , and make /usr/local/bin/php a symlink pointing to /etc/cl.selector/php . This operation is done as part of CageFS deployment.
      • Next suppose we have additional PHP version, say 7.2.5. The information about all additional interpreter binaries and paths for them is kept in /etc/cl.selector/selector.conf . This config file is updated by RPM package manager each time alternative PHP package is added, removed or updated
      • /usr/bin/selectorctl --list --interpreter=php will get us list of all available PHP interpreter versions out of /etc/cl.selector/selector.conf file . Next we want to know which PHP version is active for a given user (to supply a selected option in options list). We type:
      • /usr/bin/selectorctl --user USERNAME --interpreter=php --user-current will retrieve PHP version set for a particular user. The script gets the path from /var/cagefs/LAST_TWO_DIGITS_OF_UID/USERNAME/etc/cl.selector/php symlink, compares it with contents of /etc/cl.selector/selector.conf file and if path is valid, prints out the current interpreter version.
      • /usr/bin/selectorctl --user USERNAME --interpreter=php --set-user-current=7.2 sets the current PHP version for particular user by creating symlink in /var/cagefs/LAST_TWO_DIGITS_OF_UID/USERNAME/etc/cl.selector directory. All old symlinks are removed, and new symlinks are set.

      Including PHP Selector only with some packages (cPanel)

      cPanel has a ' Feature Manager ' in WHM that allows you to disable PHP Selector for some of the packages that you offer.

      In reality it only disables the icon in cPanel interface. Yet, in most cases it should be enough in shared hosting settings.

      You can find more info on ' Feature Manager ' here: http://docs.cpanel.net/twiki/bin/view/11_30/WHMDocs/FeatureManager

      Once PHP Selector is enabled, you can find it in the Feature Manager . Disabling it in Feature Manager , will remove the icon for users that are using that particular 'Feature List'

      PHP extensions

      Configuring Alt-PHP modules loading

      CloudLinux OS PHP Selector and Alt-PHP can be used in conjunction with Plesk PHP Selector and cPanel MultiPHP . To be compatible, CloudLinux OS PHP Selector works as follows: modules that are selected in CloudLinux OS PHP Selector are loaded for Alt-PHP version selected in CloudLinux OS PHP Selector only. For the rest Alt-PHP versions default module set is loaded ( /opt/alt/phpXX/etc/php.d/default.ini ) . Described above is default behavior.

      Note

      If system default PHP version selected in cPanel MultiPHP Manager is not ea-php, then default module set is loaded for all Alt-PHP versions by default (/opt/alt/phpXX/etc/php.d/default.ini).

      When "php.d.location = selector" option is in effect, modules selected via PHP Selector will be loaded for all alt-php versions.

      This behavior is implemented in CageFS-6.1-10 and later.

      In LVE Manager 1.0-9.40+ this behavior can be modified so that modules selected in CloudLinux OS PHP Selector would be loaded for all Alt-PHP versions (with CageFS enabled), which can be quite useful if you use  ‘ per directory ’ or ‘ per domain ’ Alt-PHP configuration and want to select modules using CloudLinux OS PHP Selector .

      To modify it, create a file /etc/cl.selector/symlinks.rules (read-only for regular users) with the following content: php.d.location = selector

      And run the command to apply changes:

      /usr/bin/selectorctl --apply-symlinks-rules
      +

    Managing interpreter version

    Managing interpreter versions is done by means of manipulating a set of symbolic links that point to different versions of interpreter binaries. For example, if default PHP binary is /usr/local/bin/php :

    • First we move the default binary inside CageFS to /usr/share/cagefs-skeleton/usr/selector , and make /usr/local/bin/php a symlink pointing to /etc/cl.selector/php . This operation is done as part of CageFS deployment.
    • Next suppose we have additional PHP version, say 7.2.5. The information about all additional interpreter binaries and paths for them is kept in /etc/cl.selector/selector.conf . This config file is updated by RPM package manager each time alternative PHP package is added, removed or updated
    • /usr/bin/selectorctl --list --interpreter=php will get us list of all available PHP interpreter versions out of /etc/cl.selector/selector.conf file . Next we want to know which PHP version is active for a given user (to supply a selected option in options list). We type:
    • /usr/bin/selectorctl --user USERNAME --interpreter=php --user-current will retrieve PHP version set for a particular user. The script gets the path from /var/cagefs/LAST_TWO_DIGITS_OF_UID/USERNAME/etc/cl.selector/php symlink, compares it with contents of /etc/cl.selector/selector.conf file and if path is valid, prints out the current interpreter version.
    • /usr/bin/selectorctl --user USERNAME --interpreter=php --set-user-current=7.2 sets the current PHP version for particular user by creating symlink in /var/cagefs/LAST_TWO_DIGITS_OF_UID/USERNAME/etc/cl.selector directory. All old symlinks are removed, and new symlinks are set.

    Including PHP Selector only with some packages (cPanel)

    cPanel has a ' Feature Manager ' in WHM that allows you to disable PHP Selector for some of the packages that you offer.

    In reality it only disables the icon in cPanel interface. Yet, in most cases it should be enough in shared hosting settings.

    You can find more info on ' Feature Manager ' here: http://docs.cpanel.net/twiki/bin/view/11_30/WHMDocs/FeatureManager

    Once PHP Selector is enabled, you can find it in the Feature Manager . Disabling it in Feature Manager , will remove the icon for users that are using that particular 'Feature List'

    PHP extensions

    Configuring Alt-PHP modules loading

    CloudLinux OS PHP Selector and Alt-PHP can be used in conjunction with Plesk PHP Selector and cPanel MultiPHP . To be compatible, CloudLinux OS PHP Selector works as follows: modules that are selected in CloudLinux OS PHP Selector are loaded for Alt-PHP version selected in CloudLinux OS PHP Selector only. For the rest Alt-PHP versions default module set is loaded ( /opt/alt/phpXX/etc/php.d/default.ini ) . Described above is default behavior.

    Note

    If system default PHP version selected in cPanel MultiPHP Manager is not ea-php, then default module set is loaded for all Alt-PHP versions by default (/opt/alt/phpXX/etc/php.d/default.ini).

    When "php.d.location = selector" option is in effect, modules selected via PHP Selector will be loaded for all alt-php versions.

    This behavior is implemented in CageFS-6.1-10 and later.

    In LVE Manager 1.0-9.40+ this behavior can be modified so that modules selected in CloudLinux OS PHP Selector would be loaded for all Alt-PHP versions (with CageFS enabled), which can be quite useful if you use  ‘ per directory ’ or ‘ per domain ’ Alt-PHP configuration and want to select modules using CloudLinux OS PHP Selector .

    To modify it, create a file /etc/cl.selector/symlinks.rules (read-only for regular users) with the following content: php.d.location = selector

    And run the command to apply changes:

    /usr/bin/selectorctl --apply-symlinks-rules
     
    To revert to the default behavior:
    • Delete /etc/cl.selector/symlinks.rules file.
    • Alternatively remove php.d.location option from the file.
    • Alternatively set default value for php.d.location option.

    And run the command to apply changes:

    /usr/bin/selectorctl --apply-symlinks-rules
     

    FFmpeg

    Note

    The PHP-FFmpeg project has not been renewed for the last few years and is not compatible with the RHEL 8 based systems. Since code for alt-PHP-FFmpeg is outdated and FFmpeg has a lot of third-party dependencies, this module is not available for CloudLinux OS 8.

    Due to possible patent issues CloudLinux OS does not provide FFmpeg libraries ( https://ffmpeg.org/legal.html ). We highly recommend researching if you can legally install FFmpeg extension on your server. This might differ based on where you and your servers are located. More information can be found on the link: https://ffmpeg.org/legal.html

    For your convenience we provide FFMPEG PHP binding. For them to work, you need to install FFmpeg package from the “Nux Dextop” repository following the instructions.

    Once FFmpeg is installed you can install PHP bindings, by running:

    yum install alt-php*ffmpeg 
     

    Enable PHP-FFmpeg extension via PHP Selector :

    selectorctl --enable-extensions=ffmpeg --user USERNAME --version X.Y
    @@ -919,7 +919,7 @@ php-cli 7.2 7.2.20 /opt/alt/php72/usr/bin/php
     
    1. Make sure that /opt/alt/php72/etc/php.d.all path refers to the directory containing ini files for non-zts PHP extensions:
    cd /opt/alt/php72/etc
     ln -fsn php.d.all.def php.d.all
     
    1. Execute the following command:
    cagefsctl --setup-cl-selector
    -

    Using

    `,68)),s("p",null,[e[290]||(e[290]=t("Once ")),e[291]||(e[291]=s("span",{class:"notranslate"},"PHP Selector",-1)),e[292]||(e[292]=t(" is installed, you will see the ")),s("span",Ie,[n(i,{to:"/cloudlinuxos/lve_manager/#selector-tab"},{default:a(()=>e[289]||(e[289]=[s("strong",null,"Selector",-1)])),_:1})]),e[293]||(e[293]=t(" tab in the ")),e[294]||(e[294]=s("span",{class:"notranslate"},[s("strong",null,"LVE Manager")],-1)),e[295]||(e[295]=t("."))]),s("p",null,[e[297]||(e[297]=t("Customers can use ")),n(i,{to:"/cloudlinuxos/lve_manager/#php-selector-client-plugin"},{default:a(()=>e[296]||(e[296]=[t("PHP Selector client plugin")])),_:1}),e[298]||(e[298]=t(" to change their PHP Selctor related settings."))]),e[733]||(e[733]=l(`

    Custom PHP.ini options

    PHP Selector allows customer to edit php.ini settings. Admin has a full control over which settings can be modified.

    To allow settings to be modifiable, it has to be whitelisted in /etc/cl.selector/php.conf.

    Here are some of the examples of allowed directives:

    Directive = safe_mode
    +

    Using

    `,68)),s("p",null,[e[288]||(e[288]=t("Once ")),e[289]||(e[289]=s("span",{class:"notranslate"},"PHP Selector",-1)),e[290]||(e[290]=t(" is installed, you will see the ")),s("span",ke,[a(n,{to:"/cloudlinuxos/lve_manager/#selector-tab"},{default:i(()=>e[287]||(e[287]=[s("strong",null,"Selector",-1)])),_:1})]),e[291]||(e[291]=t(" tab in the ")),e[292]||(e[292]=s("span",{class:"notranslate"},[s("strong",null,"LVE Manager")],-1)),e[293]||(e[293]=t("."))]),s("p",null,[e[295]||(e[295]=t("Customers can use ")),a(n,{to:"/cloudlinuxos/lve_manager/#php-selector-client-plugin"},{default:i(()=>e[294]||(e[294]=[t("PHP Selector client plugin")])),_:1}),e[296]||(e[296]=t(" to change their PHP Selctor related settings."))]),e[721]||(e[721]=l(`

    Custom PHP.ini options

    PHP Selector allows customer to edit php.ini settings. Admin has a full control over which settings can be modified.

    To allow settings to be modifiable, it has to be whitelisted in /etc/cl.selector/php.conf.

    Here are some of the examples of allowed directives:

    Directive = safe_mode
     Type      = bool
     Remark    = <5.4.0
     Comment   = Enables PHP safe mode. This mode puts a number of restrictions on scripts (say, access to file system) mainly for security reasons.
    @@ -927,7 +927,7 @@ Comment   = Enables PHP safe mode. This mode puts a number of restrictions on sc
     Type      = value
     Remark    = <5.4.0
     Comment   = If PHP is in the safe mode and a script tries to access some files, files from this directory will bypass security (UID/GID) checks. The directory must also be in include_path. For example: /dir/inc
    -
    Directivephp.ini setting
    Typebool, value (any text), list
    Rangelist of values for list Type
    Commentexplanation of the setting to display in UI

    Default values, that are shown in PHP Selector web interface, are taken from '/opt/alt/phpXX/usr/bin/php -i' runtime values, if directive is not there, it will use the output of phpinfo() function. So, if you wish to change default value of any option for "alternative" php version, please modify /opt/alt/phpXX/etc/php.ini files (where XX = 55, 54, 53, etc according to php version).

    `,8)),s("p",null,[e[300]||(e[300]=t("Admin can modify the settings using ")),s("span",Ce,[n(i,{to:"/cloudlinuxos/command-line_tools/#selectorctl"},{default:a(()=>e[299]||(e[299]=[t("selectorctl")])),_:1})]),e[301]||(e[301]=t(" command."))]),e[734]||(e[734]=l('

    Users can use web interface to modify php.ini settings:

    End user files and directories

    The following files and directories are created inside CageFS for each customer:

    /etc/cl.selector - PHP binaries symbolic links.

    /usr/selector/php - Native PHP binaries.

    /etc/cl.php.d/alt-php* - Links to enabled modules.

    /home/user/.cl.selector/alt_phpXX.cfg - Config file for custom PHP options.

    like:

    /etc/cl.php.d/alt-php54/fileinfo.ini - /opt/alt/php54/etc/php.d.all/fileinfo.ini

    Compiling your own extensions

    Sometimes you might want to compile your own PHP extension for your users to use. In most cases, it is better to contact our support by sending us a support ticket . We will try to provide such extension for you via regular updates within 5-7 days.

    If you have decided that you want to build it on your own, you would need to build it for each and every supported version of PHP that you have installed. The module installation process is a bit different from standard - you would need to use the version of phpize and php-config binaries that come with particular Alt-PHP version.

    The full process for PHP 5.X and 7.X looks as follows:

    1. Download and unpack extension, cd into it's directory.

    2. Execute our version of phpize if necessary:

    /opt/alt/phpXX/usr/bin/phpize
    +
    Directivephp.ini setting
    Typebool, value (any text), list
    Rangelist of values for list Type
    Commentexplanation of the setting to display in UI

    Default values, that are shown in PHP Selector web interface, are taken from '/opt/alt/phpXX/usr/bin/php -i' runtime values, if directive is not there, it will use the output of phpinfo() function. So, if you wish to change default value of any option for "alternative" php version, please modify /opt/alt/phpXX/etc/php.ini files (where XX = 55, 54, 53, etc according to php version).

    `,8)),s("p",null,[e[298]||(e[298]=t("Admin can modify the settings using ")),s("span",Pe,[a(n,{to:"/cloudlinuxos/command-line_tools/#selectorctl"},{default:i(()=>e[297]||(e[297]=[t("selectorctl")])),_:1})]),e[299]||(e[299]=t(" command."))]),e[722]||(e[722]=l('

    Users can use web interface to modify php.ini settings:

    End user files and directories

    The following files and directories are created inside CageFS for each customer:

    /etc/cl.selector - PHP binaries symbolic links.

    /usr/selector/php - Native PHP binaries.

    /etc/cl.php.d/alt-php* - Links to enabled modules.

    /home/user/.cl.selector/alt_phpXX.cfg - Config file for custom PHP options.

    like:

    /etc/cl.php.d/alt-php54/fileinfo.ini - /opt/alt/php54/etc/php.d.all/fileinfo.ini

    Compiling your own extensions

    Sometimes you might want to compile your own PHP extension for your users to use. In most cases, it is better to contact our support by sending us a support ticket . We will try to provide such extension for you via regular updates within 5-7 days.

    If you have decided that you want to build it on your own, you would need to build it for each and every supported version of PHP that you have installed. The module installation process is a bit different from standard - you would need to use the version of phpize and php-config binaries that come with particular Alt-PHP version.

    The full process for PHP 5.X and 7.X looks as follows:

    1. Download and unpack extension, cd into it's directory.

    2. Execute our version of phpize if necessary:

    /opt/alt/phpXX/usr/bin/phpize
     
    1. Execute configure with our binary:
    ./configure --with-php-config=/opt/alt/phpXX/usr/bin/php-config
     
    1. Make the .so file:
    make
     
    1. Copy it to the modules directory (on 32-bit server, use usr/lib/php/modules ).
    cp -rp modules/*.so /opt/alt/phpXX/usr/lib64/php/modules/
    @@ -952,14 +952,14 @@ native e d -
     yum install cagefs lvemanager
     

    (no need to initialize or turn on CageFS)

    selectorctl --setup-without-cagefs USER
     

    ( USER - the name of a user who is using selector. If not specified, the first available cPanel account username will be used).

    When executing --setup-without-cagefs, the following actions are performed:

    • Creating symlinks to the user modules and options for each Alt-PHP version:
      /opt/alt/php55/link/conf/alt_php.ini -> /home/USER/.cl.selector/alt_php55.ini

    • In user home directory creating:
      .cl.selector/

    “Backup” settings files (selected version, modules, options):
    .cl.selector/defaults.cfg
    .cl.selector/alt_php44.cfg

    Symlinks to the selected version:
    .cl.selector/lsphp -> /opt/alt/php44/usr/bin/lsphp
    .cl.selector/php.ini -> /opt/alt/php44/etc/php.ini
    .cl.selector/php-cli -> /opt/alt/php44/usr/bin/php
    .cl.selector/php -> /opt/alt/php44/usr/bin/php-cgi

    Additional symlinks for environment variable $PATH (search path) in the file ~/.bashrc :
    .cl.selector/selector.path/
    .cl.selector/selector.path/php-cgi -> ../php
    .cl.selector/selector.path/php -> ../php-cli

    Generated ini files with selected modules and options for each version: .cl.selector/alt_php44.ini
    .cl.selector/alt_php51.ini
    .cl.selector/alt_php52.ini
    .cl.selector/alt_php53.ini
    .cl.selector/alt_php54.ini
    .cl.selector/alt_php55.ini
    .cl.selector/alt_php56.ini
    .cl.selector/alt_php70.ini
    .cl.selector/alt_php71.ini

    Symlinks above are being created according to the settings in ~/.cl.selector/defaults.cfg and ~/.cl.selector/alt_php44.cfg files (44 - corresponding PHP version), which are storing PHP Selector settings for the user. These files are usually taken from user home directory backup or when migrating account from another server. Thus, when migrating account from server to server, PHP Selector settings are saved.

    If no PHP Selector settings backup files are found when running selectorctl --setup-without-cagefs, then default settings from /etc/cl.selector/defaults.cfg global file are applied (as in selector normal mode). If the file is absent, then native PHP version will be selected for the user.

    • The following line: PATH=$HOME/.cl.selector/selector.path:$HOME/.cl.selector:$PATH

    is being added to the user file ~/.bashrc

    Apache PHP handlers settings are not changed.

    • Also selectorctl --setup-without-cagefs command does the following:

      • Turns off link traversal protection (linksafe);
      • Turns off cagefs service.

    To get back to the selector normal mode (“with CageFS”) run:

    selectorctl --revert-to-cagefs
    -

    (CageFS should be initialized by using cagefsctl --init command before running the command above)

    This command removes symlinks:
    /opt/alt/php55/link/conf/alt_php.ini -> /home/USER/.cl.selector/alt_php55.ini turns on link traversal protection (linksafe) and cagefs service.

    `,68)),s("div",qe,[e[304]||(e[304]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[303]||(e[303]=t("See also PHP Selector ")),n(i,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:a(()=>e[302]||(e[302]=[t("CLI")])),_:1})])]),e[735]||(e[735]=l(`

    Configuring "global” php.ini options for all Alt-PHP versions

    Note

    CageFS 6.0-33 or higher, LVE Manager 2.0-11.2 or higher

    There is /etc/cl.selector/global_php.ini file, where you can specify values of PHP options that should be applied for all Alt-PHP versions that are installed on a server. These settings will also be automatically applied to the new Alt-PHP versions that will be installed later.

    Example:
    # cat /etc/cl.selector/global_php.ini
    [Global PHP Settings]
    date.timezone = Europe/Warsaw
    error_log = error_log
    memory_limit = 192M
    Sections are ignored. Only name of an option and a value have meaning.

    When an option is absent in /etc/cl.selector/global_php.ini file, than it is not changed (applied) to php.ini for Alt-PHP versions.

    date.timezone and error_log options are handled differently than the others. When these options are not in /etc/cl.selector/global_php.ini file, than values for the options will be taken from "native" php.ini file. And when the option is in php.ini for some Alt-PHP version already (and its value is not empty), than value from /etc/cl.selector/global_php.ini will be NOT applied.

    Note

    CageFS version 6.1.5-1 or later

    The behavior above is changed for cPanel servers with EasyApache 4. The /usr/local/lib/php.ini file is removed for new installations of cPanel v80 and later.

    • When /usr/local/lib/php.ini file exists, error_log and date.timezone options will be taken from that php.ini file.
    • When /usr/local/lib/php.ini file does not exist, error_log and date.timezone options will be taken from the php.ini file for system default PHP version selected in MultiPHP Manager.

    This functionality works when the system default PHP version is ea-php only. When the system default PHP version is alt-php, error_log and date.timezone directives will be NOT taken from that php.ini file.

    To confirm changes (not affecting "date.timezone" and "error_log" options) please run:

    /usr/sbin/cagefsctl --setup-cl-selector
    +

    (CageFS should be initialized by using cagefsctl --init command before running the command above)

    This command removes symlinks:
    /opt/alt/php55/link/conf/alt_php.ini -> /home/USER/.cl.selector/alt_php55.ini turns on link traversal protection (linksafe) and cagefs service.

    `,68)),s("div",Ee,[e[302]||(e[302]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[301]||(e[301]=t("See also PHP Selector ")),a(n,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:i(()=>e[300]||(e[300]=[t("CLI")])),_:1})])]),e[723]||(e[723]=l(`

    Configuring "global” php.ini options for all Alt-PHP versions

    Note

    CageFS 6.0-33 or higher, LVE Manager 2.0-11.2 or higher

    There is /etc/cl.selector/global_php.ini file, where you can specify values of PHP options that should be applied for all Alt-PHP versions that are installed on a server. These settings will also be automatically applied to the new Alt-PHP versions that will be installed later.

    Example:
    # cat /etc/cl.selector/global_php.ini
    [Global PHP Settings]
    date.timezone = Europe/Warsaw
    error_log = error_log
    memory_limit = 192M
    Sections are ignored. Only name of an option and a value have meaning.

    When an option is absent in /etc/cl.selector/global_php.ini file, than it is not changed (applied) to php.ini for Alt-PHP versions.

    date.timezone and error_log options are handled differently than the others. When these options are not in /etc/cl.selector/global_php.ini file, than values for the options will be taken from "native" php.ini file. And when the option is in php.ini for some Alt-PHP version already (and its value is not empty), than value from /etc/cl.selector/global_php.ini will be NOT applied.

    Note

    CageFS version 6.1.5-1 or later

    The behavior above is changed for cPanel servers with EasyApache 4. The /usr/local/lib/php.ini file is removed for new installations of cPanel v80 and later.

    • When /usr/local/lib/php.ini file exists, error_log and date.timezone options will be taken from that php.ini file.
    • When /usr/local/lib/php.ini file does not exist, error_log and date.timezone options will be taken from the php.ini file for system default PHP version selected in MultiPHP Manager.

    This functionality works when the system default PHP version is ea-php only. When the system default PHP version is alt-php, error_log and date.timezone directives will be NOT taken from that php.ini file.

    To confirm changes (not affecting "date.timezone" and "error_log" options) please run:

    /usr/sbin/cagefsctl --setup-cl-selector
     

    To confirm changes (including date.timezone and error_log options) please run:

    /usr/bin/selectorctl --apply-global-php-ini
     
    or
    /usr/sbin/cagefsctl --apply-global-php-ini
     
    (two commands above work the same way).

    If you don't want to change error_log, but want to change date.timezone, you can execute:

    selectorctl --apply-global-php-ini date.timezone
     

    Similarly, command selectorctl --apply-global-php-ini error_log applies error_log and all other options specified in /etc/cl.selector/global_php.ini file, except date.timezone .

    So, you can specify 0, 1 or 2 parameters from the list: error_log, date.timezone .

    Using --apply-global-php-ini without arguments applies all global PHP options including two above.

    Example:

    selectorctl --apply-global-php-ini error_log
     selectorctl --apply-global-php-ini date.timezone
     selectorctl --apply-global-php-ini date.timezone error_log
    -

    The latter command has the same effect as /usr/bin/selectorctl --apply-global-php-ini.

    `,25)),s("div",Le,[e[307]||(e[307]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[306]||(e[306]=t("See also PHP Selector ")),n(i,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:a(()=>e[305]||(e[305]=[t("CLI")])),_:1})])]),e[736]||(e[736]=l(`

    Integration with control panels

    This is the list of commands that we use to integrate PHP Selector with control panels.

    PHP summary:

    Command:

    /usr/bin/selectorctl --summary
    +

    The latter command has the same effect as /usr/bin/selectorctl --apply-global-php-ini.

    `,25)),s("div",Ie,[e[305]||(e[305]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[304]||(e[304]=t("See also PHP Selector ")),a(n,{to:"/cloudlinuxos/command-line_tools/#php-selector"},{default:i(()=>e[303]||(e[303]=[t("CLI")])),_:1})])]),e[724]||(e[724]=l(`

    Integration with control panels

    This is the list of commands that we use to integrate PHP Selector with control panels.

    PHP summary:

    Command:

    /usr/bin/selectorctl --summary
     
    Result:
    4.4 e -
     5.1 e -
     5.2 e -
    @@ -1010,18 +1010,18 @@ native(5.6) e d
     

    Set php.ini options for end user:

    /usr/bin/selectorctl --user=_USER_ --version=_VERSION_ --replace-options=_OPTIONS_ --base64 [--json]
     

    Here is an example of how you can generate OPTIONS in base64 format:

    OPTIONS=\`echo disable_functions:exec,syslog|base64 -w 0\`,\`echo display_errors:off|base64 -w 0\`,\`echo post_max_size:128M|base64 -w 0\`
     echo $OPTIONS
    -
    `,50)),s("p",null,[e[309]||(e[309]=t("See also ")),n(i,{to:"/command-line_tools/#php-selector"},{default:a(()=>e[308]||(e[308]=[t("PHP Selector CLI tools")])),_:1}),e[310]||(e[310]=t("."))]),e[737]||(e[737]=l('

    Bundled PHP extensions

    You can find this information in the section List of extensions supported by the alt&ea team for each version of PHP

    Python Selector

    General information

    Python Selector is a CloudLinux OS component that allows each user to easily deploy and manage Python applications. Users can manage applications at the control panel interface level or from the command line (CLI).

    Requirements

    • cPanel or DirectAdmin control panel. Plesk isn't supported.
    • Apache or LiteSpeed webserver. Apache + Nginx (as a reverse proxy) combination is also supported.
    • Python Selector uses mod_passenger to host Python. For more details about mod_passenger, please read documentation. The needed version will be installed along with Python Selector.

    Note!

    OpenLiteSpeed is not compatible with Python Selector due to lack of .htaccess support.

    Supported versions

    CloudLinux 6CloudLinux 7CloudLinux 8CloudLinux 9
    alt-python 2.7alt-python 2.7alt-python 2.7alt-python 2.7
    alt-python 3.3alt-python 3.3alt-python 3.3alt-python 3.3
    alt-python 3.4alt-python 3.4alt-python 3.4alt-python 3.4
    alt-python 3.5alt-python 3.5alt-python 3.5alt-python 3.5
    alt-python 3.6alt-python 3.6alt-python 3.6alt-python 3.6
    alt-python 3.7alt-python 3.7alt-python 3.7alt-python 3.7
    alt-python 3.8alt-python 3.8alt-python 3.8alt-python 3.8
    alt-python 3.9alt-python 3.9alt-python 3.9alt-python 3.9
    alt-python 3.11alt-python 3.10alt-python 3.10alt-python 3.10
    alt-python 3.11alt-python 3.11alt-python 3.11
    alt-python 3.12alt-python 3.12alt-python 3.12

    Installation

    ',11)),s("p",null,[e[312]||(e[312]=t("You can install Python Selector using the ")),n(i,{to:"/cloudlinuxos/lve_manager/#cloudlinux-os-shared-installation-wizard"},{default:a(()=>e[311]||(e[311]=[t("CloudLinux OS Installation Wizard")])),_:1}),e[313]||(e[313]=t("."))]),e[738]||(e[738]=s("p",null,"After installation, please make sure that you have set appropriate checkboxes in CloudLinux Manager Options tab to show Python App in the web-interface.",-1)),e[739]||(e[739]=s("h4",{id:"manual-installation",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#manual-installation","aria-hidden":"true"},"#"),t(" Manual installation")],-1)),e[740]||(e[740]=s("p",null,"Here you can find the installation steps for supported control panels:",-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cpanel-1"},{default:a(()=>e[314]||(e[314]=[t("cPanel")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#directadmin"},{default:a(()=>e[315]||(e[315]=[t("DirectAdmin")])),_:1})])]),e[741]||(e[741]=l(`

    cPanel

    To use Python Selector, it is required to install the following:

    • alternative Python packages by running the following command:
    yum groupinstall alt-python
    +
    `,50)),s("p",null,[e[307]||(e[307]=t("See also ")),a(n,{to:"/command-line_tools/#php-selector"},{default:i(()=>e[306]||(e[306]=[t("PHP Selector CLI tools")])),_:1}),e[308]||(e[308]=t("."))]),e[725]||(e[725]=l('

    Bundled PHP extensions

    You can find this information in the section List of extensions supported by the alt&ea team for each version of PHP

    Python Selector

    General information

    Python Selector is a CloudLinux OS component that allows each user to easily deploy and manage Python applications. Users can manage applications at the control panel interface level or from the command line (CLI).

    Requirements

    • cPanel or DirectAdmin control panel. Plesk isn't supported.
    • Apache or LiteSpeed webserver. Apache + Nginx (as a reverse proxy) combination is also supported.
    • Python Selector uses mod_passenger to host Python. For more details about mod_passenger, please read documentation. The needed version will be installed along with Python Selector.

    Note!

    OpenLiteSpeed is not compatible with Python Selector due to lack of .htaccess support.

    Supported versions

    CloudLinux 6CloudLinux 7CloudLinux 8CloudLinux 9
    alt-python 2.7alt-python 2.7alt-python 2.7alt-python 2.7
    alt-python 3.3alt-python 3.3alt-python 3.3alt-python 3.3
    alt-python 3.4alt-python 3.4alt-python 3.4alt-python 3.4
    alt-python 3.5alt-python 3.5alt-python 3.5alt-python 3.5
    alt-python 3.6alt-python 3.6alt-python 3.6alt-python 3.6
    alt-python 3.7alt-python 3.7alt-python 3.7alt-python 3.7
    alt-python 3.8alt-python 3.8alt-python 3.8alt-python 3.8
    alt-python 3.9alt-python 3.9alt-python 3.9alt-python 3.9
    alt-python 3.11alt-python 3.10alt-python 3.10alt-python 3.10
    alt-python 3.11alt-python 3.11alt-python 3.11
    alt-python 3.12alt-python 3.12alt-python 3.12

    Installation

    ',11)),s("p",null,[e[310]||(e[310]=t("You can install Python Selector using the ")),a(n,{to:"/cloudlinuxos/lve_manager/#cloudlinux-os-shared-installation-wizard"},{default:i(()=>e[309]||(e[309]=[t("CloudLinux OS Installation Wizard")])),_:1}),e[311]||(e[311]=t("."))]),e[726]||(e[726]=s("p",null,"After installation, please make sure that you have set appropriate checkboxes in CloudLinux Manager Options tab to show Python App in the web-interface.",-1)),e[727]||(e[727]=s("h4",{id:"manual-installation",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#manual-installation","aria-hidden":"true"},"#"),t(" Manual installation")],-1)),e[728]||(e[728]=s("p",null,"Here you can find the installation steps for supported control panels:",-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cpanel-1"},{default:i(()=>e[312]||(e[312]=[t("cPanel")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#directadmin"},{default:i(()=>e[313]||(e[313]=[t("DirectAdmin")])),_:1})])]),e[729]||(e[729]=l(`

    cPanel

    To use Python Selector, it is required to install the following:

    • alternative Python packages by running the following command:
    yum groupinstall alt-python
     
    • CloudLinux Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command:
    yum install lvemanager lve-utils alt-python-virtualenv
     

    Phusion Passenger could be installed by using either ea-ruby24-mod_passenger or ea-ruby27-mod_passenger. ea-ruby27-mod_passenger is not compatible with systems running CloudLinux OS 6. CloudLinux OS 7 supports both ea-ruby24-mod_passenger and ea-ruby27-mod_passenger. If your system runs CloudLinux OS 8, you can only use ea-ruby27-mod_passenger.

    Adding Python module requires executing permissions to gcc/make binaries. Please enable compilers in Compiler Access section of WHM, then run:

    cagefsctl --force-update
    -
    `,9)),s("ul",null,[s("li",null,[e[317]||(e[317]=t("We recommend use CageFS for better security. See ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:a(()=>e[316]||(e[316]=[t("CageFS documentation for details")])),_:1}),e[318]||(e[318]=t("."))])]),e[742]||(e[742]=l(`

    DirectAdmin

    To use Python Selector, it is required to install the following:

    • alternative Python packages by running the following command:
    yum groupinstall alt-python
    +
    `,9)),s("ul",null,[s("li",null,[e[315]||(e[315]=t("We recommend use CageFS for better security. See ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[314]||(e[314]=[t("CageFS documentation for details")])),_:1}),e[316]||(e[316]=t("."))])]),e[730]||(e[730]=l(`

    DirectAdmin

    To use Python Selector, it is required to install the following:

    • alternative Python packages by running the following command:
    yum groupinstall alt-python
     
    • CloudLinux Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command:
    yum install lve-utils lvemanager alt-python-virtualenv alt-mod-passenger
    -
    `,6)),s("ul",null,[s("li",null,[s("p",null,[e[320]||(e[320]=t("We recommend use CageFS for better security. See ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:a(()=>e[319]||(e[319]=[t("CageFS documentation for details")])),_:1}),e[321]||(e[321]=t("."))])]),s("li",null,[s("p",null,[e[323]||(e[323]=t("See also ")),n(i,{to:"/cloudlinuxos/lve_manager/#python-selector"},{default:a(()=>e[322]||(e[322]=[t("Python Selector UI")])),_:1}),e[324]||(e[324]=t("."))])]),s("li",null,[s("p",null,[e[326]||(e[326]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#python-selector"},{default:a(()=>e[325]||(e[325]=[t("Python Selector CLI")])),_:1}),e[327]||(e[327]=t("."))])])]),e[743]||(e[743]=l('

    Ruby Selector

    General information and requirements

    We have the ability to deploy Ruby applications via an application server. Ruby Selector uses mod_passenger to host Ruby applications.

    Ruby Selector works only on cPanel/WHM servers.

    Supported versions

    Installation and update

    Note

    The instructions below are suitable only for EasyApache 3 and EasyApache 4. You should follow this instruction if you use LiteSpeed.

    To use Ruby Selector install alternative Ruby packages:

    yum groupinstall alt-ruby 
    -
    `,10)),s("div",Te,[e[335]||(e[335]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[329]||(e[329]=t("After installation, please make sure that you have unmarked appropriate checkboxes in ")),e[330]||(e[330]=s("span",{class:"notranslate"}," VE Manager Options",-1)),e[331]||(e[331]=t(" tab to show ")),e[332]||(e[332]=s("span",{class:"notranslate"},"Ruby App",-1)),e[333]||(e[333]=t(" in web-interface. Find the instructions on the ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#hide-ruby-selector-icon"},{default:a(()=>e[328]||(e[328]=[t("link")])),_:1}),e[334]||(e[334]=t("."))])]),e[744]||(e[744]=l('

    Note

    Adding Ruby modules requires executing permissions to gcc/make binaries. Please enable compilers in Compiler Access section of WHM, then run: cagefsctl --force-update

    Configuration and using

    ',2)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/lve_manager/#ruby-selector-client-plugin"},{default:a(()=>e[336]||(e[336]=[t("End user access")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#hide-ruby-selector-icon"},{default:a(()=>e[337]||(e[337]=[t("Hide Ruby Selector icon")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#deploying-redmine-using-ruby-selector"},{default:a(()=>e[338]||(e[338]=[t("Deploying Redmine using Ruby Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#easyapache-4-2"},{default:a(()=>e[339]||(e[339]=[t("EasyApache 4")])),_:1})])]),e[745]||(e[745]=s("h4",{id:"end-user-access",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#end-user-access","aria-hidden":"true"},"#"),t(" End user access")],-1)),e[746]||(e[746]=s("p",null,[t("You can find an example of Ruby application setup "),s("a",{href:"https://cloudlinux.zendesk.com/hc/en-us/articles/115004495049-How-to-run-Redmine-with-Ruby-Selector",target:"_blank",rel:"noopener noreferrer"},"here")],-1)),s("div",Oe,[e[343]||(e[343]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[341]||(e[341]=t("See also Ruby Selector ")),n(i,{to:"/cloudlinuxos/command-line_tools/#ruby-selector"},{default:a(()=>e[340]||(e[340]=[t("CLI")])),_:1}),e[342]||(e[342]=t(" section."))])]),e[747]||(e[747]=l('

    Hide Ruby Selector icon

    It is possible to hide or show Ruby Selector icon by marking or unmarking proper checkboxes in LVE Manager Options tab.

    The same result can be accomplished in CLI by running:

    cloudlinux-config set --json --data '{"options":{"uiSettings":{"hideRubyApp":false}}}'
    +
    `,6)),s("ul",null,[s("li",null,[s("p",null,[e[318]||(e[318]=t("We recommend use CageFS for better security. See ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#cagefs"},{default:i(()=>e[317]||(e[317]=[t("CageFS documentation for details")])),_:1}),e[319]||(e[319]=t("."))])]),s("li",null,[s("p",null,[e[321]||(e[321]=t("See also ")),a(n,{to:"/cloudlinuxos/lve_manager/#python-selector"},{default:i(()=>e[320]||(e[320]=[t("Python Selector UI")])),_:1}),e[322]||(e[322]=t("."))])]),s("li",null,[s("p",null,[e[324]||(e[324]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#python-selector"},{default:i(()=>e[323]||(e[323]=[t("Python Selector CLI")])),_:1}),e[325]||(e[325]=t("."))])])]),e[731]||(e[731]=l('

    Ruby Selector

    General information and requirements

    We have the ability to deploy Ruby applications via an application server. Ruby Selector uses mod_passenger to host Ruby applications.

    Ruby Selector works only on cPanel/WHM servers.

    Supported versions

    Installation and update

    Note

    The instructions below are suitable only for EasyApache 3 and EasyApache 4. You should follow this instruction if you use LiteSpeed.

    To use Ruby Selector install alternative Ruby packages:

    yum groupinstall alt-ruby 
    +
    `,10)),s("div",Ce,[e[333]||(e[333]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[327]||(e[327]=t("After installation, please make sure that you have unmarked appropriate checkboxes in ")),e[328]||(e[328]=s("span",{class:"notranslate"}," VE Manager Options",-1)),e[329]||(e[329]=t(" tab to show ")),e[330]||(e[330]=s("span",{class:"notranslate"},"Ruby App",-1)),e[331]||(e[331]=t(" in web-interface. Find the instructions on the ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#hide-ruby-selector-icon"},{default:i(()=>e[326]||(e[326]=[t("link")])),_:1}),e[332]||(e[332]=t("."))])]),e[732]||(e[732]=l('

    Note

    Adding Ruby modules requires executing permissions to gcc/make binaries. Please enable compilers in Compiler Access section of WHM, then run: cagefsctl --force-update

    Configuration and using

    ',2)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/lve_manager/#ruby-selector-client-plugin"},{default:i(()=>e[334]||(e[334]=[t("End user access")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#hide-ruby-selector-icon"},{default:i(()=>e[335]||(e[335]=[t("Hide Ruby Selector icon")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#deploying-redmine-using-ruby-selector"},{default:i(()=>e[336]||(e[336]=[t("Deploying Redmine using Ruby Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#easyapache-4-2"},{default:i(()=>e[337]||(e[337]=[t("EasyApache 4")])),_:1})])]),e[733]||(e[733]=s("h4",{id:"end-user-access",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#end-user-access","aria-hidden":"true"},"#"),t(" End user access")],-1)),e[734]||(e[734]=s("p",null,[t("You can find an example of Ruby application setup "),s("a",{href:"https://cloudlinux.zendesk.com/hc/en-us/articles/115004495049-How-to-run-Redmine-with-Ruby-Selector",target:"_blank",rel:"noopener noreferrer"},"here")],-1)),s("div",qe,[e[341]||(e[341]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[339]||(e[339]=t("See also Ruby Selector ")),a(n,{to:"/cloudlinuxos/command-line_tools/#ruby-selector"},{default:i(()=>e[338]||(e[338]=[t("CLI")])),_:1}),e[340]||(e[340]=t(" section."))])]),e[735]||(e[735]=l('

    Hide Ruby Selector icon

    It is possible to hide or show Ruby Selector icon by marking or unmarking proper checkboxes in LVE Manager Options tab.

    The same result can be accomplished in CLI by running:

    cloudlinux-config set --json --data '{"options":{"uiSettings":{"hideRubyApp":false}}}'
     

    Note

    If you are using cPanel/WHM, you can also configure hide/show CloudLinux OS Ruby Selectors in WHM | Feature Manager. For that, you’d need to first uncheck Hide Ruby App in web-interface in the LVE Manager. This will make the menu appear for all accounts. After that, you are free to disable this app in WHM | Feature Manager for the required feature lists.

    Deploying Redmine using Ruby Selector

    Note

    You can find Redmine version 2.6.0 and newer deployment guide here

    EasyApache 4

    Note

    ea-apache24-mod-alt-passenger is deprecated in favor of ea-ruby24-mod_passenger and ea-ruby27-mod_passenger

    Starting with cPanel/WHM version 66 provides ea-ruby24-mod_passenger (more information on the link), this allows creating Ruby applications with cPanel application manager.

    CloudLinux OS features its own Python and Ruby Selectors, which allow creating applications with one of mod_passenger Apache modules:

    • ea-ruby24-mod_passenger
    • ea-ruby27-mod_passenger

    ea-ruby27-mod_passenger is not compatible with systems running CloudLinux OS 6. CloudLinux OS 7 supports both ea-ruby24-mod_passenger and ea-ruby27-mod_passenger. If your system runs CloudLinux OS 8, you can only use ea-ruby27-mod_passenger.

    The ea-ruby2X-mod_passenger allows you to run applications via cPanel application manager and Ruby Selector.

    To install, run:

    yum install lvemanager alt-python-virtualenv
     yum install ea-ruby24-mod_passenger
     

    or:

    yum install lvemanager alt-python-virtualenv
     yum install ea-ruby27-mod_passenger
    -
    `,19)),s("p",null,[e[345]||(e[345]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#ruby-selector"},{default:a(()=>e[344]||(e[344]=[t("Ruby Selector CLI tools")])),_:1}),e[346]||(e[346]=t("."))]),e[748]||(e[748]=s("h2",{id:"node-js-selector",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js-selector","aria-hidden":"true"},"#"),t(" Node.js Selector")],-1)),e[749]||(e[749]=s("h3",{id:"general-information-and-requirements-6",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#general-information-and-requirements-6","aria-hidden":"true"},"#"),t(" General information and requirements")],-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#requirements-3"},{default:a(()=>e[347]||(e[347]=[t("Requirements")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#limitations"},{default:a(()=>e[348]||(e[348]=[t("Limitation")])),_:1})])]),e[750]||(e[750]=l('

    Node.js Selector is a CloudLinux OS component that allows each user to easily create Node.js applications, choose Node.js version and other parameters for applications based on their needs.

    Supported versions

    Requirements

    • Node.js Selector requires LVE Manager 4.0 or later.
    • It supports cPanel and DirectAdmin servers as well as non-panel installations (Plesk is not supported as it already has Node.js support.) For more details, please go to Plesk & Node.js documentation here and here .
    • Node.js Selector uses mod_passenger to host Node.js. For more details about mod_passenger and Node.js, please read documentation here and here .
    • Node.js Selector supports both EasyApache 3 and EasyApache 4.

    Note!

    OpenLiteSpeed is not compatible with Node.js Selector due to lack of .htaccess support.

    Limitations

    Since Node.js Selector uses mod_passenger to host Node.js, then Node.js Selector has the same limitations as Phusion Passenger. Phusion Passenger cannot load ECMAScript modules and can only load Common js modules. If you get an ERR_REQUIRE_ESM error when starting an application app.js.

    Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: app.js
    +
    `,19)),s("p",null,[e[343]||(e[343]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#ruby-selector"},{default:i(()=>e[342]||(e[342]=[t("Ruby Selector CLI tools")])),_:1}),e[344]||(e[344]=t("."))]),e[736]||(e[736]=s("h2",{id:"node-js-selector",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#node-js-selector","aria-hidden":"true"},"#"),t(" Node.js Selector")],-1)),e[737]||(e[737]=s("h3",{id:"general-information-and-requirements-6",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#general-information-and-requirements-6","aria-hidden":"true"},"#"),t(" General information and requirements")],-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#requirements-3"},{default:i(()=>e[345]||(e[345]=[t("Requirements")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#limitations"},{default:i(()=>e[346]||(e[346]=[t("Limitation")])),_:1})])]),e[738]||(e[738]=l('

    Node.js Selector is a CloudLinux OS component that allows each user to easily create Node.js applications, choose Node.js version and other parameters for applications based on their needs.

    Supported versions

    Requirements

    • Node.js Selector requires LVE Manager 4.0 or later.
    • It supports cPanel and DirectAdmin servers as well as non-panel installations (Plesk is not supported as it already has Node.js support.) For more details, please go to Plesk & Node.js documentation here and here .
    • Node.js Selector uses mod_passenger to host Node.js. For more details about mod_passenger and Node.js, please read documentation here and here .
    • Node.js Selector supports both EasyApache 3 and EasyApache 4.

    Note!

    OpenLiteSpeed is not compatible with Node.js Selector due to lack of .htaccess support.

    Limitations

    Since Node.js Selector uses mod_passenger to host Node.js, then Node.js Selector has the same limitations as Phusion Passenger. Phusion Passenger cannot load ECMAScript modules and can only load Common js modules. If you get an ERR_REQUIRE_ESM error when starting an application app.js.

    Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: app.js
     

    In this case you can use the following cjs wrapper app_wrapper.cjs to load esm script app.js:

    cat app_wrapper.cjs
     (() => import('app.js'))();
     

    Installation and update

    Note

    Node.js Selector support is added to LiteSpeed Web Server starting from the 5.3RC1 release. See details here.

    cPanel

    To use Node.js Selector, install Node.js packages by running the following command:

    yum groupinstall alt-nodejs
    @@ -1032,23 +1032,23 @@ yum install ea-ruby27-mod_passenger
     

    CloudLinux OS 6:

    \`\`\` service cpanel restart \`\`\`

    DirectAdmin

    To use Node.js Selector, please install Node.js packages by running the following command:

    yum groupinstall alt-nodejs6 alt-nodejs8 alt-nodejs9
     
    Also, please install LVE Manager, LVE Utils and Fusion Passenger by running the following command:
    yum install lvemanager lve-utils alt-mod-passenger
     
    And we recommend to install CageFS for better security (not mandatory) by running the following command:
    yum install cagefs
    -

    Node.js deployment

    `,41)),s("ul",null,[e[351]||(e[351]=s("li",null,[s("p",null,"The first approach - remote usage of Node.js Interpreters of different versions")],-1)),e[352]||(e[352]=s("li",null,[s("p",null,"The second approach - remote usage of the cloudlinux-selector utility.")],-1)),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#remote-usage-of-node-js-interpreters"},{default:a(()=>e[349]||(e[349]=[t("Remote usage of Node.js interpreters")])),_:1})])]),s("li",null,[s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility"},{default:a(()=>e[350]||(e[350]=[t("Remote usage of the cloudlinux-selector utility")])),_:1})])])]),e[751]||(e[751]=s("h4",{id:"remote-usage-of-node-js-interpreters",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#remote-usage-of-node-js-interpreters","aria-hidden":"true"},"#"),t(" Remote usage of Node.js interpreters")],-1)),s("ol",null,[e[358]||(e[358]=s("li",null,[t("Create a Node.js project in "),s("span",{class:"notranslate"}," IntelliJ IDEA/WebStorm "),t(" . You can download "),s("a",{href:"https://docs.cloudlinux.com/nodejs_example.zip",target:"_blank",rel:"noopener noreferrer"},"this archive"),t(" and use it as a basis.")],-1)),s("li",null,[e[354]||(e[354]=t("Install ")),e[355]||(e[355]=s("span",{class:"notranslate"}," alt-nodejs ",-1)),e[356]||(e[356]=t(" packages on the server in use. See ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-7"},{default:a(()=>e[353]||(e[353]=[t("installation instructions")])),_:1}),e[357]||(e[357]=t("."))]),e[359]||(e[359]=s("li",null,"Create an application on the server. You can do it by three ways:",-1))]),e[752]||(e[752]=l(`
    • Via UI of the Node.js plugin.
    • Using the following command to create an application:
    cloudlinux-selector create --interprete=nodejs --json --app-root=<USER_NAME> --app-uri=<APP_NAME> --app-mode=develompent --version=<VERSION> --domain=<DOMAIN>
    -

    Note

    In the IntelliJ IDEA you can create and run any remote script (Preferences — Remote SSH External Tools — Add).

    • Choose a location of the application on the server and synchronize the files with the IntelliJ IDEA project.
    1. Set up Run/Debug Configurations in the project created.

    • Specify a path to the remote Node.js interpreter. To be able to specify the remote interpreter, you should install the Node.js Remote Interpreter plugin first. Please find more information here , using server access credentials for a user (Main menu → Run → Edit configurations...) .
    • Specify initial JavaScript file that will be run with the node command (it is the app.js file from the archive).
    • Specify Path Mappings between a local and a remote project (Preferences → Deployments → Add) . If you have created your application with the cloudlinux-selector utility or via plugin UI the Path Mappings should be as follows:
    /home/<USER_NAME>/<APP_NAME>
    -
    1. Synchronize the project directories on the local and the remote machine as per Path Mappings specified.
    2. Deploy the modules on the remote and the local machine with the npm install command (if there are dependent modules). In the UI you can click the Run NPM Install button.
    3. Run Node.js application with the configuration set at the 4th step (Main menu → Run → Run… → Select configuration) .

    1. If you are using the application from the archive attached, you can see the running application on port 3003 — http://DOMAIN:3003 .

    Note

    The port should be available to a server user.

    The following information should be displayed on this page:

    • A version of the running Node.js interpreter;
    • Current environment variables;
    • The current time.

    So that, you can be sure that deployed modules are used properly.

    If you’d like to use a different version of Node.js to run an application, change a path to the interpreter in the configuration settings of the running.
    To apply all changes to the project, synchronize all changes with the server and restart the running application.

    1. To debug a script, set breakpoints in the code and run the configuration via Main Menu (Main menu → Run → Debug… → Select configuration) .

    Useful links:

    Note

    It is not required to install Passenger while working in IDE if you are using this approach.

    Remote usage of the cloudlinux-selector utility

    1. Create an application via UI or with the command as described in the Remote Usage of Node.js Interpreters approach, step 3 (a,b).
    2. Set up project mapping on the local machine with the created remote application /home/<USER_NAME>/<APP_NAME> (Preferences → Deployments → Add).
    3. Set up the remote commands of cloudlinux-selector (Preferences → Remote SSH External Tools → Add) for the following actions:
    ',24)),s("ul",null,[e[366]||(e[366]=s("li",null,[s("p",null,"Restart application;")],-1)),e[367]||(e[367]=s("li",null,[s("p",null,"Install packages;")],-1)),e[368]||(e[368]=s("li",null,[s("p",null,"Run script;")],-1)),e[369]||(e[369]=s("li",null,[s("p",null,[t("Change Node.js version for the application. You can see the running app at "),s("span",{class:"notranslate"}," http://DOMAIN/APPLICATION_URL "),t(" To apply all changes, restart the application.")])],-1)),s("li",null,[s("p",null,[e[361]||(e[361]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:a(()=>e[360]||(e[360]=[t("Node.js Selector CLI tools")])),_:1}),e[362]||(e[362]=t("."))])]),s("li",null,[s("p",null,[e[364]||(e[364]=t("See also ")),n(i,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:a(()=>e[363]||(e[363]=[t("Node.js Selector UI")])),_:1}),e[365]||(e[365]=t("."))])])]),e[753]||(e[753]=s("h3",{id:"troubleshooting-2",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#troubleshooting-2","aria-hidden":"true"},"#"),t(" Troubleshooting")],-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#debugging-errors"},{default:a(()=>e[370]||(e[370]=[t("Debugging errors")])),_:1})])]),e[754]||(e[754]=l(`

    Debugging errors

    Since alt-mod-passenger-5.3.7-2, directives such as PassengerFriendlyErrorPages and PassengerAppEnv are available for use from htaccess file. This allows end users to see errors from their application during the development process. For example, if you add one of the following lines to the htaccess file on the application page, you will see the information (if there was an error) similar to one on the picture.

    PassengerAppEnv development
    +

    Node.js deployment

    `,41)),s("ul",null,[e[349]||(e[349]=s("li",null,[s("p",null,"The first approach - remote usage of Node.js Interpreters of different versions")],-1)),e[350]||(e[350]=s("li",null,[s("p",null,"The second approach - remote usage of the cloudlinux-selector utility.")],-1)),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#remote-usage-of-node-js-interpreters"},{default:i(()=>e[347]||(e[347]=[t("Remote usage of Node.js interpreters")])),_:1})])]),s("li",null,[s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility"},{default:i(()=>e[348]||(e[348]=[t("Remote usage of the cloudlinux-selector utility")])),_:1})])])]),e[739]||(e[739]=s("h4",{id:"remote-usage-of-node-js-interpreters",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#remote-usage-of-node-js-interpreters","aria-hidden":"true"},"#"),t(" Remote usage of Node.js interpreters")],-1)),s("ol",null,[e[356]||(e[356]=s("li",null,[t("Create a Node.js project in "),s("span",{class:"notranslate"}," IntelliJ IDEA/WebStorm "),t(" . You can download "),s("a",{href:"https://docs.cloudlinux.com/nodejs_example.zip",target:"_blank",rel:"noopener noreferrer"},"this archive"),t(" and use it as a basis.")],-1)),s("li",null,[e[352]||(e[352]=t("Install ")),e[353]||(e[353]=s("span",{class:"notranslate"}," alt-nodejs ",-1)),e[354]||(e[354]=t(" packages on the server in use. See ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-and-update-7"},{default:i(()=>e[351]||(e[351]=[t("installation instructions")])),_:1}),e[355]||(e[355]=t("."))]),e[357]||(e[357]=s("li",null,"Create an application on the server. You can do it by three ways:",-1))]),e[740]||(e[740]=l(`
    • Via UI of the Node.js plugin.
    • Using the following command to create an application:
    cloudlinux-selector create --interprete=nodejs --json --app-root=<USER_NAME> --app-uri=<APP_NAME> --app-mode=develompent --version=<VERSION> --domain=<DOMAIN>
    +

    Note

    In the IntelliJ IDEA you can create and run any remote script (Preferences — Remote SSH External Tools — Add).

    • Choose a location of the application on the server and synchronize the files with the IntelliJ IDEA project.
    1. Set up Run/Debug Configurations in the project created.

    • Specify a path to the remote Node.js interpreter. To be able to specify the remote interpreter, you should install the Node.js Remote Interpreter plugin first. Please find more information here , using server access credentials for a user (Main menu → Run → Edit configurations...) .
    • Specify initial JavaScript file that will be run with the node command (it is the app.js file from the archive).
    • Specify Path Mappings between a local and a remote project (Preferences → Deployments → Add) . If you have created your application with the cloudlinux-selector utility or via plugin UI the Path Mappings should be as follows:
    /home/<USER_NAME>/<APP_NAME>
    +
    1. Synchronize the project directories on the local and the remote machine as per Path Mappings specified.
    2. Deploy the modules on the remote and the local machine with the npm install command (if there are dependent modules). In the UI you can click the Run NPM Install button.
    3. Run Node.js application with the configuration set at the 4th step (Main menu → Run → Run… → Select configuration) .

    1. If you are using the application from the archive attached, you can see the running application on port 3003 — http://DOMAIN:3003 .

    Note

    The port should be available to a server user.

    The following information should be displayed on this page:

    • A version of the running Node.js interpreter;
    • Current environment variables;
    • The current time.

    So that, you can be sure that deployed modules are used properly.

    If you’d like to use a different version of Node.js to run an application, change a path to the interpreter in the configuration settings of the running.
    To apply all changes to the project, synchronize all changes with the server and restart the running application.

    1. To debug a script, set breakpoints in the code and run the configuration via Main Menu (Main menu → Run → Debug… → Select configuration) .

    Useful links:

    Note

    It is not required to install Passenger while working in IDE if you are using this approach.

    Remote usage of the cloudlinux-selector utility

    1. Create an application via UI or with the command as described in the Remote Usage of Node.js Interpreters approach, step 3 (a,b).
    2. Set up project mapping on the local machine with the created remote application /home/<USER_NAME>/<APP_NAME> (Preferences → Deployments → Add).
    3. Set up the remote commands of cloudlinux-selector (Preferences → Remote SSH External Tools → Add) for the following actions:
    ',24)),s("ul",null,[e[364]||(e[364]=s("li",null,[s("p",null,"Restart application;")],-1)),e[365]||(e[365]=s("li",null,[s("p",null,"Install packages;")],-1)),e[366]||(e[366]=s("li",null,[s("p",null,"Run script;")],-1)),e[367]||(e[367]=s("li",null,[s("p",null,[t("Change Node.js version for the application. You can see the running app at "),s("span",{class:"notranslate"}," http://DOMAIN/APPLICATION_URL "),t(" To apply all changes, restart the application.")])],-1)),s("li",null,[s("p",null,[e[359]||(e[359]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#node-js-selector"},{default:i(()=>e[358]||(e[358]=[t("Node.js Selector CLI tools")])),_:1}),e[360]||(e[360]=t("."))])]),s("li",null,[s("p",null,[e[362]||(e[362]=t("See also ")),a(n,{to:"/cloudlinuxos/lve_manager/#node-js-selector-2"},{default:i(()=>e[361]||(e[361]=[t("Node.js Selector UI")])),_:1}),e[363]||(e[363]=t("."))])])]),e[741]||(e[741]=s("h3",{id:"troubleshooting-2",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#troubleshooting-2","aria-hidden":"true"},"#"),t(" Troubleshooting")],-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#debugging-errors"},{default:i(()=>e[368]||(e[368]=[t("Debugging errors")])),_:1})])]),e[742]||(e[742]=l(`

    Debugging errors

    Since alt-mod-passenger-5.3.7-2, directives such as PassengerFriendlyErrorPages and PassengerAppEnv are available for use from htaccess file. This allows end users to see errors from their application during the development process. For example, if you add one of the following lines to the htaccess file on the application page, you will see the information (if there was an error) similar to one on the picture.

    PassengerAppEnv development
     
    or
    PassengerFriendlyErrorPages on
    -

    This is a much more convenient approach to developing an application and debugging errors. On the other hand, if these directives are turned off you will see:

    In this case, there is no useful information for debugging errors and this is suitable for production mode. More information about PassengerFriendlyErrorPages and PassengerAppEnv.

    Known Restrictions and Issues

    1. In some cases running commands e.g. npm build can produce an Out Of Memory error.

      When the error is encountered in Nodejs Selector UI or in the web browser terminal, check the physical and virtual memory LVE limits. Also check the process limits through ulimit -v -m command in Terminal UI or "Max data size", "Max address space" or "Max resident set" values inside the /proc/<process_id>/limits file. Increase the limits if necessary.

      On cPanel, increase the default process memory limit:

      whmapi1 set_tweaksetting key=maxmem value=8192
      +

    This is a much more convenient approach to developing an application and debugging errors. On the other hand, if these directives are turned off you will see:

    In this case, there is no useful information for debugging errors and this is suitable for production mode. More information about PassengerFriendlyErrorPages and PassengerAppEnv.

    Known Restrictions and Issues

    1. In some cases running commands e.g. npm build can produce an Out Of Memory error.

      When the error is encountered in Nodejs Selector UI or in the web browser terminal, check the physical and virtual memory LVE limits. Also check the process limits through ulimit -v -m command in Terminal UI or "Max data size", "Max address space" or "Max resident set" values inside the /proc/<process_id>/limits file. Increase the limits if necessary.

      On cPanel, increase the default process memory limit:

      whmapi1 set_tweaksetting key=maxmem value=8192
       /usr/local/cpanel/scripts/restartsrv_cpsrvd
       

      Due to bug CPANEL-43590 a server reload might be required for the new maxmem value to become applied.

      In some cases, due to bugs in underlying Node.js frameworks (e.g. Out of memory: wasm memory) it could be necessary to increase maxmem up to 50 Gb (value=51200) or even to unlimited.

    2. Sometimes an Out Of Memory error appears in the web browser terminal in cPanel. Because of CPANEL-39397 bug terminal inherences limits of cpsrvd process. As a workaround, you could increase maxmem value as described above.

      Alternetive workaround: override soft and hard virtual memory limit only for the user encountering the problem. Override hard limit by adding the following line to the /etc/security/limits.conf file:

      username	hard	as	unlimited
       

      Override soft limit by adding into $USER_HOME/.bashrc:

      ulimit -S -v unlimited
      -

    Apache mod_lsapi PRO

    General information and requirements

    mod_lsapi PRO is an Apache HTTP Server module based on LiteSpeed Technologies API . It serves to execute PHP scripts on a web-server by analogy with other modules like mod_suphp, php-fpm, mod_php. However, mod_lsapi PRO usage offers excellent PHP performance, low memory footprint coupled with great security and support for opcode caching.

    How does it work?

    1. Apache passes handling for PHP request to mod_lsapi PRO;
    2. mod_lsapi PRO use liblsapi to transfer request to lsphp parent process;
    3. lsphp is forking child process which executes the request and returns data to mod_lsapi PRO;
      mod_lsapi PRO integrates with Apache, allows to handle concurrent requests and manages the lsphp processes
    • If there are no requests for lsapi_backend_pgrp_max_idle seconds, lsphp parent process will be  terminated;
    • If there are no lsphp child processes available when a new request comes, the new lsphp child process will be created;
    • lsphp childs process concurrent requests simultaneously;
    • The maximum number of simultaneously running lsphp child processes can be set by the lsapi_backend_children directive.

    What is lsphp?

    lsphp - PHP + LSAPI. What is PHP LSAPI? LiteSpeed Server Application Programming Interface (LSAPI) is designed specifically for seamless, optimized communication between LiteSpeed Web Server and third-party web applications. Now with mod_lsapi PRO this protocol is available for Apache 2.2/2.4.

    Using mod_lsapi PRO, we have seen the higher performance than Apache with mod_php, easier installation than php-fpm and easier integration with any control panel. mod_lsapi PRO means faster and more stable dynamic web pages.

    Requirements

    Currently, the mod_lsapi is not compatible with:

    • Apache mod_ruid2 - should be disabled;
    • Apache mod_itk - should be disabled;
    • PHP-FPM - should be disabled because PHP-FPM is also a PHP Handler just as mod_lsapi.

    Optional requirements

    • Configured LVE containers for end-users ( recommended - higher security level );
    • Installed and configured mod_hostinglimitsfor Apache ( recommended - higher security level );
    • Installed mod_suexec for Apache and configured SuExecUserGroup directive for each virtual host ( recommended - higher security level );
    • Enabled CageFS for end-users ( recommended - higher security level );
    • PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux OS;
    • ea-php - alternative to alt-php provided by cPanel (for cPanel only).

    Installation

    mod_lsapi PRO can be installed through YUM package manager, however, the installation process varies depending on the control panel.

    Select the control panel you are using:

    ',28)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4"},{default:a(()=>e[371]||(e[371]=[t("cPanel")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-plesk-servers"},{default:a(()=>e[372]||(e[372]=[t("Plesk")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-directadmin-servers"},{default:a(()=>e[373]||(e[373]=[t("DirectAdmin")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-servers-with-no-control-panel"},{default:a(()=>e[374]||(e[374]=[t("No control panel")])),_:1})])]),s("div",De,[e[378]||(e[378]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[376]||(e[376]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:a(()=>e[375]||(e[375]=[t("mod_lsapi PRO")])),_:1}),e[377]||(e[377]=t("."))])]),e[755]||(e[755]=l(`

    Installing on cPanel servers with EasyApache 4

    Install mod_lsapi PRO and related packages through YUM package manager as follows:

    yum install liblsapi liblsapi-devel
    +

    Apache mod_lsapi PRO

    General information and requirements

    mod_lsapi PRO is an Apache HTTP Server module based on LiteSpeed Technologies API . It serves to execute PHP scripts on a web-server by analogy with other modules like mod_suphp, php-fpm, mod_php. However, mod_lsapi PRO usage offers excellent PHP performance, low memory footprint coupled with great security and support for opcode caching.

    How does it work?

    1. Apache passes handling for PHP request to mod_lsapi PRO;
    2. mod_lsapi PRO use liblsapi to transfer request to lsphp parent process;
    3. lsphp is forking child process which executes the request and returns data to mod_lsapi PRO;
      mod_lsapi PRO integrates with Apache, allows to handle concurrent requests and manages the lsphp processes
    • If there are no requests for lsapi_backend_pgrp_max_idle seconds, lsphp parent process will be  terminated;
    • If there are no lsphp child processes available when a new request comes, the new lsphp child process will be created;
    • lsphp childs process concurrent requests simultaneously;
    • The maximum number of simultaneously running lsphp child processes can be set by the lsapi_backend_children directive.

    What is lsphp?

    lsphp - PHP + LSAPI. What is PHP LSAPI? LiteSpeed Server Application Programming Interface (LSAPI) is designed specifically for seamless, optimized communication between LiteSpeed Web Server and third-party web applications. Now with mod_lsapi PRO this protocol is available for Apache 2.2/2.4.

    Using mod_lsapi PRO, we have seen the higher performance than Apache with mod_php, easier installation than php-fpm and easier integration with any control panel. mod_lsapi PRO means faster and more stable dynamic web pages.

    Requirements

    Currently, the mod_lsapi is not compatible with:

    • Apache mod_ruid2 - should be disabled;
    • Apache mod_itk - should be disabled;
    • PHP-FPM - should be disabled because PHP-FPM is also a PHP Handler just as mod_lsapi.

    Optional requirements

    • Configured LVE containers for end-users ( recommended - higher security level );
    • Installed and configured mod_hostinglimitsfor Apache ( recommended - higher security level );
    • Installed mod_suexec for Apache and configured SuExecUserGroup directive for each virtual host ( recommended - higher security level );
    • Enabled CageFS for end-users ( recommended - higher security level );
    • PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux OS;
    • ea-php - alternative to alt-php provided by cPanel (for cPanel only).

    Installation

    mod_lsapi PRO can be installed through YUM package manager, however, the installation process varies depending on the control panel.

    Select the control panel you are using:

    ',28)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4"},{default:i(()=>e[369]||(e[369]=[t("cPanel")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-plesk-servers"},{default:i(()=>e[370]||(e[370]=[t("Plesk")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-directadmin-servers"},{default:i(()=>e[371]||(e[371]=[t("DirectAdmin")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-servers-with-no-control-panel"},{default:i(()=>e[372]||(e[372]=[t("No control panel")])),_:1})])]),s("div",Le,[e[376]||(e[376]=s("p",{class:"custom-block-title"},"Note",-1)),s("p",null,[e[374]||(e[374]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:i(()=>e[373]||(e[373]=[t("mod_lsapi PRO")])),_:1}),e[375]||(e[375]=t("."))])]),e[743]||(e[743]=l(`

    Installing on cPanel servers with EasyApache 4

    Install mod_lsapi PRO and related packages through YUM package manager as follows:

    yum install liblsapi liblsapi-devel
     yum install ea-apache24-mod_lsapi
     
    After installing mod_lsapi PRO packages run the next command to setup mod_lsapi to cPanel:
    /usr/bin/switch_mod_lsapi --setup
     
    Now, when the module is installed, restart Apache to ensure that the mod_lsapi PRO is enabled:
    service httpd restart
    -
    Now the lsapi handler is available for managing through cPanel MultiPHP Manager. `,8)),s("p",null,[e[380]||(e[380]=t("For more details about switch_mod_lsapi, please visit ")),n(i,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:a(()=>e[379]||(e[379]=[t("switch_mod_lsapi tool")])),_:1}),e[381]||(e[381]=t("."))]),e[756]||(e[756]=l(`

    Installing on Plesk servers

    Install mod_lsapi PRO and related packages through YUM package manager as follows:

    yum install liblsapi liblsapi-devel
    +
    Now the lsapi handler is available for managing through cPanel MultiPHP Manager. `,8)),s("p",null,[e[378]||(e[378]=t("For more details about switch_mod_lsapi, please visit ")),a(n,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:i(()=>e[377]||(e[377]=[t("switch_mod_lsapi tool")])),_:1}),e[379]||(e[379]=t("."))]),e[744]||(e[744]=l(`

    Installing on Plesk servers

    Install mod_lsapi PRO and related packages through YUM package manager as follows:

    yum install liblsapi liblsapi-devel
     yum install mod_lsapi
     
    Once completed, run the command to setup mod_lsapi PRO and register LSPHP handlers to Plesk Panel:
    /usr/bin/switch_mod_lsapi --setup
     

    Now, when the module is installed, restart Apache to ensure that mod_lsapi PRO is enabled:

    service httpd restart
    -

    Now LSPHPXY alt-php PHP handlers are available for managing through Plesk PHP Settings.

    ',9)),s("p",null,[e[383]||(e[383]=t("For more details about switch_mod_lsapi, please visit ")),n(i,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:a(()=>e[382]||(e[382]=[t("switch_mod_lsapi tool")])),_:1}),e[384]||(e[384]=t("."))]),e[757]||(e[757]=l(`

    Installing on DirectAdmin servers

    Installation process is done with custombuild script:

    yum install liblsapi liblsapi-devel
    +

    Now LSPHPXY alt-php PHP handlers are available for managing through Plesk PHP Settings.

    ',9)),s("p",null,[e[381]||(e[381]=t("For more details about switch_mod_lsapi, please visit ")),a(n,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:i(()=>e[380]||(e[380]=[t("switch_mod_lsapi tool")])),_:1}),e[382]||(e[382]=t("."))]),e[745]||(e[745]=l(`

    Installing on DirectAdmin servers

    Installation process is done with custombuild script:

    yum install liblsapi liblsapi-devel
     cd /usr/local/directadmin/custombuild
     ./build update
     ./build set php1_mode lsphp
    @@ -1063,7 +1063,7 @@ yum install mod_lsapi
     yum install httpd24-mod_lsapi
     
    Once completed, run a command to setup mod_lsapi PRO:
    /opt/rh/httpd24/root/usr/bin/switch_mod_lsapi --setup
     
    Now, when the module is installed, restart Apache to ensure that mod_lsapi PRO is enabled:
    service httpd24-httpd restart
    -
    `,20)),s("p",null,[e[386]||(e[386]=t("For more details about switch_mod_lsapi, please visit ")),n(i,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:a(()=>e[385]||(e[385]=[t("switch_mod_lsapi tool")])),_:1}),e[387]||(e[387]=t("."))]),e[758]||(e[758]=s("h3",{id:"uninstalling-3",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#uninstalling-3","aria-hidden":"true"},"#"),t(" Uninstalling")],-1)),e[759]||(e[759]=s("p",null,"Uninstall mod_lsapi PRO is performed depending on your control panel.",-1)),e[760]||(e[760]=s("p",null,"Select the control panel you are using:",-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-cpanel-servers-with-easyapache-4"},{default:a(()=>e[388]||(e[388]=[t("cPanel")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-plesk-servers"},{default:a(()=>e[389]||(e[389]=[t("Plesk")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-directadmin-servers"},{default:a(()=>e[390]||(e[390]=[t("DirectAdmin")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-servers-with-no-control-panel"},{default:a(()=>e[391]||(e[391]=[t("No control panel")])),_:1})])]),e[761]||(e[761]=l(`

    Uninstall procedure for cPanel servers with EasyApache 4

    Note

    If there is a php.conf file in Apache's conf.d, which is usually brought by the php or php-fpm packages, then it should be deleted or renamed.

    For example, php.conf can be renamed into php.conf.NO.

    To remove lsapi handler from cPanel MultiPHP Manager and uninstall mod_lsapi PRO, run a command:

    /usr/bin/switch_mod_lsapi --uninstall
    +
    `,20)),s("p",null,[e[384]||(e[384]=t("For more details about switch_mod_lsapi, please visit ")),a(n,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:i(()=>e[383]||(e[383]=[t("switch_mod_lsapi tool")])),_:1}),e[385]||(e[385]=t("."))]),e[746]||(e[746]=s("h3",{id:"uninstalling-3",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#uninstalling-3","aria-hidden":"true"},"#"),t(" Uninstalling")],-1)),e[747]||(e[747]=s("p",null,"Uninstall mod_lsapi PRO is performed depending on your control panel.",-1)),e[748]||(e[748]=s("p",null,"Select the control panel you are using:",-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-cpanel-servers-with-easyapache-4"},{default:i(()=>e[386]||(e[386]=[t("cPanel")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-plesk-servers"},{default:i(()=>e[387]||(e[387]=[t("Plesk")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-directadmin-servers"},{default:i(()=>e[388]||(e[388]=[t("DirectAdmin")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstall-procedure-for-servers-with-no-control-panel"},{default:i(()=>e[389]||(e[389]=[t("No control panel")])),_:1})])]),e[749]||(e[749]=l(`

    Uninstall procedure for cPanel servers with EasyApache 4

    Note

    If there is a php.conf file in Apache's conf.d, which is usually brought by the php or php-fpm packages, then it should be deleted or renamed.

    For example, php.conf can be renamed into php.conf.NO.

    To remove lsapi handler from cPanel MultiPHP Manager and uninstall mod_lsapi PRO, run a command:

    /usr/bin/switch_mod_lsapi --uninstall
     
    Then remove packages with YUM package manager:
    yum erase liblsapi liblsapi-devel ea-apache24-mod_lsapi
     
    Restart Apache afterwards:
    service httpd restart
     
    Now mod_lsapi PRO is fully uninstalled.

    Uninstall procedure for Plesk servers

    To unregister LSPHP handlers and uninstall mod_lsapi PRO, run the command:

    /usr/bin/switch_mod_lsapi --uninstall
    @@ -1083,7 +1083,7 @@ rm [path to mod_lsapi.conf]
     
    Then remove packages with YUM package manager:
    yum erase liblsapi liblsapi-devel httpd24-mod_lsapi
     rm [path to mod_lsapi.conf]
     
    Restart Apache afterwards:
    service httpd24 restart
    -
    Now mod_lsapi PRO is fully uninstalled.

    Configuration

    `,40)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:a(()=>e[392]||(e[392]=[t("Configuration references")])),_:1})])]),e[762]||(e[762]=l(`

    In order to get mod_lsapi PRO work properly, you'll need to configure Apache. To do this, we use a separate lsapi.conf file.

    First of all, for the mod_lsapi PRO work, you need to ensure that the module is loaded. In your lsapi.conf you need to make sure the LoadModule directive has not been commented out. A correctly configured directive may look like this:

    LoadModule lsapi_module modules/mod_lsapi.so
    +
    Now mod_lsapi PRO is fully uninstalled.

    Configuration

    `,40)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:i(()=>e[390]||(e[390]=[t("Configuration references")])),_:1})])]),e[750]||(e[750]=l(`

    In order to get mod_lsapi PRO work properly, you'll need to configure Apache. To do this, we use a separate lsapi.conf file.

    First of all, for the mod_lsapi PRO work, you need to ensure that the module is loaded. In your lsapi.conf you need to make sure the LoadModule directive has not been commented out. A correctly configured directive may look like this:

    LoadModule lsapi_module modules/mod_lsapi.so
     

    In order to enable the module to process requests, you need to add the lsapi_engine directive to your lsapi.conf file as follows:

    lsapi_engine On
     

    The mod_lsapi PRO handler can be enabled using the AddType directive. The AddType directive tells Apache that a given filename extension should be handled by mod_lsapi PRO. Apache will assume that and will attempt to execute it when that particular resource is requested by a client.

    AddType application/x-httpd-lsphp .php
     

    If no handler is explicitly set for a request, the specified content type will be used as the handler name, therefore, please disable php.conf or any other PHP handler for using mod_lsapi PRO. In this example application/x-httpd-lsphp is a default handler by which mod_lsapi PRO process requests with lsphp binary from /usr/local/bin/ directory.

    The final lsapi.conf configuration might look like this:

    LoadModule lsapi_module modules/mod_lsapi.so
    @@ -1099,7 +1099,7 @@ rm [path to mod_lsapi.conf]
     	lsapi_backend_max_process_time 300
     	lsapi_debug Off
     </IfModule>
    -

    In order to mod_lsapi PRO work lsapi.conf should be loaded to Apache through Include directive.

    `,11)),s("p",null,[e[395]||(e[395]=t("For more detailed description of the module directives please visit ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:a(()=>e[393]||(e[393]=[t("Configuration reference")])),_:1}),e[396]||(e[396]=t(".")),e[397]||(e[397]=s("br",null,null,-1)),e[398]||(e[398]=t(" For installation guide mod_lsapi PRO please visit ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-2"},{default:a(()=>e[394]||(e[394]=[t("Installation")])),_:1}),e[399]||(e[399]=t("."))]),e[763]||(e[763]=s("h4",{id:"configuration-references",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-references","aria-hidden":"true"},"#"),t(" Configuration references")],-1)),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#mod-lsapi-customization"},{default:a(()=>e[400]||(e[400]=[t("mod_lsapi customization")])),_:1}),e[401]||(e[401]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-engine"},{default:a(()=>e[402]||(e[402]=[t("lsapi_engine")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-socket-path"},{default:a(()=>e[403]||(e[403]=[t("lsapi_socket_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-poll-timeout"},{default:a(()=>e[404]||(e[404]=[t("lsapi_poll_timeout")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-per-user"},{default:a(()=>e[405]||(e[405]=[t("lsapi_per_user")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-output-buffering"},{default:a(()=>e[406]||(e[406]=[t("lsapi_output_buffering")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-reject-mode"},{default:a(()=>e[407]||(e[407]=[t("lsapi_disable_reject_mode")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-terminate-backends-on-exit"},{default:a(()=>e[408]||(e[408]=[t("lsapi_terminate_backends_on_exit")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-avoid-zombies"},{default:a(()=>e[409]||(e[409]=[t("lsapi_avoid_zombies")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-req-hostname"},{default:a(()=>e[410]||(e[410]=[t("lsapi_use_req_hostname")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-debug"},{default:a(()=>e[411]||(e[411]=[t("lsapi_debug")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-lsphp-backend"},{default:a(()=>e[412]||(e[412]=[t("Tuning LSPHP backend")])),_:1}),e[413]||(e[413]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env"},{default:a(()=>e[414]||(e[414]=[t("lsapi_set_env")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env-path"},{default:a(()=>e[415]||(e[415]=[t("lsapi_set_env_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-children"},{default:a(()=>e[416]||(e[416]=[t("lsapi_backend_children")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-connect-tries"},{default:a(()=>e[417]||(e[417]=[t("lsapi_backend_connect_tries")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-connect-timeout"},{default:a(()=>e[418]||(e[418]=[t("lsapi_backend_connect_timeout")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-process-time"},{default:a(()=>e[419]||(e[419]=[t("lsapi_backend_max_process_time")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-idle"},{default:a(()=>e[420]||(e[420]=[t("lsapi_backend_pgrp_max_idle")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-use-own-log"},{default:a(()=>e[421]||(e[421]=[t("lsapi_backend_use_own_log")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-common-own-log"},{default:a(()=>e[422]||(e[422]=[t("lsapi_backend_common_own_log")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-coredump"},{default:a(()=>e[423]||(e[423]=[t("lsapi_backend_coredump")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-accept-notify"},{default:a(()=>e[424]||(e[424]=[t("lsapi_backend_accept_notify")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-reqs"},{default:a(()=>e[425]||(e[425]=[t("lsapi_backend_pgrp_max_reqs")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-crashes"},{default:a(()=>e[426]||(e[426]=[t("lsapi_backend_pgrp_max_crashes")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-loglevel-info"},{default:a(()=>e[427]||(e[427]=[t("lsapi_backend_loglevel_info")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-oom-score-adj"},{default:a(()=>e[428]||(e[428]=[t("lsapi_backend_oom_score_adj")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-server-tweak"},{default:a(()=>e[429]||(e[429]=[t("lsapi-server-tweak")])),_:1}),e[430]||(e[430]=t(" Beta"))])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#connection-pool-mode"},{default:a(()=>e[431]||(e[431]=[t("Connection pool mode")])),_:1}),e[432]||(e[432]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-with-connection-pool"},{default:a(()=>e[433]||(e[433]=[t("lsapi_with_connection_pool")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-idle"},{default:a(()=>e[434]||(e[434]=[t("lsapi_backend_max_idle")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-reqs"},{default:a(()=>e[435]||(e[435]=[t("lsapi_backend_max_reqs")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support-cloudlinux7-only"},{default:a(()=>e[436]||(e[436]=[t("CRIU support")])),_:1}),e[437]||(e[437]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu"},{default:a(()=>e[438]||(e[438]=[t("lsapi_criu")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-socket-path"},{default:a(()=>e[439]||(e[439]=[t("lsapi_criu_socket_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-imgs-dir-path"},{default:a(()=>e[440]||(e[440]=[t("lsapi_criu_imgs_dir_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-initial-start"},{default:a(()=>e[441]||(e[441]=[t("lsapi_backend_initial_start")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-use-shm"},{default:a(()=>e[442]||(e[442]=[t("lsapi_criu_use_shm")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-semtimedwait"},{default:a(()=>e[443]||(e[443]=[t("lsapi_backend_semtimedwait")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-reset-criu-on-apache-restart"},{default:a(()=>e[444]||(e[444]=[t("lsapi_reset_criu_on_apache_restart")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-debug"},{default:a(()=>e[445]||(e[445]=[t("lsapi_criu_debug")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-configuration-management"},{default:a(()=>e[446]||(e[446]=[t("PHP configuration management")])),_:1}),e[447]||(e[447]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-process-phpini"},{default:a(()=>e[448]||(e[448]=[t("lsapi_process_phpini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phpini"},{default:a(()=>e[449]||(e[449]=[t("lsapi_phpini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phprc"},{default:a(()=>e[450]||(e[450]=[t("lsapi_phprc")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-tmpdir"},{default:a(()=>e[451]||(e[451]=[t("lsapi_tmpdir")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enable-user-ini"},{default:a(()=>e[452]||(e[452]=[t("lsapi_enable_user_ini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-ini-homedir"},{default:a(()=>e[453]||(e[453]=[t("lsapi_user_ini_homedir")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-keep-http200"},{default:a(()=>e[454]||(e[454]=[t("lsapi_keep_http200")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-mod-php-behaviour"},{default:a(()=>e[455]||(e[455]=[t("lsapi_mod_php_behaviour")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-valuephp-admin-valuephp-flagphp-admin-flag"},{default:a(()=>e[456]||(e[456]=[t("php_value, php_admin_value, php_flag, php_admin_flag")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#security"},{default:a(()=>e[457]||(e[457]=[t("Security")])),_:1}),e[458]||(e[458]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-suexec"},{default:a(()=>e[459]||(e[459]=[t("lsapi_use_suexec")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-group"},{default:a(()=>e[460]||(e[460]=[t("lsapi_user_group")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-uid-gid"},{default:a(()=>e[461]||(e[461]=[t("lsapi_uid_gid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-default-uid"},{default:a(()=>e[462]||(e[462]=[t("lsapi_use_default_uid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-target-perm"},{default:a(()=>e[463]||(e[463]=[t("lsapi_target_perm")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-paranoid"},{default:a(()=>e[464]||(e[464]=[t("lsapi_paranoid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-check-document-root"},{default:a(()=>e[465]||(e[465]=[t("lsapi_check_document_root")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-forced-pwd-var"},{default:a(()=>e[466]||(e[466]=[t("lsapi_disable_forced_pwd_var")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-resend-buffer"},{default:a(()=>e[467]||(e[467]=[t("lsapi_max_resend_buffer")])),_:1})])]),e[764]||(e[764]=l('

    mod_lsapi customization

    lsapi_engine

    Syntax : lsapi_engine on/off
    Default : lsapi_engine off
    Context : httpd.conf, htaccess

    Description :
    Switching mod_lsapi handler on or off.


    lsapi_socket_path

    Syntax : lsapi_socket_path [path] Default : lsapi_socket_path /var/mod_lsapi
    Context : httpd.conf

    Description:
    Path to backend lsphp sockets. By default /var/mod_lsapi


    lsapi_poll_timeout

    Syntax : lsapi_poll_timeout [number]
    Default : lsapi_poll_timeout 300
    Context : httpd.conf, htaccess

    Description :
    Time to wait for response from the lsphp daemon, in seconds. 0 stands for infinity. For preventing long running processes which can use EP (limit number of entry processes). Default value is 300. Should be more or equal to 0. In the case of wrong format, the default value will be used.


    lsapi_per_user

    Syntax : lsapi_per_user On/Off
    Default : lsapi_per_user Off
    Context : httpd.conf

    Description :
    Invoke master lsPHP process not per VirtualHost but per account. When On, invoke backend not per VirtualHost but per account. Default value is Off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_output_buffering

    Syntax : lsapi_output_buffering On/Off
    Default : lsapi_output_buffering On
    Context : httpd.conf, virtualhost, htaccess

    Description :
    Enable or disable output buffering on Apache level. Default value is On.


    lsapi_disable_reject_mode

    Syntax : lsapi_disable_reject_mode On/Off
    Default : lsapi_disable_reject_mode Off
    Context : httpd.conf, virtualhost

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such request immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into infinite queue, until one or more LSPHP daemon becomes free. When HTTP request is rejected in REJECT mode, mod_lsapi will write into Apache error_log the following message: Connect to backend rejected, and the client will receive 507 HTTP response. By default LSPHP daemon in CloudLinux OS uses REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_on_exit

    Syntax : lsapi_terminate_backends_on_exit On/Off
    Default : lsapi_terminate_backends_on_exit On
    Context : httpd.conf

    Description :
    httpd.conf, On - stop lsphp services on apache restart, Off - leave live started lsphp services on apache restart (for php+opcache). The lsphp will not restart, even if Apache gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies On/Off
    Default : lsapi_avoid_zombies Off
    Context : httpd.conf, virtualhost

    Description :
    Enable or disable a mechanism to avoid creation of zombie processes by lsphp. Default value is Off.


    lsapi_use_req_hostname

    Syntax : lsapi_use_req_hostname On/Off
    Default : lsapi_use_req_hostname Off
    Context : httpd.conf, virtualhosts

    Description :
    By default, we are using hostname from the server_rec structure (off), it means that mod_lsapi takes hostname from the VirtualHost section of the configuration file. Using hostname from the request_rec structure (On) means that mod_lsapi takes hostname from the HOST section of the request. It could be useful for those who use dynamically generated configs for virtual hosts for example with mod_lua.


    lsapi_sentry

    Syntax : lsapi_sentry On/Off
    Default : lsapi_sentry On
    Context : httpd.conf

    Description :
    When this option is enabled, errors that occur in the operation of the mod_lsapi will be sent to the remote sentry server. You can see the error messages that were sent to the sentry server in the directory /var/log/mod_lsapi. If you do not want to send error notifications from your server, you can disable this directive in lsapi.conf.


    lsapi_debug

    Syntax : lsapi_debug On/Off
    Default : lsapi_debug Off
    Context : httpd.conf, virtualhost

    Description :
    Extended debug logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env VAR_NAME [VAR_VALUE]
    Default : -
    Context : httpd.conf

    Description :
    Pass env variable to lsphp. By default lsphp environment have only TEMP, TMP and PATH variables set.
    Example: lsapi_set_env TMP "/var/lsphp-tmp"
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.
    To change it, use explicitly lsapi_set_env_path option.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_set_env_path

    Syntax : lsapi_set_env_path [path(s)]
    Default : lsapi_set_env_path /usr/local/bin:/usr/bin:/bin
    Context : httpd.conf

    Description :
    Change PATH variable in the environment of lsPHP processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Default : lsapi_backend_children [EP]
    Context : httpd.conf

    Description :
    Sets maximum number of simultaneously running child backend processes. Optional, a default directive value is equal to 120. LSAPI_CHILDREN environment variable is set according to the following rules:

    • If NPROC and EP are unlimited, the directive value is used.
    • If NPROC is set to any limited value and the directive value is set to a number less than NPROC-1, the directive value is used.
    • If the value is bigger than NPROC-1 and EP is set to unlimited, NPROC-1 is used.
    • If the value is bigger than NPROC-1 and EP is set to any limited value, EP+1 is used.

    For example, with the default lve settings NPROC=100 and EP=20, the effective LSAPI_CHILDREN will be EP+1, that is LSAPI_CHILDREN=21.


    lsapi_backend_connect_tries

    Syntax : lsapi_backend_connect_tries [number]
    Default : lsapi_backend_connect_tries 20
    Context : httpd.conf

    Description :
    Number of retries to connects to lsPHP daemon.


    lsapi_backend_connect_timeout

    Syntax : lsapi_backend_connect_timeout [number]
    Default : lsapi_backend_connect_timeout 500000
    Context : httpd.conf

    Description :
    Number of usec to wait while lsPHP starts (if not started on request).


    lsapi_backend_max_process_time

    Syntax : lsapi_backend_max_process_time [number]
    Default : lsapi_backend_max_process_time 300
    Context : httpd.conf, virtualhost

    Description :
    Sets env variable LSAPI_MAX_PROCESS_TIME
    Optional. Default value is 300.
    Timeout to kill runaway processes.


    lsapi_backend_pgrp_max_idle

    Syntax : lsapi_backend_pgrp_max_idle [number]
    Default : lsapi_backend_pgrp_max_idle 30
    Context : httpd.conf

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds.
    Controls how long a control process will wait for a new request before it exits. # 0 stands for infinite.
    Optional, default value is 30.
    Should be more or equal to 0.


    lsapi_backend_use_own_log

    Syntax : lsapi_backend_use_own_log On/Off
    Default : lsapi_backend_use_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    Redirecting log output of backend processes from Apache error_log to dedicated log file or files, depending on value of lsapi_backend_common_own_log option. If Off, use Apache error log file for backend output, or separate file otherwise.


    lsapi_backend_common_own_log

    Syntax : lsapi_backend_common_own_log On/Off
    Default : lsapi_backend_common_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    It will be used only when lsapi_backend_use_own_log set to On. On - backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump On/Off
    Default : lsapi_backend_coredump Off
    Context : httpd.conf, htaccess

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it will be passed - core dump on lsphp crash will be created.
    Off by default.
    By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core file, you should set this environment variable. If set, regardless the value has been set to, core files will be created under the directory that the PHP script in.


    lsapi_backend_accept_notify

    Syntax : lsapi_backend_accept_notify On/Off
    Default : lsapi_backend_accept_notify On
    Context : httpd.conf, virtualhost

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes.This mode is incompatible with PHP 4.4.


    lsapi_backend_pgrp_max_reqs

    Syntax : lsapi_backend_prgrp_max_reqs [number]
    Default : lsapi_backend_max_reqs 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_pgrp_max_crashes

    Syntax : lsapi_backend_prgrp_max_crashes [number]
    Default : lsapi_backend_max_crashes 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [On/Off]

    Default: lsapi_backend_loglevel_info Off

    Context: httpd.conf, virtualhost

    Description: Controls which log level will be used to write PHP warnings and notices into Apache’s error_log. Optional, the default value is Off. In that case LOG_WARNING log level will be used. Otherwise, with On value, LOG_INFO log level will be used.


    lsapi_backend_oom_score_adj

    Syntax: lsapi_backend_oom_score_adj [number]

    Default: lsapi_backend_oom_score_adj 0

    Context: httpd.conf, virtualhost

    Description: This option can be used to apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked then desirable that lsphp processes are sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting value oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    ',114)),s("h4",Ae,[e[468]||(e[468]=s("a",{class:"header-anchor",href:"#lsapi-server-tweak","aria-hidden":"true"},"#",-1)),e[469]||(e[469]=t()),e[470]||(e[470]=s("strong",null,"lsapi_server_tweak",-1)),e[471]||(e[471]=t()),n(r,{type:"info",text:"beta"})]),e[765]||(e[765]=l('

    Syntax: lsapi_server_tweak [On/Off]

    Default: lsapi_server_tweak Off

    Context: httpd.conf

    Description: This option, when switched on, allows the use of lsapi_set_env and lsapi_set_env_path config options in the virtualhost context.


    Connection pool mode

    lsapi_with_connection_pool

    Syntax : lsapi_with_connection_pool On/Off
    Default : lsapi_with_connection_pool Off
    Context : httpd.conf

    Description :
    On/Off - disable enable connect pool, default is Off.


    lsapi_backend_max_idle

    Syntax : lsapi_backend_max_idle [number]
    Default : lsapi_backend_max_idle 300
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of wrong format default value will be used. Optional, default value is 300.


    lsapi_backend_max_reqs

    Syntax : lsapi_backend_max_reqs [number]
    Default : lsapi_backend_max_reqs 10000
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of wrong format default value will be used. Optional, default value is 10000.


    CRIU support

    lsapi_criu

    Syntax : lsapi_criu On/Off
    Default : lsapi_criu Off
    Context : httpd.conf

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_socket_path

    Syntax : lsapi_criu_socket_path [path]
    Default : lsapi_criu_socket_path /var/run/criu/criu_service.socket
    Context : httpd.conf

    Description :
    Set path to socket for communication with criu service. Default: /var/run/criu/criu_service.socket.


    lsapi_criu_imgs_dir_path

    Syntax : lsapi_criu_imgs_dir_path [path]
    Default : lsapi_criu_imgs_dir_path /var/mod_lsapi/
    Context : httpd.conf

    Description :
    Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/mod_lsapi/


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Default : lsapi_backend_initial_start 0
    Context : httpd.conf

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm Off/Signals
    Default : lsapi_criu_use_shm Off
    Context : httpd.conf

    Description :
    Method of requests counting. Off - use shared memory. Signals - use signals from child processes to parent. Default: Off


    lsapi_backend_semtimedwait

    Syntax : lsapi_backend_semtimedwait On/Off
    Default : lsapi_backend_semtimedwait On
    Context : httpd.conf

    Description :
    Use semaphore for checking when lsphp process will be started. Speed of start lsphp increased with semaphore using. This method avoid cycles of waiting for lsphp start. Default: On.


    lsapi_reset_criu_on_apache_restart

    Syntax : lsapi_reset_criu_on_apache_restart On/Off
    Default : lsapi_reset_criu_on_apache_restart Off
    Context : httpd.conf, virtualhost

    Description :
    This option allows cleaning all CRIU images on Apache restart.
    Setting lsapi_reset_criu_on_apache_restart to On means that on each Apache restart the CRIU images which are stored in directory specified by lsapi_criu_imgs_dir_path directive will be recreated on new request to domain(only after restart).
    If this option set to Off then CRIU images won’t be recreated on Apache restart.


    lsapi_criu_debug

    Syntax: lsapi_criu_debug On/Off
    Default: lsapi_criu_debug Off
    Context: httpd.conf, virtualhost

    Description :
    Enable/disable CRIU related debug logging.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini On/Off
    Default : lsapi_process_phpini Off
    Context : httpd.conf, virtualhost, directory

    Description :
    Enable or disable phpini_* directive processing. Default value is Off.


    lsapi_phpini

    Syntax : lsapi_phpini [path]
    Default : lsapi_phpini -
    Context : httpd.conf, virtualhost, htaccess

    Description :
    When lsapi_process_phpini option switched to Off, these values will be silently ignored. lsapi_phpini values with absolute filename of php.ini file can be inserted into .htaccess files in order to set custom php.ini which will override/complement settings from system default php.ini.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Default : lsapi_phprc No
    Context : httpd.conf, virtualhost

    Description : The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example
    lsapi_phprc No
    lsapi_phprc Auto
    lsapi_phprc DocRoot
    lsapi_phprc Env
    lsapi_phprc /etc/


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Default : lsapi_tmpdir /tmp
    Context : httpd.conf, virtualhost

    Description :
    Set alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini On/Off
    Default : lsapi_enable_user_ini Off
    Context : httpd.conf, virtualhost

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is Off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir On/Off
    Default : lsapi_user_ini_homedir Off
    Context : httpd.conf, virtualhost

    Description :
    If lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in home directory also. Default value is Off.


    lsapi_keep_http200

    Syntax : lsapi_keep_http200 On/Off
    Default : lsapi_keep_http200 Off
    Context : httpd.conf, .htaccess

    Description :
    If set to On, always keep backend's response status as mod_php does. If set to Off, response status can be overridden by Apache as suphp does (in case of call via ErrorDocument directive).


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour On/Off
    Default : lsapi_mod_php_behaviour On
    Context : httpd.conf, virtualhost, directory

    Description :
    On/Off - disable php_* directives, default On.


    php_value, php_admin_value, php_flag, php_admin_flag

    Syntax : [php_value|php_admin_value|php_flag|php_admin_flag]
    Default :
    Context : httpd.conf, virtualhost, htaccess

    Description :
    mod_php emulation.


    Security

    lsapi_use_suexec

    Syntax : lsapi_use_suexec On/Off
    Default : lsapi_use_suexec On
    Context : httpd.conf

    Description :
    Use or not suexec to a target user.


    lsapi_user_group

    Syntax : lsapi_user_group [user_name] [group_name]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for requests.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for request.


    lsapi_use_default_uid

    Syntax : lsapi_use_default_uid On/Off
    Default : lsapi_use_default_uid On
    Context : httpd.conf

    Description :
    Use default Apache UID/GID if no uid/gid set. Values: On/Off. If Off, and no UID/GID set, error 503 will be returned.


    lsapi_target_perm

    Syntax : lsapi_target_perm On/Off
    Default : lsapi_target_perm Off
    Context : httpd.conf

    Description :
    Check target PHP script permissions. If set to On, lsapi will check that script is owned by the same user, as user under which it is being executed. Return 503 error if they don't match. Default: Off.


    lsapi_paranoid

    Syntax : lsapi_paranoid On/Off
    Default : lsapi_paranoid Off
    Context : httpd.conf

    Description :
    Check or not permissions of target php scripts. Optional, default value is Off.


    lsapi_check_document_root

    Syntax : lsapi_check_document_root On/Off
    Default : lsapi_check_document_root On
    Context : httpd.conf

    Description :
    Check or not owner of DOCUMENT_ROOT. Optional, default value is On.


    lsapi_disable_forced_pwd_var

    Syntax : lsapi_disable_forced_pwd_var On/Off
    Default : lsapi_disable_forced_pwd_var Off
    Context : httpd.conf, virtualhost

    Description :
    To disable addition of PWD variable. Default value is Off. If set to On, the PWD variable will not be added into a backend environment.


    lsapi_max_resend_buffer

    Syntax : lsapi_max_resend_buffer [number]tmp
    Default : lsapi_max_resend_buffer 200
    Context : httpd.conf, virtualhost

    Description :
    Maximum buffer in KiB to resend for request that has a body (like POST request body).

    ',124)),s("p",null,[e[473]||(e[473]=t("See also ")),n(i,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:a(()=>e[472]||(e[472]=[t("Apache mod_lsapi PRO CLI tools")])),_:1}),e[474]||(e[474]=t("."))]),e[766]||(e[766]=s("h3",{id:"troubleshooting-3",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#troubleshooting-3","aria-hidden":"true"},"#"),t(" Troubleshooting")],-1)),e[767]||(e[767]=s("p",null,[s("strong",null,"Debugging mod_lsapi issues: error_log & sulsphp_log")],-1)),e[768]||(e[768]=s("p",null,"mod_lsapi errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.",-1)),e[769]||(e[769]=s("p",null,"See next table for more details:",-1)),s("table",null,[e[498]||(e[498]=s("thead",null,[s("tr",null,[s("th"),s("th"),s("th")])],-1)),s("tbody",null,[e[484]||(e[484]=s("tr",null,[s("td",null,[s("strong",null,"error_log")]),s("td",null,[s("strong",null,"sulsphp_log")]),s("td",null,[s("strong",null,"Solution")])],-1)),e[485]||(e[485]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE ID"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase pmem or vmem limits for the user uid.")],-1)),e[486]||(e[486]=s("tr",null,[s("td",null,"Error sending request: ReceiveLSHeader: nothing to read from backend socket"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp was killed. It can be due to apache restart or lfd. If you see this message too often - change "),s("span",{class:"notranslate"}," lsapi_terminate_backends_on_exit "),t(" to "),s("span",{class:"notranslate"}," Off "),t(" in lsapi.conf or add to "),s("span",{class:"notranslate"}," /etc/csf/csf.pignore "),t(" the following lines: "),s("span",{class:"notranslate"}," exe:/usr/local/bin/lsphp "),t(" pexe:/opt/alt/php.*/usr/bin/lsphp")])],-1)),e[487]||(e[487]=s("tr",null,[s("td",null,"Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact "),s("a",{href:"https://cloudlinux.zendesk.com/hc/",target:"_blank",rel:"noopener noreferrer"},"https://cloudlinux.zendesk.com/"),t(" so we can investigate the cause.")])],-1)),e[488]||(e[488]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"file is writable by others: (///usr/local/bin/lsphp)"),s("td",null,[t("Incorrect lsphp file permissions. For fixing: "),s("span",{class:"notranslate"}," chmod 755 /usr/local/bin/lsphp "),t(" cagefsctl --force-update.")])],-1)),e[489]||(e[489]=s("tr",null,[s("td",null,"Could not determine uid/gid for request"),s("td",null,"No need to check this log."),s("td",null,[t("UID/GID are not set in virtualhost. Set "),s("span",{class:"notranslate"}," lsapi_use_default_uid On "),t(" in lsapi.conf (it is "),s("span",{class:"notranslate"}," On "),t(" by default since 0.1-98 version, this solution is for older versions).")])],-1)),e[490]||(e[490]=s("tr",null,[s("td",null,"Own id for script file (/xxxx/xxx/xxxx) is xxx; should be xxxx"),s("td",null,"No need to check this log."),s("td",null,[t("File is not owned by the user PHP executed by. To overwrite (insecure), set "),s("span",{class:"notranslate"}," lsapi_target_perm Off "),t(" in lsapi.conf.")])],-1)),e[491]||(e[491]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"Entering jail error"),s("td",null,[t("Check if СageFS enabled. Try running "),s("span",{class:"notranslate"}," cagefsctl --remount-all. ")])],-1)),e[492]||(e[492]=s("tr",null,[s("td",null,"Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase PMEM limits for the user UID.")],-1)),e[493]||(e[493]=s("tr",null,[s("td",null,[t("Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN."),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,[t("Increase value of "),s("span",{class:"notranslate"}," lsapi_backend_children "),t(" for UID in vhost.conf or globally in lsapi.conf.")])],-1)),e[494]||(e[494]=s("tr",null,[s("td",null,[t("fork() failed, please increase process limit: Cannot allocate memory"),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,[t("uid:(xxx); gid:(xxx); uid limit warning: EP should be < than NPROC, current EP: XX, NPROC: XX"),s("br"),s("br"),t("uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp")]),s("td",null,[t("Increase NPROC limits for the UID. It should be greater than EP and "),s("span",{class:"notranslate"}," lsapi_backend_children. ")])],-1)),e[495]||(e[495]=s("tr",null,[s("td",null,[t("Child process with pid: XXXXXX was killed by signal: 9, core dump: 0"),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"These errors occurs when the amount of PMEM limits is incommensurable with the number of EP. Increase PMEM limits or decrease EP number for the user UID.")],-1)),e[496]||(e[496]=s("tr",null,[s("td",null,[t("totBytesRead (X) != bodyLen (X), referer: XXXX"),s("br"),s("br"),t("Backend error on sending request(POST /XXXX HTTP/1.1); uri(/XXXX) content-length(X) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX)"),s("br"),s("br"),t("lsphp(XXXX): Child process with pid: XXXX was killed by signal: 15, core dump: 0")]),s("td",null,"No need to check this log."),s("td",null,"Increase LimitRequestBody (Apache) or/and SecRequestBodyNoFilesLimit (mod_security) configuration limits")],-1)),e[497]||(e[497]=s("tr",null,[s("td",null,"Connect to backend failed: connect to lsphp failed: 13"),s("td",null,"No need to check this log."),s("td",null,[t("Check that "),s("code",null,"mod_ruid2"),t(" is disabled")])],-1)),s("tr",null,[e[482]||(e[482]=s("td",null,"Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)",-1)),e[483]||(e[483]=s("td",null,"No need to check this log.",-1)),s("td",null,[e[476]||(e[476]=t("Set ")),e[477]||(e[477]=s("span",{class:"notranslate"},[s("code",null,"lsapi_disable_reject_mode On")],-1)),e[478]||(e[478]=t(" in your ")),e[479]||(e[479]=s("span",{class:"notranslate"},[s("code",null,"lsapi.conf")],-1)),e[480]||(e[480]=t(" and reload Apache. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:a(()=>e[475]||(e[475]=[t("Configuration Reference")])),_:1}),e[481]||(e[481]=t(" for more info."))])])])]),e[770]||(e[770]=l(`

    Non-standard apache user

    If apache runs under a username other than "apache" or "nobody" , you should rebuild sulsphp (where username is built in for security reasons) with corresponding username:

    yum install liblsapi liblsapi-devel   
    +

    In order to mod_lsapi PRO work lsapi.conf should be loaded to Apache through Include directive.

    `,11)),s("p",null,[e[393]||(e[393]=t("For more detailed description of the module directives please visit ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:i(()=>e[391]||(e[391]=[t("Configuration reference")])),_:1}),e[394]||(e[394]=t(".")),e[395]||(e[395]=s("br",null,null,-1)),e[396]||(e[396]=t(" For installation guide mod_lsapi PRO please visit ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-2"},{default:i(()=>e[392]||(e[392]=[t("Installation")])),_:1}),e[397]||(e[397]=t("."))]),e[751]||(e[751]=s("h4",{id:"configuration-references",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-references","aria-hidden":"true"},"#"),t(" Configuration references")],-1)),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#mod-lsapi-customization"},{default:i(()=>e[398]||(e[398]=[t("mod_lsapi customization")])),_:1}),e[399]||(e[399]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-engine"},{default:i(()=>e[400]||(e[400]=[t("lsapi_engine")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-socket-path"},{default:i(()=>e[401]||(e[401]=[t("lsapi_socket_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-poll-timeout"},{default:i(()=>e[402]||(e[402]=[t("lsapi_poll_timeout")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-per-user"},{default:i(()=>e[403]||(e[403]=[t("lsapi_per_user")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-output-buffering"},{default:i(()=>e[404]||(e[404]=[t("lsapi_output_buffering")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-reject-mode"},{default:i(()=>e[405]||(e[405]=[t("lsapi_disable_reject_mode")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-terminate-backends-on-exit"},{default:i(()=>e[406]||(e[406]=[t("lsapi_terminate_backends_on_exit")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-avoid-zombies"},{default:i(()=>e[407]||(e[407]=[t("lsapi_avoid_zombies")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-req-hostname"},{default:i(()=>e[408]||(e[408]=[t("lsapi_use_req_hostname")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-debug"},{default:i(()=>e[409]||(e[409]=[t("lsapi_debug")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-lsphp-backend"},{default:i(()=>e[410]||(e[410]=[t("Tuning LSPHP backend")])),_:1}),e[411]||(e[411]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env"},{default:i(()=>e[412]||(e[412]=[t("lsapi_set_env")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env-path"},{default:i(()=>e[413]||(e[413]=[t("lsapi_set_env_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-children"},{default:i(()=>e[414]||(e[414]=[t("lsapi_backend_children")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-connect-tries"},{default:i(()=>e[415]||(e[415]=[t("lsapi_backend_connect_tries")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-connect-timeout"},{default:i(()=>e[416]||(e[416]=[t("lsapi_backend_connect_timeout")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-process-time"},{default:i(()=>e[417]||(e[417]=[t("lsapi_backend_max_process_time")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-idle"},{default:i(()=>e[418]||(e[418]=[t("lsapi_backend_pgrp_max_idle")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-use-own-log"},{default:i(()=>e[419]||(e[419]=[t("lsapi_backend_use_own_log")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-common-own-log"},{default:i(()=>e[420]||(e[420]=[t("lsapi_backend_common_own_log")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-coredump"},{default:i(()=>e[421]||(e[421]=[t("lsapi_backend_coredump")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-accept-notify"},{default:i(()=>e[422]||(e[422]=[t("lsapi_backend_accept_notify")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-reqs"},{default:i(()=>e[423]||(e[423]=[t("lsapi_backend_pgrp_max_reqs")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-pgrp-max-crashes"},{default:i(()=>e[424]||(e[424]=[t("lsapi_backend_pgrp_max_crashes")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-loglevel-info"},{default:i(()=>e[425]||(e[425]=[t("lsapi_backend_loglevel_info")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-oom-score-adj"},{default:i(()=>e[426]||(e[426]=[t("lsapi_backend_oom_score_adj")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-server-tweak"},{default:i(()=>e[427]||(e[427]=[t("lsapi-server-tweak")])),_:1}),e[428]||(e[428]=t(" Beta"))])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#connection-pool-mode"},{default:i(()=>e[429]||(e[429]=[t("Connection pool mode")])),_:1}),e[430]||(e[430]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-with-connection-pool"},{default:i(()=>e[431]||(e[431]=[t("lsapi_with_connection_pool")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-idle"},{default:i(()=>e[432]||(e[432]=[t("lsapi_backend_max_idle")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-max-reqs"},{default:i(()=>e[433]||(e[433]=[t("lsapi_backend_max_reqs")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support-cloudlinux7-only"},{default:i(()=>e[434]||(e[434]=[t("CRIU support")])),_:1}),e[435]||(e[435]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu"},{default:i(()=>e[436]||(e[436]=[t("lsapi_criu")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-socket-path"},{default:i(()=>e[437]||(e[437]=[t("lsapi_criu_socket_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-imgs-dir-path"},{default:i(()=>e[438]||(e[438]=[t("lsapi_criu_imgs_dir_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-initial-start"},{default:i(()=>e[439]||(e[439]=[t("lsapi_backend_initial_start")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-use-shm"},{default:i(()=>e[440]||(e[440]=[t("lsapi_criu_use_shm")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-semtimedwait"},{default:i(()=>e[441]||(e[441]=[t("lsapi_backend_semtimedwait")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-reset-criu-on-apache-restart"},{default:i(()=>e[442]||(e[442]=[t("lsapi_reset_criu_on_apache_restart")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-debug"},{default:i(()=>e[443]||(e[443]=[t("lsapi_criu_debug")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-configuration-management"},{default:i(()=>e[444]||(e[444]=[t("PHP configuration management")])),_:1}),e[445]||(e[445]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-process-phpini"},{default:i(()=>e[446]||(e[446]=[t("lsapi_process_phpini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phpini"},{default:i(()=>e[447]||(e[447]=[t("lsapi_phpini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phprc"},{default:i(()=>e[448]||(e[448]=[t("lsapi_phprc")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-tmpdir"},{default:i(()=>e[449]||(e[449]=[t("lsapi_tmpdir")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enable-user-ini"},{default:i(()=>e[450]||(e[450]=[t("lsapi_enable_user_ini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-ini-homedir"},{default:i(()=>e[451]||(e[451]=[t("lsapi_user_ini_homedir")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-keep-http200"},{default:i(()=>e[452]||(e[452]=[t("lsapi_keep_http200")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-mod-php-behaviour"},{default:i(()=>e[453]||(e[453]=[t("lsapi_mod_php_behaviour")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-valuephp-admin-valuephp-flagphp-admin-flag"},{default:i(()=>e[454]||(e[454]=[t("php_value, php_admin_value, php_flag, php_admin_flag")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#security"},{default:i(()=>e[455]||(e[455]=[t("Security")])),_:1}),e[456]||(e[456]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-suexec"},{default:i(()=>e[457]||(e[457]=[t("lsapi_use_suexec")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-group"},{default:i(()=>e[458]||(e[458]=[t("lsapi_user_group")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-uid-gid"},{default:i(()=>e[459]||(e[459]=[t("lsapi_uid_gid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-default-uid"},{default:i(()=>e[460]||(e[460]=[t("lsapi_use_default_uid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-target-perm"},{default:i(()=>e[461]||(e[461]=[t("lsapi_target_perm")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-paranoid"},{default:i(()=>e[462]||(e[462]=[t("lsapi_paranoid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-check-document-root"},{default:i(()=>e[463]||(e[463]=[t("lsapi_check_document_root")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-forced-pwd-var"},{default:i(()=>e[464]||(e[464]=[t("lsapi_disable_forced_pwd_var")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-resend-buffer"},{default:i(()=>e[465]||(e[465]=[t("lsapi_max_resend_buffer")])),_:1})])]),e[752]||(e[752]=l('

    mod_lsapi customization

    lsapi_engine

    Syntax : lsapi_engine on/off
    Default : lsapi_engine off
    Context : httpd.conf, htaccess

    Description :
    Switching mod_lsapi handler on or off.


    lsapi_socket_path

    Syntax : lsapi_socket_path [path] Default : lsapi_socket_path /var/mod_lsapi
    Context : httpd.conf

    Description:
    Path to backend lsphp sockets. By default /var/mod_lsapi


    lsapi_poll_timeout

    Syntax : lsapi_poll_timeout [number]
    Default : lsapi_poll_timeout 300
    Context : httpd.conf, htaccess

    Description :
    Time to wait for response from the lsphp daemon, in seconds. 0 stands for infinity. For preventing long running processes which can use EP (limit number of entry processes). Default value is 300. Should be more or equal to 0. In the case of wrong format, the default value will be used.


    lsapi_per_user

    Syntax : lsapi_per_user On/Off
    Default : lsapi_per_user Off
    Context : httpd.conf

    Description :
    Invoke master lsPHP process not per VirtualHost but per account. When On, invoke backend not per VirtualHost but per account. Default value is Off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_output_buffering

    Syntax : lsapi_output_buffering On/Off
    Default : lsapi_output_buffering On
    Context : httpd.conf, virtualhost, htaccess

    Description :
    Enable or disable output buffering on Apache level. Default value is On.


    lsapi_disable_reject_mode

    Syntax : lsapi_disable_reject_mode On/Off
    Default : lsapi_disable_reject_mode Off
    Context : httpd.conf, virtualhost

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such request immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into infinite queue, until one or more LSPHP daemon becomes free. When HTTP request is rejected in REJECT mode, mod_lsapi will write into Apache error_log the following message: Connect to backend rejected, and the client will receive 507 HTTP response. By default LSPHP daemon in CloudLinux OS uses REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_on_exit

    Syntax : lsapi_terminate_backends_on_exit On/Off
    Default : lsapi_terminate_backends_on_exit On
    Context : httpd.conf

    Description :
    httpd.conf, On - stop lsphp services on apache restart, Off - leave live started lsphp services on apache restart (for php+opcache). The lsphp will not restart, even if Apache gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies On/Off
    Default : lsapi_avoid_zombies Off
    Context : httpd.conf, virtualhost

    Description :
    Enable or disable a mechanism to avoid creation of zombie processes by lsphp. Default value is Off.


    lsapi_use_req_hostname

    Syntax : lsapi_use_req_hostname On/Off
    Default : lsapi_use_req_hostname Off
    Context : httpd.conf, virtualhosts

    Description :
    By default, we are using hostname from the server_rec structure (off), it means that mod_lsapi takes hostname from the VirtualHost section of the configuration file. Using hostname from the request_rec structure (On) means that mod_lsapi takes hostname from the HOST section of the request. It could be useful for those who use dynamically generated configs for virtual hosts for example with mod_lua.


    lsapi_sentry

    Syntax : lsapi_sentry On/Off
    Default : lsapi_sentry On
    Context : httpd.conf

    Description :
    When this option is enabled, errors that occur in the operation of the mod_lsapi will be sent to the remote sentry server. You can see the error messages that were sent to the sentry server in the directory /var/log/mod_lsapi. If you do not want to send error notifications from your server, you can disable this directive in lsapi.conf.


    lsapi_debug

    Syntax : lsapi_debug On/Off
    Default : lsapi_debug Off
    Context : httpd.conf, virtualhost

    Description :
    Extended debug logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env VAR_NAME [VAR_VALUE]
    Default : -
    Context : httpd.conf

    Description :
    Pass env variable to lsphp. By default lsphp environment have only TEMP, TMP and PATH variables set.
    Example: lsapi_set_env TMP "/var/lsphp-tmp"
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.
    To change it, use explicitly lsapi_set_env_path option.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_set_env_path

    Syntax : lsapi_set_env_path [path(s)]
    Default : lsapi_set_env_path /usr/local/bin:/usr/bin:/bin
    Context : httpd.conf

    Description :
    Change PATH variable in the environment of lsPHP processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Default : lsapi_backend_children [EP]
    Context : httpd.conf

    Description :
    Sets maximum number of simultaneously running child backend processes. Optional, a default directive value is equal to 120. LSAPI_CHILDREN environment variable is set according to the following rules:

    • If NPROC and EP are unlimited, the directive value is used.
    • If NPROC is set to any limited value and the directive value is set to a number less than NPROC-1, the directive value is used.
    • If the value is bigger than NPROC-1 and EP is set to unlimited, NPROC-1 is used.
    • If the value is bigger than NPROC-1 and EP is set to any limited value, EP+1 is used.

    For example, with the default lve settings NPROC=100 and EP=20, the effective LSAPI_CHILDREN will be EP+1, that is LSAPI_CHILDREN=21.


    lsapi_backend_connect_tries

    Syntax : lsapi_backend_connect_tries [number]
    Default : lsapi_backend_connect_tries 20
    Context : httpd.conf

    Description :
    Number of retries to connects to lsPHP daemon.


    lsapi_backend_connect_timeout

    Syntax : lsapi_backend_connect_timeout [number]
    Default : lsapi_backend_connect_timeout 500000
    Context : httpd.conf

    Description :
    Number of usec to wait while lsPHP starts (if not started on request).


    lsapi_backend_max_process_time

    Syntax : lsapi_backend_max_process_time [number]
    Default : lsapi_backend_max_process_time 300
    Context : httpd.conf, virtualhost

    Description :
    Sets env variable LSAPI_MAX_PROCESS_TIME
    Optional. Default value is 300.
    Timeout to kill runaway processes.


    lsapi_backend_pgrp_max_idle

    Syntax : lsapi_backend_pgrp_max_idle [number]
    Default : lsapi_backend_pgrp_max_idle 30
    Context : httpd.conf

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds.
    Controls how long a control process will wait for a new request before it exits. # 0 stands for infinite.
    Optional, default value is 30.
    Should be more or equal to 0.


    lsapi_backend_use_own_log

    Syntax : lsapi_backend_use_own_log On/Off
    Default : lsapi_backend_use_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    Redirecting log output of backend processes from Apache error_log to dedicated log file or files, depending on value of lsapi_backend_common_own_log option. If Off, use Apache error log file for backend output, or separate file otherwise.


    lsapi_backend_common_own_log

    Syntax : lsapi_backend_common_own_log On/Off
    Default : lsapi_backend_common_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    It will be used only when lsapi_backend_use_own_log set to On. On - backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump On/Off
    Default : lsapi_backend_coredump Off
    Context : httpd.conf, htaccess

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it will be passed - core dump on lsphp crash will be created.
    Off by default.
    By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core file, you should set this environment variable. If set, regardless the value has been set to, core files will be created under the directory that the PHP script in.


    lsapi_backend_accept_notify

    Syntax : lsapi_backend_accept_notify On/Off
    Default : lsapi_backend_accept_notify On
    Context : httpd.conf, virtualhost

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes.This mode is incompatible with PHP 4.4.


    lsapi_backend_pgrp_max_reqs

    Syntax : lsapi_backend_prgrp_max_reqs [number]
    Default : lsapi_backend_max_reqs 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_pgrp_max_crashes

    Syntax : lsapi_backend_prgrp_max_crashes [number]
    Default : lsapi_backend_max_crashes 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [On/Off]

    Default: lsapi_backend_loglevel_info Off

    Context: httpd.conf, virtualhost

    Description: Controls which log level will be used to write PHP warnings and notices into Apache’s error_log. Optional, the default value is Off. In that case LOG_WARNING log level will be used. Otherwise, with On value, LOG_INFO log level will be used.


    lsapi_backend_oom_score_adj

    Syntax: lsapi_backend_oom_score_adj [number]

    Default: lsapi_backend_oom_score_adj 0

    Context: httpd.conf, virtualhost

    Description: This option can be used to apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked then desirable that lsphp processes are sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting value oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    ',114)),e[753]||(e[753]=s("h4",{id:"lsapi-server-tweak",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#lsapi-server-tweak","aria-hidden":"true"},"#"),t(),s("strong",null,"lsapi_server_tweak"),t(),s("Badge",{type:"info",text:"beta"})],-1)),e[754]||(e[754]=l('

    Syntax: lsapi_server_tweak [On/Off]

    Default: lsapi_server_tweak Off

    Context: httpd.conf

    Description: This option, when switched on, allows the use of lsapi_set_env and lsapi_set_env_path config options in the virtualhost context.


    Connection pool mode

    lsapi_with_connection_pool

    Syntax : lsapi_with_connection_pool On/Off
    Default : lsapi_with_connection_pool Off
    Context : httpd.conf

    Description :
    On/Off - disable enable connect pool, default is Off.


    lsapi_backend_max_idle

    Syntax : lsapi_backend_max_idle [number]
    Default : lsapi_backend_max_idle 300
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of wrong format default value will be used. Optional, default value is 300.


    lsapi_backend_max_reqs

    Syntax : lsapi_backend_max_reqs [number]
    Default : lsapi_backend_max_reqs 10000
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of wrong format default value will be used. Optional, default value is 10000.


    CRIU support

    lsapi_criu

    Syntax : lsapi_criu On/Off
    Default : lsapi_criu Off
    Context : httpd.conf

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_socket_path

    Syntax : lsapi_criu_socket_path [path]
    Default : lsapi_criu_socket_path /var/run/criu/criu_service.socket
    Context : httpd.conf

    Description :
    Set path to socket for communication with criu service. Default: /var/run/criu/criu_service.socket.


    lsapi_criu_imgs_dir_path

    Syntax : lsapi_criu_imgs_dir_path [path]
    Default : lsapi_criu_imgs_dir_path /var/mod_lsapi/
    Context : httpd.conf

    Description :
    Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/mod_lsapi/


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Default : lsapi_backend_initial_start 0
    Context : httpd.conf

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm Off/Signals
    Default : lsapi_criu_use_shm Off
    Context : httpd.conf

    Description :
    Method of requests counting. Off - use shared memory. Signals - use signals from child processes to parent. Default: Off


    lsapi_backend_semtimedwait

    Syntax : lsapi_backend_semtimedwait On/Off
    Default : lsapi_backend_semtimedwait On
    Context : httpd.conf

    Description :
    Use semaphore for checking when lsphp process will be started. Speed of start lsphp increased with semaphore using. This method avoid cycles of waiting for lsphp start. Default: On.


    lsapi_reset_criu_on_apache_restart

    Syntax : lsapi_reset_criu_on_apache_restart On/Off
    Default : lsapi_reset_criu_on_apache_restart Off
    Context : httpd.conf, virtualhost

    Description :
    This option allows cleaning all CRIU images on Apache restart.
    Setting lsapi_reset_criu_on_apache_restart to On means that on each Apache restart the CRIU images which are stored in directory specified by lsapi_criu_imgs_dir_path directive will be recreated on new request to domain(only after restart).
    If this option set to Off then CRIU images won’t be recreated on Apache restart.


    lsapi_criu_debug

    Syntax: lsapi_criu_debug On/Off
    Default: lsapi_criu_debug Off
    Context: httpd.conf, virtualhost

    Description :
    Enable/disable CRIU related debug logging.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini On/Off
    Default : lsapi_process_phpini Off
    Context : httpd.conf, virtualhost, directory

    Description :
    Enable or disable phpini_* directive processing. Default value is Off.


    lsapi_phpini

    Syntax : lsapi_phpini [path]
    Default : lsapi_phpini -
    Context : httpd.conf, virtualhost, htaccess

    Description :
    When lsapi_process_phpini option switched to Off, these values will be silently ignored. lsapi_phpini values with absolute filename of php.ini file can be inserted into .htaccess files in order to set custom php.ini which will override/complement settings from system default php.ini.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Default : lsapi_phprc No
    Context : httpd.conf, virtualhost

    Description : The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example
    lsapi_phprc No
    lsapi_phprc Auto
    lsapi_phprc DocRoot
    lsapi_phprc Env
    lsapi_phprc /etc/


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Default : lsapi_tmpdir /tmp
    Context : httpd.conf, virtualhost

    Description :
    Set alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini On/Off
    Default : lsapi_enable_user_ini Off
    Context : httpd.conf, virtualhost

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is Off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir On/Off
    Default : lsapi_user_ini_homedir Off
    Context : httpd.conf, virtualhost

    Description :
    If lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in home directory also. Default value is Off.


    lsapi_keep_http200

    Syntax : lsapi_keep_http200 On/Off
    Default : lsapi_keep_http200 Off
    Context : httpd.conf, .htaccess

    Description :
    If set to On, always keep backend's response status as mod_php does. If set to Off, response status can be overridden by Apache as suphp does (in case of call via ErrorDocument directive).


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour On/Off
    Default : lsapi_mod_php_behaviour On
    Context : httpd.conf, virtualhost, directory

    Description :
    On/Off - disable php_* directives, default On.


    php_value, php_admin_value, php_flag, php_admin_flag

    Syntax : [php_value|php_admin_value|php_flag|php_admin_flag]
    Default :
    Context : httpd.conf, virtualhost, htaccess

    Description :
    mod_php emulation.


    Security

    lsapi_use_suexec

    Syntax : lsapi_use_suexec On/Off
    Default : lsapi_use_suexec On
    Context : httpd.conf

    Description :
    Use or not suexec to a target user.


    lsapi_user_group

    Syntax : lsapi_user_group [user_name] [group_name]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for requests.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for request.


    lsapi_use_default_uid

    Syntax : lsapi_use_default_uid On/Off
    Default : lsapi_use_default_uid On
    Context : httpd.conf

    Description :
    Use default Apache UID/GID if no uid/gid set. Values: On/Off. If Off, and no UID/GID set, error 503 will be returned.


    lsapi_target_perm

    Syntax : lsapi_target_perm On/Off
    Default : lsapi_target_perm Off
    Context : httpd.conf

    Description :
    Check target PHP script permissions. If set to On, lsapi will check that script is owned by the same user, as user under which it is being executed. Return 503 error if they don't match. Default: Off.


    lsapi_paranoid

    Syntax : lsapi_paranoid On/Off
    Default : lsapi_paranoid Off
    Context : httpd.conf

    Description :
    Check or not permissions of target php scripts. Optional, default value is Off.


    lsapi_check_document_root

    Syntax : lsapi_check_document_root On/Off
    Default : lsapi_check_document_root On
    Context : httpd.conf

    Description :
    Check or not owner of DOCUMENT_ROOT. Optional, default value is On.


    lsapi_disable_forced_pwd_var

    Syntax : lsapi_disable_forced_pwd_var On/Off
    Default : lsapi_disable_forced_pwd_var Off
    Context : httpd.conf, virtualhost

    Description :
    To disable addition of PWD variable. Default value is Off. If set to On, the PWD variable will not be added into a backend environment.


    lsapi_max_resend_buffer

    Syntax : lsapi_max_resend_buffer [number]tmp
    Default : lsapi_max_resend_buffer 200
    Context : httpd.conf, virtualhost

    Description :
    Maximum buffer in KiB to resend for request that has a body (like POST request body).

    ',124)),s("p",null,[e[467]||(e[467]=t("See also ")),a(n,{to:"/cloudlinuxos/command-line_tools/#apache-mod-lsapi-pro"},{default:i(()=>e[466]||(e[466]=[t("Apache mod_lsapi PRO CLI tools")])),_:1}),e[468]||(e[468]=t("."))]),e[755]||(e[755]=s("h3",{id:"troubleshooting-3",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#troubleshooting-3","aria-hidden":"true"},"#"),t(" Troubleshooting")],-1)),e[756]||(e[756]=s("p",null,[s("strong",null,"Debugging mod_lsapi issues: error_log & sulsphp_log")],-1)),e[757]||(e[757]=s("p",null,"mod_lsapi errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.",-1)),e[758]||(e[758]=s("p",null,"See next table for more details:",-1)),s("table",null,[e[492]||(e[492]=s("thead",null,[s("tr",null,[s("th"),s("th"),s("th")])],-1)),s("tbody",null,[e[478]||(e[478]=s("tr",null,[s("td",null,[s("strong",null,"error_log")]),s("td",null,[s("strong",null,"sulsphp_log")]),s("td",null,[s("strong",null,"Solution")])],-1)),e[479]||(e[479]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE ID"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase pmem or vmem limits for the user uid.")],-1)),e[480]||(e[480]=s("tr",null,[s("td",null,"Error sending request: ReceiveLSHeader: nothing to read from backend socket"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp was killed. It can be due to apache restart or lfd. If you see this message too often - change "),s("span",{class:"notranslate"}," lsapi_terminate_backends_on_exit "),t(" to "),s("span",{class:"notranslate"}," Off "),t(" in lsapi.conf or add to "),s("span",{class:"notranslate"}," /etc/csf/csf.pignore "),t(" the following lines: "),s("span",{class:"notranslate"}," exe:/usr/local/bin/lsphp "),t(" pexe:/opt/alt/php.*/usr/bin/lsphp")])],-1)),e[481]||(e[481]=s("tr",null,[s("td",null,"Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact "),s("a",{href:"https://cloudlinux.zendesk.com/hc/",target:"_blank",rel:"noopener noreferrer"},"https://cloudlinux.zendesk.com/"),t(" so we can investigate the cause.")])],-1)),e[482]||(e[482]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"file is writable by others: (///usr/local/bin/lsphp)"),s("td",null,[t("Incorrect lsphp file permissions. For fixing: "),s("span",{class:"notranslate"}," chmod 755 /usr/local/bin/lsphp "),t(" cagefsctl --force-update.")])],-1)),e[483]||(e[483]=s("tr",null,[s("td",null,"Could not determine uid/gid for request"),s("td",null,"No need to check this log."),s("td",null,[t("UID/GID are not set in virtualhost. Set "),s("span",{class:"notranslate"}," lsapi_use_default_uid On "),t(" in lsapi.conf (it is "),s("span",{class:"notranslate"}," On "),t(" by default since 0.1-98 version, this solution is for older versions).")])],-1)),e[484]||(e[484]=s("tr",null,[s("td",null,"Own id for script file (/xxxx/xxx/xxxx) is xxx; should be xxxx"),s("td",null,"No need to check this log."),s("td",null,[t("File is not owned by the user PHP executed by. To overwrite (insecure), set "),s("span",{class:"notranslate"}," lsapi_target_perm Off "),t(" in lsapi.conf.")])],-1)),e[485]||(e[485]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"Entering jail error"),s("td",null,[t("Check if СageFS enabled. Try running "),s("span",{class:"notranslate"}," cagefsctl --remount-all. ")])],-1)),e[486]||(e[486]=s("tr",null,[s("td",null,"Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase PMEM limits for the user UID.")],-1)),e[487]||(e[487]=s("tr",null,[s("td",null,[t("Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN."),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,[t("Increase value of "),s("span",{class:"notranslate"}," lsapi_backend_children "),t(" for UID in vhost.conf or globally in lsapi.conf.")])],-1)),e[488]||(e[488]=s("tr",null,[s("td",null,[t("fork() failed, please increase process limit: Cannot allocate memory"),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,[t("uid:(xxx); gid:(xxx); uid limit warning: EP should be < than NPROC, current EP: XX, NPROC: XX"),s("br"),s("br"),t("uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp")]),s("td",null,[t("Increase NPROC limits for the UID. It should be greater than EP and "),s("span",{class:"notranslate"}," lsapi_backend_children. ")])],-1)),e[489]||(e[489]=s("tr",null,[s("td",null,[t("Child process with pid: XXXXXX was killed by signal: 9, core dump: 0"),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"These errors occurs when the amount of PMEM limits is incommensurable with the number of EP. Increase PMEM limits or decrease EP number for the user UID.")],-1)),e[490]||(e[490]=s("tr",null,[s("td",null,[t("totBytesRead (X) != bodyLen (X), referer: XXXX"),s("br"),s("br"),t("Backend error on sending request(POST /XXXX HTTP/1.1); uri(/XXXX) content-length(X) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX)"),s("br"),s("br"),t("lsphp(XXXX): Child process with pid: XXXX was killed by signal: 15, core dump: 0")]),s("td",null,"No need to check this log."),s("td",null,"Increase LimitRequestBody (Apache) or/and SecRequestBodyNoFilesLimit (mod_security) configuration limits")],-1)),e[491]||(e[491]=s("tr",null,[s("td",null,"Connect to backend failed: connect to lsphp failed: 13"),s("td",null,"No need to check this log."),s("td",null,[t("Check that "),s("code",null,"mod_ruid2"),t(" is disabled")])],-1)),s("tr",null,[e[476]||(e[476]=s("td",null,"Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)",-1)),e[477]||(e[477]=s("td",null,"No need to check this log.",-1)),s("td",null,[e[470]||(e[470]=t("Set ")),e[471]||(e[471]=s("span",{class:"notranslate"},[s("code",null,"lsapi_disable_reject_mode On")],-1)),e[472]||(e[472]=t(" in your ")),e[473]||(e[473]=s("span",{class:"notranslate"},[s("code",null,"lsapi.conf")],-1)),e[474]||(e[474]=t(" and reload Apache. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references"},{default:i(()=>e[469]||(e[469]=[t("Configuration Reference")])),_:1}),e[475]||(e[475]=t(" for more info."))])])])]),e[759]||(e[759]=l(`

    Non-standard apache user

    If apache runs under a username other than "apache" or "nobody" , you should rebuild sulsphp (where username is built in for security reasons) with corresponding username:

    yum install liblsapi liblsapi-devel   
     cd ~$ wget [https://repo.cloudlinux.com/cloudlinux/sources/da/mod_lsapi.tar.gz](https://repo.cloudlinux.com/cloudlinux/sources/da/mod_lsapi.tar.gz)  
     tar zxvf mod_lsapi.tar.gz  
     cd mod-lsapi-0.1-37  
    @@ -1223,14 +1223,14 @@ lsapi_criu_use_shm Off
     chown nobody:nobody /usr/share/criu/mod_lsapi
     touch /usr/share/criu/mod_lsapi/lsphp.criu.reset
     

    On the next requests to all virtual hosts images will be recreated (deleted first and created again later - it depends on lsapi_backend_initial_start value).

    1. Аdded possibility to clean CRIU images from user space.

    If a user needs to clean CRIU images for lsphp, he should create a file: ~/mod_lsapi_reset_me_[vhost_name] . Where [vhost_name] is a ServerName from the VirtualHost block in the configuration file. On the next restart of lsphp, the images will be cleaned.

    Example:

    cd; touch mod_lsapi_reset_me_criu.test.com
    -

    where vhost.conf contains:
    ServerName criu.test.com

    This mode is enabled by default and creates a separate lsphp process for each virtual host.

    mod_lsapi_reset_me[vhost_name] flag will not work for a user when lsapi_per_user option is On.

    1. There is (default off) option in mod_lsapi that creates only one lsphp process for a user, regardless of the number of his virtual hosts. We don't recommend to use this option with CRIU, but if you use it, make sure that your virtual hosts (under the same user) have the same environment configurations. If they are not the same, this may cause undesirable lsphp process operation.

    NGINX LSAPI Module

    General information and requirements

    The NGINX LSAPI Module is an extension for the NGINX web server, designed to seamlessly integrate the lightweight, high-performance LiteSpeed PHP processing capability directly within the NGINX architecture. This module enables NGINX to efficiently handle PHP requests using the LiteSpeed SAPI, offering an alternative to traditional PHP-FPM or mod_php approaches. It aims to leverage the speed and flexibility of LiteSpeed's PHP processing in environments where the NGINX is the preferred web server.

    How does it work?

    1. NGINX passes handling for PHP request to NGINX LSAPI Module;
    2. NGINX LSAPI Module uses liblsapi to transfer request to the lsphp parent process;
    3. lsphp forks the child process, which executes the request and returns data to NGINX LSAPI Module;
    • If there are no requests for lsapi_pgrp_max_idle seconds, lsphp parent process will be terminated;
    • If there are no lsphp child processes available when a new request comes, the new lsphp child process will be created;
    • lsphp children process concurrent requests simultaneously;
    • The maximum number of simultaneously running lsphp child processes can be set by the lsapi_backend_children directive.

    What is lsphp?

    lsphp - PHP + LSAPI. What is PHP LSAPI? LiteSpeed Server Application Programming Interface (LSAPI) is designed specifically for seamless, optimized communication between the LiteSpeed Web Server and third-party web applications. With NGINX LSAPI Module, this protocol is now available for NGINX.

    Using NGINX LSAPI Module, we have seen higher performance than NGINX with fastcgi+php-fpm, easier installation than php-fpm and easier integration with any control panel. NGINX LSAPI Module means faster and more stable dynamic web pages.

    Optional requirements

    • Configured LVE containers for end-users ( recommended - control over resource consumption );
    • Enabled CageFS for end-users ( recommended - higher security level );
    • PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux OS;
    • ea-php - alternative to alt-php provided by cPanel (for cPanel only).

    Installation

    NGINX LSAPI Module can be installed through YUM package manager. However, the installation process varies depending on the control panel.

    Select the control panel you are using:

    `,148)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-ea-nginx"},{default:a(()=>e[499]||(e[499]=[t("cPanel")])),_:1})]),e[500]||(e[500]=s("li",null,"No control panel - In progress",-1)),e[501]||(e[501]=s("li",null,"Plesk - In progress",-1)),e[502]||(e[502]=s("li",null,"DirectAdmin - In progreess",-1))]),e[771]||(e[771]=l(`

    Installing on cPanel servers with ea-nginx

    Install NGINX LSAPI Module and related packages through YUM package manager as follows:

    yum install ea-nginx-mod-lsapi --enablerepo=cl-ea4-testing
    +

    where vhost.conf contains:
    ServerName criu.test.com

    This mode is enabled by default and creates a separate lsphp process for each virtual host.

    mod_lsapi_reset_me[vhost_name] flag will not work for a user when lsapi_per_user option is On.

    1. There is (default off) option in mod_lsapi that creates only one lsphp process for a user, regardless of the number of his virtual hosts. We don't recommend to use this option with CRIU, but if you use it, make sure that your virtual hosts (under the same user) have the same environment configurations. If they are not the same, this may cause undesirable lsphp process operation.

    NGINX LSAPI Module

    General information and requirements

    The NGINX LSAPI Module is an extension for the NGINX web server, designed to seamlessly integrate the lightweight, high-performance LiteSpeed PHP processing capability directly within the NGINX architecture. This module enables NGINX to efficiently handle PHP requests using the LiteSpeed SAPI, offering an alternative to traditional PHP-FPM or mod_php approaches. It aims to leverage the speed and flexibility of LiteSpeed's PHP processing in environments where the NGINX is the preferred web server.

    How does it work?

    1. NGINX passes handling for PHP request to NGINX LSAPI Module;
    2. NGINX LSAPI Module uses liblsapi to transfer request to the lsphp parent process;
    3. lsphp forks the child process, which executes the request and returns data to NGINX LSAPI Module;
    • If there are no requests for lsapi_pgrp_max_idle seconds, lsphp parent process will be terminated;
    • If there are no lsphp child processes available when a new request comes, the new lsphp child process will be created;
    • lsphp children process concurrent requests simultaneously;
    • The maximum number of simultaneously running lsphp child processes can be set by the lsapi_backend_children directive.

    What is lsphp?

    lsphp - PHP + LSAPI. What is PHP LSAPI? LiteSpeed Server Application Programming Interface (LSAPI) is designed specifically for seamless, optimized communication between the LiteSpeed Web Server and third-party web applications. With NGINX LSAPI Module, this protocol is now available for NGINX.

    Using NGINX LSAPI Module, we have seen higher performance than NGINX with fastcgi+php-fpm, easier installation than php-fpm and easier integration with any control panel. NGINX LSAPI Module means faster and more stable dynamic web pages.

    Optional requirements

    • Configured LVE containers for end-users ( recommended - control over resource consumption );
    • Enabled CageFS for end-users ( recommended - higher security level );
    • PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux OS;
    • ea-php - alternative to alt-php provided by cPanel (for cPanel only).

    Installation

    NGINX LSAPI Module can be installed through YUM package manager. However, the installation process varies depending on the control panel.

    Select the control panel you are using:

    `,148)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-ea-nginx"},{default:i(()=>e[493]||(e[493]=[t("cPanel")])),_:1})]),e[494]||(e[494]=s("li",null,"No control panel - In progress",-1)),e[495]||(e[495]=s("li",null,"Plesk - In progress",-1)),e[496]||(e[496]=s("li",null,"DirectAdmin - In progreess",-1))]),e[760]||(e[760]=l(`

    Installing on cPanel servers with ea-nginx

    Install NGINX LSAPI Module and related packages through YUM package manager as follows:

    yum install ea-nginx-mod-lsapi --enablerepo=cl-ea4-testing
     
    Now, when the module is installed, restart NGINX to ensure that NGINX LSAPI Module is enabled:
    service nginx restart
    -
    `,5)),s("p",null,[e[504]||(e[504]=t("Use Apache2Nginx to set up NGINX hosting on the server and automatically convert .htaccess files into corresponding NGINX configuration. For more details, please visit ")),n(i,{to:"/cloudlinuxos/apache2nginx/#apache2nginx"},{default:a(()=>e[503]||(e[503]=[t("Apache2Nginx")])),_:1}),e[505]||(e[505]=t("."))]),e[772]||(e[772]=s("h3",{id:"uninstalling-4",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#uninstalling-4","aria-hidden":"true"},"#"),t(" Uninstalling")],-1)),e[773]||(e[773]=s("p",null,"The uninstallation process of the NGINX LSAPI Module also varies depending on your control panel.",-1)),e[774]||(e[774]=s("p",null,"Select the control panel you are using:",-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstallation-procedure-for-cpanel-servers-with-ea-nginx"},{default:a(()=>e[506]||(e[506]=[t("cPanel")])),_:1})]),e[507]||(e[507]=s("li",null,"No control panel - In progress",-1)),e[508]||(e[508]=s("li",null,"Plesk - In progress",-1)),e[509]||(e[509]=s("li",null,"DirectAdmin - In progreess",-1))]),e[775]||(e[775]=l(`

    Uninstallation procedure for cPanel servers with ea-nginx

    Remove packages with YUM package manager:

    yum erase ea-nginx-mod-lsapi
    +
    `,5)),s("p",null,[e[498]||(e[498]=t("Use Apache2Nginx to set up NGINX hosting on the server and automatically convert .htaccess files into corresponding NGINX configuration. For more details, please visit ")),a(n,{to:"/cloudlinuxos/apache2nginx/#apache2nginx"},{default:i(()=>e[497]||(e[497]=[t("Apache2Nginx")])),_:1}),e[499]||(e[499]=t("."))]),e[761]||(e[761]=s("h3",{id:"uninstalling-4",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#uninstalling-4","aria-hidden":"true"},"#"),t(" Uninstalling")],-1)),e[762]||(e[762]=s("p",null,"The uninstallation process of the NGINX LSAPI Module also varies depending on your control panel.",-1)),e[763]||(e[763]=s("p",null,"Select the control panel you are using:",-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#uninstallation-procedure-for-cpanel-servers-with-ea-nginx"},{default:i(()=>e[500]||(e[500]=[t("cPanel")])),_:1})]),e[501]||(e[501]=s("li",null,"No control panel - In progress",-1)),e[502]||(e[502]=s("li",null,"Plesk - In progress",-1)),e[503]||(e[503]=s("li",null,"DirectAdmin - In progreess",-1))]),e[764]||(e[764]=l(`

    Uninstallation procedure for cPanel servers with ea-nginx

    Remove packages with YUM package manager:

    yum erase ea-nginx-mod-lsapi
     
    Restart NGINX afterwards:
    service nginx restart
    -
    `,5)),s("p",null,[e[511]||(e[511]=t("To remove NGINX from your system and restore Apache configuration, please visit ")),n(i,{to:"/cloudlinuxos/apache2nginx/#switch-back-to-apache-hosting"},{default:a(()=>e[510]||(e[510]=[t("Apache2Nginx")])),_:1}),e[512]||(e[512]=t("."))]),e[776]||(e[776]=l(`

    Uninstallation procedure for servers with no control panel

    Remove packages with YUM package manager:

    yum erase ea-nginx-mod-lsapi
    +
    `,5)),s("p",null,[e[505]||(e[505]=t("To remove NGINX from your system and restore Apache configuration, please visit ")),a(n,{to:"/cloudlinuxos/apache2nginx/#switch-back-to-apache-hosting"},{default:i(()=>e[504]||(e[504]=[t("Apache2Nginx")])),_:1}),e[506]||(e[506]=t("."))]),e[765]||(e[765]=l(`

    Uninstallation procedure for servers with no control panel

    Remove packages with YUM package manager:

    yum erase ea-nginx-mod-lsapi
     rm [path to nginx-mod-lsapi.conf]
     
    Restart NGINX to restore the standard PHP handler:
    service nginx restart
    -

    Configuration

    `,6)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-1"},{default:a(()=>e[513]||(e[513]=[t("Configuration references")])),_:1})])]),e[777]||(e[777]=l(`

    Note

    If using Apache2Nginx, no configuration is required for NGINX LSAPI Module. The module is automatically configured to process PHP requests.

    In order to get NGINX LSAPI Module to work properly, you'll need to configure NGINX. To do this, we use a separate lsapi.conf file.

    First of all, you need to make sure that the appropriate LSAPI module configuration exists and contains the correct content.

    [root@nginx]# cat /usr/share/nginx/modules/ngx-mod-lsapi.conf
    +

    Configuration

    `,6)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-1"},{default:i(()=>e[507]||(e[507]=[t("Configuration references")])),_:1})])]),e[766]||(e[766]=l(`

    Note

    If using Apache2Nginx, no configuration is required for NGINX LSAPI Module. The module is automatically configured to process PHP requests.

    In order to get NGINX LSAPI Module to work properly, you'll need to configure NGINX. To do this, we use a separate lsapi.conf file.

    First of all, you need to make sure that the appropriate LSAPI module configuration exists and contains the correct content.

    [root@nginx]# cat /usr/share/nginx/modules/ngx-mod-lsapi.conf
     load_module "/usr/lib64/nginx/modules/ngx_http_lsapi_module.so";
     

    In case of ea-nginx the file can be: /etc/nginx/conf.d/modules/ea-nginx-lsapi-module.conf

    Then make sure that the loading of dynamic modules is not omitted in your main nginx configuration (nginx.conf).

    include /usr/share/nginx/modules/*.conf;
     
    In order to enable the module to process requests, you need to add the lsapi_enabled directive to your _lsapi.conf_ file as follows:
    lsapi_enabled on;
    @@ -1251,7 +1251,7 @@ load_module "/usr/lib64/nginx/modules/ngx_http_lsapi_module.so";
     		root   html;
     	}
     }
    -

    In order for NGINX LSAPI Module to work lsapi.conf should be loaded to NGINX through Include directive.

    `,16)),s("p",null,[e[516]||(e[516]=t("For a more detailed description of the module directives please visit the ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-2"},{default:a(()=>e[514]||(e[514]=[t("Configuration reference")])),_:1}),e[517]||(e[517]=t(".")),e[518]||(e[518]=s("br",null,null,-1)),e[519]||(e[519]=t(" For the installation guide for NGINX LSAPI Module please visit ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-3"},{default:a(()=>e[515]||(e[515]=[t("Installation")])),_:1}),e[520]||(e[520]=t("."))]),e[778]||(e[778]=s("h4",{id:"configuration-references-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-references-1","aria-hidden":"true"},"#"),t(" Configuration references")],-1)),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#nginx-lsapi-module-customization"},{default:a(()=>e[521]||(e[521]=[t("NGINX LSAPI Module customization")])),_:1}),e[522]||(e[522]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enabled"},{default:a(()=>e[523]||(e[523]=[t("lsapi_enabled")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-sock-path"},{default:a(()=>e[524]||(e[524]=[t("lsapi_sock_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-per-user-1"},{default:a(()=>e[525]||(e[525]=[t("lsapi_per_user")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-reject"},{default:a(()=>e[526]||(e[526]=[t("lsapi_disable_reject")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-terminate-backends-ex"},{default:a(()=>e[527]||(e[527]=[t("lsapi_terminate_backends_ex")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-avoid-zombies"},{default:a(()=>e[528]||(e[528]=[t("lsapi_avoid_zombies")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-lsphp-backend-1"},{default:a(()=>e[529]||(e[529]=[t("Tuning LSPHP backend")])),_:1}),e[530]||(e[530]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env-1"},{default:a(()=>e[531]||(e[531]=[t("lsapi_set_env")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-env-path"},{default:a(()=>e[532]||(e[532]=[t("lsapi_env_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-children-1"},{default:a(()=>e[533]||(e[533]=[t("lsapi_backend_children")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-retry-max"},{default:a(()=>e[534]||(e[534]=[t("lsapi_retry_max")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-process-time"},{default:a(()=>e[535]||(e[535]=[t("lsapi_max_process_time")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-idle"},{default:a(()=>e[536]||(e[536]=[t("lsapi_pgrp_max_idle")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-own-log"},{default:a(()=>e[537]||(e[537]=[t("lsapi_own_log")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-common-own-log"},{default:a(()=>e[538]||(e[538]=[t("lsapi_common_own_log")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-coredump-1"},{default:a(()=>e[539]||(e[539]=[t("lsapi_backend_coredump")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-accept-notify"},{default:a(()=>e[540]||(e[540]=[t("lsapi_accept_notify")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-reqs"},{default:a(()=>e[541]||(e[541]=[t("lsapi_pgrp_max_reqs")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-crashes"},{default:a(()=>e[542]||(e[542]=[t("lsapi_pgrp_max_crashes")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-loglevel-info-1"},{default:a(()=>e[543]||(e[543]=[t("lsapi_backend_loglevel_info")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-oom-score-adj"},{default:a(()=>e[544]||(e[544]=[t("lsapi_oom_score_adj")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#connection-pool-mode-1"},{default:a(()=>e[545]||(e[545]=[t("Connection pool mode")])),_:1}),e[546]||(e[546]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-pool"},{default:a(()=>e[547]||(e[547]=[t("lsapi_use_pool")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pool-size"},{default:a(()=>e[548]||(e[548]=[t("lsapi_pool_size")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-idle"},{default:a(()=>e[549]||(e[549]=[t("lsapi_max_idle")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-reqs"},{default:a(()=>e[550]||(e[550]=[t("lsapi_max_reqs")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support-2"},{default:a(()=>e[551]||(e[551]=[t("CRIU support")])),_:1}),e[552]||(e[552]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-criu"},{default:a(()=>e[553]||(e[553]=[t("lsapi_use_criu")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-sock-path"},{default:a(()=>e[554]||(e[554]=[t("lsapi_criu_sock_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-imgs-path"},{default:a(()=>e[555]||(e[555]=[t("lsapi_criu_imgs_path")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-initial-start-1"},{default:a(()=>e[556]||(e[556]=[t("lsapi_backend_initial_start")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-use-shm-1"},{default:a(()=>e[557]||(e[557]=[t("lsapi_criu_use_shm")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-reset-criu-on-restart"},{default:a(()=>e[558]||(e[558]=[t("lsapi_reset_criu_on_restart")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-debug-1"},{default:a(()=>e[559]||(e[559]=[t("lsapi_criu_debug")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#php-configuration-management-1"},{default:a(()=>e[560]||(e[560]=[t("PHP configuration management")])),_:1}),e[561]||(e[561]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-process-phpini-1"},{default:a(()=>e[562]||(e[562]=[t("lsapi_process_phpini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phpini-1"},{default:a(()=>e[563]||(e[563]=[t("lsapi_phpini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phprc-1"},{default:a(()=>e[564]||(e[564]=[t("lsapi_phprc")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-tmpdir-1"},{default:a(()=>e[565]||(e[565]=[t("lsapi_tmpdir")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enable-user-ini-1"},{default:a(()=>e[566]||(e[566]=[t("lsapi_enable_user_ini")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-ini-homedir-1"},{default:a(()=>e[567]||(e[567]=[t("lsapi_user_ini_homedir")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-mod-php-behaviour-1"},{default:a(()=>e[568]||(e[568]=[t("lsapi_mod_php_behaviour")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-param"},{default:a(()=>e[569]||(e[569]=[t("lsapi_param")])),_:1})])]),s("p",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#security-1"},{default:a(()=>e[570]||(e[570]=[t("Security")])),_:1}),e[571]||(e[571]=t(":"))]),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-suexec"},{default:a(()=>e[572]||(e[572]=[t("lsapi_suexec")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user"},{default:a(()=>e[573]||(e[573]=[t("lsapi_user")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-uid-gid-1"},{default:a(()=>e[574]||(e[574]=[t("lsapi_uid_gid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-paranoid-1"},{default:a(()=>e[575]||(e[575]=[t("lsapi_paranoid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-check-doc-root"},{default:a(()=>e[576]||(e[576]=[t("lsapi_check_doc_root")])),_:1})])]),e[779]||(e[779]=l('

    NGINX LSAPI Module customization

    lsapi_enabled

    Syntax : lsapi_enabled [on/off]
    Example : lsapi_enabled on;
    Default : off
    Context : main config, server config, local config.
    Type : Mandatory

    Description :
    Enable/disable LSAPI module for nginx, server, or local directory.


    lsapi_sock_path

    Syntax : lsapi_sock_path [path] Example : lsapi_sock_path /var/ngx_lsapi;
    Default : /var/ngx_lsapi
    Context : main config Type : Optional

    Description:
    Path to backend lsphp sockets. By default /var/ngx_lsapi


    lsapi_per_user

    Syntax : lsapi_per_user [on/off]
    Example : lsapi_per_user off;
    Default : off
    Context : server config, location config Type : Optional

    Description :
    Invoke the master lsPHP process not per VirtualHost, but per account. When On, invoke backend not per VirtualHost but per account. Default value is off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_disable_reject

    Syntax : lsapi_disable_reject [on/off]
    Example : lsapi_disable_reject on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such requests immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into an infinite queue, until one of LSPHP daemons becomes free. When a HTTP request is rejected in REJECT mode, mod_lsapi will write the following message into the NGINX error.log: Connect to backend rejected, and the client will receive a 507 HTTP response. By default, the LSPHP daemon in CloudLinux OS uses the REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_ex

    Syntax : lsapi_terminate_backends_ex [on/off]
    Example : lsapi_terminate_backends_ex on;
    Default : on
    Context : main config
    Type : Optional

    Description :
    nginx.conf, on - stop lsphp services on nginx restart, off - leave live started lsphp services on nginx restart (for php+opcache). The lsphp will not restart, even if NGINX gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies [on/off]
    Example : lsapi_avoid_zombies on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable a mechanism to avoid the creation of zombie processes by lsphp. The default value is Off.


    lsapi_starter_sock

    Syntax : lsapi_starter_sock [path]
    Example : lsapi_starter_sock /var/run/lsapi-starter.sock;
    Default : /var/ngx_lsapi/starter.sock
    Context : main config
    Type : Optional

    Description :
    This parameter configures the socket address for the lsphp backend spawner process.


    lsapi_starter_log

    Syntax : lsapi_starter_log [path]
    Example : lsapi_starter_log /var/log/lsapi-starter.log;
    Default : -
    Context : main config
    Type : Optional

    Description :
    This parameter configures the log file address for the lsphp backend spawner process.


    lsapi_log

    Syntax : lsapi_log [path]
    Example : lsapi_log /var/log/lsapi.log;
    Default : -
    Context : main config
    Type : Optional

    Description :
    This parameter configures the log file address for the NGINX LSAPI module context.
    Note :
    This parameter only works if the NGINX LSAPI module is built with the NGX_LSAPI_CUSTOM_LOGGER flag. Otherwise, the NGINX logger will be used for LSAPI module logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env [var] [value]
    Example: lsapi_set_env TMP "/var/lsphp-tmp";
    Default : -
    Context : main config
    Type : Optional

    Description :
    Pass an environment variable to lsphp. By default the lsphp environment has only TEMP, TMP and PATH variables set.
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.


    lsapi_env_path

    Syntax : lsapi_env_path [path(s)]
    Default : lsapi_env_path /usr/local/bin:/usr/bin:/bin
    Context : main config
    Type : Optional

    Description :
    Change PATH variable in the environment of lsphp processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Example : lsapi_backend_children 300;
    Default : 120
    Context : server config
    Type : Optional

    Description :
    Sets the maximum number of simultaneously running child backend processes. Optional - a default directive value is equal to 120.


    lsapi_retry_max

    Syntax : lsapi_retry_max [number]
    Example : lsapi_retry_max 20;
    Default : 10
    Context : server config
    Type : Optional

    Description :
    Number of retries for connections to the lsPHP daemon.


    lsapi_max_process_time

    Syntax : lsapi_max_process_time [number]
    Example : lsapi_max_process_time 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    Sets the env variable LSAPI_MAX_PROCESS_TIME. Optional - default value is 300. Timeout to kill runaway processes.


    lsapi_common_own_log

    Syntax : lsapi_common_own_log [on/off]
    Example : lsapi_common_own_log on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    It will be used only when lsapi_backend_use_own_log is set to On. On-backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_own_log

    Syntax : lsapi_own_log [on/off]
    Example : lsapi_own_log on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Redirecting log output of backend processes from NGINX error.log to dedicated log file or files, depending on the value of the lsapi_common_own_log option. If off, use the NGINX error log file for backend output, or a separate file otherwise.


    lsapi_pgrp_max_crashes

    Syntax : lsapi_pgrp_max_crashes [number]
    Example : lsapi_pgrp_max_crashes 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of a wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_pgrp_max_idle

    Syntax : lsapi_pgrp_max_idle [number]
    Example : lsapi_pgrp_max_idle 30;
    Default : 30
    Context : server config
    Type : Optional

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds. Controls how long a control process will wait for a new request before it exits. 0 stands for infinite. Optional, default value is 30. Should be more or equal to 0.


    lsapi_pgrp_max_reqs

    Syntax : lsapi_pgrp_max_reqs [number]
    Example : lsapi_pgrp_max_reqs 0;
    Default : 0
    Context : server config
    Type : Optional

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of a wrong format, the default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [on/off] Example: lsapi_backend_loglevel_info on; Example: off Context: server config, location config Type : Optional

    Description:
    Controls which log level will be used to write PHP warnings and notices into NGINX’s error.log. Optional, the default value is off. In that case, the warn log level will be used. Otherwise, with on value, the info log level will be used.


    lsapi_oom_score_adj

    Syntax : lsapi_oom_score_adj [number]
    Example : lsapi_oom_score_adj 100;
    Default : 0
    Context : server config
    Type : Optional

    Description :
    This option can apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked, then it may be desirable for lsphp processes to be sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting a proper value for oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    lsapi_dump_debug_info

    Syntax : lsapi_dump_debug_info [on/off]
    Example : lsapi_dump_debug_info on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or not lsphp backend debug information dump.


    lsapi_accept_notify

    Syntax : lsapi_accept_notify [on/off]
    Example : lsapi_accept_notify on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes. This mode is incompatible with PHP 4.4.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump [on/off]
    Example : lsapi_backend_coredump on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it is passed - a core dump on lsphp crash will be created. Off by default. By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core dump file, you should set this environment variable. If set, regardless of the value is has been set to, core dump files will be created under the directory that the PHP script is in.


    lsapi_pwd_disabled

    Syntax : lsapi_pwd_disabled [on/off]
    Example : lsapi_pwd_disabled on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    To disable the addition of the PWD variable. The default value is Off. If set to On, the PWD variable will not be added to a backend environment.


    lsapi_handler

    Syntax : lsapi_handler [string]
    Example : lsapi_handler application/x-httpd-lsphp;
    Default : -
    Context : server config
    Type : Mandatory

    Description :
    Sets LSPHP handler for server (virtual host) configuration.


    Connection pool mode

    lsapi_use_pool

    Syntax : lsapi_use_pool [on/off]
    Example : lsapi_use_pool off;
    Default : on
    Context : main config
    Type : Optional

    Description :
    Enable/disable LSAPI connection pool mode.


    lsapi_max_idle

    Syntax : lsapi_max_idle [number]
    Example : lsapi_max_idle 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    It is relevant only with lsapi_use_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of a wrong format the default value will be used. Optional, default value is 300.


    lsapi_max_reqs

    Syntax : lsapi_max_reqs [number]
    Example : lsapi_max_reqs 20000;
    Default : 10000
    Context : server config
    Type : Optional

    Description :
    It is relevant only with lsapi_use_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of a wrong format the default value will be used. Optional, default value is 10000.


    lsapi_pool_size

    Syntax : lsapi_pool_size [number]
    Example : lsapi_pool_size 20;
    Default : 50
    Context : main config
    Type : Optional

    Description :
    The parameter sets the connection pool size for each virtual host.


    CRIU support

    lsapi_use_criu

    Syntax : lsapi_use_criu [on/off]
    Example : lsapi_use_criu on;
    Default : off
    Context : main config
    Type : Optional

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_sock_path

    Syntax : lsapi_criu_sock_path [path]
    Example : lsapi_criu_socket_path /var/run/criu/criu_service.socket;
    Default : /var/run/criu/criu_service.socket
    Context : main config
    Type : Optional

    Description :
    Set path to socket for communication with criu service.


    lsapi_criu_imgs_path

    Syntax : lsapi_criu_imgs_path [path]
    Example : lsapi_criu_imgs_path /var/ngx_lsapi/criu;
    Default : /var/ngx_lsapi/criu
    Context : main config
    Type : Optional

    Description :
    Path to the folder where images of frozen PHP will be stored. Should be a path.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm [off/signals]
    Example : lsapi_criu_use_shm signals;
    Default : off
    Context : main config
    Type : Optional

    Description :
    The method of request counting. Off - use shared memory. Signals - use signals from child processes to parents. Default: off


    lsapi_reset_criu_on_restart

    Syntax : lsapi_reset_criu_on_restart [on/off]
    Example : lsapi_reset_criu_on_restart off;
    Default : off
    Context : main config
    Type : Optional

    Description :
    This option allows cleaning all CRIU images on NGINX restart.
    Setting lsapi_reset_criu_on_restart to on means that on each NGINX restart the CRIU images, which are stored in the directory specified by lsapi_criu_imgs_path directive, will be recreated upon a new request to domain (only after restart).


    lsapi_criu_debug

    Syntax: lsapi_criu_debug [on/off]
    Example: lsapi_criu_debug off;
    Default : off
    Context : main config
    Type : Optional

    Description :
    Enable/disable CRIU related debug logging.


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Example : lsapi_backend_initial_start 15;
    Default : 0
    Context : main config
    Type : Optional

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini [on/off]
    Example : lsapi_process_phpini on;
    Default : off
    Context : server config, location config Type : Optional

    Description :
    Enable or disable phpini_* directive processing. Default value is off.


    lsapi_phpini

    Syntax : lsapi_phpini [value]
    Example: lsapi_phpini /usr/home/lsapiuser/public_html/php.ini;
    Default : -
    Context : server config, location
    Type : Optional

    Description :
    Sets custom php.ini within server or location configuration. Absolute file path is required.
    When lsapi_process_phpini configuration directive is switched to Off, the value for the lsapi_phpini will be silently ignored.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Example : lsapi_phprc No;
    Default : No
    Context : server config
    Type : Optional

    Description :
    The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    The "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from the user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example:
    lsapi_phprc No;
    lsapi_phprc Auto;
    lsapi_phprc DocRoot;
    lsapi_phprc Env;
    lsapi_phprc /etc/;


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Example : lsapi_tmpdir /usr/tmp;
    Default : /tmp
    Context : server config
    Type : Optional

    Description :
    Set an alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini [on/off]
    Example : lsapi_enable_user_ini off;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir [on/off]
    Example : lsapi_user_ini_homedir on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    If the lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in the home directory also. The default value is Off.


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour [on/off]
    Example : lsapi_mod_php_behaviour off;
    Default : on
    Context : server config, location config
    Type : Optional

    Description :
    on/off - disable php_* directives, default On.


    lsapi_param

    Syntax : lsapi_param [var] [value]
    Example: lsapi_param PHP_ADMIN_VALUE "memory_limit=1024M";
    Default : -
    Context : server config, location config
    Type : Optional

    Description :
    Sets a parameter that should be passed to the LSPHP handler. The value can contain text, variables, and their combinations.
    Supported directives:
    PHP_ADMIN_VALUE
    PHP_VALUE
    PHP_ADMIN_FLAG
    PHP_FLAG
    Examples:
    lsapi_param PHP_ADMIN_VALUE "memory_limit=1024M \\n max_execution_time=600";
    lsapi_param PHP_FLAG "display_startup_errors=on";
    lsapi_param PHP_ADMIN_FLAG "html_errors=on";
    lsapi_param PHP_VALUE "max_file_uploads=20";
    lsapi_param QUERY_STRING $query_string;
    lsapi_param REQUEST_METHOD $request_method;
    lsapi_param CONTENT_TYPE $content_type;
    lsapi_param CONTENT_LENGTH $content_length;


    Security

    lsapi_suexec

    Syntax : lsapi_suexec [on/off]
    Example : lsapi_suexec on;
    Default : on
    Context : server config
    Type : Optional

    Description :
    Enable or disable suexec usage with a target user.


    lsapi_user

    Syntax : lsapi_user [username] [group]
    Example : lsapi_user testlsapi testlsapi;
    Default : -
    Context : server config, local config
    Type : Mandatory

    Description :
    Set user & group for requests.
    This parameter can take only one argument for username or two arguments for username and group.


    lsapi_paranoid

    Syntax : lsapi_paranoid [on/off]
    Example : lsapi_paranoid on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable permission checking for the target php scripts.


    lsapi_check_owner

    Syntax : lsapi_check_owner [on/off]
    Example : lsapi_check_owner on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of the target PHP scripts.


    lsapi_check_doc_root

    Syntax : lsapi_check_doc_root [on/off]
    Example : lsapi_check_doc_root on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of DOCUMENT_ROOT.


    lsapi_check_script

    Syntax : lsapi_check_script [on/off]
    Example : lsapi_check_script on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of target php scripts before sending the request to the lsphp backend. Optional, the default value is On.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Example : lsapi_uid_gid 1001 1001;
    Default : -
    Context : local config
    Type : Optional

    Description :
    Set user & group for requests.


    Troubleshooting

    Debugging NGINX LSAPI Module issues: error.log & sulsphp.log

    NGINX LSAPI Module errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.

    See the following table for more details:

    ',218)),s("table",null,[e[593]||(e[593]=s("thead",null,[s("tr",null,[s("th"),s("th"),s("th")])],-1)),s("tbody",null,[e[586]||(e[586]=s("tr",null,[s("td",null,[s("strong",null,"error_log")]),s("td",null,[s("strong",null,"sulsphp_log")]),s("td",null,[s("strong",null,"Solution")])],-1)),e[587]||(e[587]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE ID"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase pmem or vmem limits for the user uid.")],-1)),e[588]||(e[588]=s("tr",null,[s("td",null,"Error sending request: ReceiveLSHeader: nothing to read from backend socket"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp was killed. It can be due to nginx restart or lfd. If you see this message too often - change "),s("span",{class:"notranslate"}," lsapi_terminate_backends_ex "),t(" to "),s("span",{class:"notranslate"}," off "),t(" in lsapi.conf or add to "),s("span",{class:"notranslate"}," /etc/csf/csf.pignore "),t(" the following lines: "),s("span",{class:"notranslate"}," exe:/usr/local/bin/lsphp "),t(" pexe:/opt/alt/php.*/usr/bin/lsphp")])],-1)),e[589]||(e[589]=s("tr",null,[s("td",null,"Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact "),s("a",{href:"https://cloudlinux.zendesk.com/hc/",target:"_blank",rel:"noopener noreferrer"},"https://cloudlinux.zendesk.com/"),t(" so we can investigate the cause.")])],-1)),e[590]||(e[590]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"file is writable by others: (///usr/local/bin/lsphp)"),s("td",null,[t("Incorrect lsphp file permissions. For fixing: "),s("span",{class:"notranslate"}," chmod 755 /usr/local/bin/lsphp "),t(" cagefsctl --force-update.")])],-1)),e[591]||(e[591]=s("tr",null,[s("td",null,"Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase PMEM limits for the user UID.")],-1)),e[592]||(e[592]=s("tr",null,[s("td",null,[t("Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN."),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,[t("Increase value of "),s("span",{class:"notranslate"}," lsapi_backend_children "),t(" for UID in vhost.conf or globally in lsapi.conf.")])],-1)),s("tr",null,[e[584]||(e[584]=s("td",null,"Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)",-1)),e[585]||(e[585]=s("td",null,"No need to check this log.",-1)),s("td",null,[e[578]||(e[578]=t("Set ")),e[579]||(e[579]=s("span",{class:"notranslate"},[s("code",null,"lsapi_disable_reject on")],-1)),e[580]||(e[580]=t(" in your ")),e[581]||(e[581]=s("span",{class:"notranslate"},[s("code",null,"lsapi.conf")],-1)),e[582]||(e[582]=t(" and reload NGINX. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit ")),n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-2"},{default:a(()=>e[577]||(e[577]=[t("Configuration Reference")])),_:1}),e[583]||(e[583]=t(" for more info."))])])])]),e[780]||(e[780]=l(`

    CRIU Support

    Note

    CloudLinux OS 7, CloudLinux OS 7 Hybrid, and CloudLinux OS 8 only

    CRIU is Checkpoint/Restore In Userspace , (pronounced kree-oo ), is a software tool for the Linux operating system. Using this tool, you can freeze a running application (or part of it) and checkpoint it as a collection of files on disk. You can then use the files to restore the application and run it exactly as it was at the time of freeze (more information on the link https://criu.org/Main_Page ).

    NGINX LSAPI Module now supports the following parameters:

    Option nameDescriptionValuesDefault
    lsapi_use_criuEnable/disable CRIU for lsphp freezing. on/off off
    lsapi_criu_sock_pathSet path to socket for communication with criu service.[path to socket] /var/run/criu/criu_service.socket
    lsapi_backend_initial_startNumber of request when lsphp should be freezed.[number] 0 - no freezing0
    lsapi_criu_use_shmMethod of requests counting. off - use shared memory. Signals - use signals from child processes to parent. off/signals off
    lsapi_criu_imgs_pathPath to folder where imgs of freezed PHP will be stored.[path] /var/nginx-mod-lsapi/
    lsapi_criu_debugEnable/Disable CRIU related debug logging. on/off off

    Example:

    lsapi_criu on;
    +

    In order for NGINX LSAPI Module to work lsapi.conf should be loaded to NGINX through Include directive.

    `,16)),s("p",null,[e[510]||(e[510]=t("For a more detailed description of the module directives please visit the ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-2"},{default:i(()=>e[508]||(e[508]=[t("Configuration reference")])),_:1}),e[511]||(e[511]=t(".")),e[512]||(e[512]=s("br",null,null,-1)),e[513]||(e[513]=t(" For the installation guide for NGINX LSAPI Module please visit ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-3"},{default:i(()=>e[509]||(e[509]=[t("Installation")])),_:1}),e[514]||(e[514]=t("."))]),e[767]||(e[767]=s("h4",{id:"configuration-references-1",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#configuration-references-1","aria-hidden":"true"},"#"),t(" Configuration references")],-1)),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#nginx-lsapi-module-customization"},{default:i(()=>e[515]||(e[515]=[t("NGINX LSAPI Module customization")])),_:1}),e[516]||(e[516]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enabled"},{default:i(()=>e[517]||(e[517]=[t("lsapi_enabled")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-sock-path"},{default:i(()=>e[518]||(e[518]=[t("lsapi_sock_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-per-user-1"},{default:i(()=>e[519]||(e[519]=[t("lsapi_per_user")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-disable-reject"},{default:i(()=>e[520]||(e[520]=[t("lsapi_disable_reject")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-terminate-backends-ex"},{default:i(()=>e[521]||(e[521]=[t("lsapi_terminate_backends_ex")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-avoid-zombies"},{default:i(()=>e[522]||(e[522]=[t("lsapi_avoid_zombies")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-lsphp-backend-1"},{default:i(()=>e[523]||(e[523]=[t("Tuning LSPHP backend")])),_:1}),e[524]||(e[524]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-set-env-1"},{default:i(()=>e[525]||(e[525]=[t("lsapi_set_env")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-env-path"},{default:i(()=>e[526]||(e[526]=[t("lsapi_env_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-children-1"},{default:i(()=>e[527]||(e[527]=[t("lsapi_backend_children")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-retry-max"},{default:i(()=>e[528]||(e[528]=[t("lsapi_retry_max")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-process-time"},{default:i(()=>e[529]||(e[529]=[t("lsapi_max_process_time")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-idle"},{default:i(()=>e[530]||(e[530]=[t("lsapi_pgrp_max_idle")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-own-log"},{default:i(()=>e[531]||(e[531]=[t("lsapi_own_log")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-common-own-log"},{default:i(()=>e[532]||(e[532]=[t("lsapi_common_own_log")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-coredump-1"},{default:i(()=>e[533]||(e[533]=[t("lsapi_backend_coredump")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-accept-notify"},{default:i(()=>e[534]||(e[534]=[t("lsapi_accept_notify")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-reqs"},{default:i(()=>e[535]||(e[535]=[t("lsapi_pgrp_max_reqs")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pgrp-max-crashes"},{default:i(()=>e[536]||(e[536]=[t("lsapi_pgrp_max_crashes")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-loglevel-info-1"},{default:i(()=>e[537]||(e[537]=[t("lsapi_backend_loglevel_info")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-oom-score-adj"},{default:i(()=>e[538]||(e[538]=[t("lsapi_oom_score_adj")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#connection-pool-mode-1"},{default:i(()=>e[539]||(e[539]=[t("Connection pool mode")])),_:1}),e[540]||(e[540]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-pool"},{default:i(()=>e[541]||(e[541]=[t("lsapi_use_pool")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-pool-size"},{default:i(()=>e[542]||(e[542]=[t("lsapi_pool_size")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-idle"},{default:i(()=>e[543]||(e[543]=[t("lsapi_max_idle")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-max-reqs"},{default:i(()=>e[544]||(e[544]=[t("lsapi_max_reqs")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#criu-support-2"},{default:i(()=>e[545]||(e[545]=[t("CRIU support")])),_:1}),e[546]||(e[546]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-use-criu"},{default:i(()=>e[547]||(e[547]=[t("lsapi_use_criu")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-sock-path"},{default:i(()=>e[548]||(e[548]=[t("lsapi_criu_sock_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-imgs-path"},{default:i(()=>e[549]||(e[549]=[t("lsapi_criu_imgs_path")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-backend-initial-start-1"},{default:i(()=>e[550]||(e[550]=[t("lsapi_backend_initial_start")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-use-shm-1"},{default:i(()=>e[551]||(e[551]=[t("lsapi_criu_use_shm")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-reset-criu-on-restart"},{default:i(()=>e[552]||(e[552]=[t("lsapi_reset_criu_on_restart")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-criu-debug-1"},{default:i(()=>e[553]||(e[553]=[t("lsapi_criu_debug")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#php-configuration-management-1"},{default:i(()=>e[554]||(e[554]=[t("PHP configuration management")])),_:1}),e[555]||(e[555]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-process-phpini-1"},{default:i(()=>e[556]||(e[556]=[t("lsapi_process_phpini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phpini-1"},{default:i(()=>e[557]||(e[557]=[t("lsapi_phpini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-phprc-1"},{default:i(()=>e[558]||(e[558]=[t("lsapi_phprc")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-tmpdir-1"},{default:i(()=>e[559]||(e[559]=[t("lsapi_tmpdir")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-enable-user-ini-1"},{default:i(()=>e[560]||(e[560]=[t("lsapi_enable_user_ini")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user-ini-homedir-1"},{default:i(()=>e[561]||(e[561]=[t("lsapi_user_ini_homedir")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-mod-php-behaviour-1"},{default:i(()=>e[562]||(e[562]=[t("lsapi_mod_php_behaviour")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-param"},{default:i(()=>e[563]||(e[563]=[t("lsapi_param")])),_:1})])]),s("p",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#security-1"},{default:i(()=>e[564]||(e[564]=[t("Security")])),_:1}),e[565]||(e[565]=t(":"))]),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-suexec"},{default:i(()=>e[566]||(e[566]=[t("lsapi_suexec")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-user"},{default:i(()=>e[567]||(e[567]=[t("lsapi_user")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-uid-gid-1"},{default:i(()=>e[568]||(e[568]=[t("lsapi_uid_gid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-paranoid-1"},{default:i(()=>e[569]||(e[569]=[t("lsapi_paranoid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lsapi-check-doc-root"},{default:i(()=>e[570]||(e[570]=[t("lsapi_check_doc_root")])),_:1})])]),e[768]||(e[768]=l('

    NGINX LSAPI Module customization

    lsapi_enabled

    Syntax : lsapi_enabled [on/off]
    Example : lsapi_enabled on;
    Default : off
    Context : main config, server config, local config.
    Type : Mandatory

    Description :
    Enable/disable LSAPI module for nginx, server, or local directory.


    lsapi_sock_path

    Syntax : lsapi_sock_path [path] Example : lsapi_sock_path /var/ngx_lsapi;
    Default : /var/ngx_lsapi
    Context : main config Type : Optional

    Description:
    Path to backend lsphp sockets. By default /var/ngx_lsapi


    lsapi_per_user

    Syntax : lsapi_per_user [on/off]
    Example : lsapi_per_user off;
    Default : off
    Context : server config, location config Type : Optional

    Description :
    Invoke the master lsPHP process not per VirtualHost, but per account. When On, invoke backend not per VirtualHost but per account. Default value is off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_disable_reject

    Syntax : lsapi_disable_reject [on/off]
    Example : lsapi_disable_reject on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such requests immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into an infinite queue, until one of LSPHP daemons becomes free. When a HTTP request is rejected in REJECT mode, mod_lsapi will write the following message into the NGINX error.log: Connect to backend rejected, and the client will receive a 507 HTTP response. By default, the LSPHP daemon in CloudLinux OS uses the REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_ex

    Syntax : lsapi_terminate_backends_ex [on/off]
    Example : lsapi_terminate_backends_ex on;
    Default : on
    Context : main config
    Type : Optional

    Description :
    nginx.conf, on - stop lsphp services on nginx restart, off - leave live started lsphp services on nginx restart (for php+opcache). The lsphp will not restart, even if NGINX gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies [on/off]
    Example : lsapi_avoid_zombies on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable a mechanism to avoid the creation of zombie processes by lsphp. The default value is Off.


    lsapi_starter_sock

    Syntax : lsapi_starter_sock [path]
    Example : lsapi_starter_sock /var/run/lsapi-starter.sock;
    Default : /var/ngx_lsapi/starter.sock
    Context : main config
    Type : Optional

    Description :
    This parameter configures the socket address for the lsphp backend spawner process.


    lsapi_starter_log

    Syntax : lsapi_starter_log [path]
    Example : lsapi_starter_log /var/log/lsapi-starter.log;
    Default : -
    Context : main config
    Type : Optional

    Description :
    This parameter configures the log file address for the lsphp backend spawner process.


    lsapi_log

    Syntax : lsapi_log [path]
    Example : lsapi_log /var/log/lsapi.log;
    Default : -
    Context : main config
    Type : Optional

    Description :
    This parameter configures the log file address for the NGINX LSAPI module context.
    Note :
    This parameter only works if the NGINX LSAPI module is built with the NGX_LSAPI_CUSTOM_LOGGER flag. Otherwise, the NGINX logger will be used for LSAPI module logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env [var] [value]
    Example: lsapi_set_env TMP "/var/lsphp-tmp";
    Default : -
    Context : main config
    Type : Optional

    Description :
    Pass an environment variable to lsphp. By default the lsphp environment has only TEMP, TMP and PATH variables set.
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.


    lsapi_env_path

    Syntax : lsapi_env_path [path(s)]
    Default : lsapi_env_path /usr/local/bin:/usr/bin:/bin
    Context : main config
    Type : Optional

    Description :
    Change PATH variable in the environment of lsphp processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Example : lsapi_backend_children 300;
    Default : 120
    Context : server config
    Type : Optional

    Description :
    Sets the maximum number of simultaneously running child backend processes. Optional - a default directive value is equal to 120.


    lsapi_retry_max

    Syntax : lsapi_retry_max [number]
    Example : lsapi_retry_max 20;
    Default : 10
    Context : server config
    Type : Optional

    Description :
    Number of retries for connections to the lsPHP daemon.


    lsapi_max_process_time

    Syntax : lsapi_max_process_time [number]
    Example : lsapi_max_process_time 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    Sets the env variable LSAPI_MAX_PROCESS_TIME. Optional - default value is 300. Timeout to kill runaway processes.


    lsapi_common_own_log

    Syntax : lsapi_common_own_log [on/off]
    Example : lsapi_common_own_log on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    It will be used only when lsapi_backend_use_own_log is set to On. On-backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_own_log

    Syntax : lsapi_own_log [on/off]
    Example : lsapi_own_log on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Redirecting log output of backend processes from NGINX error.log to dedicated log file or files, depending on the value of the lsapi_common_own_log option. If off, use the NGINX error log file for backend output, or a separate file otherwise.


    lsapi_pgrp_max_crashes

    Syntax : lsapi_pgrp_max_crashes [number]
    Example : lsapi_pgrp_max_crashes 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of a wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_pgrp_max_idle

    Syntax : lsapi_pgrp_max_idle [number]
    Example : lsapi_pgrp_max_idle 30;
    Default : 30
    Context : server config
    Type : Optional

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds. Controls how long a control process will wait for a new request before it exits. 0 stands for infinite. Optional, default value is 30. Should be more or equal to 0.


    lsapi_pgrp_max_reqs

    Syntax : lsapi_pgrp_max_reqs [number]
    Example : lsapi_pgrp_max_reqs 0;
    Default : 0
    Context : server config
    Type : Optional

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of a wrong format, the default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [on/off] Example: lsapi_backend_loglevel_info on; Example: off Context: server config, location config Type : Optional

    Description:
    Controls which log level will be used to write PHP warnings and notices into NGINX’s error.log. Optional, the default value is off. In that case, the warn log level will be used. Otherwise, with on value, the info log level will be used.


    lsapi_oom_score_adj

    Syntax : lsapi_oom_score_adj [number]
    Example : lsapi_oom_score_adj 100;
    Default : 0
    Context : server config
    Type : Optional

    Description :
    This option can apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked, then it may be desirable for lsphp processes to be sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting a proper value for oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    lsapi_dump_debug_info

    Syntax : lsapi_dump_debug_info [on/off]
    Example : lsapi_dump_debug_info on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or not lsphp backend debug information dump.


    lsapi_accept_notify

    Syntax : lsapi_accept_notify [on/off]
    Example : lsapi_accept_notify on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes. This mode is incompatible with PHP 4.4.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump [on/off]
    Example : lsapi_backend_coredump on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it is passed - a core dump on lsphp crash will be created. Off by default. By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core dump file, you should set this environment variable. If set, regardless of the value is has been set to, core dump files will be created under the directory that the PHP script is in.


    lsapi_pwd_disabled

    Syntax : lsapi_pwd_disabled [on/off]
    Example : lsapi_pwd_disabled on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    To disable the addition of the PWD variable. The default value is Off. If set to On, the PWD variable will not be added to a backend environment.


    lsapi_handler

    Syntax : lsapi_handler [string]
    Example : lsapi_handler application/x-httpd-lsphp;
    Default : -
    Context : server config
    Type : Mandatory

    Description :
    Sets LSPHP handler for server (virtual host) configuration.


    Connection pool mode

    lsapi_use_pool

    Syntax : lsapi_use_pool [on/off]
    Example : lsapi_use_pool off;
    Default : on
    Context : main config
    Type : Optional

    Description :
    Enable/disable LSAPI connection pool mode.


    lsapi_max_idle

    Syntax : lsapi_max_idle [number]
    Example : lsapi_max_idle 300;
    Default : 300
    Context : server config
    Type : Optional

    Description :
    It is relevant only with lsapi_use_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of a wrong format the default value will be used. Optional, default value is 300.


    lsapi_max_reqs

    Syntax : lsapi_max_reqs [number]
    Example : lsapi_max_reqs 20000;
    Default : 10000
    Context : server config
    Type : Optional

    Description :
    It is relevant only with lsapi_use_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of a wrong format the default value will be used. Optional, default value is 10000.


    lsapi_pool_size

    Syntax : lsapi_pool_size [number]
    Example : lsapi_pool_size 20;
    Default : 50
    Context : main config
    Type : Optional

    Description :
    The parameter sets the connection pool size for each virtual host.


    CRIU support

    lsapi_use_criu

    Syntax : lsapi_use_criu [on/off]
    Example : lsapi_use_criu on;
    Default : off
    Context : main config
    Type : Optional

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_sock_path

    Syntax : lsapi_criu_sock_path [path]
    Example : lsapi_criu_socket_path /var/run/criu/criu_service.socket;
    Default : /var/run/criu/criu_service.socket
    Context : main config
    Type : Optional

    Description :
    Set path to socket for communication with criu service.


    lsapi_criu_imgs_path

    Syntax : lsapi_criu_imgs_path [path]
    Example : lsapi_criu_imgs_path /var/ngx_lsapi/criu;
    Default : /var/ngx_lsapi/criu
    Context : main config
    Type : Optional

    Description :
    Path to the folder where images of frozen PHP will be stored. Should be a path.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm [off/signals]
    Example : lsapi_criu_use_shm signals;
    Default : off
    Context : main config
    Type : Optional

    Description :
    The method of request counting. Off - use shared memory. Signals - use signals from child processes to parents. Default: off


    lsapi_reset_criu_on_restart

    Syntax : lsapi_reset_criu_on_restart [on/off]
    Example : lsapi_reset_criu_on_restart off;
    Default : off
    Context : main config
    Type : Optional

    Description :
    This option allows cleaning all CRIU images on NGINX restart.
    Setting lsapi_reset_criu_on_restart to on means that on each NGINX restart the CRIU images, which are stored in the directory specified by lsapi_criu_imgs_path directive, will be recreated upon a new request to domain (only after restart).


    lsapi_criu_debug

    Syntax: lsapi_criu_debug [on/off]
    Example: lsapi_criu_debug off;
    Default : off
    Context : main config
    Type : Optional

    Description :
    Enable/disable CRIU related debug logging.


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Example : lsapi_backend_initial_start 15;
    Default : 0
    Context : main config
    Type : Optional

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini [on/off]
    Example : lsapi_process_phpini on;
    Default : off
    Context : server config, location config Type : Optional

    Description :
    Enable or disable phpini_* directive processing. Default value is off.


    lsapi_phpini

    Syntax : lsapi_phpini [value]
    Example: lsapi_phpini /usr/home/lsapiuser/public_html/php.ini;
    Default : -
    Context : server config, location
    Type : Optional

    Description :
    Sets custom php.ini within server or location configuration. Absolute file path is required.
    When lsapi_process_phpini configuration directive is switched to Off, the value for the lsapi_phpini will be silently ignored.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Example : lsapi_phprc No;
    Default : No
    Context : server config
    Type : Optional

    Description :
    The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    The "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from the user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example:
    lsapi_phprc No;
    lsapi_phprc Auto;
    lsapi_phprc DocRoot;
    lsapi_phprc Env;
    lsapi_phprc /etc/;


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Example : lsapi_tmpdir /usr/tmp;
    Default : /tmp
    Context : server config
    Type : Optional

    Description :
    Set an alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini [on/off]
    Example : lsapi_enable_user_ini off;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir [on/off]
    Example : lsapi_user_ini_homedir on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    If the lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in the home directory also. The default value is Off.


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour [on/off]
    Example : lsapi_mod_php_behaviour off;
    Default : on
    Context : server config, location config
    Type : Optional

    Description :
    on/off - disable php_* directives, default On.


    lsapi_param

    Syntax : lsapi_param [var] [value]
    Example: lsapi_param PHP_ADMIN_VALUE "memory_limit=1024M";
    Default : -
    Context : server config, location config
    Type : Optional

    Description :
    Sets a parameter that should be passed to the LSPHP handler. The value can contain text, variables, and their combinations.
    Supported directives:
    PHP_ADMIN_VALUE
    PHP_VALUE
    PHP_ADMIN_FLAG
    PHP_FLAG
    Examples:
    lsapi_param PHP_ADMIN_VALUE "memory_limit=1024M \\n max_execution_time=600";
    lsapi_param PHP_FLAG "display_startup_errors=on";
    lsapi_param PHP_ADMIN_FLAG "html_errors=on";
    lsapi_param PHP_VALUE "max_file_uploads=20";
    lsapi_param QUERY_STRING $query_string;
    lsapi_param REQUEST_METHOD $request_method;
    lsapi_param CONTENT_TYPE $content_type;
    lsapi_param CONTENT_LENGTH $content_length;


    Security

    lsapi_suexec

    Syntax : lsapi_suexec [on/off]
    Example : lsapi_suexec on;
    Default : on
    Context : server config
    Type : Optional

    Description :
    Enable or disable suexec usage with a target user.


    lsapi_user

    Syntax : lsapi_user [username] [group]
    Example : lsapi_user testlsapi testlsapi;
    Default : -
    Context : server config, local config
    Type : Mandatory

    Description :
    Set user & group for requests.
    This parameter can take only one argument for username or two arguments for username and group.


    lsapi_paranoid

    Syntax : lsapi_paranoid [on/off]
    Example : lsapi_paranoid on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable permission checking for the target php scripts.


    lsapi_check_owner

    Syntax : lsapi_check_owner [on/off]
    Example : lsapi_check_owner on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of the target PHP scripts.


    lsapi_check_doc_root

    Syntax : lsapi_check_doc_root [on/off]
    Example : lsapi_check_doc_root on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of DOCUMENT_ROOT.


    lsapi_check_script

    Syntax : lsapi_check_script [on/off]
    Example : lsapi_check_script on;
    Default : off
    Context : server config
    Type : Optional

    Description :
    Enable or disable checking the owner of target php scripts before sending the request to the lsphp backend. Optional, the default value is On.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Example : lsapi_uid_gid 1001 1001;
    Default : -
    Context : local config
    Type : Optional

    Description :
    Set user & group for requests.


    Troubleshooting

    Debugging NGINX LSAPI Module issues: error.log & sulsphp.log

    NGINX LSAPI Module errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.

    See the following table for more details:

    ',218)),s("table",null,[e[587]||(e[587]=s("thead",null,[s("tr",null,[s("th"),s("th"),s("th")])],-1)),s("tbody",null,[e[580]||(e[580]=s("tr",null,[s("td",null,[s("strong",null,"error_log")]),s("td",null,[s("strong",null,"sulsphp_log")]),s("td",null,[s("strong",null,"Solution")])],-1)),e[581]||(e[581]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE ID"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase pmem or vmem limits for the user uid.")],-1)),e[582]||(e[582]=s("tr",null,[s("td",null,"Error sending request: ReceiveLSHeader: nothing to read from backend socket"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp was killed. It can be due to nginx restart or lfd. If you see this message too often - change "),s("span",{class:"notranslate"}," lsapi_terminate_backends_ex "),t(" to "),s("span",{class:"notranslate"}," off "),t(" in lsapi.conf or add to "),s("span",{class:"notranslate"}," /etc/csf/csf.pignore "),t(" the following lines: "),s("span",{class:"notranslate"}," exe:/usr/local/bin/lsphp "),t(" pexe:/opt/alt/php.*/usr/bin/lsphp")])],-1)),e[583]||(e[583]=s("tr",null,[s("td",null,"Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0"),s("td",null,"No need to check this log."),s("td",null,[t("lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact "),s("a",{href:"https://cloudlinux.zendesk.com/hc/",target:"_blank",rel:"noopener noreferrer"},"https://cloudlinux.zendesk.com/"),t(" so we can investigate the cause.")])],-1)),e[584]||(e[584]=s("tr",null,[s("td",null,"Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused"),s("td",null,"file is writable by others: (///usr/local/bin/lsphp)"),s("td",null,[t("Incorrect lsphp file permissions. For fixing: "),s("span",{class:"notranslate"}," chmod 755 /usr/local/bin/lsphp "),t(" cagefsctl --force-update.")])],-1)),e[585]||(e[585]=s("tr",null,[s("td",null,"Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)"),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,"Increase PMEM limits for the user UID.")],-1)),e[586]||(e[586]=s("tr",null,[s("td",null,[t("Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN."),s("br"),s("br"),t("Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)")]),s("td",null,"uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp"),s("td",null,[t("Increase value of "),s("span",{class:"notranslate"}," lsapi_backend_children "),t(" for UID in vhost.conf or globally in lsapi.conf.")])],-1)),s("tr",null,[e[578]||(e[578]=s("td",null,"Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)",-1)),e[579]||(e[579]=s("td",null,"No need to check this log.",-1)),s("td",null,[e[572]||(e[572]=t("Set ")),e[573]||(e[573]=s("span",{class:"notranslate"},[s("code",null,"lsapi_disable_reject on")],-1)),e[574]||(e[574]=t(" in your ")),e[575]||(e[575]=s("span",{class:"notranslate"},[s("code",null,"lsapi.conf")],-1)),e[576]||(e[576]=t(" and reload NGINX. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit ")),a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#configuration-references-2"},{default:i(()=>e[571]||(e[571]=[t("Configuration Reference")])),_:1}),e[577]||(e[577]=t(" for more info."))])])])]),e[769]||(e[769]=l(`

    CRIU Support

    Note

    CloudLinux OS 7, CloudLinux OS 7 Hybrid, and CloudLinux OS 8 only

    CRIU is Checkpoint/Restore In Userspace , (pronounced kree-oo ), is a software tool for the Linux operating system. Using this tool, you can freeze a running application (or part of it) and checkpoint it as a collection of files on disk. You can then use the files to restore the application and run it exactly as it was at the time of freeze (more information on the link https://criu.org/Main_Page ).

    NGINX LSAPI Module now supports the following parameters:

    Option nameDescriptionValuesDefault
    lsapi_use_criuEnable/disable CRIU for lsphp freezing. on/off off
    lsapi_criu_sock_pathSet path to socket for communication with criu service.[path to socket] /var/run/criu/criu_service.socket
    lsapi_backend_initial_startNumber of request when lsphp should be freezed.[number] 0 - no freezing0
    lsapi_criu_use_shmMethod of requests counting. off - use shared memory. Signals - use signals from child processes to parent. off/signals off
    lsapi_criu_imgs_pathPath to folder where imgs of freezed PHP will be stored.[path] /var/nginx-mod-lsapi/
    lsapi_criu_debugEnable/Disable CRIU related debug logging. on/off off

    Example:

    lsapi_criu on;
     lsapi_criu_socket_path /var/run/criu/criu_service.socket;
     lsapi_backend_initial_start 15;
     lsapi_criu_use_shm off;
    @@ -1298,12 +1298,12 @@ touch /usr/share/criu/mod_lsapi/lsphp.criu.reset
     

    After you install RPM , add the following line to the PAM config file for the required application:

    session    required     pam_lve.so 500 1 wheel,other
     

    In this line:

    • 500 stands for minimum UID for which LVE will be setup. For any user with UID < 500, LVE will not be setup. If CageFS is installed, use: cagefsctl --set-min-uid UID to setup minimum UID. The parameter in PAM files will be ignored in that case.
    • 1 stands for CageFS enabled (0 – CageFS disabled)
    • 3rd optional argument defines group of users that will not be placed into LVE or CageFS. Starting with pam_lve 0.3-7 you can specify multiple groups, comma separated.

    Warning

    It is crucial to place all users that su or sudo to root into that group. Otherwise, once such user gains root, user will be inside LVE, and all applications restarted by that user will be inside that user LVE as well.

    Warning

    Please do not add the pam_lve.so in the PAM configuration for sudo. It can affect user’s work with the resource usage plugin, and Python/Node.js/PHP selector plugins.

    For example, to enable LVE for SSH access, add that line to the /etc/pam.d/sshd. To enable LVE for SU, add that line to the /etc/pam.d/su.

    By default, module will not place users with group wheel into lve. If you want to use different group to define users that will not be placed into LVE by pam_lve - pass it as the 3rd argument.

    Warning

    Be careful when you test it, as if you incorrectly add this line to the /etc/pam.d/sshd, it will lock you out ssh. Don't log out of your current SSH session, until you sure it works.

    For preventing cases when user enters under usual user (using ssh) and then tries to enter as super user (via sudo or su) - pam_sulve was created, which tries to enter to LVE=1 and leaves it right away. If action fails, user gets message:

    !!!!  WARNING: YOU ARE INSIDE LVE !!!!
     

    To check if pam_sulve is enabled on the server:

    grep pam_sulve.so /etc/pam.d/*
    -

    should not be empty.

    LVE wrappers

    `,69)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#placing-programs-inside-lve"},{default:a(()=>e[594]||(e[594]=[t("Placing programs inside LVE")])),_:1})])]),e[781]||(e[781]=l(`

    LVE wrappers are the set of tools that allow system administrator to run various users, programs & daemons within Lightweight Virtual Environment. This allows system administrator to have control over system resources such program can have. Additionally it prevents misbehaving programs running within LVE to drain system resources and slow down or take down the whole system. The tools are provided by lve-wrappers RPM.

    You can install them by running:

    yum install lve-wrappers
    +

    should not be empty.

    LVE wrappers

    `,69)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#placing-programs-inside-lve"},{default:i(()=>e[588]||(e[588]=[t("Placing programs inside LVE")])),_:1})])]),e[770]||(e[770]=l(`

    LVE wrappers are the set of tools that allow system administrator to run various users, programs & daemons within Lightweight Virtual Environment. This allows system administrator to have control over system resources such program can have. Additionally it prevents misbehaving programs running within LVE to drain system resources and slow down or take down the whole system. The tools are provided by lve-wrappers RPM.

    You can install them by running:

    yum install lve-wrappers
     

    Placing programs inside LVE

    LVE Wrappers provide two tools for placing programs inside LVE: lve_wrapper and lve_suwrapper.

    /bin/lve_wrapper can be used by any non-root user, as long as that user is in group lve (see /etc/groups file).

    Syntax

    lve_wrapper <command_to_run>
     

    Example

    lve_wrapper make install
     

    The program will be executed within LVE with ID matching user's id.

    /bin/lve_suwrapper can be used by root user or any user in group lve (see /etc/groups file) to execute command within specified LVE.

    Syntax

    lve_suwrapper LVE_ID <command_to_run>
     

    Example

    lve_suwrapper 10000 /etc/init.d/postgresql start
    -

    Switches

    • -f - force namespace
    • -n - without namespace
    • -c - remove CPU limits (requires lve_wrapper >= 2.1.2)

    MPM ITK

    CloudLinux OS httpd RPM comes with MPM ITK built in. Yet, if you would like to build your own Apache, you need to apply our patch for MPM ITK

    When running MPM ITK , you should disable mod_hostinglimits. All the functionality needed by MPM ITK is already built into the patch.

    Directives which can be used by Apache with ITK patch:

    • AssignUserID - uses ID as LVE ID
    • LVEErrorCodeITK - error code to display on LVE error (508 by default)
    • LVERetryAfterITK - same as LVERetryAfter - respond with Retry-After header when LVE error 508 occurs
    • LVEId - ovverides id used for LVE ID instead of AssignUserID
    • LVEUser - overrides user to use to retrieve LVE ID, instead of AssignUserID

    HostingLimits module for Apache

    `,25)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#additional-notes"},{default:a(()=>e[595]||(e[595]=[t("Additional notes")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-4"},{default:a(()=>e[596]||(e[596]=[t("Installation")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#directives"},{default:a(()=>e[597]||(e[597]=[t("Directives")])),_:1}),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#securelinks"},{default:a(()=>e[598]||(e[598]=[t("SecureLinks")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#skiperrors"},{default:a(()=>e[599]||(e[599]=[t("SkipErrors")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#allowedhandlers"},{default:a(()=>e[600]||(e[600]=[t("AllowedHandlers")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#denyhandlers"},{default:a(()=>e[601]||(e[601]=[t("DenyHandlers")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveerrorcode"},{default:a(()=>e[602]||(e[602]=[t("LVEErrorCode")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveid"},{default:a(()=>e[603]||(e[603]=[t("LVEid")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveuser"},{default:a(()=>e[604]||(e[604]=[t("LVEUser")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveusergroupid"},{default:a(()=>e[605]||(e[605]=[t("LVEUserGroupID")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveretryafter"},{default:a(()=>e[606]||(e[606]=[t("LVERetryAfter")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lvesitesdebug"},{default:a(()=>e[607]||(e[607]=[t("LVESitesDebug")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveparsemode"},{default:a(()=>e[608]||(e[608]=[t("LVEParseMode")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lvepathregexp"},{default:a(()=>e[609]||(e[609]=[t("LVEPathRegexp")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lvelimitrechecktimeout"},{default:a(()=>e[610]||(e[610]=[t("LVELimitRecheckTimeout")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#lveuse429"},{default:a(()=>e[611]||(e[611]=[t("LVEUse429")])),_:1})])])])]),e[782]||(e[782]=l(`

    mod_hostinglimits works with existing CGI/PHP modules, to put them into LVE context. In most cases the CGI/PHP process will be placed into LVE with the ID of the user that sites belongs to. mod_hostinglimits detects the user from SuexecUserGroup (suexec module), SuPHP_UserGroup (from mod_suphp), AssignUserID (MPM ITK), RUidGid (mod_ruid2 ) directives.

    This can be overwritten via LVEId or LVEUser parameter on the Directory level.

    Note

    Those parameters will not work with mod_fcgid and mod_cgid.

    The order of detection looks as follows:

    • LVEId
    • LVEUser
    • SuexecUserGroup
    • suPHP_UserGroup
    • RUidGid
    • AssignUserID

    Note

    LVE doesn't work for mod_include #include due to its "filter" nature.

    Example:

    LoadModule hostinglimits_module modules/mod_hostinglimits.so
    +

    Switches

    • -f - force namespace
    • -n - without namespace
    • -c - remove CPU limits (requires lve_wrapper >= 2.1.2)

    MPM ITK

    CloudLinux OS httpd RPM comes with MPM ITK built in. Yet, if you would like to build your own Apache, you need to apply our patch for MPM ITK

    When running MPM ITK , you should disable mod_hostinglimits. All the functionality needed by MPM ITK is already built into the patch.

    Directives which can be used by Apache with ITK patch:

    • AssignUserID - uses ID as LVE ID
    • LVEErrorCodeITK - error code to display on LVE error (508 by default)
    • LVERetryAfterITK - same as LVERetryAfter - respond with Retry-After header when LVE error 508 occurs
    • LVEId - ovverides id used for LVE ID instead of AssignUserID
    • LVEUser - overrides user to use to retrieve LVE ID, instead of AssignUserID

    HostingLimits module for Apache

    `,25)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#additional-notes"},{default:i(()=>e[589]||(e[589]=[t("Additional notes")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installation-4"},{default:i(()=>e[590]||(e[590]=[t("Installation")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#directives"},{default:i(()=>e[591]||(e[591]=[t("Directives")])),_:1}),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#securelinks"},{default:i(()=>e[592]||(e[592]=[t("SecureLinks")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#skiperrors"},{default:i(()=>e[593]||(e[593]=[t("SkipErrors")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#allowedhandlers"},{default:i(()=>e[594]||(e[594]=[t("AllowedHandlers")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#denyhandlers"},{default:i(()=>e[595]||(e[595]=[t("DenyHandlers")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveerrorcode"},{default:i(()=>e[596]||(e[596]=[t("LVEErrorCode")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveid"},{default:i(()=>e[597]||(e[597]=[t("LVEid")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveuser"},{default:i(()=>e[598]||(e[598]=[t("LVEUser")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveusergroupid"},{default:i(()=>e[599]||(e[599]=[t("LVEUserGroupID")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveretryafter"},{default:i(()=>e[600]||(e[600]=[t("LVERetryAfter")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lvesitesdebug"},{default:i(()=>e[601]||(e[601]=[t("LVESitesDebug")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveparsemode"},{default:i(()=>e[602]||(e[602]=[t("LVEParseMode")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lvepathregexp"},{default:i(()=>e[603]||(e[603]=[t("LVEPathRegexp")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lvelimitrechecktimeout"},{default:i(()=>e[604]||(e[604]=[t("LVELimitRecheckTimeout")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#lveuse429"},{default:i(()=>e[605]||(e[605]=[t("LVEUse429")])),_:1})])])])]),e[771]||(e[771]=l(`

    mod_hostinglimits works with existing CGI/PHP modules, to put them into LVE context. In most cases the CGI/PHP process will be placed into LVE with the ID of the user that sites belongs to. mod_hostinglimits detects the user from SuexecUserGroup (suexec module), SuPHP_UserGroup (from mod_suphp), AssignUserID (MPM ITK), RUidGid (mod_ruid2 ) directives.

    This can be overwritten via LVEId or LVEUser parameter on the Directory level.

    Note

    Those parameters will not work with mod_fcgid and mod_cgid.

    The order of detection looks as follows:

    • LVEId
    • LVEUser
    • SuexecUserGroup
    • suPHP_UserGroup
    • RUidGid
    • AssignUserID

    Note

    LVE doesn't work for mod_include #include due to its "filter" nature.

    Example:

    LoadModule hostinglimits_module modules/mod_hostinglimits.so
     <IfModule mod_hostinglimits.c>
      AllowedHandlers cgi-script php5-script php4-script
      SecureLinks On
    @@ -1334,7 +1334,7 @@ cmake .
     make
     make install
     
    • Apache Module Identifier: hostinglimits_module
    • Source Files: mod_hostinglimits.c
    • Compatibility: MPM prefork, worker, event, ITK

    Directives

    DescriptionMakes sure that for any virtual hosts, only files owned by user specified via SuexecUserGroup or other ways as described above are served. For files owned by any other user apache will return Access Denied error. The directive will not affect VirtualHost without user id specified, or with uid < 100
    SyntaxSecureLinks On
    DefaultSecureLinks Off
    Contextserver config

    Prevents apache from serving files not owned by user, stopping symlink attacks against php config files.

    Example

    SecureLinks On
    -

    SkipErrors

    `,52)),s("table",null,[e[618]||(e[618]=s("thead",null,[s("tr",null,[s("th"),s("th")])],-1)),s("tbody",null,[e[614]||(e[614]=s("tr",null,[s("td",null,[s("strong",null,"Description")]),s("td",null,"Allow apache to continue if LVE is not available")],-1)),e[615]||(e[615]=s("tr",null,[s("td",null,[s("strong",null,"Syntax")]),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"SkipErrors On")])])],-1)),e[616]||(e[616]=s("tr",null,[s("td",null,[s("strong",null,"Default")]),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"SkipErrors On")])])],-1)),e[617]||(e[617]=s("tr",null,[s("td",null,[s("strong",null,"Context")]),s("td",null,"server config")],-1)),s("tr",null,[s("td",null,[s("strong",null,[n(d,{color:"Red"},{default:a(()=>e[612]||(e[612]=[t("Status")])),_:1})])]),s("td",null,[n(d,{color:"Red"},{default:a(()=>e[613]||(e[613]=[t("deprecated")])),_:1})])])])]),e[783]||(e[783]=l(`

    Prevents Apache from exiting if LVE is not available.

    Example

    SkipErrors Off
    +

    SkipErrors

    DescriptionAllow apache to continue if LVE is not available
    SyntaxSkipErrors On
    DefaultSkipErrors On
    Contextserver config
    Statusdeprecated

    Prevents Apache from exiting if LVE is not available.

    Example

    SkipErrors Off
     

    AllowedHandlers

    DescriptionList of handlers that should be placed into LVE, support regexp
    SyntaxAllowedHandlers cgi-script %^php% my-script
    Defaultcgi-script %php% fcgid-script application/x-miva-compiled
    Contextserver config

    This directive allows to list handlers which will be intercepted and placed into LVE.

    Examples

    • Match requests handled by cgi-script handler:

      AllowedHandlers cgi-script 
       
    • Match all requests:

      AllowedHandlers *
       
    • Match all requests that handled by handler that contains PHP:

      AllowedHandlers %php%
      @@ -1381,14 +1381,14 @@ mod_hostinglimits: apr_lve_environment_init_group check ok
       

      LVESitesDebug

      DescriptionProvides extended debug info for listed sites.
      SyntaxLVESitesDebug test.com test2.com
      Default none
      Contextdirectory config

      Specifies virtual hosts to provide extra debugging information.

      Example:

      <Directory "/home/user1/domain.com/forums">
              LVESitesDebug abc.com yx.cnet
       </Directory>
      -

      LVEParseMode

      `,64)),s("table",null,[e[630]||(e[630]=s("thead",null,[s("tr",null,[s("th"),s("th")])],-1)),s("tbody",null,[e[627]||(e[627]=s("tr",null,[s("td",null,[s("strong",null,"Description")]),s("td",null,"Determines the way LVE ID will be extraced. In Conf")],-1)),s("tr",null,[e[626]||(e[626]=s("td",null,[s("strong",null,"Syntax")],-1)),s("td",null,[e[620]||(e[620]=s("code",null,"LVEParseMode CONF",-1)),e[621]||(e[621]=t()),e[622]||(e[622]=s("code",null,"PATH",-1)),e[623]||(e[623]=t()),e[624]||(e[624]=s("code",null,"OWNER",-1)),e[625]||(e[625]=t()),n(i,{to:"/cloudlinuxos/limits/#redis-support-for-hostinglimits"},{default:a(()=>e[619]||(e[619]=[s("code",null,"REDIS",-1)])),_:1})])]),e[628]||(e[628]=s("tr",null,[s("td",null,"Default:"),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"CONF")])])],-1)),e[629]||(e[629]=s("tr",null,[s("td",null,"Context:"),s("td",null,"directory config")],-1))])]),s("ul",null,[e[634]||(e[634]=l('
    • In CONF mode, standard way to extract LVE ID is used (SuexecUserGroup, LVEId, or similar directives).

    • In PATH mode, username is extracted from the home directory path. The default way to match username is via the following regexp: /home/([^/]*)/ . Custom regexp can be specified in LVEPathRegexp.

    • In OWNER mode, the owner of the file is used as an LVE ID.

    • ',3)),s("li",null,[s("p",null,[e[632]||(e[632]=t("In ")),s("span",Me,[n(i,{to:"/cloudlinuxos/limits/#redis-support-for-hostinglimits"},{default:a(()=>e[631]||(e[631]=[s("code",null,"REDIS",-1)])),_:1})]),e[633]||(e[633]=t(" mode, LVE ID is retrieved from Redis database."))])])]),e[784]||(e[784]=l(`

      Example:

      LVEParseMode CONF
      +

      LVEParseMode

      `,117)),s("table",null,[e[617]||(e[617]=s("thead",null,[s("tr",null,[s("th"),s("th")])],-1)),s("tbody",null,[e[614]||(e[614]=s("tr",null,[s("td",null,[s("strong",null,"Description")]),s("td",null,"Determines the way LVE ID will be extraced. In Conf")],-1)),s("tr",null,[e[613]||(e[613]=s("td",null,[s("strong",null,"Syntax")],-1)),s("td",null,[e[607]||(e[607]=s("code",null,"LVEParseMode CONF",-1)),e[608]||(e[608]=t()),e[609]||(e[609]=s("code",null,"PATH",-1)),e[610]||(e[610]=t()),e[611]||(e[611]=s("code",null,"OWNER",-1)),e[612]||(e[612]=t()),a(n,{to:"/cloudlinuxos/limits/#redis-support-for-hostinglimits"},{default:i(()=>e[606]||(e[606]=[s("code",null,"REDIS",-1)])),_:1})])]),e[615]||(e[615]=s("tr",null,[s("td",null,"Default:"),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"CONF")])])],-1)),e[616]||(e[616]=s("tr",null,[s("td",null,"Context:"),s("td",null,"directory config")],-1))])]),s("ul",null,[e[621]||(e[621]=l('
    • In CONF mode, standard way to extract LVE ID is used (SuexecUserGroup, LVEId, or similar directives).

    • In PATH mode, username is extracted from the home directory path. The default way to match username is via the following regexp: /home/([^/]*)/ . Custom regexp can be specified in LVEPathRegexp.

    • In OWNER mode, the owner of the file is used as an LVE ID.

    • ',3)),s("li",null,[s("p",null,[e[619]||(e[619]=t("In ")),s("span",Te,[a(n,{to:"/cloudlinuxos/limits/#redis-support-for-hostinglimits"},{default:i(()=>e[618]||(e[618]=[s("code",null,"REDIS",-1)])),_:1})]),e[620]||(e[620]=t(" mode, LVE ID is retrieved from Redis database."))])])]),e[772]||(e[772]=l(`

      Example:

      LVEParseMode CONF
       

      LVEPathRegexp

      DescriptionRegexp used to extract username from the path. Used in conjuction with LVEParseMode PATH
      SyntaxLVEPathRegexp regexp
      Default/home/([^/]*)/
      Contextdirectory config

      Used to extract usersname via path.

      Example:

      LVEPathRegexp /home/([^/]*)/
       

      LVELimitRecheckTimeout

      DescriptionTimeout in milliseconds, a site will return EP without lve_enter for LA decreasing after this time
      SyntaxLVELimitRecheckTimeout number
      Default0
      Contexthttpd.conf, virtualhost

      Example:

      LVELimitRecheckTimeout 1000
       

      LVEUse429

      DescriptionUse 429 error code as code returned on max entry limits ( on/off ).
      SyntaxLVEUse429 on
      Defaultoff
      Contexthttpd.conf, virtualhost

      Example:

      LVEUse429 on
      -

      Available for RPM based panels, EasyApache 4 and DirectAdmin.

      cPanel/WHM JSON API

      `,19)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#parameters"},{default:a(()=>e[635]||(e[635]=[t("Parameters")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#manage-reseller-limits-users-packages-via-cpanel-whm-json-api-jsonhandler"},{default:a(()=>e[636]||(e[636]=[t("Manage reseller limits/users/packages via cPanel/WHM JSON API - JSONHandler")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#using-a-whm-api-token"},{default:a(()=>e[637]||(e[637]=[t("Using a WHM API token")])),_:1})])]),s("p",null,[e[640]||(e[640]=t("CloudLinux OS offers JSON API for ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lvectl"},{default:a(()=>e[638]||(e[638]=[t("lvectl")])),_:1}),e[641]||(e[641]=t(" and ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-limits"},{default:a(()=>e[639]||(e[639]=[t("cloudlinux-limits")])),_:1}),e[642]||(e[642]=t(" via WHM. You can access it using the following URL:"))]),e[785]||(e[785]=l(`
      https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=list
      +

      Available for RPM based panels, EasyApache 4 and DirectAdmin.

      cPanel/WHM JSON API

      `,19)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#parameters"},{default:i(()=>e[622]||(e[622]=[t("Parameters")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#manage-reseller-limits-users-packages-via-cpanel-whm-json-api-jsonhandler"},{default:i(()=>e[623]||(e[623]=[t("Manage reseller limits/users/packages via cPanel/WHM JSON API - JSONHandler")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#using-a-whm-api-token"},{default:i(()=>e[624]||(e[624]=[t("Using a WHM API token")])),_:1})])]),s("p",null,[e[627]||(e[627]=t("CloudLinux OS offers JSON API for ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lvectl"},{default:i(()=>e[625]||(e[625]=[t("lvectl")])),_:1}),e[628]||(e[628]=t(" and ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-limits"},{default:i(()=>e[626]||(e[626]=[t("cloudlinux-limits")])),_:1}),e[629]||(e[629]=t(" via WHM. You can access it using the following URL:"))]),e[773]||(e[773]=l(`
      https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=list
       https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=get
       

      The output will look as follows:

      {"data":[{"ID":"default","CPU":"30","NCPU":"1","PMEM":"1024M","VMEM":"1024M","EP":"28","NPROC":"0","IO":"2048"}]}
      -

      Parameters

      `,4)),s("table",null,[e[651]||(e[651]=s("thead",null,[s("tr",null,[s("th"),s("th")])],-1)),s("tbody",null,[e[649]||(e[649]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"cgiaction")])]),s("td",null,[t("always "),s("span",{class:"notranslate"},[s("code",null,"jsonhandler")])])],-1)),e[650]||(e[650]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"command")])]),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"lvectl")]),t(" or "),s("span",{class:"notranslate"},[s("code",null,"cloudlinux-limits")]),t(" (default "),s("span",{class:"notranslate"},[s("code",null,"lvectl")]),t(")")])],-1)),s("tr",null,[e[648]||(e[648]=s("td",null,[s("span",{class:"notranslate"},[s("code",null,"handler")])],-1)),s("td",null,[e[645]||(e[645]=t("should match ")),n(i,{to:"/cloudlinuxos/command-line_tools/#lvectl"},{default:a(()=>e[643]||(e[643]=[t("lvectl")])),_:1}),e[646]||(e[646]=t(" or ")),n(i,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-limits"},{default:a(()=>e[644]||(e[644]=[t("cloudlinux-limits")])),_:1}),e[647]||(e[647]=t(" command"))])])])]),e[786]||(e[786]=l(`

      For commands like set, destroy & delete, where you need to specify LVE (user) ID, like lveid=500 (matches user ID 500).

      Example:

      https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=30%&io=2048
      +

      Parameters

      `,4)),s("table",null,[e[638]||(e[638]=s("thead",null,[s("tr",null,[s("th"),s("th")])],-1)),s("tbody",null,[e[636]||(e[636]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"cgiaction")])]),s("td",null,[t("always "),s("span",{class:"notranslate"},[s("code",null,"jsonhandler")])])],-1)),e[637]||(e[637]=s("tr",null,[s("td",null,[s("span",{class:"notranslate"},[s("code",null,"command")])]),s("td",null,[s("span",{class:"notranslate"},[s("code",null,"lvectl")]),t(" or "),s("span",{class:"notranslate"},[s("code",null,"cloudlinux-limits")]),t(" (default "),s("span",{class:"notranslate"},[s("code",null,"lvectl")]),t(")")])],-1)),s("tr",null,[e[635]||(e[635]=s("td",null,[s("span",{class:"notranslate"},[s("code",null,"handler")])],-1)),s("td",null,[e[632]||(e[632]=t("should match ")),a(n,{to:"/cloudlinuxos/command-line_tools/#lvectl"},{default:i(()=>e[630]||(e[630]=[t("lvectl")])),_:1}),e[633]||(e[633]=t(" or ")),a(n,{to:"/cloudlinuxos/command-line_tools/#cloudlinux-limits"},{default:i(()=>e[631]||(e[631]=[t("cloudlinux-limits")])),_:1}),e[634]||(e[634]=t(" command"))])])])]),e[774]||(e[774]=l(`

      For commands like set, destroy & delete, where you need to specify LVE (user) ID, like lveid=500 (matches user ID 500).

      Example:

      https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=30%&io=2048
       
       https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=300Mhz&io=2048
       
      @@ -1400,8 +1400,8 @@ https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&co
       

      For commands like apply all, destroy all, use:

      handler=apply-all
       
       handler=destroy-all
      -

      You can use the following commands that allow to specify user name instead of user ID:

      set-userSet parameters for a LVE and/or create a LVE using username instead of ID.
      list-user List loaded LVEs, display username instead of user ID.
      delete-user Delete LVE and set configuration for that user to defaults.

      If the limits for users are set with cPanel LVE Extension, then turnkey billing solutions can be applied (e.g. WHMCS).

      Manage reseller limits/users/packages via cPanel/WHM JSON API (JSONHandler)

      Actionlvectl commandJSONHandler
      enable reseller limitslvectl set-reseller res1 --speed=35%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-reseller&lveid=res1&speed=30%&io=2048
      disable reseller limitslvectl remove-reseller res1https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=remove-reseller&lveid=res1
      set default limits for resellerlvectl set-reseller-default res1 --speed=91%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-reseller-default&lveid=res1&speed=30%
      set limits for package, created by resellerlvectl package-set res1_pack1 --reseller res1 --speed=88%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=package-set&lveid=res1_pack1&reseller=res1&speed=30%
      set limits for user, created by resellerlvectl set-user r1user1 --reseller res1 --speed=77%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&speed=30%
      set unlimited for user, created by resellerlvectl set-user r1user1 --reseller res1 --unlimitedhttps://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&unlimited
      set inodes limitcloudlinux-limits set --username=r1user1 --inodes=9090,8989https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=set&username=r1user1&inodes=9090,8989

      Using a WHM API token

      You can use a WHM API token with curl as follows:

      `,17)),e[787]||(e[787]=s("div",{clas:"code"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{class:"language-text"},[s("code",null,`curl -X POST -k -s -H "Authorization: whm root:WHM_TOKEN" "https://SERVER_IP:2087/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=LVE_METHOD&PARAMETERS -`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"})])])],-1)),e[788]||(e[788]=s("p",null,"Where:",-1)),s("ul",null,[e[661]||(e[661]=s("li",null,[s("span",{class:"notranslate"},[s("code",null,"WHM_TOKEN")]),t(" – a generated WHM API token (see: "),s("a",{href:"https://documentation.cpanel.net/display/DD/Guide+to+API+Authentication+-+API+Tokens+in+WHM#0ac291c40e454694a8b981c45988c1cb",target:"_blank",rel:"noopener noreferrer"},"Creating an API token"),t(")")],-1)),s("li",null,[e[653]||(e[653]=s("span",{class:"notranslate"},[s("code",null,"LVE_METHOD")],-1)),e[654]||(e[654]=t(" – lvectl method (for example: ")),e[655]||(e[655]=s("span",{class:"notranslate"},[s("code",null,"list")],-1)),e[656]||(e[656]=t(". See also: ")),n(i,{to:"/command-line_tools/#lvectl"},{default:a(()=>e[652]||(e[652]=[t("lvectl")])),_:1}),e[657]||(e[657]=t(")"))]),s("li",null,[e[659]||(e[659]=s("span",{class:"notranslate"},[s("code",null,"PARAMETERS")],-1)),e[660]||(e[660]=t(" – all other parametrs and options for a method according to the ")),n(i,{to:"/command-line_tools/#lvectl"},{default:a(()=>e[658]||(e[658]=[t("documentation")])),_:1})])]),e[789]||(e[789]=s("h3",{id:"mod-proctitle",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#mod-proctitle","aria-hidden":"true"},"#"),t(" mod_proctitle")],-1)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-read-mod-proctitle-information"},{default:a(()=>e[662]||(e[662]=[t("How to read mod_proctitle information")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-parameters"},{default:a(()=>e[663]||(e[663]=[t("Tuning parameters")])),_:1})])]),e[790]||(e[790]=l(`

      mod_proctitle is a module for gathering URL information per request. It is available only for Apache 2.4 now.

      For installation:

      cPanel EasyApache 3 and non cPanel ( CloudLinux 7 only for non cPanel ):

      yum install mod_proctitle --enablerepo=cloudlinux-updates-testing
      +

      You can use the following commands that allow to specify user name instead of user ID:

      set-userSet parameters for a LVE and/or create a LVE using username instead of ID.
      list-user List loaded LVEs, display username instead of user ID.
      delete-user Delete LVE and set configuration for that user to defaults.

      If the limits for users are set with cPanel LVE Extension, then turnkey billing solutions can be applied (e.g. WHMCS).

      Manage reseller limits/users/packages via cPanel/WHM JSON API (JSONHandler)

      Actionlvectl commandJSONHandler
      enable reseller limitslvectl set-reseller res1 --speed=35%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-reseller&lveid=res1&speed=30%&io=2048
      disable reseller limitslvectl remove-reseller res1https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=remove-reseller&lveid=res1
      set default limits for resellerlvectl set-reseller-default res1 --speed=91%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-reseller-default&lveid=res1&speed=30%
      set limits for package, created by resellerlvectl package-set res1_pack1 --reseller res1 --speed=88%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=package-set&lveid=res1_pack1&reseller=res1&speed=30%
      set limits for user, created by resellerlvectl set-user r1user1 --reseller res1 --speed=77%https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&speed=30%
      set unlimited for user, created by resellerlvectl set-user r1user1 --reseller res1 --unlimitedhttps://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&unlimited
      set inodes limitcloudlinux-limits set --username=r1user1 --inodes=9090,8989https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=set&username=r1user1&inodes=9090,8989

      Using a WHM API token

      You can use a WHM API token with curl as follows:

      `,17)),e[775]||(e[775]=s("div",{clas:"code"},[s("div",{class:"language-text line-numbers-mode","data-ext":"text"},[s("pre",{class:"language-text"},[s("code",null,`curl -X POST -k -s -H "Authorization: whm root:WHM_TOKEN" "https://SERVER_IP:2087/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=LVE_METHOD&PARAMETERS +`)]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"})])])],-1)),e[776]||(e[776]=s("p",null,"Where:",-1)),s("ul",null,[e[648]||(e[648]=s("li",null,[s("span",{class:"notranslate"},[s("code",null,"WHM_TOKEN")]),t(" – a generated WHM API token (see: "),s("a",{href:"https://documentation.cpanel.net/display/DD/Guide+to+API+Authentication+-+API+Tokens+in+WHM#0ac291c40e454694a8b981c45988c1cb",target:"_blank",rel:"noopener noreferrer"},"Creating an API token"),t(")")],-1)),s("li",null,[e[640]||(e[640]=s("span",{class:"notranslate"},[s("code",null,"LVE_METHOD")],-1)),e[641]||(e[641]=t(" – lvectl method (for example: ")),e[642]||(e[642]=s("span",{class:"notranslate"},[s("code",null,"list")],-1)),e[643]||(e[643]=t(". See also: ")),a(n,{to:"/command-line_tools/#lvectl"},{default:i(()=>e[639]||(e[639]=[t("lvectl")])),_:1}),e[644]||(e[644]=t(")"))]),s("li",null,[e[646]||(e[646]=s("span",{class:"notranslate"},[s("code",null,"PARAMETERS")],-1)),e[647]||(e[647]=t(" – all other parametrs and options for a method according to the ")),a(n,{to:"/command-line_tools/#lvectl"},{default:i(()=>e[645]||(e[645]=[t("documentation")])),_:1})])]),e[777]||(e[777]=s("h3",{id:"mod-proctitle",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#mod-proctitle","aria-hidden":"true"},"#"),t(" mod_proctitle")],-1)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-to-read-mod-proctitle-information"},{default:i(()=>e[649]||(e[649]=[t("How to read mod_proctitle information")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#tuning-parameters"},{default:i(()=>e[650]||(e[650]=[t("Tuning parameters")])),_:1})])]),e[778]||(e[778]=l(`

      mod_proctitle is a module for gathering URL information per request. It is available only for Apache 2.4 now.

      For installation:

      cPanel EasyApache 3 and non cPanel ( CloudLinux 7 only for non cPanel ):

      yum install mod_proctitle --enablerepo=cloudlinux-updates-testing
       service httpd restart
       

      cPanel EasyApache 4:

      yum install ea-apache24-mod_proctitle
       service httpd restart
      @@ -1478,8 +1478,8 @@ USE_HOME
       -D AP_USERDIR_SUFFIX="public_html"
       -D AP_SAFE_DIRECTORY="/usr/local/safe-bin"
       

      Description of other switch_suexec parameters:

      -pif suexec binary file will be placed not in standard way /usr/sbin - specify this new path with p-option
      -oif suexec binary file not owned by root:apache - specify new owner with o-option

      For most cases -p and -o options for standard Apache are useless.

      Correct suEXEC will be restored even after httpd update or reinstall.

      List of pre-built suEXEC binary files stored without suid bit and not executable.

      How to install alt-suexec?

      For installation run the command:

      yum install alt-suexec
      -

      New suexec with custom parameters

      If you need suEXEC with custom parameters absent in current set of alt-suexec, please submit a ticket on https://cloudlinux.zendesk.com and we will add new suEXEC with needed parameters.

      cPanel Nginx and application selectors

      Recently, cPanel added support for the Nginx web server and for Python and Node.js applications.

      We have checked the compatibility of ea-nginx and cPanel application Selectors with CloudLinux OS LVE and CageFS. All tests passed successfully and all processes started by ea-nginx and cPanel selectors are launched inside LVE and CageFS.

      Don’t forget, you can use Ruby/Python/Node.js Selectors from CloudLinux OS. Here you can find a large number of supported versions for Ruby/Python/Node.js applications.

      `,54)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:a(()=>e[664]||(e[664]=[t("CloudLinux OS Python Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#ruby-selector"},{default:a(()=>e[665]||(e[665]=[t("CloudLinux OS Ruby Selector")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:a(()=>e[666]||(e[666]=[t("CloudLinux OS NodeJS Selector")])),_:1})])]),e[791]||(e[791]=l(`

      Note

      Nginx support is currently experimental.

      How to use Certbot with alt-python36

      To run Certbot with alt-python36, follow the next steps:

      1. Add a path to the alt-python36 in the environment variable PATH as the first element: /opt/alt/python36/bin/.
      2. Run Certbot with the --no-bootstrap parameter.

      Example:

      The old command to run Certbot on CentOS 6/Cloudlinux OS 6:

      certbot-auto --nginx
      +

      New suexec with custom parameters

      If you need suEXEC with custom parameters absent in current set of alt-suexec, please submit a ticket on https://cloudlinux.zendesk.com and we will add new suEXEC with needed parameters.

      cPanel Nginx and application selectors

      Recently, cPanel added support for the Nginx web server and for Python and Node.js applications.

      We have checked the compatibility of ea-nginx and cPanel application Selectors with CloudLinux OS LVE and CageFS. All tests passed successfully and all processes started by ea-nginx and cPanel selectors are launched inside LVE and CageFS.

      Don’t forget, you can use Ruby/Python/Node.js Selectors from CloudLinux OS. Here you can find a large number of supported versions for Ruby/Python/Node.js applications.

      `,54)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#python-selector"},{default:i(()=>e[651]||(e[651]=[t("CloudLinux OS Python Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#ruby-selector"},{default:i(()=>e[652]||(e[652]=[t("CloudLinux OS Ruby Selector")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#node-js-selector"},{default:i(()=>e[653]||(e[653]=[t("CloudLinux OS NodeJS Selector")])),_:1})])]),e[779]||(e[779]=l(`

      Note

      Nginx support is currently experimental.

      How to use Certbot with alt-python36

      To run Certbot with alt-python36, follow the next steps:

      1. Add a path to the alt-python36 in the environment variable PATH as the first element: /opt/alt/python36/bin/.
      2. Run Certbot with the --no-bootstrap parameter.

      Example:

      The old command to run Certbot on CentOS 6/Cloudlinux OS 6:

      certbot-auto --nginx
       

      The new command to run Certbot on CentOS 6/CloudLinux OS 6:

      PATH="/opt/alt/python36/bin/:$PATH" certbot-auto --no-bootstrap --nginx
      -

      Apache suexec module

      General information and requirements

      `,11)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#how-does-it-work-with-cloudlinux-os"},{default:a(()=>e[667]||(e[667]=[t("How does it work with CloudLinux OS?")])),_:1})])]),e[792]||(e[792]=l('

      This module is used by the Apache HTTP Server to switch to another user before executing CGI programs. The suEXEC feature provides users of the Apache HTTP Server with the ability to run CGI and SSI programs under user IDs different from the user ID of the calling web server (apache/nobody). Normally, when a CGI or SSI program executes, it runs as the same user who is running the web server.

      If we are talking about shared hosting where different accounts are launched on the same server, the installation of this module is necessary to ensure security.

      How does it work with CloudLinux OS?

      The DirectAdmin and CloudLinux OS (for httpd, httpd24-httpd and cPanel EasyApache 4) both provide a patched version of suexec. For other distributions you can use patches available here: https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz

      1. Besides the ability to run CGI programs under user IDs, suexec with CloudLinux OS patch adds the ability to run that script under CageFS.

      NOTE

      Therefore, this module is necessary for the proper work of PHP Selector.

      1. This module is also necessary for the proper work of mod_hostinglimits. The SuexecUserGroup directive indicates for mod_hostinglimits in which LVE the user process should be put in.

      Configuration

      SuexecUserGroup Directive

      Syntax: SuexecUserGroup User Group

      Context: httpd.conf, virtualhost

      Description: The SuexecUserGroup directive allows you to specify a user and a group for CGI programs to run as. Startup will fail if this directive is specified but the suEXEC feature is disabled.

      Note

      Control panels such as cPanel, Plesk, and DirectAdmin add this directive to the Apache configuration automatically when creating a domain. If you use the server without a control panel, make sure this directive is added for each virtual host.

      Installation

      The mod_suexec installation process varies depending on the control panel and Apache.

      ',15)),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4-2"},{default:a(()=>e[668]||(e[668]=[t("Installing on cPanel servers with EasyApache 4")])),_:1}),s("ul",null,[s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#via-command-line"},{default:a(()=>e[669]||(e[669]=[t("Via command line")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#via-administrator-interface"},{default:a(()=>e[670]||(e[670]=[t("Via administrator interface")])),_:1})])])]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-plesk-servers-2"},{default:a(()=>e[671]||(e[671]=[t("Installing on Plesk servers")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-directadmin-servers-2"},{default:a(()=>e[672]||(e[672]=[t("Installing on DirectAdmin servers")])),_:1})]),s("li",null,[n(i,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-servers-with-no-control-panel-3"},{default:a(()=>e[673]||(e[673]=[t("Installing on servers with no control panel")])),_:1})])]),e[793]||(e[793]=l(`

      Installing on cPanel servers with EasyApache 4

      Via command line

      1. Install mod_suexec through YUM package manager as follows:
      yum install ea-apache24-mod_suexec
      +

      Apache suexec module

      General information and requirements

      `,11)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#how-does-it-work-with-cloudlinux-os"},{default:i(()=>e[654]||(e[654]=[t("How does it work with CloudLinux OS?")])),_:1})])]),e[780]||(e[780]=l('

      This module is used by the Apache HTTP Server to switch to another user before executing CGI programs. The suEXEC feature provides users of the Apache HTTP Server with the ability to run CGI and SSI programs under user IDs different from the user ID of the calling web server (apache/nobody). Normally, when a CGI or SSI program executes, it runs as the same user who is running the web server.

      If we are talking about shared hosting where different accounts are launched on the same server, the installation of this module is necessary to ensure security.

      How does it work with CloudLinux OS?

      The DirectAdmin and CloudLinux OS (for httpd, httpd24-httpd and cPanel EasyApache 4) both provide a patched version of suexec. For other distributions you can use patches available here: https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz

      1. Besides the ability to run CGI programs under user IDs, suexec with CloudLinux OS patch adds the ability to run that script under CageFS.

      NOTE

      Therefore, this module is necessary for the proper work of PHP Selector.

      1. This module is also necessary for the proper work of mod_hostinglimits. The SuexecUserGroup directive indicates for mod_hostinglimits in which LVE the user process should be put in.

      Configuration

      SuexecUserGroup Directive

      Syntax: SuexecUserGroup User Group

      Context: httpd.conf, virtualhost

      Description: The SuexecUserGroup directive allows you to specify a user and a group for CGI programs to run as. Startup will fail if this directive is specified but the suEXEC feature is disabled.

      Note

      Control panels such as cPanel, Plesk, and DirectAdmin add this directive to the Apache configuration automatically when creating a domain. If you use the server without a control panel, make sure this directive is added for each virtual host.

      Installation

      The mod_suexec installation process varies depending on the control panel and Apache.

      ',15)),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4-2"},{default:i(()=>e[655]||(e[655]=[t("Installing on cPanel servers with EasyApache 4")])),_:1}),s("ul",null,[s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#via-command-line"},{default:i(()=>e[656]||(e[656]=[t("Via command line")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#via-administrator-interface"},{default:i(()=>e[657]||(e[657]=[t("Via administrator interface")])),_:1})])])]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-plesk-servers-2"},{default:i(()=>e[658]||(e[658]=[t("Installing on Plesk servers")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-directadmin-servers-2"},{default:i(()=>e[659]||(e[659]=[t("Installing on DirectAdmin servers")])),_:1})]),s("li",null,[a(n,{to:"/cloudlinuxos/cloudlinux_os_components/#installing-on-servers-with-no-control-panel-3"},{default:i(()=>e[660]||(e[660]=[t("Installing on servers with no control panel")])),_:1})])]),e[781]||(e[781]=l(`

      Installing on cPanel servers with EasyApache 4

      Via command line

      1. Install mod_suexec through YUM package manager as follows:
      yum install ea-apache24-mod_suexec
       

      NOTE

      ea-apache24-mod_suexec conflicts with the mod_ruid2 therefore, before installing the module, remove ea-apache24-mod_ruid2 as follows: $ yum remove ea-apache24-mod_ruid2

      1. Now, when the module is installed, restart Apache:
      service httpd restart
      -

      Note

      If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

      Via administrator interface

      1. Open EasyApache4 page.
      2. Click Customize for Currently installed Packages.

      1. Click Apache Modules. Find mod_suexec and click Yes to install it.

      1. Select Review and Provision.

      1. Wait while Provision will be finished.

        Note

        If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

      Installing on Plesk servers

      This module is integrated into Apache for Plesk control panel by default.

      Installing on DirectAdmin servers

      This module is integrated into Apache for DirectAdmin control panel by default.

      Installing on servers with no control panel

      This module is integrated into httpd Apache rpm provided by Cloudlinux OS by default.

      If you are using an alternative Apache - httpd24, nothing has to be done as this module is also integrated into httpd24-httpd Apache rpm provided by Cloudlinux by default.

      ',23))])}const He=m(le,[["render",Ne],["__file","index.html.vue"]]);export{He as default}; +

    Note

    If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

    Via administrator interface

    1. Open EasyApache4 page.
    2. Click Customize for Currently installed Packages.

    1. Click Apache Modules. Find mod_suexec and click Yes to install it.

    1. Select Review and Provision.

    1. Wait while Provision will be finished.

      Note

      If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

    Installing on Plesk servers

    This module is integrated into Apache for Plesk control panel by default.

    Installing on DirectAdmin servers

    This module is integrated into Apache for DirectAdmin control panel by default.

    Installing on servers with no control panel

    This module is integrated into httpd Apache rpm provided by Cloudlinux OS by default.

    If you are using an alternative Apache - httpd24, nothing has to be done as this module is also integrated into httpd24-httpd Apache rpm provided by Cloudlinux by default.

    ',23))])}const Me=c(ae,[["render",Oe],["__file","index.html.vue"]]);export{Me as default}; diff --git a/assets/index.html-f8088e8a.js b/assets/index.html-f8088e8a.js new file mode 100644 index 00000000..f1d12b18 --- /dev/null +++ b/assets/index.html-f8088e8a.js @@ -0,0 +1 @@ +import{_ as e,n,p as r,a4 as s}from"./framework-dd156d1c.js";const o={};function l(d,t){return n(),r("div",null,t[0]||(t[0]=[s('

    Introduction

    Disclaimer

    • All mentioned in this documentation trademarks, logos, and copyrights are property of their respective owners and are only mentioned for informative purposes.
    • Ubuntu is a registered trademark of Canonical Ltd.

    CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. It is a Stable version of a free extension designed exclusively for Ubuntu® 22.04 LTS users.

    Supported version of Ubuntu

    We support Ubuntu 22.04 LTS.

    CloudLinux OS editions comparison

    CloudLinux Subsystem for Ubuntu supports the same editions as CloudLinux OS, with some exceptions.

    In the table below, a feature marked with "No" for the CloudLinux Subsystem for Ubuntu means that no edition of CloudLinux Subsystem for Ubuntu supports this feature.

    FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS Legacy (Shared)CloudLinux OS Shared ProCloudLinux Subsystem For Ubuntu
    Maximum amount of hosting accounts15unlimitedunlimitedunlimited
    Resource Limits (LVE)No*Yes**YesYesYes
    Cage FSYesYesYesYesYes
    MySQL GovernorNoNoYesYesYes
    PHP SelectorYesYesYesYesYes
    Python/Node.js SelectorsYes***Yes***Yes***Yes***No
    Ruby SelectorNoYes***Yes***Yes***No
    HardenedPHPYesYesYesYesYes
    Apache mod_lsapi PROYesYesYesYesYes
    SecureLinksNoYesYesYesYes
    Website monitoring toolYesYesYesYesNo
    Website monitoring alertsYesYesYesYesNo
    Slow Site analyzerYesYesYesYesNo
    PHP X-RayYesYesNoYesNo
    Centralized MonitoringNoNoNoYesNo
    AccelerateWPYesYesNoYesNo
    Support 24/7YesYesYesYesYes

    * Only inodes limits are available.

    ** Limits are disabled by default.

    *** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin, and servers with custom panels with own integration.

    Supported control panels

    PanelSupported
    cPanel from v.102Yes
    PleskNo
    DirectAdminNo
    Other panelsYes
    No control panelYes
    ',14)]))}const a=e(o,[["render",l],["__file","index.html.vue"]]);export{a as default}; diff --git a/cln/account_settings/convert.html b/cln/account_settings/convert.html index 27cf6111..a65bc0b2 100644 --- a/cln/account_settings/convert.html +++ b/cln/account_settings/convert.html @@ -51,10 +51,10 @@ })(); - +
    sidebar hamburger menu

    How to convert your Customer account into Reseller account

    Note

    Conversion is a critical procedure. Please contact the billing team at billing@cloudlinux.com

    Go to Settings | Account details | Personal Information | Convert account

    /images/convert_account_zoom70.png)

    Conversion Procedure

    1. Choose Initial Deposit Amount and click Next

    /images/conversing_step2_zoom70.png)

    1. Carefully read the Reseller Agreement and click Accept

    /images/reseller_agreement_zoom70.png)

    1. Configure payment details — choose autopayment type and click Submit payment and Continue

    /images/payment_details_zoom70.png)

    - + diff --git a/cln/account_settings/index.html b/cln/account_settings/index.html index 8753d011..ab72c79a 100644 --- a/cln/account_settings/index.html +++ b/cln/account_settings/index.html @@ -51,10 +51,10 @@ })(); Account Settings - +
    sidebar hamburger menu

    Account Settings

    To go to account details click User icon → Settings in the top right corner.

    Personal Information

    On the Account Details page choose Personal Information. Here you can add or change your personal information and change password. To change password click Change Password . In an opened popup specify a current and a new password. Click Save Changes to apply the changes or Cancel to close the popup.

    How to convert your key-based account into IP-based account

    Note

    Conversion is a critical procedure. Please contact the billing team by clicking the Contact Support link at the footer of this page.

    Company Information

    On the Account Details page choose Company Information. Here you can add or change company information.

    Multi-user support

    You can create additional logins for your account in the form of the email address. The sub login can have any role with different permissions listed below. A master Server Administrator account has the full scope of permissions; he can create account sub logins.

    You can choose one of the roles with special privileges for your sub logins.

    Roles

    Full Access/Admin

    • View products
    • View servers/licenses information
    • Reporting
    • Add/delete servers
    • Create activation keys
    • Order/delete licenses
    • View invoices
    • View billing information
    • Edit credit cards information
    • Edit account information
    • Edit billing information/top up for a reseller
    • View prices
    • View account information
    • Change password

    Billing

    • View products
    • View servers/licenses information
    • View invoices
    • View billing information
    • Edit credit cards information
    • Edit account information
    • Edit billing information/top up for a reseller
    • View prices
    • View account information

    Server and License Management

    • View products
    • View servers/licenses information
    • Reporting
    • Add/delete servers
    • Create activation keys
    • Order/delete licenses

    Server Management Only

    • View products
    • View servers/licenses information
    • Reporting
    • Add/delete servers
    • Create activation keys

    Read Only — Billing

    • View products
    • View servers/licenses information
    • Reporting
    • View invoices
    • View billing information

    Read Only — Server Management

    • View products
    • View servers/licenses information
    • Reporting

    Reports

    It is possible to set reports receiving for an account to the desired email address. To do so, click Reports in the left side menu.

    - + diff --git a/cln/billing/index.html b/cln/billing/index.html index 11c74eda..f18049d1 100644 --- a/cln/billing/index.html +++ b/cln/billing/index.html @@ -51,10 +51,10 @@ })(); Billing - +
    sidebar hamburger menu

    Billing

    Overview. Products

    Click Billing → Overview to go to Products page. On Products page you can see all your purchased or trial products.

    The following information is available:

    • Server licenses — displays the number of servers activated for each product.
    • Paid until — the date of the next payment.

    The following actions are available for each product:

    • Add more licenses — click Add more licenses and you will be redirected to the Product Purchase page.
    • Manage product — click the Manage product button to go to the Product Activation Keys page and manage a product.
    • Unsubscribe —  click Unsubscribe to cancel a product subscription. Confirm the action in the popup or click Cancel to close it.

    CloudLinux OS 6 Extended Lifecycle Support

    Note

    You don't need to convert your existing CentOS 6 system to CloudLinux OS in order to use ELS (unless you are using cPanel/WHM). Find more information here.

    Starting from 1st December CloudLinux OS version 6 is End of Life (read more). For those who still need to use CloudLinux OS version 6, we have launched an Extended Lifecycle Support (ELS) for CloudLinux OS version 6.

    What does it mean?

    If you have CloudLinux OS version 6 then it will be considered as CloudLinux OS 6 ELS server license starting from the 1st December 2020. It means that you will be additionally charged a 10% premium from your price for CloudLinux OS server license for the first year (until 30th November 2021), 20% for the second year (from 1st December 2021 until 30th November 2022), and 30% premium for the 3rd year (1st December 2022 till 30th November 2023).

    You will start receiving the invoice with the additional line item that will include the number of server licenses used for CloudLinux OS 6 ELS.

    If you do not want to use CloudLinux OS 6 ELS then you need to upgrade the version of CloudLinux OS to 7 or higher.

    Note

    There are no additional charges for ELS if you are using CloudLinux OS Shared PRO

    How does it work?

    No additional actions required if you will decide to stay on CloudLinux OS version 6.

    As usual, you can purchase CloudLinux OS server licenses in CLN. As soon as you activate the licenses on the server we will detect the CloudLinux OS version on it. On the next billing date, you will get the invoice with the additional line item as described above for all servers running on CloudLinux OS 6.

    If you activate the server license on CloudLinux OS version 7 or higher then no additional charges will take place.

    Invoices

    Go to Billing → Invoices to get all information about all your invoices.

    There are two tables Paid Invoices and Unpaid Invoices.

    Unpaid Invoices Table

    The table contains the followings columns:

    • Date — invoice issue date.
    • Invoice Number — unique invoice number.
    • Amount total — a total amount you have to pay.
    • Amount due — unpaid part which a user has to pay off.
    • Status — invoice billing status:
      • Outstanding — not paid yet.
    • Actions — the following actions are available:
      • View invoice — click the eye icon to view invoice in-details. It opens in a new popup.
      • Download invoice — click download icon to download an invoice.

    A total amount to be paid for all outstanding invoices and a due date are displayed under the Unpaid Invoices table. To pay total due, click Pay Now button. Select payment method popup opens. Available payment methods are PayPal and Credit or Debit Card. Click the desired method and proceed with the instructions on the screen.

    Paid Invoices Table

    The table contains the followings columns:

    • Date — invoice issue date.
    • Invoice Number — unique invoice number.
    • Amount total — a total amount you have already paid.
    • Status — invoice billing status:
      • Paid — an invoice has already been paid.
    • Actions — the following actions are available:
      • View invoice — click the eye icon to view invoice in-details. It opens in a new popup.
      • Download invoice — click download icon to download an invoice. Search in the invoice list by a specific query. Type a search query in the search field to show specific invoices.

    Direct Pay via PayPal

    The direct pay via PayPal is available only for paying debts. To pay invoices under a customer, follow the next steps:

    1. Go to Billing → Invoices

    2. Click PAY NOW

      • If the selected payment method is not chosen, you’ll see the dialog with the direct link for payment

      • If the selected payment method is chosen, you'll see the dialog for making payment

      • In this dialog, you could select CHANGE PAYMENT METHOD and see the direct link for payment

    3. After choosing the direct payment option you'll be redirected to the PayPal page

    - + diff --git a/cln/cln_for_resellers/conversion.html b/cln/cln_for_resellers/conversion.html index ba59fad3..baef949e 100644 --- a/cln/cln_for_resellers/conversion.html +++ b/cln/cln_for_resellers/conversion.html @@ -51,10 +51,10 @@ })(); - +
    sidebar hamburger menu

    The process of reseller registration differs from customer registration. Go to reseller registration page https://cln.cloudlinux.com/console/register/reseller and fill in the required forms.

    1. Choose the initial deposit amount and click Next.

      /images/clnresellerregistrationstep1_zoom90.png)

    2. Carefully read and accept reseller agreement.

    3. Configure payment details and click Submit payment and continue.

      Note

      Right after clicking Submit the whole deposit amount will be withdrawn from an account selected as Current Payment Method.

      /images/clnresellerregistrationstep3_zoom90.png)

    4. Specify your account login, password, email for billing, and other required information and click Sign in. You will find your login and password in your welcome email. After activation, you can log in to the CLN.

    - + diff --git a/cln/cln_for_resellers/index.html b/cln/cln_for_resellers/index.html index ffd914e4..2f7235f0 100644 --- a/cln/cln_for_resellers/index.html +++ b/cln/cln_for_resellers/index.html @@ -51,10 +51,10 @@ })(); CLN For IP-based Accounts - +
    sidebar hamburger menu

    CLN For IP-based Accounts

    Note

    You can download CloudLinux REST API documentation.

    Registration

    Once you have a CLN account created, contact our billing team to assist you with the account type conversion. This can be done by clicking the Contact Support link at the footer of this page.

    IP Licenses Management

    IP license allows to register server only by it's IP (without a need to create a key and use it during registration). IP Licenses page allows resellers to add and remove IP licenses using automated tools via API.

    Click required product at the top menu and then IP Licenses at the left sidebar.

    The table contains the following information:

    • IP — an IP address of the activated server
    • Hostname — a hostname of the server
    • Added —  a date when a server with this IP was activated
    • Last check-in — the date of the last successful server check-in
    • Type —  license type for this server
    • Actions

    Actions

    The following actions are available:

    • Add IP to this license. Click Add IP button. In the opened popup specify IP and product type (for Imunify360 licenses only) and click Add IP to complete the action or Cancel to close the popup.

    • Remove IP from using this license. Tick IP(s) and click Bin icon in the IP line or above the table for bulk action.

    • Filter servers list by IP and product type. Click IP and select an IP, or click Product Type and select a product.

    • Search in the list by a specific query. Type a search query in the search field to show specific servers.

    • Activate backup. Click . In the opened popup specify backup size and datacenter and click Create to complete the action or Cancel to close the popup.

    • Manage backup. Click . In the opened popup click Go to the backup management to go to backup management system interface (opens in a new tab) or click Cancel to close the popup.

    Converting your account to CloudLinux OS Shared PRO type

    You can find the process description here

    Autopayments

    Navigate to Billing → Payment Methods → Autopayment.

    The following autopayment types are available:

    • Auto add funds — when balance is below $100 it is replenished to the specified amount
    • Auto repay (default option) — once your balance becomes negative, your card will be automatically charged. Minimal charge is $20
    • Do not add funds automatically

    When you have selected and configured autopayment type, click Save.

    Invoices

    Go to Billing → Invoices. There is a table with all invoices and appropriate information.

    The table contains the following columns:

    • Invoice id — unique invoice number
    • Created — the date when invoice was created
    • Type —  payment type
      • Payment received — invoice is already payed
      • Refund — you have a debt on your account. Please pay the invoice.
      • Invoice —  invoice is issued. Please pay the invoice.
    • Pay period — invoice period
    • Total — the total amount of money you have to pay
    • Balance — amount of money on your account
    • Actions
      • — open invoice in a popup (you can download it)
      • — open invoice in a new tab (you can download it)

    Click near invoice id to show detailed bill information:

    • Title — license name
    • Quantity — licenses quantity
    • SubTotal — the price for that number of licenses

    AccelerateWP Permissions Management for IPR Customers

    Accelerate WP Premium and CDN permission management will help you enable/ disable Premium and CDN features on certain servers. In cases where hosting users have root access to the server (e.g. VPS users), this permission ensures the license holder retains control over access to billable features.

    By default permissions are disabled.

    For managing these features via CLN for IP-based licensing:

    1. Log in to the CLN account
    2. Go to the 'CloudLinux' tab
    3. Go to the IP Licenses section

    1. Press edit
    2. Choose new permissions

    1. Save permissions

    For managing these features via CLN for key-based licensing:

    1. Log in to the CLN account
    2. Go to the 'CloudLinux' tab
    3. Go to the 'Activation keys' section

    1. Select the activation key that you need

    1. Press edit

    1. Choose new permissions
    2. Save permissions
    - + diff --git a/cln/dashboard/index.html b/cln/dashboard/index.html index e811178d..bced59ce 100644 --- a/cln/dashboard/index.html +++ b/cln/dashboard/index.html @@ -51,11 +51,11 @@ })(); Dashboard - +
    sidebar hamburger menu

    Dashboard

    Dashboard helps quickly navigate to user's Products. It includes the following tabs:

    Products

    Click Dashboard. You will be redirected to the Products page.

    On the Products page you can see all your products.

    The following actions are available:

    • Create activation key/Activation Key. Activation Key is a string of numbers and letters used to activate a product. If an activation key is not created yet, you can do it by clicking Create activation key. A new key will be created and displayed. To copy an activation key to clipboard, just click on it.
    • Add Licenses — shortcut to Product Purchase page.
    • Manage Product — shortcut to Product Activation Keys page.
    • Read more — click to get more information about the product.

    Trial Activation

    There are no trials available for the ELS subscription

    On the Product tab a user can activate a trial license if trial product hasn't been activated yet.

    Just click Free Trial and proceed with trial activation instructions.

    Also, a user is able to activate trial license from the Purchase page.

    CloudLinux OS Activation Keys

    Click CloudLinux OS at the top menu to go to CloudLinux OS Activation Keys page. Here you can see server licenses used/limits.

    The following actions are available:

    • Copy a Default Activation Key to a clipboard. To do so, click Copy below the default key.
    • Generate a new Activation Key. To do so, click Generate new activation key. Specify the number of servers and some notes if any and click Save Changes to confirm the action or Cancel to close the popup.
    • Manage servers.
    • Add server licenses or buy, if only trial product is activated.
    • Remove unused server licenses. Click Remove unused server licenses to delete all server licenses that are not used to activate a server. Do it to reduce your monthly bill as a customer pays per each server license and NOT per an activated server. Confirm the action in the opened popup by clicking Remove or click Cancel to close the popup.
    • Go to Activation Key Details page. To do so, click a specific activation key in the table.

    The table with a list of all CloudLinux OS Activation Keys has the following columns:

    • Activation key — activation key string. Click activation key to go to Activation Key Details page. *IP range — a range of IP addresses for a particular activation key;
    • Note — any information you've added to a particular activation key;
    • Servers (used/limits) — shows how many servers have already been activated with this key (used) and a total number of servers that can be activated with this key (limits).

    The following actions are available:

    • filter keys by server limits — click Server Limits and choose a desired number or unlimited
    • search for an activation key — type a search query and the table will filter a list of keys
    • delete one or several activation keys — tick one or several activation keys or the checkbox in the table header (to select all) and click Bin icon. In the popup, click Remove to confirm the action or Cancel to close popup.

    Note

    Default Activation Key cannot be deleted.

    CloudLinux Activation Key Details Page

    On the CloudLinux OS Activation Keys page click an activation key string in the table to go to CloudLinux Activation Key Details page.

    This page contains the following information:

    • activation key itself is displayed on the blue background; to copy it to clipboard just click it
    • servers (used/limits) — number of servers that have already been activated with this key (used) and a total number of servers that can be registered with this particular key (limits)
    • note — any information you’ve added to this activation key.

    The following actions are available:

    • Edit key. Click Edit Key button. In the opened popup you can change a number of servers that can be activated with this key and enter some notes for your own needs so that you can easily find an activation key when there are a lot of different keys. To apply changes click Save Changes or Cancel to close the popup.

    • Remove key. Click Remove Activation Key button. In the opened popup click Remove to apply changes or Cancel to close the popup.

      Note

      You cannot delete a default activation key.

    Below, there is a table with all servers activated with this activation key.

    The table contains the following columns:

    • Server name — a host name of the server.
    • IP — an IP address of the activated server.
    • Registered — a date when a server was activated. A server sends this information to CLN.
    • Last check-in — a date of last successful server check-in .

    The following actions are available:

    • Filter servers list by date of registration. Click Registered Date and select a date or a period to show servers registered within selected period or date.
    • Search in the list by a specific text. Type a search query in the search field to show specific servers.
    • Remove a server from this activation key. In this case, a server will not be able to use CloudLinux OS anymore. To do that, tick server(s) and click Bin icon above the table.

    KernelCare Activation Keys

    Click KernelCare at the top menu to go to KernelCare Activation Keys page. Here you can see server licenses (used/limits).

    There are two types of KernelCare licenses available: IP-based and key-based. IP-based license can only be used by IP address it is issued to, while key-based licenses can be migrated to another server within the IP range defined for the key.

    Key-based licenses

    Every KernelCare customer gets a default activation key upon license purchase. You can have multiple activation key in your account, however the overall number of licensed servers cannot exceed the number of purchased licenses.

    The following actions are available:

    • Copy a Default Activation Key. Click a key to copy it to a clipboard.
    • Generate a new Activation Key. Click Generate new activation key. In an opened popup specify Server quantity limit, IP range limit, Sticky tag, and add some Notes, if any, and click Save Changes to confirm the action or Cancel to close the popup.
    • Manage servers.
    • Add server licenses.
    • Remove unused server licenses . Click Remove unused server licenses to delete all server licenses that are not used to activate a server. Do it to reduce your monthly bill as a customer pays per each server license and NOT per an activated server. Confirm your action in the opened popup by clicking Remove or click Cancel to close the popup.
    • Go to Activation Key Details page. To do so, click a specific activation key in the table.

    The table with a list of of all KernelCare Activation Keys contains the following columns:

    • Activation key — an activation key string. Click an activation key to go to Activation Key Details page.
    • IP range — a range of IP addresses for a particular activation key;
    • Note — any information you've added to a particular activation key;
    • Servers (used/limits) — shows how many servers have already been activated with this key (used) and a total number of servers that can be activated with this key (limits).

    The following actions are available:

    • filter keys by server limits — click Server Limits and choose a desired number or unlimited;
    • search for an activation key — type a search query and the table will filter a list of keys;
    • delete one or several activation keys — tick one or several activation keys or the checkbox in the table header (to select all) and click Bin icon. In the popup, click Remove to confirm the action or Cancel to close popup.

    Note

    Default Activation Key cannot be deleted.

    KernelCare Activation Key Details Page

    On the KernelCare Activation Keys page click an activation key in the table to go to KernelCare Activation Key Details page.

    This page contains the following information:

    • An activation key itself is displayed on the blue background; to copy it to a clipboard just click it;
    • Servers (used/limits ) — number of servers that have already been activated with this key (used) and a total number of servers that can be registered with this particular key (limits);
    • Note — any information you’ve added to this activation key.
    • Sticky tag — when the Sticky Tag feature is enabled for particular servers, all such servers will get patches only released before the date specified in the Sticky tag field.

    The following actions are available:

    • Edit key. Click Edit Key button. In the opened popup you can change a number of servers that can be activated with this key, change IP range limit, manage sticky tags (see Patch management with CLN portal (Sticky Tag)), and enter some notes. To apply changes click Save Changes or Cancel to close the popup.
    • Remove key. Click Remove Activation Key button to  remove an activation key with all the associated servers. In the opened popup click Remove to apply changes or Cancel to close the popup.

    Note

    You cannot delete a default activation key.

    Below, there is a table with all servers activated with this activation key.

    The table contains the following columns:

    • Server name — a hostname of the server.
    • IP — an IP address of the activated server.
    • Registered — a date when a server was activated. A server sends this information to CLN.
    • Effective Kernel —  a version of kernel used.
    • Last check-in — the date of last successful server check-in.

    The following actions are available:

    • Filter servers list by date of registration. Click Registered Date and select a date or a period to show servers registered within selected period or date.
    • Search in the list by a specific query. Type a search query in the search field to show specific servers.
    • Remove a server from this activation key. In this case, a server will not be able to use KernelCare anymore. To do so, tick server(s) and click Bin icon above the table.

    Patch management with CLN portal (Sticky Tag)

    The best way to handle QA and Production environments is to use Sticky Tag feature of KernelCare activation keys issued from CloudLinux Network (CLN) portal.

    To use this tag, go to CLN portal → KernelCare tab → click a key to edit → click Edit Key.

    You should provide a separate key for each environment and set them to a particular sticky tag which is actually the date to which all the servers in an environment have to be patched.

    The date in Sticky tag field can be any date from May 28, 2018 up to one day before today.

    To use Sticky Tag feature on the servers to be patched, run:

    /usr/bin/kcarectl --set-sticky-patch=KEY
     

    Alternatively, you can do the same by adding STICKY_PATCH=KEY to /etc/sysconfig/kcare/kcare.conf file.

    Warning

    Do not replace the KEY word with the actual KernelCare license key used to register the server.

    When the Sticky Tag feature is enabled for particular servers, all such servers will get patches only released before the date specified in the Sticky tag field.

    This way, you can add new patches to all the servers in some environment (i.e. registered with the same KernelCare license key) by updating only a single field in the CLN portal.

    KernelCare Monitoring

    Find more details in KernelCare documentation

    Imunify360 License Types

    Click Imunify360 at the top menu to go to Imunify360 License Types page.

    Here you can see all available license types, buy and manage them.

    The following license types are available:

    • Single User — good for servers with only one user in the system
    • Up to 30 users — good for servers with users quantity less than 30 or equal
    • Up to 250 users — good for servers with users quantity less than 250 or equal
    • Unlimited — good for servers with users quantity more than 250 To buy desired license type, click Buy server licenses button. You will be redirected to Purchase page.

    A license card includes the following information:

    • Server licenses — activated/limit;
    • Activation key itself. To copy activation key to clipboard, click it.

    The following actions are available to manage a license.

    • Add server license — click Add server license button, you will be redirected to Purchase page.
    • Remove unused server licenses — click Remove unused server licenses to delete all server licenses that are not used to activate a server. Do it to reduce your monthly bill as a customer pays per each server license and NOT per an activated server. Confirm your action in the opened popup by clicking Remove or click Cancel to close the popup.

    Note

    If you have only one license then after the deletion, you will not have any licenses purchased and the product will be deleted from your account.

    Imunify360 Activation Keys

    Click Imunify360 at the top menu, then click Activation Keys on the left menu to go to Imunify360 Activation Keys page.

    Here you can see the table with a list of all Imunify360 Activation Keys. It contains the following columns:

    • Activation key — activation key string. Click activation key to go to Activation Key Details page.
    • License type — a type of Imunify360 license for certain key. See all available license types.
    • IP range — a range of IP addresses for a particular activation key;
    • Note — any information you've added to a particular activation key;
    • Servers (used/limits) — shows how many servers have already been activated with this key (used) and a total number of servers that can be activated with this key (limits).

    The following actions are available:

    • filter keys by server limits — click Server Limits and choose a desired number or unlimited;
    • filter keys by license type — click License Type and tick desired type(s);
    • search for an activation key — type a search query and the table will filter a list of keys;
    • delete one or several activation keys — tick one or several activation keys, or the checkbox in the table header (to select all) and click Bin icon. On the popup click Remove to confirm the action or Cancel to close popup.

    Not

    Default Activation Key cannot be deleted.

    Imunify360 License Type Activation Keys

    Click Imunify360 at the top menu then Activation Keys → desired type of license (Single User, Up to 30 users, Up to 250 users, Unlimited) on the left menu to go to Imunify360 License Type Activation Keys.

    This page contains the following information:

    • An activation key itself is displayed on a blue background; to copy it to a clipboard just click it.
    • Server licenses (used/limits) — shows how many servers have already been activated with this key (used) and a total number of servers that can be activated with this key (limits).

    The following actions are available:

    • Generate a new activation key — click Generate new activation key. Create activation key popup opens. Set number of servers to be activated with this key or tick unlimited. Enter some notes, if any. Click Save Changes to generate a new key or Cancel to close the popup. The new generated key is displayed in the table.
    • Manage servers — click Manage servers button, you will be redirected to Billing → Overview → Products page.
    • Add server licenses — click Add server licenses, you will be redirected to Purchase page.
    • Remove unused server licenses — click Remove unused server licenses to delete all server licenses that are not used to activate a server. Do it to reduce your monthly bill as a customer pays per each server license and NOT per an activated server. Confirm your action in the opened popup by clicking Remove or click Cancel to close the popup.

    Note

    If you have only one license then after the deletion, you will not have any licenses purchased and the product will be deleted from your account.

    Below, there is a table with all activation keys. The table contains the following columns:

    • Activation key — click activation key string to go to Activation Key Details page.
    • License Type — a type of Imunify360 license (Single User, Up to 30 users, Up to 250 users, Unlimited).
    • IP Range — a range of IP addresses for a particular activation key.
    • Note — any notes to a particular activation key.
    • Servers (used/limits) —  a number of servers that have already been activated with this key (used) and a total number of servers that can be registered with this particular key (limits).

    The following actions are available:

    • Filter keys list by server limits. Click Server Limits and specify a number of servers or tick Unlimited.
    • Filter keys list by license type. Click License Type and tick desired types.
    • Search in the list by a specific query. Type a search query in the search field to show specific keys.
    • Remove activation key. Tick key(s) and click Bin icon above the table. The Remove popup opens. Confirm the action by clicking Remove or click Cancel to close the popup.

    Note

    Removing activation key will deactivate the product on connected servers.

    Note

    You cannot delete the default activation key.

    Imunify360 Activation Key Details Page

    On the Imunify360 Activation Keys page click an activation key string in the table to go to Imunify360 Activation Key Details page.

    This page contains the following information:

    • An activation key itself is displayed on a blue background; to copy it to a clipboard just click it;
    • Servers (used/limits) — a number of servers that have already been activated with this key (used) and a total number of servers that can be registered with this particular key (limits);
    • Note — any information you’ve added to this activation key.

    The following actions are available:

    • Edit key. Click Edit Key button. In the opened popup you can change a number of servers that can be activated with this key and enter some notes. To apply changes, click Save Changes or Cancel to close the popup.
    • Remove key. Click Remove Activation Key button. In the opened popup click Remove to apply changes or Cancel to close the popup.

    Note

    • You cannot delete a default activation key.
    • Removing the activation key will deactivate the product on connected servers.

    Below, there is a table with all servers activated with this activation key. The table contains the following columns:

    • Server name — a hostname of the server.
    • IP — an IP address of the activated server.
    • Registered — a date when a server was activated. A server sends this information to CLN.
    • Last check-in — the date of the last successful server check-in.

    The following actions are available:

    • Filter servers list by the date of registration. Click Registered Date and select a date or a period to show servers registered within selected period or date.
    • Search in the list by specific query. Type a search query in the search field to show specific servers.
    • Remove a server from this activation key. In this case, a server will not be protected by Imunify360 anymore. To do that, tick server(s) and click Bin icon above the table.

    Imunify Email Notifications

    Subscription-based customers

    Starting from the 1st of June 2024, you will be billed for the Imunify Email service. Imunify Email costs 10% of your Imunify360 license. The billing will be based on whether the 'enabled' feature for Imunify Email is activated on your CLN account. This 'enabled' state indicates that the Imunify Email product is installed on your server. So, if the feature is turned on, you'll be billed accordingly.

    You can enable Imunify Email on 3 levels:

    1. Account

    • When you enable the feature on an account level, the script will install Imunify Email on all Imunify360 servers in your account in 24 hours. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature on an account level, the script will deactivate the Imunify Email on all Imunify360 servers in your account in 24 hours.
    • There's also a default option called 'depends on lower level'. This allows you to control permissions based on each key or license, rather than for the whole account.
    1. Key

    You can manage permission on a key level. Go to the 'Activation keys' tab and select 'add-ons'.

    You will see this screen:

    • When you enable the feature on all servers in the key, the script will install Imunify Email on all Imunify360 servers under this key in 24 hours. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature on a key level, the script will deactivate the Imunify Email on all Imunify360 servers under this key in your account in 24 hours.
    • There's also a default option called 'depends on lower level'. This allows you to control permissions based on each server.
    1. Server

    You can manage permission on a server level. Go to the 'Servers' tab and select 'add-ons'.

    You will see this pop-up:

    • When you enable the feature, the script will install Imunify Email on this server. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature, the script will deactivate the Imunify Email on a server in 24 hours.

    As a beta tester, you have the feature Imunify Email installed on your servers. We've noticed this and have activated an additional feature related to Imunify Email on all servers where we found it installed. However, you have the flexibility to modify this setting if you wish.

    Usage-based customers

    Starting from the 1st of July 2024, you will be billed for the Imunify Email service for the usage in June. Imunify Email costs 10% of your Imunify360 license. The billing will be based on whether the 'enabled' feature for Imunify Email is activated on your CLN account. This 'enabled' state indicates that the Imunify Email product is installed on your server. So, if the feature is turned on, you'll be billed accordingly.

    You can enable Imunify Email on 3 levels:

    1. Account

    • When you enable the feature on an account level, the script will install Imunify Email on all Imunify360 servers in your account in 24 hours. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature on an account level, the script will deactivate the Imunify Email on all Imunify360 servers in your account in 24 hours.
    • There's also a default option called 'depends on lower level'. This allows you to control permissions based on each key or license, rather than for the whole account.
    1. Key

    You can manage permission on a key level. Go to the 'Activation keys' tab and select 'add-ons'.

    You will see this screen:

    • When you enable the feature on all servers in the key, the script will install Imunify email on all Imunify360 servers under this key in 24 hours. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature on a key level, the script will deactivate the Imunify email on all Imunify360 servers under this key in your account in 24 hours.
    • There's also a default option called 'depends on lower level'. This allows you to control permissions based on each server.
    1. Server/ IP license You can manage permission on a server level. Go to the 'Servers' tab and select 'add-ons'.

    IP Licenses

    You will see this pop-up:

    • When you enable the feature, the script will install Imunify email on this server. You can also run imunify360-agent update-license command to speed up the process.
    • When disabling the feature, the script will deactivate the Imunify email on a server in 24 hours.

    You can also use our API to manage Imunify Email add-on: https://docs.cloudlinux.com/cloudlinux_rest_api.pdf

    As a beta tester, you have the feature Imunify Email installed on your servers. We've noticed this and have activated an additional feature related to Imunify Email on all servers where we found it installed. However, you have the flexibility to modify this setting if you wish.

    ELS Activation Keys

    There are no trials available for the ELS subscription

    CloudLinux Backup

    We regret to inform you that our CL Backup will be reaching its End of Life (EOL) phase soon, effective Oct 1st, 2023. This decision has been made after careful consideration and is in line with our commitment to focus on developing new and innovative solutions for our valued customers.

    Outlined below are important details regarding the EOL process:

    1. End of Sales: As of Jun 2023, we will no longer be accepting new orders for the CL Backup.
    2. Support: We will continue to provide technical support until Sep 30th, 2023. However, after this date, we will no longer be able to offer support for the product.
    3. Make sure that you moved backups to other providers before Sep 30th, 2023.

    Available only if CLoudLinux Backup is purchased and activated.

    Click CL Backup in the main header menu to go to CloudLinux Backup page. Here you can see a table with all your backups for CloudLinux products.

    The table includes the following columns:

    • Server name — a name of the server with backup
    • Server IP —  displays the IP of the server with backup
    • Region —  server location
    • Used, GB — backup space used in GB
    • Total, GB — total backup space in GB
    • Actions:
      • Edit —  click to manage the backup. In the opened popup click Go to the backup management, the backup management application opens in a new tab
      • Resize — click to change the backup space. In the opened popup add or remove the Gbs and click Resize to apply or Cancel to close the popup.
      • Deactivate — click to remove the backup.

      Note

      Backup files cannot be restored after deactivation.

      In the opened popup confirm the action by clicking Remove or click Cancel to close the popup.
      • Relink —  for a backup not associated with a server. Click to connect a backup to a specific server. Confirm the action in the popup or click Cancel to close the popup.

    Servers

    Click Dashboard → Servers to go to All Servers page. A list of all servers with activated products belonged to this account is available.

    The table includes all servers that have been activated in all products within the account. The table contains the following columns:

    • Server name — server hostname;
    • IP — server IP address;
    • Installed products — shows a logo of a product activated on a server.

    Click a server name to show server details:

    • Product and activation key used to register that server
    • Registered — a date when a server was activated. A server sends this information to CLN
    • Last check-in — the last date when a server successfully responded to check-in
    • Effective Kernel — displays the version of kernel used (only for KernelCare). Click the version to go to https://patches.kernelcare.com/
    • Change License Type —  allows to change the type of the Imunify360 license (only for Imunify360). Click Change License Type to open change popup specify a new license type. Confirm the action by clicking Change or click Cancel to close the popup.

    Note

    When you have changed the server license successfully, you need to get a new activation key and activate Imunify360 on the server using CLI command (register). Otherwise, Imunify360 will not be registered and activated, and will not work on the server.

    The following actions are available:

    • Filter by product — click Product button and select one or more products;
    • Filter by date of registration — click Registered date to display a calendar where you can pick a date or a period to filter by.
    • Filter by any search query — type a query. A search is performed in Server name and Activation key entities.
    • Buy server license — click Buy Server Licenses button, you will be redirected to the Purchase page.

    Server groups

    The Server groups feature allows you to add servers in one group and perform global actions on this group (and thereby on all servers included in this group).

    How to create a group

    • Go to Servers and select a required product, then click Manage server groups

    • Click Create your first group or Create new group

    • Type a group name and description if needed

    • Then click Save to apply changes or click Cancel to close the popup.

    • Close the popup.

    How to remove a group

    • Go to Servers and click Manage server groups

    • Select a group and click Bin ()

    • When the group is removed you can close the popup

    How to add a server to a group

    • Go to Servers and select a required product. Click in the Group column.

    • Choose a group from the list or create a new one by typing its name

    • Click Add to group to apply changes or click Cancel to close the popup

    • You will see that the server is added to the group

    • Or for group action, select servers in the list and click Add to server group.

    How to remove a server from a group

    • Go to Servers and click Manage server groups

    • Scroll to Servers and click for a server to be removed from the group

    • Then click Save to apply changes or click Cancel to close the popup

    • Close the popup

    How to move a server from one group to another

    • Go to Servers, select server(s) in the list and click Add to server group

    • Choose a group or create a new one and click Add to group

    • The server(s) will be moved to another group

    AccelerateWP Features Management for Regular Customers

    The Accelerate WP Premium and CDN permission management will help you enable/ disable Premium and CDN features on certain servers. In cases where hosting users have root access to the server (e.g. VPS users), this permission ensures the license holder retains control over access to billable features.

    Default state for Cloudlinux OS editions:

    • Solo, Admin - disabled
    • Pro - enabled

    For managing these features via CLN:

    1. Login to the CLN account

    2. Go to the 'CloudLinux' tab

    1. Press a key when you want to enable/ disable Premium or CDN

    2. Press Edit key

    1. Choose new permissions

    1. Save permissions

    Permission will apply to all registered under these key servers.

    - + diff --git a/cln/index.html b/cln/index.html index 729d5dbc..3994cec8 100644 --- a/cln/index.html +++ b/cln/index.html @@ -51,10 +51,10 @@ })(); - +
    - + diff --git a/cln/introduction/index.html b/cln/introduction/index.html index 7003bc31..994bb749 100644 --- a/cln/introduction/index.html +++ b/cln/introduction/index.html @@ -51,10 +51,10 @@ })(); Introduction - +
    sidebar hamburger menu

    Introduction

    CLN stands for CloudLinux Network and is designed to easily manage your licenses of CloudLinux products and services by means of a user-friendly interface.

    The following are available in CLN:

    • Add, delete and edit licenses
    • Add, delete and edit servers
    • Choose payment methods and buy licenses
    • Track all the associated costs

    Note

    In your CLN account you can only see the licenses purchased directly from CloudLinux, not from the license resellers.

    Create new account

    If you are a first time user, go to https://cln.cloudlinux.com/console/register/customer and fill in the simple registration form to create your account. You will find your login and password in your welcome email. After you confirm your email, you can log in to the CLN.

    Log in

    Go to https://cln.cloudlinux.com/console/auth/login and sign in with your credentials.

    Server License Check

    This server license check tool allows you to check your server license status without entering to the CLN UI. Go to https://cln.cloudlinux.com/console/check-license. Specify server IP address and click Check server license.

    Note

    Server License Check does not require signing in to the CLN portal - it is available for everyone.

    - + diff --git a/cln/payment_methods/index.html b/cln/payment_methods/index.html index 33cb002f..138ca800 100644 --- a/cln/payment_methods/index.html +++ b/cln/payment_methods/index.html @@ -51,10 +51,10 @@ })(); Payment methods - +
    sidebar hamburger menu

    Payment methods

    Note

    Only one payment method can be active in a single CLN account at a time.

    Billing Information

    Click Billing → Payment Methods → Billing Information to go to Billing Information page.

    Here you can specify an email address for invoices. Specify an email and click Save. All invoices and notifications will be sent to this email. You can change it anytime. If you didn’t specify any email, billing information and invoices are available only in the CLN UI. You can download an invoice on the Billing → Invoices page.

    Payment Method

    Click Billing → Payment Methods → Payment Method to go to Payment Method page. Here you can specify a desired payment method.

    The following methods are available:

    • Credit or Debit Card
    • PayPal

    Note

    Only one payment method can be active in a single CLN account at a time.

    Credit or Debit Card

    Click Add a debit or credit card, specify Payment Method Information. Click Add Payment Method to save changes or Cancel to return to Payment Method page. To edit added debit or credit card, click Pencil icon; to remove, click Bin icon.

    PayPal

    Click Add a PayPal account to connect to your PayPal account. You will be redirected to https://www.paypal.com. Proceed further with PayPal instructions.

    Note

    Contact the Billing team by clicking the Contact Support link at the footer of this page for to inquire about other ways to pay your invoices.

    - + diff --git a/cln/purchase/index.html b/cln/purchase/index.html index 682cd91f..7dbbd1bf 100644 --- a/cln/purchase/index.html +++ b/cln/purchase/index.html @@ -51,10 +51,10 @@ })(); Purchase - +
    sidebar hamburger menu

    Purchase

    On the Purchase page, you can buy new CloudLinux, KernelCare, Imunify360 or ELS licenses and pay for your current licenses to continue using the products on your servers.

    You cannot purchase both monthly and yearly licenses for the same product in a single account.

    To pay your total due, click Pay Now. The Select payment method popup opens. Select desired payment method and proceed with the instructions on the screen.

    CloudLinux

    Note

    Information given in this section applies to all licenses of CloudLinux OS family (e.g. CloudLinux OS Shared PRO)

    To buy new CloudLinux license(s) go to Billing → Purchase. Here you can see the number of your Server Licenses (used/limits).

    Specify the number of server licenses and choose Payment method (monthly or yearly). Your current price is displayed on the right side. The prices depend on the number of server licenses that you already have (or will have after the purchase). The bigger the number of server licenses, the lower the price. Then click Add to Cart. This will activate Cart menu in the top right corner of the page. To complete your purchase, click Cart icon, you will be redirected to the Cart page. To remove a purchase from the cart, click Remove From Cart button.

    CloudLinux OS Shared PRO

    If you need to purchase CloudLinux OS Shared PRO licenses, you need to upgrade your CLN account into CloudLinux OS Shared PRO type:

    Note

    All CloudLinux OS licenses in your CLN account are automatically upgraded to CloudLinux OS Shared PRO if you perform the account type upgrade.

    You can revert the account type to non CloudLinux OS Shared PRO anytime by clicking the link in the same box.

    KernelCare

    Note

    Information given in this section applies to all licenses of KernelCare family (e.g. KernelCare+, KernelCare Enterprise)

    To buy new KernelCare license(s) go to Billing → Purchase. Here you can see the number of your Server Licenses (used/limits).

    Specify the number of server licenses and choose Payment method (monthly or yearly). Your current price is displayed on the right side. The prices depend on the number of server licenses that you already have (or will have after the purchase). The bigger the number of server licenses, the lower the price.

    Then click Add to Cart . This will activate Cart menu in the top right corner of the page. To complete your purchase, click Cart icon, you will be redirected to the Cart page. To remove a purchase from the cart, click Remove From Cart button.

    Imunify360

    To buy new Imunify360 license(s) go to Billing → Purchase. Here you can see the number of your Server Licenses (used/limits).

    Specify the number of server licenses for each License Type (Single User, Up to 30 users, Up to 250 users, Unlimited) and choose Payment method (monthly or yearly). Your current price is displayed on the right side. The prices depend on the number of server licenses that you already have (or will have after the purchase). The bigger the number of server licenses, the lower the price.

    Then click Add to Cart. This will activate Cart menu in the top right corner of the page. To complete your purchase, click Cart icon, you will be redirected to the Cart page. To remove a purchase from the cart, click Remove From Cart button.

    ELS

    Note

    Information given in this section applies to all licenses of ELS family (e.g. ELS for CentOS, ELS for Oracle Linux, ELS for Ubuntu)

    To buy new ELS license(s) go to Billing → Purchase. Here you can see the number of your Server Licenses (used/limits).

    Specify the number of server licenses and choose Payment method (monthly or yearly). Your current price is displayed on the right side. The prices depend on the number of server licenses that you already have (or will have after the purchase). The bigger the number of server licenses, the lower the price.

    Then click Add to Cart . This will activate Cart menu in the top right corner of the page. To complete your purchase, click Cart icon, you will be redirected to the Cart page. To remove a purchase from the cart, click Remove From Cart button.

    Cart

    When you have added some products to a cart, Cart menu in the top right corner of the page is activated. To complete a purchase click Cart icon. You will be redirected to a Cart page, where you can see your Total Due and Due Date and all products you’ve added to cart.

    To pay for all purchased products, click Pay Now button. Please proceed with the instructions on the screen to complete the purchase.

    The Cart Table contains the following columns:

    • Product — a name of a purchased product
    • Number of server licenses — how many licenses you've bought
    • Price — the price for one product license
    • Payment plan — selected payment plan
    • Total amount — the total amount of money you should pay for the selected number of licenses
    • Actions — you can remove an item from the cart. Click Bin icon and proceed with confirming your action
    - + diff --git a/cln/shared/faq/index.html b/cln/shared/faq/index.html index abd6b6c9..63289732 100644 --- a/cln/shared/faq/index.html +++ b/cln/shared/faq/index.html @@ -51,10 +51,10 @@ })(); FAQ - +
    sidebar hamburger menu

    FAQ

    What is the CloudLinux subsystem on Ubuntu?

    CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. The main goal of this subsystem is to allow operating the already existed CloudLinux functionality on another OS.

    How to install the CloudLinux subsystem on Ubuntu?

    See Installation.

    Is the CloudLinux subsystem on Ubuntu paid/unpaid?

    During the beta period it is free.

    Can I get the ISO for the CloudLinux subsystem on Ubuntu?

    As of now, only installation via ubuntu2cloudlinux.py is available.

    What control panel can be used with the CloudLinux subsystem on Ubuntu?

    As of now, only cPanel is supported. Plesk and DirectAdmin are not supported.

    How can I get support for my CloudLinux subsystem on Ubuntu servers?

    Feel free to contact Support via Support Portal.

    Can I use Docker with the CloudLinux subsystem on Ubuntu?

    You cannot use Docker with the CloudLinux subsystem on Ubuntu in the current version.

    Is control panel integration functionality available in the current release?

    Yes, it is available.

    How to set up a PHP-fpm handler for the domain?

    Since the PHP-fpm handler is required to use AccelerateWP, you may need to configure it manually.

    These are configuration steps:

    1. Ensure the PHP-fpm package for the current PHP version is installed or install it.

      • Via MultiPHP Manager
    2. Enable PHP-fpm handler for domain via MultiPHP Manager

    - + diff --git a/cln/shared/features/index.html b/cln/shared/features/index.html index 3f64ee74..ce1079b6 100644 --- a/cln/shared/features/index.html +++ b/cln/shared/features/index.html @@ -51,7 +51,7 @@ })(); Features - +
    sidebar hamburger menu

    Features

    Below, you can find the list of supported features with the links to the documentation available.

    LVE limits

    Inode limits

    The documentation is available here.

    Reseller limits

    The documentation is available here.

    MySQL Governor

    MySQL Governor is software to monitor and restrict MySQL usage in a shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread.

    MySQL Governor can also kill off slow SELECT queries.

    MySQL Governor has multiple modes of operations, depending on the configuration. It can work in monitor-only mode, or it can use different throttling scenarios.

    MySQL Governor allows restricting customers who use too many resources. It supports following limits:

    CPU%CPU speed relative to one core. 150% would mean one and a half cores
    READbytesbytes read. Cached reads are not counted, only those that were actually read from disk will be counted
    WRITEbytesbytes written. Cached writes are not counted, only once data is written to disk, it is counted

    You can set different limits for different periods: current, short, med, long. By default those periods are defined as 1 second, 5 seconds, 1 minute and 5 minutes. They can be re-defined using the configuration file. The idea is to use larger acceptable values for shorter periods. Like you could allow a customer to use two cores (200%) for one second, but only 1 core (on average) for 1 minute, and only 70% within 5 minutes. That would make sure that customer can burst for short periods of time.

    When a customer is restricted, the customer will be placed into special LVE with ID 3. All restricted customers will be placed into that LVE, and you can control the amount of resources available to restricted customers. Restricted customers will also be limited to only 30 concurrent connections. This is done so they wouldn't use up all the MySQL connections to the server.

    Installation

    Attention!

    MySQL Governor on Ubuntu supports the following only:

    • cl-MySQL80 on non-panel system
    • cl-MySQL80 on cPanel
    • cl-MariaDB103 on non-panel system
    1. Install MySQL Governor
    apt  install governor-mysql
    @@ -88,6 +88,6 @@
     

    Uninstall procedure for servers with no panel:

    /usr/bin/switch_mod_lsapi --uninstall
     apt remove liblsapi liblsapi-dev mod-lsapi
     
    - + diff --git a/cln/spacewalk/regular.html b/cln/spacewalk/regular.html index ec60036d..01e4e833 100644 --- a/cln/spacewalk/regular.html +++ b/cln/spacewalk/regular.html @@ -51,10 +51,10 @@ })(); - +
    sidebar hamburger menu

    CloudLinux Spacewalk

    Spacewalk is an open-source systems management solution for system provisioning, patching, and configuration.

    If a user bought a license directly via CLN UI (not via vendors), he can use Spacewalk to manage his servers when they have been activated with the activation key.

    To get to Spacewalk, go to CloudLinux OS → Activation Keys. On the left sidebar menu click Open Servers panel, the CloudLinux Spacewalk application opens in a new tab.

    /images/clnuispacewalk_zoom70.png)

    - + diff --git a/cln/spacewalk/reseller.html b/cln/spacewalk/reseller.html index 4e5152b9..e05eaf84 100644 --- a/cln/spacewalk/reseller.html +++ b/cln/spacewalk/reseller.html @@ -51,10 +51,10 @@ })(); - +
    sidebar hamburger menu

    Server Accounts and Spacewalk Account Management

    To manage accounts using Spacewalk system via CLN UI, click CloudLinux OS at the top menu and then click Server accounts on the left sidebar.

    /images/clnserveraccounts_zoom60.png)

    The following data is available:

    • Total licenses on account — a total number of CloudLinux licenses on this account
    • Unused licenses — number of licenses with no server attached
    • License cost —  the cost of licenses per month

    The table contains the following information:

    • Login — Spacewalk server account login
    • First name — server owner first name
    • Last name — server owner last name
    • Company — server company-owner name
    • Email
    • Limited/used — total/used number of licenses
    • Actions

    The following actions are available:

    • Add server account. To do so, click Add account. The Add server account popup opens.

      /images/clnaddserveracc_zoom90.png)

      Fill in the form and click Add Account to complete the action or Cancel to close the popup.

    • Edit server account. To do so, click /images/clnedit.png). Edit server account popup opens. To save changes, click Save account or click Cancel to close the popup.

    • Remove server account. To do so, click /images/clnremove.png). Remove account popup opens. To confirm removing, click Remove account or click Cancel to close the popup.

    • View server account details. To do so, click server login in the Login column, the server account details page opens.

      /images/clnserveraccinfo_zoom60.png)

    The following data is available:

    • System 0/0 — limit and used
    • Email
    • Name — a name of server owner
    • Company — company-owner name

    The table contains the following information:

    • Token — a unique identifier for a key
    • Created — the token (key) creation date
    • Usage — number of servers registered on this key
    • Actions

    The following actions are available:

    • Create key. To do so, click Create key button. A created key will be added to the table automatically without any notification.
    • Remove key. To do so, click /images/clnremove.png). Key removing popup opens. Confirm the action by clicking Remove or click Cancel to close the popup.
    - + diff --git a/cln/terminology/index.html b/cln/terminology/index.html index 16f797f5..696fe0dc 100644 --- a/cln/terminology/index.html +++ b/cln/terminology/index.html @@ -51,10 +51,10 @@ })(); Terminology - +
    sidebar hamburger menu

    Terminology

    • Check-in — is an event when the server with the installed product pings CLN and sends the information about its availability and state.
    • Default Activation Key — it is a general activation key displayed all over CLN interface for quick access to it.
    • IP Range — it is a range of IP addresses that are allowed for a particular activation key. Servers with IPs that are not in the range will not be activated with this activation key.
    • Server License — this is a product license that allows to activate it on the servers. For example, 3 server license means it is possible to active one copy of product on one server.
    • Server Limits — a number of servers that can be registered with a particular key.
    • License Type — a type of server license that is used in Imunify360 and determines a limit of  server users. Among other products, Imunify360 has different types of server licenses:
      • Single User — good for servers with only one user in the system;
      • Up to 30 users — good for servers with users quantity less than or equal to 30;
      • Up to 250 users — good for servers with users quantity less than or equal to 250;
      • Unlimited — good for servers with any quantity of users (more than 250).
    • User —  a registered user on the installed server:
      • For cPanel, Plesk, and DirectAdmin hosting panels it calculates the number of users in it, excluding system users.
      • For more details on user count calculation see the following article.
    - + diff --git a/cln/whmcs_advantage/index.html b/cln/whmcs_advantage/index.html index a8c018c7..2c282494 100644 --- a/cln/whmcs_advantage/index.html +++ b/cln/whmcs_advantage/index.html @@ -51,7 +51,7 @@ })(); CloudLinux Advantage - +
    sidebar hamburger menu

    CloudLinux Advantage

    Overview

    CloudLinux Advantage for WHMCS automatically configures "Configurable options" that can be linked to the Product/Service.

    When a client orders/upgrade a configurable option, a request will be sent to the server to change the CloudLinux features status.

    Installation and Configuration

    Installation and Update

    1. Your WHMCS must be properly configured to work with cron because sending requests to the server is sent by cron. How to setting up the cron.
    2. Plesk requires the installation of an additional extension.
    3. Download archive https://repo.cloudlinux.com/plugins/whmcs-cl-advantage-plugin-latest.zip
    wget -q https://repo.cloudlinux.com/plugins/whmcs-cl-advantage-plugin-latest.zip
    @@ -61,6 +61,6 @@
     
    1. Activate
    /usr/sbin/plesk bin extension --enable accelerate-wp
     

    Deinstallation

    /usr/sbin/plesk bin extension -u accelerate-wp
     

    End user workflow

    How to update an existing order (service)

    1. Open the services page through the menu "Services - My services"
    2. Choose the service you need
    3. Select the action "Upgrade/Downgrade Options"
    4. Choose a new configuration and place an order
    5. Changes will occur automatically after 1 minute or after confirmation of the order by the service provider

    How to checkout new order

    1. Select a service in the service provider's WHMCS portal
    2. A service with AccelerateWP enabled will display options to enable them
    3. Changes will occur automatically after 1 minute or after confirmation of the order by the service provider
    4. After purchase, you need to manually activate the modules in the AccelerateWP panel

    Changelog

    • 0.0.3

      • Added the ability to purchase MyImunify - Account protection
      • Add the ability to bulk send the statuses of custom options "MyImunify - Account protection" to the servers
    • 0.0.2

      • Module renamed from Accelerate WP to CloudLinux Advantage
      • Added the ability to purchase AccelerateWP CDN
      • Improved display of service and server names on the AccelerateWP module page
      • Added the ability to hide suites on the update options page
      • Changed "m" parameter in provisioning link (upgrade url) from accelerate_wp to cloudlinux_advantage
    • 0.0.1

      • Beta release

    Requirements

    • 0.0.3

      • Imunify360 ^7.4.0
    • 0.0.2

      • WHMCS ^8.0
      • accelerate-wp-1.5-1
    • 0.0.1

      • WHMCS ^8.0
      • accelerate-wp-1.3-2
    - + diff --git a/cln/whmcs_plugin/index.html b/cln/whmcs_plugin/index.html index 18fed8e8..8e677aec 100644 --- a/cln/whmcs_plugin/index.html +++ b/cln/whmcs_plugin/index.html @@ -51,11 +51,11 @@ })(); CloudLinux WHMCS Plugin - +
    sidebar hamburger menu

    CloudLinux WHMCS Plugin

    Overview

    CloudLinux Licenses For WHMCS allows you to automatically provision CloudLinux, Imunify360, and KernelCare licenses along with selected products. You can provision them for free or as a paid add-on to your product. Owing to CloudLinux Licenses add-on, all module commands on your main product are automatically reproduced on the license product.

    Admin Area Functionality

    • Create license
    • Terminate license
    • Suspend/Unsuspend license (only IP-based licenses)
    • Change license IP address
    • View license details

    Client Area Functionality

    • View license details
    • Change license IP address

    Addon Functionality

    • Manage relations between addon and license product
    • Manage relations between server and license product
    • Manage relations between configurable options and license product
    • Automatically add license product to order when relation is triggered
    • View existing license
    • Dependencies between module actions – every action: Create, Terminate, Suspend or Unsuspend called on the server product will result with the same action performed on the licensed products
    • Flexible filtering of existing licenses

    Additionally

    • Multi-Language Support – only provisioning module
    • Supports CloudLinux, KernelCare and Imunify360 Licenses (does not support CloudLinux Pro licenses, it should be supported soon in 2023)
    • Supports WHMCS V6 and later

    Installation and Configuration

    In this section we will show you how to set up our products.

    Installation and Update

    1. Download CloudLinux Licenses For WHMCS:
    2. Upload archive to your WHMCS root folder and extract it. Files should automatically jump into their places.
    3. Run the following script:
    php <whmcs_root>/clDeploy.php --migrate
     

    Note

    If your hosting requires specific files permissions, change them accordingly in the folder: <whmcs_root>/modules/servers/CloudLinuxLicenses

    Configuration of Product

    1. Log into your WHMCS admin area and go to Setup → Products/Services → Products/Services. Click Create a New Group
    2. Fill Product Group Name (product group will be visible under that name in your WHMCS system) and click Save Changes
    3. Click Create a New Product. Choose Other from Product Type drop-down menu and previously created product group from Product Group drop-down menu.
    4. Fill Product Name and click Continue.
    5. Set up this product as hidden through marking Hidden checkbox at Details tab. Do not set up pricing for this product, it will be done in another way.
    6. Go to the Module Settings tab and select CloudLinux Licenses from Module Name drop-down.
    7. Fill Username and Password with your CloudLinux API access details (you can find them on your CLN profile page, username is your login and password is API secret key) and select Imunify360 from Product drop-down, then choose desired License Type. If you'd like to use key based licenses, tick Create Key based license checkbox.
    8. Click Save Changes to confirm.
    9. If you want to use a custom field to get the correct IP during order, you can fill the Name of the custom IP field and add a custom field with the same name to the main product. For example:
      • linked CloudLinuxLicenses product
      • main product
    10. Setup desired Auto-setup options.

    Notes

    • You can use the CloudLinux license module as an individual product. By default, for IP license the client’s IP address is used on ordering, after ordering you can change the license IP to a desired one in the service settings (as administrator or user).
    • To create CloudLinux OS Shared PRO licenses you should have an appropriate CLN account and use the same CloudLinux in the product module settings.
    • Products with KernelCare+ can create only IP based licenses.

    Configuration of Add-on

    1. Go to Setup → Add-on Modules, find CloudLinux Licenses Add-on and click Activate next to it.
    2. The next step is permitting access to this module. Click Configure, select admin roles and confirm by clicking Save Changes.

    Fig 1: Imunify360 License For WHMCS provisioning module configuration.

    Fig 2: Imunify360 License For WHMCS add-on module main page.

    Management

    In this section you can find two ways of linking license product with your server product as well as other possibilities of the module.

    In order to allow your client to decide whether he wants to order a server with or without the license, we will use Product Add-on. In this way, when the client orders an add-on, the relation will be triggered and the license product will be ordered along with the module.

    The following steps must be performed to prepare such connection:

    1. Go to Setup → Products/Services → Products Add-ons and click Add New Add-on.
    2. Fill addon name, set up billing cycle and price. Then tick Show on Order checkbox, assign add-on to the product and click Save Changes.

    Fig 3: Configuration of product add-on, which will trigger license product adding.

    1. Go to Add-ons → CloudLinux Licenses Add-on → Add-on Relations and click Add Relation.
    2. Select previously created product add-on and license product as shown below and click Add Relation.

    Fig 4: Creating relation between product add-on and provisioning module.

    If you want to offer server along with the license, perform the following steps.

    Note

    Please do not set up pricing for license provisioning product. In exchange, you can increase a price for server provisioning product.

    1. Prepare license provisioning product as described in the Configuration of Product section of this documentation.
    2. Go to Add-ons → CloudLinux Licenses Add-on → Products Relations and click Add Relation.
    3. Select server provisioning product from the Main product drop-down list and license provisioning product from the Linked Product With License and click Add Relation.

    Fig 5: Creating relations directly between server and license provisioning modules.

    In order to allow your client to decide whether he wants to order server with or without license we can use Configurable Options ( https://docs.whmcs.com/Addons_and_Configurable_Options).

    Below we will show what steps to proceed to prepare such connection:

    1. Configure CloudLinuxLicenses product as described here.
    2. Go to Setup → Products/Services → Configurable Options and click Create a New Group.
    3. Fill group name and add New Configurable Option, set up billing cycle, price and option type. Then save changes.
    4. Go to Add-ons → CloudLinux Licenses Add-on → Configurable Options Relations and click Add Relation.
    5. Choose appropriate configurable option and license product which it is assigned to and click Add relation.

    Notes

    • Plugin doesn’t support “quantity” type of Configurable Options
    • A related product can’t contain two (or more) products with the same license type
    • If you have changed Dedicated IP of the main product, then each related IP-based product will terminate an old IP license and create a new one for a new IP

    Fig 6: Creating relation directly between server and license provisioning modules.

    [for WHMCS 7.2.x and newer]

    WHMCS 7.2 introduces the ability to associate Product Add-ons with Provisioning Modules.

    In order to allow your client to decide whether he wants to order server with or without license we will use product addon. Below we will show you what steps to proceed to prepare such connection:

    1. Go to Setup → Products/Services → Products Add-ons and click Add New Add-on.
    2. Fill add-on name, set up billing cycle and price. Then tick Show on Order checkbox, assign add-on to product.
    3. Go to the Module Settings tab and select CloudLinux Licenses from Module Name drop-down.
    4. Fill Username and Password with your CloudLinux API access (API secret key) details and select desired license type from License Type drop-down. Click Save Changes to confirm.

    Fig 7: Configuration of product add-on with Provisioning Modules.

    CloudLinux OS Key Licenses

    1. To set CloudLinux OS Key license while adding service in Module Settings do the following:
    • choose CloudLinux in License Type drop-down;
    • mark Use Key (instead of IP address) checkbox;
    • enter IP registration token (API secret key) from Profile page in CLN;
    • in Key Limit field enter the number of servers and click Save Changes;
    • the License Key Custom Field will be automatically added.

    KernelCare Key Licenses

    1. To set KernelCare Key license while adding service in Module Settings do the following:
    • choose KernelCare in License Type drop-down;
    • mark Use Key (instead of IP address) checkbox;
    • enter IP registration token (API secret key) from Profile page in CLN;
    • in Key Limit field enter the number of servers and click Save Changes;
    Fig 8.2: Setup KernelCare License.
    • the License Key Custom Field will be automatically added.
    Fig 9.2: License Key Custom Field is displayed while editing service.

    Imunify360 Key Licenses

    1. To set Imunify360 Key license while adding service in Module Settings, do the following:

      • choose Imunify360 in License Type drop-down
      • mark Use Key (instead of IP address) checkbox
      • enter IP registration token (API secret key) from Profile page in CLN
      • in Max Users field enter the number of users per server
      • in Key Limit field enter the number of servers and click Save Changes

    Fig 8.3: Imunify360 Product settings.

    • the License Key Custom Field will be automatically added
    • the License Key Custom Field is displayed while editing service

    Updating a service

    • when Service Created Successfully message appears, you can edit Service
    • enter information and settings and click Save Changes

    Fig 9.3: Imunify360 Service settings.

    Order

    All the services registered in the account are displayed in My Products & Services area. When you choose a particular Product/Service and click View Details, you can view Product information, change license key, view Add-ons or make changes in Management Actions section.

    Fig 10.1: Client’s products list.

    Fig 11: Licenses details.

    To order and purchase a new service do the following:

    • choose Category → Imunify360 Group and click Order Now on a particular service

    Fig 12: Order - Products group.

    • choose Billing Cycle if possible
    • enter information in Configure Server area
    • choose Available Add-ons and click Continue Shopping to proceed or Checkout to view service details

    Fig 13: Order - Configure product.

    • enter Promotional Code in a specific field if you have one
    • choose Payment Method and click Continue Shopping

    Fig 14: Order - review and checkout.

    Admin Area

    From the admin area it is possible to command such actions as create, terminate, suspend/unsuspend and change IP address. Nonetheless, these actions can be ordered only on the server provisioning module and will be automatically reproduced for the license provisioning product.

    Only change IP address functionality have to be ordered manually.

    You can also view the details of created license.

    Fig 15: Imunify360 Licenses For WHMCS admin area.

    Client Area

    The clients are also able to view their servers license details. And as well as you, they are able to change IP address of their licenses.

    Fig 16: Imunify360 Licenses For WHMCS Client Area.

    To change IP address, click Change as shown on the screen above. Then specify IP address and click Save.

    Fig 17: Changing License IP Address.

    Licenses List

    You can view the list of all licenses owned by your client at our add-on → Licenses List. You can filter the list of licenses by client name, server provisioning products, license provisioning products and license IP address/Key.

    Fig 18: Licenses List.

    Add-on Licenses List

    [for WHMCS 7.2.x and newer]

    You can view list of all product add-on with Provisioning Modules licenses owned by your client at our addon → Licenses List.

    Fig 19: Add-on Licenses List.

    Common Problems

    After activating the server provisioning product, license provisioning product bounded to it is still pending.

    Reason: License IP address may be already taken. Solution: Change server IP address.

    Note

    Currently, only key-based licenses are available for Imunify360. Support of IP-based licenses will be added soon.

    - + diff --git a/cln/wpos-plugin/index.html b/cln/wpos-plugin/index.html index 58f88a05..57d8ec86 100644 --- a/cln/wpos-plugin/index.html +++ b/cln/wpos-plugin/index.html @@ -51,10 +51,10 @@ })(); AccelerateWP - +
    sidebar hamburger menu

    AccelerateWP

    Overview

    AccelerateWP is a complex solution to help customers increase their WordPress site performance. With AccelerateWP you can manage optimization features, like object caching, CSS and JavaScript preprocessing and website preloading.

    In order to start using AccelerateWP, go to the cPanel interface and find the AccelerateWP application in the Software section.

    If you use Plesk control panel, (1) trigger the side panel and (2) choose the AccelerateWP widget.

    If you use DirectAdmin control panel, hover over the main menu and choose the AccelerateWP in the Extra Features group.

    Click the application button and get into the AccelerateWP interface.

    Each row in the table is the WordPress website that was found on server and each column is the optimization feature.

    AccelerateWP is built as advice-driven plugin: the feature is suggested to be enabled once the Smart Advice is issued. Smart advice may be issued during profiling a website with X-Ray. X-Ray PHP profiler detects concrete bottlenecks in website performance and thus is able to select a best suited optimization feature to increase it significantly.

    Use the Advice available link to check advice details and click the Apply advice button to activate the feature.

    After a couple of minutes, the feature will be activated and advice becomes Applied. Close the window and see Active link in the corresponding cell of the table.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    AccelerateWP feature: WordPress optimization plugin

    AccelerateWP is a base feature that provides full page caching, GZIP compression and some other useful optimizations.

    In order to start working with AccelerateWP feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP column.

    And click the "Apply advice" button to activate the AccelerateWP feature.

    After a couple of minutes, the plugin will be installed. Login into the WordPress Admin and find the AccelerateWP in the list of active plugins.

    Page caching will be enabled by default. Click the "Settings" link below the plugin name to configure additional options.

    Limitations

    • Website must use PHP version 7.3 or higher.
    • WordPress version must be 5.8 and higher.
    • Other WordPress Caching plugins must not be installed.
    • WordPress should not run in Multisite mode.

    Note

    Some AccelerateWP functions depend on external services. For the functions to work properly, the following URLs and IPs need to be allowed at all security levels:

    • https://awp-saas.cloudlinux.com
    • 213.239.192.204

    AccelerateWP feature additional options

    Find more additional options in WordPress admin page.

    Mobile caching

    Use it only if you website is adapted to use on smartphones and mobile phones.

    Separate cache files for mobile devices. In this case the content for mobile devices will be cached into different cache file as for desktop\tablets.

    This option is necessary if you have some functionality only for mobile devices, not for desktop\tablets.

    The following diagram helps you understand if you need mobile caching.

    Note

    If you use an additional layer of Cache (Varnish, NGINX , etc.) make sure it can distinguish between desktop and mobile visitors.

    User Cache

    It is recommended to use such an option when your website has a unique content for each logged-in user. If the user is not logged-in, a common site cache will be used, otherwise each logged-in user’s content will be cached separately.

    File Optimization

    File Optimization consists of Minification and file Combining.

    Minification is the process of minimizing code in your web pages and script files. Webmasters look at minification as a primary method of reducing website load times via the bandwidth they use.

    Minification also reduces JS, CSS and HTML files. The goal is removing comments and extra spaces. It crunches variables that minimize code and ultimately reduces the file size.

    After minification, the file still functions as it should. The difference is a reduction in bandwidth due to network requests.

    By combining CSS & JS files, HTTP/1 does not allow multiple requests from the same TCP connection between a host server and a web browser.

    Putting CSS and JS files into their respective groups, makes requests for downloads from a browser safe and more efficient. The old way meant multiple connections that took up bandwidth.

    File (CSS & JS) combining is not necessary for HTTP/2 (see https://webspeedtools.com/should-i-combine-css-js/)

    HTTP/2 introduced multiplexing. Now, the browser can send unlimited number of requests to the server, then download all files simultaneously with only one TCP connection.

    Consequently, HTTP/2 takes care of multiple TCP connections and the waiting time before each download. In one sense, consolidating CSS and JS files might be unnecessary.

    To verify which HTTP version is used for requests on your site, you can use https://tools.keycdn.com/http2-test

    CSS Files

    Minify CSS

    Minify CSS reduces file sizes by taking out white space and comments embedded in the code.

    Combine CSS

    Combine CSS reduces HTTP requests by merging all your files into one. Combine CSS is not recommended if your site uses HTTP/2.

    Excluded CSS Files

    To single out those CSS files that should not be minimized, list the URLs attached to the CSS files that should be excluded from minification and concatenation (one per line).

    Caution!

    Minification removes the domain from the URL.

    To prevent that, use (. *).CSS wildcards to exclude all files in a specific location.

    3rd Party: when excluding external CSS files, use the domain or the full URL path.

    JavaScript Files

    Minify javascript files

    Minify JavaScript removes whitespace and comments to reduce the file size.

    Combine JavaScripts files

    This option will be active only if you choose Minify javascript files. It is not recommended for HTTP2.

    Load JavaScript deferred

    One major cause of slow web pages is a so-called blocking script: https://www.dummies.com/web-design-development/javascript/deferred-loading-with-javascript/ .

    Loading JavaScript called a blocking script blocks the webpage from loading.

    Using the defer attribute alerts the browser not to wait for the script. Things will continue as usual per the build HTML and DOM processes. Quietly, the script rests in the background, then runs once the DOM is built.

    So, the Load JavaScript deferred option adds to each script tag the defer attribute.

    Delay JavaScript Execution

    This option helps to decrease the page load time by delaying loading of all JavaScripts on the page. This option can be applied only for already cached pages, it is incompatible with the Combine JavaScripts files option.

    Media

    LazyLoad

    LazyLoad affects the page in the next way - if the user opens the page for the first loading there will be only first displayed (visible to user) images, others will be loaded if the user scrolls down. Images added via CSS file, the <style> tag or via Elementor will not be affected by the LazyLoad.

    The following options allows working with LazyLoad

    • Enable LazyLoad for images
    • Enable for CSS background images
    • Enable LazyLoad for iframes and videos
    • Excluded images or iframes

    Image Dimensions

    Add Missing Image Dimensions

    Correct image dimensions help the browser to recognize page structure without delays, because the browser knows how much space is needed for the image.

    Cases when image will not be affected by the Add Missing Image Dimensions:

    • Images which have any attribute with name containing *height* or *width*
    • Images which are part of the <picture> tag
    • SVG images
    • Image from external domains

    Preload

    Preload Cache

    Usually, a page cache is created when this page is first visited. You can activate the preload page cache. It means that the cache for the page will be created when the page is created or updated.

    If sitemap-based cache preloading is activated, a specified sitemap file will be used for preliminary cache generation.

    Preload Links

    Provides functionality to preload the HTML content of the hovered link for acceleration loading pages after click.

    Prefetch DNS Requests

    If your website uses external resources (e.g. Google fonts, YouTube video, etc.), AccelerateWP can preload these resources for accelerating loading pages. To activate preloading external URLs, provide a list of external URLs.

    Preload Fonts

    Accelerates the loading of fonts by the browser, informing the browser at the very beginning of the request about the full list of fonts to download

    Advanced Rules

    Advanced site caching settings. If you have specific pages that must be processed individually you can add a custom rule for them.

    Never Cache URL(s)

    Provide a list of URLs that cannot be cached.

    Never Cache Cookies

    Provide a list of Cookie files that cannot be cached.

    Never Cache User Agent(s)

    Provide a list of User Agent names that cannot be cached.

    Always Purge URL(s)

    You can specify URLs that will be deleted from the cache when any post or page will be updated.

    Cache Query String(s)

    By default AccelerateWP does not cache URLs with query strings, but in this option, you can specify GET-parameters that must be cached.

    Database

    Database optimization provides clearing database from expired and unused data.

    Post Cleanup

    Provides clearing posts revisions, autosaved drafts, and deleted posts from the trash. Be careful, you will not be able to restore this data after clearing it.

    Comments Cleanup

    Provides clearing spam and deleted comments from the trash. Be careful, you will not be able to restore this data after clearing it.

    Transients Cleanup

    Provides clearing temporary options for existing plugins and older unused options that keep after deleting plugins.

    Database Cleanup

    Provides table optimizations in your database server.

    Automatic cleanup

    Allows you to schedule periodic database cleanups.

    Heartbeat

    WordPress Heartbeat is a function of server polling that provides delivery data from server to browser periodically.

    Reduce or disable Heartbeat activity

    To control server loads you can activate the Control Heartbeat function and reduce or disable Heartbeat activity. You can manage Heartbeat activity separately for backend, frontend, and post-editing parts. Be careful, disabling Heartbeat can break plugins that use this functionality.

    One-click AccelerateWP Add-ons

    Varnish

    When the server uses Varnish, you need to activate the add-on for implementing clearing Varnish cache when AccelerateWP clears site cache.

    WebP Compatibility

    If your site uses the WebP plugin you can activate AccelerateWP WebP Compatibility add-on to achieve browser compatibility with your WebP images.

    CDN

    CDN stands for Content Delivery Network, the feature that simplifies and speeds up resources loading for your customers.

    In order to start using CDN, you need:

    1. Public website on the Internet with a valid domain name
    2. Pull a CDN zone, for example, https://bunny.net/

    To set up a CDN in the AccelerateWP you must register CDN zone and get pull zone configuration.

    After setting up the Pull zone, you will receive an address, for example: domain.b-cdn.net

    Go to the WP Admin of your WordPress site, open the settings of the AccelerateWP (Step 1) and select the CDN section ( Step 2). Select the option: Enable Content Delivery Network (Step 3) and fill in the "CDN CNAME(s)" field with the previously received domain.b-cdn.net address (Step 4).

    Click the "Save changes" button (Step 5).

    In order to check CDN is working, open website in incognito mode with Developer Tools open in your browser. Go to the " Network" tab, find the "Domain" column, you should see the specified address in the CDN settings of the AccelerateWP plugin for your js/css/image files.

    Tools

    For backing up the settings, there is a function for exporting settings. To use it, click the Download settings button. When you need to restore settings, choose your saved settings file and click the Upload file and import settings button.

    AccelerateWP Premium: Object caching feature

    Note

    Object caching is a premium feature which is currently in beta and available only for some hosters.

    Unlike full page caching, this mechanism is not saving the whole page in cache, but stores database query results in additional storage for quick access. This mechanism is really helpful in case your site needs to process multiple pages per second as requests come in and may be helpful in case when full page caching cannot be used, e.g. on personalized pages.

    The Object caching feature is recommended to use in the following:

    • Websites used for extremely active exchange of information (forums, blogs, etc..)
    • Websites with too many requests running at the same time
    • Websites having important pages that cannot be cached entirely and exclude from the "whole page caching" due to any reason

    In order to start working with Object caching feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP Premium column.

    And click the "Apply advice" button to activate the Object caching feature.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    In case if you still don't have active Premium subscription, you will see the following window with link to the page where you can upgrade subscription.

    When upgrade link is clicked, you will see the billing interface opened in new browser window. Successful upgrade of your subscription will automatically close the billing window and start background upgrade process. Once your payment is processed, feature will be automatically installed on the website.

    If you don't see any links, contact your hoster to upgrade your subscription manually.

    If subscription is active, you will bypass the subscription window and proceed directly to the plugin installation.

    After a couple of minutes, the redis instance will be configured, plugin will be installed and activated.

    Close the window and see "Active" link in the corresponding cell of the table.

    Object caching does not require any additional configuration.

    Limitations

    There are the following requirements to activate Object Caching:

    • Website must use ea-PHP version 7.4 or 8.0.
    • WordPress version must be 3.7 and higher.
    • Other WordPress Caching plugins must not be installed.
    • Snuffleupagus must be turned off.
    • WordPress should not run in Multisite mode.

    FAQ

    What does "AccelerateWP is advice-driven" mean?

    CloudLinux automatically tracks slow requests for the websites for the appropriate period of time and sometimes creates an advice to activate the specific feature for your website. When you see the Advice available link in the corresponding feature cell, it means that AccelerateWP decided that this feature will significantly improve the performance of your website. Otherwise you see the No advice note.

    Click the Advice available link and push Apply advice button to automatically enable the feature.

    Causes of the Incompatible note are always Limitations: AccelerateWP or AccelerateWP Premium related ones.

    Each message has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    What should I do if I see the "Misconfiguration"?

    The misconfiguration message can appear in the cases when optimization feature was activated, but AccelerateWP detects it as not working anymore.

    The most frequent cases are:

    • Redis process cannot be started for some period of time.
    • WordPress Redis Object Cache plugin is disabled via WordPress Admin Gui/Plugins.
      • Resolution: You can resolve it by yourself via the WordPress Admin Gui.
    • Version of PHP was changed for website and it is no longer compatible with feature.
      • Resolution: change website php version to the one which is compatible with optimization feature.

    In all cases, please refer to the misconfiguration text, which has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    Feature activation starts, but fails with "post check issue"

    Post check is a sanity check of your website to make sure that it is working properly after feature activation.

    AccelerateWP expects website to:

    • return http code 200 when downloading home page
    • do not write any errors in logs

    If you have some Post check issue after turning on the feature, you can leave them as disabled (in that case the engine reverts all changes). Or you can ignore the issue and continue working with the enabled Object Caching in order to manually check the source of the issue.

    How to measure the speed of the website?

    You can measure the speed of your website before turning On the Object Caching and after.

    The popular tools:

    Where the AccelerateWP tool log files are located?

    Login via SSH, find in your home directory ~/.clwpos/main.log. Or you can open it using the control panel file manager.

    I already use the WordPress Redis object cache plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    I already use the WordPress Redis object cache PRO plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    Why did my site's PageSpeed score decrease after enabling AccelerateWP?

    AccelerateWP & mod_pagespeed:

    1. Enabling AccelerateWP activates the force gzip cache function when the cache is archived by the plugin, and Apache simply gives it as is to the user browser. In this case, the mod_pagespeed module cannot apply its optimizations, since it does not work with archives, but only with pure HTML.
    2. AccelerateWP does not activate all possible resource optimizations by default.

    Because of this, the total score of the site by PageSpeed may be reduced. To improve the PageSpeed score, it is necessary to enable additional optimizations of AccelerateWP.

    AccelerateWP with maximum settings for fast sites gives a similar PageSpeed score for mobile and an improved result for desktop. AccelerateWP with maximum settings for sites loading longer than 1 second always gives a better score than mod_pagespeed.

    My subscription was upgraded, but feature was not installed automatically

    This can be caused by several reasons. Either your website was detected to have malfunctions or there was an issue with environment when feature was installed (e.g. bad internet connectivity with WordPress market) .

    First, try to enable feature manually using AccelerateWP interface. Most likely you will find human-readable error message there.

    If the issue persists, or you cannot resolve it yourself, contact your hoster and attach ~/.clwpos/main.log for further investigation.

    - + diff --git a/cloudlinuxos/alt-ea_packages/index.html b/cloudlinuxos/alt-ea_packages/index.html index 8cc1e5eb..c2b4b4dc 100644 --- a/cloudlinuxos/alt-ea_packages/index.html +++ b/cloudlinuxos/alt-ea_packages/index.html @@ -51,7 +51,7 @@ })(); alt/ea packages - +
    sidebar hamburger menu

    alt/ea packages

    What are alt/ea packages?

    alt/ea packages are software packages or assemblies of software components developed and distributed by the CloudLinux software provider. These packages typically consist of a set of tools, libraries, and utilities that enhance or supplement the functionality of the operating system. "alt" and "ea" stand for "alternative" and "easyapache" respectively.

    alt-php provides by CloudLinux and it also includes PHP selector feature. These versions help to access outdated PHP version and also these versions are hardened and patched against vulnerabilities.

    Right now, you can easily use PHP selector to change PHP version from PHP 5.1 to PHP 8.3. And this option provides by CloudLinux LVE Manager plugin in WHM.

    EA PHP versions are provided by EasyApache 4. These PHP versions are included in cPanel installation and can be managed by Multi PHP Manager.

    What are the main goals and purposes of alt/ea packages?

    CloudLinux enables two different PHP Management Systems on cPanel systems, both our own MultiPHP Manager, as well as their own "Select PHP Version" Alternative Hardened PHP system.

    CloudLinux additionally provides older, End-of-Life versions of ea-php with security patches applied beyond the support provided by cPanel on alternative operating systems.

    alt-php includes PHP versions that CloudLinux provides along with their PHP Selector feature. These versions of PHP are often hardened and patched against vulnerabilities to allow users to continue to use applications that require outdated PHP versions.

    As of this time, PHP Selector currently offers users the ability to install and use PHP 5.1+ and the options for these versions are managed via CloudLinux's LVE Manager plugin in WHM.

    For more details regarding the installation of alt-php and PHP Selector, please refer to CloudLInux's documentation.

    ea-php is the PHP versions that cPanel packages and provides via the EasyApache 4 repositories. These are the standard versions that are included in a base installation of cPanel and are managed via the MultiPHP Manager in both cPanel & WHM interface.

    Older versions of ea-php are available on CloudLinux that are otherwise not available on CentOS/Ubuntu/AlmaLinux that have security patches provided by CloudLinux.

    Extensions and different versions of ea-php are managed via the EasyApache 4 interface in the WHM and settings are managed via MutliPHP Manager.

    Which operating systems are alt/ea packages designed for?

    alt/ea packages are designed for Linux operating systems:

    • CloudLinux (CentOS, AlmaLinux)
    • Ubuntu
    • Debian

    Which versions of CloudLinux support these packages?

    alt-php: CloudLinux 6, 7, 8, 9 (CentOS 6, 7, 8; AlmaLinux 8, 9)

    ea-php: CloudLinux 6, 7, 8, 9 (CentOS 6, 7, 8; AlmaLinux 8, 9)

    Which versions of Ubuntu support these packages?

    alt-php: Ubuntu 16, 18, 20, 22

    ea-php: no

    Which versions of Debian support these packages?

    alt-php: Debian 10, 11, 12

    ea-php: no

    What are the main interpreters used for alt/ea packages?

    • alt-php

    • alt-python

    • alt-ruby

    • alt-nodejs

    alt-php

    About alt-php

    alt-php (also known as "CloudLinux PHP Selector") is a component provided by CloudLinux designed for managing PHP versions on web servers and enabling users to choose PHP versions for their websites.

    Here are the key features and characteristics of alt-php:

    1. Multiple PHP Versions:

    alt-php allows the installation and usage of various PHP versions on a single web server. This enables users to select the PHP version that best suits their web applications.

    1. User Segmentation:

    alt-php allows hosting providers and web server administrators to provide different PHP versions for different users. Each user can choose the PHP version that suits their website.

    1. Enhanced Compatibility:

    alt-php is designed to ensure maximum compatibility with various web applications and frameworks. This includes optimizations and changes to make it compatible with a wide range of PHP applications.

    1. Updates and Support:

    CloudLinux provides regular updates for alt-php, including bug fixes, performance improvements, and updates for new PHP versions. This helps ensure the security and currency of PHP usage.

    1. Management Tools:

    alt-php usually comes with a set of management tools, such as PHP Selector, allowing users to manage PHP versions and enable/disable various PHP extensions.

    alt-php provides a more flexible and convenient environment for working with different PHP versions on a single server, which is particularly useful in a web hosting environment where multiple users have varying requirements for PHP versions for their web applications.

    A list of alt-php versions that we support for different operating systems.

    The mark x stands for a supported version.

    1. CloudLinux

    Cloudlinux 6Cloudlinux 7Cloudlinux 8Cloudlinux 9
    alt-php 5.1xxx
    alt-php 5.2xxxx
    alt-php 5.3xxxx
    alt-php 5.4xxxx
    alt-php 5.5xxxx
    alt-php 5.6xxxx
    alt-php 7.0xxxx
    alt-php 7.1xxxx
    alt-php 7.2xxxx
    alt-php 7.3xxxx
    alt-php 7.4xxxx
    alt-php 8.0xxxx
    alt-php 8.1xxxx
    alt-php 8.2xxxx
    alt-php 8.3xxxx

    2. Debian

    Debian 10Debian 11Debian 12
    alt-php 5.1
    alt-php 5.2
    alt-php 5.3
    alt-php 5.4
    alt-php 5.5
    alt-php 5.6xxx
    alt-php 7.0xxx
    alt-php 7.1xxx
    alt-php 7.2xxx
    alt-php 7.3xxx
    alt-php 7.4xxx
    alt-php 8.0xxx
    alt-php 8.1xxx
    alt-php 8.2xxx
    alt-php 8.3xxx

    3. Ubuntu

    Ubuntu 16.04Ubuntu 18.04Ubuntu 20.04Ubuntu 22.04
    alt-php 5.1
    alt-php 5.2
    alt-php 5.3
    alt-php 5.4
    alt-php 5.5
    alt-php 5.6xxxx
    alt-php 7.0xxxx
    alt-php 7.1xxxx
    alt-php 7.2xxxx
    alt-php 7.3xxxx
    alt-php 7.4xxxx
    alt-php 8.0xxxx
    alt-php 8.1xxxx
    alt-php 8.2xxxx
    alt-php 8.3xxxx

    Bundled PHP extensions

    PHP extensions are modules that extend the functionality of the PHP programming language. These extensions provide additional capabilities for working with various types of data, performing specific tasks, interacting with external resources and supporting various protocols.

    The PHP core includes many built-in extensions that provide basic functionality, such as working with databases, string processing, working with images, and others. However, to support more specific tasks and third-party libraries, you can use additional PHP extensions.

    List of extensions supported by the alt&ea team for each version of PHP

    Large number of PHP extensions are bundled with each version of PHP.

    PHP 5.1 extensions

    Reflection
    SPL
    SimpleXML
    bcmath
    big_int
    bitset
    bz2
    bz2_filter
    calendar
    coin_acceptor
    crack
    ctype
    curl
    date
    dba
    dbase
    dom
    doublemetaphone
    exif
    ftp
    gd
    geoip
    gettext
    gmagick
    gmp
    gnupg
    haru
    hash
    huffman
    iconv
    idn
    igbinary
    imagick
    imap
    inclued
    inotify
    interbase

    oncube_loader
    ldap
    libxml
    lzf
    mbstring
    mcrypt
    memcache
    msgpack
    mysql
    mysqli
    ncurses
    odbc
    openssl
    pcntl
    pcre
    pdo
    pdo_oci*
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pgsql
    posix
    pspell
    quickhash
    radius
    readline
    redis
    session
    shmop
    snmp
    sourceguardian
    soap
    sockets
    ssh2
    standard
    stats
    stem
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    translit
    wddx
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    zlib

    * CloudLinux 6/7

    PHP 5.2 extensions

    Reflection
    SPL
    SimpleXML
    apc
    apm
    ares
    bcmath
    bcompiler
    big_int
    bitset
    bloomy
    bz2
    bz2_filter
    calendar
    coin_acceptor
    crack
    ctype
    curl
    date
    dba
    dbase
    dbx
    dom
    doublemetaphone
    eaccelerator
    enchant
    exif
    ffmpeg**
    fileinfo
    filter
    ftp
    gd
    gender
    geoip
    geos
    gettext
    gmagick
    gmp
    gnupg
    haru
    hash
    hidef
    htscanner
    http
    huffman
    iconv
    idn
    igbinary
    imagick
    imap
    inclued
    inotify
    interbase
    intl
    ioncube_loader
    json
    ldap
    libxml
    lzf
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mhash
    mongo
    msgpack
    mssql
    mysql
    mysqli
    ncurses
    oauth
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird

    pdo_mysql
    pdo_oci**
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pgsql
    phar
    posix
    pspell
    quickhash
    radius
    rar
    readline
    recode
    redis
    rsync
    session
    shmop
    snmp
    soap
    sockets
    sourceguardian
    spl_types
    sqlite
    ssh2
    standard
    stats
    stem
    stomp
    suhosin
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    translit
    uploadprogress
    uuid
    wddx
    xcache
    xcache_3
    xdebug
    xhprof
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xrange
    xsl
    xcache*
    yaf
    yaz
    zend_optimizer
    zip
    zlib

    * CloudLinux 6

    ** CloudLinux 6/7

    PHP 5.3 extensions

    amqp
    apc
    apcu
    apm
    ares
    bcmath
    bcompiler
    big_int
    bitset
    bloomy
    brotli
    bz2
    bz2_filter
    calendar
    clamav**
    coin_acceptor
    core
    crack
    ctype
    curl
    date
    dba
    dbase
    dbx
    dom
    doublemetaphone
    eaccelerator
    eio
    enchant
    ereg
    exif
    ffmpeg*
    fileinfo
    filter
    ftp
    functional
    gd
    gender
    geoip
    geos
    gettext
    gmagick
    gmp
    gnupg
    haru
    hash
    hidef
    htscanner
    http
    huffman
    iconv
    idn
    igbinary
    imagick
    imap
    inclued
    inotify
    interbase
    intl
    ioncube_loader
    jsmin
    json
    ldap
    libevent
    libxml
    lzf
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mhash
    mongo
    msgpack
    mssql
    mysql
    mysqli
    mysqlnd
    ncurses
    nd_mysql
    nd_mysqli
    nd_pdo_mysql
    oauth
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_oci*
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pgsql
    phalcon*
    phar
    posix
    propro
    pspell
    quickhash
    radius
    raphf
    rar
    readline
    recode
    redis
    reflection
    rsync
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    sourceguardian
    solr
    spl
    spl_types
    sqlite
    sqlite3
    ssh2
    standard
    stats
    stem
    stomp
    suhosin
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    tideways
    timezonedb
    tokenizer
    trader
    translit
    uploadprogress
    uri_template
    uuid
    wddx
    weakref
    xcache*
    xcache_3
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xrange
    xsl
    xhprof
    yaf
    yaml
    yaz
    zend_guard_loader
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    PHP 5.4 extensions

    aapm**
    amqp
    apc
    apcu
    apm
    ares
    bcmath
    big_int
    bitset
    brotli
    bz2
    bz2_filter
    calendar
    core
    ctype
    curl
    clos_ssa
    date
    dba
    dbase
    dbx
    dom
    doublemetaphone
    eaccelerator
    eio
    enchant
    ereg
    exif
    ffmpeg*
    fileinfo
    filter
    ftp
    functional
    gd
    gender
    geoip
    geos
    gettext
    gmagick
    gmp
    gnupg
    haru
    hash
    hidef
    htscanner
    http
    iconv
    igbinary
    imagick
    imap
    inclued
    inotify
    interbase
    intl
    ioncube_loader
    json
    ldap
    libevent
    libsodium
    libxml
    lzf
    luasandbox*
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mhash
    mongo
    mongodb
    msgpack
    mssql
    mysql
    mysqli
    mysqlnd
    ncurses
    nd_mysql
    nd_mysqli
    nd_pdo_mysql
    oauth
    oci8*
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_oci*
    pgsql
    phalcon*
    phar
    posix
    propro
    pspell
    quickhash
    radius
    raphf
    rar
    readline
    recode
    redis
    reflection
    rsync
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    solr
    sourceguardian
    spl
    spl_types
    sqlite3
    ssh2
    standard
    stats
    stem
    stomp
    suhosin
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    tideways
    timezonedb
    tokenizer
    trader
    translit
    uploadprogress
    uri_template
    uuid
    wddx
    weakref
    xcache*
    xcache_3
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xrange
    xray***
    xsl
    xhprof
    jsmin
    yaf
    yaml
    yaz
    zend_guard_loader
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    *** CloudLinux 7/8

    PHP 5.5 extensions

    aapm**
    amqp
    apcu
    apm
    ares
    bcmath
    big_int
    bitset
    brotli
    bz2
    bz2_filter
    calendar
    clamav**
    core
    ctype
    curl
    clos_ssa
    date
    dba
    dbase
    dbx
    dom
    doublemetaphone
    diseval
    eio
    enchant
    ereg
    exif
    ffmpeg*
    fileinfo
    filter
    ftp
    gd
    gender
    geoip
    geos
    gettext
    gmagick
    gmp
    gnupg
    gRPC
    haru
    hash
    hidef
    htscanner
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    interbase
    intl
    ioncube_loader
    jsmin
    json
    ldap
    libevent
    libsodium
    libxml
    lzf
    luasandbox*
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mhash
    mongo
    mongodb
    msgpack
    mssql
    mysql
    mysqli
    mysqlnd
    ncurses
    nd_mysql
    nd_mysqli
    nd_pdo_mysql
    oauth
    oci8*
    odbc
    opcache*
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_oci*
    pgsql
    phalcon*
    phalcon3
    phar
    posix
    postal*
    propro
    pspell
    quickhash
    radius
    raphf
    rar
    readline
    recode
    redis
    reflection
    rsync
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    sourceguardian
    solr
    spl
    spl_types
    sqlite3
    ssh2
    standard
    stats
    stem
    stomp
    suhosin
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    tideways
    timezonedb
    tokenizer
    trader
    translit
    uploadprogress
    uri_template
    uuid
    wddx
    weakref
    xcache_3
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xrange
    xray
    xsl
    xhprof
    yaf
    yaml
    yaz
    zend_guard_loader
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    PHP 5.6 extensions

    aapm**
    amqp
    apcu
    apm
    ares
    bcmath
    big_int
    bitset
    brotli
    bz2
    bz2_filter
    calendar
    core
    ctype
    curl
    clos_ssa**
    date
    dba
    dbase
    dbx
    dom
    doublemetaphone
    diseval
    eio
    enchant
    ereg
    exif
    ffmpeg*
    fileinfo
    filter
    ftp
    gd
    gender
    geoip
    gettext
    geos
    gmagick
    gmp
    gnupg
    gRPC
    haru
    hash
    htscanner
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    interbase
    intl
    ioncube_loader
    jsmin
    json
    ldap
    libevent
    libsodium
    libxml
    lzf
    luasandbox*
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mhash
    mongo
    mongodb
    msgpack
    mssql
    mysql
    mysqli
    mysqlnd
    ncurses
    nd_mysql
    nd_mysqli
    nd_pdo_mysql
    oauth
    oci8
    odbc
    opcache*
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_oci*
    pgsql
    phalcon*
    phalcon3
    phar
    posix
    postal**
    propro
    pspell
    quickhash
    radius
    raphf
    rar
    readline
    recode
    redis
    reflection
    rsync
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    sourceguardian
    spl
    spl_types
    sqlite3
    ssh2
    standard
    stats
    stem
    stomp
    solr
    suhosin
    sybase_ct
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    trader
    translit
    tideways
    uploadprogress
    uri_template
    uuid
    wddx
    xcache_3
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xrange
    xray
    xsl
    xhprof
    yaml
    yaz
    zend_guard_loader
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    PHP 7.0 extensions

    aapm**
    amqp
    apcu
    bcmath
    bitset
    brotli
    bz2
    clos_ssa**
    calendar
    core
    ctype
    curl
    date
    dba
    dbase
    dom
    diseval
    eio
    enchant
    exif
    fileinfo
    filter
    ftp
    ffmpeg*
    gd
    gearman
    gender
    geos
    geoip
    gettext
    gmagick
    gmp
    gnupg
    gRPC
    hash
    htscanner
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    interbase
    intl
    ioncube_loader
    jsmin
    json
    ldap
    libsodium
    libxml
    lzf
    luasandbox*
    mailparse
    mbstring
    mcrypt
    memcached
    memcache
    mongodb
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    newrelic
    oauth
    oci8*
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    psr
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_sqlsrv
    pdo_oci
    pgsql
    phalcon3
    phar
    posix
    postal**
    propro
    pspell
    phalcon4
    raphf
    rar
    readline
    rrd
    redis
    reflection
    recode
    session
    shmop
    simplexml
    snmp
    snuffleupagus
    soap
    sockets
    sourceguardian
    sodium
    solr
    spl
    sqlite3
    sqlsrv
    ssh2
    standard
    stats
    suhosin7
    sysvmsg
    swoole
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    trader
    tideways_xhprof
    uploadprogress
    uuid
    vips*
    vld**
    wddx
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xray
    xsl
    yaml
    yaz
    yaf
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    Note

    To use newrelic extension you should set your own New Relic License Key in your own /opt/alt/php7*/etc/php.ini file. Please find more info about New Relic License Key in the New Relic documentation.

    PHP 7.1 extensions

    aapm**
    amqp
    snuffleupagus
    vld
    apcu
    bcmath
    brotli
    bz2
    clos_ssa**
    calendar
    core
    ctype
    curl
    date
    dba
    dbase
    dom
    diseval
    eio
    enchant
    exif
    fileinfo
    filter
    ftp
    ffmpeg*
    gd
    gearman
    gender
    geoip
    gettext
    geos
    gmagick
    gmp
    gnupg
    gRPC
    hash
    htscanner
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    interbase
    intl
    ioncube_loader
    jsmin
    json
    ldap
    libsodium
    libxml
    lzf
    luasandbox*
    mailparse
    mbstring
    mcrypt
    memcached
    memcache
    mongodb
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    newrelic
    oauth
    oci8
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    pdo_pgsql psr

    pdo_sqlite
    pdo_sqlsrv
    pgsql
    phalcon3
    phar
    pdf
    pdo_oci
    phalcon4
    posix
    propro
    pspell
    psr**
    raphf
    rar
    readline
    redis
    reflection
    rrd
    recode
    solr
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    sourceguardian
    spl
    sodium
    sqlite3
    sqlsrv
    ssh2
    standard
    stats
    suhosin7
    sysvmsg
    swoole
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    trader
    tideways_xhprof
    uploadprogress
    uuid
    vips*
    wddx
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    xray
    yaz
    yaml
    yaf
    zip
    zlib
    zmq

    * CloudLinux 6/7

    ** CloudLinux 7

    Note

    To use newrelic extension you should set your own New Relic License Key in your own /opt/alt/php7*/etc/php.ini file. Please find more info about New Relic License Key in the New Relic documentation.

    PHP 7.2 extensions

    aapm**
    jsmin
    psr
    rrd
    yaz
    amqp
    snuffleupagus
    vld
    apcu
    bcmath
    brotli
    bz2
    calendar
    clos_ssa**
    core
    ctype
    curl
    date
    dba
    dom
    dbase
    diseval
    eio
    enchant
    exif
    fileinfo
    filter
    ftp
    ffmpeg*
    gd
    gender
    geoip
    gettext
    gearman
    geos
    gmagick
    gmp
    gnupg
    gRPC
    hash
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    interbase
    intl
    ioncube_loader
    json
    ldap
    libxml
    lzf
    luasandbox*
    mcrypt
    memcache
    mailparse
    mbstring
    memcached
    mongodb
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    newrelic
    oauth
    oci8
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdo
    pdo_dblib
    pdo_firebird
    pdf
    pdo_oci
    phalcon4
    pdo_mysql
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_sqlsrv
    pgsql
    phalcon3
    phar
    posix
    propro
    pspell
    raphf
    readline
    redis
    reflection
    recode
    sodium
    sourceguardian
    swoole
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    spl
    sqlite3
    sqlsrv
    ssh2
    standard
    stats
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    trader
    tideways_xhprof
    uploadprogress
    uuid
    vips*
    wddx
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    xdebug
    yaf
    yaml
    zip
    zlib
    zmq
    xray

    Note

    To use newrelic extension you should set your own New Relic License Key in your own /opt/alt/php7*/etc/php.ini file. You can find more info about New Relic License Key in the New Relic documentation.

    * CloudLinux 6/7

    ** CloudLinux 7

    PHP 7.3 extensions

    ffmpeg*
    aapm**
    amqp
    clos_ssa**
    gearman
    jsmin
    mailparse
    memcache
    psr
    rrd
    solr
    tideways_xhprof
    zmq
    snuffleupagus
    vld
    apcu
    bz2
    brotli
    calendar
    core
    ctype
    curl
    date
    exif
    enchant
    filter
    ftp
    gettext
    gmp
    gnupg
    hash
    iconv
    interbase
    luasandbox*
    libxml
    mysqlnd
    opcache
    openssl
    pcntl
    pcre
    pdo_pgsql
    phar
    readline
    reflection
    session
    shmop
    simplexml
    sourceguardian
    spl
    sqlite3
    standard
    snmp
    stats
    tokenizer
    trader
    xmlreader
    bcmath
    fileinfo
    grpc
    intl
    lzf
    nd_mysqli
    pdf
    pdo
    posix
    swoole
    uploadprogress
    xmlrpc
    gd
    http
    ioncube_loader
    mbstring
    nd_pdo_mysql
    pdo_dblib
    pdo_sqlite
    propro
    soap
    sysvmsg
    uuid
    xmlwriter
    dbase
    gender
    igbinary
    mcrypt
    newrelic
    pdo_firebird
    pdo_sqlsrv
    pspell
    sockets
    sysvsem
    vips*
    xsl
    dba
    geoip
    imagick
    json
    memcached
    oauth
    pdo_mysql
    pgsql
    raphf
    sodium
    sysvshm
    yaml
    dom
    geos
    imap
    ldap
    mongodb
    oci8
    pdo_oci
    phalcon3
    recode
    sqlsrv
    tidy
    wddx
    yaz
    eio
    gmagick
    inotify
    leveldb
    mysqli
    odbc
    pdo_odbc
    phalcon4
    redis
    ssh2
    timezonedb
    xdebug
    zip
    xml
    zlib
    xray
    yaf

    * CloudLinux 6/7

    ** CloudLinux 7

    Note

    To use newrelic extension you should set your own New Relic License Key in your own /opt/alt/php7*/etc/php.ini file. You can find more info about New Relic License Key in the New Relic documentation.

    PHP 7.4 extensions

    leveldb
    sourceguardian
    ffmpeg*
    amqp
    clos_ssa**
    gearman
    ioncube_ loader
    jsmin
    mailparse
    mcrypt
    memcache
    psr
    rrd
    solr
    ssh2
    tideways_xhprof
    yaz
    zmq
    apcu
    bcmath
    brotli
    bz2
    calendar
    core
    ctype
    curl
    date
    dba
    dbase
    dom
    eio
    enchant
    exif
    fileinfo
    filter
    ftp
    gd
    gender
    geoip
    geos
    gettext
    gmagick
    gmp
    gnupg
    grpc
    hash
    http
    iconv
    igbinary
    imagick
    imap
    inotify
    intl
    json
    ldap
    libxml
    luasandbox*
    lzf
    mbstring
    memcached
    mongodb
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    newrelic
    snuffleupagus
    oauth
    oci8
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_oci
    pdo_odbc
    pdo_pgsql
    vld
    pdo_sqlite
    pdo_sqlsrv
    pgsql
    phalcon4
    phar
    posix
    propro
    pspell
    raphf
    readline
    redis
    reflection
    phalcon5
    session
    shmop
    simplexml
    snmp
    soap
    sockets
    sodium
    spl
    sqlite3
    sqlsrv
    standard
    stats
    swoole
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    trader
    xray
    uploadprogress
    uuid
    vips*
    xdebug
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    yaml
    zip
    zlib

    * CloudLinux 6/7

    ** CloudLinux 7

    PHP 8.0 extensions

    brotli
    amqp
    clos_ssa***
    core
    date
    filter
    gearman
    geoip
    gmagick
    gnupg***
    grpc
    apcu
    bcmath
    bz2
    calendar
    ctype
    curl
    dba
    dbase
    dom
    enchant
    exif
    ffi**
    fileinfo
    hash
    igbinary
    inotify
    jsmin
    json
    libxml
    mcrypt
    memcache ftp
    gd
    gettext
    gmp
    iconv
    imagick
    imap
    intl
    ldap
    lzf
    mailparse
    mbstring
    mongodb
    newrelic
    oauth
    oci8
    openssl
    pcntl
    pcre
    pdo_oci
    pdo_sqlsrv
    readline
    redis
    reflection
    rrd
    session memcached
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    odbc
    opcache
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql
    pdo_odbc
    snuffleupagus
    solr
    SPL
    sqlsrv
    ssh2
    standard
    swoole
    tideways_xhprof
    trader pdo_pgsql
    pdo_sqlite
    pgsql
    phar
    posix
    pspell
    psr
    raphf
    shmop
    simplexml
    snmp
    soap
    sockets
    uploadprogress
    uuid
    vips*
    vld
    xdebug
    xmlrpc**
    yaml
    yaz
    zip
    zlib sodium
    sqlite3
    sysvmsg
    sysvsem
    sysvshm
    tidy
    timezonedb
    tokenizer
    xml
    xmlreader
    xmlwriter
    xsl
    zmq
    sourceguardian
    phalcon5
    xray

    * CloudLinux 6/7

    ** CloudLinux 7/8

    *** CloudLinux 7

    PHP 8.1 extensions

    amqp
    apcu
    bcmath
    brotli
    bz2
    calendar
    clos_ssa***
    Core
    ctype
    curl
    date
    dba
    dbase
    dom
    enchant
    exif
    ffi**
    fileinfo
    filter
    ftp
    gd
    geoip
    gearman
    gettext
    gmagick
    gmp
    gnupg**
    grpc
    hash
    ioncube_loader
    iconv
    igbinary
    imagick
    imap
    inotify
    intl
    jsmin
    json
    ldap
    libxml
    lzf
    mailparse
    mbstring
    mcrypt
    memcache
    memcached
    mongodb
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    newrelic
    oauth
    oci8
    odbc
    opcache
    openssl
    pcntl
    pcre
    pdf
    pdo
    pdo_dblib
    pdo_mysql
    pdo_oci
    pdo_odbc
    phalcon5
    pdo_pgsql
    pdo_firebird
    pdo_sqlite
    pdo_sqlsr
    pgsql
    phar
    posix
    process
    pspell
    psr
    rrd
    raphf
    readline
    redis
    Reflection
    session
    shmop
    SimpleXML v snmp
    solr
    sourceguardian
    soap
    sockets
    sodium
    SPL
    sqlite3
    sqlsrv
    ssh2
    standard
    swoole
    sysvmsg
    sysvsem
    sysvshm
    tideways_xhprof
    tidy
    timezonedb
    tokenizer
    trader
    uploadprogress
    uuid
    vips*
    xdebug
    xml
    xmlreader
    xmlrpc**
    xmlwriter
    xsl
    yaf
    yaml
    zip
    zlib
    zmq
    xray

    * CloudLinux 6/7

    ** CloudLinux 7/8

    *** CloudLinux 7

    PHP 8.2 extensions

    amqp**
    apcu**
    bcmath
    brotli**
    bz2
    calendar
    Core
    ctype
    curl
    date
    dba
    dbase**
    dom
    enchant
    exif
    ffi
    fileinfo
    filter
    ftp
    gd
    gearman**
    geoip**
    gettext
    gmagick**
    gmp
    gnupg*
    grpc**
    hash
    iconv
    igbinary**
    imagick**
    imap
    inotify**
    intl
    jsmin**
    json
    ldap
    libxml
    lzf**
    mailparse**
    mbstring
    mcrypt**
    memcache**
    memcached**
    mongodb**
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    oauth**
    oci8**
    odbc
    opcache
    openssl
    pcntl
    pcre**
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql*
    pdo_oci**
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_sqlsrv**
    pgsql
    phar
    posix
    pspell
    psr**
    random
    raphf**
    readline
    redis**
    Reflection
    rrd**
    session
    shmop
    SimpleXML
    snmp
    soap
    sockets
    sodium
    solr**
    SPL
    sqlite3
    sqlsrv**
    ssh2**
    standard
    swoole**
    sysvmsg
    sysvsem
    sysvshm
    tideways_xhprof**
    tidy
    timezonedb**
    tokenizer
    trader**
    uploadprogress**
    uuid**
    vips*
    xdebug**
    xml
    xmlreader
    xmlrpc**
    xmlwriter
    xsl
    yaml**
    zip
    zlib
    zmq**

    * CloudLinux 7

    ** CloudLinux 7/8

    PHP 8.3 extensions

    amqp**
    apcu**
    bcmath
    brotli**
    bz2
    calendar
    Core
    ctype
    curl
    date
    dba
    dbase**
    dom
    elastic_apm
    enchant
    exif
    ffi
    fileinfo
    filter
    ftp
    gd
    gearman**
    geoip**
    gettext
    gmagick**
    gmp
    gnupg*
    grpc**
    hash
    iconv
    igbinary**
    imagick**
    imap
    inotify**
    intl
    ioncube_loader
    jsmin**
    json
    ldap
    libxml
    lzf**
    mailparse**
    mbstring
    mcrypt**
    memcache**
    memcached**
    mongodb**
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    oauth**
    oci8**
    odbc
    opcache
    openssl
    pcntl
    pcre**
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql*
    pdo_oci**
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_sqlsrv**
    pgsql
    phalcon5
    phar
    posix
    pspell
    psr**
    random
    raphf**
    readline
    redis**
    Reflection
    rrd**
    session
    shmop
    SimpleXML
    snmp
    snuffleupagus
    soap
    sockets
    sodium
    solr**
    SPL
    sqlite3
    sqlsrv**
    ssh2**
    standard
    sysvmsg
    sysvsem
    sysvshm
    tideways_xhprof**
    tidy
    timezonedb**
    tokenizer
    trader**
    uploadprogress**
    uuid**
    xml
    xmlreader
    xmlrpc**
    xmlwriter
    xsl
    yaml**
    zip
    zlib
    zmq**

    * CloudLinux 7

    ** CloudLinux 7/8

    PHP 8.4 extensions

    amqp**
    apcu**
    bcmath
    brotli**
    bz2
    calendar
    Core
    ctype
    curl
    date
    dba
    dbase**
    dom
    elastic_apm
    enchant
    exif
    ffi
    fileinfo
    filter
    ftp
    gd
    gearman**
    geoip**
    gettext
    gmagick**
    gmp
    gnupg*
    grpc**
    hash
    iconv
    igbinary**
    imagick**
    imap
    inotify**
    intl
    ioncube_loader
    jsmin**
    json
    ldap
    libxml
    lzf**
    mailparse**
    mbstring
    mcrypt**
    memcache**
    memcached**
    mongodb**
    mysqli
    mysqlnd
    nd_mysqli
    nd_pdo_mysql
    oauth**
    oci8**
    odbc
    opcache
    openssl
    pcntl
    pcre**
    pdf
    pdo
    pdo_dblib
    pdo_firebird
    pdo_mysql*
    pdo_oci**
    pdo_odbc
    pdo_pgsql
    pdo_sqlite
    pdo_sqlsrv**
    pgsql
    phalcon5
    phar
    posix
    pspell
    psr**
    random
    raphf**
    readline
    redis**
    Reflection
    rrd**
    session
    shmop
    SimpleXML
    snmp
    snuffleupagus
    soap
    sockets
    sodium
    solr**
    SPL
    sqlite3
    sqlsrv**
    ssh2**
    standard
    sysvmsg
    sysvsem
    sysvshm
    tideways_xhprof**
    tidy
    timezonedb**
    tokenizer
    trader**
    uploadprogress**
    uuid**
    xml
    xmlreader
    xmlrpc**
    xmlwriter
    xsl
    yaml**
    zip
    zlib
    zmq**

    * CloudLinux 7

    ** CloudLinux 7/8

    How do I install alt-php?

    What commands should I use to install alt-php on CloudLinux and Ubuntu?

    Installation occurs using package management tools such as "YUM" for CentOS/RHEL-based systems or "APT-GET" for Ubuntu-based systems. Here are the general steps for installing alt-php:

    For CentOS/RHEL-based Systems (Using YUM):

    Each version of PHP individually or all versions at once can be installed.

    Standard commands to install each version separately can be used. For example, installing alt-php73:

    yum install alt-php73*
    @@ -454,6 +454,6 @@
     

    As you can see, each version is entirely self-contained, and changing configurations in one will not impact the others, a desired feature in hosting environments.

    Enabling a module through the configuration files:

    1. Direct inclusion in the specific extension's ini file:

    • If each extension has its own ini file (e.g., memcached.ini), open that file. Location of ini config files:
    /opt/alt/phpXY/etc/php.d.all/
     
    • Inside the ini file, find lines starting with ; before the extension name (e.g., ;extension=memcached.so). The ; sign at the beginning of the line means that this extension is currently inactive.

    • Remove the ; before the line with the extension name to activate it.

    • Save the changes in the ini file.

    If there is no such line:

    • Inside the ini file, add line extension=memcached.so

    • Save the changes in the ini file.

    2. Enabling through default.ini:

    • Open the default.ini file, usually located in the PHP configuration directory:
    /opt/alt/phpXY/etc/php.d/default.ini
     
    • Find lines starting with ; before the extension name. The ; sign at the beginning of the line means that this extension is currently inactive.

    • Remove the ; before the line with the extension name to activate it.

    If there is no such line:

    • Add line extension=extension name.so (where extension name.so - name of extension you need).

    • Save the changes in the default.ini file.

    Note:

    - Typically, extensions with their own ini files are enabled or disabled directly in their respective ini files, allowing for more explicit specification of which extensions should be enabled for a specific PHP configuration.

    - On the other hand, extensions that should be enabled by default on all systems may be listed in default.ini. This file is used to set default settings for PHP and can be used to enable default extensions.

    - If you're unsure which file to modify to enable a specific extension, it's recommended to first try enabling it in the extension's own ini file. If you encounter issues or need to enable an extension on all systems by default, you can try adding it to default.ini.

    alt-python

    The information will be added later.

    alt-ruby

    The information will be added later.

    alt-nodejs

    The information will be added later.

    alt-php/python/ruby/nodejs End Of Life

    CloudLinux provides additional security support time of php, python, ruby and nodejs after the end of support from the vendor. Below are tables with information about the time of security support from the vendor and from CloudLinux.

    *EOL - end of life

    *SST - security support time

    alt-php EOL

    VersionReleasedEOL by vendorSST by vendor (years)EOL by CloudLinuxSST by Cloudlinux after vendor's EOL (years)
    4.407.11.200508.07.20082.701.07.202314.9
    5.123.11.200524.08.20060.801.04.202417.6
    5.201.11.200606.01.20114.2
    5.329.06.200914.08.20145.1
    5.429.02.201214.09.20153.5
    5.519.06.201321.07.20163.1
    5.627.08.201431.12.20184.3
    7.012.01.201510.01.20193.9
    7.130.11.201601.12.20193.0
    7.228.11.201730.11.20203.0
    7.304.12.201806.12.20213.0
    7.426.11.201928.11.20223.0
    8.024.11.202026.11.20233.0
    8.123.11.202125.11.20243.0
    8.208.12.202208.12.20253.0

    alt-python EOL

    VersionReleasedEOL by vendorSST by vendor (years)EOL by CloudLinuxSST by Cloudlinux after vendor's EOL (years)
    2.729.09.201229.09.20175.0
    3.329.09.201229.09.20175.0
    3.415.03.201418.03.20195.0
    3.512.09.201513.09.20205.0
    3.622.12.201623.12.20215.0
    3.726.06.201827.06.20235.0
    3.814.10.201914.10.20245.0
    3.905.10.202005.10.20255.0
    3.1005.04.202104.10.20265.4
    3.1124.10.202224.10.20275.0
    3.1202.10.202302.10.20285.0

    alt-ruby EOL

    VersionReleasedEOL by vendorSST by vendor (years)EOL by CloudLinuxSST by Cloudlinux after vendor's EOL (years)
    1.824.02.201324.02.20163.0
    1.924.02.201324.02.20163.0
    2.024.02.201324.02.20163.0
    2.125.12.201331.03.20173.3
    2.225.12.201431.03.20183.3
    2.324.12.201531.03.20193.3
    2.423.12.201631.03.20203.3
    2.525.12.201731.03.20213.3
    2.625.12.201831.03.20223.3
    2.725.12.201931.03.20233.3
    3.025.12.202031.03.20243.3
    3.125.12.202131.03.20253.3
    3.225.12.202231.03.20263.3

    alt-nodejs EOL

    VersionReleasedEOL by vendorSST by vendor (years)EOL by CloudLinuxSST by Cloudlinux after vendor's EOL (years)
    626.04.201630.04.20193.0
    830.03.201731.12.20192.8
    931.10.201730.06.20180.6
    1024.04.201830.04.20213.0
    1123.10.201830.06.20190.7
    1223.04.201930.04.20223.0
    1421.04.202030.04.20233.0
    1620.04.202111.09.20232.3
    1819.04.202230.04.20253.0
    1918.10.202201.06.20230.6
    2018.04.202330.04.20263.0
    - + diff --git a/cloudlinuxos/apache2nginx/index.html b/cloudlinuxos/apache2nginx/index.html index 132cc0fc..15a623b3 100644 --- a/cloudlinuxos/apache2nginx/index.html +++ b/cloudlinuxos/apache2nginx/index.html @@ -51,7 +51,7 @@ })(); Apache2Nginx (BETA) - +
    sidebar hamburger menu

    Apache2Nginx (BETA)


    Apache2Nginx sets up NGINX hosting on the server and automatically converts .htaccess files into corresponding NGINX configuration.

    It seamlessly integrates with the LSAPI NGINX module, which allows for better performance and resource usage.

    Apache2Nginx is supported on cPanel servers only, running CloudLinux OS 8 and later.

    Installation

    To use Apache2Nginx, first install the apache2nginx package:

    dnf --enablerepo=cloudlinux-updates-testing install apache2nginx
    @@ -61,6 +61,6 @@
     

    For example, apache2nginx proxy -d example.com.

    Disable forced use of Apache for a single website

    To disable forcing individual website to be served by Apache:

    apache2nginx unproxy -d <domain>
     

    Note that Apache may still serve the website, if:

    • conversion of its .htaccess files fails in any way
    • unsupported handler is used. Apache2Nginx only supports PHP-FPM handler

    List proxied websites

    To list websites that are forced to be served by Apache:

    apache2nginx list-proxied
     

    This command lists all websites that are forced to be served by Apache and the reason for that.

    Other notes

    Apache2Nginx automatically converts .htaccess files to NGINX configuration, stored under the directory /etc/nginx as apache2nginx.conf and files prefixed with apache2nginx-.

    Please don't modify these files manually, as they will be overwritten by the monitoring subsystem.

    Instead, if you want to augment the NGINX configuration, you can do any of the following:

    • Work with your .htaccess files like usually, and let Apache2Nginx automatically convert them to respective NGINX configuration
    • Add files according to ea-nginx files conventions. Please refer to the cPanel documentation.
    - + diff --git a/cloudlinuxos/cloudlinux_installation/index.html b/cloudlinuxos/cloudlinux_installation/index.html index 299f62d2..44be5fb4 100644 --- a/cloudlinuxos/cloudlinux_installation/index.html +++ b/cloudlinuxos/cloudlinux_installation/index.html @@ -51,7 +51,7 @@ })(); Installation - +
    sidebar hamburger menu

    Installation

    Hardware Compatibility

    CloudLinux OS supports all the hardware supported by RHEL/CentOS/AlmaLinux, with few exceptions. Exceptions are usually hardware that require binary drivers, and that doesn't have any open source alternatives.

    Note

    CloudLinux OS does not support ARM-based CPUs (e.g. Graviton).

    Warning

    In cases where your server hardware is incompatible with any version of RHEL/CentOS/AlmaLinux and CloudLinux OS or our components - we will not be able to provide assistance in adding such hardware support or solving possible issues related to such installation.

    Note

    Replacing the server hardware affects specifications and support for such hardware from CloudLinux OS end. It is most likely that the CloudLinux OS will stop working if you replace any hardware component on the server.

    Example: the same HDD/SSD/NVMe model will have a new UUID and CloudLinux OS is mapped to old UUID which break the boot procedure.

    In this case, we are not responsible for the CloudLinux OS operation and cannot assist you in restoring the server or adapting CloudLinux OS installation to the new hardware.

    There are some incompatible devices with CL6:

    DeviceBinary DriverSource
    B110i Smart Array RAID controller hpahcisrhttps://h10032.www1.hp.com/ctg/Manual/c01754456
    B120i/B320i Smart Array SATA RAID Controller hpvsahttps://www8.hp.com/h20195/v2/GetPDF.aspx/c04168333.pdf
    SanDisk DAS Cache https://www.dell.com/en-us/work/learn/server-technology-components-caching

    With RHEL8 (CloudLinux OS 8/CloudLinux OS 7 Hybrid), some devices are no longer supported. You can check the entire list here: Hardware enablement considerations in adopting RHEL 8

    Software Compatibility

    CloudLinux OS is designed to maintain full binary compatibility with CentOS and Red Hat Enterprise Linux (RHEL). This means that any software, applications, or scripts that run on CentOS or RHEL can run on CloudLinux OS without modification. The operating system ensures broad compatibility with the vast ecosystem of Linux software, providing a seamless and stable environment for hosting providers and users transitioning from other enterprise Linux distributions. This compatibility extends to package management, system libraries, and core functionalities, making CloudLinux OS a reliable drop-in replacement that supports the same software stack as its counterparts.

    ZFS

    CloudLinux 8+ provides limited support for ZFS, to the same degree as other RHEL-like distributions. More precisely, that means:

    1. CloudLinux doesn't ship any prebuilt packages of kmod-zfs or zfs-dkms, etc. But it doesn't restrict customers from using packages built by the OpenZFS Team as they are known to be compatible and work fine on CloudLinux and AlmaLinux. In fact, we know that some of our customers are already using them for quite some time.
      1. The most recent CloudLinux conversion script (cldeploy) does not prevent the conversion of the system with zfs modules loaded
    2. CloudLinux tries to keep kABI mostly compatible with RHEL's, so in case ZFS works with the RHEL-like kernel, but not with a similar CloudLinux one, we will accept tickets to fix that
    3. Because ZFS is known to have some lag in adapting to kernel changes, we consider it the customer's responsibility to test the upgradeability of the environment to the most recent kernels and ZFS versions before upgrading the entire fleet.
    4. Most CloudLinux features, like CageFS, should work fine with ZFS-backed mount points, and if not, we will try our best to provide fixes according to severity and demand

    CloudLinux features known to not work with ZFS:

    LVE IO Limits (as well as generic cgroups limits) don't work because the ZFS data path bypasses some of the kernel's internals. See related upstream tickets 1, 2, 3. There is also an ongoing attempt to implement per-dataset IO limits on the ZFS side.

    Getting License

    You will need a valid activation key - trial or paid - to be able to use your CloudLinux OS server.

    Getting Trial License

    The trial activation key can be used to convert your server to CloudLinux OS.

    Note

    The trial license subscription will work for 30 days.

    If you have any issues getting activation key or if you have any questions regarding using your trial subscription – contact sales@cloudlinux.com and we will help.

    To get the activation key:

    1. Register with CloudLinux Network: https://cln.cloudlinux.com/console/register/customer (skip it if you already registered)
    2. You will receive an email with activation link
    3. Login at https://cln.cloudlinux.com/console/auth/login
    4. Choose the appropriate CloudLinux edition that fits your needs.
    5. Click on Get Trial Activation Key.

    You will get a key that looks like: 12314-d34463a182fede4f4d7e140f1841bcf2.

    Converting existing servers

    Sometimes it is required to convert already existing servers with CentOS or AlmaLinux and make them CloudLinux OS.

    It is easy to convert your existing installation through the cldeploy script. The process takes a few minutes and replaces just a handful of RPMs.

    Unlike Fresh installation, converting immediately requires a CloudLinux OS license. Please refer to the guide to get an activation key.

    Requirements

    Currently supported OS for conversion:

    • CentOS 7
    • AlmaLinux OS 8, AlmaLinux OS 9
    • RockyLinux (installation only, no uninstall option)

    Unsupported OS for conversion:

    • CentOS 8
    • CentOS Stream

    Supported control panels:

    Warning:

    CloudLinux 9 does not support Plesk.

    Other control panels:

    Control panels not mentioned in the list of supported panels have native integration or integration done by the developer of the panel. We cannot guarantee the stability or correct operation of CloudLinux components on such panels.

    Warning:

    Some CloudLinux components may not be supported by the control panel itself or the control panel can have its own analog of such a component. You can verify this information when reviewing the system requirements for installing a specific CloudLinux component.

    Note: CentOS 8 is EOL

    CentOS 8 reached End Of Life (EOL) on December 31st, 2021. If you would like to convert from CentOS 8 to CloudLinux OS 8, do the following:

    Downloading and running conversion script

    Key-based activation

    If you want to use your activation key for activation, run the following commands:

    yum install wget -y
    @@ -177,6 +177,6 @@
     

    Kernel package and related LVE packages should be deleted and the required kernel will be installed.

    Before the reboot, the following command should be executed for restoring Apache and httpd.conf without mod_hostinglimits.

    For EasyApache 3:

    /scripts/easyapache --build
     

    For EasyApache 4:

    /usr/local/bin/ea_install_profile --install /etc/cpanel/ea4/profiles/cpanel/default.json
     

    Note

    Some of the packages from CloudLinux OS repo will still be present. They are the same as AlmaLinux or CentOS* packages, and don't have to be removed. They will be updated in the future from AlmaLinux or CentOS* repositories, as new versions come out.

    - + diff --git a/cloudlinuxos/cloudlinux_os_components/index.html b/cloudlinuxos/cloudlinux_os_components/index.html index de8f81e8..2601a53e 100644 --- a/cloudlinuxos/cloudlinux_os_components/index.html +++ b/cloudlinuxos/cloudlinux_os_components/index.html @@ -51,7 +51,7 @@ })(); CloudLinux OS components - +
    sidebar hamburger menu

    CloudLinux OS components

    General information and requirements

    LVE-Stats 2

    General information and requirements

    Why is it needed?

    • Old LVE-statistics store averages as integer numbers, as % of CPU usage. If user used 100% of CPU for 1 second within an hour, it is only 1-2% for a minute, and 0 for 5 minutes. Data in old LVE-statistics is aggregated to 1-hour intervals. So, such peak load will noExat be recorded and we need to store data with much higher precision.
    • 100% CPU usage in old lve statistics means “all cores”. On 32 core servers usage is not visible for most users (as they are limited to 1 core).
    • Old LVE-statistics does not provide a way to determine a cause of LVE faults, i.e. what processes are running when user hits LVE limits.Example
    • Notifications in old LVE-statistics are not accurate because they are based on average values for CPU, IO, IOPS.
    • Old LVE-statistics functionality is hard to extend.

    Major improvements and features

    • increased precision of statistics;
    • CPU usage is calculated  in terms of % of a single core (100% usage means one core);
    • lvestats-server emulates and tracks faults for CPU, IO, IOPS;
    • lvestats-server saves “snapshots” of user’s processes and queries for each “incident” - added new lve-read-snapshot utility;
    • improved notifications about hitting LVE limits (more informative and without false positives);
    • implemented ability to add custom plugins;
    • MySQL and PostGreSQL support;
    • more pretty, scalable, interactive charts;
    • snapshots include HTTP-requests.

    Note

    mod_proctitle has to be enabled for HTTP request collection to be available

    What features will be implemented in the future?

    • Notifications for control panels other than CPanel.
    • Burstable Limits/server health: We are monitoring server health ( LA , memory , idle CPU ) and automatically decreasing/increasing limits based on server health.
    • Reseller Limits: plugin would analyze usage per group of users (reseller’s usage), and do actions.
    • Suspend/notify plugin: would detect that user is being throttled for 10 minutes, and suspend him (just because), or notify, or increase limits.

    Installation and update

    To install, please execute:

    yum install lve-stats
    @@ -564,7 +564,7 @@
     

    After that each subdirectory of the /data/uids will be mounted for the appropriate user in CageFS. The /data/uids/1000 directory will be mounted for the user with UID 1000 and the /data/uids/1001 directory will be mounted for the user with UID 1001.

    Mounting users home directory inside CageFS

    CageFS 6.1-1 (and later) has improved mounting user’s home directory that is applied for users with home directories like /home/user or /homeN/user (where N = 0,1,..9).

    In such case, earlier versions of CageFS always mount user’s home directory to /home/user and create symlink /homeN -> /home when needed, so user’s home directory can be accessed both via /home/user and /homeN/user . This quirk leads to some rare incompatibilities between CageFS and other software (for example OpenCart), because real path of user’s home directory in CageFS and in real file system can differ.

    New CageFS mounts user’s home directory in a way that its real path in CageFS is always the same as in real file system. Additionally, CageFS searches for symlinks like /homeX -> /homeY and /homeX/user -> /homeY/user in real system and creates such symlinks in user’s CageFS when found.

    This new mounting mode is enabled by default. You can switch to old mounting mode by executing the following commands:

    touch /etc/cagefs/disable.home.dirs.search
     cagefsctl --force-update
     cagefsctl --remount-all
    -

    Note

    New mounting mode will be disabled automatically when "mounting base home directory" mode is enabled (mount_basedir=1 setting in /etc/cagefs/cagefs.base.home.dirs file).

    How to hide directory inside mount point

    Note

    For files outside a mount point, use blacklisting, see: Excluding files

    To hide directories inside a mount point, create a file in the /etc/cagefs/empty.dirs directory (you can use any name) with a list of directories to be hidden (these directories will look like empty for users in CageFS).

    Note

    Please do not edit the supplied config file (/etc/cagefs/empty.dirs/emptied_dirs.default).

    Example

    Let’s take a /var/www directory which contains the following folders: icons and html. To hide the /var/www directory content from users inside CageFS, we will do the following:

    • Create the custom.empty file with a single record: /var/www
    • Place the custom.empty file to the /etc/cagefs/empty.dirs directory
    • Run the cagefsctl --remount-all command

    Now, all users inside CageFS will see the /var/www directory as an empty directory even if there is /var/www/html in the /etc/cagefs/cagefs.mp.

    Base home directory

    If you have a custom setup where home directories are in a special format, like: /home/$USERNAME/data , you can specify it using regular expressions. This is needed by CageFS to create safe home space for end user, where no other users are visible.

    We will create empty: /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in that directory

    To do that, create a file: /etc/cagefs/cagefs.base.home.dirs

    With content like:

    ^/home/
    +

    Note

    New mounting mode will be disabled automatically when "mounting base home directory" mode is enabled (mount_basedir=1 setting in /etc/cagefs/cagefs.base.home.dirs file).

    How to hide directory inside mount point

    Note

    For files outside a mount point, use blacklisting, see: Excluding files

    To hide directories inside a mount point, create a file in the /etc/cagefs/empty.dirs directory (you can use any name) with a list of directories to be hidden (these directories will look like empty for users in CageFS).

    Note

    Please do not edit the supplied config file (/etc/cagefs/empty.dirs/emptied_dirs.default).

    Example

    Let’s take a /var/www directory which contains the following folders: icons and html. To hide the /var/www directory content from users inside CageFS, we will do the following:

    • Create the custom.empty file with a single record: /var/www
    • Place the custom.empty file to the /etc/cagefs/empty.dirs directory
    • Run the cagefsctl --remount-all command

    Now, all users inside CageFS will see the /var/www directory as an empty directory even if there is /var/www/html in the /etc/cagefs/cagefs.mp.

    Base home directory

    If you have a custom setup where home directories are in a special format, like: /home/$USERNAME/data , you can specify it using regular expressions. This is needed by CageFS to create safe home space for end user, where no other users are visible.

    We will create empty: /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in that directory

    To do that, create a file: /etc/cagefs/cagefs.base.home.dirs

    With content like:

    ^/home/
     ^/var/www/users/
     

    If there is no such file, the home directory without last component will be considered as a base dir, like with /home/$USERNAME we would create /var/cagefs/[prefix]/$USERNAME/home , and then mount /home/$USERNAME in there

    With /home/$USERNAME/data as a home dir, we would assume that /home/$USERNAME is the base directory, and we would create /var/cagefs/[prefix]/$USERNAME/home/$USERNAME/data and then we would mount /home/$USERNAME/data -- which would cause each user to see empty base directories for other users, exposing user names.

    Sharing home directory structure among users

    When you want to share directory structure among multiple users, you can add following line at the top of the /etc/cagefs/cagefs.base.home.dirs file. This is useful on the systems that support sites with multiple users, with different home directories inside the main 'site' directory.

    mount_basedir=1
     

    For example:

    user1 has home directory /var/www/vhosts/sitename.com/web_users/user1 user2 has home directory /var/www/vhosts/sitename.com/web_users/user2 site admin has home directory /var/www/vhosts/sitename.com

    So, content of /etc/cagefs/cagefs.base.home.dirs should be the following:

    mount_basedir=1
    @@ -1155,7 +1155,7 @@
     	lsapi_backend_max_process_time 300
     	lsapi_debug Off
     </IfModule>
    -

    In order to mod_lsapi PRO work lsapi.conf should be loaded to Apache through Include directive.

    For more detailed description of the module directives please visit Configuration reference.
    For installation guide mod_lsapi PRO please visit Installation.

    Configuration references

    mod_lsapi customization:

    Tuning LSPHP backend:

    Connection pool mode:

    CRIU support:

    PHP configuration management:

    Security:

    mod_lsapi customization

    lsapi_engine

    Syntax : lsapi_engine on/off
    Default : lsapi_engine off
    Context : httpd.conf, htaccess

    Description :
    Switching mod_lsapi handler on or off.


    lsapi_socket_path

    Syntax : lsapi_socket_path [path] Default : lsapi_socket_path /var/mod_lsapi
    Context : httpd.conf

    Description:
    Path to backend lsphp sockets. By default /var/mod_lsapi


    lsapi_poll_timeout

    Syntax : lsapi_poll_timeout [number]
    Default : lsapi_poll_timeout 300
    Context : httpd.conf, htaccess

    Description :
    Time to wait for response from the lsphp daemon, in seconds. 0 stands for infinity. For preventing long running processes which can use EP (limit number of entry processes). Default value is 300. Should be more or equal to 0. In the case of wrong format, the default value will be used.


    lsapi_per_user

    Syntax : lsapi_per_user On/Off
    Default : lsapi_per_user Off
    Context : httpd.conf

    Description :
    Invoke master lsPHP process not per VirtualHost but per account. When On, invoke backend not per VirtualHost but per account. Default value is Off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_output_buffering

    Syntax : lsapi_output_buffering On/Off
    Default : lsapi_output_buffering On
    Context : httpd.conf, virtualhost, htaccess

    Description :
    Enable or disable output buffering on Apache level. Default value is On.


    lsapi_disable_reject_mode

    Syntax : lsapi_disable_reject_mode On/Off
    Default : lsapi_disable_reject_mode Off
    Context : httpd.conf, virtualhost

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such request immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into infinite queue, until one or more LSPHP daemon becomes free. When HTTP request is rejected in REJECT mode, mod_lsapi will write into Apache error_log the following message: Connect to backend rejected, and the client will receive 507 HTTP response. By default LSPHP daemon in CloudLinux OS uses REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_on_exit

    Syntax : lsapi_terminate_backends_on_exit On/Off
    Default : lsapi_terminate_backends_on_exit On
    Context : httpd.conf

    Description :
    httpd.conf, On - stop lsphp services on apache restart, Off - leave live started lsphp services on apache restart (for php+opcache). The lsphp will not restart, even if Apache gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies On/Off
    Default : lsapi_avoid_zombies Off
    Context : httpd.conf, virtualhost

    Description :
    Enable or disable a mechanism to avoid creation of zombie processes by lsphp. Default value is Off.


    lsapi_use_req_hostname

    Syntax : lsapi_use_req_hostname On/Off
    Default : lsapi_use_req_hostname Off
    Context : httpd.conf, virtualhosts

    Description :
    By default, we are using hostname from the server_rec structure (off), it means that mod_lsapi takes hostname from the VirtualHost section of the configuration file. Using hostname from the request_rec structure (On) means that mod_lsapi takes hostname from the HOST section of the request. It could be useful for those who use dynamically generated configs for virtual hosts for example with mod_lua.


    lsapi_sentry

    Syntax : lsapi_sentry On/Off
    Default : lsapi_sentry On
    Context : httpd.conf

    Description :
    When this option is enabled, errors that occur in the operation of the mod_lsapi will be sent to the remote sentry server. You can see the error messages that were sent to the sentry server in the directory /var/log/mod_lsapi. If you do not want to send error notifications from your server, you can disable this directive in lsapi.conf.


    lsapi_debug

    Syntax : lsapi_debug On/Off
    Default : lsapi_debug Off
    Context : httpd.conf, virtualhost

    Description :
    Extended debug logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env VAR_NAME [VAR_VALUE]
    Default : -
    Context : httpd.conf

    Description :
    Pass env variable to lsphp. By default lsphp environment have only TEMP, TMP and PATH variables set.
    Example: lsapi_set_env TMP "/var/lsphp-tmp"
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.
    To change it, use explicitly lsapi_set_env_path option.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_set_env_path

    Syntax : lsapi_set_env_path [path(s)]
    Default : lsapi_set_env_path /usr/local/bin:/usr/bin:/bin
    Context : httpd.conf

    Description :
    Change PATH variable in the environment of lsPHP processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Default : lsapi_backend_children [EP]
    Context : httpd.conf

    Description :
    Sets maximum number of simultaneously running child backend processes. Optional, a default directive value is equal to 120. LSAPI_CHILDREN environment variable is set according to the following rules:

    • If NPROC and EP are unlimited, the directive value is used.
    • If NPROC is set to any limited value and the directive value is set to a number less than NPROC-1, the directive value is used.
    • If the value is bigger than NPROC-1 and EP is set to unlimited, NPROC-1 is used.
    • If the value is bigger than NPROC-1 and EP is set to any limited value, EP+1 is used.

    For example, with the default lve settings NPROC=100 and EP=20, the effective LSAPI_CHILDREN will be EP+1, that is LSAPI_CHILDREN=21.


    lsapi_backend_connect_tries

    Syntax : lsapi_backend_connect_tries [number]
    Default : lsapi_backend_connect_tries 20
    Context : httpd.conf

    Description :
    Number of retries to connects to lsPHP daemon.


    lsapi_backend_connect_timeout

    Syntax : lsapi_backend_connect_timeout [number]
    Default : lsapi_backend_connect_timeout 500000
    Context : httpd.conf

    Description :
    Number of usec to wait while lsPHP starts (if not started on request).


    lsapi_backend_max_process_time

    Syntax : lsapi_backend_max_process_time [number]
    Default : lsapi_backend_max_process_time 300
    Context : httpd.conf, virtualhost

    Description :
    Sets env variable LSAPI_MAX_PROCESS_TIME
    Optional. Default value is 300.
    Timeout to kill runaway processes.


    lsapi_backend_pgrp_max_idle

    Syntax : lsapi_backend_pgrp_max_idle [number]
    Default : lsapi_backend_pgrp_max_idle 30
    Context : httpd.conf

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds.
    Controls how long a control process will wait for a new request before it exits. # 0 stands for infinite.
    Optional, default value is 30.
    Should be more or equal to 0.


    lsapi_backend_use_own_log

    Syntax : lsapi_backend_use_own_log On/Off
    Default : lsapi_backend_use_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    Redirecting log output of backend processes from Apache error_log to dedicated log file or files, depending on value of lsapi_backend_common_own_log option. If Off, use Apache error log file for backend output, or separate file otherwise.


    lsapi_backend_common_own_log

    Syntax : lsapi_backend_common_own_log On/Off
    Default : lsapi_backend_common_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    It will be used only when lsapi_backend_use_own_log set to On. On - backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump On/Off
    Default : lsapi_backend_coredump Off
    Context : httpd.conf, htaccess

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it will be passed - core dump on lsphp crash will be created.
    Off by default.
    By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core file, you should set this environment variable. If set, regardless the value has been set to, core files will be created under the directory that the PHP script in.


    lsapi_backend_accept_notify

    Syntax : lsapi_backend_accept_notify On/Off
    Default : lsapi_backend_accept_notify On
    Context : httpd.conf, virtualhost

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes.This mode is incompatible with PHP 4.4.


    lsapi_backend_pgrp_max_reqs

    Syntax : lsapi_backend_prgrp_max_reqs [number]
    Default : lsapi_backend_max_reqs 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_pgrp_max_crashes

    Syntax : lsapi_backend_prgrp_max_crashes [number]
    Default : lsapi_backend_max_crashes 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [On/Off]

    Default: lsapi_backend_loglevel_info Off

    Context: httpd.conf, virtualhost

    Description: Controls which log level will be used to write PHP warnings and notices into Apache’s error_log. Optional, the default value is Off. In that case LOG_WARNING log level will be used. Otherwise, with On value, LOG_INFO log level will be used.


    lsapi_backend_oom_score_adj

    Syntax: lsapi_backend_oom_score_adj [number]

    Default: lsapi_backend_oom_score_adj 0

    Context: httpd.conf, virtualhost

    Description: This option can be used to apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked then desirable that lsphp processes are sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting value oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    lsapi_server_tweak

    Syntax: lsapi_server_tweak [On/Off]

    Default: lsapi_server_tweak Off

    Context: httpd.conf

    Description: This option, when switched on, allows the use of lsapi_set_env and lsapi_set_env_path config options in the virtualhost context.


    Connection pool mode

    lsapi_with_connection_pool

    Syntax : lsapi_with_connection_pool On/Off
    Default : lsapi_with_connection_pool Off
    Context : httpd.conf

    Description :
    On/Off - disable enable connect pool, default is Off.


    lsapi_backend_max_idle

    Syntax : lsapi_backend_max_idle [number]
    Default : lsapi_backend_max_idle 300
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of wrong format default value will be used. Optional, default value is 300.


    lsapi_backend_max_reqs

    Syntax : lsapi_backend_max_reqs [number]
    Default : lsapi_backend_max_reqs 10000
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of wrong format default value will be used. Optional, default value is 10000.


    CRIU support

    lsapi_criu

    Syntax : lsapi_criu On/Off
    Default : lsapi_criu Off
    Context : httpd.conf

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_socket_path

    Syntax : lsapi_criu_socket_path [path]
    Default : lsapi_criu_socket_path /var/run/criu/criu_service.socket
    Context : httpd.conf

    Description :
    Set path to socket for communication with criu service. Default: /var/run/criu/criu_service.socket.


    lsapi_criu_imgs_dir_path

    Syntax : lsapi_criu_imgs_dir_path [path]
    Default : lsapi_criu_imgs_dir_path /var/mod_lsapi/
    Context : httpd.conf

    Description :
    Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/mod_lsapi/


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Default : lsapi_backend_initial_start 0
    Context : httpd.conf

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm Off/Signals
    Default : lsapi_criu_use_shm Off
    Context : httpd.conf

    Description :
    Method of requests counting. Off - use shared memory. Signals - use signals from child processes to parent. Default: Off


    lsapi_backend_semtimedwait

    Syntax : lsapi_backend_semtimedwait On/Off
    Default : lsapi_backend_semtimedwait On
    Context : httpd.conf

    Description :
    Use semaphore for checking when lsphp process will be started. Speed of start lsphp increased with semaphore using. This method avoid cycles of waiting for lsphp start. Default: On.


    lsapi_reset_criu_on_apache_restart

    Syntax : lsapi_reset_criu_on_apache_restart On/Off
    Default : lsapi_reset_criu_on_apache_restart Off
    Context : httpd.conf, virtualhost

    Description :
    This option allows cleaning all CRIU images on Apache restart.
    Setting lsapi_reset_criu_on_apache_restart to On means that on each Apache restart the CRIU images which are stored in directory specified by lsapi_criu_imgs_dir_path directive will be recreated on new request to domain(only after restart).
    If this option set to Off then CRIU images won’t be recreated on Apache restart.


    lsapi_criu_debug

    Syntax: lsapi_criu_debug On/Off
    Default: lsapi_criu_debug Off
    Context: httpd.conf, virtualhost

    Description :
    Enable/disable CRIU related debug logging.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini On/Off
    Default : lsapi_process_phpini Off
    Context : httpd.conf, virtualhost, directory

    Description :
    Enable or disable phpini_* directive processing. Default value is Off.


    lsapi_phpini

    Syntax : lsapi_phpini [path]
    Default : lsapi_phpini -
    Context : httpd.conf, virtualhost, htaccess

    Description :
    When lsapi_process_phpini option switched to Off, these values will be silently ignored. lsapi_phpini values with absolute filename of php.ini file can be inserted into .htaccess files in order to set custom php.ini which will override/complement settings from system default php.ini.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Default : lsapi_phprc No
    Context : httpd.conf, virtualhost

    Description : The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example
    lsapi_phprc No
    lsapi_phprc Auto
    lsapi_phprc DocRoot
    lsapi_phprc Env
    lsapi_phprc /etc/


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Default : lsapi_tmpdir /tmp
    Context : httpd.conf, virtualhost

    Description :
    Set alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini On/Off
    Default : lsapi_enable_user_ini Off
    Context : httpd.conf, virtualhost

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is Off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir On/Off
    Default : lsapi_user_ini_homedir Off
    Context : httpd.conf, virtualhost

    Description :
    If lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in home directory also. Default value is Off.


    lsapi_keep_http200

    Syntax : lsapi_keep_http200 On/Off
    Default : lsapi_keep_http200 Off
    Context : httpd.conf, .htaccess

    Description :
    If set to On, always keep backend's response status as mod_php does. If set to Off, response status can be overridden by Apache as suphp does (in case of call via ErrorDocument directive).


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour On/Off
    Default : lsapi_mod_php_behaviour On
    Context : httpd.conf, virtualhost, directory

    Description :
    On/Off - disable php_* directives, default On.


    php_value, php_admin_value, php_flag, php_admin_flag

    Syntax : [php_value|php_admin_value|php_flag|php_admin_flag]
    Default :
    Context : httpd.conf, virtualhost, htaccess

    Description :
    mod_php emulation.


    Security

    lsapi_use_suexec

    Syntax : lsapi_use_suexec On/Off
    Default : lsapi_use_suexec On
    Context : httpd.conf

    Description :
    Use or not suexec to a target user.


    lsapi_user_group

    Syntax : lsapi_user_group [user_name] [group_name]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for requests.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for request.


    lsapi_use_default_uid

    Syntax : lsapi_use_default_uid On/Off
    Default : lsapi_use_default_uid On
    Context : httpd.conf

    Description :
    Use default Apache UID/GID if no uid/gid set. Values: On/Off. If Off, and no UID/GID set, error 503 will be returned.


    lsapi_target_perm

    Syntax : lsapi_target_perm On/Off
    Default : lsapi_target_perm Off
    Context : httpd.conf

    Description :
    Check target PHP script permissions. If set to On, lsapi will check that script is owned by the same user, as user under which it is being executed. Return 503 error if they don't match. Default: Off.


    lsapi_paranoid

    Syntax : lsapi_paranoid On/Off
    Default : lsapi_paranoid Off
    Context : httpd.conf

    Description :
    Check or not permissions of target php scripts. Optional, default value is Off.


    lsapi_check_document_root

    Syntax : lsapi_check_document_root On/Off
    Default : lsapi_check_document_root On
    Context : httpd.conf

    Description :
    Check or not owner of DOCUMENT_ROOT. Optional, default value is On.


    lsapi_disable_forced_pwd_var

    Syntax : lsapi_disable_forced_pwd_var On/Off
    Default : lsapi_disable_forced_pwd_var Off
    Context : httpd.conf, virtualhost

    Description :
    To disable addition of PWD variable. Default value is Off. If set to On, the PWD variable will not be added into a backend environment.


    lsapi_max_resend_buffer

    Syntax : lsapi_max_resend_buffer [number]tmp
    Default : lsapi_max_resend_buffer 200
    Context : httpd.conf, virtualhost

    Description :
    Maximum buffer in KiB to resend for request that has a body (like POST request body).

    See also Apache mod_lsapi PRO CLI tools.

    Troubleshooting

    Debugging mod_lsapi issues: error_log & sulsphp_log

    mod_lsapi errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.

    See next table for more details:

    error_logsulsphp_logSolution
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE IDuid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease pmem or vmem limits for the user uid.
    Error sending request: ReceiveLSHeader: nothing to read from backend socketNo need to check this log.lsphp was killed. It can be due to apache restart or lfd. If you see this message too often - change lsapi_terminate_backends_on_exit to Off in lsapi.conf or add to /etc/csf/csf.pignore the following lines: exe:/usr/local/bin/lsphp pexe:/opt/alt/php.*/usr/bin/lsphp
    Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0No need to check this log.lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact https://cloudlinux.zendesk.com/ so we can investigate the cause.
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refusedfile is writable by others: (///usr/local/bin/lsphp)Incorrect lsphp file permissions. For fixing: chmod 755 /usr/local/bin/lsphp cagefsctl --force-update.
    Could not determine uid/gid for requestNo need to check this log.UID/GID are not set in virtualhost. Set lsapi_use_default_uid On in lsapi.conf (it is On by default since 0.1-98 version, this solution is for older versions).
    Own id for script file (/xxxx/xxx/xxxx) is xxx; should be xxxxNo need to check this log.File is not owned by the user PHP executed by. To overwrite (insecure), set lsapi_target_perm Off in lsapi.conf.
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refusedEntering jail errorCheck if СageFS enabled. Try running cagefsctl --remount-all.
    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease PMEM limits for the user UID.
    Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN.

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)
    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease value of lsapi_backend_children for UID in vhost.conf or globally in lsapi.conf.
    fork() failed, please increase process limit: Cannot allocate memory

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)
    uid:(xxx); gid:(xxx); uid limit warning: EP should be < than NPROC, current EP: XX, NPROC: XX

    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp
    Increase NPROC limits for the UID. It should be greater than EP and lsapi_backend_children.
    Child process with pid: XXXXXX was killed by signal: 9, core dump: 0

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX
    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpThese errors occurs when the amount of PMEM limits is incommensurable with the number of EP. Increase PMEM limits or decrease EP number for the user UID.
    totBytesRead (X) != bodyLen (X), referer: XXXX

    Backend error on sending request(POST /XXXX HTTP/1.1); uri(/XXXX) content-length(X) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX)

    lsphp(XXXX): Child process with pid: XXXX was killed by signal: 15, core dump: 0
    No need to check this log.Increase LimitRequestBody (Apache) or/and SecRequestBodyNoFilesLimit (mod_security) configuration limits
    Connect to backend failed: connect to lsphp failed: 13No need to check this log.Check that mod_ruid2 is disabled
    Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)No need to check this log.Set lsapi_disable_reject_mode On in your lsapi.conf and reload Apache. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit Configuration Reference for more info.

    Non-standard apache user

    If apache runs under a username other than "apache" or "nobody" , you should rebuild sulsphp (where username is built in for security reasons) with corresponding username:

    yum install liblsapi liblsapi-devel   
    +

    In order to mod_lsapi PRO work lsapi.conf should be loaded to Apache through Include directive.

    For more detailed description of the module directives please visit Configuration reference.
    For installation guide mod_lsapi PRO please visit Installation.

    Configuration references

    mod_lsapi customization:

    Tuning LSPHP backend:

    Connection pool mode:

    CRIU support:

    PHP configuration management:

    Security:

    mod_lsapi customization

    lsapi_engine

    Syntax : lsapi_engine on/off
    Default : lsapi_engine off
    Context : httpd.conf, htaccess

    Description :
    Switching mod_lsapi handler on or off.


    lsapi_socket_path

    Syntax : lsapi_socket_path [path] Default : lsapi_socket_path /var/mod_lsapi
    Context : httpd.conf

    Description:
    Path to backend lsphp sockets. By default /var/mod_lsapi


    lsapi_poll_timeout

    Syntax : lsapi_poll_timeout [number]
    Default : lsapi_poll_timeout 300
    Context : httpd.conf, htaccess

    Description :
    Time to wait for response from the lsphp daemon, in seconds. 0 stands for infinity. For preventing long running processes which can use EP (limit number of entry processes). Default value is 300. Should be more or equal to 0. In the case of wrong format, the default value will be used.


    lsapi_per_user

    Syntax : lsapi_per_user On/Off
    Default : lsapi_per_user Off
    Context : httpd.conf

    Description :
    Invoke master lsPHP process not per VirtualHost but per account. When On, invoke backend not per VirtualHost but per account. Default value is Off. It is possible, for example, to set it to On in global config file and to Off in config files of some particular Virtual Hosts. Then these Virtual Hosts will have a dedicated backend process, while others will have backend processes shared on account basis.


    lsapi_output_buffering

    Syntax : lsapi_output_buffering On/Off
    Default : lsapi_output_buffering On
    Context : httpd.conf, virtualhost, htaccess

    Description :
    Enable or disable output buffering on Apache level. Default value is On.


    lsapi_disable_reject_mode

    Syntax : lsapi_disable_reject_mode On/Off
    Default : lsapi_disable_reject_mode Off
    Context : httpd.conf, virtualhost

    Description :
    If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such request immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into infinite queue, until one or more LSPHP daemon becomes free. When HTTP request is rejected in REJECT mode, mod_lsapi will write into Apache error_log the following message: Connect to backend rejected, and the client will receive 507 HTTP response. By default LSPHP daemon in CloudLinux OS uses REJECT mode. It can be switched off with this option.


    lsapi_terminate_backends_on_exit

    Syntax : lsapi_terminate_backends_on_exit On/Off
    Default : lsapi_terminate_backends_on_exit On
    Context : httpd.conf

    Description :
    httpd.conf, On - stop lsphp services on apache restart, Off - leave live started lsphp services on apache restart (for php+opcache). The lsphp will not restart, even if Apache gets restarted.


    lsapi_avoid_zombies

    Syntax : lsapi_avoid_zombies On/Off
    Default : lsapi_avoid_zombies Off
    Context : httpd.conf, virtualhost

    Description :
    Enable or disable a mechanism to avoid creation of zombie processes by lsphp. Default value is Off.


    lsapi_use_req_hostname

    Syntax : lsapi_use_req_hostname On/Off
    Default : lsapi_use_req_hostname Off
    Context : httpd.conf, virtualhosts

    Description :
    By default, we are using hostname from the server_rec structure (off), it means that mod_lsapi takes hostname from the VirtualHost section of the configuration file. Using hostname from the request_rec structure (On) means that mod_lsapi takes hostname from the HOST section of the request. It could be useful for those who use dynamically generated configs for virtual hosts for example with mod_lua.


    lsapi_sentry

    Syntax : lsapi_sentry On/Off
    Default : lsapi_sentry On
    Context : httpd.conf

    Description :
    When this option is enabled, errors that occur in the operation of the mod_lsapi will be sent to the remote sentry server. You can see the error messages that were sent to the sentry server in the directory /var/log/mod_lsapi. If you do not want to send error notifications from your server, you can disable this directive in lsapi.conf.


    lsapi_debug

    Syntax : lsapi_debug On/Off
    Default : lsapi_debug Off
    Context : httpd.conf, virtualhost

    Description :
    Extended debug logging.


    Tuning LSPHP backend

    lsapi_set_env

    Syntax : lsapi_set_env VAR_NAME [VAR_VALUE]
    Default : -
    Context : httpd.conf

    Description :
    Pass env variable to lsphp. By default lsphp environment have only TEMP, TMP and PATH variables set.
    Example: lsapi_set_env TMP "/var/lsphp-tmp"
    Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons.
    To change it, use explicitly lsapi_set_env_path option.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_set_env_path

    Syntax : lsapi_set_env_path [path(s)]
    Default : lsapi_set_env_path /usr/local/bin:/usr/bin:/bin
    Context : httpd.conf

    Description :
    Change PATH variable in the environment of lsPHP processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set.

    Beta

    When the lsapi_server_tweak option is switched On, this option can be used in the virtualhost context.


    lsapi_backend_children

    Syntax : lsapi_backend_children [number]
    Default : lsapi_backend_children [EP]
    Context : httpd.conf

    Description :
    Sets maximum number of simultaneously running child backend processes. Optional, a default directive value is equal to 120. LSAPI_CHILDREN environment variable is set according to the following rules:

    • If NPROC and EP are unlimited, the directive value is used.
    • If NPROC is set to any limited value and the directive value is set to a number less than NPROC-1, the directive value is used.
    • If the value is bigger than NPROC-1 and EP is set to unlimited, NPROC-1 is used.
    • If the value is bigger than NPROC-1 and EP is set to any limited value, EP+1 is used.

    For example, with the default lve settings NPROC=100 and EP=20, the effective LSAPI_CHILDREN will be EP+1, that is LSAPI_CHILDREN=21.


    lsapi_backend_connect_tries

    Syntax : lsapi_backend_connect_tries [number]
    Default : lsapi_backend_connect_tries 20
    Context : httpd.conf

    Description :
    Number of retries to connects to lsPHP daemon.


    lsapi_backend_connect_timeout

    Syntax : lsapi_backend_connect_timeout [number]
    Default : lsapi_backend_connect_timeout 500000
    Context : httpd.conf

    Description :
    Number of usec to wait while lsPHP starts (if not started on request).


    lsapi_backend_max_process_time

    Syntax : lsapi_backend_max_process_time [number]
    Default : lsapi_backend_max_process_time 300
    Context : httpd.conf, virtualhost

    Description :
    Sets env variable LSAPI_MAX_PROCESS_TIME
    Optional. Default value is 300.
    Timeout to kill runaway processes.


    lsapi_backend_pgrp_max_idle

    Syntax : lsapi_backend_pgrp_max_idle [number]
    Default : lsapi_backend_pgrp_max_idle 30
    Context : httpd.conf

    Description :
    Sets env variable LSAPI_PGRP_MAX_IDLE, in seconds.
    Controls how long a control process will wait for a new request before it exits. # 0 stands for infinite.
    Optional, default value is 30.
    Should be more or equal to 0.


    lsapi_backend_use_own_log

    Syntax : lsapi_backend_use_own_log On/Off
    Default : lsapi_backend_use_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    Redirecting log output of backend processes from Apache error_log to dedicated log file or files, depending on value of lsapi_backend_common_own_log option. If Off, use Apache error log file for backend output, or separate file otherwise.


    lsapi_backend_common_own_log

    Syntax : lsapi_backend_common_own_log On/Off
    Default : lsapi_backend_common_own_log Off
    Context : httpd.conf, virtualhost

    Description :
    It will be used only when lsapi_backend_use_own_log set to On. On - backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file.


    lsapi_backend_coredump

    Syntax : lsapi_backend_coredump On/Off
    Default : lsapi_backend_coredump Off
    Context : httpd.conf, htaccess

    Description :
    env variable LSAPI_ALLOW_CORE_DUMP (On or Off). Pass LSAPI_ALLOW_CORE_DUMP to lsphp or not. If it will be passed - core dump on lsphp crash will be created.
    Off by default.
    By default LSAPI application will not leave a core dump file when crashed. If you want to have LSAPI PHP dump a core file, you should set this environment variable. If set, regardless the value has been set to, core files will be created under the directory that the PHP script in.


    lsapi_backend_accept_notify

    Syntax : lsapi_backend_accept_notify On/Off
    Default : lsapi_backend_accept_notify On
    Context : httpd.conf, virtualhost

    Description :
    Switch LSAPI_ACCEPT_NOTIFY mode for lsphp. This option can be used both in Global and VirtualHost scopes.This mode is incompatible with PHP 4.4.


    lsapi_backend_pgrp_max_reqs

    Syntax : lsapi_backend_prgrp_max_reqs [number]
    Default : lsapi_backend_max_reqs 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many requests a control process will process before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of requests.


    lsapi_backend_pgrp_max_crashes

    Syntax : lsapi_backend_prgrp_max_crashes [number]
    Default : lsapi_backend_max_crashes 0
    Context : httpd.conf, virtualhost

    Description :
    Controls how many crashes of its worker processes a control process will detect before it exits. Should be more or equal to 0. In the case of wrong format, a default value will be used. Optional, the default value is 0, which means an unlimited number of crashes.


    lsapi_backend_loglevel_info

    Syntax: lsapi_backend_loglevel_info [On/Off]

    Default: lsapi_backend_loglevel_info Off

    Context: httpd.conf, virtualhost

    Description: Controls which log level will be used to write PHP warnings and notices into Apache’s error_log. Optional, the default value is Off. In that case LOG_WARNING log level will be used. Otherwise, with On value, LOG_INFO log level will be used.


    lsapi_backend_oom_score_adj

    Syntax: lsapi_backend_oom_score_adj [number]

    Default: lsapi_backend_oom_score_adj 0

    Context: httpd.conf, virtualhost

    Description: This option can be used to apply oom_score_adj values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. When your server becomes low on free memory and an OOM killer is invoked then desirable that lsphp processes are sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. For more information on setting value oom_score_adj, see the page https://man7.org/linux/man-pages/man5/proc.5.html


    lsapi_server_tweak

    Syntax: lsapi_server_tweak [On/Off]

    Default: lsapi_server_tweak Off

    Context: httpd.conf

    Description: This option, when switched on, allows the use of lsapi_set_env and lsapi_set_env_path config options in the virtualhost context.


    Connection pool mode

    lsapi_with_connection_pool

    Syntax : lsapi_with_connection_pool On/Off
    Default : lsapi_with_connection_pool Off
    Context : httpd.conf

    Description :
    On/Off - disable enable connect pool, default is Off.


    lsapi_backend_max_idle

    Syntax : lsapi_backend_max_idle [number]
    Default : lsapi_backend_max_idle 300
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how long a worker process will wait for a new request before it exits. 0 stands for infinite. Should be more or equal to 0. In the case of wrong format default value will be used. Optional, default value is 300.


    lsapi_backend_max_reqs

    Syntax : lsapi_backend_max_reqs [number]
    Default : lsapi_backend_max_reqs 10000
    Context : httpd.conf

    Description :
    It is relevant only with lsapi_with_connection_pool option switched on. Controls how many requests a worker process will process before it exits. Should be more than 0. In the case of wrong format default value will be used. Optional, default value is 10000.


    CRIU support

    lsapi_criu

    Syntax : lsapi_criu On/Off
    Default : lsapi_criu Off
    Context : httpd.conf

    Description :
    Enable/disable CRIU for lsphp freezing. Default: Off.


    lsapi_criu_socket_path

    Syntax : lsapi_criu_socket_path [path]
    Default : lsapi_criu_socket_path /var/run/criu/criu_service.socket
    Context : httpd.conf

    Description :
    Set path to socket for communication with criu service. Default: /var/run/criu/criu_service.socket.


    lsapi_criu_imgs_dir_path

    Syntax : lsapi_criu_imgs_dir_path [path]
    Default : lsapi_criu_imgs_dir_path /var/mod_lsapi/
    Context : httpd.conf

    Description :
    Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/mod_lsapi/


    lsapi_backend_initial_start

    Syntax : lsapi_backend_initial_start [number]
    Default : lsapi_backend_initial_start 0
    Context : httpd.conf

    Description :
    Number of requests to virtualhost, when lsphp will be freezed. Default: 0 - means disable freezing.


    lsapi_criu_use_shm

    Syntax : lsapi_criu_use_shm Off/Signals
    Default : lsapi_criu_use_shm Off
    Context : httpd.conf

    Description :
    Method of requests counting. Off - use shared memory. Signals - use signals from child processes to parent. Default: Off


    lsapi_backend_semtimedwait

    Syntax : lsapi_backend_semtimedwait On/Off
    Default : lsapi_backend_semtimedwait On
    Context : httpd.conf

    Description :
    Use semaphore for checking when lsphp process will be started. Speed of start lsphp increased with semaphore using. This method avoid cycles of waiting for lsphp start. Default: On.


    lsapi_reset_criu_on_apache_restart

    Syntax : lsapi_reset_criu_on_apache_restart On/Off
    Default : lsapi_reset_criu_on_apache_restart Off
    Context : httpd.conf, virtualhost

    Description :
    This option allows cleaning all CRIU images on Apache restart.
    Setting lsapi_reset_criu_on_apache_restart to On means that on each Apache restart the CRIU images which are stored in directory specified by lsapi_criu_imgs_dir_path directive will be recreated on new request to domain(only after restart).
    If this option set to Off then CRIU images won’t be recreated on Apache restart.


    lsapi_criu_debug

    Syntax: lsapi_criu_debug On/Off
    Default: lsapi_criu_debug Off
    Context: httpd.conf, virtualhost

    Description :
    Enable/disable CRIU related debug logging.


    PHP configuration management

    lsapi_process_phpini

    Syntax : lsapi_process_phpini On/Off
    Default : lsapi_process_phpini Off
    Context : httpd.conf, virtualhost, directory

    Description :
    Enable or disable phpini_* directive processing. Default value is Off.


    lsapi_phpini

    Syntax : lsapi_phpini [path]
    Default : lsapi_phpini -
    Context : httpd.conf, virtualhost, htaccess

    Description :
    When lsapi_process_phpini option switched to Off, these values will be silently ignored. lsapi_phpini values with absolute filename of php.ini file can be inserted into .htaccess files in order to set custom php.ini which will override/complement settings from system default php.ini.


    lsapi_phprc

    Syntax : lsapi_phprc [No | Env | Auto | DocRoot]
    Default : lsapi_phprc No
    Context : httpd.conf, virtualhost

    Description : The value of PHPRC env variable.
    Special values are "No", "Env", "Auto" and "DocRoot".
    Default value is "No" - without PHPRC at all.
    "Auto" value stands for php.ini from DocumentRoot of the corresponding VirtualHost if it is present, or from user's home directory otherwise "DocRoot" value stands for php.ini from DocumentRoot of the corresponding VirtualHost.
    "Env" value for using PHPRC from the environment, to set it with SetEnv config option, for example
    lsapi_phprc No
    lsapi_phprc Auto
    lsapi_phprc DocRoot
    lsapi_phprc Env
    lsapi_phprc /etc/


    lsapi_tmpdir

    Syntax : lsapi_tmpdir [path]
    Default : lsapi_tmpdir /tmp
    Context : httpd.conf, virtualhost

    Description :
    Set alternate request body temporary files directory.


    lsapi_enable_user_ini

    Syntax : lsapi_enable_user_ini On/Off
    Default : lsapi_enable_user_ini Off
    Context : httpd.conf, virtualhost

    Description :
    Enable .user.ini files for backend. Same as suphp, php-fpm and fcgid mechanism of .user.ini. Default value is Off.


    lsapi_user_ini_homedir

    Syntax : lsapi_user_ini_homedir On/Off
    Default : lsapi_user_ini_homedir Off
    Context : httpd.conf, virtualhost

    Description :
    If lsapi_enable_user_ini option is set to On, then enable/disable processing .user.ini file in home directory also. Default value is Off.


    lsapi_keep_http200

    Syntax : lsapi_keep_http200 On/Off
    Default : lsapi_keep_http200 Off
    Context : httpd.conf, .htaccess

    Description :
    If set to On, always keep backend's response status as mod_php does. If set to Off, response status can be overridden by Apache as suphp does (in case of call via ErrorDocument directive).


    lsapi_mod_php_behaviour

    Syntax : lsapi_mod_php_behaviour On/Off
    Default : lsapi_mod_php_behaviour On
    Context : httpd.conf, virtualhost, directory

    Description :
    On/Off - disable php_* directives, default On.


    php_value, php_admin_value, php_flag, php_admin_flag

    Syntax : [php_value|php_admin_value|php_flag|php_admin_flag]
    Default :
    Context : httpd.conf, virtualhost, htaccess

    Description :
    mod_php emulation.


    Security

    lsapi_use_suexec

    Syntax : lsapi_use_suexec On/Off
    Default : lsapi_use_suexec On
    Context : httpd.conf

    Description :
    Use or not suexec to a target user.


    lsapi_user_group

    Syntax : lsapi_user_group [user_name] [group_name]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for requests.


    lsapi_uid_gid

    Syntax : lsapi_uid_gid [uid] [gid]
    Default : -
    Context : httpd.conf, virtualhost, directory

    Description :
    Set user & group for request.


    lsapi_use_default_uid

    Syntax : lsapi_use_default_uid On/Off
    Default : lsapi_use_default_uid On
    Context : httpd.conf

    Description :
    Use default Apache UID/GID if no uid/gid set. Values: On/Off. If Off, and no UID/GID set, error 503 will be returned.


    lsapi_target_perm

    Syntax : lsapi_target_perm On/Off
    Default : lsapi_target_perm Off
    Context : httpd.conf

    Description :
    Check target PHP script permissions. If set to On, lsapi will check that script is owned by the same user, as user under which it is being executed. Return 503 error if they don't match. Default: Off.


    lsapi_paranoid

    Syntax : lsapi_paranoid On/Off
    Default : lsapi_paranoid Off
    Context : httpd.conf

    Description :
    Check or not permissions of target php scripts. Optional, default value is Off.


    lsapi_check_document_root

    Syntax : lsapi_check_document_root On/Off
    Default : lsapi_check_document_root On
    Context : httpd.conf

    Description :
    Check or not owner of DOCUMENT_ROOT. Optional, default value is On.


    lsapi_disable_forced_pwd_var

    Syntax : lsapi_disable_forced_pwd_var On/Off
    Default : lsapi_disable_forced_pwd_var Off
    Context : httpd.conf, virtualhost

    Description :
    To disable addition of PWD variable. Default value is Off. If set to On, the PWD variable will not be added into a backend environment.


    lsapi_max_resend_buffer

    Syntax : lsapi_max_resend_buffer [number]tmp
    Default : lsapi_max_resend_buffer 200
    Context : httpd.conf, virtualhost

    Description :
    Maximum buffer in KiB to resend for request that has a body (like POST request body).

    See also Apache mod_lsapi PRO CLI tools.

    Troubleshooting

    Debugging mod_lsapi issues: error_log & sulsphp_log

    mod_lsapi errors will be located in error_log and sulsphp_log. Note that errors can appear in both logs at the same time, and you might need to refer to both of them to solve the issue.

    See next table for more details:

    error_logsulsphp_logSolution
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refused. Increase memory limit for LVE IDuid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease pmem or vmem limits for the user uid.
    Error sending request: ReceiveLSHeader: nothing to read from backend socketNo need to check this log.lsphp was killed. It can be due to apache restart or lfd. If you see this message too often - change lsapi_terminate_backends_on_exit to Off in lsapi.conf or add to /etc/csf/csf.pignore the following lines: exe:/usr/local/bin/lsphp pexe:/opt/alt/php.*/usr/bin/lsphp
    Error sending request (lsphp is killed?): ReceiveLSHeader: nothing to read from backend socket, referer: http://XXXXXXX Child process with pid: XXXXX was killed by signal: 11, core dump: 0No need to check this log.lsphp has crashed. Next slide will explain what to do (core dump creating). Also, check configuration options for apc and suhosin in php.ini. Once you have a core file generated at DocumentRoot contact https://cloudlinux.zendesk.com/ so we can investigate the cause.
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refusedfile is writable by others: (///usr/local/bin/lsphp)Incorrect lsphp file permissions. For fixing: chmod 755 /usr/local/bin/lsphp cagefsctl --force-update.
    Could not determine uid/gid for requestNo need to check this log.UID/GID are not set in virtualhost. Set lsapi_use_default_uid On in lsapi.conf (it is On by default since 0.1-98 version, this solution is for older versions).
    Own id for script file (/xxxx/xxx/xxxx) is xxx; should be xxxxNo need to check this log.File is not owned by the user PHP executed by. To overwrite (insecure), set lsapi_target_perm Off in lsapi.conf.
    Could not connect to lsphp backend: connect to lsphp failed: 111 Connection refusedEntering jail errorCheck if СageFS enabled. Try running cagefsctl --remount-all.
    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease PMEM limits for the user UID.
    Reached max children process limit: XX, extra: 0, current: XX, please increase LSAPI_CHILDREN.

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)
    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpIncrease value of lsapi_backend_children for UID in vhost.conf or globally in lsapi.conf.
    fork() failed, please increase process limit: Cannot allocate memory

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: backend process reset connection: errno 104 (possibly memory limit for LVE ID XXXX too small)
    uid:(xxx); gid:(xxx); uid limit warning: EP should be < than NPROC, current EP: XX, NPROC: XX

    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphp
    Increase NPROC limits for the UID. It should be greater than EP and lsapi_backend_children.
    Child process with pid: XXXXXX was killed by signal: 9, core dump: 0

    Backend error on sending request(GET /XXXX HTTP/1.1); uri(/XXXX) content-length(0) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX
    uid: (xxx/xxxxxxxx) gid: (xxx/xxxxxxxxxx) cmd: /usr/local/bin/lsphpThese errors occurs when the amount of PMEM limits is incommensurable with the number of EP. Increase PMEM limits or decrease EP number for the user UID.
    totBytesRead (X) != bodyLen (X), referer: XXXX

    Backend error on sending request(POST /XXXX HTTP/1.1); uri(/XXXX) content-length(X) (lsphp is killed?): ReceiveAckHdr: nothing to read from backend socket (LVE ID XXXX)

    lsphp(XXXX): Child process with pid: XXXX was killed by signal: 15, core dump: 0
    No need to check this log.Increase LimitRequestBody (Apache) or/and SecRequestBodyNoFilesLimit (mod_security) configuration limits
    Connect to backend failed: connect to lsphp failed: 13No need to check this log.Check that mod_ruid2 is disabled
    Connect to backend rejected on sending request(POST /XXXXX HTTP/1.1); uri(/XXXXX)No need to check this log.Set lsapi_disable_reject_mode On in your lsapi.conf and reload Apache. This way LSPHP daemon will put requests that cannot be served by LSPHP daemon right away into infinite queue, until one or more LSPHP daemon becomes free. Visit Configuration Reference for more info.

    Non-standard apache user

    If apache runs under a username other than "apache" or "nobody" , you should rebuild sulsphp (where username is built in for security reasons) with corresponding username:

    yum install liblsapi liblsapi-devel   
     cd ~$ wget [https://repo.cloudlinux.com/cloudlinux/sources/da/mod_lsapi.tar.gz](https://repo.cloudlinux.com/cloudlinux/sources/da/mod_lsapi.tar.gz)  
     tar zxvf mod_lsapi.tar.gz  
     cd mod-lsapi-0.1-37  
    @@ -1390,7 +1390,7 @@
     make
     make install
     
    • Apache Module Identifier: hostinglimits_module
    • Source Files: mod_hostinglimits.c
    • Compatibility: MPM prefork, worker, event, ITK

    Directives

    DescriptionMakes sure that for any virtual hosts, only files owned by user specified via SuexecUserGroup or other ways as described above are served. For files owned by any other user apache will return Access Denied error. The directive will not affect VirtualHost without user id specified, or with uid < 100
    SyntaxSecureLinks On
    DefaultSecureLinks Off
    Contextserver config

    Prevents apache from serving files not owned by user, stopping symlink attacks against php config files.

    Example

    SecureLinks On
    -

    SkipErrors

    DescriptionAllow apache to continue if LVE is not available
    SyntaxSkipErrors On
    DefaultSkipErrors On
    Contextserver config

    Prevents Apache from exiting if LVE is not available.

    Example

    SkipErrors Off
    +

    SkipErrors

    DescriptionAllow apache to continue if LVE is not available
    SyntaxSkipErrors On
    DefaultSkipErrors On
    Contextserver config
    Statusdeprecated

    Prevents Apache from exiting if LVE is not available.

    Example

    SkipErrors Off
     

    AllowedHandlers

    DescriptionList of handlers that should be placed into LVE, support regexp
    SyntaxAllowedHandlers cgi-script %^php% my-script
    Defaultcgi-script %php% fcgid-script application/x-miva-compiled
    Contextserver config

    This directive allows to list handlers which will be intercepted and placed into LVE.

    Examples

    • Match requests handled by cgi-script handler:

      AllowedHandlers cgi-script 
       
    • Match all requests:

      AllowedHandlers *
       
    • Match all requests that handled by handler that contains PHP:

      AllowedHandlers %php%
      @@ -1539,6 +1539,6 @@
       

      Apache suexec module

      General information and requirements

      This module is used by the Apache HTTP Server to switch to another user before executing CGI programs. The suEXEC feature provides users of the Apache HTTP Server with the ability to run CGI and SSI programs under user IDs different from the user ID of the calling web server (apache/nobody). Normally, when a CGI or SSI program executes, it runs as the same user who is running the web server.

      If we are talking about shared hosting where different accounts are launched on the same server, the installation of this module is necessary to ensure security.

      How does it work with CloudLinux OS?

      The DirectAdmin and CloudLinux OS (for httpd, httpd24-httpd and cPanel EasyApache 4) both provide a patched version of suexec. For other distributions you can use patches available here: https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz

      1. Besides the ability to run CGI programs under user IDs, suexec with CloudLinux OS patch adds the ability to run that script under CageFS.

      NOTE

      Therefore, this module is necessary for the proper work of PHP Selector.

      1. This module is also necessary for the proper work of mod_hostinglimits. The SuexecUserGroup directive indicates for mod_hostinglimits in which LVE the user process should be put in.

      Configuration

      SuexecUserGroup Directive

      Syntax: SuexecUserGroup User Group

      Context: httpd.conf, virtualhost

      Description: The SuexecUserGroup directive allows you to specify a user and a group for CGI programs to run as. Startup will fail if this directive is specified but the suEXEC feature is disabled.

      Note

      Control panels such as cPanel, Plesk, and DirectAdmin add this directive to the Apache configuration automatically when creating a domain. If you use the server without a control panel, make sure this directive is added for each virtual host.

      Installation

      The mod_suexec installation process varies depending on the control panel and Apache.

      Installing on cPanel servers with EasyApache 4

      Via command line

      1. Install mod_suexec through YUM package manager as follows:
      yum install ea-apache24-mod_suexec
       

      NOTE

      ea-apache24-mod_suexec conflicts with the mod_ruid2 therefore, before installing the module, remove ea-apache24-mod_ruid2 as follows: $ yum remove ea-apache24-mod_ruid2

      1. Now, when the module is installed, restart Apache:
      service httpd restart
       

      Note

      If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

      Via administrator interface

      1. Open EasyApache4 page.
      2. Click Customize for Currently installed Packages.

      1. Click Apache Modules. Find mod_suexec and click Yes to install it.

      1. Select Review and Provision.

      1. Wait while Provision will be finished.

        Note

        If you use CageFS + PHP Selector, you should run the cagefsctl --force-update command.

      Installing on Plesk servers

      This module is integrated into Apache for Plesk control panel by default.

      Installing on DirectAdmin servers

      This module is integrated into Apache for DirectAdmin control panel by default.

      Installing on servers with no control panel

      This module is integrated into httpd Apache rpm provided by Cloudlinux OS by default.

      If you are using an alternative Apache - httpd24, nothing has to be done as this module is also integrated into httpd24-httpd Apache rpm provided by Cloudlinux by default.

    - + diff --git a/cloudlinuxos/cloudlinux_os_kernel/index.html b/cloudlinuxos/cloudlinux_os_kernel/index.html index f5ae209a..faa38e7a 100644 --- a/cloudlinuxos/cloudlinux_os_kernel/index.html +++ b/cloudlinuxos/cloudlinux_os_kernel/index.html @@ -51,7 +51,7 @@ })(); CloudLinux OS kernel - +
    sidebar hamburger menu

    CloudLinux OS kernel

    This documentation describes specific features of the CloudLinux kernel. In other cases the kernel has the same features and innovations as any similar RHEL kernel. More information about the actual kernel changes and releases can be obtained from our changelog.

    CL9 LTS kernel

    In CL9 we don’t have our own kernel, instead we use AlmaLinux’s one which gets regular upstream updates.

    For stability purposes we have also prepared the LTS (Long Term Support) kernel which is older than AlmaLinux by upstream version but has all security fixes / high scored CVEs.

    We recommend this kernel as it minimizes changes while maintaining comprehensive CVE coverage.

    How To Install

    Run the following commands:

    dnf install -y --allowerasing kernel-lts kmod-lve-lts perf-lts bpftool-lts
    @@ -67,9 +67,9 @@
     
    fs.enforce_symlinksifowner = 0do not check symlink ownership
    fs.enforce_symlinksifowner = 1deny if symlink ownership doesn’t match target, and process gid matches _symlinkown_gid
    fs.enforce_symlinksifowner = 2deny if a process is in LVE or symlink ownership doesn’t match target, and process gid matches _symlinkown_gid

    When fs.enforce_symlinksifowner set to 1, processes with GID 48 will not be able to follow symlinks if they are owned by user1 , but point to file owned user2 .

    fs.symlinkown_gid

    On standard Apache installation, this webserver is usually running under GID 48. On cPanel servers, Apache is running under user nobody, GID 99.

    To change GID of processes that cannot follow symlink, edit the file /etc/sysctl.conf , add the line:

    fs.symlinkown_gid = XX
     

    And execute:

    sysctl -p
     

    To disable symlink owner match protection feature, set fs.enforce_symlinksifowner = 0 in /etc/sysctl.conf , and execute:

    sysctl -p
    -

    Note

    fs.symlinkown_gid parameter values for httpd service user and fs.proc_super_gid for nagios service user is written to /etc/sysctl.d/90-cloudlinux.conf.

    Warning

    When used outside CageFS (from cPanel tools for instance), fs.protected_symlinks_create isn't sufficient for symlink protection. To fully protect symlink access in this case, use fs.process_symlinks_by_task=1 in addition to fs.protected_symlinks_create=1.

    CageFS is extremely powerful at stopping most information disclosure attacks, where a hacker could read sensitive files like /etc/passwd .

    Yet, CageFS does not work in each and every situation. For example, on cPanel servers, it is not enabled in WebDAV server, cPanel file manager and webmail, as well as some FTP servers don’t include proper change rooting.

    This allows an attacker to create symlink or hardlink to a sensitive file like /etc/passwd and then use WebDAV , filemanager, or webmail to read the content of that file.

    You can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own.

    This is done by set following kernel options to 1:

    fs.protected_symlinks_create = 1
    +

    Note

    fs.symlinkown_gid parameter values for httpd service user and fs.proc_super_gid for nagios service user is written to /etc/sysctl.d/90-cloudlinux.conf.

    Warning

    When used outside CageFS (from cPanel tools for instance), fs.protected_symlinks_create isn't sufficient for symlink protection. To fully protect symlink access in this case, use fs.process_symlinks_by_task=1 in addition to fs.protected_symlinks_create=1.

    CageFS is extremely powerful at stopping most information disclosure attacks, where a hacker could read sensitive files like /etc/passwd .

    Yet, CageFS does not work in each and every situation. For example, on cPanel servers, it is not enabled in WebDAV server, cPanel file manager and webmail, as well as some FTP servers don’t include proper change rooting.

    This allows an attacker to create symlink or hardlink to a sensitive file like /etc/passwd and then use WebDAV , filemanager, or webmail to read the content of that file.

    You can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own.

    This is done by set following kernel options to 1:

    fs.protected_symlinks_create = 1
     fs.protected_hardlinks_create = 1
    -

    We do not recommend to use protected_symlinks option for cPanel users as it might break some of the cPanel functionality. Please read the known issues section before enabling this feature.

    Note

    This option only available on CloudLinux 7 Hybrid or on CloudLinux 8. Also please note that this feature is available for cPanel only.

    This parameter is needed to protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID.

    To enable the protection for CloudLinux OS, set the fs.process_symlinks_by_task parameter to 1:

    fs.process_symlinks_by_task=1
    +

    We do not recommend to use protected_symlinks option for cPanel users as it might break some of the cPanel functionality. Please read the known issues section before enabling this feature.

    Note

    This option only available on CloudLinux 7 Hybrid or on CloudLinux 8. Also please note that this feature is available for cPanel only.

    This parameter is needed to protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID.

    To enable the protection for CloudLinux OS, set the fs.process_symlinks_by_task parameter to 1:

    fs.process_symlinks_by_task=1
     

    To disable the protection for CloudLinux OS 7 hybrid, set the fs.process_symlinks_by_task parameter to 0:

    fs.process_symlinks_by_task=0
     

    Here are some examples of what may go wrong on cPanel servers. If fs.protected_symlinks_create=1 is set on the server, it can cause the following issues:

    • rsync is failed

    If you use the rsync to copy/transfer files and they contain symlinks, you'll see the errors like these:

    "rsync error: some files could not be transferred (code 23)" and the transfer will be failed. 
     

    It affects rsync tasks as well as cPanel transfer tools.

    • backup extracting may not work. Errors during the restoration:
    Error extracting /home/domain/backups/home.tar.gz : /bin/tar: .cagefs/tmp/mysql.sock: Cannot create symlink to `/var/lib/mysql/mysql.sock'.
    @@ -234,13 +234,13 @@
     

    For CloudLinux OS 7:

    echo 1 > /proc/sys/kernel/memcg_oom_disable
     

    Also, add the following to /etc/sysctl.conf file to apply the same during boot:

    kernel.memcg_oom_disable=1
     

    File system quotas

    In Ext4 file system, the process with enabled capability CAP_SYS_RESOURCE is not checked on the quota exceeding by default. It allows userland utilities selectorctl and cagefs to operate without fails even if a user exceeds a quota.

    To disable quota checking in XFS file system set cap_res_quota_disable option to 1 using the following command:

    echo 1 > /proc/sys/fs/xfs/cap_res_quota_disable
    -

    Enter LVE when using cPanel utilities

    cPanel tools might use more resources than desired, so to limit resource usage, you might want to enter the corresponding LVE when using cPanel tools on-behalf of a non-root user.

    This feature is considered experimental, as in this case there might be contention for LVE limits between cPanel tools and web-requests for a given user, which might not be suitable.

    The lve_setuid_enter parameter controls whether you want to enter the corresponding LVE when using cPanel tools on behalf of a non-root user.

    By default, the feature is disabled (0), to enable it, run the following for CloudLinux OS 7 hybrid:

    echo 1 > /sys/module/kmodlve/parameters/lve_setuid_enter
    +

    Enter LVE when using cPanel utilities

    cPanel tools might use more resources than desired, so to limit resource usage, you might want to enter the corresponding LVE when using cPanel tools on-behalf of a non-root user.

    This feature is considered experimental, as in this case there might be contention for LVE limits between cPanel tools and web-requests for a given user, which might not be suitable.

    The lve_setuid_enter parameter controls whether you want to enter the corresponding LVE when using cPanel tools on behalf of a non-root user.

    By default, the feature is disabled (0), to enable it, run the following for CloudLinux OS 7 hybrid:

    echo 1 > /sys/module/kmodlve/parameters/lve_setuid_enter
     

    Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver

    As updating the kernel is one of the most sensitive tasks, we'd like to achieve the maximum stability along the way. In case something goes wrong, proactive reacting to kernel crashes can help tremendously.

    Our new tool, Kernel Panic Receiver, released in June 2020 allows you to to organize kernel panic logs. Kernel Panic Receiver is an open-source component designed to pre-emptively resolve any kernel-related issues.

    Visit the Kernel Panic Receiver project GitHub page.

    Usage

    To send required kernel logs from the clients' machines to Kernel Panic Receiver, we configure the default Linux kernel feature called netconsole.

    The configuration is done by the initscripts package, starting from the following versions:

    • For CloudLinux OS 6: 9.03.61-1.cloudlinux
    • For CloudLinux OS 7: 9.49.49-1.cloudlinux
    • For CloudLinux OS 8: 10.00.4-1.cloudlinux

    To update the initscripts package, run the following command:

    yum update initscripts --enablerepo=cloudlinux-updates-testing
     

    When a kernel panic occurs, the netconsole module sends logs to our server as plain text via the UDP protocol.

    What data is transferred by netconsole?

    The netconsole sends only OOPs-related messages from the kernel ring buffer. It doesn't transfer any sensitive data, such as usernames, encryption keys, paths, etc. So, there are no security problems you should worry about.

    Disabling the feature

    If you don't want to send us the data, you can turn the netconsole service off (we don't recommend it, though). To disable transferring the data, just comment the SYSLOGADDR parameter in the netconsole config file (/etc/sysconfig/netconsole):

    # For more information about this data transmission, check this page:
     # https://cloudlinux.zendesk.com/hc/en-us/articles/360016481200
     # SYSLOGADDR=sentrykernel.cloudlinux.com
     

    And stop the netconsole service by running the following command:

    service netconsole stop
     

    Note

    Netconsole is used only for Kernel Panic Receiver, so disabling it doesn't lead to issues with other CloudLinux OS services.

    - + diff --git a/cloudlinuxos/command-line_tools/index.html b/cloudlinuxos/command-line_tools/index.html index 51deac4f..e303a8ed 100644 --- a/cloudlinuxos/command-line_tools/index.html +++ b/cloudlinuxos/command-line_tools/index.html @@ -51,7 +51,7 @@ })(); Command-line tools (CLI) - +
    sidebar hamburger menu

    Command-line tools (CLI)

    The list of the commands (CLI) you can use to manage CloudLinux OS components.

    CageFS

    cagefsctl is used to manage CageFS. It allows initializing and updating CageFS, as well as enabling/disabling CageFS for individual users.

    Use the following syntax to manage CageFS: /usr/sbin/cagefsctl [OPTIONS]

    Options:

    -i --init initialize CageFS (create CageFS if it does not exist)
    -r --reinit reinitialize CageFS (make backup and recreate CageFS)
    -u --update update files in CageFS (add new and modified files to CageFS, remove unneeded files)
    -f --force recreate CageFS (do not make backup, overwrite existing files)
    -d --dont-clean do not delete any files from skeleton (use with --update option)
    -k --hardlink use hardlinks if possible
    --create-mp Creates /etc/cagefs/cagefs.mp file
    --mount-skel mount CageFS skeleton directory
    --unmount-skel unmount CageFS skeleton directory
    --remove-all disable CageFS, remove templates and /var/cagefs directory
    --sanity-check perform basic self-diagnistics of common cagefs-related issues (mostly useful for support)
    --addrpm add rpm-packages in CageFS (run cagefsctl --update in order to apply changes)
    --delrpm remove rpm-packages from CageFS (run cagefsctl --update in order to apply changes)
    --list-rpm list rpm-packages that are installed in CageFS
    -e --enter enter into user's CageFS as root
    --update-list update specified files only (paths are read from stdin)
    --update-etc update /etc directory of all or specified users
    --set-update-period set min period of update of CageFS in days (default = 1 day)
    --force-update force update of CageFS (ignore period of update)
    --force-update-etc force update of /etc directories for users in CageFS
    --reconfigure-cagefs configure CageFS integration with other software (control panels, database servers, etc)

    Use the following syntax to manage users:
    /usr/sbin/cagefsctl [OPTIONS] username [more usernames]

    Options:

    -m --remount remount specified user(s)
    -M --remount-all remount CageFS skeleton directory and all users (use this each time you have changed cagefs.mp file
    -w --unmount unmount specified user(s)
    ____ --unmount-dir unmount specified dir for all users
    -W --unmount-all unmount CageFS skeleton directory and all users
    -l --list list users that entered in CageFS
    --list-logged-in list users that entered in CageFS via SSH
    --enable enable CageFS for the user
    --disable disable CageFS for the user
    --enable-all enable all users, except specified in /etc/cagefs/users.disabled
    --disable-all disable all users, except specified in /etc/cagefs/users.enabled
    --display-user-mode display the current mode ( "Enable All" or "Disable All" )
    --toggle-mode toggle mode saving current lists of users (lists of enabled and disabled users remain unchanged)
    --list-enabled list enabled users
    --list-disabled list disabled users
    --user-status print status of specified user (enabled or disabled)
    --getprefix display prefix for user

    PHP Selector related options:

    --setup-cl-selector setup PHP Selector or register new alt-php versions
    --remove-cls-selector unregister alt-php versions, switch users to default php version when needed
    --rebuild-alt-php-ini rebuild alt_php.ini file for specified users (or all users if none specified)
    --validate-alt-php-ini same as --rebuild-alt-php-ini but also validates alt_php.ini options
    --cl-selector-reset-versions reset php version for specifed users to default (or all users if none specified)
    --cl-selector-reset-modules reset php modules (extensions) for specific users to defaults (or all users if none specified)
    --create-virt-mp create virtual mount points for the user
    --create-virt-mp-all create virtual mount points for all users
    --remount-virtmp create virtual mount points and remount user
    --apply-global-php-ini use with 0, 1 or 2 arguments from the list: error_log, date.timezone without arguments applies all global php options including the two above

    Common options:

    ___ --disable-cagefs disable CageFS
    --cagefs-status print CageFS status: ( enabled or disabled )
    --set-min-uid Set min UID
    --get-min-uid Display current MIN_UID setting
    --print-suids Print list of SUID and SGID programs in skeleton
    --do-not-ask assume "yes" in all queries (should be the first option in command)
    --clean-var-cagefs clean /var/cagefs directory (remove data of non-existent users)
    --set-tmpwatch set tmpwatch command and parameters (save to /etc/cagefs/cagefs.ini file)
    --tmpwatch execute tmpwatch (remove outdated files in tmp directories in CageFS for all users)
    --toggle-plugin disable/enable CageFS plugin
    -v --verbose verbose output
    --wait-lock wait for end of execution of other cagefsctl processes (when needed) before execution of the command
    -h --help this message

    Running command inside CageFS

    Note

    lve-wrappers 0.6-1+

    Sometimes you will need to execute a command as user inside CageFS.

    If a user has shell enabled - you can simply use:

    /bin/su - $USERNAME  -c _command_
    @@ -618,6 +618,6 @@
     
    • Reset all limits to unlimited for the reseller res1
    cloudlinux-limits set --reseller-name res1 --unlimited --json
     
    • Reset all limits to default for the reseller res1
    cloudlinux-limits set --reseller-name res1 --default all --json
     
    - + diff --git a/cloudlinuxos/control_panel_integration/index.html b/cloudlinuxos/control_panel_integration/index.html index b11c3aac..a13234eb 100644 --- a/cloudlinuxos/control_panel_integration/index.html +++ b/cloudlinuxos/control_panel_integration/index.html @@ -51,7 +51,7 @@ })(); Control Panel Integration - +
    sidebar hamburger menu

    Control Panel Integration

    Note

    We encourage you to create a pull request with your feedback at the bottom of the page.

    Introduction

    There are several possible ways of integration with CloudLinux OS:

    • Complete integration using new API - exactly what is described in this document. This way a panel vendor will get all CloudLinux OS features (current and future) and maximum support. It’s recommended.
    • Manually Ad-hoc - using low-level CLI utils. It is not recommended. It’s kind of “do it yourself way” - a control panel might use low-level utils like lvectl to set limits directly to a raw LVE by ID and control everything (including edge-cases) in its own code. There are many downsides of such approach e.g. only a small number of features can be implemented this way and any new changes in CloudLinux OS will require more and more updates to the control panel code, and can possibly even introduce bugs, etc. And although this way looks easier at first, it will become more and more difficult to maintain it over time.
    • Old API for CloudLinux OS limits - described here. It’s deprecated. It still works but will not get any updates.

    New API in a nutshell

    The goal of the new API is to shift all complexity for controlling CloudLinux OS components from a control panel to the CloudLinux OS web UI and utils. Most of the integration is done within a few steps:

    1. A control panel vendor implements 7 simple scripts (any language) and specifies them in a special config file. All Cloudlinux OS components will look up and call them with some arguments to get all needed information from the control panel (e.g. users list, their hosting plans, domains, etc.)
    2. Control panel should call hooks described below in a response to Admin/Users actions (e.g. changing end-user’s domain, creating new end-user, etc.). CloudLinux OS utils will do their stuff to reconfigure itself according to these events. There is no need to worry about what exactly they do because it will be related only to CloudLinux OS components and control panel will not be affected.
    3. Configure the control panel and CageFS to work together by changing some configs.
    4. Optionally embed CloudLinux OS web UI into the control panel. It is highly recommended because it does all you may need. You can use PHP scripts to embed SPA application to the specially prepared pages (with your menus) for LVE Manager and Selectors.

    General

    To integrate CloudLinux OS into a control panel, you should implement the following interfaces required by the CloudLinux OS utilities:

    • CPAPI — a small scripts/files-type interface to get the required information from the control panel
    • CP Hooks Integration — a set of the CloudLinux OS scripts/commands. Control panel calls this set in response to its internal events
    • Web UI Integration(optional) — various configuration parameters and scripts to embed interface SPA application into the control panel native interface. Optional, if CLI is enough
    • CageFS Integration — some changes may be required in the config files to work and integrate with CageFS as well as additional support from a control panel
    • CloudLinux OS kernel set-up

    Files related to integration (integration config file, CPAPI integration scripts and all their dependencies) as well as parent directories to place them (e.g. /opt/cpvendor/etc/) should be delivered/managed by the control panel vendor. They don't exist by default and should be created to activate integration mechanism. Most likely, they should be bundled with the control panel or installed with some CloudLinux OS support module (if CloudLinux OS support is not built-in).

    Configuration related to integration should be placed in a valid INI file (further “integration config file”):

    -rw-r--r-- root root /opt/cpvendor/etc/integration.ini
    @@ -651,6 +651,6 @@
     	}
     }
     
    - + diff --git a/cloudlinuxos/deprecated/index.html b/cloudlinuxos/deprecated/index.html index 9616a1ca..9ba768e8 100644 --- a/cloudlinuxos/deprecated/index.html +++ b/cloudlinuxos/deprecated/index.html @@ -51,7 +51,7 @@ })(); Deprecated - +
    sidebar hamburger menu

    Deprecated

    Python Selector (Old)

    Note

    This documentation is for the old version of Python Selector. You can find documentation for the new Python Selector here

    We have the ability to deploy Python applications via application server. Python Selector uses mod_passenger to host Python.

    This feature is available for CloudLinux OS 6 or later. It supports only cPanel servers.

    You can find a list of supported alt-python versions using the following command.

    yum grouplist | grep alt-python
    @@ -598,6 +598,6 @@
     
    • If you want to install EA4 with mod_lsapi, alt_mod_passenger and update/install alt-php:
    sh cloudlinux_ea3_to_ea4 --convert --mod_lsapi --altphp --mod_passenger
     
    • To restore EA3 with mod_lsapi:
    sh cloudlinux_ea3_to_ea4 --revert --mod_lsapi
     

    See also: FAQ

    - + diff --git a/cloudlinuxos/elevate/index.html b/cloudlinuxos/elevate/index.html index 54f3ff21..bf99862e 100644 --- a/cloudlinuxos/elevate/index.html +++ b/cloudlinuxos/elevate/index.html @@ -51,10 +51,10 @@ })(); ELevate - + -
    sidebar hamburger menu

    ELevate

    Please note that the CloudLinux Elevate tool is intended specifically for upgrading the CloudLinux OS. Upgrading to CloudLinux directly from a non-CloudLinux OS is not supported.

    While it is possible, it requires additional steps to be taken. Refer to this documentation section for details.

    We disclaim responsibility for incorrect or improper use of the tool. The support team will not be able to help you if you have not followed all the steps described in the documentation or converted a server with an unsupported control panel present.

    In addition, support will not be provided if you have any third-party utilities that do not function after the upgrade, according to Support policy. Examples: webservers, DNS servers, mail servers, database servers and other utilities that do not belong to our product line.

    FAQ

    What is ELevate?

    The ELevate project is an initiative to support migrations between major version of RHEL-derivatives.

    The CloudLinux ELevate variant, built on top of the AlmaLinux ELevate project, aims to provide a streamlined method of upgrading CloudLinux 7 systems to CloudLinux 8 in-place.

    The Leapp utility is the main tool used to perform the upgrade.

    The ELevate Scenario - CloudLinux 7 with cPanel uses the cPanel ELevate project as an additional layer of the upgrade process.

    The ELevate Scenario - CloudLinux 7 with Plesk also uses an additional layer - the cloudlinux7to8 project.

    ELevate is a project aimed to provide the ability to migrate between major versions of RHEL-based distributions from 7.x to 8.x. It combines Red Hat's Leapp framework with a community created library and service for the migration metadata set required for it.

    Is it ready for production use?

    While the ELevate project and its surrounding ecosystem is mature, support for CloudLinux has been introduced more recently.

    We guarantee functionality of CloudLinux products and services on the post-upgrade system. You are welcome to contact CloudLinux Support with any issues that occur with said products.

    However, we cannot guarantee that the third-party software and RPM packages will be updated correctly on all system configurations. See below.

    Systems with configurations and packages that substantially differ from a typical CloudLinux 7 installation could encounter issues previously not seen before.

    Can it break something on my system?

    It can.

    A full system upgrade is an inherently invasive procedure. In some cases, due to different system configurations, package errors or even power failures, you may encounter issues during the upgrade process that can't be automatically recovered from.

    Said issues may be severe,

    In addition, in some cases the conversion process may get stuck once the server boots into a temporary configuration that does not start any network interfaces. It is preferable to have a way to access the server without an SSH connection, for example, through VNC.

    The upgrade process itself is not designed to be reversible. While some of the changes can be undone, the process of reverting the system to its pre-upgrade state varies depending on the system's configuration and the point at which the upgrade failed. Thus, restoring the system from a backup is the most reliable way to recover from a failed upgrade.

    Due to all of the potential risks involved, we highly recommend never running ELevate on a system without a full server backup/snapshot ready.

    Ideally, perform a trial run in a disposable environment, like a VM or a sandbox, to verify that migration functions as expected before you attempt to migrate a system.

    Will it upgrade everything I have on my system?

    It depends. ELevate will not upgrade arbitrary software, especially one that isn't related to CloudLinux or a supported control panel.

    The ELevate project only supports a subset of package repositories it's aware of - that is, package repositories that are included in its configuration files.

    Packages from repositories Leapp is unaware of will not be upgraded.

    It's possible to add missing repositories and packages to ELevate yourself, if you're so inclined. Please check the Contribution section for more information on how to do so.

    What packages can I expect to be upgraded?

    Aside from CloudLinux and AlmaLinux packages, the CloudLinux Elevate includes the extendable "vendors" mechanism that contains migration data for some frequently used third-party system components.

    That migration data is only activated when the corresponding package repositories are present and enabled on the pre-upgrade system.

    Some of the vendors shipping by default include:

    • Imunify360 and KernelCare
    • EPEL (Extra Packages for Enterprise Linux)

    Will it interrupt my server's functionality?

    Yes.

    One of the major steps of the upgrade process involves rebooting into a custom initramfs environment, from which the system's software is upgraded. During that period of time, the system will be mostly non-functional and inaccessible.

    This stage may take up to an hour, so schedule the upgrade accordingly.

    During the preparation stages - that is, when the upgrade process is first initiated and before the system is rebooted - the system's services will function normally.

    Note that different upgrade scenarios behave somewhat differently during the preparation stage. For example, the cPanel scenario will disable the site functionality from the inital stage up until completion, while the no-panel/custom panel scenario will not.

    How long does it take?

    Depending on the amount and size of the packages that need to be updated, the upgrade process may take a long time, up to several hours. This time also varies with the machine's resources and the speed of internet connection.

    If the machine remains unresponsive for more than 2 hours after rebooting, assume the upgrade process failed during the post-reboot phase, and the machine cannot return to normal functionality automatically.

    How do I use it?

    Depending on the web panel you have installed on your system, the upgrade process will require different steps.

    At the moment, ELevate migration from CloudLinux 7 to CloudLinux 8 is supported on:

    • no panel/custom panel systems;
    • cPanel systems.
    • DirectAdmin systems.
    • Plesk systems.

    I have a CL7 system with no webpanel/a custom webpanel installed, how do I upgrade to CL8?

    In such case, you can upgrade through the Leapp tool directly.

    Please refer to the CloudLinux 7 with no panel/custom panel ELevate Scenario for step-by-step instructions.

    I have a CL7 system with cPanel installed, how do I upgrade to CL8?

    With cPanel present on the machine, you need to run the upgrade process through the elevate-cpanel tool.

    Please refer to the ELevate Scenario - CloudLinux 7 with cPanel for step-by-step instructions.

    I have a CL7 system with DirectAdmin installed, how do I upgrade to CL8?

    The DirectAdmin panel does not require any additional actions or tools compared to the no-panel upgrade scenario.

    You can make use of the CloudLinux 7 with no panel/custom panel ELevate Scenario to upgrade systems with the DirectAdmin panel much like you would for systems without one.

    I have a CL7 system with Plesk installed, how do I upgrade to CL8?

    Like cPanel, the Plesk panel requires you to make use of an additional tool to perform the upgrade on a system. In this case, you need to use the cloudlinux7to8 tool provided by the Plesk team.

    Please refer to the ELevate Scenario - CloudLinux 7 with Plesk for step-by-step instructions.

    I have a CL7 system with a different panel installed, how do I upgrade to CL8?

    Unfortunately, CloudLinux ELevate doesn't support these system configurations yet.

    Instead, you can create a new machine with CloudLinux 8 and migrate your system's license and configuration to it.

    Please refer to the following documentation links for instructions on how to do so:

    I have a CentOS 7 system I want to migrate to CloudLinux 8, can I use your tool to do so?

    Not in a single step. The CloudLinux Elevate tool specifically targets the upgrade path of CloudLinux 7 to CloudLinux 8, and trying to use a different OS as a starting point is unlikely to end well.

    If you have a non-CloudLinux OS you wish to upgrade, you have the following options available:

    Please note that the Elevate variants (AlmaLinux, cPanel) mentioned above are maintained by third parties. As such, should you encounter problems when using them, you should direct your questions/support requests to the maintainers of the tool you're using.

    I ran into a problem during the upgrade process, what do I do?

    Please check the Troubleshooting section directly below.

    The Troubleshooting section doesn't have an issue that I'm having. What now?

    First, try to narrow down the most probable source of the issue you've encountered, if possible.

    For cPanel-specific issues, cPanel ELevate issue tracker is the most appropriate place to report them.

    For CloudLinux-specific issues, report them in the CloudLinux ELevate issue tracker or contact CloudLinux Support with a description of the encountered problem.

    For issues with the underlying Leapp framework, report them in the AlmaLinux Leapp repository issue tracker.

    When filing an issue, include:

    • Steps to reproduce the issue
    • All files in /var/log/leapp
    • /var/lib/leapp/leapp.db
    • journalctl
    • If using the CloudLinux 7 with cPanel scenario, /var/log/elevate-cpanel.log
    • If you want, you can also send anything else would you like to provide (e.g. storage info)

    For your convenience you can pack all logs with this command:

    # tar -czf leapp-logs.tgz /var/log/leapp /var/lib/leapp/leapp.db

    Then you may attach only the leapp-logs.tgz file.

    For the no-panel scenario: before gathering data, if possible, re-run the leapp command that encountered an issue with the --debug flag, e.g.: leapp upgrade --debug.

    Troubleshooting

    Here is a list of common problems you may encounter during the upgrade attempt.

    Common issues

    These issues may be encountered during any ELevate Scenario.

    Newest kernel

    The preupgrade/upgrade process may halt with the following message:

    Inhibitor: Newest installed kernel not in use

    Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly.

    Kernel modules deprecated

    Some kernel modules are deprecated in the CloudLinux 8 major versions. To proceed with the upgade, unload them. Leapp will advise on the list of modules to be removed.

    rmmod floppy pata_acpi btrfs
    +    
    sidebar hamburger menu

    ELevate

    Please note that the CloudLinux Elevate tool is intended specifically for upgrading the CloudLinux OS. Upgrading to CloudLinux directly from a non-CloudLinux OS is not supported.

    While it is possible, it requires additional steps to be taken. Refer to this documentation section for details.

    We disclaim responsibility for incorrect or improper use of the tool. The support team will not be able to help you if you have not followed all the steps described in the documentation or converted a server with an unsupported control panel present.

    In addition, support will not be provided if you have any third-party utilities that do not function after the upgrade, according to Support policy. Examples: webservers, DNS servers, mail servers, database servers and other utilities that do not belong to our product line.

    FAQ

    What is ELevate?

    The ELevate project is an initiative to support migrations between major version of RHEL-derivatives.

    The CloudLinux ELevate variant, built on top of the AlmaLinux ELevate project, aims to provide a streamlined method of upgrading CloudLinux 7 systems to CloudLinux 8 in-place.

    The Leapp utility is the main tool used to perform the upgrade.

    The ELevate Scenario - CloudLinux 7 with cPanel uses the cPanel ELevate project as an additional layer of the upgrade process.

    The ELevate Scenario - CloudLinux 7 with Plesk also uses an additional layer - the cloudlinux7to8 project.

    ELevate is a project aimed to provide the ability to migrate between major versions of RHEL-based distributions from 7.x to 8.x. It combines Red Hat's Leapp framework with a community created library and service for the migration metadata set required for it.

    Is it ready for production use?

    While the ELevate project and its surrounding ecosystem is mature, support for CloudLinux has been introduced more recently.

    We guarantee functionality of CloudLinux products and services on the post-upgrade system. You are welcome to contact CloudLinux Support with any issues that occur with said products.

    However, we cannot guarantee that the third-party software and RPM packages will be updated correctly on all system configurations. See below.

    Systems with configurations and packages that substantially differ from a typical CloudLinux 7 installation could encounter issues previously not seen before.

    Can it break something on my system?

    It can.

    A full system upgrade is an inherently invasive procedure. In some cases, due to different system configurations, package errors or even power failures, you may encounter issues during the upgrade process that can't be automatically recovered from.

    Said issues may be severe, up to and including rendering the system completely inaccessible.

    In addition, in some cases the conversion process may get stuck once the server boots into a temporary configuration that does not start any network interfaces. It is preferable to have a way to access the server without an SSH connection, for example, through VNC.

    The upgrade process itself is not designed to be reversible. While some of the changes can be undone, the process of reverting the system to its pre-upgrade state varies depending on the system's configuration and the point at which the upgrade failed. Thus, restoring the system from a backup is the most reliable way to recover from a failed upgrade.

    Due to all of the potential risks involved, we highly recommend never running ELevate on a system without a full server backup/snapshot ready.

    Ideally, perform a trial run in a disposable environment, like a VM or a sandbox, to verify that migration functions as expected before you attempt to migrate a system.

    Will it upgrade everything I have on my system?

    It depends. ELevate will not upgrade arbitrary software, especially one that isn't related to CloudLinux or a supported control panel.

    The ELevate project only supports a subset of package repositories it's aware of - that is, package repositories that are included in its configuration files.

    Packages from repositories Leapp is unaware of will not be upgraded.

    It's possible to add missing repositories and packages to ELevate yourself, if you're so inclined. Please check the Contribution section for more information on how to do so.

    What packages can I expect to be upgraded?

    Aside from CloudLinux and AlmaLinux packages, the CloudLinux Elevate includes the extendable "vendors" mechanism that contains migration data for some frequently used third-party system components.

    That migration data is only activated when the corresponding package repositories are present and enabled on the pre-upgrade system.

    Some of the vendors shipping by default include:

    • Imunify360 and KernelCare
    • EPEL (Extra Packages for Enterprise Linux)

    Will it interrupt my server's functionality?

    Yes.

    One of the major steps of the upgrade process involves rebooting into a custom initramfs environment, from which the system's software is upgraded. During that period of time, the system will be mostly non-functional and inaccessible.

    This stage may take up to an hour, so schedule the upgrade accordingly.

    During the preparation stages - that is, when the upgrade process is first initiated and before the system is rebooted - the system's services will function normally.

    Note that different upgrade scenarios behave somewhat differently during the preparation stage. For example, the cPanel scenario will disable the site functionality from the inital stage up until completion, while the no-panel/custom panel scenario will not.

    How long does it take?

    Depending on the amount and size of the packages that need to be updated, the upgrade process may take a long time, up to several hours. This time also varies with the machine's resources and the speed of internet connection.

    If the machine remains unresponsive for more than 2 hours after rebooting, assume the upgrade process failed during the post-reboot phase, and the machine cannot return to normal functionality automatically.

    How do I use it?

    Depending on the web panel you have installed on your system, the upgrade process will require different steps.

    At the moment, ELevate migration from CloudLinux 7 to CloudLinux 8 is supported on:

    • no panel/custom panel systems;
    • cPanel systems.
    • DirectAdmin systems.
    • Plesk systems.

    I have a CL7 system with no webpanel/a custom webpanel installed, how do I upgrade to CL8?

    In such case, you can upgrade through the Leapp tool directly.

    Please refer to the CloudLinux 7 with no panel/custom panel ELevate Scenario for step-by-step instructions.

    I have a CL7 system with cPanel installed, how do I upgrade to CL8?

    With cPanel present on the machine, you need to run the upgrade process through the elevate-cpanel tool.

    Please refer to the ELevate Scenario - CloudLinux 7 with cPanel for step-by-step instructions.

    I have a CL7 system with DirectAdmin installed, how do I upgrade to CL8?

    The DirectAdmin panel does not require any additional actions or tools compared to the no-panel upgrade scenario.

    You can make use of the CloudLinux 7 with no panel/custom panel ELevate Scenario to upgrade systems with the DirectAdmin panel much like you would for systems without one.

    I have a CL7 system with Plesk installed, how do I upgrade to CL8?

    Like cPanel, the Plesk panel requires you to make use of an additional tool to perform the upgrade on a system. In this case, you need to use the cloudlinux7to8 tool provided by the Plesk team.

    Please refer to the ELevate Scenario - CloudLinux 7 with Plesk for step-by-step instructions.

    I have a CL7 system with a different panel installed, how do I upgrade to CL8?

    Unfortunately, CloudLinux ELevate doesn't support these system configurations yet.

    Instead, you can create a new machine with CloudLinux 8 and migrate your system's license and configuration to it.

    Please refer to the following documentation links for instructions on how to do so:

    I have a CentOS 7 system I want to migrate to CloudLinux 8, can I use your tool to do so?

    Not in a single step. The CloudLinux Elevate tool specifically targets the upgrade path of CloudLinux 7 to CloudLinux 8, and trying to use a different OS as a starting point is unlikely to end well.

    If you have a non-CloudLinux OS you wish to upgrade, you have the following options available:

    Please note that the Elevate variants (AlmaLinux, cPanel) mentioned above are maintained by third parties. As such, should you encounter problems when using them, you should direct your questions/support requests to the maintainers of the tool you're using.

    I ran into a problem during the upgrade process, what do I do?

    Please check the Troubleshooting section directly below.

    The Troubleshooting section doesn't have an issue that I'm having. What now?

    First, try to narrow down the most probable source of the issue you've encountered, if possible.

    For cPanel-specific issues, cPanel ELevate issue tracker is the most appropriate place to report them.

    For CloudLinux-specific issues, report them in the CloudLinux ELevate issue tracker or contact CloudLinux Support with a description of the encountered problem.

    For issues with the underlying Leapp framework, report them in the AlmaLinux Leapp repository issue tracker.

    When filing an issue, include:

    • Steps to reproduce the issue
    • All files in /var/log/leapp
    • /var/lib/leapp/leapp.db
    • journalctl
    • If using the CloudLinux 7 with cPanel scenario, /var/log/elevate-cpanel.log
    • If you want, you can also send anything else would you like to provide (e.g. storage info)

    For your convenience you can pack all logs with this command:

    # tar -czf leapp-logs.tgz /var/log/leapp /var/lib/leapp/leapp.db

    Then you may attach only the leapp-logs.tgz file.

    For the no-panel scenario: before gathering data, if possible, re-run the leapp command that encountered an issue with the --debug flag, e.g.: leapp upgrade --debug.

    Troubleshooting

    Here is a list of common problems you may encounter during the upgrade attempt.

    Common issues

    These issues may be encountered during any ELevate Scenario.

    Newest kernel

    The preupgrade/upgrade process may halt with the following message:

    Inhibitor: Newest installed kernel not in use

    Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly.

    Kernel modules deprecated

    Some kernel modules are deprecated in the CloudLinux 8 major versions. To proceed with the upgade, unload them. Leapp will advise on the list of modules to be removed.

    rmmod floppy pata_acpi btrfs
     

    Package repository defined multiple times

    You may encounter the following error message when attempting to upgrade:

    Inhibitor: A YUM/DNF repository defined multiple times
     

    Refer to the /var/log/leapp/leapp-report.txt for the details on the repository in question.

    To correct the issue, examine your yum reposiory configuration and clear out any dupicate entries before restarting the upgrade process.

    Package upgrades being pulled from incorrect repositories

    You may find that some packages on your system are listed in the preupgrade report in the message "Packages not signed by a known packager found on the system".

    This may mean two things:

    • that the packages listed are indeed unknown to Leapp, and cannot be included in the upgrade process, or;
    • that the corresponding package repositories were not recognized and the vendors mechanism could not be set up properly as a result.

    Make sure that all of the package repositories relevant to the current system state are present and enabled before proceeding with the upgrade. That will ensure that the Leapp tool correctly maps the source repositories to the target ones, and includes everything available into the migration process accordingly.

    Keep in mind that known vendor repositories must be enabled in order for the packages from them to be included into the upgrade.

    SSHD config default mismatch

    If your OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, this upgrade inhibitor will apperar.

    The option's default is "yes" in RHEL7, but will change in RHEL8 to "prohibit-password", which may affect your ability to log onto this machine after the upgrade.

    To prevent this from occuring, set the PermitRootLogin option explicity to preserve the default behaivour after migration:

    echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
     

    Alternatively, configure the SSHD so that the option is present explicitly, without leaving it to the default behaviour.

    Disabling PAM modules

    PAM module pam_pkcs11 is no longer available in RHEL-8 since it was replaced by SSSD. Leaving this module in PAM configuration may lock out the system.

    Allow Leapp to disable the pam_pkcs11 module in PAM configuration by adding an entry to the Leapp answerfile:

    sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True
    @@ -117,6 +117,6 @@
     ( stage 3 / action re-installing plesk components  ) 02:26 / 06:18
     

    Aside from the main Leapp logs contained in /var/log/leapp, the cloudlinux7to8 tool will create a log file in /var/log/plesk/cloudlinux7to8.log that contains additional information about the conversion process.

    Reverting

    If the process fails during the initial stages, you can attempt to revert the system to its original state by running the cloudlinux7to8 tool with the --revert flag.

    > ./cloudlinux7to8 --revert
     

    The cloudlinux7to8 will undo some of the changes it made and restart Plesk services.

    Note that the revert process may not be able to fully restore the system to its original state, and you may need to restore from a backup if the system is left in an unusable state.

    You cannot use revert to undo the changes after the first reboot triggered by cloudlinux7to8.

    Also, the revert does not remove Leapp or packages installed by Leapp. Neither does it free persistent storage disk space reserved by Leapp.

    - + diff --git a/cloudlinuxos/faq/index.html b/cloudlinuxos/faq/index.html index a00264c5..1fc70ef9 100644 --- a/cloudlinuxos/faq/index.html +++ b/cloudlinuxos/faq/index.html @@ -51,10 +51,10 @@ })(); FAQ - +
    sidebar hamburger menu

    FAQ

    What is the CloudLinux subsystem on Ubuntu?

    CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. The main goal of this subsystem is to allow operating the already existed CloudLinux functionality on another OS.

    How to install the CloudLinux subsystem on Ubuntu?

    See Installation.

    Is the CloudLinux subsystem on Ubuntu paid/unpaid?

    During the beta period it is free.

    Can I get the ISO for the CloudLinux subsystem on Ubuntu?

    As of now, only installation via ubuntu2cloudlinux.py is available.

    What control panel can be used with the CloudLinux subsystem on Ubuntu?

    As of now, only cPanel is supported. Plesk and DirectAdmin are not supported.

    How can I get support for my CloudLinux subsystem on Ubuntu servers?

    Feel free to contact Support via Support Portal.

    Can I use Docker with the CloudLinux subsystem on Ubuntu?

    You cannot use Docker with the CloudLinux subsystem on Ubuntu in the current version.

    Is control panel integration functionality available in the current release?

    Yes, it is available.

    How to set up a PHP-fpm handler for the domain?

    Since the PHP-fpm handler is required to use AccelerateWP, you may need to configure it manually.

    These are configuration steps:

    1. Ensure the PHP-fpm package for the current PHP version is installed or install it.

      • Via MultiPHP Manager
    2. Enable PHP-fpm handler for domain via MultiPHP Manager

    - + diff --git a/cloudlinuxos/features/index.html b/cloudlinuxos/features/index.html index 1a1f02ef..5c3e3ae6 100644 --- a/cloudlinuxos/features/index.html +++ b/cloudlinuxos/features/index.html @@ -51,7 +51,7 @@ })(); Features - +
    sidebar hamburger menu

    Features

    Below, you can find the list of supported features with the links to the documentation available.

    LVE limits

    Inode limits

    The documentation is available here.

    Reseller limits

    The documentation is available here.

    MySQL Governor

    MySQL Governor is software to monitor and restrict MySQL usage in a shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread.

    MySQL Governor can also kill off slow SELECT queries.

    MySQL Governor has multiple modes of operations, depending on the configuration. It can work in monitor-only mode, or it can use different throttling scenarios.

    MySQL Governor allows restricting customers who use too many resources. It supports following limits:

    CPU%CPU speed relative to one core. 150% would mean one and a half cores
    READbytesbytes read. Cached reads are not counted, only those that were actually read from disk will be counted
    WRITEbytesbytes written. Cached writes are not counted, only once data is written to disk, it is counted

    You can set different limits for different periods: current, short, med, long. By default those periods are defined as 1 second, 5 seconds, 1 minute and 5 minutes. They can be re-defined using the configuration file. The idea is to use larger acceptable values for shorter periods. Like you could allow a customer to use two cores (200%) for one second, but only 1 core (on average) for 1 minute, and only 70% within 5 minutes. That would make sure that customer can burst for short periods of time.

    When a customer is restricted, the customer will be placed into special LVE with ID 3. All restricted customers will be placed into that LVE, and you can control the amount of resources available to restricted customers. Restricted customers will also be limited to only 30 concurrent connections. This is done so they wouldn't use up all the MySQL connections to the server.

    Installation

    Attention!

    MySQL Governor on Ubuntu supports the following only:

    • cl-MySQL80 on non-panel system
    • cl-MySQL80 on cPanel
    • cl-MariaDB103 on non-panel system
    1. Install MySQL Governor
    apt  install governor-mysql
    @@ -88,6 +88,6 @@
     

    Uninstall procedure for servers with no panel:

    /usr/bin/switch_mod_lsapi --uninstall
     apt remove liblsapi liblsapi-dev mod-lsapi
     
    - + diff --git a/cloudlinuxos/for_cloudlinux_partners/index.html b/cloudlinuxos/for_cloudlinux_partners/index.html index 5a1886e7..e746cf49 100644 --- a/cloudlinuxos/for_cloudlinux_partners/index.html +++ b/cloudlinuxos/for_cloudlinux_partners/index.html @@ -51,10 +51,10 @@ })(); For CloudLinux OS partners - +
    sidebar hamburger menu

    For CloudLinux OS partners

    License portal (CLN)

    You can find the complete documentation for CloudLinux Network (CLN) here.

    CloudLinux WHMCS plugin

    WHMCS Plugin description can be found in CLN Documentation

    - + diff --git a/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html b/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html index bd4bdb15..686c1821 100644 --- a/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html +++ b/cloudlinuxos/for_cloudlinux_partners/whmcs_saved.html @@ -51,11 +51,11 @@ })(); For CloudLinux partners - +
    sidebar hamburger menu

    For CloudLinux partners

    License portal (CLN)

    You can find the complete documentation for the CloudLinux Network (CLN) here.

    CloudLinux WHMCS plugin

    Overview
    Installation & configuration
    Installation and update
    Configuration of product
    Configuration of add-on
    Management
    Link via add-on. Optional license
    Link products directly
    Link via configurable options
    Link add-ons directly (for WHMCS 7.2.x and later)
    Order
    Admin area
    Client area
    Licenses list
    Addon licenses list (for WHMCS 7.2.x and later)
    Common problems

    Overview

    CloudLinux Licenses for WHMCS allows you to automatically provision CloudLinux, Imunify360, and KernelCare licenses along with selected products. You can provision them for free or as a paid add-on to your product. Owing to CloudLinux Licenses add-on, all module commands on your main product are automatically reproduced on the license product.

    Admin area functionality

    • Create license
    • Terminate license
    • Suspend/unsuspend license
    • Change license IP address
    • View license details

    Client area functionality

    • View License Details
    • Change License IP Address

    Add-on functionality

    • Manage Relations Between Add-on And License Product
    • Manage Relations Between Server And License Product
    • Automatically Add License Product To Order When Relation Is Triggered
    • View Existing Licenses
    • Dependencies Between Module Actions - Every Action: Create, Terminate, Suspend Or Unsuspend Called On The Server Product Will Result With The Same Action Performed On The Licensed Products
    • Flexible Filtering Of Existing Licenses

    Additionally

    • Multi-Language Support – Only Provisioning Module
    • Supports CloudLinux, KernelCare, and Imunify360 Licenses
    • Supports WHMCS V6 and Later

    Installation & configuration

    In this section we will show you how to set up our products.

    Installation and update

    Download CloudLinux Licenses For WHMCS:
    Production : https://repo.cloudlinux.com/plugins/whmcs-cl-plugin-latest.zip
    Beta : https://repo.cloudlinux.com/plugins/whmcs-cl-plugin-beta.zip
    Upload archive to your WHMCS root folder and extract it. Files should automatically jump into their places.
    Run the following script:

    php <whmcs_root>/clDeploy.php --migrate
     

    Configuration of product

    1. Log into your WHMCS admin area and go to the Setup → Products/Services → Products/Services. Click Create a New Group .
    2. Fill Product Group Name (product group will be visible under that name in your WHMCS system) and click Save Changes .
    3. Click Create a New Product . Choose Other from Product Type drop-down menu and previously created product group from Product Group drop-down menu.
    4. Fill Product Name and click Continue .
    5. Set up this product as hidden by ticking Hidden checkbox at Details tab. Do not set up pricing for this product. Pricing will be done in another way.
    6. Go to the Module Settings tab and select CloudLinux Licenses from Module Name drop-down.
    7. Fill Username and Password with your CloudLinux API access details and select CloudLinux from License Type drop-down.
    8. Click Save Changes to confirm.

    Note

    You can use the CloudLinux license module as an individual product. By default, for IP license a client’s IP address defined while ordering is used. You can change license IP in service settings (as an administrator or a user). If you want to use a custom field to get the correct IP during the order, you should create a custom field with any field name where IP phrase is used.

    Example:

    /images/WHMCSCustomField.png)

    Configuration of add-on

    1. Go to Setup → Add-on Modules , find CloudLinux Licenses Add-on and click Activate next to it.
    2. The next step is permitting access to this module. Click Configure , select admin role and confirm by clicking Save Changes .

    /images/provisioningmoduleconfiguration_zoom90.png)
    Fig 1: CloudLinux License For WHMCS provisioning module configuration.

    /images/fig2cloudlinuxlicenseforwhmcsaddonmodulemainpage_zoom70.png)
    Fig 2: CloudLinux License For WHMCS add-on module main page.

    Management

    In this section you can find two ways of linking license product with your server product as well as other possibilities of the module.

    In order to allow your client to decide whether he wants to order server with or without a license, we will use Product Add-on. In this way, when the client orders an add-on, the relation will be triggered and the license product will be ordered along with module.

    The following steps must be performed to prepare such connection:

    1. Go to Setup → Products/Services → Products Add-ons and click Add New Add-on .
    2. Fill add-on name, set up billing cycle and price.
    3. Then tick Show on Order checkbox, assign add-on to the product and click Save Changes .
    /images/configurationofproductaddon0_zoom70.png)
    /images/configurationofproductaddon1_zoom70.png)
    /images/configurationofproductaddon2_zoom70.png)
    Fig 3: Configuration of product add-on, which will trigger license product adding.
    1. Go to Add-ons → CloudLinux Licenses Add-on → Add-on Relations and click Add Relation .
    2. Select previously created product add-on and license product as shown below  and click Add Relation .

    /images/fig4creatingrelationbetweenproductaddonandprovisioningmodule_zoom70.png)
    Fig 4: Creating relations between product add-on and provisioning module.

    If you want to offer server along with the license, perform the following steps.

    Note. Please do not set up pricing for license provisioning product. In exchange, you can increase a price for server provisioning product.

    1. Prepare license provisioning product as described in the Configuration of Product section of this documentation.
    2. Go to Add-ons → CloudLinux Licenses Add-on → Products Relations and click Add Relation .
    3. Select server provisioning product from the Main Product drop-down list and license provisioning product from Linked Product With License and click Add Relation .

    /images/fig5creatingrelationdirectlybetweenserverandlicenseprovisioningmodules_zoom70.png)
    Fig 5: Creating relations directly between server and license provisioning modules .

    In order to allow your client to decide whether he wants to order server with or without license we can use Configurable Options ( https://docs.whmcs.com/Addons_and_Configurable_Options)).

    Below we will show you what steps to proceed to prepare such connection:

    • Configure CloudLinuxLicenses product as described here
    • Go to Setup → Products/Services → Configurable Options and click Create a New Group .
    • Fill group name and add New Configurable Option , set up billing cycle, price and option type. Then save changes.
    • Go to Add-ons → CloudLinux Licenses Add-on → Configurable Options Relations and click Add Relation.
    • Choose appropriate configurable option and license product which it is assigned to and click Add Relation.

    Note. The plugin doesn’t support “quantity” type of Configurable Options.

    /images/fig6creatingrelationsdirectlybetweenserverandlicenseprovisioningmodules_zoom70.png)
    Fig 6: Creating relations directly between server and license provisioning modules.

    [for WHMCS 7.2.x and later]

    WHMCS 7.2 introduces the ability to associate Product Add-ons with Provisioning Modules .

    In order to allow your client to decide whether he wants to order server with or without license we will use product add-on. Below we will show you what steps to proceed to prepare such connection.

    1. Go to Setup → Products/Services → Products Add-ons and click Add New Addon .
    2. Fill add-on name, set up billing cycle and price. Then tick Show on Order checkbox, assign an add-on to the product.
    3. Go to Module Settings tab and select CloudLinuxLicenses from Module Name drop-down.
    4. Fill Username and Password with your CloudLinux API access (API secret key) details and select CloudLinux from LicenseType drop-down.
    5. Click Save Changes to confirm. /images/configurationofproductaddon_zoom70.png)
      Fig 7: Configuration of product add-on with Provisioning Modules.

    Order

    The only difference between two ways of setting up relation is the ability to order server without CloudLinux license.

    /images/orderingserverwithlicenseaddon_zoom70.png)
    Fig 8: Ordering server with license add-on.

    /images/orderingserverlinkeddirectly_zoom70.png)
    Fig 9: Ordering server linked directly with license product.

    Admin area

    From the admin area it is possible to command such action as create, terminate, suspend/unsuspend and change IP address. Nonetheless, these actions can be ordered only on the server provisioning module and will be automatically reproduced for the license provisioning product.

    Only change IP address feature has to be ordered manually.

    You can also view the details of created license.

    /images/cloudlinuxlicensesforwhmcsadminarea_zoom70.png)
    Fig 10: CloudLinux Licenses For WHMCS Admin Area.

    Client area

    The clients are also able to view their servers license details. And as well as you, they are able to change IP address of their licenses.

    /images/cloudlinuxlicensesforwhmcsclientarea_zoom70.png)
    Fig 11: CloudLinux Licenses For WHMCS Client Area.

    To change IP address click Change as shown on the screen above. Then specify IP address and click Save.

    /images/changinglicenseipaddress_zoom80.png)
    Fig 12: Changing License IP Address.

    Licenses list

    You can view the list of all licenses owned by your client at our addon → Licenses List.
    You can filter the list of licenses by client name, server provisioning products, license provisioning products and license IP address.

    /images/fig13licenseslist_zoom70.png)
    Fig 13: Licenses list.

    Add-on licenses list

    [for WHMCS 7.2.x and later]

    You can view a list of all product add-on with Provisioning Modules licenses owned by your client at our add-on → Licenses List .

    /images/fig14addonlicenseslist_zoom70.png)
    Fig 14: Add-on Licenses List.

    Common problems

    After activating the server provisioning product, license provisioning product bounded to it is still pending.
    Reason : License IP address may be already taken.
    Solution : Change server IP address.

    Note

    Currently, only key-based licenses are available for Imunify360. Support of IP-based licenses will be added soon.

    - + diff --git a/cloudlinuxos/limits/index.html b/cloudlinuxos/limits/index.html index 5d1511f6..6f0375e8 100644 --- a/cloudlinuxos/limits/index.html +++ b/cloudlinuxos/limits/index.html @@ -51,7 +51,7 @@ })(); Limits - +
    sidebar hamburger menu

    Limits

    CloudLinux OS has support for the following limits:

    LimitsUnitsDefault ValueDescriptionSupported Kernels / OS
    SPEED% of a core, or HZ100% CPU speed limit, relative to a single core, or specified in HZ (portable across CPU s)all
    CPU [deprecated]% of CPU 25% CPU Limit (smallest of CPU & NCPU is used)all
    NCPU [deprecated]number of cores1 COREMax number of cores (smallest of CPU & NCPU used)all
    PMEMKB1024MBPhysical memory limit (RSS field in ps/RES in top). Also includes shared memory and disk cacheall
    VMEMKB0Virtual memory limit (VSZ field in ps/VIRT in top)all
    IOKB/sec1024KB/secIO throughput - combines both read & write operationsCL8, CL7, CL6 lve1.1.9+ kernel
    IOPS [lve1.3+]Operations per second1024Restricts total number of read/write operations per second.all
    NPROCnumber100Max number of processes within LVEall
    EPnumber20Limit on entry processes. Usually represents max number of concurrent connections to apache dynamic scripts as well as SSH and cron jobs running simultaneously.all

    Note

    It is always better to disable VMEM limits (set them to 0) in your system at all because they are deprecated and are causing unexpected issues.

    Bellow you can find recommendations for your typical shared hosting setup. The recommendations don't depend on the power of your server. They only depend on how "fast" you want your hosting accounts to be.

    Typical Hosting Account

    • SPEED=100%
    • PMEM=1GB
    • VMEM=0
    • IO=1024KB/s
    • IOPS=1024
    • NPROC=100
    • EP=20

    High End Hosting Account

    • SPEED=200%
    • PMEM=2GB
    • VMEM=0
    • IO=4096KB/s
    • IOPS=1024
    • NPROC=150
    • EP=40

    Understanding limits

    LVE is a kernel level technology developed by the CloudLinux team. The technology has common roots with container based virtualization and uses cgroups in its latest incarnation. It is lightweight and transparent. The goal of LVE is to make sure that no single web site can bring down your web server.

    Today, a single site can consume all CPU, IO, Memory resources or Apache processes - and bring the server to a halt. LVE prevents that. It is done via collaboration of Apache module, PAM module and kernel.

    mod_hostinglimits is Apache module that:

    • detects VirtualHost from which the request came;
    • detects if it was meant for CGI or PHP script;
    • puts Apache process used to serve that request into LVE for the user determined via SuexecUserGroup directive for that virtual host;
    • lets Apache to serve the request;
    • removes Apache process from user's LVE.

    The kernel makes sure that all LVEs get fair share of the server's resources, and that no customer can use more then the limits set for that customer. Today we can limit CPU , Memory (virtual and physical), IO, number of processes as well as the number of entry processes (concurrent connections to apache).

    Each LVE limits amount of entry processes (Apache processes entering into LVE) to prevent single site exhausting all Apache processes. If the limit is reached, then mod_hostinglimits will not be able to place Apache process into LVE, and will return error code 508. This way very heavy site would slow down and start returning 508 errors, without affecting other users.

    • If the site is limited by CPU or IO, then the site will start responding slower.
    • If the site is limited by memory or number of processes limits, then the user will receive 500 or 503 errors that server cannot execute the script.

    Checking if LVE is installed

    To use LVE you should have CloudLinux OS kernel installed, and LVE module loaded. You can check the kernel by running the following command:

    uname -r
    @@ -112,6 +112,6 @@
     NPROC limit must be greater than EP + 15 limit, because number of processes and threads within LVE includes
     also Apache processes/threads, SSH sessions and etc, which enter into LVE.
     

    PMEM LVE limit should not be lower than 512 MB.

    Validation does not affect limits operation in any way. Even if invalid limits have been set, they will be applied for users/resellers.

    Commands that support validation:

    1. lvectl set

    This command allows validation of an LVE ID which does not have a corresponding UID in the system. I.e., you can set limits for any LVE ID and they can be validated.

    1. lvectl set-user

    This command allows validation when setting limits using a user name instead of LVE ID.

    1. lvectl set-reseller

    This command supports limits validation both for inactive reseller and active one.

    1. lvectl set-reseller-default

    This command supports validation when setting default limits for a reseller.

    1. lvectl package-set

    This command supports limits validation both for packages existing in the system and nonexisting ones.

    1. The cloudlinux-package and cloudlinux-limits commands support all validation types described above, and support limits validation and exceptions lists as described below.

    Exceptions list (validation is not supported)

    1. a) When EP limit for a package is greater than a custom NPROC limit for a user included in this package.

    OR

    b) when NPROC limit for a package is less than a custom EP limit for a user included in this package.

    1. a) When default EP limit for a hoster is greater than a custom NPROC limit for a user/package which inherits the default limit.

    OR

    b) When default NPROC limit for a hoster is less than a custom EP limit for a user/package which inherits the default limit.

    1. When using the following commands:

    a) lvectl set-reseller --all

    b) cloudlinux-limits --json enable-reseller-limits --all

    Existing limits validation

    The automatic validation using cldiag utility by cron job is enabled on a server by default. You can disable it in the /etc/sysconfig/cloudlinux config file using ENABLE_CLDIAG option (Warning! This option disables all automatic checks using cldiag!) When calling this utility automatically by cron, it checks all limits existing on the server and send an administrator a report with limits check results. You can use the following command to validate existing limits: cldiag --check-lve-limits.

    The important difference between checking existing and setting limits is that even if validation fails when setting limits (see exceptions list above), checking existing limits will catch invalid limits in any case. I.e. even if a server administrator set invalid limits, validation of existing limits will catch invalid limit in any case.

    Best practice

    Set NPROC limit greater than (EP + 15).

    Compatibility matrix

    Web Server / PHP CPU Virtual & Physical Memory EP NPROC IO CageFS PHP Selector
    Apache / suPHPYesYesYesYesYesYesYes
    Apache / FCGIDYesYesYesYesYesYesYes
    Apache / CGIYesYesYesYesYesYesYes
    Apache / PHP-FPMYes 2YesYesYesYesYes 2No
    Apache / mod_php (DSO)YesNoYesYesYesNoNo
    Apache / mod_ruid2YesNoYesYesYesNoNo
    Apache / MPM ITKYesNoYesYesYesYes 1No
    LiteSpeedYesYesYesYesYesYesYes
    NGINX / PHP-FPMYes 2YesNoYesYesYesNo
    SSHYesYesYesYesYesYes 2Yes
    Cron JobsYesYesYesYesYesYesYes
    Apache / mod_lsapiYesYesYesYesYesYesYes
    1. Requires patched version of MPM-ITK. CL httpd RPM has ITK worker with the patch. Patch is also available at: https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz
    2. PHP binaries from sources other than DirectAdmin/CloudLinux OS require recompile with patches available at: https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz

    Note

    Please note that mod_lsapi does not work when php-fpm is enabled because php-fpm is also a PHP Handler just as mod_lsapi.

    Note

    mod_lsapi is an Apache module whilst LiteSpeed is a standalone solution and does not use any of Apache modules (since it provides its own implementation of these modules). Moreover, it is advised to leave your Apache configuration as is just in case you decide to switch back from LiteSpeed.

    Reseller limits

    Reseller limits is a feature that allows hosters to limit the resources each reseller can operate. Reseller limits put a restriction on the cumulative resources this reseller and his end-users can use at any given moment in time.

    Reseller limits feature also enables hosters to give their resellers controls over the end-user’s resources. Resellers can assign limits to their end-users as they want, even if they are higher than the limits assigned to the reseller. The reseller’s end-users will not be limited by the reseller limits unless their cumulative usage goes above the limits the hoster assigned to their reseller.

    Reseller cannot manage INODE or MYSQL limits. Neither his own, nor for his users.

    Design

    To understand the quirks of how Reseller Limits operate, we need to look more closely into the four types of users that a typical shared hosting server has:

    Reseller himself (green box on the scheme) is a virtual entity. When a hoster enables reseller limits, the entity itself cannot hit the limits. There is usually an end-user with the same username as the reseller that acts as a regular reseller’s end-user. When the hoster sets Reseller limits, he limits the group of end-users he owns, including the reseller's end-user with the same username.

    Resellers can configure their end-users limits differently. There are several scenarios when Reseller limits will get activated:

    • A reseller can assign limits to their end-users that are higher than the limits hoster assigned to this reseller. In this case, the end-user will be limited by reseller limit when he reaches it.
    • A reseller can assign limits to their end-users that are lower than the limits hoster assigned to this reseller. In this case, the end-user will be limited by his limit and not by the reseller limits when he reaches it.
    • Reseller limits will get activated when all reseller’s resources are consumed by his users at any given moment.

    As you probably have already understood, the reseller will technically be able to assign his/her end-users limits higher than his Reseller limits. However, it won’t be possible for the end-users to go over the reseller limits no matter what his individual limit is.

    Requirements

    1. CloudLinux OS should be installed on the server.
    2. You also need to check that your kernel supports Reseller limits feature
      • CloudLinux OS 6 and kernels 2.16+: not supported, you need to migrate to Hybrid.
      • CloudLinux OS 6 Hybrid: supported starting from 3.10.0-714.10.2.lve1.5.3.el6h kernel.
      • CloudLinux OS 7: supported starting from 3.10.0-714.10.2.lve1.5.3.el7 kernel.
      • CloudLinux OS 7 Hybrid: supported
      • CloudLinux OS 8: supported
    3. lvemanager package version 3.0-18+ and later installed. If you don’t have it, update your system

    Configuration

    Enabling Reseller limits

    If you have decided to jump on board and enable Reseller limits for your resellers you should do the following:

    1. Make sure that you run CloudLinux OS with the kernel and lvemanager that meets the necessary requirements.
    2. Log in with a hoster access.
    3. You can create a new reseller account or configure an existing reseller account to have Reseller limits enabled. Consult your control panel documentation on how to do that.
    4. For cPanel servers when creating an account, make sure to tick two checkboxes Make this account a reseller and Make the account own itself in the Reseller Settings box.

    Selecting Make the account own itself makes the reseller full owner of all his accounts, including the end-user account with the same username. This option is integral to making reseller limits work for the reseller account. If you don’t select it, Reseller limits will not be applied. If the reseller account you want to limit with Reseller limits has already existed, you need to make sure it is properly owned. Go to WHM -> Modify account -> find the account with the same username as your reseller -> change the owner to the username of your reseller.

    1. Now that preparations are done, go to CloudLinux OS LVE Manager -> Users tab, choose a reseller and click on the pencil icon.
    2. When the pop-up opens, move the slider Manage Limits -> Click AGREE when asked Are you sure you want to enable limits -> assign the limits to that reseller. Finally, click Save.

    Note

    Managing Reseller limits are not available for Solo and Admin editions. More at Cloudlinux OS editions

    When you move a user from one reseller to another on DirectAdmin you need to manually change its package because the packages aren’t moved together with users. If you don’t reassign the package, the limits for the user you have moved will be reset to default.

    Note

    DirectAdmin only: when Reseller limits are enabled, reseller's enduser's package is replaced with a DEFAULT virtual package that inherits the default user's limits (lve and quotas) .
    lve-utils > 6.3.7 provides a new configuration option - cl_quota_inodes_inheritance, which allows to keep the same quotas limits in this case. Add the cl_quota_inodes_inheritance=1 flag to the /etc/sysconfig/cloudlinux configuration file to preserve reseller's enduser's inodes limits when Reseller limits are enabled.

    How to disable Reseller limits

    1. Go to the Users tab, choose a particular reseller and click on the pencil icon.
    2. In the pop-up move the slider Manage Limits. Click AGREE for the question Are you sure you want to disable limits. Then click Save.

    If you disable Reseller limits everything will work the same as before. All the end user limits set by the reseller will be saved. But all custom default reseller limits will be disabled.

    More resources

    It is possible that you still have some questions left unanswered about Reseller limits. That’s why we have more knowledge sources that you can check out:

    WEB interface resource limiting modes

    Ability to manage the limiting modes of user processes started from web interface (e.g. Node.JS, Ruby and Python Selectors). The configuration allows to disable LVE limiting for some commands or don't limit web commands at all.

    Also, there is a short list of processes, that runs without CageFS in every modes. They are not affecting security, but we are working on removing them from excludes.

    To use it, add the web_resource_limit_mode parameter to the /etc/sysconfig/cloudlinux file.

    Possible parameter values:

    • all: the default option. All processes will run inside CageFS and with LVE limits being applied.
    • heavy: there is a list of processes that are considered lightweight. In this mode, they will be executed inside CageFS, but no resource limits: CPU, IO, memory, and NUMPROC. List of ligthweight processes is defined by CloudLinux and it's guarantied that user can't bypass LVE limits for a long-term. For example, this mode allows a user to execute the cloudlinux-selector stop process, even if the user hits the NUMPROC limit.
    • unlimited: all processes will run inside CageFS, but ignore CPU, IO, memory, and NUMPROC limits. Not recommended for production usage.

    Requirements:

    1. CloudLinux OS should be installed on the server
    2. Packages:
      • cagefs package installed
      • lve-wrappers >= 0.7.2
      • lvemanager >= 7.5.9
      • kmod-lve >= 2.0.36
      • lve >= 2.1.2
    - + diff --git a/cloudlinuxos/lve_manager/index.html b/cloudlinuxos/lve_manager/index.html index f378f3c8..4dd36533 100644 --- a/cloudlinuxos/lve_manager/index.html +++ b/cloudlinuxos/lve_manager/index.html @@ -51,16 +51,16 @@ })(); CloudLinux Manager UI - +
    sidebar hamburger menu

    CloudLinux Manager UI

    CloudLinux Manager is a plugin for most popular control panels including cPanel, Plesk, DirectAdmin, InterWorx, and CyberPanel. It allows you to control and monitor limits, and set limits on per package bases.

    CloudLinux Manager is installed by default on most servers. If it is missing you can always install it by running:

    yum install lvemanager
    -

    Installation wizard

    Overview

    CloudLinux OS Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin.

    Set up

    As you have CloudLinux OS installed, navigate to CloudLinux OS CloudLinux Manager in your control panel. CloudLinux OS Installation Wizard starts automatically if lvemanager package is installed for the first time (not updated).

    To start setting up your CloudLinux OS, click Start Wizard, otherwise click Skip Wizard, and you will be redirected to the CloudLinux Manager Dashboard.

    Note

    Installation statuses of all components are duplicated inside their corresponding boxes on the Dashboard. All Wizard actions are available there as well. Dashboard will be automatically updated as soon as the installation process finishes.

    The next step is selecting required components to be installed.

    Click Finish and Install to complete installation or click Skip Wizard to go back to the Dashboard.

    You can find a complete description of the CloudLinux OS components below.

    CloudLinux OS components

    CageFS

    A virtualized per-user file system encapsulates each customer into a ‘cage’ preventing them from seeing each other files and viewing sensitive information (e.g., system files)

    Toggle the sliders to enable CageFS by default for new and/or existing users.

    Note

    CageFS is a requirement for PHP Selector operation.

    LSAPI

    It is the fastest and most reliable way to serve PHP pages for Apache web-servers, a drop-in replacement for SuPHP, FCGID, RUID2, and ITK.

    LSAPI requires CRIU to operate and we also recommend you to use mod_suexec. You can find details in our documentation.

    MySQL Governor

    Monitors MySQL usage to throttle abusers, preventing server overload and improving overall performance.

    Note

    MySQL Governor can be automatically installed only with cPanel/WHM and DirectAdmin - use CLI instructions available here in all other cases.

    We recommend you to create a full database backup before the MySQL Governor installation.

    Node.js Selector

    Allows end users to create Node.js applications and select the specific version of Node.js and other parameters.

    Here you can choose versions to be installed and the version to be used as default.

    Ruby Selector

    Allows end users to select the specific version of Ruby they need.

    Here you can choose Ruby versions to be installed.

    Python Selector

    Allows end users to select the default version of Python and set the required versions for installation.

    Here you can choose Python versions to be installed.

    PHP Selector

    Allows end users to select the specific version of PHP they need, with over 120 PHP extensions to choose from.

    Go to CloudLinux Manager settings to set up PHP Selector options and parameters. Read more in the PHP Selector documentation.

    Note

    CageFS should be enabled for PHP Selector to operate.

    When the components to be installed are selected and configured, and installation is started, you will be redirected to the CloudLinux Manager | Dashboard.

    Installation process and possible errors

    Installation status is displayed throughout the process in the Dashboard. Click Installing to show modules installation state.

    All installed modules are displayed on the Dashboard. When installation is completed successfully, you will see the following status.

    If you decide to remove failed module or a module to be installed by clicking the (X) button, a confirmation dialog will appear.

    After confirming the action, the module will disappear from the list.

    If module installation fails, the Installing button changes to Warning and the module indicator will turn red.

    • Click to download the error log.
    • Click to try to install a module again.
    • Click to remove a specific module from the installation queue. The module will be displayed on the Dashboard but will not be installed.

    If module auto-installation fails, you will see that the module indicator turns yellow.

    In this case, you can download a log for details and try to install the module again.

    Wizard fatal error

    In case of a fatal error, you will see the following warning.

    • Click to download the error log.
    • Click to try to install module(s) again.
    • Click to cancel installation. The canceled modules will be removed from the installation process.

    You can contact our support team for further assistance anytime by submitting a ticket in our helpdesk system.

    CloudLinux Manager

    cPanel CloudLinux Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics.

    Administrator credentials allow controlling limits for host users.

    Log in as administrator to get access to the following functionality:

    • Dashboard provides a quick overview of statistics and all administrative information for server administrators.
    • Current usage tab - allows monitoring users resource usage at the moment;
    • Users tab with the list of all users allows viewing and managing all the users limits;
    • Statistics tab displays the statistics of resource usage for proper timeframe or proper users;
    • Options tab - allows setting LVE Faults email notifications for users;
    • Packages allows managing packages limits;
    • PHP Selector tab.

    For more details, please go to the ImunifyAV documentation.

    Notifications color codes

    In the CloudLinux Manager UI we use the following color codes for notifications:

    • warning
    • error
    • information
    • success

    The following actions are available in the action notifications (error, success)

    • follow a link
    • copy a command
    • copy a whole traceback

    The following actions are available in the system notifications (information, warning):

    • follow a link
    • copy a command
    • copy a whole message
    • mark a notification as “Read”
    • snooze a notification

    Dashboard

    Note

    Available starting from CloudLinux Manager 4.0-26.8

    CloudLinux OS dashboard provides a quick overview of statistics and all administrative information for server administrators.

    Go to CloudLinux Manager | Dashboard.

    The CloudLinux OS Dashboard provides the following information:

    • End Users hitting limits — number of users reaching their limit in any kind of resource. Data is within the last 24 hours.
    • Resellers hitting limits —  number of enrolled Resellers that are reaching their limit in any kind of resource. Data is within the last 24 hours.
    • Node.js Selector block displays the following data:
      • Node.js Selector status (Enabled/Disabled/Not installed) —  displays a current status of the Node.js Selector.

        • To manage Node.js Selector, click Manage. You will be redirected to LVE Manager | Options | Node.js Selector.

        • Click Install to install Node.js Selector, you will be redirected to CloudLinux Manager | Options | Node.js.Selector.

      • Default version — the current default version of Node.js set in your system. Click Manage to change the default version account wide.

      • Applications —  number of installed/all applications for the account.

    • Ruby Selector block displays the following data:
      • Ruby Selector status (Enabled/Disabled/Not installed) — displays a current status of the Ruby Selector.

        • To manage Ruby Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Ruby Selector.

        • Click Install to install Ruby Selector, you will be redirected to CloudLinux Manager | Options | Ruby Selector.

      • Applications — number of installed/all applications for the account.

    • PHP Selector block displays the following data:
      • Default version — the default version of PHP binaries. Click Manage to change the default version, enable or disable PHP Selector, change the list of supported versions, and choose default modules. You will be redirected to CloudLinux Manager | PHP Selector.
        PHP Selector (cPanel) has malfunctions warnings about the most common issues.
    • Python Selector block displays the following data:
      • Python Selector status (Enabled/Disabled/Not installed — displays a current status of the Python Selector.

        • To manage Python Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Python Selector.

        • Click Install to install Python Selector, you will be redirected to CloudLinux Manager | Options | Python Selector.

      • Applications —  number of installed/all applications for the account.

    • Reseller Limits block displays the following data:
      • Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click Manage. You will be redirected to CloudLinux Manager | Users tab.
      • Reseller’s accounts with Reseller Limits/all —  the number of Reseller accounts with Reseller Limits enabled versus the total number of Reseller accounts.
      • Reseller’s End Users with enabled Reseller Limits/all — the number of end users with Reseller Limits enabled versus all End Users that belong to all resellers.
    • MySQL Governor block displays the following data:
      • MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click Manage. You will be redirected to CloudLinux Manager | Options | MySQL Governor Mode of Operation. Click Install to install MySQL Governor.
      • Mode — displays the MySQL Governor mode of operation. Click Manage to change the mode.
        • Single — single LVE is used for all customers that go over their DB limits (deprecated).
        • Off — monitor Only, no DB query limits are applied.
        • All — all queries are run inside user's LVE.
        • Abusers — only queries that go over DB limits are executed inside that user's LVE (this is the default mode).
      • Database version —  displays a current version of MySQL/MariaDB/Percona server installed in the system.
    • CageFS block displays the following data:
      • CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click Manage. You will be redirected to CloudLinux Manager | Options | CageFS. Click Install to install CageFS.
      • Mode displays the current CageFS mode of operation.
      • End users — displays the number of users with CageFS enabled/all.
    • ModLSAPI block displays the following data:
      • Mod_lsapi status (Enabled/Disabled/Not installed). Click Install to install Mod_lsapi.
      • Module version displays the running version of Mod_lsapi.
      • Criu_status displays the status of lsapi_criu:
        • Running —  means that lsapi_criu is working.
        • Stopped —  means that lsapi_criu is not working.
      • Total Domains displays the total number of domains with Mod_lsapi configured as PHP handler.
      • Criu_version displays the running version of lsapi_criu.
      • LSAPI with connection pool.

    Note

    • If statistics for server is absent for any reasons, you can update it by pressing the Refresh button. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.
    • If statistics collection is turned off it is not displayed. If you wish to get daily statistics for your server, please turn it on by adding cl_statistics_enabled=1 parameter to the /etc/sysconfig/cloudlinux file.
    • Data for the Dashboard is collected once per day. If you want to update data manually, press Refresh. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.

    Current usage

    Choose Current usage tab to monitor users resource usage at the moment displayed in the table.

    Current usage table provides the information on the usage of Speed, memory, IO, IOPS, Number of Processes, and Entry Processes.

    Resource usage values are being refreshed every 10 seconds which is set in Auto-refresh field. You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button. Usage values will not change until the next manual refresh.

    Tick Hide MySQL usage checkbox to hide the information on MySQL usage.

    To expand the list of users click on the number above and in the dropdown choose the number of user to be displayed on the page.

    The list of users can be filtered by Username and Domain.

    Hoster can view all types of users:

    • End users
    • Resellers
    • Reseller’s end users
    • Reseller’s end users (no Reseller limit).

    But hoster can only manage:

    • End users
    • Resellers
    • Reseller’s end users (no Reseller limit)

    To manage Reseller’s end users hoster should login as a reseller.

    Users

    Choose Users tab to view the list of all users in the system and manage their limits.

    Note

    A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller).

    • Tick Show users with CageFS enabled to show users with CageFS file system enabled.
    • Tick Show only ignored users to show users with ignored MySQL Governor.

    The following filters are available:

    • Manage by
      • End users
      • Resellers
      • Reseller's end users
      • Reseller's end users (no Reseller limit)
    • Show only
      • Ignored users - show users with ignored MySQL Governor.
      • Users with CageFS enabled

    Also, you can search user by his Username, domain or LVE ID in the Search field.

    Actions

    Click pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Enable/disable CageFS
    • Reset - to reset limits to default values
    • Apply Do not limit to set the limits to unlimited;
    • Setting the limits values:
      • SPEED
      • SPEED MYSQL
      • VMEM
      • PMEM
      • IO
      • MySQL IO
      • IOPS
      • EP
      • NPROC
      • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings).

    Click Save to save changes or Cancel to close the pop-up.

    Click on History symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period.

    Group actions for users with enabled CageFS

    Note

    If CageFS is disabled, group actions are not available. See how you can enable CageFS:

    • View users with enabled CageFS

      To view users with enabled CageFS, click Show only >> Users with CageFS enabled

    • Disable CageFS for several users

      To disable CageFS for several users, do the following.

      • Select a particular user or select all users
      • Click CageFS >> Disable.

    Statistics

    Choose Statistics tab to view end users, resellers and resellers’ end users limits usage statistics.

    The following parameters can be displayed in the statistics table:

    • SPEED usage per user;
    • IO usage per user;
    • EP usage per user;
    • VMEM usage per user;
    • PMEM usage per user;
    • NPROC usage per user;
    • IOPS usage per user;
    • MySQL usage per user.

    Click Show and select columns from the drop-down to set which parameters should be displayed in the table.

    Statistics table can be filtered by:

    • Timeframe - to view the statistics for a particular period;
    • Limit - to view a particular limit type usage only;
    • Top LVEs - to view top used limits only;
    • LVE approaching limit - to view the limits that are approaching maximum provided value;
    • Fault LVE - the limits that have reached the maximum value.

    Click Manage to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down.

    Click chart symbol in the View column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time.

    Options

    The following sections are available to set the required options:

    LVE Faults Email Notifications

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the administrator should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose Options tab to manage LVE Faults email notifications.

    The following types of notification are available:

    • Notify Hoster - receive notifications on users and its own LVE faults
    • Notify Reseller - allows reseller receiving notifications on their user's LVE faults
    • Notify Customers - allow host's users receiving notifications on their LVE faults
    • Notify Reseller's customers - allows resller's users receiving notifications on their LVE faults

    Faults to include

    Tick checkboxes to include required limits to the notifications:

    • SPEED - include SPEED limit fault to the notification
    • IO - include I/O limit fault info to the notification
    • IOPS - include IOPS limit fault info to the notification
    • Memory - include Memory limit fault info to the notification
    • Concurrent connections - include concurrent connections limit fault info to the notification
    • NPROC - include NPROC limit fault info to the notification.

    Minimum number of Faults to notify

    Set a number of faults required for the notification to be sent for:

    • Hoster and Reseller
    • User

    Set the frequency of email notifications sending to:

    • Hoster and Reseller
    • User

    Inode limits

    Allows to reset inode limits and show/hide end-user inode usage.

    User interface settings

    Allows to manage user interface settings:

    • Hide LVE end user usage statistic - a user will not be able to see his usage statistic in his web interface
    • Hide Ruby App in web-interface - a user will not be able to see Ruby Selector in his web interface

    MySQL Governor settings

    Allows to manage MySQL Governor settings.

    MySQL Governor Mode of operation

    • Off - monitor Only – not throttle customer's queries, only monitor MySQL usage.
    • Single - single restricted LVE for all restricted customers – all queries for all restricted customers well be sharing the same LVE.
    • Abusers - use LVE for a user to restrict queries (default mode) – if a user goes over the limits, all his queries will execute inside his LVE.
    • All - always run queries inside user's LVE – limits are applied to both PHP & MySQL queries at the same time.

    MySQL Governor restrict type mode

    • Period – allows to restrict users for a specified time period
    • Limit (default mode) – allows to restrict/automatically unrestrict users that hit limits/don't hit limits during 'unlimit=time'

    Unlimit users automatically in

    Allows to unlimit users automatically if they don't hit the limits during the specified number of seconds/minutes/hours/days.

    Restricted time periods

    User restriction time period for different levels of restriction and the timeout to apply a higher restriction level.

    • Level1
    • Level2
    • Level3
    • Level4
    • Timeout

    User maximum connections

    The number of simultaneous connections of a restricted user (in the LVE mode).

    Path to script

    To be triggered when account is restricted.

    MySQL Governor restrict-log file URL and format

    • URL – where the log file is placed in the file system
    • Format – log file format: short, medium, long, very long

    MySQL Governor error-log file URL and logging level

    • URL – where the log file is placed in the file system
    • Level – logging level: error, debug

    Kill slow SELECT queries

    • Kill slow queries – stop running slow select queries
    • URL – log file URL, where killed queries will be saved
    • Timeout – number of seconds while slow request can be finished, otherwise, it will be canceled

    Gather data for detailed statistics

    Tick if yes.

    Log restricted user's queries

    Tick if yes.

    CageFS

    Allows to manage CageFS settings:

    • CageFS - enable/disable CageFS
    • CageFS Skeleton - click to update CageFS skeleton. See: Updating CageFS skeleton
    • New users will be disabled by default in CageFS - toggle to enable/disable new users in CageFS by default.

    Node.js

    Allows to enable/disable and manage Node.js Selector.

    See more:

    Python Selector section

    Allows to enable/disable and manage Python Selector.

    See more:

    When you've done with settings, click Save Changes to apply changes.

    Packages

    Packages tab allows setting the limits for as many users as you need by editing packages of proper limits. Each account belonging to a proper package adheres to those limits.

    Note

    Limits from the package will not be applied if the package’s owner differs from the owner of the account you’re trying to apply limits to. Default limits will be applied instead.

    Choose Packages tab to view and modify:

    • limits for user packages (created by hoster);
    • limits for reseller packages (created by hoster);
    • limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)).

    To modify package limits click on a pencil symbol in Actions column in a particular package row. The following limits for this package are available for setting:

    • SPEED in percent (%);
    • Virtual memory (VMEM) (can be set as unlimited by setting 0);
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits (IO) (can be set as unlimited by setting 0);
    • IOPS limits;
    • Concurrent connections (EP);
    • Number of processes (NPROC) (can be set as unlimited by setting 0);
    • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings.)

    When limits are set click Save to apply changes or Cancel to close the window.

    Note

    VE_DEFAULT package is not a real package, it's a view for default limits. You can modify default limits on a Users tab.

    On cPanel limits of package named default are applied to users with default package assigned.

    MySQL Governor package limits

    Starting from the:

    governor-mysql - 1.2-80
    +

    Installation wizard

    Overview

    CloudLinux OS Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin.

    Set up

    As you have CloudLinux OS installed, navigate to CloudLinux OS CloudLinux Manager in your control panel. CloudLinux OS Installation Wizard starts automatically if lvemanager package is installed for the first time (not updated).

    To start setting up your CloudLinux OS, click Start Wizard, otherwise click Skip Wizard, and you will be redirected to the CloudLinux Manager Dashboard.

    Note

    Installation statuses of all components are duplicated inside their corresponding boxes on the Dashboard. All Wizard actions are available there as well. Dashboard will be automatically updated as soon as the installation process finishes.

    The next step is selecting required components to be installed.

    Click Finish and Install to complete installation or click Skip Wizard to go back to the Dashboard.

    You can find a complete description of the CloudLinux OS components below.

    CloudLinux OS components

    CageFS

    A virtualized per-user file system encapsulates each customer into a ‘cage’ preventing them from seeing each other files and viewing sensitive information (e.g., system files)

    Toggle the sliders to enable CageFS by default for new and/or existing users.

    Note

    CageFS is a requirement for PHP Selector operation.

    LSAPI

    It is the fastest and most reliable way to serve PHP pages for Apache web-servers, a drop-in replacement for SuPHP, FCGID, RUID2, and ITK.

    LSAPI requires CRIU to operate and we also recommend you to use mod_suexec. You can find details in our documentation.

    MySQL Governor

    Monitors MySQL usage to throttle abusers, preventing server overload and improving overall performance.

    Note

    MySQL Governor can be automatically installed only with cPanel/WHM and DirectAdmin - use CLI instructions available here in all other cases.

    We recommend you to create a full database backup before the MySQL Governor installation.

    Node.js Selector

    Allows end users to create Node.js applications and select the specific version of Node.js and other parameters.

    Here you can choose versions to be installed and the version to be used as default.

    Ruby Selector

    Allows end users to select the specific version of Ruby they need.

    Here you can choose Ruby versions to be installed.

    Python Selector

    Allows end users to select the default version of Python and set the required versions for installation.

    Here you can choose Python versions to be installed.

    PHP Selector

    Allows end users to select the specific version of PHP they need, with over 120 PHP extensions to choose from.

    Go to CloudLinux Manager settings to set up PHP Selector options and parameters. Read more in the PHP Selector documentation.

    Note

    CageFS should be enabled for PHP Selector to operate.

    When the components to be installed are selected and configured, and installation is started, you will be redirected to the CloudLinux Manager | Dashboard.

    Installation process and possible errors

    Installation status is displayed throughout the process in the Dashboard. Click Installing to show modules installation state.

    All installed modules are displayed on the Dashboard. When installation is completed successfully, you will see the following status.

    If you decide to remove failed module or a module to be installed by clicking the (X) button, a confirmation dialog will appear.

    After confirming the action, the module will disappear from the list.

    If module installation fails, the Installing button changes to Warning and the module indicator will turn red.

    • Click to download the error log.
    • Click to try to install a module again.
    • Click to remove a specific module from the installation queue. The module will be displayed on the Dashboard but will not be installed.

    If module auto-installation fails, you will see that the module indicator turns yellow.

    In this case, you can download a log for details and try to install the module again.

    Wizard fatal error

    In case of a fatal error, you will see the following warning.

    • Click to download the error log.
    • Click to try to install module(s) again.
    • Click to cancel installation. The canceled modules will be removed from the installation process.

    You can contact our support team for further assistance anytime by submitting a ticket in our helpdesk system.

    CloudLinux Manager

    cPanel CloudLinux Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics.

    Administrator credentials allow controlling limits for host users.

    Log in as administrator to get access to the following functionality:

    • Dashboard provides a quick overview of statistics and all administrative information for server administrators.
    • Current usage tab - allows monitoring users resource usage at the moment;
    • Users tab with the list of all users allows viewing and managing all the users limits;
    • Statistics tab displays the statistics of resource usage for proper timeframe or proper users;
    • Options tab - allows setting LVE Faults email notifications for users;
    • Packages allows managing packages limits;
    • PHP Selector tab.

    For more details, please go to the ImunifyAV documentation.

    Notifications color codes

    In the CloudLinux Manager UI we use the following color codes for notifications:

    • warning
    • error
    • information
    • success

    The following actions are available in the action notifications (error, success)

    • follow a link
    • copy a command
    • copy a whole traceback

    The following actions are available in the system notifications (information, warning):

    • follow a link
    • copy a command
    • copy a whole message
    • mark a notification as “Read”
    • snooze a notification

    Dashboard

    Note

    Available starting from CloudLinux Manager 4.0-26.8

    CloudLinux OS dashboard provides a quick overview of statistics and all administrative information for server administrators.

    Go to CloudLinux Manager | Dashboard.

    The CloudLinux OS Dashboard provides the following information:

    • End Users hitting limits — number of users reaching their limit in any kind of resource. Data is within the last 24 hours.
    • Resellers hitting limits —  number of enrolled Resellers that are reaching their limit in any kind of resource. Data is within the last 24 hours.
    • Node.js Selector block displays the following data:
      • Node.js Selector status (Enabled/Disabled/Not installed) —  displays a current status of the Node.js Selector.

        • To manage Node.js Selector, click Manage. You will be redirected to LVE Manager | Options | Node.js Selector.

        • Click Install to install Node.js Selector, you will be redirected to CloudLinux Manager | Options | Node.js.Selector.

      • Default version — the current default version of Node.js set in your system. Click Manage to change the default version account wide.

      • Applications —  number of installed/all applications for the account.

    • Ruby Selector block displays the following data:
      • Ruby Selector status (Enabled/Disabled/Not installed) — displays a current status of the Ruby Selector.

        • To manage Ruby Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Ruby Selector.

        • Click Install to install Ruby Selector, you will be redirected to CloudLinux Manager | Options | Ruby Selector.

      • Applications — number of installed/all applications for the account.

    • PHP Selector block displays the following data:
      • Default version — the default version of PHP binaries. Click Manage to change the default version, enable or disable PHP Selector, change the list of supported versions, and choose default modules. You will be redirected to CloudLinux Manager | PHP Selector.
        PHP Selector (cPanel) has malfunctions warnings about the most common issues.
    • Python Selector block displays the following data:
      • Python Selector status (Enabled/Disabled/Not installed — displays a current status of the Python Selector.

        • To manage Python Selector, click Manage. You will be redirected to CloudLinux Manager | Options | Python Selector.

        • Click Install to install Python Selector, you will be redirected to CloudLinux Manager | Options | Python Selector.

      • Applications —  number of installed/all applications for the account.

    • Reseller Limits block displays the following data:
      • Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click Manage. You will be redirected to CloudLinux Manager | Users tab.
      • Reseller’s accounts with Reseller Limits/all —  the number of Reseller accounts with Reseller Limits enabled versus the total number of Reseller accounts.
      • Reseller’s End Users with enabled Reseller Limits/all — the number of end users with Reseller Limits enabled versus all End Users that belong to all resellers.
    • MySQL Governor block displays the following data:
      • MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click Manage. You will be redirected to CloudLinux Manager | Options | MySQL Governor Mode of Operation. Click Install to install MySQL Governor.
      • Mode — displays the MySQL Governor mode of operation. Click Manage to change the mode.
        • Single — single LVE is used for all customers that go over their DB limits (deprecated).
        • Off — monitor Only, no DB query limits are applied.
        • All — all queries are run inside user's LVE.
        • Abusers — only queries that go over DB limits are executed inside that user's LVE (this is the default mode).
      • Database version —  displays a current version of MySQL/MariaDB/Percona server installed in the system.
    • CageFS block displays the following data:
      • CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click Manage. You will be redirected to CloudLinux Manager | Options | CageFS. Click Install to install CageFS.
      • Mode displays the current CageFS mode of operation.
      • End users — displays the number of users with CageFS enabled/all.
    • ModLSAPI block displays the following data:
      • Mod_lsapi status (Enabled/Disabled/Not installed). Click Install to install Mod_lsapi.
      • Module version displays the running version of Mod_lsapi.
      • Criu_status displays the status of lsapi_criu:
        • Running —  means that lsapi_criu is working.
        • Stopped —  means that lsapi_criu is not working.
      • Total Domains displays the total number of domains with Mod_lsapi configured as PHP handler.
      • Criu_version displays the running version of lsapi_criu.
      • LSAPI with connection pool.

    Note

    • If statistics for server is absent for any reasons, you can update it by pressing the Refresh button. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.
    • If statistics collection is turned off it is not displayed. If you wish to get daily statistics for your server, please turn it on by adding cl_statistics_enabled=1 parameter to the /etc/sysconfig/cloudlinux file.
    • Data for the Dashboard is collected once per day. If you want to update data manually, press Refresh. This process can last from 10 seconds to one hour depending on your server's performance, number of users and applications.

    Current usage

    Choose Current usage tab to monitor users resource usage at the moment displayed in the table.

    Current usage table provides the information on the usage of Speed, memory, IO, IOPS, Number of Processes, and Entry Processes.

    Resource usage values are being refreshed every 10 seconds which is set in Auto-refresh field. You can refresh the table manually by clicking Refresh now or you can freeze the values by clicking pause button. Usage values will not change until the next manual refresh.

    Tick Hide MySQL usage checkbox to hide the information on MySQL usage.

    To expand the list of users click on the number above and in the dropdown choose the number of user to be displayed on the page.

    The list of users can be filtered by Username and Domain.

    Hoster can view all types of users:

    • End users
    • Resellers
    • Reseller’s end users
    • Reseller’s end users (no Reseller limit).

    But hoster can only manage:

    • End users
    • Resellers
    • Reseller’s end users (no Reseller limit)

    To manage Reseller’s end users hoster should login as a reseller.

    Users

    Choose Users tab to view the list of all users in the system and manage their limits.

    Note

    A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller).

    • Tick Show users with CageFS enabled to show users with CageFS file system enabled.
    • Tick Show only ignored users to show users with ignored MySQL Governor.

    The following filters are available:

    • Manage by
      • End users
      • Resellers
      • Reseller's end users
      • Reseller's end users (no Reseller limit)
    • Show only
      • Ignored users - show users with ignored MySQL Governor.
      • Users with CageFS enabled

    Also, you can search user by his Username, domain or LVE ID in the Search field.

    Actions

    Click pencil icon in Actions column to edit limits for a particular user. The following actions are available:

    • Enable/disable CageFS
    • Reset - to reset limits to default values
    • Apply Do not limit to set the limits to unlimited;
    • Setting the limits values:
      • SPEED
      • SPEED MYSQL
      • VMEM
      • PMEM
      • IO
      • MySQL IO
      • IOPS
      • EP
      • NPROC
      • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings).

    Click Save to save changes or Cancel to close the pop-up.

    Click on History symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period.

    Group actions for users with enabled CageFS

    Note

    If CageFS is disabled, group actions are not available. See how you can enable CageFS:

    • View users with enabled CageFS

      To view users with enabled CageFS, click Show only >> Users with CageFS enabled

    • Disable CageFS for several users

      To disable CageFS for several users, do the following.

      • Select a particular user or select all users
      • Click CageFS >> Disable.

    Statistics

    Choose Statistics tab to view end users, resellers and resellers’ end users limits usage statistics.

    The following parameters can be displayed in the statistics table:

    • SPEED usage per user;
    • IO usage per user;
    • EP usage per user;
    • VMEM usage per user;
    • PMEM usage per user;
    • NPROC usage per user;
    • IOPS usage per user;
    • MySQL usage per user.

    Click Show and select columns from the drop-down to set which parameters should be displayed in the table.

    Statistics table can be filtered by:

    • Timeframe - to view the statistics for a particular period;
    • Limit - to view a particular limit type usage only;
    • Top LVEs - to view top used limits only;
    • LVE approaching limit - to view the limits that are approaching maximum provided value;
    • Fault LVE - the limits that have reached the maximum value.

    Click Manage to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down.

    Click chart symbol in the View column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time.

    Options

    The following sections are available to set the required options:

    LVE Faults Email Notifications

    Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves.

    To allow users to do so, the administrator should enable the Notify Customers and Notify Reseller’s Customers options.

    Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface.

    But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface.

    A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose Options tab to manage LVE Faults email notifications.

    The following types of notification are available:

    • Notify Hoster - receive notifications on users and its own LVE faults
    • Notify Reseller - allows reseller receiving notifications on their user's LVE faults
    • Notify Customers - allow host's users receiving notifications on their LVE faults
    • Notify Reseller's customers - allows resller's users receiving notifications on their LVE faults

    Faults to include

    Tick checkboxes to include required limits to the notifications:

    • SPEED - include SPEED limit fault to the notification
    • IO - include I/O limit fault info to the notification
    • IOPS - include IOPS limit fault info to the notification
    • Memory - include Memory limit fault info to the notification
    • Concurrent connections - include concurrent connections limit fault info to the notification
    • NPROC - include NPROC limit fault info to the notification.

    Minimum number of Faults to notify

    Set a number of faults required for the notification to be sent for:

    • Hoster and Reseller
    • User

    Set the frequency of email notifications sending to:

    • Hoster and Reseller
    • User

    Inode limits

    Allows to reset inode limits and show/hide end-user inode usage.

    User interface settings

    Allows to manage user interface settings:

    • Hide LVE end user usage statistic - a user will not be able to see his usage statistic in his web interface
    • Hide Ruby App in web-interface - a user will not be able to see Ruby Selector in his web interface

    MySQL Governor settings

    Allows to manage MySQL Governor settings.

    MySQL Governor Mode of operation

    • Off - monitor Only – not throttle customer's queries, only monitor MySQL usage.
    • Single - single restricted LVE for all restricted customers – all queries for all restricted customers well be sharing the same LVE.
    • Abusers - use LVE for a user to restrict queries (default mode) – if a user goes over the limits, all his queries will execute inside his LVE.
    • All - always run queries inside user's LVE – limits are applied to both PHP & MySQL queries at the same time.

    MySQL Governor restrict type mode

    • Period – allows to restrict users for a specified time period
    • Limit (default mode) – allows to restrict/automatically unrestrict users that hit limits/don't hit limits during 'unlimit=time'

    Unlimit users automatically in

    Allows to unlimit users automatically if they don't hit the limits during the specified number of seconds/minutes/hours/days.

    Restricted time periods

    User restriction time period for different levels of restriction and the timeout to apply a higher restriction level.

    • Level1
    • Level2
    • Level3
    • Level4
    • Timeout

    User maximum connections

    The number of simultaneous connections of a restricted user (in the LVE mode).

    Path to script

    To be triggered when account is restricted.

    MySQL Governor restrict-log file URL and format

    • URL – where the log file is placed in the file system
    • Format – log file format: short, medium, long, very long

    MySQL Governor error-log file URL and logging level

    • URL – where the log file is placed in the file system
    • Level – logging level: error, debug

    Kill slow SELECT queries

    • Kill slow queries – stop running slow select queries
    • URL – log file URL, where killed queries will be saved
    • Timeout – number of seconds while slow request can be finished, otherwise, it will be canceled

    Gather data for detailed statistics

    Tick if yes.

    Log restricted user's queries

    Tick if yes.

    CageFS

    Allows to manage CageFS settings:

    • CageFS - enable/disable CageFS
    • CageFS Skeleton - click to update CageFS skeleton. See: Updating CageFS skeleton
    • New users will be disabled by default in CageFS - toggle to enable/disable new users in CageFS by default.

    Node.js

    Allows to enable/disable and manage Node.js Selector.

    See more:

    Python Selector section

    Allows to enable/disable and manage Python Selector.

    See more:

    When you've done with settings, click Save Changes to apply changes.

    Packages

    Packages tab allows setting the limits for as many users as you need by editing packages of proper limits. Each account belonging to a proper package adheres to those limits.

    Note

    Limits from the package will not be applied if the package’s owner differs from the owner of the account you’re trying to apply limits to. Default limits will be applied instead.

    Choose Packages tab to view and modify:

    • limits for user packages (created by hoster);
    • limits for reseller packages (created by hoster);
    • limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)).

    To modify package limits click on a pencil symbol in Actions column in a particular package row. The following limits for this package are available for setting:

    • SPEED in percent (%);
    • Virtual memory (VMEM) (can be set as unlimited by setting 0);
    • Physical memory (PMEM) (can be set as unlimited by setting 0);
    • I/O limits (IO) (can be set as unlimited by setting 0);
    • IOPS limits;
    • Concurrent connections (EP);
    • Number of processes (NPROC) (can be set as unlimited by setting 0);
    • INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled Initial quotas in cPanel settings.)

    When limits are set click Save to apply changes or Cancel to close the window.

    Note

    VE_DEFAULT package is not a real package, it's a view for default limits. You can modify default limits on a Users tab.

    On cPanel limits of package named default are applied to users with default package assigned.

    MySQL Governor package limits

    Starting from the:

    governor-mysql - 1.2-80
     lvemanager - 7.8.3-1
     lve-utils - 6.4.6-1
     alt-python27-cllib - 3.2.40-1
     

    The possibility to manage Mysql Governor package limits was added. This can be done via CloudLinux Manager or via command line.

    How to install

    yum update governor-mysql lvemanager lve-utils alt-python27-cllib
    -

    Meaning

    In all previous versions admin had possibility to manage individual MySQL Governor limits like:

    • SPEED MYSQL
    • MySQL IO

    Now admin can manage all those limits for hosting packages and this will increase the convenience of administration.

    All principles of working with MySQL Governor package limits are the same as for LVE limits:

    • Initial limits for package can be settled from the the LVE extension (cPanel only) or they are inherited from the DEFAULT package (user).
    • Non default (updated) package limits will not be changed in case DEFAULT limits are changed.
    • Users in the package inherit package’s limits or have individual limits.
    • Individual user limits can be reseted to the package’s limits.
    • In case of reseller’s packages and users Mysql Governor limits can be managed only by admin.

    Manage MySQL Governor limits

    To view the package limits open this page:

    To manage the package limits edit the needed package:

    PHP Selector

    Selector tab

    Selector tab allows controlling PHP Selector settings.

    • In Selector is section choose Enabled or Disabled from the dropdown list to enable or disable PHP Selector.
    • In Default PHP version choose a proper PHP version or Native from dropdown list to apply.
    • In Hide php extensions for end-user you can enable/disable the ability for end-user to select PHP extensions in his web interface.
    • In Supported versions choose required PHP versions to support.

    Choose default modules from the list for a proper PHP version or for native.

    Note

    You can also use PHP Selector CLI

    Selector tab additional features

    Go to cPanel admin interface → CloudLinux manager → Selector

    Selector tab has two sub tabs: Main settings and Domains.

    • Main settings sub tab allows to config general settings for PHP Selector
      • Selector is: allows to enable/disable PHP Selector
      • Default PHP version: allows to set PHP version by default
      • Hide PHP extensions for end-user: allows to hide PHP extensions
      • Hide "My domains" page for end-user: allows to disable such tab for end-user
      • Supported versions: allows to select supported PHP versions
    • Domains sub tab contains the list of User-Domain pairs to visualize which PHP Selector is used by a domain

    Admin can filter the list:

    If an admin clicks Use PHP selector in the Action table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and php-fpm is disabled. Users' websites will use the version set in CloudLinux OS PHP Selector (user interface). Group operation also can be used.

    PHP Selector troubleshooting

    You can see the following errors in the Domains tab.

    1. PHP Selector cannot be activated for this domain. Initialize CageFS in the Options tab first.

    Solution

    Initialize CageFS in the Options tab (see installation instructions).

    1. PHP Selector cannot be activated for this domain. Enable CageFS for this user in the Users tab first.

    Solution

    Enable CageFS in the Users tab (see installation instructions).

    • You can enable CageFS for one user by individual slider (for lve 1001 in the picture above)
    • You can enable CageFS for a group of user by the CageFS button (for lve 1002, 1003 in the picture above)
    1. Some PHP related issues need to be resolved in order to enable domain management. Find the list of PHP related issues that prevent domain management above.

    Solution

    If you cannot see Diagnostic tool notifications, you can restart it. Then you can fix the issues using these instructions.

    PHP Selector diagnostic tool and notifications

    The diagnostic tool allows to catch some issues. You can start diagnostic by clicking Run diagnostic button.

    The most popular errors and solutions:

    1. Your PHP Handler does not support CLoudLinux OS PHP Selector

    Solution: install mod_suexec (see instructions here) and then run the following command:

    cagefsctl --force-update
    +

    Meaning

    In all previous versions admin had possibility to manage individual MySQL Governor limits like:

    • SPEED MYSQL
    • MySQL IO

    Now admin can manage all those limits for hosting packages and this will increase the convenience of administration.

    All principles of working with MySQL Governor package limits are the same as for LVE limits:

    • Initial limits for package can be settled from the the LVE extension (cPanel only) or they are inherited from the DEFAULT package (user).
    • Non default (updated) package limits will not be changed in case DEFAULT limits are changed.
    • Users in the package inherit package’s limits or have individual limits.
    • Individual user limits can be reseted to the package’s limits.
    • In case of reseller’s packages and users Mysql Governor limits can be managed only by admin.

    Manage MySQL Governor limits

    To view the package limits open this page:

    To manage the package limits edit the needed package:

    PHP Selector

    Selector tab

    Selector tab allows controlling PHP Selector settings.

    • In Selector is section choose Enabled or Disabled from the dropdown list to enable or disable PHP Selector.
    • In Default PHP version choose a proper PHP version or Native from dropdown list to apply.
    • In Hide php extensions for end-user you can enable/disable the ability for end-user to select PHP extensions in his web interface.
    • In Supported versions choose required PHP versions to support.

    Choose default modules from the list for a proper PHP version or for native.

    Note

    You can also use PHP Selector CLI

    Selector tab additional features

    Go to cPanel admin interface → CloudLinux manager → Selector

    Selector tab has two sub tabs: Main settings and Domains.

    • Main settings sub tab allows to config general settings for PHP Selector
      • Selector is: allows to enable/disable PHP Selector
      • Default PHP version: allows to set PHP version by default
      • Hide PHP extensions for end-user: allows to hide PHP extensions
      • Hide "My domains" page for end-user: allows to disable such tab for end-user
      • Supported versions: allows to select supported PHP versions
    • Domains sub tab contains the list of User-Domain pairs to visualize which PHP Selector is used by a domain

    Admin can filter the list:

    If an admin clicks Use PHP selector in the Action table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and php-fpm is disabled. Users' websites will use the version set in CloudLinux OS PHP Selector (user interface). Group operation also can be used.

    PHP Selector troubleshooting

    You can see the following errors in the Domains tab.

    1. PHP Selector cannot be activated for this domain. Initialize CageFS in the Options tab first.

    Solution

    Initialize CageFS in the Options tab (see installation instructions).

    1. PHP Selector cannot be activated for this domain. Enable CageFS for this user in the Users tab first.

    Solution

    Enable CageFS in the Users tab (see installation instructions).

    • You can enable CageFS for one user by individual slider (for lve 1001 in the picture above)
    • You can enable CageFS for a group of user by the CageFS button (for lve 1002, 1003 in the picture above)
    1. Some PHP related issues need to be resolved in order to enable domain management. Find the list of PHP related issues that prevent domain management above.

    Solution

    If you cannot see Diagnostic tool notifications, you can restart it. Then you can fix the issues using these instructions.

    PHP Selector diagnostic tool and notifications

    The diagnostic tool allows to catch some issues. You can start diagnostic by clicking Run diagnostic button.

    The most popular errors and solutions:

    1. Your PHP Handler does not support CLoudLinux OS PHP Selector

    Solution: install mod_suexec (see instructions here) and then run the following command:

    cagefsctl --force-update
     
    1. Incorrect config file format

    Solution: correct the file format via SSH.

    1. Some domains have neither PHP version selected in MultiPHP Manager no system default version or have php-fpm enabled.

    Solution: see installation instructions for cPanel users

    1. MultiPHP system default version is not ea-php

    Solution: see installation instructions for cPanel users

    In the CloudLinux Manager v.6.0.6-1 the diagnostic tool can not catch problems with CageFS. See installation instructions for cPanel users.

    Python Selector

    Hoster interface allows to enable and disable Python Selector and manage individual Python versions.

    Go to CloudLinux Manager → Options Tab → Python Selector.

    A list of installed Python versions is displayed. There are several columns in the list.

    • Version — displays Python version.
    • Path — Python package location.
    • Applications — number of applications that use this Python version. Click on an application number to go to the list of applications.
    • Enabled — displays if particular Python version is enabled.
    • Actions — allows to install, delete, and make default a particular Python version.

    To display all changes immediately click Refresh.

    How to enable/disable Python Selector

    To enable Python Selector move a slider to Enable and complete the action by clicking Agree or click Cancel to close the popup. To disable Python Selector move a slider back to Disable.

    Note

    If you disable Python, all users won't be able to manage their applications

    Note

    Python Selector icon in end user interface is hidden when Python is disabled.

    How to manage Python Selector

    In the list of installed Python versions you can enable and disable, install and delete, and set a particular Python version as a default.

    Enable and disable particular Python version

    To enable particular Python version do the following:

    • Move a disabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To disable particular Python version do the following:

    • Move an enabled slider in the Enabled column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Install and delete particular Python version

    To install particular Python version do the following:

    • Click Install button in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    To delete particular Python version do the following:

    • Click Bin icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to start uninstalling process. Or close popup without changes by clicking Cancel button.

    Note

    It is impossible:

    • to remove default Python version
    • to remove version with applications
    • to install or remove version if another installation/uninstalling process is running

    Make a particular Python version as a default

    Note

    You can set a particular Python version as a default version in the CloudLinux OS installation wizard during the first installation.

    To make a particular Python version as a default version, do the following:

    • Click Double-Tick icon in the Actions column for a particular Python version.
    • In the confirmation popup click Agree to save changes or Cancel to close popup.

    Note

    It is impossible to make disabled Python version as a default version

    Applications column

    To view and operate with the list of domains with Python versions click a number in the Applications column for a particular Python version. A section with a list of Domains for particular Python version will be displayed.

    Domains are displayed by three. To load more domains click Load More button.

    To change Python version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation popup will be displayed.
    • In the popup choose Python version from a dropdown.
    • Click Change to confirm the action or Cancel to close the popup.
    • To refresh state of applications in current version you can click Refresh.

    Note

    All packages of the application(s) will be re-installed.

    Note

    You can also use Python Selector CLI

    See also: Python Selector client plugin

    Node.js Selector

    Hoster interface allows to enable and disable Node.js, and manage individual Node.js versions.

    Go to CloudLinux Manager → Options Tab → Node.js Section. A list of installed Node.js versions is displayed. There are several columns in the list.

    • Version — displays Node.js version.
    • Path — Node.js package location.
    • Applications — number of applications that use this Node.js version. Click on a digit to go to the list of applications.
    • Enabled — displays if particular Node.js version is enabled.
    • Actions — allows to install, delete, and make default a particular Node.js version.

    To display all changes immediately click Refresh link.

    How to enable/disable Node.js

    • To enable Node.js move the slider to Enable.
    • To disable Node.js move the slider back to Disable.

    Note

    If you disable Node.js, its version for all your applications will not be changed, but you can not add a new application to this version.

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    How to manage Node.js

    The list of installed Node.js versions allows to enable and disable, install and delete, and set a particular Node.js version as a default.

    Enable and disable particular Node.js version

    To enable particular Node.js version do the following:

    • Move a disabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To disable particular Node.js version do the following:

    • Move an enabled slider in the Enabled column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Install and delete particular Node.js version

    To install particular Node.js version do the following:

    • Click Install button in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    To delete particular Node.js version do the following:

    • Click Bin icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to start uninstall process.
    • Or just close a pop-up without any changes.

    Note

    It is impossible:

    • to remove default Node.js version;
    • to remove version with applications;
    • to install or remove version if another installation/uninstall process is running.

    Make a particular Node.js version as a default

    To make a particular Node.js version as a default do the following:

    • Click Double-Tick icon in the Actions column for a particular Node.js version.
    • In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

    Note

    It is impossible to make a disabled version default.

    Applications column

    To view and operate with the list of domains with Node.js versions click on a number in the Applications column for a particular Node.js version. A section with a list of Domains for particular Node.js version will be displayed.

    Domains are displayed by three. To load more domains click on Load More button.

    To change Node.js version for a particular application do the following:

    • Click Double-Arrow icon in the Actions column in a particular application row. A confirmation pop-up will be displayed.
    • In the pop-up choose Node.js version from a drop-down.
    • Click Change to confirm the action or Cancel to close the pop-up.
    • To refresh state of applications in current version you can click Refresh link.

    Note

    All packages of the application(s) will be re-installed.

    Note

    You can also use Node.js Selector CLI

    See also: Node.js Selector client plugin

    Application error log

    Since alt-mod-passenger version 5.3.7-3 we have included support for the PassengerAppLogFile directive.

    Syntax: PassengerAppLogFile path
     Default: PassengerAppLogFile path-to-passenger-log-file
     Context: virtual host, htaccess
    @@ -73,9 +73,9 @@
     
    • period_between_incidents = 300 by default, time in seconds
    • snapshots_per_minute = 2 by default, maximum number of snapshots per minute
    • max_snapshots_per_incident = 10 by default, maximum number of snapshots for an incident

    To access Snapshots you can also use lve-read-snapshot utility.

    Note

    The list of processes in a snapshot is close but not similar to the real processes list when faults were generated. It happens because of delay when the faults are happened and the snapshot is taken by the system.

    The list of MySQL queries is an output of a query:

    SELECT command, time, info FROM information_schema.processlist
     
     WHERE user = '%username';
    -

    Process list

    Displays information on processes in the selected snapshot.

    • PID: process ID
    • CMD: what command was run
    • CPU: CPU usage
    • MEM: memory usage

    Database queries (cPanel only)

    Displays information on database queries in the selected snapshot.

    HTTP queries

    Displays information on HTTP queries in the selected snapshot.

    Turning On / Off email notifications per user

    The following packages are required:

    • lvemanager-7.3.0-1
    • lve-stats-4.1.4-1

    A user can disable LVE-Stats notifications about hitting LVE limits by himself.

    The feature is available via Resource Usage client plugin | Options | LVE Stats Email Notifications

    Python Selector client plugin

    Note

    Python Selector icon in end user interface is hidden when Python is disabled

    End User interface allows end users to setup and manage Python for their web applications.

    Go to cPanel → Software Section → Setup Python App.

    Web Applications page is displayed.

    There are several columns in the list:

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Status — started/stopped — displays if an application is running or not and version of the application.
    • Actions — allows to migrate, start, restart, stop, edit, and remove a particular application.

    How to manage an application

    Create application

    NB! Do not use "python37", "python38", "python311" (i.e. "python{version number}") as names for your applications as this causes unexpected errors.

    1. Click Create Application to create an application. The Create Application tab opens.

    2. Specify the following:

      • Python version — select from the dropdown (required);
      • Application root — physical address to your application on a server that corresponds with its URI (required);
      • Application URL — HTTP/HTTPS link to your application (optional);
      • Application startup file — the file where WSGI callable object is located. It is required for application to run. Default is passenger_wsgi.py;
      • Application Entry point — WSGI callable object for your application (optional). Default is application;
      • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using cloudlinux-selector utility).
    3. Optionally, add environment variable. To do so, click Add Variable and specify variable name and value, then click the Done or Cancel to close an adding form.

    To delete or edit environment variable, click Bin or Pencil for the required variable.

    Start application

    To start a stopped application do the following:

    • Click Start in the Actions column in a stopped application row.
    • When an action is completed a Start changes to Stop.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop changes to Start.

    Restart application

    To restart a started application do the following:

    • Click Restart in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin in the Actions column in a particular application row.
    • In the confirmation popup click Agree to start removing or Cancel to close the popup.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation popup will be displayed.

    Edit application

    To edit application do the following:

    • Click the Pencil in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    • Restart application — click Restart.
    • Stop application — click Stop App.
    • Remove application — click Destroy and confirm the action in a popup.
    • Change Python version — choose Python version from a dropdown.
    • Change Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
    • Change Application URL — specify in a field an HTTP/HTTPS link to the application.
    • Open Application URL — click the Open.
    • Change Application startup file — specify as NAME.py file.
    • Change Application Entry point — specify WSGI callable object for your application.
    • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using cloudlinux-selector utility).
    • Run pip install command — click Run pip install to install the package(s) described in the configuration file.
    • Add Configuration files — click Add and specify all required information.
    • Edit available configuration file — click Edit, the file opens in a new popup.
    • Remove available configuration file from the list — click Remove and confirm the action or click Cancel to close the popup.
    • Add Environment variables — click Add Variable and specify a name and a value.

    Click Save to save all changes or Cancel to close the tab.

    Migrate application

    For details see How to migrate an application to the new Python Selector

    Note

    You can also use Python Selector CLI

    Node.js Selector client plugin

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    End User interface allows end users to setup and manage Node.js for their web applications.
    Go to cPanel → Software Section → Setup Node.js App.

    Web Applications page is displayed.

    There are several columns in the list.

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Mode — can be production or development.
    • Status — started/stopped — displays if an application is running or not and version of application.
    • Actions — allows to start, restart, stop, edit, and remove a particular application.

    How to manage application

    Start application

    To start a stopped application do the following:

    • Click Start icon in the Actions column in a stopped application row.
    • When an action is completed a Start icon changes to Stop icon.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop icon changes to Start icon.

    Restart application

    To restart started application do the following:

    • Click Restart icon in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin icon in the Actions column in a particular application row.
    • In the confirmation pop-up click Agree to start removing or Cancel to close pop-up.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation pop-up will be displayed.

    Edit application

    To edit application do the following:

    • Click Pencil icon in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    • Restart application — click Restart button.
    • Stop Node.js — click Stop Node.js button.
    • Run JavaScript script — click Run JS Script button to run a command specified in the Scripts section of the package.json file. Specify the name of the script to run plus any parameters then click Ok .
    • Remove application — click Delete button and confirm the action in a pop-up.
    • Change Node.js version — choose Node.js version from a drop-down.
    • Change Application mode — choose application mode from a drop-down. Available modes are Production and Development .
    • Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
    • Application URL — specify in a field an HTTP/HTTPS link to the application.
    • Application startup file — specify as NAME.js file .
    • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Node.js applications via UI (or using cloudlinux-selector utility).
    • Run npm install command — click Run npm install button to install the package(s) described in the package.json file.
    • Add Environment variables — click Add Variable and specify a name and a value.

    Note

    You can also use Node.js Selector CLI

    Ruby Selector client plugin

    End user interface allows end users to setup and manage Ruby for their web applications.

    Go to cPanel → Software Section → Setup Ruby App.

    Setup Ruby application page is displayed.

    Here you can do the following:

    • Setup a new application.
    • View/edit/restart/remove the existing application.

    PHP Selector client plugin

    End user interface allows end users to select and manage PHP extensions and options for the particular PHP version.

    Go to cPanel → Software Section → Select PHP Version.

    PHP Extensions page opens.

    Here you can choose extensions for the particular PHP version, the current PHP version and reset to default.

    To manage PHP options, click Switch to PHP options.

    All changes are saved automatically.

    • allow_url_fopen. Allows PHP file functions to retrieve data from remote locations over FTP or HTTP. This option is a great security risk, thus do not turn it on without necessity.
    • display_errors. Determines whether errors should be printed to the screen as part of the output or if they should not be shown to a user.
    • error_reporting. The error reporting level.
    • file_uploads. Allows uploading files over HTTP.
    • include_path. The list of directories where scripts look for files (similar to system's PATH variable). To separate directories, use a colon (:) For example: .:/dir/inc:/usr/lib/php
    • log_errors. Tells whether to log errors. By default, errors are logged in the server's error log. Use the error_log directive to specify the path to your own log file.
    • mail.force_extra_parameters. Additional parameters for the mail() function used to send mail. For example, to use your custom Sendmail configuration: -C /dir/conf.cf
    • max_execution_time. The maximum time in seconds a script is allowed to run before it is terminated.
    • max_input_time. The maximum time in seconds a script is allowed to parse input data.
    • memory_limit. The maximum amount of memory in bytes a script is allowed to allocate. Set the value to -1 to have no memory limit (not recommended). Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    • open_basedir. The list of directories used to limit the files that can be opened by PHP. If the file is outside the specified directories, PHP scripts will refuse to open it. To separate directories, use a colon. For example: /dir/upload:/usr/tmp.
    • post_max_size. The maximum size in bytes of data that can be posted with the POST method. Typically, should be larger than upload_max_filesize and smaller than memory_limit. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 16M.
    • session.save_path. The directory where PHP writes session data (files). For example: /dir/tmp
    • short_open_tag. Allows the short form of the PHP open tag.
    • upload_max_filesize. The maximum size in bytes of an uploaded file. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.

    PHP Selector. My Domains tab

    The My Domains tab contains a list of user’s domains to visualize which PHP Selector is used by domain.

    A user can configure a domain to use CloudLinux OS PHP Selector.

    1. Click Use PHP Selector

    1. Set a version in PHP Selector

    Note

    If php-fpm is enabled for a domain the only administrator can set it to disable.

    CloudLinux Manager options

    You can change CloudLinux Manager settings for a server manually via cPanel/WHM or, if you have many servers, you can change CloudLinux Manager settings for them in the config file.

    Changing settings manually

    • Log in to cPanel, go to WHM, choose CloudLinux OS and click Options.
    • Change settings.

    Changing settings in the config file

    You can modify the following options in the config file /var/cpanel/cpanel.config directly for example via Puppet.

    lve_hideextensionsHides (when =1) range of php extensions for user in Select PHP version
    lve_hideuserstat Hides (when =1) LVE statistics in cPanel Stats Bar (UI)
    lve_showinodeusageDisplays (when =1) used inodes in cPanel (UI)
    lve_hide_selectorTurns off UI PHP Selector (Select PHP Version option)
    lve_enablerubyappDisplays (when =1) Ruby Selector in user’s interface (UI)

    Note

    It is not allowed to change lve_enablepythonapp option in the config file directly.

    You can use cloudlinux-selector utility to change lve_enablepythonapp option:

    cloudlinux-selector set --json --interpreter=python --selector-status=enabled
    +

    Process list

    Displays information on processes in the selected snapshot.

    • PID: process ID
    • CMD: what command was run
    • CPU: CPU usage
    • MEM: memory usage

    Database queries (cPanel only)

    Displays information on database queries in the selected snapshot.

    HTTP queries

    Displays information on HTTP queries in the selected snapshot.

    Turning On / Off email notifications per user

    The following packages are required:

    • lvemanager-7.3.0-1
    • lve-stats-4.1.4-1

    A user can disable LVE-Stats notifications about hitting LVE limits by himself.

    The feature is available via Resource Usage client plugin | Options | LVE Stats Email Notifications

    Python Selector client plugin

    Note

    Python Selector icon in end user interface is hidden when Python is disabled

    End User interface allows end users to setup and manage Python for their web applications.

    Go to cPanel → Software Section → Setup Python App.

    Web Applications page is displayed.

    There are several columns in the list:

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Status — started/stopped — displays if an application is running or not and version of the application.
    • Actions — allows to migrate, start, restart, stop, edit, and remove a particular application.

    How to manage an application

    Create application

    NB! Do not use "python37", "python38", "python311" (i.e. "python{version number}") as names for your applications as this causes unexpected errors.

    1. Click Create Application to create an application. The Create Application tab opens.

    2. Specify the following:

      • Python version — select from the dropdown (required);
      • Application root — physical address to your application on a server that corresponds with its URI (required);
      • Application URL — HTTP/HTTPS link to your application (optional);
      • Application startup file — the file where WSGI callable object is located. It is required for application to run. Default is passenger_wsgi.py;
      • Application Entry point — WSGI callable object for your application (optional). Default is application;
      • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using cloudlinux-selector utility).
    3. Optionally, add environment variable. To do so, click Add Variable and specify variable name and value, then click the Done or Cancel to close an adding form.

    To delete or edit environment variable, click Bin or Pencil for the required variable.

    Start application

    To start a stopped application do the following:

    • Click Start in the Actions column in a stopped application row.
    • When an action is completed a Start changes to Stop.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop changes to Start.

    Restart application

    To restart a started application do the following:

    • Click Restart in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin in the Actions column in a particular application row.
    • In the confirmation popup click Agree to start removing or Cancel to close the popup.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation popup will be displayed.

    Edit application

    To edit application do the following:

    • Click the Pencil in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    • Restart application — click Restart.
    • Stop application — click Stop App.
    • Remove application — click Destroy and confirm the action in a popup.
    • Change Python version — choose Python version from a dropdown.
    • Change Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
    • Change Application URL — specify in a field an HTTP/HTTPS link to the application.
    • Open Application URL — click the Open.
    • Change Application startup file — specify as NAME.py file.
    • Change Application Entry point — specify WSGI callable object for your application.
    • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using cloudlinux-selector utility).
    • Run pip install command — click Run pip install to install the package(s) described in the configuration file.
    • Add Configuration files — click Add and specify all required information.
    • Edit available configuration file — click Edit, the file opens in a new popup.
    • Remove available configuration file from the list — click Remove and confirm the action or click Cancel to close the popup.
    • Add Environment variables — click Add Variable and specify a name and a value.

    Click Save to save all changes or Cancel to close the tab.

    Migrate application

    For details see How to migrate an application to the new Python Selector

    Note

    You can also use Python Selector CLI

    Node.js Selector client plugin

    Note

    Node.js Selector icon in end user interface is hidden when Node.js is disabled.

    End User interface allows end users to setup and manage Node.js for their web applications.
    Go to cPanel → Software Section → Setup Node.js App.

    Web Applications page is displayed.

    There are several columns in the list.

    • App URI — application URI including the domain.
    • App Root Directory — application root directory relative to user's home.
    • Mode — can be production or development.
    • Status — started/stopped — displays if an application is running or not and version of application.
    • Actions — allows to start, restart, stop, edit, and remove a particular application.

    How to manage application

    Start application

    To start a stopped application do the following:

    • Click Start icon in the Actions column in a stopped application row.
    • When an action is completed a Start icon changes to Stop icon.

    Stop application

    To stop a started application do the following:

    • Click Stop icon in the Actions column in a started application row.
    • When an action is completed a Stop icon changes to Start icon.

    Restart application

    To restart started application do the following:

    • Click Restart icon in the Actions column in a started application row. A current row is blocked and when a process is completed it will be unblocked.

    Remove application

    To remove application do the following:

    • Click Bin icon in the Actions column in a particular application row.
    • In the confirmation pop-up click Agree to start removing or Cancel to close pop-up.
    • When an action is completed an application will be removed from the Web Applications table and a confirmation pop-up will be displayed.

    Edit application

    To edit application do the following:

    • Click Pencil icon in the Actions column in a particular application row. A particular application tab opens.

    The following actions are available:

    • Restart application — click Restart button.
    • Stop Node.js — click Stop Node.js button.
    • Run JavaScript script — click Run JS Script button to run a command specified in the Scripts section of the package.json file. Specify the name of the script to run plus any parameters then click Ok .
    • Remove application — click Delete button and confirm the action in a pop-up.
    • Change Node.js version — choose Node.js version from a drop-down.
    • Change Application mode — choose application mode from a drop-down. Available modes are Production and Development .
    • Application root — specify in a field a physical address to the application on a server that corresponds with its URI.
    • Application URL — specify in a field an HTTP/HTTPS link to the application.
    • Application startup file — specify as NAME.js file .
    • Passenger log file — starting from CloudLinux Manager 5.1.0-2 you can set paths to Passenger logs for Node.js applications via UI (or using cloudlinux-selector utility).
    • Run npm install command — click Run npm install button to install the package(s) described in the package.json file.
    • Add Environment variables — click Add Variable and specify a name and a value.

    Note

    You can also use Node.js Selector CLI

    Ruby Selector client plugin

    End user interface allows end users to setup and manage Ruby for their web applications.

    Go to cPanel → Software Section → Setup Ruby App.

    Setup Ruby application page is displayed.

    Here you can do the following:

    • Setup a new application.
    • View/edit/restart/remove the existing application.

    PHP Selector client plugin

    End user interface allows end users to select and manage PHP extensions and options for the particular PHP version.

    Go to cPanel → Software Section → Select PHP Version.

    PHP Extensions page opens.

    Here you can choose extensions for the particular PHP version, the current PHP version and reset to default.

    To manage PHP options, click Switch to PHP options.

    All changes are saved automatically.

    • allow_url_fopen. Allows PHP file functions to retrieve data from remote locations over FTP or HTTP. This option is a great security risk, thus do not turn it on without necessity.
    • display_errors. Determines whether errors should be printed to the screen as part of the output or if they should not be shown to a user.
    • error_reporting. The error reporting level.
    • file_uploads. Allows uploading files over HTTP.
    • include_path. The list of directories where scripts look for files (similar to system's PATH variable). To separate directories, use a colon (:) For example: .:/dir/inc:/usr/lib/php
    • log_errors. Tells whether to log errors. By default, errors are logged in the server's error log. Use the error_log directive to specify the path to your own log file.
    • mail.force_extra_parameters. Additional parameters for the mail() function used to send mail. For example, to use your custom Sendmail configuration: -C /dir/conf.cf
    • max_execution_time. The maximum time in seconds a script is allowed to run before it is terminated.
    • max_input_time. The maximum time in seconds a script is allowed to parse input data.
    • memory_limit. The maximum amount of memory in bytes a script is allowed to allocate. Set the value to -1 to have no memory limit (not recommended). Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.
    • open_basedir. The list of directories used to limit the files that can be opened by PHP. If the file is outside the specified directories, PHP scripts will refuse to open it. To separate directories, use a colon. For example: /dir/upload:/usr/tmp.
    • post_max_size. The maximum size in bytes of data that can be posted with the POST method. Typically, should be larger than upload_max_filesize and smaller than memory_limit. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 16M.
    • session.save_path. The directory where PHP writes session data (files). For example: /dir/tmp
    • short_open_tag. Allows the short form of the PHP open tag.
    • upload_max_filesize. The maximum size in bytes of an uploaded file. Use shortcuts for byte values: K (kilo), M (mega), and G (giga). For example, 128M.

    PHP Selector. My Domains tab

    The My Domains tab contains a list of user’s domains to visualize which PHP Selector is used by domain.

    A user can configure a domain to use CloudLinux OS PHP Selector.

    1. Click Use PHP Selector

    1. Set a version in PHP Selector

    Note

    If php-fpm is enabled for a domain the only administrator can set it to disable.

    CloudLinux Manager options

    You can change CloudLinux Manager settings for a server manually via cPanel/WHM or, if you have many servers, you can change CloudLinux Manager settings for them in the config file.

    Changing settings manually

    • Log in to cPanel, go to WHM, choose CloudLinux OS and click Options.
    • Change settings.

    Changing settings in the config file

    You can modify the following options in the config file /var/cpanel/cpanel.config directly for example via Puppet.

    lve_hideextensionsHides (when =1) range of php extensions for user in Select PHP version
    lve_hideuserstat Hides (when =1) LVE statistics in cPanel Stats Bar (UI)
    lve_showinodeusageDisplays (when =1) used inodes in cPanel (UI)
    lve_hide_selectorTurns off UI PHP Selector (Select PHP Version option)
    lve_enablerubyappDisplays (when =1) Ruby Selector in user’s interface (UI)

    Note

    It is not allowed to change lve_enablepythonapp option in the config file directly.

    You can use cloudlinux-selector utility to change lve_enablepythonapp option:

    cloudlinux-selector set --json --interpreter=python --selector-status=enabled
     

    Or you can change it via WHM -> CloudLinux Manager -> Options -> Python Selector -> Python

    After modifying the config files directly, you should execute the following command to apply changes:

    /usr/share/l.v.e-manager/utils/dynamicui.py --sync-conf=all
     

    cPanel LVE Extension

    Note

    CloudLinux Manager 1.0-9.8+

    cPanel LVE Extension allows to control LVE limits for packages via cPanel hosting packages control interface and via cPanel WHM API . It simplifies integration with existing billing systems for cPanel (like WHMCS for example).

    Add Package Extension

    To add LVE Settings to standard cPanel package, go to Packages | Add a Package.

    Note

    You can find the information on how to add a package in official cPanel documentation on the link: https://documentation.cpanel.net/display/ALD/Add+a+Package

    Tick LVE Settings in the bottom of the page to open LVE Settings form.

    You can specify the following options:

    Note

    Your changes to LVE Settings will appear in the system after a little while.

    Speed SettingsMaximum CPU usage for an account. Must be in the range 1 - 100 (but obligatory > 0 ) if old format is used; use % or Mhz\Ghz to set CPU limit as speed; Type DEFAULT to use default value.
    Memory Settings Pmem - Maximum physical memory usage for an account. Vmem - Maximum virtual memory usage for an account. Must be a positive number. Postfix allowed only in KGMT. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Max entry proc Settings Maximum number of entry processes (concurrent connections) for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    Nproc Settings Maximum number of processes usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IO Settings Maximum I/O (input/output) usage speed for an account. Is measured in Kb/s. Must be a positive number. Type DEFAULT to use default value. Type 0 for unlimited resource.
    IOPS Settings Maximum IOPS (input/output operations per second) usage for an account. Must be a positive number. Type DEFAULT to use default value. Type 0 to unlimited resource.

    Click Add to apply your changes.

    Edit Package Extensions

    You can edit limits in any convenient for you way - in Edit a Package section, in the CloudLinux Manager or even via WHM API.

    Edit a Package

    To edit package extensions, go to Packages | Edit a Package. Choose a package from the Package list and click Edit.

    CloudLinux Manager

    To edit package extensions, go to CloudLinux Manager | Server Configuration | CloudLinux OS CloudLinux Manager | Packages and click pencil (edit) icon.

    WHM API

    To learn how to work with package extensions limits using WHM API, please read the official cPanel documentation: https://documentation.cpanel.net/display/SDK/Guide+to+Package+Extensions+-+Data+Behavior+and+Changes

    Control panel integration guide

    Here you will find the instructions and common techniques used to integrate your software with CloudLinux OS.

    - + diff --git a/cloudlinuxos/shared-pro/index.html b/cloudlinuxos/shared-pro/index.html index 787bc753..231a02ee 100644 --- a/cloudlinuxos/shared-pro/index.html +++ b/cloudlinuxos/shared-pro/index.html @@ -51,7 +51,7 @@ })(); CloudLinux OS Pro Components - +
    sidebar hamburger menu

    CloudLinux OS Pro Components

    Introduction

    CloudLinux OS Shared Hosting Pro was developed with shared hosting in mind. It’s a state-of-the-art operating system that gives shared hosting providers what they need: advanced automation, deep-look performance analytics, and centralized monitoring tools.

    It includes additional tools to expand the functionality.

    To activate the CloudLinux OS Shared Pro you have to purchase a Shared Pro license first, or upgrade the existing one from the cln.cloudlinux.com then activate a license on a server using the same instructions just with a new key.

    Info

    Apart from the functionality described in this documentation section, the Shared Pro edition includes all the CloudLinux Shared OS features.

    AccelerateWP

    Getting started

    AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.

    There are AccelerateWP, AccelerateWP Premium and AccelerateWP CDN feature suites.

    AccelerateWP suite is always enabled when AccelerateWP is turned on. Choose whether you want to offer AccelerateWP Premium offer AccelerateWP Premium or CDN (Content Delivery Network) for your users (by opting in) and click "Turn on" to start exploring AccelerateWP.

    Note

    AccelerateWP Free suite is enabled by default on all new servers. Proceed to suites configuration if your server has AccelerateWP already turned on.

    Activate AccelerateWP for a single server

    Note

    By default, AccelerateWP Premium suite includes Object Cache (which is not billable per user). If the option to allow billable optimization features is selected in CLN, the additional premium features will be included in the suite.

    Enable AccelerateWP Free for all users on the server via CLI

    Enable AccelerateWP Premium for all users on the server via CLI

    Once the AccelerateWP suite is enabled by an administrator, end-users will see an AccelerateWP tab in their control panel interface and be able to activate the optimization feature.

    When AccelerateWP CDN suite is enabled by the administrator, end-users will get 1 GB of CDN traffic and be able to activate the feature to use until the limit is reached. Once the 1GB limit is reached - the end-user will be suggested to extend the CDN limit by purchasing a CDN plan using WHMCS or 3'd party billing.

    When the AccelerateWP Premium suite is enabled by the administrator, end-users will see the free Object Caching feature in their interface. If current CloudLinux license gives access to billable features - end-users will see Image Optimization and Critical CSS features as well. but cannot activate the feature unless they purchase the feature using WHMCS or 3'd party billing.

    Activate AccelerateWP Free on all servers via Centralized Monitoring

    It is possible to activate AccelerateWP Free on all compatible servers via the Centralized Monitoring UI or via the CLN UI. Once Activate button is clicked - AccelerateWP Free will be set up automatically on all compatible servers within couple of minutes.

    Activate AccelerateWP Premium on all servers via Centralized Monitoring

    Starting from lve-utils-6.5.11-1 it is possible to activate AccelerateWP Premium via Centralized Monitoring as well.

    AccelerateWP Premium will be activated on all compatible servers once activation button is clicked and upgrade url is provided. Before using AccelerateWP Premium features - all end-users will be requested to upgrade to Premium plan using provided upgrade url.

    Note

    The list of AccelerateWP Premium features depends on current CloudLinux License, if it does not provide access to billable features (Image Optimization, Critical CSS) - only Object Cache will be available

    AccelerateWP suite

    This is a basic suite which includes AccelerateWP base feature: a WordPress optimization plugin that provides full page caching, GZIP compression and some other useful optimizations.

    AccelerateWP suite limitations

    • the website must be on an Apache or LiteSpeed web server;
    • the website must be on a server with CloudLinuxOS Shared Pro, Solo, or Admin license
    • the website must use PHP version 7.3 or higher.
    • the WordPress version must be 5.8 and higher.
    • no other WordPress Caching plugins must be installed.
    • WordPress should not be running in Multisite mode.
    AccelerateWP Premium suite

    Starting from accelerate-wp-1.9-18 - AccelerateWP Premium suite includes both free and billable optimization features. The available features depend on the CloudLinux license installed on the server.

    For more information on how to set up a CloudLinux license with AccelerateWP Premium billable features, see Setup CloudLinux license with AccelerateWP Premium billable features

    Free features

    • Object Caching;

    Billable features

    • Image Optimization;
    • Critical CSS;

    Once a server is licensed with CloudLinux and has paid features enabled, both free and billable features become available. If the license does not include paid features, only free features will be accessible.

    Object Caching feature.

    The Object Caching mechanism stores database query results in additional storage for quick access. This mechanism is beneficial in cases if a website needs to process multiple pages per second as requests come in and may be helpful in cases when full-page caching cannot be used, e.g. on personalized pages.

    Image Optimization feature

    Critical CSS feature

    Premium suite limitations

    • the website must be on an Apache or a LiteSpeed web server;
    • the website must be on a server with CloudLinuxOS Shared Pro, Solo, or Admin license
    • the website must use one of the following PHP handlers:
    • the website must use PHP version 7.2 or higher.
    • the WordPress version must be 3.7 and higher.
    • no other WordPress Caching plugins must be installed.
    • the Snuffleupagus must be turned off.
    • WordPress should not be running in Multisite mode.

    Administrator interface

    Overview

    Note

    Resellers' users are not allowed to use AccelerateWP features.

    In the CloudLinux Manager → AccelerateWP tab an administrator has the opportunity to provide end-users with a suite of features, which on its turn could be activated by end-users.

    Once the feature suite is enabled by the administrator, end-users will see an AccelerateWP tab in their control panel interface and be able to activate the optimization feature.

    Suites usage statistics

    When AccelerateWP is enabled, the AccelerateWP usage statistics are shown.

    It includes:

    • Active Users block with the total number of users and number of users who have activated the optimization feature/total users
    • Wordpress sites on server block with a total number of WordPress sites and WordPress sites optimized by the feature
    • statistics table

    Each row in the statistics table represents a particular user.

    The first column #of Wordpress sites shows the total number of user's WordPress sites.

    The second column AccelerateWP shows a number of user's WordPress sites, optimized by the feature.

    To enable premium features, click on the "Activate premium features" link and select the options you want. To integrate functions with billing, you must specify the base URL for the purchase of the function by end users.

    In case both AccelerateWP and AccelerateWP Premium feature suites are enabled, the statistics are extended with AccelerateWP Premium metrics.

    Please notice the AccelerateWP Premium rows in the Active Users and the Wordpress sites on server blocks, and also the AccelerateWP Premium column in the statistics table.

    Note

    Newly created users will be accounted for 10 min after adding. If you want to get updated statistics immediately, use the "Rescan users websites" button.

    Filters

    You may use the following filters to browse AccelerateWP statistics slices.

    • Users with WordPress sites only filter will show statistics for users who already have WordPress sites; users without WordPress installations will be hidden
    • Users with AccelerateWP only filter will show statistics for users who utilize the AccelerateWP optimization feature; users who did not activate AccelerateWP feature will be hidden
    • Users with AccelerateWP Premium only filter will show statistics for users who utilize the AccelerateWP Premium (Object Caching) feature; users who did not activate the AccelerateWP Premium feature will be hidden
    • Users with CDN Free only filter will show statistics for users who utilize the AccelerateWP CDN feature
    • Users with CDN Pro only filter will show statistics for users who utilize the AccelerateWP CDN Pro feature

    AccelerateWP CLI

    CLI commands for managing AccelerateWP are provided by those utilities:

    • cloudlinux-awp-admin - for administrator-side actions;
    • cloudlinux-awp-user - for user-side actions;

    Smart Advice CLI for managing optimization advices

    Starting from accelerate-wp-1.6-6 AccelerateWP CLI utilities provide CLI versioning which is defined via --api-version option.

    Note

    It is highly recommended to specify CLI version explicitly via --api-version, otherwise CLI will rely on default settings, which cannot guarantee backward compatability.

    Frequently used commands

    Find all enabled premium users

    Note: this can also be viewed from the AccelerateWP tab in CloudLinux Manager

    cloudlinux-awp-admin get-stat
    @@ -480,6 +480,6 @@
     
  • To restart the X-Ray agent, run the following command:

    service xray-agent restart
     
  • FAQ

    Does X-Ray affect website performance?

    X-Ray affects website performance. Our tests show 5-10 % overhead from a website loading time with X-Ray tracing enabled. X-Ray allows you to find website performance issues and should not be enabled permanently. If your website is very slow, you can enable X-Ray to find the cause and then disable it.

    My customers override php versions in different folders and X-Ray does not trace those websites, what should I do?

    You should turn on the X-Ray serverwide mode or the X-Ray phpinfo mode.

    What should I do if I see the warning "Task is duplicated by URL"?

    This warning means that you already have a task to trace this URL in the list of your tracing tasks. If you see this warning, a new task can be created only with the On hold status and you will be able to run it only when the previous task with the same URL will be completed.

    Note that the URL field supports wildcard matching and you can have a case when X-Ray is tracing the URL=domain.com/* and you are trying to create a new task with URL=domain.com/xray.php. In this case, you will see that warning because the * URLs array includes xray.php.

    I started a tracing task and made requests to URL but did not see any results in the UI. What should I do?

    1. X-Ray may not send data if a site uses a caching plugin, as the caching plugin is outputting HTML, thus there are no PHP scripts to examine. We encountered such issues with sites that use LSCache and WP Super Cache plugins. Check that your site does not use caching plugins. If so, disable it while tracing a site to get information from X-Ray. Moreover, it can also be because of caching on server side, for example NGINX Cache. Or when using CDN because requests are processed from another host. In such cases, during tracing, caching must also be disabled.

    2. If you set a client’s IP when creating the tracing task, check that your requests come to the server with this IP via phpinfo (since there may be NAT between your local machine and the server).

    3. Check that xray extension is enabled for the domain. To do so, go to the phpinfo() page and make a request. In the phpinfo output try to find the following section:

    If you cannot see that section, try to restart PHP processes for that user (the simplest way is to restart Apache) and check that you can see the xray extension.

    1. If you can see the xray extension in the phpinfo, check that X-Ray agent service is running with the service xray-agent status command. If it is not running, start it with the service xray-agent start command.

    2. If, after checking the previous items, the issue persists, contact our support team.

    What to do if X-Ray is not found in the phpinfo() page?

    If you managed to create a tracing task, this means that the xray.ini file was created in a system. Therefore, there may be two reasons why it did not appear in the phpinfo page of the domain.

    1. PHP process wasn't reloaded after adding the xray.ini. To solve this, you should restart the Apache or fpm service for the domain on which the tracing was started. At the moment, this is done automatically by the X-Ray manager after creating the task.

    2. Your domain uses a PHP version different from the one which was detected by the X-Ray manager. To solve this, check the scan dir for additional ini files for your domain.

      Then check the ini_location that was passed to the X-Ray manager by running the following command:

      cat /usr/share/alt-php-xray/manager.log | grep ini_location
       

      Find your tracing task in the output and check that the xray.ini exists in this directory, also check that the ini path is the same in the phpinfo page output and in the ini_location directive for your tracing task. If they are the same, you should reload your PHP. If they are different that means that the X-Ray manager could not correctly determine the PHP version your domain uses. In this case, contact our support team at https://cloudlinux.zendesk.com/hc/requests/new.

    I use LiteSpeed, X-Ray is enabled and it is shown in the phpinfo() page but does not collect data when sending requests to a site. What to do?

    Check for the CacheLookup on option in the htaccess file for your domain. If the option is there, LiteSpeed processes requests bypassing the PHP X-Ray extension. In this case, to get tracing information, you should remove the CacheLookup on option.

    What is the proper format for the URL?

    All of the examples below are correct:

    • http://domain.com
    • http://domain.com/
    • https://domain.com
    • https://domain.com/

    You can use any of them with a prefix www. and it is also correct.

    What packages are required for X-Ray?

    Required packages:

    • lvemanager >= 6.2.10-1
    • alt-php-xray >= 0.2-1

    $$$$$$$$$$$$$4

    - + diff --git a/index.html b/index.html index 45a30977..158c0c1a 100644 --- a/index.html +++ b/index.html @@ -51,10 +51,10 @@ })(); CloudLinux Product Documentation - +
    document icon

    Introduction to Cloudlinux OS

    Introduction to CloudLinux OS editions and their description.

    document icon

    CloudLinux OS

    Optimizes shared hosting environments by enhancing stability, security, and performance through user isolation and efficient resource management. Featuring tools like LVE resource limits, CageFS, and multiple language selectors, it empowers hosting providers to offer superior services.

    document icon

    AccelerateWP

    AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.

    document icon

    CLN - CloudLinux Licenses

    CLN is a CloudLinux Network designed to easily manage your licenses of CloudLinux products and services by means of a user-friendly interface.

    document icon

    CloudLinux Subsystem For Ubuntu

    CloudLinux subsystem on Ubuntu is a scope of deb-packages that allows using CloudLinux features on Ubuntu OS.

    document icon

    End-user Documents

    Documentation section for end-users on Cloudlinux OS.

    - + diff --git a/introduction/admin/index.html b/introduction/admin/index.html index 5f926c83..3daa36ac 100644 --- a/introduction/admin/index.html +++ b/introduction/admin/index.html @@ -51,10 +51,10 @@ })(); CloudLinux OS Admin Introduction - +
    sidebar hamburger menu

    CloudLinux OS Admin Introduction

    Description

    CloudLinux OS Admin is designed for shared hosting providers who want to flawlessly migrate their big shared hosting customer to individual VPS with same CloudLinux features as on Shared hosting. At the same time you will be able to separate such a user's websites if necessary and isolate them with CageFS for efficient and extra security. Also it may be suitable for a little server with less than 5 customers on it.

    Most of the features of CloudLinux OS Legacy (Shared) are available in this edition, with a small differences:

    • lve limits are set to unlimited by default (can be changed in CloudLinux Manager at any time)
    • MySQL Governor is not available in this edition
    • the license itself does not allow more than 5 users to be hosted on server.

    Note

    The CloudLinux OS Admin plan does not include the MySQL Governor

    Components

    CloudLinux OS Admin is very close to the regular CloudLinux Legacy (Shared) edition, which means that 99% of components described in this documentations are available for CloudLinux OS Admin.

    The exclusions are:

    The rest of the components are similar to CloudLinux OS Legacy (Shared).

    Licensing

    Installation process

    CloudLinux OS Admin installation process is the same as for other editions – use the installation guide for detailed instructions. The only difference is to purchase a CloudLinux OS Admin license from cln.cloudlinux.com.

    Note

    The CloudLinux OS Admin can be installed and compatible only with AlmaLinux OS 8+.

    Switch license

    You can convert your existing CloudLinux OS Solo installation to CloudLinux OS Admin.

    1. Obtain new key from CLN
    2. Run rhnreg_ks --force --activationkey=<new_key>

    You can pass --migrate-silently argument to skip confirmation.

    FAQ

    Q: Is it possible to convert my existing CloudLinux OS Legacy (Shared) server into CloudLinux OS Admin?
    A: Yes, for CloudLinux 8 and higher it is possible to convert CloudLinux OS Legacy (Shared) to any other edition like CloudLinux OS Admin, Solo, Shared Pro. For CloudLinux 7 it is only possible to convert it into Shared Pro.

    Q: Is Centralized Monitoring supported on CloudLinux OS Admin?
    A: No, Centralized Monitoring only works with CloudLinux OS Shared Pro license.

    - + diff --git a/introduction/cloudlinux-os-editions/index.html b/introduction/cloudlinux-os-editions/index.html index 64f77372..c379ddd7 100644 --- a/introduction/cloudlinux-os-editions/index.html +++ b/introduction/cloudlinux-os-editions/index.html @@ -51,10 +51,10 @@ })(); Introduction to CloudLinux OS - +
    sidebar hamburger menu

    Introduction to CloudLinux OS

    CloudLinux OS editions

    FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS Legacy (Shared)CloudLinux OS Shared Pro
    Maximum amount of hosting accounts15unlimitedunlimited
    Resource Limits (LVE)No*Yes**YesYes
    Reseller LimitsNo limits at allNoYesYes
    Cage FSYesYesYesYes
    MySQL GovernorNoNoYesYes
    PHP SelectorYesYesYesYes
    Python/Node.js SelectorsYes***Yes***Yes***Yes***
    Ruby SelectorNoYes***Yes***Yes***
    HardenedPHPYesYesYesYes
    Apache mod_lsapi PROYesYesYesYes
    SecureLinksNoYesYesYes
    Website monitoring toolYesYesYesYes
    Website monitoring alertsYesYesYesYes
    Slow Site analyzerYesYesYesYes
    PHP X-RayYesYesNoYes
    Centralized MonitoringNoNoNoYes
    AccelerateWPYesYesNoYes
    Support 24/7YesYesYesYes

    * Only inodes limits are available.

    ** LVE limits are disabled by default.

    *** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin servers, and servers with custom panel with own integration.

    CloudLinux OS components

    CloudLinux Manager

    LVE is a Lightweight Virtualized Environment. CloudLinux Manager allows you to maintain fine-tuned control over your resources, including CPU, IO rate, memory, inodes, numbers of processes, and concurrent connections, that any single account can use. Now you can limit resource abuse, while allowing good customers to use what they need.

    See more.

    CageFS

    CageFS is a virtualized, per-user file system that uniquely encapsulates each customer, preventing users from seeing each other and viewing sensitive information. CageFS prevents a large number of attacks, including most privilege escalation and information disclosure attacks. It is completely transparent to your customers, without any need for them to change their scripts.

    See more.

    MySQL Governor

    Note

    This component is not available in the CloudLinux OS Admin edition.

    MySQL Governor tracks CPU and disk IO usage for every user in real time and throttles MySQL queries by using LVE limits. By using the dbtop utility, it is possible to see the database usage on a per-customer basis, ensuring that the system admin always know what is going on.

    See more.

    PHP Selector

    PHP Selector allows end users to select the specific version of PHP they need. It allows ultimate flexibility by offering all popular versions of PHP, with more than 120 PHP extensions to choose from.

    See more.

    Ruby Selector

    Ruby Selector allows end users to choose the Ruby version for applications and install additional modules to the application environment. Ruby Selector uses mod_passenger for delivering optimum performance.

    See more.

    Python Selector

    Python Selector allows end users to choose the Python version for applications and install additional modules. Python Selector uses mod_passenger to get the best performance from Python applications.

    See more.

    Node.js Selector

    Node.js Selector is a CloudLinux OS component that allows each user to easily create Node.js applications, choose Node.js versions and other parameters for applications based on their needs.

    See more.

    Apache mod_lsapi PRO

    Mod_lsapi PRO is the fastest PHP handler for Apache. It is a drop-in replacement for SuPHP, FCGID, RUID2, and ITK. It has a low memory footprint and understands .htaccess PHP directives.

    See more.

    Reseller limits

    Reseller limits is a feature that allows hosters to set limits for the resources each Reseller can operate with. The server admin also provides controls on what resources each end user will have. Reseller limits set by a hoster limit the total amount of resources resellers’ end users can consume altogether.

    When a hoster has set reseller limits for the particular reseller he provides the reseller with an ability to set limits for his end users within the Reseller Interface.

    See more.

    LVE-stats 2

    LVE-stats 2 collects LVE usage statistics (CPU, memory, disk space usage), and allows to collect the usage data.

    See more.

    CloudLinux OS life cycle

    CloudLinux OS follows the life cycle policy of RHEL. Using a supported operating system is critical to maintaining a stable server environment.

    Currently, the following versions are available and supported:

    Operating System (all editions)Release DateEnd of Life and Support
    CloudLinux OS 6Feb 1, 2011Nov 30, 2020 (ELS until June 30, 2024)
    CloudLinux OS 7Apr 1, 2015Jun 30, 2024 (ELS until June 30, 2025)
    CloudLinux OS 8Mar 17, 2020May 31, 2029
    CloudLinux OS 9Jan 17, 2023May 31, 2032
    - + diff --git a/introduction/solo/index.html b/introduction/solo/index.html index ef3e4a87..ea819452 100644 --- a/introduction/solo/index.html +++ b/introduction/solo/index.html @@ -51,7 +51,7 @@ })(); CloudLinux OS Solo Introduction - +
    sidebar hamburger menu

    CloudLinux OS Solo Introduction

    What is CloudLinux OS Solo

    CloudLinux OS Solo is designed for installation on VPS or dedicated servers with a single hosting account for any number of websites.

    Unlike CloudLinux OS Legacy (Shared), this edition is not designed for Shared Hosting usage and it does not include any LVE-related features.

    We provide the CloudLinux OS Solo with pre-installed features, but for grafical interface, please install a control panel on your server.

    Currently supported OS version is CloudLinux OS Solo 8+ only. Therefore, for now, there is no possibility to use CloudLinux OS Solo on servers with OS version 6 and 7. Please refer to the currently supported OS versions.

    Benefits

    We believe that this distribution will be useful for you if:

    1. as a site owner you have different performance issues with websites hosted. CloudLinux OS Solo provides a set of tools for website monitoring and performance tracking out-of-box;
    2. as a service provider you sell VPS servers and some of your customers require OS with extensive features for better security, support, and performance.

    In any case we provide you 24/7 professional support to resolve any issues related to CloudLinux OS, its unique components and kernel.

    CloudLinux OS Solo Features

    We've pre-installed a couple of useful features in our distribution. The complete list of supported features is available in the table above.

    • CloudLinux Manager

      CloudLinux Manager is a plugin which allows you to control all the CloudLinux settings from an easy-to-use web UI integrated into your control panel.

      The sub-modules you can find in CloudLinux Manager are Website Monitoring tool, PHP Slow Site analyzer, and X-Ray.

      See more.

    • Website Monitoring tool

      Website Monitoring tool is a tool that allows you to track your websites uptime and receive notifications about problems with access.

      Website Monitoring tool can gather and display information regarding the slowest websites on the server, notify by emails about errors happened on websites and send you daily website performance reports.

      See more.

    • PHP Slow Site analyzer

      PHP Slow Site analyzer (SSA) is a tool that generates daily reports for the server administrator with information about the top N slow PHP-based URLs for all domains.

      The Slow Site analyzer tracks all PHP-based requests and selects slow ones by specific rules.

      See more.

    • X-Ray

      X-Ray is a tool developed for website performance monitoring and performance issues detection.

      X-Ray can gather and visualize information about top slowest system functions, external requests, software modules and database queries of the client’s PHP website.

      See more.

    How can I try your distribution before paying for it?

    We provide trial licenses for 30 days. You can get your trial key in two ways:

    1. On the CloudLinux OS Solo main page, see CloudLinux OS Solo.
    2. In the CloudLinux Manager plugin, see the Getting trial key section.

    The trial key must be entered during installation.

    CloudLinux OS Solo Lifecycle

    CloudLinux OS Solo has the same life cycle policy as RHEL. Using a supported operating system is critical to maintaining a stable server environment.

    Currently, the following version are supported:

    Operating SystemRelease DateEnd of Life and Support
    CloudLinux OS Solo 8Jun 1, 2021May 31, 2029

    What's next

    1. The Installation section contains information about how to install this OS.
    2. The landing page contains the instructions about how to buy license or get trial.

    Licensing

    Getting license

    You will need a trial or payed activation key to be able to use your CloudLinux OS Solo server. Please refer to this page to find information on how to get activation key.

    The activation key looks like: CLSOLO-d34463a182fede4f4d7e140f1841bcf2

    Use it to activate your system or to convert server to CloudLinux server.

    The CloudLinux OS Solo activation key is used ONLY for registration CloudLinux OS Solo 8. Trying use it for registration CloudLinux OS Legacy (Shared) 6/7/8 or converting from CentOS 6/7/ 8 to CloudLinux OS Legacy 6/7/8 cause errors.

    Note

    Activation gives you access to the CloudLinux Manager features and system updates.

    License activation

    There are several ways to register your server with CloudLinux Network:

    using the activation key by following commands:

    yum install rhn-setup --enablerepo=cloudlinux-base
    @@ -60,6 +60,6 @@
     /usr/sbin/clnreg_ks
     

    FAQ

    What is the difference between CloudLinux Solo and CloudLinux OS Legacy (Shared)?

    CloudLinux OS Solo is not designed for shared hosting usage and it does not include any LVE-related features.

    CloudLinux OS Solo provides a set of tools for website monitoring and performance tracking out-of-box. Read more.

    Can I convert CloudLinux Solo to CloudLinux Legacy?

    Yes, you can follow the instruction.

    Is the CloudLinux OS Solo paid/unpaid?

    You should purchase a license to use CloudLinux OS Solo.

    Where can I get the latest ISO of CloudLinux OS Solo?

    You can download the latest ISO and use it to install CloudLinux OS Solo on your server using this link.

    How can I get the CloudLinux OS Solo trial license?

    Please refer to this page to find information on how to get the trial license and the activation key.

    How many servers can I use with the trial license?

    The number of servers is unlimited.

    What control panel can be used with CloudLinux OS Solo?

    For the current implementation, we recommend using cPanel Solo, Plesk, DirectAdmin or Webuzo.

    How can I get support for my CloudLinux OS Solo servers?

    Please feel free to ask your questions here.

    Can I convert to CloudLinux OS Solo from another OS?

    You can convert CentOS/AlmaLinux OS to CloudLinux OS Solo. Please refer to this instruction.

    What is the Website Monitoring tool intended for?

    The Website Monitoring tool is intended for monitoring the domain main page generation time and errors occurring when requesting the main page (the main tab).

    • The administrator can get the list of the slowest requests during 24 hours (the PHP Slow Site analyzer tab).
    • The administrator can receive the daily reports with the list of the slow requests.
    • The administrator receives instant emails if the domain main page is unavailable.

    You can read more about the Website Monitoring tool here.

    What is the X-Ray tool intended for?

    The X-ray tool is intended for deep analysis of slow request cause. The X-ray tool can provide information about software modules and plugins execution time, database queries, system functions and external requests execution time.

    It can be used by the administrator and by the user.

    You can read more about the X-Ray tool here.

    Will the Website Monitoring Tool (WMT) work with the LiteSpeed and Nginx web servers?

    Yes, they will.

    Why I don't receive emails from the Website Monitoring tool?

    Please verify your cPanel firewall settings.

    Can I use other CloudLinux products (Imunify360, KernelCare) with CloudLinux OS Solo?

    Yes, it is possible.

    Can I register my CloudLinux OS Legacy (Shared) 6/7/8 with CloudLinux OS Solo trial key?

    No, you cannot.

    Can I convert CentOS 6,7 to CloudLinux OS Solo 8+ using the cldeploy script?

    No, you cannot. Only CentOS 8/AlmaLinux 8+ can be converted.

    Does CloudLinux OS Solo work with LiteSpeed?

    No, it does not. We are still implementing this feature, so it will be available in the next CloudLinux OS Solo releases.

    What is the process of upgrading if the customer adds more users to the server and will have to upgrade? (i.e., upgrading from CloudLinux OS Solo to CloudLinux OS Legacy (Shared))

    Follow the edition switching procedure.

    How to set up PHP-fpm handler for the domain?

    Since the PHP-fpm handler is required to use AccelerateWP, you may need to configure it manually.

    These are configuration steps:

    1. Ensure the PHP-fpm package for the current PHP version is installed or install it.

      • Manual installation

      Run the following command:

      yum -y install ea-phpXY-php-fpm
       

      Where XY - is required PHP version, for instance ea-php74-php-fpm

      • Via MultiPHP Manager

    2. Enable PHP-fpm handler for domain via MultiPHP Manager

    - + diff --git a/ubuntu/faq/index.html b/ubuntu/faq/index.html index 573cc72a..342c806b 100644 --- a/ubuntu/faq/index.html +++ b/ubuntu/faq/index.html @@ -51,10 +51,10 @@ })(); FAQ - +
    sidebar hamburger menu

    FAQ

    What is the CloudLinux Subsystem on Ubuntu?

    CloudLinux Subsystem on Ubuntu is a scope of deb-packages that allows using CloudLinux features on Ubuntu OS. The main goal of this subsystem is to allow using the already existing CloudLinux functionality on another OS.

    How to install the CloudLinux subsystem on Ubuntu?

    See Installation.

    Is the CloudLinux Subsystem on Ubuntu paid/unpaid?

    The CloudLinux Subsystem on Ubuntu is paid. It follows the same licensing model as CloudLinux OS.

    Can I get the ISO for the CloudLinux subsystem on Ubuntu?

    As of now, only installation via ubuntu2cloudlinux.py is available. ISO images can be provided upon request.

    What control panel can be used with the CloudLinux subsystem on Ubuntu?

    As of now, only cPanel is supported. Plesk and DirectAdmin are not supported.

    How can I get support for my CloudLinux subsystem on Ubuntu servers?

    Feel free to contact Support via Support Portal.

    Can I use Docker with the CloudLinux subsystem on Ubuntu?

    You cannot use Docker with the CloudLinux subsystem on Ubuntu in the current version.

    Is control panel integration functionality available in the current release?

    Yes, it is available.

    How to set up a PHP-fpm handler for the domain?

    Since the PHP-fpm handler is required to use Accelerate WP, you may need to configure it manually.

    These are configuration steps:

    1. Ensure the PHP-fpm package for the current PHP version is installed or install it.

      • Via MultiPHP Manager

    2. Enable PHP-fpm handler for domain via MultiPHP Manager

    - + diff --git a/ubuntu/features/index.html b/ubuntu/features/index.html index 6dd62dc8..4e114994 100644 --- a/ubuntu/features/index.html +++ b/ubuntu/features/index.html @@ -51,7 +51,7 @@ })(); Features - +
    sidebar hamburger menu

    Features

    Below you can find the list of supported features with the links to the documentation available.

    LVE limits

    Inode limits

    The documentation is available here.

    Reseller limits

    The documentation is available here.

    MySQL Governor

    MySQL Governor is a software package that monitors and restricts MySQL usage in a shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread.

    MySQL Governor can also kill off slow SELECT queries.

    MySQL Governor has multiple modes of operations, depending on the configuration. It can work in monitor-only mode, or it can use different throttling scenarios.

    MySQL Governor allows restricting customers that use too many resources. It supports following limits:

    CPU%CPU speed relative to one core. 150% would mean one and a half cores
    READbytesbytes read. Cached reads are not counted, only those that were actually read from disk will be counted
    WRITEbytesbytes written. Cached writes are not counted, only once data is written to disk, it is counted

    You can set different limits for different periods: current, short, mid, long. By default those periods are defined as 1 second, 5 seconds, 1 minute and 5 minutes. They can be re-defined using the configuration file. The idea is to use larger acceptable values for shorter periods. Like you could allow a customer to use two cores (200%) for one second, but only 1 core (on average) for 1 minute, and only 70% within 5 minutes. That would make sure that customer can burst for short periods of time.

    When a customer is restricted, the customer will be placed into special LVE with ID 3. All restricted customers will be placed into that LVE, and you can control the amount of resources available to restricted customers. Restricted customers will also be limited to only 30 concurrent connections. This is done so they wouldn't use up all the MySQL connections to the server.

    Installation

    Attention!

    MySQL Governor on Ubuntu supports the following only:

    • cl-MySQL80 on non-panel systems
    • cl-MySQL80 on cPanel
    1. Install MySQL Governor
    apt  install governor-mysql
    @@ -88,6 +88,6 @@
     

    Uninstall procedure for servers with no panel:

    /usr/bin/switch_mod_lsapi --uninstall
     apt remove liblsapi liblsapi-dev mod-lsapi
     
    - + diff --git a/ubuntu/installation/index.html b/ubuntu/installation/index.html index e3f53d56..3a5e17bb 100644 --- a/ubuntu/installation/index.html +++ b/ubuntu/installation/index.html @@ -51,7 +51,7 @@ })(); Installation - +
    sidebar hamburger menu

    Installation

    For the current release, installation from the ISO images is not available.

    To install the CloudLinux Subsystem on an Ubuntu machine:

    1. Make sure you have Python 3 installed on your system. If not, install it using the following command:
    apt install python3
    @@ -59,6 +59,6 @@
     
    1. Run the script. Provide a key if your license is key-based:
    python3 ubuntu2cloudlinux.py --key=your_key
     

    If you have an IP-based license, pass the --byip option instead:

    python3 ubuntu2cloudlinux.py --byip
     

    The script will install the CloudLinux Subsystem on your Ubuntu machine. After the installation is complete, reboot your system.

    Ubuntu2Cloudlinux explained

    The ubuntu2cloudlinux.py script installs the CloudLinux Subsystem For Ubuntu. It is a simpler script compared to the CLdeploy script for CentOS and AlmaLinux. For example, it doesn't replace the Linux kernel, only adds a dynamic module to it. Here is a list of actions that the ubuntu2cloudlinux script performs:

    • Checks that you are running the latest available version of the ubuntu2cloudlinux.py script, and updates itself if necessary.
    • Upgrades all installed packages to the latest versions (unless the --skip-full-update option is passed).
    • Registers your system with the CloudLinux Network (CLN) using the provided key or IP address.
    • Adds CloudLinux repositories for Ubuntu and a corresponding GPG key to your system.
    • Installs a minimum set of CloudLinux OS components: lve, kernel module kmodlve-dkms, lve-utils, lve-stats, alt-python.
    • Installs CloudLinux Manager (currently works with cPanel on Ubuntu).
    • Installs the mod_hostinglimits Apache module.
    • Asks you to manually reboot the system to load the new kernel module.
    - + diff --git a/ubuntu/introduction/index.html b/ubuntu/introduction/index.html index 8d5dd80d..8d0e636b 100644 --- a/ubuntu/introduction/index.html +++ b/ubuntu/introduction/index.html @@ -51,10 +51,10 @@ })(); Introduction - + -
    sidebar hamburger menu

    Introduction

    Disclaimer

    • All mentioned in this documentation trademarks, logos, and copyrights are property of their respective owners and are only mentioned for informative purposes.
    • Ubuntu is a registered trademark of Canonical Ltd.

    CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. It is a Stable version of a free extension designed exclusively for Ubuntu® 22.04 LTS users.

    Supported version of Ubuntu

    We support Ubuntu 22.04 LTS.

    CloudLinux OS editions comparison

    CloudLinux Subsystem for Ubuntu supports the same editions as CloudLinux OS, with some exceptions.

    In the table below, a feature marked with "No" for the CloudLinux Subsystem for Ubuntu means that no edition of CloudLinux Subsystem for Ubuntu supports this feature.

    FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS Legacy (Shared)CloudLinux OS Shared Pro
    Maximum amount of hosting accounts15unlimitedunlimited
    Resource Limits (LVE)No*Yes**YesYes
    Cage FSYesYesYesYes
    MySQL GovernorNoNoYesYes
    PHP SelectorYesYesYesYes
    Python/Node.js SelectorsYes***Yes***Yes***Yes***
    Ruby SelectorNoYes***Yes***Yes***
    HardenedPHPYesYesYesYes
    Apache mod_lsapi PROYesYesYesYes
    SecureLinksNoYesYesYes
    Website monitoring toolYesYesYesYes
    Website monitoring alertsYesYesYesYes
    Slow Site analyzerYesYesYesYes
    PHP X-RayYesYesNoYes
    Centralized MonitoringNoNoNoYes
    AccelerateWPYesYesNoYes
    Support 24/7YesYesYesYes

    * Only inodes limits are available.

    ** Limits are disabled by default.

    *** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin, and servers with custom panels with own integration.

    Supported control panels

    PanelSupported
    cPanel from v.102Yes
    PleskNo
    DirectAdminNo
    Other panelsYes
    No control panelYes
    - +
    sidebar hamburger menu

    Introduction

    Disclaimer

    • All mentioned in this documentation trademarks, logos, and copyrights are property of their respective owners and are only mentioned for informative purposes.
    • Ubuntu is a registered trademark of Canonical Ltd.

    CloudLinux subsystem on Ubuntu is a scope of deb-packages which allows using CloudLinux features on Ubuntu OS. It is a Stable version of a free extension designed exclusively for Ubuntu® 22.04 LTS users.

    Supported version of Ubuntu

    We support Ubuntu 22.04 LTS.

    CloudLinux OS editions comparison

    CloudLinux Subsystem for Ubuntu supports the same editions as CloudLinux OS, with some exceptions.

    In the table below, a feature marked with "No" for the CloudLinux Subsystem for Ubuntu means that no edition of CloudLinux Subsystem for Ubuntu supports this feature.

    FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS Legacy (Shared)CloudLinux OS Shared ProCloudLinux Subsystem For Ubuntu
    Maximum amount of hosting accounts15unlimitedunlimitedunlimited
    Resource Limits (LVE)No*Yes**YesYesYes
    Cage FSYesYesYesYesYes
    MySQL GovernorNoNoYesYesYes
    PHP SelectorYesYesYesYesYes
    Python/Node.js SelectorsYes***Yes***Yes***Yes***No
    Ruby SelectorNoYes***Yes***Yes***No
    HardenedPHPYesYesYesYesYes
    Apache mod_lsapi PROYesYesYesYesYes
    SecureLinksNoYesYesYesYes
    Website monitoring toolYesYesYesYesNo
    Website monitoring alertsYesYesYesYesNo
    Slow Site analyzerYesYesYesYesNo
    PHP X-RayYesYesNoYesNo
    Centralized MonitoringNoNoNoYesNo
    AccelerateWPYesYesNoYesNo
    Support 24/7YesYesYesYesYes

    * Only inodes limits are available.

    ** Limits are disabled by default.

    *** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin, and servers with custom panels with own integration.

    Supported control panels

    PanelSupported
    cPanel from v.102Yes
    PleskNo
    DirectAdminNo
    Other panelsYes
    No control panelYes
    + diff --git a/ubuntu/troubleshooting/index.html b/ubuntu/troubleshooting/index.html index b1b9214e..44f10b87 100644 --- a/ubuntu/troubleshooting/index.html +++ b/ubuntu/troubleshooting/index.html @@ -51,13 +51,13 @@ })(); Troubleshooting and Known Issues - +
    sidebar hamburger menu

    Troubleshooting and Known Issues

    Troubleshooting

    To troubleshoot and resolve issues, you can use the following log files:

    /var/log/ubuntu2cloudlinux.log - conversion log
     /var/log/lve-stats.log - lve-stats
     /var/log/dmesg - kernel module
     

    Known issues

    1. alt-php*-zts packages are not available at the moment.
    2. The tmpreaper package is used instead of tmpwatch.
    - + diff --git a/ubuntu/uninstalling/index.html b/ubuntu/uninstalling/index.html index 38a2aa5d..be63ad6d 100644 --- a/ubuntu/uninstalling/index.html +++ b/ubuntu/uninstalling/index.html @@ -51,7 +51,7 @@ })(); Uninstalling - +
    sidebar hamburger menu

    Uninstalling

    Deleting the CloudLinux Subsystem For Ubuntu

    You can uninstall CloudLinux Subsystem For Ubuntu by running the following commands:

    # Install Python 3 if you don't have it
    @@ -60,6 +60,6 @@
     
    python3 ubuntu2cloudlinux.py --uninstall
     
    reboot
     

    The script will:

    • Remove the CloudLinux OS components which are installed on your system, going over the following list: lve, kmodlve-dkms, lve-utils, lve-stats, lvemanager, cagefs, alt-python, alt-php, db-governor.
    • Remove configs for CloudLinux repositories for Ubuntu.
    • Ask you to check for remaining packages from CloudLinux and manually reboot your system.
    - + diff --git a/user-docs/index.html b/user-docs/index.html index 77c354d2..ac93f045 100644 --- a/user-docs/index.html +++ b/user-docs/index.html @@ -51,10 +51,10 @@ })(); - +
    sidebar hamburger menu

    Cloudlinux Documents for end-users

    Here you may find the documentation sections for end-users on Cloudlinux OS.

    - + diff --git a/user-docs/user-docs-shared-pro-cloudlinux/index.html b/user-docs/user-docs-shared-pro-cloudlinux/index.html index e1742355..8b2474aa 100644 --- a/user-docs/user-docs-shared-pro-cloudlinux/index.html +++ b/user-docs/user-docs-shared-pro-cloudlinux/index.html @@ -51,10 +51,10 @@ })(); CloudLinux OS for end-users - +
    sidebar hamburger menu

    CloudLinux OS for end-users

    Introduction

    CloudLinux OS is designed for shared hosting providers. It isolates each customer into a separate “Lightweight Virtualized Environment” (LVE), which allocates and limits server resources, like memory, CPU and the number of simultaneous connections, for each web hosting tenant. This ensures that tenants cannot jeopardize the stability of your servers, causing all sites to slow down or even come to a halt. CloudLinux OS also “cages” tenants from one another to avoid security breaches. This way, unstable scripts or malware are not able to sprawl across your customer sites, causing severe harm.

    SmartAdvice Plugin

    Overview

    SmartAdvice Plugin is a WordPress Must Use Plugin that displays the available advise for the site, which can be activated/deactivated from the WordPress admin panel. Installing and uninstalling the plugin is an automatic process, depending on the available advise for the site.

    Requirements

    • PHP version 5.6 or higher
    • WordPress version 5.0 or higher

    Managing Advice via SmartAdvice Plugin

    If there is available advice, a widget will be displayed in the Dashboard of the WordPress site. The table displays a list of advice, their status (1) and the ability to go to their settings (2). Click See advice (2) to go to the detailed information of the advice.

    On the plugin page, you can see detailed information on each Advice (2), get acquainted with their statuses (1) and apply them to automatically improve the website (3).

    Advice in the "Applied"(1) status can be deactivated using the "Rollback"(3) button. Advice that is in the process of applying or rolling back, displays the percentage of progress (4).

    Note

    Advice activation may take some time.

    If the application of Advice caused an error, you would be notified.

    Please contact our Support team if you are unable to resolve the issue yourself.

    AccelerateWP

    Overview

    AccelerateWP is a complex solution to help customers increase their WordPress site performance. With AccelerateWP you can manage optimization features, like object caching, CSS and JavaScript preprocessing and website preloading.

    In order to start using AccelerateWP, go to the cPanel interface and find the AccelerateWP application in the Software section.

    If you use Plesk control panel, go to the Websites & Domains section on the left, (1) trigger the side panel and (2) choose the AccelerateWP widget.

    If you use DirectAdmin control panel, hover over the main menu and choose the AccelerateWP in the Extra Features group.

    Click the application button and get into the AccelerateWP interface.

    Each row in the table is the WordPress website that was found on server and each column is the optimization feature.

    AccelerateWP is built as advice-driven plugin: the feature is suggested to be enabled once the Smart Advice is issued. Smart advice may be issued during profiling a website with X-Ray. X-Ray PHP profiler detects concrete bottlenecks in website performance and thus is able to select a best suited optimization feature to increase it significantly.

    Use the Advice available link to check advice details and click the Apply advice button to activate the feature.

    After a couple of minutes, the feature will be activated and advice becomes Applied. Close the window and see Active link in the corresponding cell of the table.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    AccelerateWP feature: WordPress optimization plugin

    AccelerateWP is a base feature that provides full page caching, GZIP compression and some other useful optimizations.

    In order to start working with AccelerateWP feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP column.

    And click the "Apply advice" button to activate the AccelerateWP feature.

    After a couple of minutes, the plugin will be installed. Login into the WordPress Admin and find the AccelerateWP in the list of active plugins.

    Page caching will be enabled by default. Click the "Settings" link below the plugin name to configure additional options.

    Limitations

    • the website must use PHP version 7.3 or higher.
    • the WordPress version must be 5.8 and higher.
    • the other WordPress Caching plugins must not be installed.
    • the WordPress should not run in Multisite mode.

    AccelerateWP feature additional options

    Find more additional options in WordPress admin page.

    Mobile caching

    Use it only if you website is adapted to use on smartphones and mobile phones.

    Separate cache files for mobile devices. In this case the content for mobile devices will be cached into different cache file as for desktop\tablets.

    This option is necessary if you have some functionality only for mobile devices, not for desktop\tablets.

    The following diagram helps you understand if you need mobile caching.

    Note

    If you use an additional layer of Cache (Varnish, NGINX , etc.) make sure it can distinguish between desktop and mobile visitors.

    User Cache

    It is recommended to use such an option when your website has a unique content for each logged-in user. If the user is not logged-in, a common site cache will be used, otherwise each logged-in user’s content will be cached separately.

    File Optimization

    File Optimization consists of Minification and file Combining.

    Minification is the process of minimizing code in your web pages and script files. Webmasters look at minification as a primary method of reducing website load times via the bandwidth they use.

    Minification also reduces JS, CSS and HTML files. The goal is removing comments and extra spaces. It crunches variables that minimize code and ultimately reduces the file size.

    After minification, the file still functions as it should. The difference is a reduction in bandwidth due to network requests.

    By combining CSS & JS files, HTTP/1 does not allow multiple requests from the same TCP connection between a host server and a web browser.

    Putting CSS and JS files into their respective groups, makes requests for downloads from a browser safe and more efficient. The old way meant multiple connections that took up bandwidth.

    File (CSS & JS) combining is not necessary for HTTP/2 (see https://webspeedtools.com/should-i-combine-css-js/)

    HTTP/2 introduced multiplexing. Now, the browser can send unlimited number of requests to the server, then download all files simultaneously with only one TCP connection.

    Consequently, HTTP/2 takes care of multiple TCP connections and the waiting time before each download. In one sense, consolidating CSS and JS files might be unnecessary.

    To verify which HTTP version is used for requests on your site, you can use https://tools.keycdn.com/http2-test

    CSS Files

    Minify CSS

    Minify CSS reduces file sizes by taking out white space and comments embedded in the code.

    Combine CSS

    Combine CSS reduces HTTP requests by merging all your files into one. Combine CSS is not recommended if your site uses HTTP/2.

    Excluded CSS Files

    To single out those CSS files that should not be minimized, list the URLs attached to the CSS files that should be excluded from minification and concatenation (one per line).

    Caution!

    Minification removes the domain from the URL.

    To prevent that, use (. *).CSS wildcards to exclude all files in a specific location.

    3rd Party: when excluding external CSS files, use the domain or the full URL path.

    Optimize CSS delivery (Critical Path CSS)

    Critical Path CSS eliminates render-blocking CSS on your website and improves browser page render performance. Your website will load much faster for your visitors.

    Note

    This feature can only be activated in the AccelerateWP hosting panel interface or in the SmartAdvice WordPress plugin. Once activated, you will be able to manage the options in the AccelerateWP WordPress plugin.

    The function starts automatically after switching on. It takes some time to generate the Critical CSS. You will see a notification with the generation status. If necessary, you can add additional styles to the Critical CSS in the fallback CSS field.

    Each time you change the site's theme, the Critical CSS will be regenerated. Also, if you have made any changes to the styles of your site, you need to manually regenerate the Critical CSS by clicking on the "Regenerate critical CSS" button.

    JavaScript Files

    Minify javascript files

    Minify JavaScript removes whitespace and comments to reduce the file size.

    Combine JavaScripts files

    This option will be active only if you choose Minify javascript files. It is not recommended for HTTP2.

    Load JavaScript deferred

    One major cause of slow web pages is a so-called blocking script: https://www.dummies.com/web-design-development/javascript/deferred-loading-with-javascript/.

    Loading JavaScript called a blocking script blocks the webpage from loading.

    Using the defer attribute alerts the browser not to wait for the script. Things will continue as usual per the build HTML and DOM processes. Quietly, the script rests in the background, then runs once the DOM is built.

    So, the Load JavaScript deferred option adds to each script tag the defer attribute.

    Delay JavaScript Execution

    This option helps to decrease the page load time by delaying loading of all JavaScripts on the page. This option can be applied only for already cached pages, it is incompatible with the Combine JavaScripts files option.

    Media

    LazyLoad

    LazyLoad affects the page in the next way - if the user opens the page for the first loading there will be only first displayed (visible to user) images, others will be loaded if the user scrolls down. Images added via CSS file, the <style> tag or via Elementor will not be affected by the LazyLoad.

    The following options allows working with LazyLoad

    • Enable LazyLoad for images
    • Enable LazyLoad for iframes and videos
    • Excluded images or iframes

    Image Dimensions

    Add Missing Image Dimensions

    Correct image dimensions help the browser to recognize page structure without delays, because the browser knows how much space is needed for the image.

    Cases when image will not be affected by the Add Missing Image Dimensions:

    • Images which have any attribute with name containing *height* or *width*
    • Images which are part of the <picture> tag
    • SVG images
    • Image from external domains

    Image Optimization

    Optimize image delivery by minifying the existing images and serving next-gen image formats when possible.

    Note

    This feature can only be activated/deactivated in the AccelerateWP hosting panel interface or in the SmartAdvice WordPress plugin.

    After activating the function, it will start searching for files in the WP_CONTENT_DIR/uploads folder in supported formats - jpg, jpeg, gif and png.

    Each found file (except those already optimized) will be queued for optimization using CloudLinux SaaS.

    In the WordPress admin interface, the number of images to optimize will be displayed at the top of the AccelerateWP settings screen.

    After the file is successfully optimized, a notification will be sent to the special API of the site that the file is ready.

    The original file will be copied to the backup folder:
    WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/{relative_path_of_the_file}
    Then it was replaced with an optimized one and added with an additional file in the webp format.

    The image optimization function automatically activates the ability of the plugin to replace the original images with the WebP format if they are present in the file system.

    When a new image is uploaded to your site using the WordPress functions/interface, it will be submitted for optimization with high priority.

    After optimization of all images is completed, you will see the notification in the admin panel.

    Restore images from backup folder

    WP_CONTENT_DIR - path to your site's wp-content folder

    Test before run (dry run):
    rsync -avnI WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/ WP_CONTENT_DIR/uploads

    Restore and override files from backup folder:
    rsync -avI WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/ WP_CONTENT_DIR/uploads

    Troubleshooting

    Wrong file permissions - Image optimization will not start and show an admin notice. You can try re-enabling the optimization feature again or create folders manually.

    Database table cannot be created - Image optimization will not start and show an admin notice. You can try re-enabling the optimization feature or contact your system administrator.

    Monthly quota exceeded - Your plan has reached the feature usage limit for current month. The plugin will show an admin notice and pause the image optimization until the start of the next month.

    Authentication failed - The plugin will postpone the image optimization process and retry every 15 minutes. If the authentication is failing for more then 24 hours, the plugin will stop the process and show an admin notice. Contact your system administrator.

    SaaS service not available - The plugin will show an admin notice, pause processing other jobs in the queue and retry every 5 minutes for the next hour and then every hour.

    Preload

    Preload Cache

    Usually, a page cache is created when this page is first visited. You can activate the preload page cache. It means that the cache for the page will be created when the page is created or updated.

    If sitemap-based cache preloading is activated, a specified sitemap file will be used for preliminary cache generation.

    Preload Links

    Provides functionality to preload the HTML content of the hovered link for acceleration loading pages after click.

    Prefetch DNS Requests

    If your website uses external resources (e.g. Google fonts, YouTube video, etc.), AccelerateWP can preload these resources for accelerating loading pages. To activate preloading external URLs, provide a list of external URLs.

    Preload Fonts

    Accelerates the loading of fonts by the browser, informing the browser at the very beginning of the request about the full list of fonts to download

    Advanced Rules

    Advanced site caching settings. If you have specific pages that must be processed individually you can add a custom rule for them.

    Never Cache URL(s)

    Provide a list of URLs that cannot be cached.

    Never Cache Cookies

    Provide a list of Cookie files that cannot be cached.

    Never Cache User Agent(s)

    Provide a list of User Agent names that cannot be cached.

    Always Purge URL(s)

    You can specify URLs that will be deleted from the cache when any post or page will be updated.

    Cache Query String(s)

    By default AccelerateWP does not cache URLs with query strings, but in this option, you can specify GET-parameters that must be cached.

    Database

    Database optimization provides clearing database from expired and unused data.

    Post Cleanup

    Provides clearing posts revisions, autosaved drafts, and deleted posts from the trash. Be careful, you will not be able to restore this data after clearing it.

    Comments Cleanup

    Provides clearing spam and deleted comments from the trash. Be careful, you will not be able to restore this data after clearing it.

    Transients Cleanup

    Provides clearing temporary options for existing plugins and older unused options that keep after deleting plugins.

    Database Cleanup

    Provides table optimizations in your database server.

    Automatic cleanup

    Allows you to schedule periodic database cleanups.

    Heartbeat

    WordPress Heartbeat is a function of server polling that provides delivery data from server to browser periodically.

    Reduce or disable Heartbeat activity

    To control server loads you can activate the Control Heartbeat function and reduce or disable Heartbeat activity. You can manage Heartbeat activity separately for backend, frontend, and post-editing parts. Be careful, disabling Heartbeat can break plugins that use this functionality.

    One-click AccelerateWP Add-ons

    Varnish

    When the server uses Varnish, you need to activate the add-on for implementing clearing Varnish cache when AccelerateWP clears site cache.

    WebP Compatibility

    If your site uses the WebP plugin you can activate AccelerateWP WebP Compatibility add-on to achieve browser compatibility with your WebP images.

    CDN

    Note

    When using AccelerateWP CDN, then the enabling/disabling can only be done in the hosting panel in the AccelerateWP interface.

    Enabling AccelerateWP Content Delivery Network using Advice will automatically set up your AccelerateWP WordPress plugin.

    CDN stands for Content Delivery Network, the feature that simplifies and speeds up resources loading for your customers.

    In order to start using 3rd party CDN, you need:

    1. Public website on the Internet with a valid domain name
    2. PullZone of CDN

    To set up a CDN in the AccelerateWP you must register CDN zone and get pull zone configuration.

    Go to the WP Admin of your WordPress site, open the settings of the AccelerateWP (Step 1) and select the CDN section (Step 2). Select the option: Enable Content Delivery Network (Step 3) and fill in the "CDN CNAME(s)" field with CDN pull zone address (Step 4).

    Click the "Save changes" button (Step 5).

    In order to check CDN is working, open website in incognito mode with Developer Tools open in your browser. Go to the "Network" tab, find the "Domain" column, you should see the specified address in the CDN settings of the AccelerateWP plugin for your js/css/image files.

    Tools

    For backing up the settings, there is a function for exporting settings. To use it, click the Download settings button. When you need to restore settings, choose your saved settings file and click the Upload file and import settings button.

    AccelerateWP Premium: Object caching feature

    Note

    Object caching is a premium feature which is currently in beta and available only for some hosters.

    Unlike full page caching, this mechanism is not saving the whole page in cache, but stores database query results in additional storage for quick access. This mechanism is really helpful in case your site needs to process multiple pages per second as requests come in and may be helpful in case when full page caching cannot be used, e.g. on personalized pages.

    The Object caching feature is recommended to use in the following:

    • Websites used for extremely active exchange of information (forums, blogs, etc..)
    • Websites with too many requests running at the same time
    • Websites having important pages that cannot be cached entirely and exclude from the "whole page caching" due to any reason

    In order to start working with Object caching feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP Premium column.

    And click the "Apply advice" button to activate the Object caching feature.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    In case if you still don't have active Premium subscription, you will see the following window with link to the page where you can upgrade subscription.

    When upgrade link is clicked, you will see the billing interface opened in new browser window. Successful upgrade of your subscription will automatically close the billing window and start background upgrade process. Once your payment is processed, feature will be automatically installed on the website.

    If you don't see any links, contact your hoster to upgrade your subscription manually.

    If subscription is active, you will bypass the subscription window and proceed directly to the plugin installation.

    After a couple of minutes, the redis instance will be configured, plugin will be installed and activated.

    Close the window and see "Active" link in the corresponding cell of the table.

    Object caching does not require any additional configuration.

    Limitations

    There are the following requirements to activate Object Caching:

    • the website must use PHP version 7.2 or higher.
    • the WordPress version must be 3.7 and higher.
    • the other WordPress Caching plugins must not be installed.
    • the Snuffleupagus must be turned off.
    • the WordPress should not run in Multisite mode.

    FAQ

    What does "AccelerateWP is advice-driven" mean?

    CloudLinux automatically tracks slow requests for the websites for the appropriate period of time and sometimes creates an advice to activate the specific feature for your website. When you see the Advice available link in the corresponding feature cell, it means that AccelerateWP decided that this feature will significantly improve the performance of your website. Otherwise you see the No advice note.

    Click the Advice available link and push Apply advice button to automatically enable the feature.

    Causes of the Incompatible note are always Limitations: AccelerateWP or AccelerateWP Premium related ones.

    Each message has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    What should I do if I see the "Misconfiguration"?

    The misconfiguration message can appear in the cases when optimization feature was activated, but AccelerateWP detects it as not working anymore.

    The most frequent cases are:

    • Redis process cannot be started for some period of time.
    • WordPress Redis Object Cache plugin is disabled via WordPress Admin Gui/Plugins.
      • Resolution: You can resolve it by yourself via the WordPress Admin Gui.
    • Version of PHP was changed for website and it is no longer compatible with feature.
      • Resolution: change website php version to the one which is compatible with optimization feature.

    In all cases, please refer to the misconfiguration text, which has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    Feature activation starts, but fails with "post check issue"

    Post check is a sanity check of your website to make sure that it is working properly after feature activation.

    AccelerateWP expects website to:

    • return http code 200 when downloading home page
    • do not write any errors in logs

    If you have some Post check issue after turning on the feature, you can leave them as disabled (in that case the engine reverts all changes). Or you can ignore the issue and continue working with the enabled Object Caching in order to manually check the source of the issue.

    How to measure the speed of the website?

    You can measure the speed of your website before turning On the Object Caching and after.

    The popular tools:

    Where the AccelerateWP tool log files are located?

    Login via SSH, find in your home directory ~/.clwpos/main.log. Or you can open it using the control panel file manager.

    I already use the WordPress Redis object cache plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    I already use the WordPress Redis object cache PRO plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    Why did my site's PageSpeed score decrease after enabling AccelerateWP?

    AccelerateWP & mod_pagespeed:

    1. Enabling AccelerateWP activates the force gzip cache function when the cache is archived by the plugin, and Apache simply gives it as is to the user browser. In this case, the mod_pagespeed module cannot apply its optimizations, since it does not work with archives, but only with pure HTML.
    2. AccelerateWP does not activate all possible resource optimizations by default.

    Because of this, the total score of the site by PageSpeed may be reduced. To improve the PageSpeed score, it is necessary to enable additional optimizations of AccelerateWP.

    AccelerateWP with maximum settings for fast sites gives a similar PageSpeed score for mobile and an improved result for desktop. AccelerateWP with maximum settings for sites loading longer than 1 second always gives a better score than mod_pagespeed.

    My subscription was upgraded, but feature was not installed automatically

    This can be caused by several reasons. Either your website was detected to have malfunctions or there was an issue with environment when feature was installed (e.g. bad internet connectivity with WordPress market).

    First, try to enable feature manually using AccelerateWP interface. Most likely you will find human-readable error message there.

    If the issue persists, or you cannot resolve it yourself, contact your hoster and attach ~/.clwpos/main.log for further investigation.

    - + diff --git a/user-docs/user-docs-solo-cloudlinux/index.html b/user-docs/user-docs-solo-cloudlinux/index.html index c8166c0d..0ec5ad53 100644 --- a/user-docs/user-docs-solo-cloudlinux/index.html +++ b/user-docs/user-docs-solo-cloudlinux/index.html @@ -51,7 +51,7 @@ })(); Cloudlinux Solo for end-users - +
    sidebar hamburger menu

    Cloudlinux Solo for end-users

    Introduction

    CloudLinux OS Solo is designed for installation on VPS or dedicated servers with a single hosting account for any number of websites.

    We provide the CloudLinux OS Solo with pre-installed features, but for grafical interface, please install a control panel on your server.

    WARNING!

    Currently supported OS version is CloudLinux OS Solo 8+ only. Therefore, for now, there is no possibility to use CloudLinux OS Solo on servers with OS version 6 and 7. Please refer to the currently supported OS versions.

    AccelerateWP

    Overview

    AccelerateWP is a complex solution to help customers increase their WordPress site performance. With AccelerateWP you can manage optimization features, like object caching, CSS and JavaScript preprocessing and website preloading.

    In order to start using AccelerateWP, go to the cPanel interface and find the AccelerateWP application in the Software section.

    If you use Plesk control panel, (1) trigger the side panel and (2) choose the AccelerateWP widget.

    If you use DirectAdmin control panel, hover over the main menu and choose the AccelerateWP in the Extra Features group.

    Click the application button and get into the AccelerateWP interface.

    Each row in the table is the WordPress website that was found on server and each column is the optimization feature.

    AccelerateWP is built as advice-driven plugin: the feature is suggested to be enabled once the Smart Advice is issued. Smart advice may be issued during profiling a website with X-Ray. X-Ray PHP profiler detects concrete bottlenecks in website performance and thus is able to select a best suited optimization feature to increase it significantly.

    Use the Advice available link to check advice details and click the Apply advice button to activate the feature.

    After a couple of minutes, the feature will be activated and advice becomes Applied. Close the window and see Active link in the corresponding cell of the table.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    AccelerateWP feature: WordPress optimization plugin

    AccelerateWP is a base feature that provides full page caching, GZIP compression and some other useful optimizations.

    In order to start working with AccelerateWP feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP column.

    And click the "Apply advice" button to activate the AccelerateWP feature.

    After a couple of minutes, the plugin will be installed. Login into the WordPress Admin and find the AccelerateWP in the list of active plugins.

    Page caching will be enabled by default. Click the "Settings" link below the plugin name to configure additional options.

    Limitations

    • the website must use PHP version 7.3 or higher.
    • the WordPress version must be 5.8 and higher.
    • the other WordPress Caching plugins must not be installed.
    • the WordPress should not run in Multisite mode.

    AccelerateWP feature additional options

    Find more additional options in WordPress admin page.

    Mobile caching

    Use it only if you website is adapted to use on smartphones and mobile phones.

    Separate cache files for mobile devices. In this case the content for mobile devices will be cached into different cache file as for desktop\tablets.

    This option is necessary if you have some functionality only for mobile devices, not for desktop\tablets.

    The following diagram helps you understand if you need mobile caching.

    Note

    If you use an additional layer of Cache (Varnish, NGINX , etc.) make sure it can distinguish between desktop and mobile visitors.

    User Cache

    It is recommended to use such an option when your website has a unique content for each logged-in user. If the user is not logged-in, a common site cache will be used, otherwise each logged-in user’s content will be cached separately.

    File Optimization

    File Optimization consists of Minification and file Combining.

    Minification is the process of minimizing code in your web pages and script files. Webmasters look at minification as a primary method of reducing website load times via the bandwidth they use.

    Minification also reduces JS, CSS and HTML files. The goal is removing comments and extra spaces. It crunches variables that minimize code and ultimately reduces the file size.

    After minification, the file still functions as it should. The difference is a reduction in bandwidth due to network requests.

    By combining CSS & JS files, HTTP/1 does not allow multiple requests from the same TCP connection between a host server and a web browser.

    Putting CSS and JS files into their respective groups, makes requests for downloads from a browser safe and more efficient. The old way meant multiple connections that took up bandwidth.

    File (CSS & JS) combining is not necessary for HTTP/2 (see https://webspeedtools.com/should-i-combine-css-js/)

    HTTP/2 introduced multiplexing. Now, the browser can send unlimited number of requests to the server, then download all files simultaneously with only one TCP connection.

    Consequently, HTTP/2 takes care of multiple TCP connections and the waiting time before each download. In one sense, consolidating CSS and JS files might be unnecessary.

    To verify which HTTP version is used for requests on your site, you can use https://tools.keycdn.com/http2-test

    CSS Files

    Minify CSS

    Minify CSS reduces file sizes by taking out white space and comments embedded in the code.

    Combine CSS

    Combine CSS reduces HTTP requests by merging all your files into one. Combine CSS is not recommended if your site uses HTTP/2.

    Excluded CSS Files

    To single out those CSS files that should not be minimized, list the URLs attached to the CSS files that should be excluded from minification and concatenation (one per line).

    Caution!

    Minification removes the domain from the URL.

    To prevent that, use (. *).CSS wildcards to exclude all files in a specific location.

    3rd Party: when excluding external CSS files, use the domain or the full URL path.

    Optimize CSS delivery (Critical Path CSS)

    Critical Path CSS eliminates render-blocking CSS on your website and improves browser page render performance. Your website will load much faster for your visitors.

    Note

    This feature can only be activated in the AccelerateWP hosting panel interface or in the SmartAdvice WordPress plugin. Once activated, you will be able to manage the options in the AccelerateWP WordPress plugin.

    The function starts automatically after switching on. It takes some time to generate the Critical CSS. You will see a notification with the generation status. If necessary, you can add additional styles to the Critical CSS in the fallback CSS field.

    AWPCriticalCSSStarted

    Each time you change the site's theme, the Critical CSS will be regenerated. Also, if you have made any changes to the styles of your site, you need to manually regenerate the Critical CSS by clicking on the "Regenerate critical CSS" button.

    JavaScript Files

    Minify javascript files

    Minify JavaScript removes whitespace and comments to reduce the file size.

    Combine JavaScripts files

    This option will be active only if you choose Minify javascript files. It is not recommended for HTTP2.

    Load JavaScript deferred

    One major cause of slow web pages is a so-called blocking script: https://www.dummies.com/web-design-development/javascript/deferred-loading-with-javascript/.

    Loading JavaScript called a blocking script blocks the webpage from loading.

    Using the defer attribute alerts the browser not to wait for the script. Things will continue as usual per the build HTML and DOM processes. Quietly, the script rests in the background, then runs once the DOM is built.

    So, the Load JavaScript deferred option adds to each script tag the defer attribute.

    Delay JavaScript Execution

    This option helps to decrease the page load time by delaying loading of all JavaScripts on the page. This option can be applied only for already cached pages, it is incompatible with the Combine JavaScripts files option.

    Media

    LazyLoad

    LazyLoad affects the page in the next way - if the user opens the page for the first loading there will be only first displayed (visible to user) images, others will be loaded if the user scrolls down. Images added via CSS file, the <style> tag or via Elementor will not be affected by the LazyLoad.

    The following options allows working with LazyLoad

    • Enable LazyLoad for images
    • Enable LazyLoad for iframes and videos
    • Excluded images or iframes

    Image Dimensions

    Add Missing Image Dimensions

    Correct image dimensions help the browser to recognize page structure without delays, because the browser knows how much space is needed for the image.

    Cases when image will not be affected by the Add Missing Image Dimensions:

    • Images which have any attribute with name containing *height* or *width*
    • Images which are part of the <picture> tag
    • SVG images
    • Image from external domains

    Image Optimization

    Optimize image delivery by minifying the existing images and serving next-gen image formats when possible.

    Note

    This feature can only be activated/deactivated in the AccelerateWP hosting panel interface or in the SmartAdvice WordPress plugin.

    AWPImageOptimizationSettings

    After activating the function, it will start searching for files in the WP_CONTENT_DIR/uploads folder in supported formats - jpg, jpeg, gif and png.

    Each found file (except those already optimized) will be queued for optimization using CloudLinux SaaS.

    In the WordPress admin interface, the number of images to optimize will be displayed at the top of the AccelerateWP settings screen.

    AWPImageOptimizationProgress

    After the file is successfully optimized, a notification will be sent to the special API of the site that the file is ready.

    The original file will be copied to the backup folder:
    WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/{relative_path_of_the_file}
    Then it was replaced with an optimized one and added with an additional file in the webp format.

    The image optimization function automatically activates the ability of the plugin to replace the original images with the WebP format if they are present in the file system.

    When a new image is uploaded to your site using the WordPress functions/interface, it will be submitted for optimization with high priority.

    After optimization of all images is completed, you will see the notification in the admin panel.

    AWPImageOptimizationSuccess

    Restore images from backup folder

    WP_CONTENT_DIR - path to your site's wp-content folder

    Test before run (dry run):
    rsync -avnI WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/ WP_CONTENT_DIR/uploads

    Restore and override files from backup folder:
    rsync -avI WP_CONTENT_DIR/accelerate-wp/images/backup/uploads/ WP_CONTENT_DIR/uploads

    Troubleshooting

    Wrong file permissions - Image optimization will not start and show an admin notice. You can try re-enabling the optimization feature again or create folders manually.

    AWPImageOptimizationWrongFilePermissions

    Database table cannot be created - Image optimization will not start and show an admin notice. You can try re-enabling the optimization feature or contact your system administrator.

    AWPImageOptimizationDatabaseTableCannotBeCreated

    Monthly quota exceeded - Your plan has reached the feature usage limit for current month. The plugin will show an admin notice and pause the image optimization until the start of the next month.

    AWPImageOptimizationMonthlyQuotaExceeded

    Authentication failed - The plugin will postpone the image optimization process and retry every 15 minutes. If the authentication is failing for more then 24 hours, the plugin will stop the process and show an admin notice. Contact your system administrator.

    AWPImageOptimizationAuthenticationFailed

    SaaS service not available - The plugin will show an admin notice, pause processing other jobs in the queue and retry every 5 minutes for the next hour and then every hour.

    AWPImageOptimizationSaaSServiceNotAvailable

    Some WebP images not loading on nginx

    1. Insert this block before the server directive, which creates the $webp_suffix if the browser supports WebP:
    map $http_accept $webp_suffix {
    @@ -68,6 +68,6 @@
         try_files $webp_uri $webp_old_uri $uri =404;
     }
     
    1. Make sure to replace <<FULL PATH OF WP-CONTENT PARENT>> with the actual absolute path to the wp-content folder, without the folder itself. Example: /home/john/public_html/.

    Preload

    Preload Cache

    Usually, a page cache is created when this page is first visited. You can activate the preload page cache. It means that the cache for the page will be created when the page is created or updated.

    If sitemap-based cache preloading is activated, a specified sitemap file will be used for preliminary cache generation.

    Preload Links

    Provides functionality to preload the HTML content of the hovered link for acceleration loading pages after click.

    Prefetch DNS Requests

    If your website uses external resources (e.g. Google fonts, YouTube video, etc.), AccelerateWP can preload these resources for accelerating loading pages. To activate preloading external URLs, provide a list of external URLs.

    Preload Fonts

    Accelerates the loading of fonts by the browser, informing the browser at the very beginning of the request about the full list of fonts to download

    Advanced Rules

    Advanced site caching settings. If you have specific pages that must be processed individually you can add a custom rule for them.

    Never Cache URL(s)

    Provide a list of URLs that cannot be cached.

    Never Cache Cookies

    Provide a list of Cookie files that cannot be cached.

    Never Cache User Agent(s)

    Provide a list of User Agent names that cannot be cached.

    Always Purge URL(s)

    You can specify URLs that will be deleted from the cache when any post or page will be updated.

    Cache Query String(s)

    By default AccelerateWP does not cache URLs with query strings, but in this option, you can specify GET-parameters that must be cached.

    Database

    Database optimization provides clearing database from expired and unused data.

    Post Cleanup

    Provides clearing posts revisions, autosaved drafts, and deleted posts from the trash. Be careful, you will not be able to restore this data after clearing it.

    Comments Cleanup

    Provides clearing spam and deleted comments from the trash. Be careful, you will not be able to restore this data after clearing it.

    Transients Cleanup

    Provides clearing temporary options for existing plugins and older unused options that keep after deleting plugins.

    Database Cleanup

    Provides table optimizations in your database server.

    Automatic cleanup

    Allows you to schedule periodic database cleanups.

    Heartbeat

    WordPress Heartbeat is a function of server polling that provides delivery data from server to browser periodically.

    Reduce or disable Heartbeat activity

    To control server loads you can activate the Control Heartbeat function and reduce or disable Heartbeat activity. You can manage Heartbeat activity separately for backend, frontend, and post-editing parts. Be careful, disabling Heartbeat can break plugins that use this functionality.

    One-click AccelerateWP Add-ons

    Varnish

    When the server uses Varnish, you need to activate the add-on for implementing clearing Varnish cache when AccelerateWP clears site cache.

    WebP Compatibility

    If your site uses the WebP plugin you can activate AccelerateWP WebP Compatibility add-on to achieve browser compatibility with your WebP images.

    CDN

    Note

    When using AccelerateWP CDN, then the enabling/disabling can only be done in the hosting panel in the AccelerateWP interface.

    Enabling AccelerateWP Content Delivery Network using Advice will automatically set up your AccelerateWP WordPress plugin.

    CDN stands for Content Delivery Network, the feature that simplifies and speeds up resources loading for your customers.

    In order to start using 3rd party CDN, you need:

    1. Public website on the Internet with a valid domain name
    2. PullZone of CDN

    To set up a CDN in the AccelerateWP you must register CDN zone and get pull zone configuration.

    Go to the WP Admin of your WordPress site, open the settings of the AccelerateWP (Step 1) and select the CDN section (Step 2). Select the option: Enable Content Delivery Network (Step 3) and fill in the "CDN CNAME(s)" field with CDN pull zone address (Step 4).

    Click the "Save changes" button (Step 5).

    In order to check CDN is working, open website in incognito mode with Developer Tools open in your browser. Go to the "Network" tab, find the "Domain" column, you should see the specified address in the CDN settings of the AccelerateWP plugin for your js/css/image files.

    Tools

    For backing up the settings, there is a function for exporting settings. To use it, click the Download settings button. When you need to restore settings, choose your saved settings file and click the Upload file and import settings button.

    AccelerateWP Premium: Object caching feature

    Note

    Object caching is a premium feature which is currently in beta and available only for some hosters.

    Unlike full page caching, this mechanism is not saving the whole page in cache, but stores database query results in additional storage for quick access. This mechanism is really helpful in case your site needs to process multiple pages per second as requests come in and may be helpful in case when full page caching cannot be used, e.g. on personalized pages.

    The Object caching feature is recommended to use in the following:

    • Websites used for extremely active exchange of information (forums, blogs, etc..)
    • Websites with too many requests running at the same time
    • Websites having important pages that cannot be cached entirely and exclude from the "whole page caching" due to any reason

    In order to start working with Object caching feature, check if advice is available in the corresponding cell on the intersection of website and AccelerateWP Premium column.

    And click the "Apply advice" button to activate the Object caching feature.

    If you still would like to try the feature on the website where advice was not issued, click on the gear icon and enable the feature.

    In case if you still don't have active Premium subscription, you will see the following window with link to the page where you can upgrade subscription.

    When upgrade link is clicked, you will see the billing interface opened in new browser window. Successful upgrade of your subscription will automatically close the billing window and start background upgrade process. Once your payment is processed, feature will be automatically installed on the website.

    If you don't see any links, contact your hoster to upgrade your subscription manually.

    If subscription is active, you will bypass the subscription window and proceed directly to the plugin installation.

    After a couple of minutes, the redis instance will be configured, plugin will be installed and activated.

    Close the window and see "Active" link in the corresponding cell of the table.

    Object caching does not require any additional configuration.

    Limitations

    There are the following requirements to activate Object Caching:

    • the website must use PHP version 7.2 or higher.
    • the WordPress version must be 3.7 and higher.
    • the other WordPress Caching plugins must not be installed.
    • the Snuffleupagus must be turned off.
    • the WordPress should not run in Multisite mode.

    FAQ

    What does "AccelerateWP is advice-driven" mean?

    CloudLinux automatically tracks slow requests for the websites for the appropriate period of time and sometimes creates an advice to activate the specific feature for your website. When you see the Advice available link in the corresponding feature cell, it means that AccelerateWP decided that this feature will significantly improve the performance of your website. Otherwise you see the No advice note.

    Click the Advice available link and push Apply advice button to automatically enable the feature.

    Causes of the Incompatible note are always Limitations: AccelerateWP or AccelerateWP Premium related ones.

    Each message has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    What should I do if I see the "Misconfiguration"?

    The misconfiguration message can appear in the cases when optimization feature was activated, but AccelerateWP detects it as not working anymore.

    The most frequent cases are:

    • Redis process cannot be started for some period of time.
    • WordPress Redis Object Cache plugin is disabled via WordPress Admin Gui/Plugins.
      • Resolution: You can resolve it by yourself via the WordPress Admin Gui.
    • Version of PHP was changed for website and it is no longer compatible with feature.
      • Resolution: change website php version to the one which is compatible with optimization feature.

    In all cases, please refer to the misconfiguration text, which has a small "how to", so you can try to fix them by yourself via control panel or WordPress Admin interface.

    Feature activation starts, but fails with "post check issue"

    Post check is a sanity check of your website to make sure that it is working properly after feature activation.

    AccelerateWP expects website to:

    • return http code 200 when downloading home page
    • do not write any errors in logs

    If you have some Post check issue after turning on the feature, you can leave them as disabled (in that case the engine reverts all changes). Or you can ignore the issue and continue working with the enabled Object Caching in order to manually check the source of the issue.

    How to measure the speed of the website?

    You can measure the speed of your website before turning On the Object Caching and after.

    The popular tools:

    Where the AccelerateWP tool log files are located?

    Login via SSH, find in your home directory ~/.clwpos/main.log. Or you can open it using the control panel file manager.

    I already use the WordPress Redis object cache plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    I already use the WordPress Redis object cache PRO plugin. Will the AccelerateWP be useful for me?

    No, in the current version we suggest the same optimization as you already have. But we include other useful features in the next versions, so let’s stay in touch.

    Why did my site's PageSpeed score decrease after enabling AccelerateWP?

    AccelerateWP & mod_pagespeed:

    1. Enabling AccelerateWP activates the force gzip cache function when the cache is archived by the plugin, and Apache simply gives it as is to the user browser. In this case, the mod_pagespeed module cannot apply its optimizations, since it does not work with archives, but only with pure HTML.
    2. AccelerateWP does not activate all possible resource optimizations by default.

    Because of this, the total score of the site by PageSpeed may be reduced. To improve the PageSpeed score, it is necessary to enable additional optimizations of AccelerateWP.

    AccelerateWP with maximum settings for fast sites gives a similar PageSpeed score for mobile and an improved result for desktop. AccelerateWP with maximum settings for sites loading longer than 1 second always gives a better score than mod_pagespeed.

    My subscription was upgraded, but feature was not installed automatically

    This can be caused by several reasons. Either your website was detected to have malfunctions or there was an issue with environment when feature was installed (e.g. bad internet connectivity with WordPress market).

    First, try to enable feature manually using AccelerateWP interface. Most likely you will find human-readable error message there.

    If the issue persists, or you cannot resolve it yourself, contact your hoster and attach ~/.clwpos/main.log for further investigation.

    End-user X-Ray plugin

    The end-user X-Ray plugin can be installed and enabled by the server administrator via CloudLinux Manager.

    How to manage the end-user X-Ray plugin

    The web interface of the end-user X-Ray plugin is almost the same as the X-Ray administrator interface.

    But there are some differences and they are described further.

    • End-users can create tasks only for their domains from the drop-down list:
    • To specify URL or wildcard, end-users should use the input field next to the domain:

    Note

    Tracing tasks created by an end-user will also be displayed in the administrator interface and administrators can manage the end-user's tasks the same way as they manage their own. At the same time, tasks created by the administrator or other end-users will not be displayed in the UI of the current user.

    End-user X-Ray plugin limitations

    • The end-user X-Ray plugin does not support creating continuous tasks.

    • The administrator and the end-user can’t run the tracing task for the same Domain/URL at the same time. Once the administrator started a specific tracing task, the end-user will not be able to duplicate it. And the same is true for the administrators – they will just see the running task for the specific domain and see the notification that they're trying to create a tracing task with a duplicated URL.

    • If continuous tracing is enabled for the domain, the end-user will not be able to create a new task for this domain because the same rule works - it will be a duplicate of the existing tracing tasks. The next warning will appear:

      To solve this, the existing running tasks for the same Domain/URL should be stopped or completed. You can find more details about this in the FAQ.

    SmartAdvice Plugin

    Overview

    SmartAdvice Plugin is a WordPress Must Use Plugin that displays the available advise for the site, which can be activated/deactivated from the WordPress admin panel. Installing and uninstalling the plugin is an automatic process, depending on the available advise for the site.

    Requirements

    • PHP version 5.6 or higher
    • WordPress version 5.0 or higher

    Managing Advice via SmartAdvice Plugin

    If there is available advice, a widget will be displayed in the Dashboard of the WordPress site. The table displays a list of advice, their status (1) and the ability to go to their settings (2). Click See advice (2) to go to the detailed information of the advice.

    On the plugin page, you can see detailed information on each Advice (2), get acquainted with their statuses (1) and apply them to automatically improve the website (3).

    Advice in the "Applied"(1) status can be deactivated using the "Rollback"(3) button. Advice that is in the process of applying or rolling back, displays the percentage of progress (4).

    Note

    Advice activation may take some time.

    If the application of Advice caused an error, you would be notified.

    Please contact our Support team if you are unable to resolve the issue yourself.

    PHP Selector

    Overview

    To manager PHP versions and modules for user domains find “ Select PHP selector “

    There are several tabs in PHP selector plugin:

    My domains tab gives the ability to set default PHP version and monitor which settings need to be done to manage domain php version by CloudLinux PHP selector. Selected version will be applied for all user domains.

    Extensions tab gives the ability to manage extensions for selected PHP version.

    Options tab gives the ability to manage extensions for selected PHP version.

    NodeJS/Python Selectors

    Since CloudLinux Manager version 7.11.0-1 added support of NodeJS/Python selectors. Detailed instructions of how yo use them can be found by the links below:

    Resource Usage client plugin

    Since CloudLinux Manager version 7.11.0-1 added support of Resource Usage client plugin.

    Note:

    Because the CloudLinux OS Solo does not support LVE, customer can only see the Inodes usage. Follow this documentation to setup Inodes limits

    See Resource Usage client plugin

    - +