From 895d3d58f4507ad46e4d3ded09a8bc59639429f7 Mon Sep 17 00:00:00 2001 From: annlev <71260515+annlev@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:31:12 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=2087072?= =?UTF-8?q?1bf6b0e536da64470ca54333e73e1878f7b=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 ++-- admin/components/index.html | 4 ++-- admin/description/index.html | 4 ++-- admin/faq/index.html | 4 ++-- admin/installation/index.html | 4 ++-- assets/{app-d5c4b320.js => app-ad58edd1.js} | 4 ++-- assets/{index.html-c34aae8c.js => index.html-9690bc28.js} | 4 ++-- 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 ++-- index.html | 4 ++-- introduction/index.html | 4 ++-- shared-pro/accelerate-wp/index.html | 4 ++-- shared-pro/centralized-monitoring/index.html | 4 ++-- shared-pro/index.html | 4 ++-- shared-pro/introduction/index.html | 4 ++-- shared-pro/shared/faq/index.html | 4 ++-- shared-pro/shared/features/index.html | 4 ++-- shared-pro/wpos-plugin/index.html | 4 ++-- shared-pro/x-ray/index.html | 4 ++-- shared/alt-ea_packages/index.html | 4 ++-- shared/apache2nginx/index.html | 4 ++-- shared/cloudlinux_installation/index.html | 4 ++-- shared/cloudlinux_os_components/index.html | 4 ++-- shared/cloudlinux_os_kernel/index.html | 4 ++-- shared/command-line_tools/index.html | 4 ++-- shared/control_panel_integration/index.html | 4 ++-- shared/deprecated/index.html | 4 ++-- shared/elevate/index.html | 4 ++-- shared/faq/index.html | 4 ++-- shared/features/index.html | 4 ++-- shared/for_cloudlinux_partners/index.html | 4 ++-- shared/for_cloudlinux_partners/whmcs_saved.html | 4 ++-- shared/index.html | 4 ++-- shared/limits/index.html | 4 ++-- shared/lve_manager/index.html | 4 ++-- solo/activation/index.html | 4 ++-- solo/administration/index.html | 4 ++-- solo/faq/index.html | 4 ++-- solo/installation/index.html | 6 +++--- solo/introduction/index.html | 4 ++-- solo/manager/index.html | 4 ++-- ubuntu/faq/index.html | 4 ++-- ubuntu/features/index.html | 4 ++-- ubuntu/installation/index.html | 4 ++-- ubuntu/introduction/index.html | 4 ++-- ubuntu/troubleshooting/index.html | 4 ++-- ubuntu/uninstalling/index.html | 4 ++-- user-docs/index.html | 4 ++-- user-docs/user-docs-shared-cloudlinux/index.html | 4 ++-- user-docs/user-docs-solo-cloudlinux/index.html | 4 ++-- 66 files changed, 133 insertions(+), 133 deletions(-) rename assets/{app-d5c4b320.js => app-ad58edd1.js} (99%) rename assets/{index.html-c34aae8c.js => index.html-9690bc28.js} (94%) diff --git a/404.html b/404.html index bcc817922..0eeab4e33 100644 --- a/404.html +++ b/404.html @@ -39,10 +39,10 @@ })(); - +
- + diff --git a/admin/components/index.html b/admin/components/index.html index 821303c89..58acb0b7f 100644 --- a/admin/components/index.html +++ b/admin/components/index.html @@ -39,10 +39,10 @@ })(); Components - +
sidebar hamburger menu

Components

CloudLinux OS Admin is very close to the regular CloudLinux 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 Shared.

- + diff --git a/admin/description/index.html b/admin/description/index.html index 0fa6d3d88..49ba91802 100644 --- a/admin/description/index.html +++ b/admin/description/index.html @@ -39,10 +39,10 @@ })(); Description - +
sidebar hamburger menu

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 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

- + diff --git a/admin/faq/index.html b/admin/faq/index.html index bd7d6d798..554412b95 100644 --- a/admin/faq/index.html +++ b/admin/faq/index.html @@ -39,10 +39,10 @@ })(); FAQ - +
sidebar hamburger menu

FAQ

Q: Is it possible to convert my existing CloudLinux OS Shared server into CloudLinux OS Admin?
A: No, only fresh installation is possible.

Q: Is Centralized Monitoring supported on CloudLinux OS Admin?
A: No, Centralized Monitoring only works with CloudLinux OS Shared Pro license.

- + diff --git a/admin/installation/index.html b/admin/installation/index.html index d02959d30..daaf52fb2 100644 --- a/admin/installation/index.html +++ b/admin/installation/index.html @@ -39,10 +39,10 @@ })(); Installation - +
sidebar hamburger menu

Installation

CloudLinux OS Admin installation process is the same as for CloudLinux Shared, please forward to 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.

- + diff --git a/assets/app-d5c4b320.js b/assets/app-ad58edd1.js similarity index 99% rename from assets/app-d5c4b320.js rename to assets/app-ad58edd1.js index ded90d814..ca7bf5a65 100644 --- a/assets/app-d5c4b320.js +++ b/assets/app-ad58edd1.js @@ -1,3 +1,3 @@ -import{d as _,r as T,a as it,b as at,i as se,c as lt,e as rt,f as ut,g as me,h as dt,j as ct,o as J,k as A,l as K,m as I,_ as P,n as u,p as h,q as p,u as E,t as R,F as M,s as H,v as O,w as F,x as ve,y as fe,R as ht,z as D,A as N,B as V,T as ce,C as w,D as ie,E as ae,G as pt,H as W,I as U,J as B,K as de,L as Ee,M as _t,N as Y,O as Q,P as $,Q as mt,S as j,U as He,V as oe,W as vt,X as ft,Y as gt,Z as bt,$ as Fe,a0 as yt,a1 as Et,a2 as wt,a3 as Lt,a4 as Ot,a5 as Dt,a6 as St}from"./framework-c44b2977.js";const At="modulepreload",Vt=function(e){return"/"+e},xe={},l=function(t,s,o){if(!s||s.length===0)return t();const n=document.getElementsByTagName("link");return Promise.all(s.map(i=>{if(i=Vt(i),i in xe)return;xe[i]=!0;const a=i.endsWith(".css"),r=a?'[rel="stylesheet"]':"";if(!!o)for(let m=n.length-1;m>=0;m--){const v=n[m];if(v.href===i&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${r}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":At,a||(c.as="script",c.crossOrigin=""),c.href=i,document.head.appendChild(c),a)return new Promise((m,v)=>{c.addEventListener("load",m),c.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())},Oe={"v-8daa1a0e":()=>l(()=>import("./index.html-e8171bcc.js"),[]).then(({data:e})=>e),"v-712e14fc":()=>l(()=>import("./index.html-1491931e.js"),[]).then(({data:e})=>e),"v-74457223":()=>l(()=>import("./index.html-6df021ce.js"),[]).then(({data:e})=>e),"v-3713595e":()=>l(()=>import("./index.html-965bd80c.js"),[]).then(({data:e})=>e),"v-4fa2b6f1":()=>l(()=>import("./index.html-40f59ccd.js"),[]).then(({data:e})=>e),"v-257d9eea":()=>l(()=>import("./index.html-5f5b585a.js"),[]).then(({data:e})=>e),"v-4ec40180":()=>l(()=>import("./index.html-ad9a1267.js"),[]).then(({data:e})=>e),"v-33466da8":()=>l(()=>import("./index.html-a43c5030.js"),[]).then(({data:e})=>e),"v-1321a35c":()=>l(()=>import("./index.html-087840fc.js"),[]).then(({data:e})=>e),"v-77964adc":()=>l(()=>import("./index.html-cfdca1f3.js"),[]).then(({data:e})=>e),"v-19b6f117":()=>l(()=>import("./index.html-ac8928eb.js"),[]).then(({data:e})=>e),"v-2a99c19d":()=>l(()=>import("./convert.html-f72b4278.js"),[]).then(({data:e})=>e),"v-531ecc37":()=>l(()=>import("./index.html-81fdb6dc.js"),[]).then(({data:e})=>e),"v-7b6817fe":()=>l(()=>import("./index.html-d711c46d.js"),[]).then(({data:e})=>e),"v-09dd2362":()=>l(()=>import("./conversion.html-d288c2ad.js"),[]).then(({data:e})=>e),"v-44b5ca7e":()=>l(()=>import("./index.html-ac2c9d14.js"),[]).then(({data:e})=>e),"v-25bd0a12":()=>l(()=>import("./index.html-8c5ecf17.js"),[]).then(({data:e})=>e),"v-bcec460e":()=>l(()=>import("./index.html-cc8131a7.js"),[]).then(({data:e})=>e),"v-38fce08b":()=>l(()=>import("./index.html-faa1c9ca.js"),[]).then(({data:e})=>e),"v-92fb1a40":()=>l(()=>import("./regular.html-3b7030a1.js"),[]).then(({data:e})=>e),"v-07bc00e4":()=>l(()=>import("./reseller.html-57f304ce.js"),[]).then(({data:e})=>e),"v-67fe297f":()=>l(()=>import("./index.html-eafa4c34.js"),[]).then(({data:e})=>e),"v-cc245b0c":()=>l(()=>import("./index.html-92c4383f.js"),[]).then(({data:e})=>e),"v-1e772bf4":()=>l(()=>import("./index.html-b8f45164.js"),[]).then(({data:e})=>e),"v-e3f0a4a2":()=>l(()=>import("./index.html-ec2bd0a3.js"),[]).then(({data:e})=>e),"v-04159818":()=>l(()=>import("./index.html-32973c6a.js"),[]).then(({data:e})=>e),"v-4d221c70":()=>l(()=>import("./index.html-ac1cd66b.js"),[]).then(({data:e})=>e),"v-0bc575b4":()=>l(()=>import("./index.html-2f94827e.js"),[]).then(({data:e})=>e),"v-2a2b382d":()=>l(()=>import("./index.html-901e06e3.js"),[]).then(({data:e})=>e),"v-7c7edde6":()=>l(()=>import("./index.html-846b56ff.js"),[]).then(({data:e})=>e),"v-16779dec":()=>l(()=>import("./index.html-f3a90d85.js"),[]).then(({data:e})=>e),"v-74cd8d69":()=>l(()=>import("./index.html-9f16432a.js"),[]).then(({data:e})=>e),"v-157570eb":()=>l(()=>import("./index.html-1ad1f2d2.js"),[]).then(({data:e})=>e),"v-281849c6":()=>l(()=>import("./index.html-45acc1e1.js"),[]).then(({data:e})=>e),"v-4fba1aaa":()=>l(()=>import("./index.html-3fb82dd3.js"),[]).then(({data:e})=>e),"v-7bb9093e":()=>l(()=>import("./index.html-5a9ab90c.js"),[]).then(({data:e})=>e),"v-28ef1a8b":()=>l(()=>import("./index.html-a67d2155.js"),[]).then(({data:e})=>e),"v-4a57bc30":()=>l(()=>import("./whmcs_saved.html-e619157d.js"),[]).then(({data:e})=>e),"v-3514d6a6":()=>l(()=>import("./index.html-998bbf37.js"),[]).then(({data:e})=>e),"v-241ac397":()=>l(()=>import("./index.html-4518cb25.js"),[]).then(({data:e})=>e),"v-11f342b7":()=>l(()=>import("./index.html-68135e29.js"),[]).then(({data:e})=>e),"v-26751d8e":()=>l(()=>import("./index.html-77f6988a.js"),[]).then(({data:e})=>e),"v-13868404":()=>l(()=>import("./index.html-43f08b7e.js"),[]).then(({data:e})=>e),"v-010e2d7d":()=>l(()=>import("./index.html-4ce97209.js"),[]).then(({data:e})=>e),"v-4f1610aa":()=>l(()=>import("./index.html-0a1b8827.js"),[]).then(({data:e})=>e),"v-528d7da2":()=>l(()=>import("./index.html-bfa2eb4d.js"),[]).then(({data:e})=>e),"v-166b4a4c":()=>l(()=>import("./index.html-7411664d.js"),[]).then(({data:e})=>e),"v-95b487a0":()=>l(()=>import("./index.html-9cf31e6a.js"),[]).then(({data:e})=>e),"v-309e76be":()=>l(()=>import("./index.html-bf4c8c0b.js"),[]).then(({data:e})=>e),"v-cdb28e44":()=>l(()=>import("./index.html-f748a8ee.js"),[]).then(({data:e})=>e),"v-68f2720e":()=>l(()=>import("./index.html-7ef2b3c5.js"),[]).then(({data:e})=>e),"v-27c2a530":()=>l(()=>import("./index.html-f4273cc0.js"),[]).then(({data:e})=>e),"v-a7fa213a":()=>l(()=>import("./index.html-b698656f.js"),[]).then(({data:e})=>e),"v-379536f4":()=>l(()=>import("./index.html-781941ff.js"),[]).then(({data:e})=>e),"v-4cbda6a6":()=>l(()=>import("./index.html-f0fd3107.js"),[]).then(({data:e})=>e),"v-f23b5fb8":()=>l(()=>import("./index.html-c295446b.js"),[]).then(({data:e})=>e),"v-00097080":()=>l(()=>import("./index.html-effa2001.js"),[]).then(({data:e})=>e),"v-1d7964ba":()=>l(()=>import("./index.html-b0db18d3.js"),[]).then(({data:e})=>e),"v-1e15a9dd":()=>l(()=>import("./index.html-3f4cbfef.js"),[]).then(({data:e})=>e),"v-36e14580":()=>l(()=>import("./index.html-ad9ff012.js"),[]).then(({data:e})=>e),"v-eb8332ea":()=>l(()=>import("./index.html-84ce9456.js"),[]).then(({data:e})=>e),"v-c41aa89c":()=>l(()=>import("./index.html-5503d8c1.js"),[]).then(({data:e})=>e),"v-13444f59":()=>l(()=>import("./index.html-468d1552.js"),[]).then(({data:e})=>e),"v-3706649a":()=>l(()=>import("./404.html-e0575d4e.js"),[]).then(({data:e})=>e)},xt=JSON.parse(`{"base":"/","lang":"en-US","title":"","description":"","head":[["script",{"type":"text/javascript","charset":"UTF-8","src":"//cdn.cookie-script.com/s/c9f81de32507a4fec1eb03ee80d0f0ed.js"}],["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\\":\\"/shared/limits/#compatibility-matrix\\",\\"/cloudlinux_os_components/#installation-5\\":\\"/shared/cloudlinux_os_components/#installation-and-update-5\\",\\"/cloudlinux_os_components/#installation-and-update-2\\":\\"/shared/cloudlinux_os_components/#installation-and-update-1\\",\\"/?cagefs_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-1\\",\\"/mysql_governor.html\\":\\"/shared/cloudlinux_os_components/#mysql-governor\\",\\"?backing_up_mysql.html\\":\\"/shared/cloudlinux_os_components/#backing-up-mysql\\",\\"/mod_lsapi_troubleshooting.html\\":\\"/shared/cloudlinux_os_components/#troubleshooting-3\\",\\"/cloudlinux_installation/#registering-cloudlinux-server\\":\\"/shared/cloudlinux_installation/#license-activation\\",\\"/apache_mod_lsapi.html\\":\\"/shared/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"/cagefs.html\\":\\"/shared/cloudlinux_os_components/#cagefs\\",\\"/change_mysql_version.html\\":\\"/shared/cloudlinux_os_components/#change-mysql-version\\",\\"/cldiag.html\\":\\"/shared/command-line_tools/#cldiag\\",\\"/custom_php_ini_options.html\\":\\"/shared/cloudlinux_os_components/#custom-php-ini-options\\",\\"?apache_mod_lsapi.html\\":\\"/shared/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"?custom_php_ini_options.html\\":\\"/shared/cloudlinux_os_components/#custom-php-ini-options\\",\\"?hybrid_kernel.html\\":\\"/shared/cloudlinux_os_kernel/#hybrid-kernels\\",\\"?installation.html\\":\\"/shared/cloudlinux_installation/\\",\\"?link_traversal_protection.html\\":\\"/shared/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection\\",\\"?lve_limits_with_packages.html\\":\\"/shared/lve_manager/#packages\\",\\"?lve_pam_module.html\\":\\"/shared/cloudlinux_os_components/#lve-pam-module\\",\\"?php_selector_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-3\\",\\"?virtuozzo_and_openvz.html\\":\\"/shared/cloudlinux_installation/#virtuozzo-and-openvz\\",\\"/installation-wizard.html\\":\\"/shared/lve_manager/#installation-wizard\\",\\"/lve-limits-validation.html\\":\\"/shared/limits/#limits-validation\\",\\"/mysql_governor_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-2\\",\\"/node_js_selector.html\\":\\"/shared/cloudlinux_os_components/#node-js-selector\\",\\"/php_selector.html\\":\\"/shared/cloudlinux_os_components/#php-selector\\",\\"/php_selector_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-3\\",\\"/python_and_ruby_selector.html\\":\\"/shared/cloudlinux_os_components/#python-selector\\",\\"/reseller_limits.html\\":\\"/shared/limits/#reseller-limits\\",\\"/cloudlinux-os-plus/#x-ray-autotracing\\":\\"/shared-pro/x-ray/#x-ray-autotracing\\",\\"/cloudlinux_installation/#activation\\":\\"/shared/cloudlinux_installation/#license-activation\\",\\"/cloudlinux_installation/#converting-existing-servers\\":\\"/shared/cloudlinux_installation/#converting-existing-servers\\",\\"/cloudlinux_installation/#known-restrictions-and-issues\\":\\"/shared/cloudlinux_installation/#known-restrictions-and-issues\\",\\"/cloudlinux_installation/#uninstalling\\":\\"/shared/cloudlinux_installation/#uninstalling\\",\\"/cloudlinux_os_components/#customize-lve-stats2-notifications\\":\\"/shared/cloudlinux_os_components/#customize-lve-stats2-notifications\\",\\"/cloudlinux_os_components/#installation-enabling-and-disabling\\":\\"/shared/command-line_tools/#cagefs\\",\\"/cloudlinux-os-plus\\":\\"/shared-pro/introduction/\\",\\"/cloudlinux-os-plus/#faq-2\\":\\"/shared-pro/x-ray/#faq\\",\\"/cloudlinux-os-plus/#installation-2\\":\\"/shared-pro/x-ray/#installation\\",\\"/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\\":\\"/shared-pro/x-ray/#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\\":\\"/shared/control_panel_integration/#mysql-governor\\",\\"/control_panel_integration/#the-list-of-the-integration-scripts\\":\\"/shared/control_panel_integration/#the-list-of-the-integration-scripts\\",\\"/ffmpeg\\":\\"/shared/cloudlinux_os_components/#ffmpeg\\",\\"/limits/#limits-validation\\":\\"/shared/limits/#limits-validation\\",\\"/php_selector/#litespeed-support\\":\\"/shared/cloudlinux_os_components/#litespeed-support\\",\\"/python_selector\\":\\"/shared/cloudlinux_os_components/#python-selector\\",\\"/python_selector/#installation\\":\\"/shared/cloudlinux_os_components/#installation-1\\"};\\n \\n for (var route_url in routes) {\\n if (window.location.href.indexOf(route_url) !== -1) {\\n window.location.href = routes[route_url];\\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":{}}`),qe={"v-8daa1a0e":_(()=>l(()=>import("./index.html-22fe1427.js"),["assets/index.html-22fe1427.js","assets/framework-c44b2977.js"])),"v-712e14fc":_(()=>l(()=>import("./index.html-3c6e59c0.js"),["assets/index.html-3c6e59c0.js","assets/framework-c44b2977.js"])),"v-74457223":_(()=>l(()=>import("./index.html-e79dad45.js"),["assets/index.html-e79dad45.js","assets/framework-c44b2977.js"])),"v-3713595e":_(()=>l(()=>import("./index.html-75170256.js"),["assets/index.html-75170256.js","assets/framework-c44b2977.js"])),"v-4fa2b6f1":_(()=>l(()=>import("./index.html-ac911b4d.js"),["assets/index.html-ac911b4d.js","assets/framework-c44b2977.js"])),"v-257d9eea":_(()=>l(()=>import("./index.html-e5935d50.js"),["assets/index.html-e5935d50.js","assets/framework-c44b2977.js"])),"v-4ec40180":_(()=>l(()=>import("./index.html-eb4f9b5d.js"),["assets/index.html-eb4f9b5d.js","assets/framework-c44b2977.js"])),"v-33466da8":_(()=>l(()=>import("./index.html-d8c1bf41.js"),["assets/index.html-d8c1bf41.js","assets/framework-c44b2977.js"])),"v-1321a35c":_(()=>l(()=>import("./index.html-7aed538a.js"),["assets/index.html-7aed538a.js","assets/framework-c44b2977.js"])),"v-77964adc":_(()=>l(()=>import("./index.html-4c869426.js"),["assets/index.html-4c869426.js","assets/framework-c44b2977.js"])),"v-19b6f117":_(()=>l(()=>import("./index.html-1a6cc769.js"),["assets/index.html-1a6cc769.js","assets/framework-c44b2977.js"])),"v-2a99c19d":_(()=>l(()=>import("./convert.html-e91cb262.js"),["assets/convert.html-e91cb262.js","assets/framework-c44b2977.js"])),"v-531ecc37":_(()=>l(()=>import("./index.html-2bbf2841.js"),["assets/index.html-2bbf2841.js","assets/framework-c44b2977.js"])),"v-7b6817fe":_(()=>l(()=>import("./index.html-f360850f.js"),["assets/index.html-f360850f.js","assets/framework-c44b2977.js"])),"v-09dd2362":_(()=>l(()=>import("./conversion.html-10d71afc.js"),["assets/conversion.html-10d71afc.js","assets/framework-c44b2977.js"])),"v-44b5ca7e":_(()=>l(()=>import("./index.html-30ae1dcd.js"),["assets/index.html-30ae1dcd.js","assets/framework-c44b2977.js"])),"v-25bd0a12":_(()=>l(()=>import("./index.html-b93471c1.js"),["assets/index.html-b93471c1.js","assets/framework-c44b2977.js"])),"v-bcec460e":_(()=>l(()=>import("./index.html-3660c133.js"),["assets/index.html-3660c133.js","assets/framework-c44b2977.js"])),"v-38fce08b":_(()=>l(()=>import("./index.html-2997fe46.js"),["assets/index.html-2997fe46.js","assets/framework-c44b2977.js"])),"v-92fb1a40":_(()=>l(()=>import("./regular.html-15d0f307.js"),["assets/regular.html-15d0f307.js","assets/framework-c44b2977.js"])),"v-07bc00e4":_(()=>l(()=>import("./reseller.html-633294ca.js"),["assets/reseller.html-633294ca.js","assets/framework-c44b2977.js"])),"v-67fe297f":_(()=>l(()=>import("./index.html-fce0d4ab.js"),["assets/index.html-fce0d4ab.js","assets/framework-c44b2977.js"])),"v-cc245b0c":_(()=>l(()=>import("./index.html-16a9e529.js"),["assets/index.html-16a9e529.js","assets/framework-c44b2977.js"])),"v-1e772bf4":_(()=>l(()=>import("./index.html-18d1eaaf.js"),["assets/index.html-18d1eaaf.js","assets/framework-c44b2977.js"])),"v-e3f0a4a2":_(()=>l(()=>import("./index.html-c2aeccf4.js"),["assets/index.html-c2aeccf4.js","assets/FAQIncMessage-390ac701.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-04159818":_(()=>l(()=>import("./index.html-f497f79e.js"),["assets/index.html-f497f79e.js","assets/framework-c44b2977.js"])),"v-4d221c70":_(()=>l(()=>import("./index.html-b10b8a63.js"),["assets/index.html-b10b8a63.js","assets/framework-c44b2977.js"])),"v-0bc575b4":_(()=>l(()=>import("./index.html-bbbf99ec.js"),["assets/index.html-bbbf99ec.js","assets/framework-c44b2977.js"])),"v-2a2b382d":_(()=>l(()=>import("./index.html-a4357d2e.js"),["assets/index.html-a4357d2e.js","assets/framework-c44b2977.js"])),"v-7c7edde6":_(()=>l(()=>import("./index.html-d3244299.js"),["assets/index.html-d3244299.js","assets/framework-c44b2977.js"])),"v-16779dec":_(()=>l(()=>import("./index.html-4d69e73d.js"),["assets/index.html-4d69e73d.js","assets/framework-c44b2977.js"])),"v-74cd8d69":_(()=>l(()=>import("./index.html-89e8bc34.js"),["assets/index.html-89e8bc34.js","assets/framework-c44b2977.js"])),"v-157570eb":_(()=>l(()=>import("./index.html-7066e4b0.js"),["assets/index.html-7066e4b0.js","assets/framework-c44b2977.js"])),"v-281849c6":_(()=>l(()=>import("./index.html-87b42dbd.js"),["assets/index.html-87b42dbd.js","assets/framework-c44b2977.js"])),"v-4fba1aaa":_(()=>l(()=>import("./index.html-eaa4066f.js"),["assets/index.html-eaa4066f.js","assets/framework-c44b2977.js"])),"v-7bb9093e":_(()=>l(()=>import("./index.html-b192cb11.js"),["assets/index.html-b192cb11.js","assets/framework-c44b2977.js"])),"v-28ef1a8b":_(()=>l(()=>import("./index.html-4700b271.js"),["assets/index.html-4700b271.js","assets/framework-c44b2977.js"])),"v-4a57bc30":_(()=>l(()=>import("./whmcs_saved.html-7cb446b9.js"),["assets/whmcs_saved.html-7cb446b9.js","assets/framework-c44b2977.js"])),"v-3514d6a6":_(()=>l(()=>import("./index.html-f2fccdaf.js"),["assets/index.html-f2fccdaf.js","assets/framework-c44b2977.js"])),"v-241ac397":_(()=>l(()=>import("./index.html-8202bf0a.js"),["assets/index.html-8202bf0a.js","assets/framework-c44b2977.js"])),"v-11f342b7":_(()=>l(()=>import("./index.html-e074eeeb.js"),["assets/index.html-e074eeeb.js","assets/framework-c44b2977.js"])),"v-26751d8e":_(()=>l(()=>import("./index.html-36abad35.js"),["assets/index.html-36abad35.js","assets/framework-c44b2977.js"])),"v-13868404":_(()=>l(()=>import("./index.html-66696091.js"),["assets/index.html-66696091.js","assets/framework-c44b2977.js"])),"v-010e2d7d":_(()=>l(()=>import("./index.html-095ba355.js"),["assets/index.html-095ba355.js","assets/FAQIncMessage-390ac701.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-4f1610aa":_(()=>l(()=>import("./index.html-de3bec6c.js"),["assets/index.html-de3bec6c.js","assets/framework-c44b2977.js"])),"v-528d7da2":_(()=>l(()=>import("./index.html-9db83932.js"),["assets/index.html-9db83932.js","assets/framework-c44b2977.js"])),"v-166b4a4c":_(()=>l(()=>import("./index.html-5cef5800.js"),["assets/index.html-5cef5800.js","assets/framework-c44b2977.js"])),"v-95b487a0":_(()=>l(()=>import("./index.html-7994f114.js"),["assets/index.html-7994f114.js","assets/framework-c44b2977.js"])),"v-309e76be":_(()=>l(()=>import("./index.html-c34aae8c.js"),["assets/index.html-c34aae8c.js","assets/framework-c44b2977.js"])),"v-cdb28e44":_(()=>l(()=>import("./index.html-80f7ed68.js"),["assets/index.html-80f7ed68.js","assets/framework-c44b2977.js"])),"v-68f2720e":_(()=>l(()=>import("./index.html-2a614ae4.js"),["assets/index.html-2a614ae4.js","assets/framework-c44b2977.js"])),"v-27c2a530":_(()=>l(()=>import("./index.html-0c2c9892.js"),["assets/index.html-0c2c9892.js","assets/framework-c44b2977.js"])),"v-a7fa213a":_(()=>l(()=>import("./index.html-b80a51c4.js"),["assets/index.html-b80a51c4.js","assets/framework-c44b2977.js"])),"v-379536f4":_(()=>l(()=>import("./index.html-512c02e0.js"),["assets/index.html-512c02e0.js","assets/framework-c44b2977.js"])),"v-4cbda6a6":_(()=>l(()=>import("./index.html-a5a3783b.js"),["assets/index.html-a5a3783b.js","assets/framework-c44b2977.js"])),"v-f23b5fb8":_(()=>l(()=>import("./index.html-d94f6819.js"),["assets/index.html-d94f6819.js","assets/framework-c44b2977.js"])),"v-00097080":_(()=>l(()=>import("./index.html-a48c60b0.js"),["assets/index.html-a48c60b0.js","assets/framework-c44b2977.js"])),"v-1d7964ba":_(()=>l(()=>import("./index.html-8a174329.js"),["assets/index.html-8a174329.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-1e15a9dd":_(()=>l(()=>import("./index.html-f79f4602.js"),["assets/index.html-f79f4602.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-36e14580":_(()=>l(()=>import("./index.html-29d04fa5.js"),["assets/index.html-29d04fa5.js","assets/framework-c44b2977.js"])),"v-eb8332ea":_(()=>l(()=>import("./index.html-89ff0693.js"),["assets/index.html-89ff0693.js","assets/framework-c44b2977.js"])),"v-c41aa89c":_(()=>l(()=>import("./index.html-72fcb3a1.js"),["assets/index.html-72fcb3a1.js","assets/framework-c44b2977.js"])),"v-13444f59":_(()=>l(()=>import("./index.html-ed41a61b.js"),["assets/index.html-ed41a61b.js","assets/framework-c44b2977.js"])),"v-3706649a":_(()=>l(()=>import("./404.html-b8563878.js"),["assets/404.html-b8563878.js","assets/framework-c44b2977.js"]))};var Rt=Symbol(""),Tt=T(Oe),Ne=it({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),X=T(Ne),Z=()=>X,We=Symbol(""),re=()=>{const e=I(We);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},je=Symbol(""),Pt=()=>{const e=I(je);if(!e)throw new Error("usePageHead() is called without provider.");return e},$t=Symbol(""),Ge=Symbol(""),Ue=()=>{const e=I(Ge);if(!e)throw new Error("usePageLang() is called without provider.");return e},ze=Symbol(""),kt=()=>{const e=I(ze);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Ke=Symbol(""),Je=()=>{const e=I(Ke);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},le=T(xt),It=Symbol(""),Ct=Symbol(""),Mt="Layout",Bt="NotFound",z=at({resolveLayouts:e=>e.reduce((t,s)=>({...t,...s.layouts}),{}),resolvePageData:async e=>{const t=Tt.value[e];return await(t==null?void 0:t())??Ne},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,s)=>{const o=se(t.description)?t.description:s.description,n=[...lt(t.head)?t.head:[],...s.head,["title",{},e],["meta",{name:"description",content:o}]];return rt(n)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(s=>!!s).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let s;if(e.path){const o=e.frontmatter.layout;se(o)?s=o:s=Mt}else s=Bt;return t[s]},resolveRouteLocale:(e,t)=>ut(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ht=me({name:"ClientOnly",setup(e,t){const s=T(!1);return J(()=>{s.value=!0}),()=>{var o,n;return s.value?(n=(o=t.slots).default)==null?void 0:n.call(o):null}}}),Ft=me({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Z(),s=A(()=>qe[e.pageKey||t.value.key]);return()=>s.value?K(s.value):K("div","404 Not Found")}}),qt=(e={})=>e,q=e=>dt(e)?e:`/${ct(e)}`;const Nt={enhance:({app:e})=>{}};function Wt(e){return{all:e=e||new Map,on:function(t,s){var o=e.get(t);o?o.push(s):e.set(t,[s])},off:function(t,s){var o=e.get(t);o&&(s?o.splice(o.indexOf(s)>>>0,1):e.set(t,[]))},emit:function(t,s){var o=e.get(t);o&&o.slice().map(function(n){n(s)}),(o=e.get("*"))&&o.slice().map(function(n){n(t,s)})}}}const jt={class:"footer__img"},Gt=["href"],Ut=["src","alt"],zt={class:"footer-company-title"},Kt={class:"social"},Jt={class:"social_links"},Xt=["href"],Yt={class:"footer-social-text"},Qt={class:"social-icons-wrapper"},Zt=["href"],es=["src"],ts={__name:"Footer",setup(e){const{social:t,cloudlinuxSite:s,footerCustomLogo:o,footerCustomAltText:n,locales:i}=I("themeConfig"),a=re(),r=A(()=>new Date().getFullYear()),d=A(()=>a.value.layout==="HomeLayout");return(c,m)=>(u(),h("div",{class:F(["footer",{"footer-default-layout":!d.value}])},[p("div",jt,[p("a",{href:E(s)},[p("img",{src:E(q)(E(o)),alt:E(n)},null,8,Ut)],8,Gt)]),p("div",zt,R(r.value)+". CloudLinux Inc ",1),p("div",Kt,[p("div",Jt,[(u(!0),h(M,null,H(E(i).bottomLinks,v=>(u(),h("a",{href:v.url,target:"_blank"},R(v.text),9,Xt))),256))]),p("span",Yt,R(E(i).stayInTouch),1),p("div",Qt,[(u(!0),h(M,null,H(E(t),v=>(u(),h("a",{class:"social-icons-link",href:v==null?void 0:v.url,target:"_blank"},[v.icon?(u(),h("img",{key:0,class:"social-icons-link-img",src:E(q)(v==null?void 0:v.icon),alt:"footer logo"},null,8,es)):O("v-if",!0)],8,Zt))),256))])])],2))}},he=P(ts,[["__scopeId","data-v-f2902e71"],["__file","Footer.vue"]]),Xe={"/user-docs/":[{collapsable:!1,children:["/user-docs/user-docs-shared-cloudlinux/","/user-docs/user-docs-solo-cloudlinux/"]}],"/introduction/":[{collapsable:!1,children:["/introduction/"]}],"/admin/":[{collapsable:!1,children:["/admin/description/","/admin/installation/","/admin/components/","/admin/faq/"]}],"/solo/":[{collapsable:!1,children:["/solo/introduction/","/solo/installation/","/solo/activation/","/solo/administration/","/solo/manager/","/solo/faq/"]}],"/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/"]}],"/shared-pro/":[{collapsable:!1,children:["/shared-pro/introduction/","/shared-pro/x-ray/","/shared-pro/centralized-monitoring/","/shared-pro/accelerate-wp/"]}],"/ubuntu/":[{collapsable:!1,children:["/ubuntu/introduction/","/ubuntu/faq/","/ubuntu/features/","/ubuntu/installation/","/ubuntu/troubleshooting/","/ubuntu/uninstalling/"]}],"/shared/":[{collapsable:!1,children:["/shared/cloudlinux_installation/","/shared/elevate/","/shared/limits/","/shared/lve_manager/","/shared/cloudlinux_os_components/","/shared/command-line_tools/","/shared/apache2nginx/","/shared/alt-ea_packages/","/shared/control_panel_integration/","/shared/cloudlinux_os_kernel/","/shared/for_cloudlinux_partners/","/shared/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/"]}]},De=/#.*$/,ss=/\.(md|html)$/,te=/\/$/,we=/^(https?:|mailto:|tel:)/;function ne(e){return decodeURI(e).replace(De,"").replace(ss,"")}function os(e){const t=e==null?void 0:e.match(De);if(t)return t[0]}function ns(e){return we.test(e)}function is(e){if(ns(e))return e;const t=e==null?void 0:e.match(De),s=t?t[0]:"",o=ne(e);return te.test(o)?e:o+".html"+s}function pe(e,t){const s=e.hash,o=os(t);if(o&&s!==o)return!1;const n=ne(e.path),i=ne(t);return n===i}function _e(e,t,s){s&&(t=as(t,s));const o=ne(t);for(let n=0;nQe(i,s,o)):[]}function ls(e){e=e.map(s=>Object.assign({},JSON.parse(JSON.stringify(s))));let t;return e.forEach(s=>{s.level!==1?t=s:t&&(t.children||(t.children=[])).push(s)}),e.filter(s=>s.level!==1)}function rs(e,t){if(Array.isArray(t))return{base:"/",config:t};for(const s in t)if(us(e.path).indexOf(s)===0)return{base:s,config:t[s]};return null}function us(e){return/(\.html|\/)$/.test(e)?e:e+"/"}function Qe(e,t,s,o){if(typeof e=="string")return _e(t,e,s);if(Array.isArray(e))return Object.assign(_e(t,e[0],s),{title:e[1]});{o&&console.error("[vuepress] Nested sidebar groups are not supported. Consider using navbar + categories instead.");const n=e.children||[];return{type:"group",title:e.title,children:n.map(i=>Qe(i,t,s,!0)),collapsable:e.collapsable!==!1}}}const ds={functional:!0,props:["item","closeSidebarDrawer"],render({item:e,closeSidebarDrawer:t}){var m,v;if(!e)return;const s=Z(),o=ve(),n=fe(),i=pe(o,e==null?void 0:e.path),a=(e==null?void 0:e.type)==="auto"?i||e.children.some(b=>pe(o,e.basePath+"#"+b.slug)):i,r=cs(K,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),a,e.headers,t,n),d=((m=s.value.frontmatter)==null?void 0:m.sidebarDepth)!=null?(v=s.value.frontmatter)==null?void 0:v.sidebarDepth:5,c=d??1;if((e==null?void 0:e.type)==="auto")return[r,Le(K,e.children,e.basePath,o,c,1,t)];if(e.headers&&e.headers.length){const b=ls(e.headers);return[r,Le(K,b,e==null?void 0:e.path,o,c,1,t)]}return Se(K,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),a,e.children,0,t)}};function Se(e,t,s,o,n,i=0,a){const r=e(ht,{"data-anchor":t,to:t,activeClass:"",exactActiveClass:"",class:{active:o,"sidebar-link":!0,["link-depth-level-"+i]:!0}},()=>[s]);return e("div",{class:{active:o,collapsed:!0,"sidebar-link-container":!!(n!=null&&n.length)},onClick:d=>{d.target.classList.toggle("collapsed"),d.target.tagName!=="DIV"&&a()}},[r])}function cs(e,t,s,o,n,i,a){const r=!!n&&n.some(d=>d.level!==1);return e("div",{class:{active:o,collapsed:o,"sidebar-header":!0,"sidebar-link":!0,"sidebar-header--empty":!r},onClick:d=>{const c=d.target.classList,m=d.target.querySelector("a");c.toggle("collapsed"),m&&a.push(m.getAttribute("href"))}},[Se(e,t,s,o,null,0,i)])}function Le(e,t,s,o,n,i=1,a){return!t||i>n?null:e("ul",{class:"sidebar-sub-headers"},t.map(r=>{const d=pe(o,s+"#"+r.slug);return e("li",{class:{collapsible:i<3,"sidebar-sub-header":!0}},[Se(e,s+"#"+r.slug,r.title,d,r.children,i,a),Le(e,r.children,s,o,n,i+1,a)])}))}const Ze=P(ds,[["__file","SidebarLink.vue"]]);const hs={__name:"DropdownTransition",setup(e){const t=o=>{o.style.height=o.scrollHeight+"px"},s=o=>{o.style.height=""};return(o,n)=>(u(),D(ce,{name:"dropdown",onEnter:t,onAfterEnter:s,onBeforeLeave:t},{default:N(()=>[V(o.$slots,"default")]),_:3}))}},ps=P(hs,[["__file","DropdownTransition.vue"]]);const _s={key:0,ref:"items",class:"sidebar-group-items"},ms={__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,s)=>(u(),h("div",{class:F(["sidebar-group",{first:e.first,collapsable:e.collapsable}])},[w(ps,null,{default:N(()=>{var o;return[e.open||!e.collapsable?(u(),h("ul",_s,[(u(!0),h(M,null,H((o=e.item)==null?void 0:o.children,n=>(u(),h("li",null,[w(Ze,{closeSidebarDrawer:e.closeSidebarDrawer,item:n},null,8,["closeSidebarDrawer","item"])]))),256))],512)):O("v-if",!0)]}),_:1})],2))}},vs=P(ms,[["__file","SidebarGroup.vue"]]);const fs={class:"sidebar"},gs={key:0,class:"sidebar-links"},bs={__name:"Sidebar",props:{items:{type:Array,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}},isMobileWidth:{type:Boolean}},setup(e){const t=e,s=A(()=>t.items),o=ve(),n=Z(),i=A(()=>Ye(n.value,o,s.value)),a=T(0),r=()=>{const f=v(o,t.items);f>-1&&(a.value=f)},d=f=>{a.value=f===a.value?-1:f},c=f=>{const g=f.getBoundingClientRect();return g.top>=0&&g.left>=0&&g.bottom<=(window.innerHeight/2||document.documentElement.clientHeight/2)&&g.right<=(window.innerWidth||document.documentElement.clientWidth)};ie(()=>o,r);const m=()=>{const f=document.querySelectorAll(".header-anchor"),g=document.querySelector(".sidebar"),y=g.querySelectorAll("a"),L=g.querySelectorAll(".collapsible.sidebar-sub-header"),x=Array.from(y).map(S=>S.getAttribute("data-anchor"));f.forEach(S=>{S.getAttribute("data-anchor")||S.setAttribute("data-anchor",n.value.path+S.hash)}),f.forEach(S=>{if(c(S)){const k=x.find(C=>C===S.getAttribute("data-anchor"));L.forEach(C=>{C.querySelectorAll(".sidebar-link-container").forEach(G=>{C.querySelector(`a[data-anchor="${k}"]`)?G.classList.remove("collapsed"):G.classList.add("collapsed")})}),g.querySelector(`a[data-anchor="${k}"]`)&&(y.forEach(C=>C.classList.remove("active")),g.querySelector(`a[data-anchor="${k}"]`).classList.add("active"))}})},v=(f,g)=>{for(let y=0;ype(f,x.path)))return y}return-1},b=()=>{const f=window.location.hash,g=document.querySelectorAll(".sidebar a");g.forEach(y=>{if(y.getAttribute("data-anchor")===f){g.forEach(x=>x.classList.remove("active")),y.classList.add("active");const L=y.closest(".collapsible");L&&L.classList.remove("collapsed")}})};return J(()=>{r(),t.isMobileWidth||window.addEventListener("scroll",m),t.isMobileWidth||window.addEventListener("resize",m),window.addEventListener("hashchange",b)}),ae(()=>{window.removeEventListener("scroll",m),window.removeEventListener("resize",m),window.removeEventListener("hashchange",b)}),(f,g)=>(u(),h("div",fs,[V(f.$slots,"top"),i.value.length?(u(),h("ul",gs,[(u(!0),h(M,null,H(i.value,(y,L)=>(u(),h("li",{key:L},[y.type==="group"?(u(),D(vs,{key:0,item:y,first:L===0,open:L===a.value,closeSidebarDrawer:e.closeSidebarDrawer,collapsable:!!(y.collapsable||y.collapsible),onToggle:x=>d(L)},null,8,["item","first","open","closeSidebarDrawer","collapsable","onToggle"])):(u(),D(Ze,{key:1,closeSidebarDrawer:e.closeSidebarDrawer,item:y},null,8,["closeSidebarDrawer","item"]))]))),128))])):O("v-if",!0),V(f.$slots,"bottom")]))}},et=P(bs,[["__file","Sidebar.vue"]]);var ys=Object.defineProperty,Es=Object.defineProperties,ws=Object.getOwnPropertyDescriptors,Re=Object.getOwnPropertySymbols,Ls=Object.prototype.hasOwnProperty,Os=Object.prototype.propertyIsEnumerable,Te=(e,t,s)=>t in e?ys(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,ee=(e,t)=>{for(var s in t||(t={}))Ls.call(t,s)&&Te(e,s,t[s]);if(Re)for(var s of Re(t))Os.call(t,s)&&Te(e,s,t[s]);return e},Pe=(e,t)=>Es(e,ws(t));const Ds={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 s=this.getDropdownViewport(),{top:o,bottom:n,height:i}=t.getBoundingClientRect();if(os.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(s.height-i)}},getDropdownViewport(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},Ss={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 s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},Vs={},xs={xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"},Rs=p("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),Ts=[Rs];function Ps(e,t){return u(),h("svg",xs,Ts)}const $s=Ae(Vs,[["render",Ps]]),ks={},Is={xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"},Cs=p("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),Ms=[Cs];function Bs(e,t){return u(),h("svg",Is,Ms)}const Hs=Ae(ks,[["render",Bs]]),$e={Deselect:$s,OpenIndicator:Hs},Fs={mounted(e,{instance:t}){if(t.appendToBody){const{height:s,top:o,left:n,width:i}=t.$refs.toggle.getBoundingClientRect();let a=window.scrollX||window.pageXOffset,r=window.scrollY||window.pageYOffset;e.unbindPosition=t.calculatePosition(e,t,{width:i+"px",left:a+n+"px",top:r+o+s+"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 qs(e){const t={};return Object.keys(e).sort().forEach(s=>{t[s]=e[s]}),JSON.stringify(t)}let Ns=0;function Ws(){return++Ns}const js={components:ee({},$e),directives:{appendToBody:Fs},mixins:[Ds,Ss,As],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)}. +import{d as _,r as T,a as it,b as at,i as se,c as lt,e as rt,f as ut,g as me,h as dt,j as ct,o as J,k as A,l as K,m as I,_ as P,n as u,p as h,q as p,u as E,t as R,F as M,s as H,v as O,w as F,x as ve,y as fe,R as ht,z as D,A as N,B as V,T as ce,C as w,D as ie,E as ae,G as pt,H as W,I as U,J as B,K as de,L as Ee,M as _t,N as Y,O as Q,P as $,Q as mt,S as j,U as He,V as oe,W as vt,X as ft,Y as gt,Z as bt,$ as Fe,a0 as yt,a1 as Et,a2 as wt,a3 as Lt,a4 as Ot,a5 as Dt,a6 as St}from"./framework-c44b2977.js";const At="modulepreload",Vt=function(e){return"/"+e},xe={},l=function(t,s,o){if(!s||s.length===0)return t();const n=document.getElementsByTagName("link");return Promise.all(s.map(i=>{if(i=Vt(i),i in xe)return;xe[i]=!0;const a=i.endsWith(".css"),r=a?'[rel="stylesheet"]':"";if(!!o)for(let m=n.length-1;m>=0;m--){const v=n[m];if(v.href===i&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${r}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":At,a||(c.as="script",c.crossOrigin=""),c.href=i,document.head.appendChild(c),a)return new Promise((m,v)=>{c.addEventListener("load",m),c.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())},Oe={"v-8daa1a0e":()=>l(()=>import("./index.html-e8171bcc.js"),[]).then(({data:e})=>e),"v-74457223":()=>l(()=>import("./index.html-6df021ce.js"),[]).then(({data:e})=>e),"v-712e14fc":()=>l(()=>import("./index.html-1491931e.js"),[]).then(({data:e})=>e),"v-3713595e":()=>l(()=>import("./index.html-965bd80c.js"),[]).then(({data:e})=>e),"v-4fa2b6f1":()=>l(()=>import("./index.html-40f59ccd.js"),[]).then(({data:e})=>e),"v-257d9eea":()=>l(()=>import("./index.html-5f5b585a.js"),[]).then(({data:e})=>e),"v-4ec40180":()=>l(()=>import("./index.html-ad9a1267.js"),[]).then(({data:e})=>e),"v-33466da8":()=>l(()=>import("./index.html-a43c5030.js"),[]).then(({data:e})=>e),"v-1321a35c":()=>l(()=>import("./index.html-087840fc.js"),[]).then(({data:e})=>e),"v-77964adc":()=>l(()=>import("./index.html-cfdca1f3.js"),[]).then(({data:e})=>e),"v-19b6f117":()=>l(()=>import("./index.html-ac8928eb.js"),[]).then(({data:e})=>e),"v-2a99c19d":()=>l(()=>import("./convert.html-f72b4278.js"),[]).then(({data:e})=>e),"v-531ecc37":()=>l(()=>import("./index.html-81fdb6dc.js"),[]).then(({data:e})=>e),"v-7b6817fe":()=>l(()=>import("./index.html-d711c46d.js"),[]).then(({data:e})=>e),"v-09dd2362":()=>l(()=>import("./conversion.html-d288c2ad.js"),[]).then(({data:e})=>e),"v-44b5ca7e":()=>l(()=>import("./index.html-ac2c9d14.js"),[]).then(({data:e})=>e),"v-25bd0a12":()=>l(()=>import("./index.html-8c5ecf17.js"),[]).then(({data:e})=>e),"v-bcec460e":()=>l(()=>import("./index.html-cc8131a7.js"),[]).then(({data:e})=>e),"v-38fce08b":()=>l(()=>import("./index.html-faa1c9ca.js"),[]).then(({data:e})=>e),"v-92fb1a40":()=>l(()=>import("./regular.html-3b7030a1.js"),[]).then(({data:e})=>e),"v-07bc00e4":()=>l(()=>import("./reseller.html-57f304ce.js"),[]).then(({data:e})=>e),"v-67fe297f":()=>l(()=>import("./index.html-eafa4c34.js"),[]).then(({data:e})=>e),"v-cc245b0c":()=>l(()=>import("./index.html-92c4383f.js"),[]).then(({data:e})=>e),"v-1e772bf4":()=>l(()=>import("./index.html-b8f45164.js"),[]).then(({data:e})=>e),"v-e3f0a4a2":()=>l(()=>import("./index.html-ec2bd0a3.js"),[]).then(({data:e})=>e),"v-04159818":()=>l(()=>import("./index.html-32973c6a.js"),[]).then(({data:e})=>e),"v-4d221c70":()=>l(()=>import("./index.html-ac1cd66b.js"),[]).then(({data:e})=>e),"v-0bc575b4":()=>l(()=>import("./index.html-2f94827e.js"),[]).then(({data:e})=>e),"v-2a2b382d":()=>l(()=>import("./index.html-901e06e3.js"),[]).then(({data:e})=>e),"v-7c7edde6":()=>l(()=>import("./index.html-846b56ff.js"),[]).then(({data:e})=>e),"v-16779dec":()=>l(()=>import("./index.html-f3a90d85.js"),[]).then(({data:e})=>e),"v-74cd8d69":()=>l(()=>import("./index.html-9f16432a.js"),[]).then(({data:e})=>e),"v-157570eb":()=>l(()=>import("./index.html-1ad1f2d2.js"),[]).then(({data:e})=>e),"v-281849c6":()=>l(()=>import("./index.html-45acc1e1.js"),[]).then(({data:e})=>e),"v-4fba1aaa":()=>l(()=>import("./index.html-3fb82dd3.js"),[]).then(({data:e})=>e),"v-7bb9093e":()=>l(()=>import("./index.html-5a9ab90c.js"),[]).then(({data:e})=>e),"v-28ef1a8b":()=>l(()=>import("./index.html-a67d2155.js"),[]).then(({data:e})=>e),"v-4a57bc30":()=>l(()=>import("./whmcs_saved.html-e619157d.js"),[]).then(({data:e})=>e),"v-3514d6a6":()=>l(()=>import("./index.html-998bbf37.js"),[]).then(({data:e})=>e),"v-241ac397":()=>l(()=>import("./index.html-4518cb25.js"),[]).then(({data:e})=>e),"v-11f342b7":()=>l(()=>import("./index.html-68135e29.js"),[]).then(({data:e})=>e),"v-26751d8e":()=>l(()=>import("./index.html-77f6988a.js"),[]).then(({data:e})=>e),"v-13868404":()=>l(()=>import("./index.html-43f08b7e.js"),[]).then(({data:e})=>e),"v-010e2d7d":()=>l(()=>import("./index.html-4ce97209.js"),[]).then(({data:e})=>e),"v-4f1610aa":()=>l(()=>import("./index.html-0a1b8827.js"),[]).then(({data:e})=>e),"v-528d7da2":()=>l(()=>import("./index.html-bfa2eb4d.js"),[]).then(({data:e})=>e),"v-166b4a4c":()=>l(()=>import("./index.html-7411664d.js"),[]).then(({data:e})=>e),"v-95b487a0":()=>l(()=>import("./index.html-9cf31e6a.js"),[]).then(({data:e})=>e),"v-309e76be":()=>l(()=>import("./index.html-bf4c8c0b.js"),[]).then(({data:e})=>e),"v-cdb28e44":()=>l(()=>import("./index.html-f748a8ee.js"),[]).then(({data:e})=>e),"v-68f2720e":()=>l(()=>import("./index.html-7ef2b3c5.js"),[]).then(({data:e})=>e),"v-27c2a530":()=>l(()=>import("./index.html-f4273cc0.js"),[]).then(({data:e})=>e),"v-a7fa213a":()=>l(()=>import("./index.html-b698656f.js"),[]).then(({data:e})=>e),"v-379536f4":()=>l(()=>import("./index.html-781941ff.js"),[]).then(({data:e})=>e),"v-4cbda6a6":()=>l(()=>import("./index.html-f0fd3107.js"),[]).then(({data:e})=>e),"v-f23b5fb8":()=>l(()=>import("./index.html-c295446b.js"),[]).then(({data:e})=>e),"v-00097080":()=>l(()=>import("./index.html-effa2001.js"),[]).then(({data:e})=>e),"v-1d7964ba":()=>l(()=>import("./index.html-b0db18d3.js"),[]).then(({data:e})=>e),"v-1e15a9dd":()=>l(()=>import("./index.html-3f4cbfef.js"),[]).then(({data:e})=>e),"v-36e14580":()=>l(()=>import("./index.html-ad9ff012.js"),[]).then(({data:e})=>e),"v-eb8332ea":()=>l(()=>import("./index.html-84ce9456.js"),[]).then(({data:e})=>e),"v-c41aa89c":()=>l(()=>import("./index.html-5503d8c1.js"),[]).then(({data:e})=>e),"v-13444f59":()=>l(()=>import("./index.html-468d1552.js"),[]).then(({data:e})=>e),"v-3706649a":()=>l(()=>import("./404.html-e0575d4e.js"),[]).then(({data:e})=>e)},xt=JSON.parse(`{"base":"/","lang":"en-US","title":"","description":"","head":[["script",{"type":"text/javascript","charset":"UTF-8","src":"//cdn.cookie-script.com/s/c9f81de32507a4fec1eb03ee80d0f0ed.js"}],["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\\":\\"/shared/limits/#compatibility-matrix\\",\\"/cloudlinux_os_components/#installation-5\\":\\"/shared/cloudlinux_os_components/#installation-and-update-5\\",\\"/cloudlinux_os_components/#installation-and-update-2\\":\\"/shared/cloudlinux_os_components/#installation-and-update-1\\",\\"/?cagefs_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-1\\",\\"/mysql_governor.html\\":\\"/shared/cloudlinux_os_components/#mysql-governor\\",\\"?backing_up_mysql.html\\":\\"/shared/cloudlinux_os_components/#backing-up-mysql\\",\\"/mod_lsapi_troubleshooting.html\\":\\"/shared/cloudlinux_os_components/#troubleshooting-3\\",\\"/cloudlinux_installation/#registering-cloudlinux-server\\":\\"/shared/cloudlinux_installation/#license-activation\\",\\"/apache_mod_lsapi.html\\":\\"/shared/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"/cagefs.html\\":\\"/shared/cloudlinux_os_components/#cagefs\\",\\"/change_mysql_version.html\\":\\"/shared/cloudlinux_os_components/#change-mysql-version\\",\\"/cldiag.html\\":\\"/shared/command-line_tools/#cldiag\\",\\"/custom_php_ini_options.html\\":\\"/shared/cloudlinux_os_components/#custom-php-ini-options\\",\\"?apache_mod_lsapi.html\\":\\"/shared/cloudlinux_os_components/#apache-mod-lsapi-pro\\",\\"?custom_php_ini_options.html\\":\\"/shared/cloudlinux_os_components/#custom-php-ini-options\\",\\"?hybrid_kernel.html\\":\\"/shared/cloudlinux_os_kernel/#hybrid-kernels\\",\\"?installation.html\\":\\"/shared/cloudlinux_installation/\\",\\"?link_traversal_protection.html\\":\\"/shared/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection\\",\\"?lve_limits_with_packages.html\\":\\"/shared/lve_manager/#packages\\",\\"?lve_pam_module.html\\":\\"/shared/cloudlinux_os_components/#lve-pam-module\\",\\"?php_selector_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-3\\",\\"?virtuozzo_and_openvz.html\\":\\"/shared/cloudlinux_installation/#virtuozzo-and-openvz\\",\\"/installation-wizard.html\\":\\"/shared/lve_manager/#installation-wizard\\",\\"/lve-limits-validation.html\\":\\"/shared/limits/#limits-validation\\",\\"/mysql_governor_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-2\\",\\"/node_js_selector.html\\":\\"/shared/cloudlinux_os_components/#node-js-selector\\",\\"/php_selector.html\\":\\"/shared/cloudlinux_os_components/#php-selector\\",\\"/php_selector_installation.html\\":\\"/shared/cloudlinux_os_components/#installation-and-update-3\\",\\"/python_and_ruby_selector.html\\":\\"/shared/cloudlinux_os_components/#python-selector\\",\\"/reseller_limits.html\\":\\"/shared/limits/#reseller-limits\\",\\"/cloudlinux-os-plus/#x-ray-autotracing\\":\\"/shared-pro/x-ray/#x-ray-autotracing\\",\\"/cloudlinux_installation/#activation\\":\\"/shared/cloudlinux_installation/#license-activation\\",\\"/cloudlinux_installation/#converting-existing-servers\\":\\"/shared/cloudlinux_installation/#converting-existing-servers\\",\\"/cloudlinux_installation/#known-restrictions-and-issues\\":\\"/shared/cloudlinux_installation/#known-restrictions-and-issues\\",\\"/cloudlinux_installation/#uninstalling\\":\\"/shared/cloudlinux_installation/#uninstalling\\",\\"/cloudlinux_os_components/#customize-lve-stats2-notifications\\":\\"/shared/cloudlinux_os_components/#customize-lve-stats2-notifications\\",\\"/cloudlinux_os_components/#installation-enabling-and-disabling\\":\\"/shared/command-line_tools/#cagefs\\",\\"/cloudlinux-os-plus\\":\\"/shared-pro/introduction/\\",\\"/cloudlinux-os-plus/#faq-2\\":\\"/shared-pro/x-ray/#faq\\",\\"/cloudlinux-os-plus/#installation-2\\":\\"/shared-pro/x-ray/#installation\\",\\"/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\\":\\"/shared-pro/x-ray/#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\\":\\"/shared/control_panel_integration/#mysql-governor\\",\\"/control_panel_integration/#the-list-of-the-integration-scripts\\":\\"/shared/control_panel_integration/#the-list-of-the-integration-scripts\\",\\"/ffmpeg\\":\\"/shared/cloudlinux_os_components/#ffmpeg\\",\\"/limits/#limits-validation\\":\\"/shared/limits/#limits-validation\\",\\"/php_selector/#litespeed-support\\":\\"/shared/cloudlinux_os_components/#litespeed-support\\",\\"/python_selector\\":\\"/shared/cloudlinux_os_components/#python-selector\\",\\"/python_selector/#installation\\":\\"/shared/cloudlinux_os_components/#installation-1\\"};\\n \\n for (var route_url in routes) {\\n if (window.location.href.indexOf(route_url) !== -1) {\\n window.location.href = routes[route_url];\\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":{}}`),qe={"v-8daa1a0e":_(()=>l(()=>import("./index.html-22fe1427.js"),["assets/index.html-22fe1427.js","assets/framework-c44b2977.js"])),"v-74457223":_(()=>l(()=>import("./index.html-e79dad45.js"),["assets/index.html-e79dad45.js","assets/framework-c44b2977.js"])),"v-712e14fc":_(()=>l(()=>import("./index.html-3c6e59c0.js"),["assets/index.html-3c6e59c0.js","assets/framework-c44b2977.js"])),"v-3713595e":_(()=>l(()=>import("./index.html-ac911b4d.js"),["assets/index.html-ac911b4d.js","assets/framework-c44b2977.js"])),"v-4fa2b6f1":_(()=>l(()=>import("./index.html-75170256.js"),["assets/index.html-75170256.js","assets/framework-c44b2977.js"])),"v-257d9eea":_(()=>l(()=>import("./index.html-e5935d50.js"),["assets/index.html-e5935d50.js","assets/framework-c44b2977.js"])),"v-4ec40180":_(()=>l(()=>import("./index.html-eb4f9b5d.js"),["assets/index.html-eb4f9b5d.js","assets/framework-c44b2977.js"])),"v-33466da8":_(()=>l(()=>import("./index.html-d8c1bf41.js"),["assets/index.html-d8c1bf41.js","assets/framework-c44b2977.js"])),"v-1321a35c":_(()=>l(()=>import("./index.html-7aed538a.js"),["assets/index.html-7aed538a.js","assets/framework-c44b2977.js"])),"v-77964adc":_(()=>l(()=>import("./index.html-4c869426.js"),["assets/index.html-4c869426.js","assets/framework-c44b2977.js"])),"v-19b6f117":_(()=>l(()=>import("./index.html-1a6cc769.js"),["assets/index.html-1a6cc769.js","assets/framework-c44b2977.js"])),"v-2a99c19d":_(()=>l(()=>import("./convert.html-e91cb262.js"),["assets/convert.html-e91cb262.js","assets/framework-c44b2977.js"])),"v-531ecc37":_(()=>l(()=>import("./index.html-2bbf2841.js"),["assets/index.html-2bbf2841.js","assets/framework-c44b2977.js"])),"v-7b6817fe":_(()=>l(()=>import("./index.html-f360850f.js"),["assets/index.html-f360850f.js","assets/framework-c44b2977.js"])),"v-09dd2362":_(()=>l(()=>import("./conversion.html-10d71afc.js"),["assets/conversion.html-10d71afc.js","assets/framework-c44b2977.js"])),"v-44b5ca7e":_(()=>l(()=>import("./index.html-30ae1dcd.js"),["assets/index.html-30ae1dcd.js","assets/framework-c44b2977.js"])),"v-25bd0a12":_(()=>l(()=>import("./index.html-b93471c1.js"),["assets/index.html-b93471c1.js","assets/framework-c44b2977.js"])),"v-bcec460e":_(()=>l(()=>import("./index.html-3660c133.js"),["assets/index.html-3660c133.js","assets/framework-c44b2977.js"])),"v-38fce08b":_(()=>l(()=>import("./index.html-2997fe46.js"),["assets/index.html-2997fe46.js","assets/framework-c44b2977.js"])),"v-92fb1a40":_(()=>l(()=>import("./regular.html-15d0f307.js"),["assets/regular.html-15d0f307.js","assets/framework-c44b2977.js"])),"v-07bc00e4":_(()=>l(()=>import("./reseller.html-633294ca.js"),["assets/reseller.html-633294ca.js","assets/framework-c44b2977.js"])),"v-67fe297f":_(()=>l(()=>import("./index.html-fce0d4ab.js"),["assets/index.html-fce0d4ab.js","assets/framework-c44b2977.js"])),"v-cc245b0c":_(()=>l(()=>import("./index.html-16a9e529.js"),["assets/index.html-16a9e529.js","assets/framework-c44b2977.js"])),"v-1e772bf4":_(()=>l(()=>import("./index.html-18d1eaaf.js"),["assets/index.html-18d1eaaf.js","assets/framework-c44b2977.js"])),"v-e3f0a4a2":_(()=>l(()=>import("./index.html-c2aeccf4.js"),["assets/index.html-c2aeccf4.js","assets/FAQIncMessage-390ac701.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-04159818":_(()=>l(()=>import("./index.html-f497f79e.js"),["assets/index.html-f497f79e.js","assets/framework-c44b2977.js"])),"v-4d221c70":_(()=>l(()=>import("./index.html-b10b8a63.js"),["assets/index.html-b10b8a63.js","assets/framework-c44b2977.js"])),"v-0bc575b4":_(()=>l(()=>import("./index.html-bbbf99ec.js"),["assets/index.html-bbbf99ec.js","assets/framework-c44b2977.js"])),"v-2a2b382d":_(()=>l(()=>import("./index.html-a4357d2e.js"),["assets/index.html-a4357d2e.js","assets/framework-c44b2977.js"])),"v-7c7edde6":_(()=>l(()=>import("./index.html-d3244299.js"),["assets/index.html-d3244299.js","assets/framework-c44b2977.js"])),"v-16779dec":_(()=>l(()=>import("./index.html-4d69e73d.js"),["assets/index.html-4d69e73d.js","assets/framework-c44b2977.js"])),"v-74cd8d69":_(()=>l(()=>import("./index.html-89e8bc34.js"),["assets/index.html-89e8bc34.js","assets/framework-c44b2977.js"])),"v-157570eb":_(()=>l(()=>import("./index.html-7066e4b0.js"),["assets/index.html-7066e4b0.js","assets/framework-c44b2977.js"])),"v-281849c6":_(()=>l(()=>import("./index.html-87b42dbd.js"),["assets/index.html-87b42dbd.js","assets/framework-c44b2977.js"])),"v-4fba1aaa":_(()=>l(()=>import("./index.html-eaa4066f.js"),["assets/index.html-eaa4066f.js","assets/framework-c44b2977.js"])),"v-7bb9093e":_(()=>l(()=>import("./index.html-b192cb11.js"),["assets/index.html-b192cb11.js","assets/framework-c44b2977.js"])),"v-28ef1a8b":_(()=>l(()=>import("./index.html-4700b271.js"),["assets/index.html-4700b271.js","assets/framework-c44b2977.js"])),"v-4a57bc30":_(()=>l(()=>import("./whmcs_saved.html-7cb446b9.js"),["assets/whmcs_saved.html-7cb446b9.js","assets/framework-c44b2977.js"])),"v-3514d6a6":_(()=>l(()=>import("./index.html-f2fccdaf.js"),["assets/index.html-f2fccdaf.js","assets/framework-c44b2977.js"])),"v-241ac397":_(()=>l(()=>import("./index.html-8202bf0a.js"),["assets/index.html-8202bf0a.js","assets/framework-c44b2977.js"])),"v-11f342b7":_(()=>l(()=>import("./index.html-e074eeeb.js"),["assets/index.html-e074eeeb.js","assets/framework-c44b2977.js"])),"v-26751d8e":_(()=>l(()=>import("./index.html-36abad35.js"),["assets/index.html-36abad35.js","assets/framework-c44b2977.js"])),"v-13868404":_(()=>l(()=>import("./index.html-66696091.js"),["assets/index.html-66696091.js","assets/framework-c44b2977.js"])),"v-010e2d7d":_(()=>l(()=>import("./index.html-095ba355.js"),["assets/index.html-095ba355.js","assets/FAQIncMessage-390ac701.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-4f1610aa":_(()=>l(()=>import("./index.html-de3bec6c.js"),["assets/index.html-de3bec6c.js","assets/framework-c44b2977.js"])),"v-528d7da2":_(()=>l(()=>import("./index.html-9db83932.js"),["assets/index.html-9db83932.js","assets/framework-c44b2977.js"])),"v-166b4a4c":_(()=>l(()=>import("./index.html-5cef5800.js"),["assets/index.html-5cef5800.js","assets/framework-c44b2977.js"])),"v-95b487a0":_(()=>l(()=>import("./index.html-7994f114.js"),["assets/index.html-7994f114.js","assets/framework-c44b2977.js"])),"v-309e76be":_(()=>l(()=>import("./index.html-9690bc28.js"),["assets/index.html-9690bc28.js","assets/framework-c44b2977.js"])),"v-cdb28e44":_(()=>l(()=>import("./index.html-80f7ed68.js"),["assets/index.html-80f7ed68.js","assets/framework-c44b2977.js"])),"v-68f2720e":_(()=>l(()=>import("./index.html-2a614ae4.js"),["assets/index.html-2a614ae4.js","assets/framework-c44b2977.js"])),"v-27c2a530":_(()=>l(()=>import("./index.html-0c2c9892.js"),["assets/index.html-0c2c9892.js","assets/framework-c44b2977.js"])),"v-a7fa213a":_(()=>l(()=>import("./index.html-b80a51c4.js"),["assets/index.html-b80a51c4.js","assets/framework-c44b2977.js"])),"v-379536f4":_(()=>l(()=>import("./index.html-512c02e0.js"),["assets/index.html-512c02e0.js","assets/framework-c44b2977.js"])),"v-4cbda6a6":_(()=>l(()=>import("./index.html-a5a3783b.js"),["assets/index.html-a5a3783b.js","assets/framework-c44b2977.js"])),"v-f23b5fb8":_(()=>l(()=>import("./index.html-d94f6819.js"),["assets/index.html-d94f6819.js","assets/framework-c44b2977.js"])),"v-00097080":_(()=>l(()=>import("./index.html-a48c60b0.js"),["assets/index.html-a48c60b0.js","assets/framework-c44b2977.js"])),"v-1d7964ba":_(()=>l(()=>import("./index.html-8a174329.js"),["assets/index.html-8a174329.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-1e15a9dd":_(()=>l(()=>import("./index.html-f79f4602.js"),["assets/index.html-f79f4602.js","assets/AWPDirectAdmin-4739214c.js","assets/framework-c44b2977.js"])),"v-36e14580":_(()=>l(()=>import("./index.html-29d04fa5.js"),["assets/index.html-29d04fa5.js","assets/framework-c44b2977.js"])),"v-eb8332ea":_(()=>l(()=>import("./index.html-89ff0693.js"),["assets/index.html-89ff0693.js","assets/framework-c44b2977.js"])),"v-c41aa89c":_(()=>l(()=>import("./index.html-72fcb3a1.js"),["assets/index.html-72fcb3a1.js","assets/framework-c44b2977.js"])),"v-13444f59":_(()=>l(()=>import("./index.html-ed41a61b.js"),["assets/index.html-ed41a61b.js","assets/framework-c44b2977.js"])),"v-3706649a":_(()=>l(()=>import("./404.html-b8563878.js"),["assets/404.html-b8563878.js","assets/framework-c44b2977.js"]))};var Rt=Symbol(""),Tt=T(Oe),Ne=it({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),X=T(Ne),Z=()=>X,We=Symbol(""),re=()=>{const e=I(We);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},je=Symbol(""),Pt=()=>{const e=I(je);if(!e)throw new Error("usePageHead() is called without provider.");return e},$t=Symbol(""),Ge=Symbol(""),Ue=()=>{const e=I(Ge);if(!e)throw new Error("usePageLang() is called without provider.");return e},ze=Symbol(""),kt=()=>{const e=I(ze);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Ke=Symbol(""),Je=()=>{const e=I(Ke);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},le=T(xt),It=Symbol(""),Ct=Symbol(""),Mt="Layout",Bt="NotFound",z=at({resolveLayouts:e=>e.reduce((t,s)=>({...t,...s.layouts}),{}),resolvePageData:async e=>{const t=Tt.value[e];return await(t==null?void 0:t())??Ne},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,s)=>{const o=se(t.description)?t.description:s.description,n=[...lt(t.head)?t.head:[],...s.head,["title",{},e],["meta",{name:"description",content:o}]];return rt(n)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(s=>!!s).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let s;if(e.path){const o=e.frontmatter.layout;se(o)?s=o:s=Mt}else s=Bt;return t[s]},resolveRouteLocale:(e,t)=>ut(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ht=me({name:"ClientOnly",setup(e,t){const s=T(!1);return J(()=>{s.value=!0}),()=>{var o,n;return s.value?(n=(o=t.slots).default)==null?void 0:n.call(o):null}}}),Ft=me({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Z(),s=A(()=>qe[e.pageKey||t.value.key]);return()=>s.value?K(s.value):K("div","404 Not Found")}}),qt=(e={})=>e,q=e=>dt(e)?e:`/${ct(e)}`;const Nt={enhance:({app:e})=>{}};function Wt(e){return{all:e=e||new Map,on:function(t,s){var o=e.get(t);o?o.push(s):e.set(t,[s])},off:function(t,s){var o=e.get(t);o&&(s?o.splice(o.indexOf(s)>>>0,1):e.set(t,[]))},emit:function(t,s){var o=e.get(t);o&&o.slice().map(function(n){n(s)}),(o=e.get("*"))&&o.slice().map(function(n){n(t,s)})}}}const jt={class:"footer__img"},Gt=["href"],Ut=["src","alt"],zt={class:"footer-company-title"},Kt={class:"social"},Jt={class:"social_links"},Xt=["href"],Yt={class:"footer-social-text"},Qt={class:"social-icons-wrapper"},Zt=["href"],es=["src"],ts={__name:"Footer",setup(e){const{social:t,cloudlinuxSite:s,footerCustomLogo:o,footerCustomAltText:n,locales:i}=I("themeConfig"),a=re(),r=A(()=>new Date().getFullYear()),d=A(()=>a.value.layout==="HomeLayout");return(c,m)=>(u(),h("div",{class:F(["footer",{"footer-default-layout":!d.value}])},[p("div",jt,[p("a",{href:E(s)},[p("img",{src:E(q)(E(o)),alt:E(n)},null,8,Ut)],8,Gt)]),p("div",zt,R(r.value)+". CloudLinux Inc ",1),p("div",Kt,[p("div",Jt,[(u(!0),h(M,null,H(E(i).bottomLinks,v=>(u(),h("a",{href:v.url,target:"_blank"},R(v.text),9,Xt))),256))]),p("span",Yt,R(E(i).stayInTouch),1),p("div",Qt,[(u(!0),h(M,null,H(E(t),v=>(u(),h("a",{class:"social-icons-link",href:v==null?void 0:v.url,target:"_blank"},[v.icon?(u(),h("img",{key:0,class:"social-icons-link-img",src:E(q)(v==null?void 0:v.icon),alt:"footer logo"},null,8,es)):O("v-if",!0)],8,Zt))),256))])])],2))}},he=P(ts,[["__scopeId","data-v-f2902e71"],["__file","Footer.vue"]]),Xe={"/user-docs/":[{collapsable:!1,children:["/user-docs/user-docs-shared-cloudlinux/","/user-docs/user-docs-solo-cloudlinux/"]}],"/introduction/":[{collapsable:!1,children:["/introduction/"]}],"/admin/":[{collapsable:!1,children:["/admin/description/","/admin/installation/","/admin/components/","/admin/faq/"]}],"/solo/":[{collapsable:!1,children:["/solo/introduction/","/solo/installation/","/solo/activation/","/solo/administration/","/solo/manager/","/solo/faq/"]}],"/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/"]}],"/shared-pro/":[{collapsable:!1,children:["/shared-pro/introduction/","/shared-pro/x-ray/","/shared-pro/centralized-monitoring/","/shared-pro/accelerate-wp/"]}],"/ubuntu/":[{collapsable:!1,children:["/ubuntu/introduction/","/ubuntu/faq/","/ubuntu/features/","/ubuntu/installation/","/ubuntu/troubleshooting/","/ubuntu/uninstalling/"]}],"/shared/":[{collapsable:!1,children:["/shared/cloudlinux_installation/","/shared/elevate/","/shared/limits/","/shared/lve_manager/","/shared/cloudlinux_os_components/","/shared/command-line_tools/","/shared/apache2nginx/","/shared/alt-ea_packages/","/shared/control_panel_integration/","/shared/cloudlinux_os_kernel/","/shared/for_cloudlinux_partners/","/shared/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/"]}]},De=/#.*$/,ss=/\.(md|html)$/,te=/\/$/,we=/^(https?:|mailto:|tel:)/;function ne(e){return decodeURI(e).replace(De,"").replace(ss,"")}function os(e){const t=e==null?void 0:e.match(De);if(t)return t[0]}function ns(e){return we.test(e)}function is(e){if(ns(e))return e;const t=e==null?void 0:e.match(De),s=t?t[0]:"",o=ne(e);return te.test(o)?e:o+".html"+s}function pe(e,t){const s=e.hash,o=os(t);if(o&&s!==o)return!1;const n=ne(e.path),i=ne(t);return n===i}function _e(e,t,s){s&&(t=as(t,s));const o=ne(t);for(let n=0;nQe(i,s,o)):[]}function ls(e){e=e.map(s=>Object.assign({},JSON.parse(JSON.stringify(s))));let t;return e.forEach(s=>{s.level!==1?t=s:t&&(t.children||(t.children=[])).push(s)}),e.filter(s=>s.level!==1)}function rs(e,t){if(Array.isArray(t))return{base:"/",config:t};for(const s in t)if(us(e.path).indexOf(s)===0)return{base:s,config:t[s]};return null}function us(e){return/(\.html|\/)$/.test(e)?e:e+"/"}function Qe(e,t,s,o){if(typeof e=="string")return _e(t,e,s);if(Array.isArray(e))return Object.assign(_e(t,e[0],s),{title:e[1]});{o&&console.error("[vuepress] Nested sidebar groups are not supported. Consider using navbar + categories instead.");const n=e.children||[];return{type:"group",title:e.title,children:n.map(i=>Qe(i,t,s,!0)),collapsable:e.collapsable!==!1}}}const ds={functional:!0,props:["item","closeSidebarDrawer"],render({item:e,closeSidebarDrawer:t}){var m,v;if(!e)return;const s=Z(),o=ve(),n=fe(),i=pe(o,e==null?void 0:e.path),a=(e==null?void 0:e.type)==="auto"?i||e.children.some(b=>pe(o,e.basePath+"#"+b.slug)):i,r=cs(K,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),a,e.headers,t,n),d=((m=s.value.frontmatter)==null?void 0:m.sidebarDepth)!=null?(v=s.value.frontmatter)==null?void 0:v.sidebarDepth:5,c=d??1;if((e==null?void 0:e.type)==="auto")return[r,Le(K,e.children,e.basePath,o,c,1,t)];if(e.headers&&e.headers.length){const b=ls(e.headers);return[r,Le(K,b,e==null?void 0:e.path,o,c,1,t)]}return Se(K,e==null?void 0:e.path,e.title||(e==null?void 0:e.path),a,e.children,0,t)}};function Se(e,t,s,o,n,i=0,a){const r=e(ht,{"data-anchor":t,to:t,activeClass:"",exactActiveClass:"",class:{active:o,"sidebar-link":!0,["link-depth-level-"+i]:!0}},()=>[s]);return e("div",{class:{active:o,collapsed:!0,"sidebar-link-container":!!(n!=null&&n.length)},onClick:d=>{d.target.classList.toggle("collapsed"),d.target.tagName!=="DIV"&&a()}},[r])}function cs(e,t,s,o,n,i,a){const r=!!n&&n.some(d=>d.level!==1);return e("div",{class:{active:o,collapsed:o,"sidebar-header":!0,"sidebar-link":!0,"sidebar-header--empty":!r},onClick:d=>{const c=d.target.classList,m=d.target.querySelector("a");c.toggle("collapsed"),m&&a.push(m.getAttribute("href"))}},[Se(e,t,s,o,null,0,i)])}function Le(e,t,s,o,n,i=1,a){return!t||i>n?null:e("ul",{class:"sidebar-sub-headers"},t.map(r=>{const d=pe(o,s+"#"+r.slug);return e("li",{class:{collapsible:i<3,"sidebar-sub-header":!0}},[Se(e,s+"#"+r.slug,r.title,d,r.children,i,a),Le(e,r.children,s,o,n,i+1,a)])}))}const Ze=P(ds,[["__file","SidebarLink.vue"]]);const hs={__name:"DropdownTransition",setup(e){const t=o=>{o.style.height=o.scrollHeight+"px"},s=o=>{o.style.height=""};return(o,n)=>(u(),D(ce,{name:"dropdown",onEnter:t,onAfterEnter:s,onBeforeLeave:t},{default:N(()=>[V(o.$slots,"default")]),_:3}))}},ps=P(hs,[["__file","DropdownTransition.vue"]]);const _s={key:0,ref:"items",class:"sidebar-group-items"},ms={__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,s)=>(u(),h("div",{class:F(["sidebar-group",{first:e.first,collapsable:e.collapsable}])},[w(ps,null,{default:N(()=>{var o;return[e.open||!e.collapsable?(u(),h("ul",_s,[(u(!0),h(M,null,H((o=e.item)==null?void 0:o.children,n=>(u(),h("li",null,[w(Ze,{closeSidebarDrawer:e.closeSidebarDrawer,item:n},null,8,["closeSidebarDrawer","item"])]))),256))],512)):O("v-if",!0)]}),_:1})],2))}},vs=P(ms,[["__file","SidebarGroup.vue"]]);const fs={class:"sidebar"},gs={key:0,class:"sidebar-links"},bs={__name:"Sidebar",props:{items:{type:Array,required:!0},closeSidebarDrawer:{type:Function,default:()=>{}},isMobileWidth:{type:Boolean}},setup(e){const t=e,s=A(()=>t.items),o=ve(),n=Z(),i=A(()=>Ye(n.value,o,s.value)),a=T(0),r=()=>{const f=v(o,t.items);f>-1&&(a.value=f)},d=f=>{a.value=f===a.value?-1:f},c=f=>{const g=f.getBoundingClientRect();return g.top>=0&&g.left>=0&&g.bottom<=(window.innerHeight/2||document.documentElement.clientHeight/2)&&g.right<=(window.innerWidth||document.documentElement.clientWidth)};ie(()=>o,r);const m=()=>{const f=document.querySelectorAll(".header-anchor"),g=document.querySelector(".sidebar"),y=g.querySelectorAll("a"),L=g.querySelectorAll(".collapsible.sidebar-sub-header"),x=Array.from(y).map(S=>S.getAttribute("data-anchor"));f.forEach(S=>{S.getAttribute("data-anchor")||S.setAttribute("data-anchor",n.value.path+S.hash)}),f.forEach(S=>{if(c(S)){const k=x.find(C=>C===S.getAttribute("data-anchor"));L.forEach(C=>{C.querySelectorAll(".sidebar-link-container").forEach(G=>{C.querySelector(`a[data-anchor="${k}"]`)?G.classList.remove("collapsed"):G.classList.add("collapsed")})}),g.querySelector(`a[data-anchor="${k}"]`)&&(y.forEach(C=>C.classList.remove("active")),g.querySelector(`a[data-anchor="${k}"]`).classList.add("active"))}})},v=(f,g)=>{for(let y=0;ype(f,x.path)))return y}return-1},b=()=>{const f=window.location.hash,g=document.querySelectorAll(".sidebar a");g.forEach(y=>{if(y.getAttribute("data-anchor")===f){g.forEach(x=>x.classList.remove("active")),y.classList.add("active");const L=y.closest(".collapsible");L&&L.classList.remove("collapsed")}})};return J(()=>{r(),t.isMobileWidth||window.addEventListener("scroll",m),t.isMobileWidth||window.addEventListener("resize",m),window.addEventListener("hashchange",b)}),ae(()=>{window.removeEventListener("scroll",m),window.removeEventListener("resize",m),window.removeEventListener("hashchange",b)}),(f,g)=>(u(),h("div",fs,[V(f.$slots,"top"),i.value.length?(u(),h("ul",gs,[(u(!0),h(M,null,H(i.value,(y,L)=>(u(),h("li",{key:L},[y.type==="group"?(u(),D(vs,{key:0,item:y,first:L===0,open:L===a.value,closeSidebarDrawer:e.closeSidebarDrawer,collapsable:!!(y.collapsable||y.collapsible),onToggle:x=>d(L)},null,8,["item","first","open","closeSidebarDrawer","collapsable","onToggle"])):(u(),D(Ze,{key:1,closeSidebarDrawer:e.closeSidebarDrawer,item:y},null,8,["closeSidebarDrawer","item"]))]))),128))])):O("v-if",!0),V(f.$slots,"bottom")]))}},et=P(bs,[["__file","Sidebar.vue"]]);var ys=Object.defineProperty,Es=Object.defineProperties,ws=Object.getOwnPropertyDescriptors,Re=Object.getOwnPropertySymbols,Ls=Object.prototype.hasOwnProperty,Os=Object.prototype.propertyIsEnumerable,Te=(e,t,s)=>t in e?ys(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,ee=(e,t)=>{for(var s in t||(t={}))Ls.call(t,s)&&Te(e,s,t[s]);if(Re)for(var s of Re(t))Os.call(t,s)&&Te(e,s,t[s]);return e},Pe=(e,t)=>Es(e,ws(t));const Ds={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 s=this.getDropdownViewport(),{top:o,bottom:n,height:i}=t.getBoundingClientRect();if(os.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(s.height-i)}},getDropdownViewport(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},Ss={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 s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},Vs={},xs={xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"},Rs=p("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),Ts=[Rs];function Ps(e,t){return u(),h("svg",xs,Ts)}const $s=Ae(Vs,[["render",Ps]]),ks={},Is={xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"},Cs=p("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),Ms=[Cs];function Bs(e,t){return u(),h("svg",Is,Ms)}const Hs=Ae(ks,[["render",Bs]]),$e={Deselect:$s,OpenIndicator:Hs},Fs={mounted(e,{instance:t}){if(t.appendToBody){const{height:s,top:o,left:n,width:i}=t.$refs.toggle.getBoundingClientRect();let a=window.scrollX||window.pageXOffset,r=window.scrollY||window.pageYOffset;e.unbindPosition=t.calculatePosition(e,t,{width:i+"px",left:a+n+"px",top:r+o+s+"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 qs(e){const t={};return Object.keys(e).sort().forEach(s=>{t[s]=e[s]}),JSON.stringify(t)}let Ns=0;function Ws(){return++Ns}const js={components:ee({},$e),directives:{appendToBody:Fs},mixins:[Ds,Ss,As],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:qs(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,s){return(t||"").toLocaleLowerCase().indexOf(s.toLocaleLowerCase())>-1}},filter:{type:Function,default(e,t){return e.filter(s=>{let o=this.getOptionLabel(s);return typeof o=="number"&&(o=o.toString()),this.filterBy(s,o,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:s,top:o,left:n}){e.style.top=o,e.style.left=n,e.style.width=s}},dropdownShouldOpen:{type:Function,default({noDrop:e,open:t,mutableLoading:s}){return e?!1:t&&!s}},uid:{type:[String,Number],default:()=>Ws()}},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:ee({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:Pe(ee({},e),{deselect:this.deselect}),footer:Pe(ee({},e),{deselect:this.deselect})}},childComponents(){return ee(ee({},$e),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 s=this.createOption(this.search);this.optionExists(s)||t.unshift(s)}return t},isValueEmpty(){return this.selectedValue.length===0},showClearButton(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options(e,t){const s=()=>typeof this.resetOnOptionsChange=="function"?this.resetOnOptionsChange(e,t,this.selectedValue):this.resetOnOptionsChange;!this.taggable&&s()&&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 s=[...this.deselectButtons||[],this.$refs.clearButton];if(this.searchEl===void 0||s.filter(Boolean).some(o=>o.contains(e.target)||o===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=o=>JSON.stringify(this.reduce(o))===JSON.stringify(e),s=[...this.options,...this.pushedTags].filter(t);return s.length===1?s[0]:s.find(o=>this.optionComparator(o,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=n=>(n.preventDefault(),!this.isComposing&&this.typeAheadSelect()),s={8:n=>this.maybeDeleteValue(),9:n=>this.onTab(),27:n=>this.onEscape(),38:n=>(n.preventDefault(),this.typeAheadUp()),40:n=>(n.preventDefault(),this.typeAheadDown())};this.selectOnKeyCodes.forEach(n=>s[n]=t);const o=this.mapKeydown(s,this);if(typeof o[e.keyCode]=="function")return o[e.keyCode](e)}}},Gs=["dir"],Us=["id","aria-expanded","aria-owns"],zs={ref:"selectedOptions",class:"vs__selected-options"},Ks=["disabled","title","aria-label","onClick"],Js={ref:"actions",class:"vs__actions"},Xs=["disabled"],Ys={class:"vs__spinner"},Qs=["id"],Zs=["id","aria-selected","onMouseover","onClick"],eo={key:0,class:"vs__no-options"},to=B(" Sorry, no matching options. "),so=["id"];function oo(e,t,s,o,n,i){const a=pt("append-to-body");return u(),h("div",{dir:s.dir,class:F(["v-select",i.stateClasses])},[V(e.$slots,"header",W(U(i.scope.header))),p("div",{id:`vs${s.uid}__combobox`,ref:"toggle",class:"vs__dropdown-toggle",role:"combobox","aria-expanded":i.dropdownOpen.toString(),"aria-owns":`vs${s.uid}__listbox`,"aria-label":"Search for option",onMousedown:t[1]||(t[1]=r=>i.toggleDropdown(r))},[p("div",zs,[(u(!0),h(M,null,H(i.selectedValue,(r,d)=>V(e.$slots,"selected-option-container",{option:i.normalizeOptionForSlot(r),deselect:i.deselect,multiple:s.multiple,disabled:s.disabled},()=>[(u(),h("span",{key:s.getOptionKey(r),class:"vs__selected"},[V(e.$slots,"selected-option",W(U(i.normalizeOptionForSlot(r))),()=>[B(R(s.getOptionLabel(r)),1)]),s.multiple?(u(),h("button",{key:0,ref_for:!0,ref:c=>n.deselectButtons[d]=c,disabled:s.disabled,type:"button",class:"vs__deselect",title:`Deselect ${s.getOptionLabel(r)}`,"aria-label":`Deselect ${s.getOptionLabel(r)}`,onClick:c=>i.deselect(r)},[(u(),D(de(i.childComponents.Deselect)))],8,Ks)):O("",!0)]))])),256)),V(e.$slots,"search",W(U(i.scope.search)),()=>[p("input",Ee({class:"vs__search"},i.scope.search.attributes,_t(i.scope.search.events)),null,16)])],512),p("div",Js,[Y(p("button",{ref:"clearButton",disabled:s.disabled,type:"button",class:"vs__clear",title:"Clear Selected","aria-label":"Clear Selected",onClick:t[0]||(t[0]=(...r)=>i.clearSelection&&i.clearSelection(...r))},[(u(),D(de(i.childComponents.Deselect)))],8,Xs),[[Q,i.showClearButton]]),V(e.$slots,"open-indicator",W(U(i.scope.openIndicator)),()=>[s.noDrop?O("",!0):(u(),D(de(i.childComponents.OpenIndicator),W(Ee({key:0},i.scope.openIndicator.attributes)),null,16))]),V(e.$slots,"spinner",W(U(i.scope.spinner)),()=>[Y(p("div",Ys,"Loading...",512),[[Q,e.mutableLoading]])])],512)],40,Us),w(ce,{name:s.transition},{default:N(()=>[i.dropdownOpen?Y((u(),h("ul",{id:`vs${s.uid}__listbox`,ref:"dropdownMenu",key:`vs${s.uid}__listbox`,class:"vs__dropdown-menu",role:"listbox",tabindex:"-1",onMousedown:t[2]||(t[2]=$((...r)=>i.onMousedown&&i.onMousedown(...r),["prevent"])),onMouseup:t[3]||(t[3]=(...r)=>i.onMouseUp&&i.onMouseUp(...r))},[V(e.$slots,"list-header",W(U(i.scope.listHeader))),(u(!0),h(M,null,H(i.filteredOptions,(r,d)=>(u(),h("li",{id:`vs${s.uid}__option-${d}`,key:s.getOptionKey(r),role:"option",class:F(["vs__dropdown-option",{"vs__dropdown-option--deselect":i.isOptionDeselectable(r)&&d===e.typeAheadPointer,"vs__dropdown-option--selected":i.isOptionSelected(r),"vs__dropdown-option--highlight":d===e.typeAheadPointer,"vs__dropdown-option--disabled":!s.selectable(r)}]),"aria-selected":d===e.typeAheadPointer?!0:null,onMouseover:c=>s.selectable(r)?e.typeAheadPointer=d:null,onClick:$(c=>s.selectable(r)?i.select(r):null,["prevent","stop"])},[V(e.$slots,"option",W(U(i.normalizeOptionForSlot(r))),()=>[B(R(s.getOptionLabel(r)),1)])],42,Zs))),128)),i.filteredOptions.length===0?(u(),h("li",eo,[V(e.$slots,"no-options",W(U(i.scope.noOptions)),()=>[to])])):O("",!0),V(e.$slots,"list-footer",W(U(i.scope.listFooter)))],40,Qs)),[[a]]):(u(),h("ul",{key:1,id:`vs${s.uid}__listbox`,role:"listbox",style:{display:"none",visibility:"hidden"}},null,8,so))]),_:3},8,["name"]),V(e.$slots,"footer",W(U(i.scope.footer)))],10,Gs)}const no=Ae(js,[["render",oo]]);const io=["src"],ao={key:1},lo={__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:s}=I("themeConfig"),o=t,n=r=>{o("changeSidebarItems",r),o("update:model-value",r)},i=T(),a=()=>{i.value&&(i.value.open=!1)};return J(()=>window.addEventListener("click",r=>{var d;(d=i.value)!=null&&d.$el.contains(r.target)||a()})),ae(()=>window.removeEventListener("click",a)),(r,d)=>(u(),D(E(no),{ref_key:"dropdown",ref:i,"onUpdate:modelValue":n,"model-value":e.modelValue,label:"title",value:"link",clearable:!1,searchable:!1,options:e.options},{"open-indicator":N(({attributes:c})=>[e.withIcon?(u(),h("div",Ee({key:0,class:"select-icon"},c),[p("img",{src:E(q)(E(s)),alt:"search Icon"},null,8,io)],16)):(u(),h("span",ao))]),_:1},8,["model-value","options"]))}},tt=P(lo,[["__file","DSelect.vue"]]),ro={class:"sidebar-drawer__mobile"},uo={class:"sidebar-header"},co=p("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1),ho=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,s)=>(u(),h("div",ro,[w(et,{closeSidebarDrawer:e.closeSidebarDrawer,items:e.allPages,isMobileWidth:e.isMobileWidth},{top:N(()=>[p("div",uo,[co,w(tt,{modelValue:e.modelValue,"onUpdate:modelValue":s[0]||(s[0]=o=>t.$emit("update:model-value",o)),onChangeSidebarItems:s[1]||(s[1]=o=>t.$emit("changeSidebarItems",o)),"with-icon":"",options:e.documents},null,8,["modelValue","options"])])]),_:1},8,["closeSidebarDrawer","items","isMobileWidth"])]))}});const po=P(ho,[["__file","SidebarDrawer.vue"]]);const _o={class:"drawer-tabs__wrapper"},mo=["onClick"],vo={__name:"DrawerTabs",props:{data:{type:Array,required:!0,default:()=>({})},modelValue:{type:Number,default:-1}},emits:["update:modelValue"],setup(e,{emit:t}){const s=t,o=n=>{s("update:modelValue",n)};return(n,i)=>(u(),h("div",_o,[(u(!0),h(M,null,H(e.data,(a,r)=>(u(),h("div",{key:r,onClick:d=>o(r),class:F([{"drawer-tab__active":e.modelValue===r},"drawer-tab"])},[p("div",{class:F(["drawer-tab__text",{"drawer-tab__text__active":e.modelValue===r}])},R(a.title)+" ("+R(a==null?void 0:a.numberResults)+") ",3)],10,mo))),128))]))}},fo=P(vo,[["__scopeId","data-v-c60e280a"],["__file","DrawerTabs.vue"]]);const go={key:0,class:"drawer-main__search-results"},bo=["onClick"],yo=["innerHTML"],Eo=["innerHTML"],wo=["innerHTML"],Lo={key:1},Oo={class:"hidden_results__text"},Do=p("p",{class:"hidden_results__text"},"Collapse results",-1),So=[Do],Ao={key:2},Vo={key:0,class:"no_results"},xo={key:1,class:"no_results"},Ro={key:0},To=p("br",null,null,-1),Po=p("a",{class:"no_results__link",href:" https://forum.cloudlinux.com/",target:"_blank"},"https://forum.cloudlinux.com/",-1),$o={__name:"DrawerSearchResult",props:{data:{type:[Array,Object],required:!0},modelValue:{type:String,required:!0}},setup(e){mt(b=>({aa1be2ec:E(o)}));const t=e,{MAX_ALGOLIA_VISIBLE_RESULT:s,MAX_ALGOLIA_VISIBLE_ROWS:o}=I("themeConfig"),n=T(!1),i=b=>{window.location.href=b},a=A(()=>{var b;return n.value?t.data:(b=t.data)==null?void 0:b.slice(0,s)}),r=A(()=>t.data.length-a.value.length),d=()=>{n.value=!0},c=()=>{n.value=!1},m=b=>{var f,g;for(const y in b)if(b[y].value!==null||b[y].value!==void 0)return((f=b.lvl1)==null?void 0:f.value)||((g=b.lvl0)==null?void 0:g.value);return null},v=b=>Object.values(b).slice(2).filter(Boolean).map(f=>f.value).join(" > ");return(b,f)=>(u(),h(M,null,[e.data.length?(u(),h("section",go,[(u(!0),h(M,null,H(a.value,g=>{var y,L,x,S;return u(),h("div",{key:g,class:"search-result",onClick:k=>i((g==null?void 0:g.url)||"/")},[p("div",{class:"search-result__title",innerHTML:m((y=g._highlightResult)==null?void 0:y.hierarchy)},null,8,yo),p("div",{class:"search-result__breadcrumb",innerHTML:v((L=g._highlightResult)==null?void 0:L.hierarchy)},null,8,Eo),p("div",{class:"search-result__text",innerHTML:(S=(x=g._highlightResult)==null?void 0:x.content)==null?void 0:S.value},null,8,wo)],8,bo)}),128))])):O("v-if",!0),e.data.length?(u(),h("div",Lo,[r.value?(u(),h("div",{key:0,class:"hidden_results",onClick:d},[p("p",Oo,"Show all results("+R(r.value)+")",1)])):!r.value&&n.value?(u(),h("div",{key:1,class:"hidden_results",onClick:c},So)):O("v-if",!0)])):(u(),h("div",Ao,[e.modelValue.length?(u(),h("p",xo,[B(" Sorry! No results found for "),e.modelValue?(u(),h("span",Ro,'"'+R(e.modelValue)+'"',1)):O("v-if",!0),B(" 😞"),To,B("Please try ask the community (link to the "),Po,B("). ")])):(u(),h("p",Vo,"What are you searching for?"))]))],64))}},ko=P($o,[["__file","DrawerSearchResult.vue"]]);const Io={class:"drawer-header"},Co=p("div",{class:"drawer-header__wrapper"},[p("h2",{class:"drawer-header__paragraph"},"How can we help you?"),p("div",{id:"drawerSearch"})],-1),Mo={class:"drawer-cross"},Bo=["src"],Ho={class:"drawer-main"},Fo={class:"drawer-main__wrapper"},qo={class:"drawer-main__breadcrumb"},No={key:0,class:"drawer-main__breadcrumb__text"},Wo=["src"],jo={__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 s=e,o=t,n=T(0),i=A(()=>{const d=s.homeLayoutSearchResult.reduce((c,m)=>{var b;const v=(b=m.hierarchy)==null?void 0:b.lvl0;return c[v]=c[v]||{title:v,numberResults:0},c[v].numberResults++,c},{});return Object.values(d)}),a=A(()=>{if(n.value===-1)return s.homeLayoutSearchResult||[];const d=i.value[n.value];return s.homeLayoutSearchResult.filter(c=>c.hierarchy.lvl0===(d==null?void 0:d.title))}),r=()=>{o("closeDrawer"),n.value=0};return ie(()=>s.isOpenDrawer,()=>{document.body.classList.toggle("disable-scroll",s.isOpenDrawer)}),(d,c)=>(u(),h("div",null,[p("div",{class:F(["drawer",{"is-open":e.isOpenDrawer}])},[p("div",Io,[Co,p("div",Mo,[p("img",{onClick:r,class:"drawer-cross__img",src:E(q)("/global/cross.svg"),alt:"cross"},null,8,Bo),p("p",{onClick:r,class:"drawer-cross__text"},"close")])]),w(fo,{modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=m=>n.value=m),data:i.value},null,8,["modelValue","data"]),p("main",null,[p("div",Ho,[p("div",Fo,[p("div",qo,[a.value.length?(u(),h("p",No,[B("Home "),p("img",{src:E(q)("/arrows/arrow-right-breadcrumb.svg"),alt:"breadcrumb icon"},null,8,Wo),B(" Documentation ")])):O("v-if",!0)]),w(ko,{modelValue:e.modelValue,data:a.value},null,8,["modelValue","data"])])]),e.isOpenDrawer&&e.isMobileWidth?(u(),D(he,{key:0,class:"drawer-footer__mobile"})):O("v-if",!0)])],2),e.isOpenDrawer&&!e.isMobileWidth?(u(),D(he,{key:0,class:"drawer-footer"})):O("v-if",!0)]))}},Go=P(jo,[["__file","Drawer.vue"]]);const Uo={id:"search-form",class:"drawer-header__input"},zo=["value","placeholder"],Ko=["src"],Jo={__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_ALGOLIA_HITS_PER_PAGE:s}=I("themeConfig"),{headerDefaultSearchIcon:o,headerSearchIcon:n,headerSearchPlaceholder:i}=I("themeConfig"),a=e,r=t,d=re(),c=A(()=>d.value.layout==="HomeLayout"),m=A(()=>a.isOpenDrawer?"drawer-header__search":c.value?"header-layout__search":"header-layout__search-default"),v=A(()=>a.isOpenDrawer?"drawer-header__search-icon":c.value?"header-layout__search-icon":"header-layout__search-icon-default"),b=A(()=>c.value||a.isOpenDrawer?n:o),f=A(()=>a.isOpenDrawer?"Search":c.value?i:"Search"),g=A(()=>a.isMobileWidth?"Search accross all Imunify Security support":f.value),y=async L=>{if(typeof window>"u")return;const[x]=await Promise.all([l(()=>import("./docsearch.min-3955f288.js").then(k=>k.d),["assets/docsearch.min-3955f288.js","assets/framework-c44b2977.js"]),l(()=>import("./docsearch.min-49eb4b49.js"),[])]),S=x.default;S(Object.assign({},L,{inputSelector:"#algolia-search-input",algoliaOptions:{hitsPerPage:s},handleSelected:()=>{r("openDrawer")},transformData:k=>{r("result",k)}}))};return ie(()=>a.options,async L=>{await y(L)},{immediate:!0}),(L,x)=>(u(),h("form",Uo,[p("input",{value:e.modelValue,onInput:x[0]||(x[0]=S=>L.$emit("update:modelValue",S.target.value)),id:"algolia-search-input",placeholder:g.value,class:F(m.value),onKeypress:x[1]||(x[1]=j($(S=>L.$emit("openDrawer"),["prevent"]),["enter"]))},null,42,zo),p("div",{class:F(v.value)},[p("img",{onClick:x[2]||(x[2]=S=>L.$emit("openDrawer")),alt:"search icon",src:E(q)(b.value)},null,8,Ko)],2)]))}},ke=P(Jo,[["__file","DrawerSearch.vue"]]);const Xo={class:"header-layout__search-container"},Yo={key:0,class:"header-layout__search-title"},Qo={__name:"HeaderLayoutSearch",props:{isMobileWidth:{type:Boolean,default:!1},closeSidebarDrawer:{type:Function}},setup(e,{expose:t}){const s=e,{headerSearch:o,algoliaOptions:n}=I("themeConfig"),i=re(),a=T(!1),r=T(!1),d=T(""),c=T([]);ie(()=>d.value,()=>{d.value||(c.value=[])});const m=g=>{c.value=g},v=A(()=>i.value.layout==="HomeLayout"),b=()=>{a.value=!0,r.value=!0,s.closeSidebarDrawer&&s.closeSidebarDrawer()},f=()=>{c.value.length=0,d.value="",a.value=!1,r.value=!1};return t({openDrawer:b,closeDrawer:f,mobileDrawerVisible:r}),(g,y)=>(u(),h("div",Xo,[v.value?(u(),h("h1",Yo,R(E(o)),1)):O("v-if",!0),a.value?(u(),D(He,{key:1,to:"#drawerSearch"},[w(ke,{options:E(n),modelValue:d.value,"onUpdate:modelValue":y[0]||(y[0]=L=>d.value=L),isMobileWidth:e.isMobileWidth,onOpenDrawer:b,isOpenDrawer:a.value,onResult:m},null,8,["options","modelValue","isMobileWidth","isOpenDrawer"])])):(u(),D(ke,{key:2,isMobileWidth:e.isMobileWidth,options:E(n),modelValue:d.value,"onUpdate:modelValue":y[1]||(y[1]=L=>d.value=L),onOpenDrawer:b,isOpenDrawer:a.value,onResult:m},null,8,["isMobileWidth","options","modelValue","isOpenDrawer"])),w(Go,{homeLayoutSearchResult:c.value,modelValue:d.value,"onUpdate:modelValue":y[2]||(y[2]=L=>d.value=L),onCloseDrawer:f,isOpenDrawer:a.value,isMobileWidth:e.isMobileWidth},null,8,["homeLayoutSearchResult","modelValue","isOpenDrawer","isMobileWidth"])]))}},Ie=P(Qo,[["__file","HeaderLayoutSearch.vue"]]);const Zo={class:"header-products-wrapper"},en={key:0,class:"dropdown-wrapper"},tn=["href"],sn={key:1,class:"dropdown-wrapper"},on=["href"],nn=["src"],an={class:"header-products-wrapper-paragraph"},ln=["src"],rn={__name:"HeaderProducts",props:{isMobileWidth:{type:Boolean}},setup(e){const{productsTitle:t,arrowDownIcon:s,productsList:o,productsURLs:n}=I("themeConfig"),i=T(!1),a=T(null),r=d=>{!d.composedPath().includes(a.value)&&(i.value=!1)};return J(()=>{document.addEventListener("click",r)}),ae(()=>{document.removeEventListener("click",r)}),(d,c)=>(u(),h("div",Zo,[p("div",{ref_key:"menu",ref:a,class:"dropdown"},[e.isMobileWidth?(u(),D(He,{key:0,to:"body"},[i.value?(u(),h("div",en,[(u(!0),h(M,null,H(E(o),(m,v)=>(u(),h("p",{class:"dropdown-content__paragraph",key:m},[p("a",{class:"dropdown-content__link",href:E(n)[v]},R(m),9,tn)]))),128))])):O("v-if",!0)])):O("v-if",!0),i.value&&!e.isMobileWidth?(u(),h("div",sn,[(u(!0),h(M,null,H(E(o),(m,v)=>(u(),h("p",{class:"dropdown-content__paragraph",key:m},[p("a",{class:"dropdown-content__link",href:E(n)[v]},R(m),9,on)]))),128))])):O("v-if",!0),p("div",{onClick:c[0]||(c[0]=m=>i.value=!i.value),class:"header-products-container"},[p("img",{class:"header-products-container__img",alt:"hamburger menu",src:E(q)("/global/hamburger-menu.svg")},null,8,nn),p("p",an,R(E(t)),1),p("img",{class:F(["products-icon__default",{"products-icon__rotate":i.value}]),width:"10",height:"8",src:E(q)(E(s)),alt:"arrow down icon"},null,10,ln)])],512)]))}},un=P(rn,[["__file","HeaderProducts.vue"]]);const dn={class:"navbar-header"},cn={class:"navbar-header__logo-wrapper"},hn=["src"],pn=["src"],_n=["href","onClick"],mn={__name:"HeaderLayout",props:{isMobileWidth:{type:Boolean},closeSidebarDrawer:{type:Function}},setup(e){const{siteLogo:t,defaultURL:s,locales:o,headerDefaultSearchIcon:n}=I("themeConfig"),i=T(null),a=re(),r=Je(),d=T(null),c=()=>{var f;return(f=d==null?void 0:d.value)==null?void 0:f.openDrawer()},m=A(()=>a.value.layout==="HomeLayout"),v=A(()=>(r.value+s).replace(/\/+/g,"/")),b=f=>{if(f.type)switch(f.type){case"event":var f=new CustomEvent(f.name);document.dispatchEvent(f)}};return(f,g)=>{var L;const y=oe("router-link");return u(),h("header",{class:F(["navbar",{fixed:!m.value}])},[p("div",dn,[p("div",cn,[w(y,{to:v.value,class:"home-link"},{default:N(()=>[E(t)?(u(),h("img",{key:0,class:"logo",src:E(q)(E(t)),alt:"logo header"},null,8,hn)):O("v-if",!0)]),_:1},8,["to"]),m.value?O("v-if",!0):(u(),D(Ie,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:d,class:F({"header-mobile__hidden":!((L=d.value)!=null&&L.mobileDrawerVisible)}),isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","class","isMobileWidth"]))]),p("div",{class:"links",style:vt({"max-width":i.value+"px"})},[p("img",{onClick:c,class:"navbar-header__mobile-search",src:E(q)(E(n)),alt:"icon image"},null,8,pn),w(un,{isMobileWidth:e.isMobileWidth},null,8,["isMobileWidth"]),(u(!0),h(M,null,H(E(o).navbarLinks,x=>(u(),h("a",{href:x.url,target:"_blank",class:F(x.class),onClick:S=>b(x.event)},R(x.text),11,_n))),256))],4)]),m.value?(u(),D(Ie,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:d,isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","isMobileWidth"])):O("v-if",!0)],2)}}},st=P(mn,[["__file","HeaderLayout.vue"]]);const vn=e=>(ft("data-v-1eb13e00"),e=e(),gt(),e),fn={class:"back-to-top"},gn=vn(()=>p("span",{class:"back-to-top__link-span"},"Scroll up",-1)),bn=[gn],yn={__name:"BackToTop",props:{boundary:{type:Number,default:200}},setup(e){const t=e,s=T(!1),o=()=>{window&&(s.value=window.pageYOffset>t.boundary)},n=()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0};return J(()=>{window&&(o(),window.addEventListener("scroll",o))}),ae(()=>{window&&window.removeEventListener("scroll",o)}),(i,a)=>(u(),h("div",fn,[p("a",{class:F([{active:s.value},"nav-arrow top back-to-top__link"]),onClick:n},bn,2)]))}},En=P(yn,[["__scopeId","data-v-1eb13e00"],["__file","BackToTop.vue"]]);const wn={class:"breadcrumb-wrapper"},Ln={class:"breadcrumb-title"},On={__name:"Breadcrumb",setup(e){const t=Z(),{locales:{siteTitle:s}}=I("themeConfig"),o=A(()=>{const n=[];return t.value.path!=="/"&&n.push({path:t.value.path,title:t.value.title}),n});return(n,i)=>{const a=oe("router-link");return u(),h("div",wn,[p("span",Ln,R(E(s))+":",1),(u(!0),h(M,null,H(o.value,r=>(u(),D(a,{class:"breadcrumb",key:r.path,to:r.path},{default:N(()=>[B(R(r.title),1)]),_:2},1032,["to"]))),128))])}}},Dn=P(On,[["__scopeId","data-v-9445381a"],["__file","Breadcrumb.vue"]]);const Sn={key:0,class:"page-nav"},An={__name:"PageNav",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array}},setup(e){const t=e,s=Je(),o=Z(),n=A(()=>{const c=o.value.frontmatter.prev;return c===!1?null:c?_e(t.allPages,c,s):a(o.value,t.sidebarItems)}),i=A(()=>{const c=o.value.frontmatter.next;return c===!1?null:c?_e(t.allPages,c,s):r(o.value,t.sidebarItems)}),a=(c,m)=>d(c,m,-1),r=(c,m)=>d(c,m,1),d=(c,m,v)=>{const b=[];m.forEach(f=>{f.type==="group"?b.push(...f.children||[]):b.push(f)});for(let f=0;f{const v=oe("router-link");return n.value||i.value?(u(),h("div",Sn,[n.value?(u(),D(v,{key:0,class:"nav-arrow left",to:n.value.path},null,8,["to"])):O("v-if",!0),i.value?(u(),D(v,{key:1,class:"nav-arrow right",to:i.value.path},null,8,["to"])):O("v-if",!0)])):O("v-if",!0)}}},Vn=P(An,[["__file","PageNav.vue"]]);const xn={class:"page"},Rn=["src"],Tn={class:"page-nav-wrapper"},Pn={key:0,class:"page-edit"},$n={class:"edit-link"},kn=["src"],In=["href"],Cn={__name:"Page",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array,default:()=>[]},isMobileWidth:{type:Boolean}},setup(e,{expose:t}){const{githubEditIcon:s,githubRepository:o,allowGithubEdit:n,githubMainDir:i="",githubBranch:a="master",docsRepo:r=o,editLinkText:d}=I("themeConfig"),c=e,m=Z();Ue();const v=re(),b=T(c.isMobileWidth),f=()=>b.value=!0,g=()=>b.value=!1,y=A(()=>{if(v.value.editLink===!1)return;let S=ne(m.value.path);if(te.test(S)?S+="README.md":S+=".md",r&&n)return x(o,r,i,a,S)}),L=A(()=>d||"Edit this page"),x=(S,k,C,G,Ve)=>/bitbucket.org/.test(S)?(we.test(k)?k:S).replace(te,"")+`/${G}`+(C?"/"+C.replace(te,""):"")+Ve+`?mode=edit&spa=0&at=${G}&fileviewer=file-view-default`:(we.test(k)?k:`https://github.com/${k}`).replace(te,"")+`/tree/${G}`+(C?"/"+C.replace(te,""):"")+Ve;return t({isOpenMobileSidebarMenu:b,closeSidebarDrawer:g}),(S,k)=>{const C=oe("Content");return u(),h("div",xn,[V(S.$slots,"top"),w(Dn,{class:"page-breadcrumb"}),p("img",{onClick:f,class:"page-mobile__sidebar-menu",src:E(q)("/global/sidebar-menu.svg"),alt:"sidebar hamburger menu"},null,8,Rn),p("div",Tn,[w(Vn,{"sidebar-items":e.sidebarItems,allPages:e.allPages},null,8,["sidebar-items","allPages"])]),w(C,{class:"content",custom:!1}),E(n)?(u(),h("div",Pn,[p("div",$n,[p("img",{src:E(q)(E(s)),alt:"icon pen"},null,8,kn),p("a",{href:y.value,target:"_blank",rel:"noopener noreferrer"},R(L.value),9,In)])])):O("v-if",!0),w(En),V(S.$slots,"bottom")])}}},Mn=P(Cn,[["__file","Page.vue"]]);const Bn={class:"theme-container"},Hn={key:0,class:"sidebar-header"},Fn=p("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1),qn={__name:"Layout",setup(e){const{documents:t,MOBILE_BREAKPOINT:s}=I("themeConfig"),o=T(null),n=T(null),i=fe(),a=ve(),r=Z(),d=T([]),c=T(!1),m=A(()=>r.value&&d.value.length?Ye(r.value,a,d.value):[]),v=g=>i.push(g.link),b=()=>{var L;const g=(L=r.value)==null?void 0:L.path,y=g.indexOf("/",g.indexOf("/")+1);return g.substr(0,y)},f=()=>{c.value=window.innerWidth<=s};return J(()=>{Object.values(Oe).map(g=>g().then(y=>{d.value.push(y)})),n.value=t.find(g=>{var y;return(y=g.link)==null?void 0:y.startsWith(b())}),window.addEventListener("resize",f),c.value=window.innerWidth<=s}),ae(()=>{window.removeEventListener("resize",f)}),(g,y)=>{var L,x,S,k,C;return u(),h("div",Bn,[w(st,{closeSidebarDrawer:(L=o.value)==null?void 0:L.closeSidebarDrawer,isMobileWidth:c.value},null,8,["closeSidebarDrawer","isMobileWidth"]),d.value.length&&!((x=o.value)!=null&&x.isOpenMobileSidebarMenu)&&!c.value?(u(),D(et,{key:0,items:d.value,closeSidebarDrawer:(S=o.value)==null?void 0:S.closeSidebarDrawer},{top:N(()=>[E(t)?(u(),h("div",Hn,[Fn,w(tt,{"with-icon":"",modelValue:n.value,"onUpdate:modelValue":y[0]||(y[0]=G=>n.value=G),onChangeSidebarItems:v,options:E(t)},null,8,["modelValue","options"])])):O("v-if",!0)]),_:1},8,["items","closeSidebarDrawer"])):O("v-if",!0),w(Mn,{ref_key:"pageRef",ref:o,sidebarItems:m.value,allPages:d.value,isMobileWidth:c.value},null,8,["sidebarItems","allPages","isMobileWidth"]),d.value.length&&((k=o.value)!=null&&k.isOpenMobileSidebarMenu)&&c.value?(u(),D(po,{key:1,onChangeSidebarItems:v,"all-pages":d.value,documents:E(t),modelValue:n.value,"onUpdate:modelValue":y[1]||(y[1]=G=>n.value=G),closeSidebarDrawer:(C=o.value)==null?void 0:C.closeSidebarDrawer,isMobileWidth:c.value},null,8,["all-pages","documents","modelValue","closeSidebarDrawer","isMobileWidth"])):O("v-if",!0),w(he)])}}},Nn=P(qn,[["__file","Layout.vue"]]);const Wn={class:"docs-card-container"},jn={class:"docs-card-container__header"},Gn=["src"],Un={key:0,class:"docs-card-container__header-paragraph"},zn={class:"docs-card-container__main"},Kn={key:0,class:"docs-card-container__main-paragraph"},Jn={class:"docs-card-container__footer"},Xn={__name:"DocsCard",props:{card:{type:Object,default:null}},setup(e){const t=e,s=fe(),o=()=>{var n;return s.push((n=t.card)==null?void 0:n.link)};return(n,i)=>(u(),h("div",Wn,[p("div",jn,[p("img",{width:"20",height:"20",src:E(q)("collections-bookmark.svg"),alt:"document icon"},null,8,Gn),e.card.title?(u(),h("p",Un,R(e.card.title),1)):O("v-if",!0)]),p("div",zn,[e.card.description?(u(),h("p",Kn,R(e.card.description),1)):O("v-if",!0)]),p("div",Jn,[p("button",{onClick:i[0]||(i[0]=a=>o()),class:"docs-card-container__footer-btn"},"View Documentation")])]))}},Yn=P(Xn,[["__file","DocsCard.vue"]]);const Qn={class:"docs-cards-wrapper"},Zn={__name:"DocsCardsWrapper",setup(e){const{documents:t}=I("themeConfig");return(s,o)=>(u(),h("div",Qn,[(u(!0),h(M,null,H(E(t),(n,i)=>(u(),D(Yn,{key:i,card:n},null,8,["card"]))),128))]))}},ei=P(Zn,[["__file","DocsCardsWrapper.vue"]]),ti={class:"theme-container"},si={__name:"HomeLayout",setup(e){const{MOBILE_BREAKPOINT:t}=I("themeConfig"),s=T(!1),o=()=>s.value=window.innerWidth<=t;return J(()=>{window.addEventListener("resize",o),s.value=window.innerWidth<=t}),ae(()=>window.removeEventListener("resize",o)),(n,i)=>(u(),h("div",ti,[w(st,{isMobileWidth:s.value},null,8,["isMobileWidth"]),w(ei),w(he)]))}},oi=P(si,[["__file","HomeLayout.vue"]]),ge={"/?compatiblity_matrix.html":"/shared/limits/#compatibility-matrix"},ni={class:"custom-container"},ii={__name:"NotFound",setup(e){const t=ve(),s=fe();T([]);function o(a){return a.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}const n=async()=>{if(t.path.startsWith("/index.html?")){const a=t.path.split("?")[1];if(a in ge)return s.push(ge[a]),!0}for(let[a,r]of Object.entries(ge)){const d=o(a);if(t.path.search(d)!==-1){const c=t.path.replace(new RegExp(d,"g"),r);return s.push(c),!0}}return!1},i=(a,r)=>{var c;let d=!1;if(!d&&((c=a.children)==null?void 0:c.length)>0)for(let m of a.children){const v=r+"/"+m.link;if(v.search(t.path)!==-1){s.push(v),d=!0;return}a.children.length>0&&i(m,r)}};return J(async()=>{var r;if(await n())return;const a=Object==null?void 0:Object.values(Oe);for(let d of a){const c=await d();let m=c.path;if(m.at(-1)==="/"&&(m=m.slice(0,-1)),((r=c.headers)==null?void 0:r.length)>0)for(let v of c.headers){const b=m+"/"+v.link;if(b.search(t.path)!==-1){s.push(b);return}i(v,m)}}await n()||(window.location.href="/not-found.html")}),(a,r)=>(u(),h("div",ni))}},ai=P(ii,[["__file","NotFound.vue"]]),li=[{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/"}],ri=[{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"}],ui=[{title:"Introduction to Cloudlinux OS",description:"Introduction to CloudLinux OS editions and their description.",link:"/introduction/"},{title:"CloudLinux OS Shared",description:"CloudLinux OS Shared is designed for shared hosting providers. It isolates each customer into a separate “Lightweight Virtualized Environment” (LVE), which allocates and limits server resources.",link:"/shared/cloudlinux_installation/"},{title:"CloudLinux OS Shared Pro",description:"CloudLinux OS Shared Pro extends your CloudLinux OS Shared functionality with even more useful features.",link:"/shared-pro/introduction/"},{title:"Apache2Nginx (BETA)",description:"Apache2Nginx sets up Nginx hosting with .htaccess support.",link:"/shared/apache2nginx/"},{title:"AccelerateWP",description:"AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.",link:"/shared-pro/accelerate-wp/"},{title:"CLN",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 Solo",description:"CloudLinux OS Solo is designed for VPS or dedicated servers with a single hosting account for any number of websites.",link:"/solo/introduction/"},{title:"CloudLinux OS Admin",description:"CloudLinux OS Admin is designed for shared hosting providers and allows flawless migration of big shared hosting customers to individual VPS with the same CloudLinux features as on shared hosting.",link:"/admin/description"},{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 Shared & Solo.",link:"/user-docs/user-docs-shared-cloudlinux/"}],di=[{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 be(e){return e===0?!1:Array.isArray(e)&&e.length===0?!0:!e}function ci(e){return(...t)=>!e(...t)}function hi(e,t){return e===void 0&&(e="undefined"),e===null&&(e="null"),e===!1&&(e="false"),e.toString().toLowerCase().indexOf(t.trim())!==-1}function ot(e,t,s,o){return t?e.filter(n=>hi(o(n,s),t)).sort((n,i)=>o(n,s).length-o(i,s).length):e}function pi(e){return e.filter(t=>!t.$isLabel)}function ye(e,t){return s=>s.reduce((o,n)=>n[e]&&n[e].length?(o.push({$groupLabel:n[t],$isLabel:!0}),o.concat(n[e])):o,[])}function _i(e,t,s,o,n){return i=>i.map(a=>{if(!a[s])return console.warn("Options passed to vue-multiselect do not contain groups, despite the config."),[];const r=ot(a[s],e,t,n);return r.length?{[o]:a[o],[s]:r}:[]})}const Ce=(...e)=>t=>e.reduce((s,o)=>o(s),t);var mi={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 be(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 s=this.options.concat();return this.internalSearch?s=this.groupValues?this.filterAndFlat(s,t,this.label):ot(s,t,this.label,this.customLabel):s=this.groupValues?ye(this.groupValues,this.groupLabel)(s):s,s=this.hideSelected?s.filter(ci(this.isSelected)):s,this.taggable&&t.length&&!this.isExistingOption(t)&&(this.tagPosition==="bottom"?s.push({isTag:!0,label:e}):s.unshift({isTag:!0,label:e})),s.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,s){return Ce(_i(t,s,this.groupValues,this.groupLabel,this.customLabel),ye(this.groupValues,this.groupLabel))(e)},flatAndStrip(e){return Ce(ye(this.groupValues,this.groupLabel),pi)(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(be(e))return"";if(e.isTag)return e.label;if(e.$isLabel)return e.$groupLabel;const t=this.customLabel(e,this.label);return be(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(s=>s[this.groupLabel]===e.$groupLabel);if(t){if(this.wholeGroupSelected(t)){this.$emit("remove",t[this.groupValues],this.id);const s=this.internalValue.filter(o=>t[this.groupValues].indexOf(o)===-1);this.$emit("update:modelValue",s)}else{let s=t[this.groupValues].filter(o=>!(this.isOptionDisabled(o)||this.isSelected(o)));this.max&&s.splice(this.max-this.internalValue.length),this.$emit("select",s,this.id),this.$emit("update:modelValue",this.internalValue.concat(s))}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 s=typeof e=="object"?this.valueKeys.indexOf(e[this.trackBy]):this.valueKeys.indexOf(e);if(this.multiple){const o=this.internalValue.slice(0,s).concat(this.internalValue.slice(s+1));this.$emit("update:modelValue",o)}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))}}},vi={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 s=this.options.find(o=>o[this.groupLabel]===t.$groupLabel);return s&&!this.wholeGroupDisabled(s)?["multiselect__option--group",{"multiselect__option--highlight":e===this.pointer&&this.showPointer},{"multiselect__option--group-selected":this.wholeGroupSelected(s)}]:"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}}},nt={name:"vue-multiselect",mixins:[mi,vi],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 fi={ref:"tags",class:"multiselect__tags"},gi={class:"multiselect__tags-wrap"},bi={class:"multiselect__spinner"},yi={key:0},Ei={class:"multiselect__option"},wi={class:"multiselect__option"},Li=B("No elements found. Consider changing the search query."),Oi={class:"multiselect__option"},Di=B("List is empty.");function Si(e,t,s,o,n,i){return u(),D("div",{tabindex:e.searchable?-1:s.tabindex,class:[{"multiselect--active":e.isOpen,"multiselect--disabled":s.disabled,"multiselect--above":i.isAbove,"multiselect--has-options-group":i.hasOptionGroup},"multiselect"],onFocus:t[14]||(t[14]=a=>e.activate()),onBlur:t[15]||(t[15]=a=>e.searchable?!1:e.deactivate()),onKeydown:[t[16]||(t[16]=j($(a=>e.pointerForward(),["self","prevent"]),["down"])),t[17]||(t[17]=j($(a=>e.pointerBackward(),["self","prevent"]),["up"]))],onKeypress:t[18]||(t[18]=j($(a=>e.addPointerElement(a),["stop","self"]),["enter","tab"])),onKeyup:t[19]||(t[19]=j(a=>e.deactivate(),["esc"])),role:"combobox","aria-owns":"listbox-"+e.id},[V(e.$slots,"caret",{toggle:e.toggle},()=>[w("div",{onMousedown:t[1]||(t[1]=$(a=>e.toggle(),["prevent","stop"])),class:"multiselect__select"},null,32)]),V(e.$slots,"clear",{search:e.search}),w("div",fi,[V(e.$slots,"selection",{search:e.search,remove:e.removeElement,values:i.visibleValues,isOpen:e.isOpen},()=>[Y(w("div",gi,[(u(!0),D(M,null,H(i.visibleValues,(a,r)=>V(e.$slots,"tag",{option:a,search:e.search,remove:e.removeElement},()=>[(u(),D("span",{class:"multiselect__tag",key:r},[w("span",{textContent:R(e.getOptionLabel(a))},null,8,["textContent"]),w("i",{tabindex:"1",onKeypress:j($(d=>e.removeElement(a),["prevent"]),["enter"]),onMousedown:$(d=>e.removeElement(a),["prevent"]),class:"multiselect__tag-icon"},null,40,["onKeypress","onMousedown"])]))])),256))],512),[[Q,i.visibleValues.length>0]]),e.internalValue&&e.internalValue.length>s.limit?V(e.$slots,"limit",{key:0},()=>[w("strong",{class:"multiselect__strong",textContent:R(s.limitText(e.internalValue.length-s.limit))},null,8,["textContent"])]):O("v-if",!0)]),w(ce,{name:"multiselect__loading"},{default:N(()=>[V(e.$slots,"loading",{},()=>[Y(w("div",bi,null,512),[[Q,s.loading]])])]),_:3}),e.searchable?(u(),D("input",{key:0,ref:"search",name:s.name,id:e.id,type:"text",autocomplete:"off",spellcheck:"false",placeholder:e.placeholder,style:i.inputStyle,value:e.search,disabled:s.disabled,tabindex:s.tabindex,onInput:t[2]||(t[2]=a=>e.updateSearch(a.target.value)),onFocus:t[3]||(t[3]=$(a=>e.activate(),["prevent"])),onBlur:t[4]||(t[4]=$(a=>e.deactivate(),["prevent"])),onKeyup:t[5]||(t[5]=j(a=>e.deactivate(),["esc"])),onKeydown:[t[6]||(t[6]=j($(a=>e.pointerForward(),["prevent"]),["down"])),t[7]||(t[7]=j($(a=>e.pointerBackward(),["prevent"]),["up"])),t[9]||(t[9]=j($(a=>e.removeLastElement(),["stop"]),["delete"]))],onKeypress:t[8]||(t[8]=j($(a=>e.addPointerElement(a),["prevent","stop","self"]),["enter"])),class:"multiselect__input","aria-controls":"listbox-"+e.id},null,44,["name","id","placeholder","value","disabled","tabindex","aria-controls"])):O("v-if",!0),i.isSingleLabelVisible?(u(),D("span",{key:1,class:"multiselect__single",onMousedown:t[10]||(t[10]=$((...a)=>e.toggle&&e.toggle(...a),["prevent"]))},[V(e.$slots,"singleLabel",{option:i.singleValue},()=>[B(R(e.currentOptionLabel),1)])],32)):O("v-if",!0),i.isPlaceholderVisible?(u(),D("span",{key:2,class:"multiselect__placeholder",onMousedown:t[11]||(t[11]=$((...a)=>e.toggle&&e.toggle(...a),["prevent"]))},[V(e.$slots,"placeholder",{},()=>[B(R(e.placeholder),1)])],32)):O("v-if",!0)],512),w(ce,{name:"multiselect"},{default:N(()=>[Y(w("div",{class:"multiselect__content-wrapper",onFocus:t[12]||(t[12]=(...a)=>e.activate&&e.activate(...a)),tabindex:"-1",onMousedown:t[13]||(t[13]=$(()=>{},["prevent"])),style:{maxHeight:e.optimizedHeight+"px"},ref:"list"},[w("ul",{class:"multiselect__content",style:i.contentStyle,role:"listbox",id:"listbox-"+e.id},[V(e.$slots,"beforeList"),e.multiple&&e.max===e.internalValue.length?(u(),D("li",yi,[w("span",Ei,[V(e.$slots,"maxElements",{},()=>[B("Maximum of "+R(e.max)+" options selected. First remove a selected option to select another.",1)])])])):O("v-if",!0),!e.max||e.internalValue.length(u(),D("li",{class:"multiselect__element",key:r,id:e.id+"-"+r,role:a&&(a.$isLabel||a.$isDisabled)?null:"option"},[a&&(a.$isLabel||a.$isDisabled)?O("v-if",!0):(u(),D("span",{key:0,class:[e.optionHighlight(r,a),"multiselect__option"],onClick:$(d=>e.select(a),["stop"]),onMouseenter:$(d=>e.pointerSet(r),["self"]),"data-select":a&&a.isTag?e.tagPlaceholder:i.selectLabelText,"data-selected":i.selectedLabelText,"data-deselect":i.deselectLabelText},[V(e.$slots,"option",{option:a,search:e.search,index:r},()=>[w("span",null,R(e.getOptionLabel(a)),1)])],42,["onClick","onMouseenter","data-select","data-selected","data-deselect"])),a&&(a.$isLabel||a.$isDisabled)?(u(),D("span",{key:1,"data-select":e.groupSelect&&i.selectGroupLabelText,"data-deselect":e.groupSelect&&i.deselectGroupLabelText,class:[e.groupHighlight(r,a),"multiselect__option"],onMouseenter:$(d=>e.groupSelect&&e.pointerSet(r),["self"]),onMousedown:$(d=>e.selectGroup(a),["prevent"])},[V(e.$slots,"option",{option:a,search:e.search,index:r},()=>[w("span",null,R(e.getOptionLabel(a)),1)])],42,["data-select","data-deselect","onMouseenter","onMousedown"])):O("v-if",!0)],8,["id","role"]))),128)):O("v-if",!0),Y(w("li",null,[w("span",wi,[V(e.$slots,"noResult",{search:e.search},()=>[Li])])],512),[[Q,s.showNoResults&&e.filteredOptions.length===0&&e.search&&!s.loading]]),Y(w("li",null,[w("span",Oi,[V(e.$slots,"noOptions",{},()=>[Di])])],512),[[Q,s.showNoOptions&&(e.options.length===0||i.hasOptionGroup===!0&&e.filteredOptions.length===0)&&!e.search&&!s.loading]]),V(e.$slots,"afterList")],12,["id"])],36),[[Q,e.isOpen]])]),_:3})],42,["tabindex","aria-owns"])}nt.render=Si;const Me="/assets/bot-6afebef6.png";const Ai={components:{BotIcon:Me,Multiselect:nt},data(){return{dynamicComponent:null,messages:[],isConnected:!1,waitResponse:!1,botOptions:{botAvatarImg:Me,botTitle:"AI Bot",colorScheme:"#3f83f8",boardContentBg:"#f4f4f4",msgBubbleBgBot:"#fff",msgBubbleBgUser:"#3f83f8",inputPlaceholder:"Ask a new question"},docName:"cloudlinux-documentation",tags:[],options:[{name:"CloudLinux OS 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(){l(()=>import("./vue-bot-ui.common-61a8b46b.js").then(e=>e.v),["assets/vue-bot-ui.common-61a8b46b.js","assets/framework-c44b2977.js"]).then(e=>{this.dynamicComponent=bt(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(s=>s.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}))}}},Vi={id:"bot-ui"},xi={class:"qkb-board-header__title"},Ri={class:"qkb-board-header__select_field"};function Ti(e,t,s,o,n,i){const a=oe("multiselect"),r=oe("ClientOnly");return u(),D(r,null,{default:N(()=>[p("div",Vi,[n.dynamicComponent&&n.isConnected?(u(),D(de(n.dynamicComponent),{key:0,messages:n.messages,options:n.botOptions,"bot-typing":n.waitResponse,"input-disable":n.waitResponse,onMsgSend:i.messageSendHandler,onMsgToServer:i.messageToServer},{header:N(()=>[p("div",xi,R(n.botOptions.botTitle),1),p("div",Ri,[w(a,{modelValue:n.tags,"onUpdate:modelValue":t[0]||(t[0]=d=>n.tags=d),options:n.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"])):O("v-if",!0)])]),_:1})}const Pi=P(Ai,[["render",Ti],["__file","Chat.vue"]]),$i=qt({rootComponents:[Pi],async enhance({app:e}){e.config.globalProperties.$eventBus=Wt()},layouts:{Layout:Nn,HomeLayout:oi,NotFound:ai},setup(){Fe("themeConfig",{cloudlinuxSite:"https://cloudlinux.com",defaultURL:"/",githubBranch:"master",allowGithubEdit:!0,githubMainDir:"docs",githubRepository:"cloudlinux/cloudlinux-documentation",MOBILE_BREAKPOINT:767,documents:ui,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:li,editLinkText:"Edit this page",sidebar:Xe,siteTitle:"Documentation",stayInTouch:"Stay in touch",navbarLinks:ri},productsList:["CloudLinux","Imunify","TuxCare"],productsTitle:"Products",productsURLs:["https://docs.cloudlinux.com","https://docs.imunify360.com","https://docs.tuxcare.com"],social:di,algoliaOptions:{apiKey:"e6b9d79daf71aa98e2e2a51d4556f9d4",indexName:"cloudlinuxos",appId:"0TCNL6CGX8"},MAX_ALGOLIA_VISIBLE_RESULT:20,MAX_ALGOLIA_VISIBLE_ROWS:15,MAX_ALGOLIA_HITS_PER_PAGE:20})}}),ue=[Nt,$i],ki=[["v-8daa1a0e","/",{},["/index.html","/README.md"]],["v-712e14fc","/introduction/",{},["/introduction/index.html","/introduction/README.md"]],["v-74457223","/cln/",{},["/cln/index.html","/cln/README.md"]],["v-3713595e","/shared/",{},["/shared/index.html","/shared/README.md"]],["v-4fa2b6f1","/shared-pro/",{},["/shared-pro/index.html","/shared-pro/README.md"]],["v-257d9eea","/user-docs/",{},["/user-docs/index.html","/user-docs/README.md"]],["v-4ec40180","/admin/components/",{},["/admin/components/index.html","/admin/components/README.md"]],["v-33466da8","/admin/description/",{},["/admin/description/index.html","/admin/description/README.md"]],["v-1321a35c","/admin/faq/",{},["/admin/faq/index.html","/admin/faq/README.md"]],["v-77964adc","/admin/installation/",{},["/admin/installation/index.html","/admin/installation/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-04159818","/shared/alt-ea_packages/",{},["/shared/alt-ea_packages/index.html","/shared/alt-ea_packages/README.md"]],["v-4d221c70","/shared/apache2nginx/",{},["/shared/apache2nginx/index.html","/shared/apache2nginx/README.md"]],["v-0bc575b4","/shared/cloudlinux_installation/",{},["/shared/cloudlinux_installation/index.html","/shared/cloudlinux_installation/README.md"]],["v-2a2b382d","/shared/cloudlinux_os_components/",{},["/shared/cloudlinux_os_components/index.html","/shared/cloudlinux_os_components/README.md"]],["v-7c7edde6","/shared/cloudlinux_os_kernel/",{},["/shared/cloudlinux_os_kernel/index.html","/shared/cloudlinux_os_kernel/README.md"]],["v-16779dec","/shared/command-line_tools/",{},["/shared/command-line_tools/index.html","/shared/command-line_tools/README.md"]],["v-74cd8d69","/shared/control_panel_integration/",{},["/shared/control_panel_integration/index.html","/shared/control_panel_integration/README.md"]],["v-157570eb","/shared/deprecated/",{},["/shared/deprecated/index.html","/shared/deprecated/README.md"]],["v-281849c6","/shared/elevate/",{},["/shared/elevate/index.html","/shared/elevate/README.md"]],["v-4fba1aaa","/shared/faq/",{},["/shared/faq/index.html","/shared/faq/README.md"]],["v-7bb9093e","/shared/features/",{},["/shared/features/index.html","/shared/features/README.md"]],["v-28ef1a8b","/shared/for_cloudlinux_partners/",{},["/shared/for_cloudlinux_partners/index.html","/shared/for_cloudlinux_partners/README.md"]],["v-4a57bc30","/shared/for_cloudlinux_partners/whmcs_saved.html",{},["/shared/for_cloudlinux_partners/whmcs_saved","/shared/for_cloudlinux_partners/whmcs_saved.md"]],["v-3514d6a6","/shared/limits/",{},["/shared/limits/index.html","/shared/limits/README.md"]],["v-241ac397","/shared/lve_manager/",{},["/shared/lve_manager/index.html","/shared/lve_manager/README.md"]],["v-11f342b7","/shared-pro/accelerate-wp/",{},["/shared-pro/accelerate-wp/index.html","/shared-pro/accelerate-wp/README.md"]],["v-26751d8e","/shared-pro/centralized-monitoring/",{},["/shared-pro/centralized-monitoring/index.html","/shared-pro/centralized-monitoring/README.md"]],["v-13868404","/shared-pro/introduction/",{},["/shared-pro/introduction/index.html","/shared-pro/introduction/README.md"]],["v-010e2d7d","/shared-pro/wpos-plugin/",{},["/shared-pro/wpos-plugin/index.html","/shared-pro/wpos-plugin/README.md"]],["v-4f1610aa","/shared-pro/x-ray/",{},["/shared-pro/x-ray/index.html","/shared-pro/x-ray/README.md"]],["v-528d7da2","/solo/activation/",{},["/solo/activation/index.html","/solo/activation/README.md"]],["v-166b4a4c","/solo/administration/",{},["/solo/administration/index.html","/solo/administration/README.md"]],["v-95b487a0","/solo/faq/",{},["/solo/faq/index.html","/solo/faq/README.md"]],["v-309e76be","/solo/installation/",{},["/solo/installation/index.html","/solo/installation/README.md"]],["v-cdb28e44","/solo/introduction/",{},["/solo/introduction/index.html","/solo/introduction/README.md"]],["v-68f2720e","/solo/manager/",{},["/solo/manager/index.html","/solo/manager/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-1d7964ba","/user-docs/user-docs-shared-cloudlinux/",{},["/user-docs/user-docs-shared-cloudlinux/index.html","/user-docs/user-docs-shared-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-c41aa89c","/shared-pro/shared/faq/",{},["/shared-pro/shared/faq/index.html","/shared-pro/shared/faq/README.md"]],["v-13444f59","/shared-pro/shared/features/",{},["/shared-pro/shared/features/index.html","/shared-pro/shared/features/README.md"]],["v-3706649a","/404.html",{},["/404"]]];var Be=me({name:"Vuepress",setup(){const e=kt();return()=>K(e.value)}}),Ii=()=>ki.reduce((e,[t,s,o,n])=>(e.push({name:t,path:s,component:Be,meta:o},...n.map(i=>({path:i,redirect:s}))),e),[{name:"404",path:"/:catchAll(.*)",component:Be}]),Ci=Ot,Mi=()=>{const e=yt({history:Ci(Et("/")),routes:Ii(),scrollBehavior:(t,s,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,s)=>{var o;(t.path!==s.path||s===wt)&&([X.value]=await Promise.all([z.resolvePageData(t.name),(o=qe[t.name])==null?void 0:o.__asyncLoader()]))}),e},Bi=e=>{e.component("ClientOnly",Ht),e.component("Content",Ft)},Hi=(e,t,s)=>{const o=T(t.currentRoute.value.path);ie(()=>t.currentRoute.value.path,b=>o.value=b);const n=A(()=>z.resolveLayouts(s)),i=A(()=>z.resolveRouteLocale(le.value.locales,o.value)),a=A(()=>z.resolveSiteLocaleData(le.value,i.value)),r=A(()=>z.resolvePageFrontmatter(X.value)),d=A(()=>z.resolvePageHeadTitle(X.value,a.value)),c=A(()=>z.resolvePageHead(d.value,r.value,a.value)),m=A(()=>z.resolvePageLang(X.value)),v=A(()=>z.resolvePageLayout(X.value,n.value));return e.provide(Rt,n),e.provide(We,r),e.provide($t,d),e.provide(je,c),e.provide(Ge,m),e.provide(ze,v),e.provide(Ke,i),e.provide(It,a),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>c.value},$headTitle:{get:()=>d.value},$lang:{get:()=>m.value},$page:{get:()=>X.value},$routeLocale:{get:()=>i.value},$site:{get:()=>le.value},$siteLocale:{get:()=>a.value},$withBase:{get:()=>q}}),{layouts:n,pageData:X,pageFrontmatter:r,pageHead:c,pageHeadTitle:d,pageLang:m,pageLayout:v,routeLocale:i,siteData:le,siteLocaleData:a}},Fi=()=>{const e=Pt(),t=Ue(),s=T([]),o=()=>{e.value.forEach(i=>{const a=qi(i);a&&s.value.push(a)})},n=()=>{document.documentElement.lang=t.value,s.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),s.value.splice(0,s.value.length),e.value.forEach(i=>{const a=Ni(i);a!==null&&(document.head.appendChild(a),s.value.push(a))})};Fe(Ct,n),J(()=>{o(),n(),ie(()=>e.value,()=>n())})},qi=([e,t,s=""])=>{const o=Object.entries(t).map(([r,d])=>se(d)?`[${r}=${JSON.stringify(d)}]`:d===!0?`[${r}]`:"").join(""),n=`head > ${e}${o}`;return Array.from(document.querySelectorAll(n)).find(r=>r.innerText===s)||null},Ni=([e,t,s])=>{if(!se(e))return null;const o=document.createElement(e);return St(t)&&Object.entries(t).forEach(([n,i])=>{se(i)?o.setAttribute(n,i):i===!0&&o.setAttribute(n,"")}),se(s)&&o.appendChild(document.createTextNode(s)),o},Wi=Lt,ji=async()=>{var s;const e=Wi({name:"VuepressApp",setup(){var o;Fi();for(const n of ue)(o=n.setup)==null||o.call(n);return()=>[K(Dt),...ue.flatMap(({rootComponents:n=[]})=>n.map(i=>K(i)))]}}),t=Mi();Bi(e),Hi(e,t,ue);for(const o of ue)await((s=o.enhance)==null?void 0:s.call(o,{app:e,router:t,siteData:le}));return e.use(t),{app:e,router:t}};ji().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{ji as createVueApp}; +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,s){return(t||"").toLocaleLowerCase().indexOf(s.toLocaleLowerCase())>-1}},filter:{type:Function,default(e,t){return e.filter(s=>{let o=this.getOptionLabel(s);return typeof o=="number"&&(o=o.toString()),this.filterBy(s,o,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:s,top:o,left:n}){e.style.top=o,e.style.left=n,e.style.width=s}},dropdownShouldOpen:{type:Function,default({noDrop:e,open:t,mutableLoading:s}){return e?!1:t&&!s}},uid:{type:[String,Number],default:()=>Ws()}},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:ee({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:Pe(ee({},e),{deselect:this.deselect}),footer:Pe(ee({},e),{deselect:this.deselect})}},childComponents(){return ee(ee({},$e),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 s=this.createOption(this.search);this.optionExists(s)||t.unshift(s)}return t},isValueEmpty(){return this.selectedValue.length===0},showClearButton(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options(e,t){const s=()=>typeof this.resetOnOptionsChange=="function"?this.resetOnOptionsChange(e,t,this.selectedValue):this.resetOnOptionsChange;!this.taggable&&s()&&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 s=[...this.deselectButtons||[],this.$refs.clearButton];if(this.searchEl===void 0||s.filter(Boolean).some(o=>o.contains(e.target)||o===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=o=>JSON.stringify(this.reduce(o))===JSON.stringify(e),s=[...this.options,...this.pushedTags].filter(t);return s.length===1?s[0]:s.find(o=>this.optionComparator(o,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=n=>(n.preventDefault(),!this.isComposing&&this.typeAheadSelect()),s={8:n=>this.maybeDeleteValue(),9:n=>this.onTab(),27:n=>this.onEscape(),38:n=>(n.preventDefault(),this.typeAheadUp()),40:n=>(n.preventDefault(),this.typeAheadDown())};this.selectOnKeyCodes.forEach(n=>s[n]=t);const o=this.mapKeydown(s,this);if(typeof o[e.keyCode]=="function")return o[e.keyCode](e)}}},Gs=["dir"],Us=["id","aria-expanded","aria-owns"],zs={ref:"selectedOptions",class:"vs__selected-options"},Ks=["disabled","title","aria-label","onClick"],Js={ref:"actions",class:"vs__actions"},Xs=["disabled"],Ys={class:"vs__spinner"},Qs=["id"],Zs=["id","aria-selected","onMouseover","onClick"],eo={key:0,class:"vs__no-options"},to=B(" Sorry, no matching options. "),so=["id"];function oo(e,t,s,o,n,i){const a=pt("append-to-body");return u(),h("div",{dir:s.dir,class:F(["v-select",i.stateClasses])},[V(e.$slots,"header",W(U(i.scope.header))),p("div",{id:`vs${s.uid}__combobox`,ref:"toggle",class:"vs__dropdown-toggle",role:"combobox","aria-expanded":i.dropdownOpen.toString(),"aria-owns":`vs${s.uid}__listbox`,"aria-label":"Search for option",onMousedown:t[1]||(t[1]=r=>i.toggleDropdown(r))},[p("div",zs,[(u(!0),h(M,null,H(i.selectedValue,(r,d)=>V(e.$slots,"selected-option-container",{option:i.normalizeOptionForSlot(r),deselect:i.deselect,multiple:s.multiple,disabled:s.disabled},()=>[(u(),h("span",{key:s.getOptionKey(r),class:"vs__selected"},[V(e.$slots,"selected-option",W(U(i.normalizeOptionForSlot(r))),()=>[B(R(s.getOptionLabel(r)),1)]),s.multiple?(u(),h("button",{key:0,ref_for:!0,ref:c=>n.deselectButtons[d]=c,disabled:s.disabled,type:"button",class:"vs__deselect",title:`Deselect ${s.getOptionLabel(r)}`,"aria-label":`Deselect ${s.getOptionLabel(r)}`,onClick:c=>i.deselect(r)},[(u(),D(de(i.childComponents.Deselect)))],8,Ks)):O("",!0)]))])),256)),V(e.$slots,"search",W(U(i.scope.search)),()=>[p("input",Ee({class:"vs__search"},i.scope.search.attributes,_t(i.scope.search.events)),null,16)])],512),p("div",Js,[Y(p("button",{ref:"clearButton",disabled:s.disabled,type:"button",class:"vs__clear",title:"Clear Selected","aria-label":"Clear Selected",onClick:t[0]||(t[0]=(...r)=>i.clearSelection&&i.clearSelection(...r))},[(u(),D(de(i.childComponents.Deselect)))],8,Xs),[[Q,i.showClearButton]]),V(e.$slots,"open-indicator",W(U(i.scope.openIndicator)),()=>[s.noDrop?O("",!0):(u(),D(de(i.childComponents.OpenIndicator),W(Ee({key:0},i.scope.openIndicator.attributes)),null,16))]),V(e.$slots,"spinner",W(U(i.scope.spinner)),()=>[Y(p("div",Ys,"Loading...",512),[[Q,e.mutableLoading]])])],512)],40,Us),w(ce,{name:s.transition},{default:N(()=>[i.dropdownOpen?Y((u(),h("ul",{id:`vs${s.uid}__listbox`,ref:"dropdownMenu",key:`vs${s.uid}__listbox`,class:"vs__dropdown-menu",role:"listbox",tabindex:"-1",onMousedown:t[2]||(t[2]=$((...r)=>i.onMousedown&&i.onMousedown(...r),["prevent"])),onMouseup:t[3]||(t[3]=(...r)=>i.onMouseUp&&i.onMouseUp(...r))},[V(e.$slots,"list-header",W(U(i.scope.listHeader))),(u(!0),h(M,null,H(i.filteredOptions,(r,d)=>(u(),h("li",{id:`vs${s.uid}__option-${d}`,key:s.getOptionKey(r),role:"option",class:F(["vs__dropdown-option",{"vs__dropdown-option--deselect":i.isOptionDeselectable(r)&&d===e.typeAheadPointer,"vs__dropdown-option--selected":i.isOptionSelected(r),"vs__dropdown-option--highlight":d===e.typeAheadPointer,"vs__dropdown-option--disabled":!s.selectable(r)}]),"aria-selected":d===e.typeAheadPointer?!0:null,onMouseover:c=>s.selectable(r)?e.typeAheadPointer=d:null,onClick:$(c=>s.selectable(r)?i.select(r):null,["prevent","stop"])},[V(e.$slots,"option",W(U(i.normalizeOptionForSlot(r))),()=>[B(R(s.getOptionLabel(r)),1)])],42,Zs))),128)),i.filteredOptions.length===0?(u(),h("li",eo,[V(e.$slots,"no-options",W(U(i.scope.noOptions)),()=>[to])])):O("",!0),V(e.$slots,"list-footer",W(U(i.scope.listFooter)))],40,Qs)),[[a]]):(u(),h("ul",{key:1,id:`vs${s.uid}__listbox`,role:"listbox",style:{display:"none",visibility:"hidden"}},null,8,so))]),_:3},8,["name"]),V(e.$slots,"footer",W(U(i.scope.footer)))],10,Gs)}const no=Ae(js,[["render",oo]]);const io=["src"],ao={key:1},lo={__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:s}=I("themeConfig"),o=t,n=r=>{o("changeSidebarItems",r),o("update:model-value",r)},i=T(),a=()=>{i.value&&(i.value.open=!1)};return J(()=>window.addEventListener("click",r=>{var d;(d=i.value)!=null&&d.$el.contains(r.target)||a()})),ae(()=>window.removeEventListener("click",a)),(r,d)=>(u(),D(E(no),{ref_key:"dropdown",ref:i,"onUpdate:modelValue":n,"model-value":e.modelValue,label:"title",value:"link",clearable:!1,searchable:!1,options:e.options},{"open-indicator":N(({attributes:c})=>[e.withIcon?(u(),h("div",Ee({key:0,class:"select-icon"},c),[p("img",{src:E(q)(E(s)),alt:"search Icon"},null,8,io)],16)):(u(),h("span",ao))]),_:1},8,["model-value","options"]))}},tt=P(lo,[["__file","DSelect.vue"]]),ro={class:"sidebar-drawer__mobile"},uo={class:"sidebar-header"},co=p("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1),ho=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,s)=>(u(),h("div",ro,[w(et,{closeSidebarDrawer:e.closeSidebarDrawer,items:e.allPages,isMobileWidth:e.isMobileWidth},{top:N(()=>[p("div",uo,[co,w(tt,{modelValue:e.modelValue,"onUpdate:modelValue":s[0]||(s[0]=o=>t.$emit("update:model-value",o)),onChangeSidebarItems:s[1]||(s[1]=o=>t.$emit("changeSidebarItems",o)),"with-icon":"",options:e.documents},null,8,["modelValue","options"])])]),_:1},8,["closeSidebarDrawer","items","isMobileWidth"])]))}});const po=P(ho,[["__file","SidebarDrawer.vue"]]);const _o={class:"drawer-tabs__wrapper"},mo=["onClick"],vo={__name:"DrawerTabs",props:{data:{type:Array,required:!0,default:()=>({})},modelValue:{type:Number,default:-1}},emits:["update:modelValue"],setup(e,{emit:t}){const s=t,o=n=>{s("update:modelValue",n)};return(n,i)=>(u(),h("div",_o,[(u(!0),h(M,null,H(e.data,(a,r)=>(u(),h("div",{key:r,onClick:d=>o(r),class:F([{"drawer-tab__active":e.modelValue===r},"drawer-tab"])},[p("div",{class:F(["drawer-tab__text",{"drawer-tab__text__active":e.modelValue===r}])},R(a.title)+" ("+R(a==null?void 0:a.numberResults)+") ",3)],10,mo))),128))]))}},fo=P(vo,[["__scopeId","data-v-c60e280a"],["__file","DrawerTabs.vue"]]);const go={key:0,class:"drawer-main__search-results"},bo=["onClick"],yo=["innerHTML"],Eo=["innerHTML"],wo=["innerHTML"],Lo={key:1},Oo={class:"hidden_results__text"},Do=p("p",{class:"hidden_results__text"},"Collapse results",-1),So=[Do],Ao={key:2},Vo={key:0,class:"no_results"},xo={key:1,class:"no_results"},Ro={key:0},To=p("br",null,null,-1),Po=p("a",{class:"no_results__link",href:" https://forum.cloudlinux.com/",target:"_blank"},"https://forum.cloudlinux.com/",-1),$o={__name:"DrawerSearchResult",props:{data:{type:[Array,Object],required:!0},modelValue:{type:String,required:!0}},setup(e){mt(b=>({aa1be2ec:E(o)}));const t=e,{MAX_ALGOLIA_VISIBLE_RESULT:s,MAX_ALGOLIA_VISIBLE_ROWS:o}=I("themeConfig"),n=T(!1),i=b=>{window.location.href=b},a=A(()=>{var b;return n.value?t.data:(b=t.data)==null?void 0:b.slice(0,s)}),r=A(()=>t.data.length-a.value.length),d=()=>{n.value=!0},c=()=>{n.value=!1},m=b=>{var f,g;for(const y in b)if(b[y].value!==null||b[y].value!==void 0)return((f=b.lvl1)==null?void 0:f.value)||((g=b.lvl0)==null?void 0:g.value);return null},v=b=>Object.values(b).slice(2).filter(Boolean).map(f=>f.value).join(" > ");return(b,f)=>(u(),h(M,null,[e.data.length?(u(),h("section",go,[(u(!0),h(M,null,H(a.value,g=>{var y,L,x,S;return u(),h("div",{key:g,class:"search-result",onClick:k=>i((g==null?void 0:g.url)||"/")},[p("div",{class:"search-result__title",innerHTML:m((y=g._highlightResult)==null?void 0:y.hierarchy)},null,8,yo),p("div",{class:"search-result__breadcrumb",innerHTML:v((L=g._highlightResult)==null?void 0:L.hierarchy)},null,8,Eo),p("div",{class:"search-result__text",innerHTML:(S=(x=g._highlightResult)==null?void 0:x.content)==null?void 0:S.value},null,8,wo)],8,bo)}),128))])):O("v-if",!0),e.data.length?(u(),h("div",Lo,[r.value?(u(),h("div",{key:0,class:"hidden_results",onClick:d},[p("p",Oo,"Show all results("+R(r.value)+")",1)])):!r.value&&n.value?(u(),h("div",{key:1,class:"hidden_results",onClick:c},So)):O("v-if",!0)])):(u(),h("div",Ao,[e.modelValue.length?(u(),h("p",xo,[B(" Sorry! No results found for "),e.modelValue?(u(),h("span",Ro,'"'+R(e.modelValue)+'"',1)):O("v-if",!0),B(" 😞"),To,B("Please try ask the community (link to the "),Po,B("). ")])):(u(),h("p",Vo,"What are you searching for?"))]))],64))}},ko=P($o,[["__file","DrawerSearchResult.vue"]]);const Io={class:"drawer-header"},Co=p("div",{class:"drawer-header__wrapper"},[p("h2",{class:"drawer-header__paragraph"},"How can we help you?"),p("div",{id:"drawerSearch"})],-1),Mo={class:"drawer-cross"},Bo=["src"],Ho={class:"drawer-main"},Fo={class:"drawer-main__wrapper"},qo={class:"drawer-main__breadcrumb"},No={key:0,class:"drawer-main__breadcrumb__text"},Wo=["src"],jo={__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 s=e,o=t,n=T(0),i=A(()=>{const d=s.homeLayoutSearchResult.reduce((c,m)=>{var b;const v=(b=m.hierarchy)==null?void 0:b.lvl0;return c[v]=c[v]||{title:v,numberResults:0},c[v].numberResults++,c},{});return Object.values(d)}),a=A(()=>{if(n.value===-1)return s.homeLayoutSearchResult||[];const d=i.value[n.value];return s.homeLayoutSearchResult.filter(c=>c.hierarchy.lvl0===(d==null?void 0:d.title))}),r=()=>{o("closeDrawer"),n.value=0};return ie(()=>s.isOpenDrawer,()=>{document.body.classList.toggle("disable-scroll",s.isOpenDrawer)}),(d,c)=>(u(),h("div",null,[p("div",{class:F(["drawer",{"is-open":e.isOpenDrawer}])},[p("div",Io,[Co,p("div",Mo,[p("img",{onClick:r,class:"drawer-cross__img",src:E(q)("/global/cross.svg"),alt:"cross"},null,8,Bo),p("p",{onClick:r,class:"drawer-cross__text"},"close")])]),w(fo,{modelValue:n.value,"onUpdate:modelValue":c[0]||(c[0]=m=>n.value=m),data:i.value},null,8,["modelValue","data"]),p("main",null,[p("div",Ho,[p("div",Fo,[p("div",qo,[a.value.length?(u(),h("p",No,[B("Home "),p("img",{src:E(q)("/arrows/arrow-right-breadcrumb.svg"),alt:"breadcrumb icon"},null,8,Wo),B(" Documentation ")])):O("v-if",!0)]),w(ko,{modelValue:e.modelValue,data:a.value},null,8,["modelValue","data"])])]),e.isOpenDrawer&&e.isMobileWidth?(u(),D(he,{key:0,class:"drawer-footer__mobile"})):O("v-if",!0)])],2),e.isOpenDrawer&&!e.isMobileWidth?(u(),D(he,{key:0,class:"drawer-footer"})):O("v-if",!0)]))}},Go=P(jo,[["__file","Drawer.vue"]]);const Uo={id:"search-form",class:"drawer-header__input"},zo=["value","placeholder"],Ko=["src"],Jo={__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_ALGOLIA_HITS_PER_PAGE:s}=I("themeConfig"),{headerDefaultSearchIcon:o,headerSearchIcon:n,headerSearchPlaceholder:i}=I("themeConfig"),a=e,r=t,d=re(),c=A(()=>d.value.layout==="HomeLayout"),m=A(()=>a.isOpenDrawer?"drawer-header__search":c.value?"header-layout__search":"header-layout__search-default"),v=A(()=>a.isOpenDrawer?"drawer-header__search-icon":c.value?"header-layout__search-icon":"header-layout__search-icon-default"),b=A(()=>c.value||a.isOpenDrawer?n:o),f=A(()=>a.isOpenDrawer?"Search":c.value?i:"Search"),g=A(()=>a.isMobileWidth?"Search accross all Imunify Security support":f.value),y=async L=>{if(typeof window>"u")return;const[x]=await Promise.all([l(()=>import("./docsearch.min-3955f288.js").then(k=>k.d),["assets/docsearch.min-3955f288.js","assets/framework-c44b2977.js"]),l(()=>import("./docsearch.min-49eb4b49.js"),[])]),S=x.default;S(Object.assign({},L,{inputSelector:"#algolia-search-input",algoliaOptions:{hitsPerPage:s},handleSelected:()=>{r("openDrawer")},transformData:k=>{r("result",k)}}))};return ie(()=>a.options,async L=>{await y(L)},{immediate:!0}),(L,x)=>(u(),h("form",Uo,[p("input",{value:e.modelValue,onInput:x[0]||(x[0]=S=>L.$emit("update:modelValue",S.target.value)),id:"algolia-search-input",placeholder:g.value,class:F(m.value),onKeypress:x[1]||(x[1]=j($(S=>L.$emit("openDrawer"),["prevent"]),["enter"]))},null,42,zo),p("div",{class:F(v.value)},[p("img",{onClick:x[2]||(x[2]=S=>L.$emit("openDrawer")),alt:"search icon",src:E(q)(b.value)},null,8,Ko)],2)]))}},ke=P(Jo,[["__file","DrawerSearch.vue"]]);const Xo={class:"header-layout__search-container"},Yo={key:0,class:"header-layout__search-title"},Qo={__name:"HeaderLayoutSearch",props:{isMobileWidth:{type:Boolean,default:!1},closeSidebarDrawer:{type:Function}},setup(e,{expose:t}){const s=e,{headerSearch:o,algoliaOptions:n}=I("themeConfig"),i=re(),a=T(!1),r=T(!1),d=T(""),c=T([]);ie(()=>d.value,()=>{d.value||(c.value=[])});const m=g=>{c.value=g},v=A(()=>i.value.layout==="HomeLayout"),b=()=>{a.value=!0,r.value=!0,s.closeSidebarDrawer&&s.closeSidebarDrawer()},f=()=>{c.value.length=0,d.value="",a.value=!1,r.value=!1};return t({openDrawer:b,closeDrawer:f,mobileDrawerVisible:r}),(g,y)=>(u(),h("div",Xo,[v.value?(u(),h("h1",Yo,R(E(o)),1)):O("v-if",!0),a.value?(u(),D(He,{key:1,to:"#drawerSearch"},[w(ke,{options:E(n),modelValue:d.value,"onUpdate:modelValue":y[0]||(y[0]=L=>d.value=L),isMobileWidth:e.isMobileWidth,onOpenDrawer:b,isOpenDrawer:a.value,onResult:m},null,8,["options","modelValue","isMobileWidth","isOpenDrawer"])])):(u(),D(ke,{key:2,isMobileWidth:e.isMobileWidth,options:E(n),modelValue:d.value,"onUpdate:modelValue":y[1]||(y[1]=L=>d.value=L),onOpenDrawer:b,isOpenDrawer:a.value,onResult:m},null,8,["isMobileWidth","options","modelValue","isOpenDrawer"])),w(Go,{homeLayoutSearchResult:c.value,modelValue:d.value,"onUpdate:modelValue":y[2]||(y[2]=L=>d.value=L),onCloseDrawer:f,isOpenDrawer:a.value,isMobileWidth:e.isMobileWidth},null,8,["homeLayoutSearchResult","modelValue","isOpenDrawer","isMobileWidth"])]))}},Ie=P(Qo,[["__file","HeaderLayoutSearch.vue"]]);const Zo={class:"header-products-wrapper"},en={key:0,class:"dropdown-wrapper"},tn=["href"],sn={key:1,class:"dropdown-wrapper"},on=["href"],nn=["src"],an={class:"header-products-wrapper-paragraph"},ln=["src"],rn={__name:"HeaderProducts",props:{isMobileWidth:{type:Boolean}},setup(e){const{productsTitle:t,arrowDownIcon:s,productsList:o,productsURLs:n}=I("themeConfig"),i=T(!1),a=T(null),r=d=>{!d.composedPath().includes(a.value)&&(i.value=!1)};return J(()=>{document.addEventListener("click",r)}),ae(()=>{document.removeEventListener("click",r)}),(d,c)=>(u(),h("div",Zo,[p("div",{ref_key:"menu",ref:a,class:"dropdown"},[e.isMobileWidth?(u(),D(He,{key:0,to:"body"},[i.value?(u(),h("div",en,[(u(!0),h(M,null,H(E(o),(m,v)=>(u(),h("p",{class:"dropdown-content__paragraph",key:m},[p("a",{class:"dropdown-content__link",href:E(n)[v]},R(m),9,tn)]))),128))])):O("v-if",!0)])):O("v-if",!0),i.value&&!e.isMobileWidth?(u(),h("div",sn,[(u(!0),h(M,null,H(E(o),(m,v)=>(u(),h("p",{class:"dropdown-content__paragraph",key:m},[p("a",{class:"dropdown-content__link",href:E(n)[v]},R(m),9,on)]))),128))])):O("v-if",!0),p("div",{onClick:c[0]||(c[0]=m=>i.value=!i.value),class:"header-products-container"},[p("img",{class:"header-products-container__img",alt:"hamburger menu",src:E(q)("/global/hamburger-menu.svg")},null,8,nn),p("p",an,R(E(t)),1),p("img",{class:F(["products-icon__default",{"products-icon__rotate":i.value}]),width:"10",height:"8",src:E(q)(E(s)),alt:"arrow down icon"},null,10,ln)])],512)]))}},un=P(rn,[["__file","HeaderProducts.vue"]]);const dn={class:"navbar-header"},cn={class:"navbar-header__logo-wrapper"},hn=["src"],pn=["src"],_n=["href","onClick"],mn={__name:"HeaderLayout",props:{isMobileWidth:{type:Boolean},closeSidebarDrawer:{type:Function}},setup(e){const{siteLogo:t,defaultURL:s,locales:o,headerDefaultSearchIcon:n}=I("themeConfig"),i=T(null),a=re(),r=Je(),d=T(null),c=()=>{var f;return(f=d==null?void 0:d.value)==null?void 0:f.openDrawer()},m=A(()=>a.value.layout==="HomeLayout"),v=A(()=>(r.value+s).replace(/\/+/g,"/")),b=f=>{if(f.type)switch(f.type){case"event":var f=new CustomEvent(f.name);document.dispatchEvent(f)}};return(f,g)=>{var L;const y=oe("router-link");return u(),h("header",{class:F(["navbar",{fixed:!m.value}])},[p("div",dn,[p("div",cn,[w(y,{to:v.value,class:"home-link"},{default:N(()=>[E(t)?(u(),h("img",{key:0,class:"logo",src:E(q)(E(t)),alt:"logo header"},null,8,hn)):O("v-if",!0)]),_:1},8,["to"]),m.value?O("v-if",!0):(u(),D(Ie,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:d,class:F({"header-mobile__hidden":!((L=d.value)!=null&&L.mobileDrawerVisible)}),isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","class","isMobileWidth"]))]),p("div",{class:"links",style:vt({"max-width":i.value+"px"})},[p("img",{onClick:c,class:"navbar-header__mobile-search",src:E(q)(E(n)),alt:"icon image"},null,8,pn),w(un,{isMobileWidth:e.isMobileWidth},null,8,["isMobileWidth"]),(u(!0),h(M,null,H(E(o).navbarLinks,x=>(u(),h("a",{href:x.url,target:"_blank",class:F(x.class),onClick:S=>b(x.event)},R(x.text),11,_n))),256))],4)]),m.value?(u(),D(Ie,{key:0,closeSidebarDrawer:e.closeSidebarDrawer,ref_key:"headerLayoutSearch",ref:d,isMobileWidth:e.isMobileWidth},null,8,["closeSidebarDrawer","isMobileWidth"])):O("v-if",!0)],2)}}},st=P(mn,[["__file","HeaderLayout.vue"]]);const vn=e=>(ft("data-v-1eb13e00"),e=e(),gt(),e),fn={class:"back-to-top"},gn=vn(()=>p("span",{class:"back-to-top__link-span"},"Scroll up",-1)),bn=[gn],yn={__name:"BackToTop",props:{boundary:{type:Number,default:200}},setup(e){const t=e,s=T(!1),o=()=>{window&&(s.value=window.pageYOffset>t.boundary)},n=()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0};return J(()=>{window&&(o(),window.addEventListener("scroll",o))}),ae(()=>{window&&window.removeEventListener("scroll",o)}),(i,a)=>(u(),h("div",fn,[p("a",{class:F([{active:s.value},"nav-arrow top back-to-top__link"]),onClick:n},bn,2)]))}},En=P(yn,[["__scopeId","data-v-1eb13e00"],["__file","BackToTop.vue"]]);const wn={class:"breadcrumb-wrapper"},Ln={class:"breadcrumb-title"},On={__name:"Breadcrumb",setup(e){const t=Z(),{locales:{siteTitle:s}}=I("themeConfig"),o=A(()=>{const n=[];return t.value.path!=="/"&&n.push({path:t.value.path,title:t.value.title}),n});return(n,i)=>{const a=oe("router-link");return u(),h("div",wn,[p("span",Ln,R(E(s))+":",1),(u(!0),h(M,null,H(o.value,r=>(u(),D(a,{class:"breadcrumb",key:r.path,to:r.path},{default:N(()=>[B(R(r.title),1)]),_:2},1032,["to"]))),128))])}}},Dn=P(On,[["__scopeId","data-v-9445381a"],["__file","Breadcrumb.vue"]]);const Sn={key:0,class:"page-nav"},An={__name:"PageNav",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array}},setup(e){const t=e,s=Je(),o=Z(),n=A(()=>{const c=o.value.frontmatter.prev;return c===!1?null:c?_e(t.allPages,c,s):a(o.value,t.sidebarItems)}),i=A(()=>{const c=o.value.frontmatter.next;return c===!1?null:c?_e(t.allPages,c,s):r(o.value,t.sidebarItems)}),a=(c,m)=>d(c,m,-1),r=(c,m)=>d(c,m,1),d=(c,m,v)=>{const b=[];m.forEach(f=>{f.type==="group"?b.push(...f.children||[]):b.push(f)});for(let f=0;f{const v=oe("router-link");return n.value||i.value?(u(),h("div",Sn,[n.value?(u(),D(v,{key:0,class:"nav-arrow left",to:n.value.path},null,8,["to"])):O("v-if",!0),i.value?(u(),D(v,{key:1,class:"nav-arrow right",to:i.value.path},null,8,["to"])):O("v-if",!0)])):O("v-if",!0)}}},Vn=P(An,[["__file","PageNav.vue"]]);const xn={class:"page"},Rn=["src"],Tn={class:"page-nav-wrapper"},Pn={key:0,class:"page-edit"},$n={class:"edit-link"},kn=["src"],In=["href"],Cn={__name:"Page",props:{sidebarItems:{type:Array,default:()=>[]},allPages:{type:Array,default:()=>[]},isMobileWidth:{type:Boolean}},setup(e,{expose:t}){const{githubEditIcon:s,githubRepository:o,allowGithubEdit:n,githubMainDir:i="",githubBranch:a="master",docsRepo:r=o,editLinkText:d}=I("themeConfig"),c=e,m=Z();Ue();const v=re(),b=T(c.isMobileWidth),f=()=>b.value=!0,g=()=>b.value=!1,y=A(()=>{if(v.value.editLink===!1)return;let S=ne(m.value.path);if(te.test(S)?S+="README.md":S+=".md",r&&n)return x(o,r,i,a,S)}),L=A(()=>d||"Edit this page"),x=(S,k,C,G,Ve)=>/bitbucket.org/.test(S)?(we.test(k)?k:S).replace(te,"")+`/${G}`+(C?"/"+C.replace(te,""):"")+Ve+`?mode=edit&spa=0&at=${G}&fileviewer=file-view-default`:(we.test(k)?k:`https://github.com/${k}`).replace(te,"")+`/tree/${G}`+(C?"/"+C.replace(te,""):"")+Ve;return t({isOpenMobileSidebarMenu:b,closeSidebarDrawer:g}),(S,k)=>{const C=oe("Content");return u(),h("div",xn,[V(S.$slots,"top"),w(Dn,{class:"page-breadcrumb"}),p("img",{onClick:f,class:"page-mobile__sidebar-menu",src:E(q)("/global/sidebar-menu.svg"),alt:"sidebar hamburger menu"},null,8,Rn),p("div",Tn,[w(Vn,{"sidebar-items":e.sidebarItems,allPages:e.allPages},null,8,["sidebar-items","allPages"])]),w(C,{class:"content",custom:!1}),E(n)?(u(),h("div",Pn,[p("div",$n,[p("img",{src:E(q)(E(s)),alt:"icon pen"},null,8,kn),p("a",{href:y.value,target:"_blank",rel:"noopener noreferrer"},R(L.value),9,In)])])):O("v-if",!0),w(En),V(S.$slots,"bottom")])}}},Mn=P(Cn,[["__file","Page.vue"]]);const Bn={class:"theme-container"},Hn={key:0,class:"sidebar-header"},Fn=p("p",{class:"sidebar-header__paragraph"},"Select CL docs",-1),qn={__name:"Layout",setup(e){const{documents:t,MOBILE_BREAKPOINT:s}=I("themeConfig"),o=T(null),n=T(null),i=fe(),a=ve(),r=Z(),d=T([]),c=T(!1),m=A(()=>r.value&&d.value.length?Ye(r.value,a,d.value):[]),v=g=>i.push(g.link),b=()=>{var L;const g=(L=r.value)==null?void 0:L.path,y=g.indexOf("/",g.indexOf("/")+1);return g.substr(0,y)},f=()=>{c.value=window.innerWidth<=s};return J(()=>{Object.values(Oe).map(g=>g().then(y=>{d.value.push(y)})),n.value=t.find(g=>{var y;return(y=g.link)==null?void 0:y.startsWith(b())}),window.addEventListener("resize",f),c.value=window.innerWidth<=s}),ae(()=>{window.removeEventListener("resize",f)}),(g,y)=>{var L,x,S,k,C;return u(),h("div",Bn,[w(st,{closeSidebarDrawer:(L=o.value)==null?void 0:L.closeSidebarDrawer,isMobileWidth:c.value},null,8,["closeSidebarDrawer","isMobileWidth"]),d.value.length&&!((x=o.value)!=null&&x.isOpenMobileSidebarMenu)&&!c.value?(u(),D(et,{key:0,items:d.value,closeSidebarDrawer:(S=o.value)==null?void 0:S.closeSidebarDrawer},{top:N(()=>[E(t)?(u(),h("div",Hn,[Fn,w(tt,{"with-icon":"",modelValue:n.value,"onUpdate:modelValue":y[0]||(y[0]=G=>n.value=G),onChangeSidebarItems:v,options:E(t)},null,8,["modelValue","options"])])):O("v-if",!0)]),_:1},8,["items","closeSidebarDrawer"])):O("v-if",!0),w(Mn,{ref_key:"pageRef",ref:o,sidebarItems:m.value,allPages:d.value,isMobileWidth:c.value},null,8,["sidebarItems","allPages","isMobileWidth"]),d.value.length&&((k=o.value)!=null&&k.isOpenMobileSidebarMenu)&&c.value?(u(),D(po,{key:1,onChangeSidebarItems:v,"all-pages":d.value,documents:E(t),modelValue:n.value,"onUpdate:modelValue":y[1]||(y[1]=G=>n.value=G),closeSidebarDrawer:(C=o.value)==null?void 0:C.closeSidebarDrawer,isMobileWidth:c.value},null,8,["all-pages","documents","modelValue","closeSidebarDrawer","isMobileWidth"])):O("v-if",!0),w(he)])}}},Nn=P(qn,[["__file","Layout.vue"]]);const Wn={class:"docs-card-container"},jn={class:"docs-card-container__header"},Gn=["src"],Un={key:0,class:"docs-card-container__header-paragraph"},zn={class:"docs-card-container__main"},Kn={key:0,class:"docs-card-container__main-paragraph"},Jn={class:"docs-card-container__footer"},Xn={__name:"DocsCard",props:{card:{type:Object,default:null}},setup(e){const t=e,s=fe(),o=()=>{var n;return s.push((n=t.card)==null?void 0:n.link)};return(n,i)=>(u(),h("div",Wn,[p("div",jn,[p("img",{width:"20",height:"20",src:E(q)("collections-bookmark.svg"),alt:"document icon"},null,8,Gn),e.card.title?(u(),h("p",Un,R(e.card.title),1)):O("v-if",!0)]),p("div",zn,[e.card.description?(u(),h("p",Kn,R(e.card.description),1)):O("v-if",!0)]),p("div",Jn,[p("button",{onClick:i[0]||(i[0]=a=>o()),class:"docs-card-container__footer-btn"},"View Documentation")])]))}},Yn=P(Xn,[["__file","DocsCard.vue"]]);const Qn={class:"docs-cards-wrapper"},Zn={__name:"DocsCardsWrapper",setup(e){const{documents:t}=I("themeConfig");return(s,o)=>(u(),h("div",Qn,[(u(!0),h(M,null,H(E(t),(n,i)=>(u(),D(Yn,{key:i,card:n},null,8,["card"]))),128))]))}},ei=P(Zn,[["__file","DocsCardsWrapper.vue"]]),ti={class:"theme-container"},si={__name:"HomeLayout",setup(e){const{MOBILE_BREAKPOINT:t}=I("themeConfig"),s=T(!1),o=()=>s.value=window.innerWidth<=t;return J(()=>{window.addEventListener("resize",o),s.value=window.innerWidth<=t}),ae(()=>window.removeEventListener("resize",o)),(n,i)=>(u(),h("div",ti,[w(st,{isMobileWidth:s.value},null,8,["isMobileWidth"]),w(ei),w(he)]))}},oi=P(si,[["__file","HomeLayout.vue"]]),ge={"/?compatiblity_matrix.html":"/shared/limits/#compatibility-matrix"},ni={class:"custom-container"},ii={__name:"NotFound",setup(e){const t=ve(),s=fe();T([]);function o(a){return a.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}const n=async()=>{if(t.path.startsWith("/index.html?")){const a=t.path.split("?")[1];if(a in ge)return s.push(ge[a]),!0}for(let[a,r]of Object.entries(ge)){const d=o(a);if(t.path.search(d)!==-1){const c=t.path.replace(new RegExp(d,"g"),r);return s.push(c),!0}}return!1},i=(a,r)=>{var c;let d=!1;if(!d&&((c=a.children)==null?void 0:c.length)>0)for(let m of a.children){const v=r+"/"+m.link;if(v.search(t.path)!==-1){s.push(v),d=!0;return}a.children.length>0&&i(m,r)}};return J(async()=>{var r;if(await n())return;const a=Object==null?void 0:Object.values(Oe);for(let d of a){const c=await d();let m=c.path;if(m.at(-1)==="/"&&(m=m.slice(0,-1)),((r=c.headers)==null?void 0:r.length)>0)for(let v of c.headers){const b=m+"/"+v.link;if(b.search(t.path)!==-1){s.push(b);return}i(v,m)}}await n()||(window.location.href="/not-found.html")}),(a,r)=>(u(),h("div",ni))}},ai=P(ii,[["__file","NotFound.vue"]]),li=[{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/"}],ri=[{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"}],ui=[{title:"Introduction to Cloudlinux OS",description:"Introduction to CloudLinux OS editions and their description.",link:"/introduction/"},{title:"CloudLinux OS Shared",description:"CloudLinux OS Shared is designed for shared hosting providers. It isolates each customer into a separate “Lightweight Virtualized Environment” (LVE), which allocates and limits server resources.",link:"/shared/cloudlinux_installation/"},{title:"CloudLinux OS Shared Pro",description:"CloudLinux OS Shared Pro extends your CloudLinux OS Shared functionality with even more useful features.",link:"/shared-pro/introduction/"},{title:"Apache2Nginx (BETA)",description:"Apache2Nginx sets up Nginx hosting with .htaccess support.",link:"/shared/apache2nginx/"},{title:"AccelerateWP",description:"AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.",link:"/shared-pro/accelerate-wp/"},{title:"CLN",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 Solo",description:"CloudLinux OS Solo is designed for VPS or dedicated servers with a single hosting account for any number of websites.",link:"/solo/introduction/"},{title:"CloudLinux OS Admin",description:"CloudLinux OS Admin is designed for shared hosting providers and allows flawless migration of big shared hosting customers to individual VPS with the same CloudLinux features as on shared hosting.",link:"/admin/description"},{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 Shared & Solo.",link:"/user-docs/user-docs-shared-cloudlinux/"}],di=[{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 be(e){return e===0?!1:Array.isArray(e)&&e.length===0?!0:!e}function ci(e){return(...t)=>!e(...t)}function hi(e,t){return e===void 0&&(e="undefined"),e===null&&(e="null"),e===!1&&(e="false"),e.toString().toLowerCase().indexOf(t.trim())!==-1}function ot(e,t,s,o){return t?e.filter(n=>hi(o(n,s),t)).sort((n,i)=>o(n,s).length-o(i,s).length):e}function pi(e){return e.filter(t=>!t.$isLabel)}function ye(e,t){return s=>s.reduce((o,n)=>n[e]&&n[e].length?(o.push({$groupLabel:n[t],$isLabel:!0}),o.concat(n[e])):o,[])}function _i(e,t,s,o,n){return i=>i.map(a=>{if(!a[s])return console.warn("Options passed to vue-multiselect do not contain groups, despite the config."),[];const r=ot(a[s],e,t,n);return r.length?{[o]:a[o],[s]:r}:[]})}const Ce=(...e)=>t=>e.reduce((s,o)=>o(s),t);var mi={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 be(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 s=this.options.concat();return this.internalSearch?s=this.groupValues?this.filterAndFlat(s,t,this.label):ot(s,t,this.label,this.customLabel):s=this.groupValues?ye(this.groupValues,this.groupLabel)(s):s,s=this.hideSelected?s.filter(ci(this.isSelected)):s,this.taggable&&t.length&&!this.isExistingOption(t)&&(this.tagPosition==="bottom"?s.push({isTag:!0,label:e}):s.unshift({isTag:!0,label:e})),s.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,s){return Ce(_i(t,s,this.groupValues,this.groupLabel,this.customLabel),ye(this.groupValues,this.groupLabel))(e)},flatAndStrip(e){return Ce(ye(this.groupValues,this.groupLabel),pi)(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(be(e))return"";if(e.isTag)return e.label;if(e.$isLabel)return e.$groupLabel;const t=this.customLabel(e,this.label);return be(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(s=>s[this.groupLabel]===e.$groupLabel);if(t){if(this.wholeGroupSelected(t)){this.$emit("remove",t[this.groupValues],this.id);const s=this.internalValue.filter(o=>t[this.groupValues].indexOf(o)===-1);this.$emit("update:modelValue",s)}else{let s=t[this.groupValues].filter(o=>!(this.isOptionDisabled(o)||this.isSelected(o)));this.max&&s.splice(this.max-this.internalValue.length),this.$emit("select",s,this.id),this.$emit("update:modelValue",this.internalValue.concat(s))}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 s=typeof e=="object"?this.valueKeys.indexOf(e[this.trackBy]):this.valueKeys.indexOf(e);if(this.multiple){const o=this.internalValue.slice(0,s).concat(this.internalValue.slice(s+1));this.$emit("update:modelValue",o)}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))}}},vi={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 s=this.options.find(o=>o[this.groupLabel]===t.$groupLabel);return s&&!this.wholeGroupDisabled(s)?["multiselect__option--group",{"multiselect__option--highlight":e===this.pointer&&this.showPointer},{"multiselect__option--group-selected":this.wholeGroupSelected(s)}]:"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}}},nt={name:"vue-multiselect",mixins:[mi,vi],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 fi={ref:"tags",class:"multiselect__tags"},gi={class:"multiselect__tags-wrap"},bi={class:"multiselect__spinner"},yi={key:0},Ei={class:"multiselect__option"},wi={class:"multiselect__option"},Li=B("No elements found. Consider changing the search query."),Oi={class:"multiselect__option"},Di=B("List is empty.");function Si(e,t,s,o,n,i){return u(),D("div",{tabindex:e.searchable?-1:s.tabindex,class:[{"multiselect--active":e.isOpen,"multiselect--disabled":s.disabled,"multiselect--above":i.isAbove,"multiselect--has-options-group":i.hasOptionGroup},"multiselect"],onFocus:t[14]||(t[14]=a=>e.activate()),onBlur:t[15]||(t[15]=a=>e.searchable?!1:e.deactivate()),onKeydown:[t[16]||(t[16]=j($(a=>e.pointerForward(),["self","prevent"]),["down"])),t[17]||(t[17]=j($(a=>e.pointerBackward(),["self","prevent"]),["up"]))],onKeypress:t[18]||(t[18]=j($(a=>e.addPointerElement(a),["stop","self"]),["enter","tab"])),onKeyup:t[19]||(t[19]=j(a=>e.deactivate(),["esc"])),role:"combobox","aria-owns":"listbox-"+e.id},[V(e.$slots,"caret",{toggle:e.toggle},()=>[w("div",{onMousedown:t[1]||(t[1]=$(a=>e.toggle(),["prevent","stop"])),class:"multiselect__select"},null,32)]),V(e.$slots,"clear",{search:e.search}),w("div",fi,[V(e.$slots,"selection",{search:e.search,remove:e.removeElement,values:i.visibleValues,isOpen:e.isOpen},()=>[Y(w("div",gi,[(u(!0),D(M,null,H(i.visibleValues,(a,r)=>V(e.$slots,"tag",{option:a,search:e.search,remove:e.removeElement},()=>[(u(),D("span",{class:"multiselect__tag",key:r},[w("span",{textContent:R(e.getOptionLabel(a))},null,8,["textContent"]),w("i",{tabindex:"1",onKeypress:j($(d=>e.removeElement(a),["prevent"]),["enter"]),onMousedown:$(d=>e.removeElement(a),["prevent"]),class:"multiselect__tag-icon"},null,40,["onKeypress","onMousedown"])]))])),256))],512),[[Q,i.visibleValues.length>0]]),e.internalValue&&e.internalValue.length>s.limit?V(e.$slots,"limit",{key:0},()=>[w("strong",{class:"multiselect__strong",textContent:R(s.limitText(e.internalValue.length-s.limit))},null,8,["textContent"])]):O("v-if",!0)]),w(ce,{name:"multiselect__loading"},{default:N(()=>[V(e.$slots,"loading",{},()=>[Y(w("div",bi,null,512),[[Q,s.loading]])])]),_:3}),e.searchable?(u(),D("input",{key:0,ref:"search",name:s.name,id:e.id,type:"text",autocomplete:"off",spellcheck:"false",placeholder:e.placeholder,style:i.inputStyle,value:e.search,disabled:s.disabled,tabindex:s.tabindex,onInput:t[2]||(t[2]=a=>e.updateSearch(a.target.value)),onFocus:t[3]||(t[3]=$(a=>e.activate(),["prevent"])),onBlur:t[4]||(t[4]=$(a=>e.deactivate(),["prevent"])),onKeyup:t[5]||(t[5]=j(a=>e.deactivate(),["esc"])),onKeydown:[t[6]||(t[6]=j($(a=>e.pointerForward(),["prevent"]),["down"])),t[7]||(t[7]=j($(a=>e.pointerBackward(),["prevent"]),["up"])),t[9]||(t[9]=j($(a=>e.removeLastElement(),["stop"]),["delete"]))],onKeypress:t[8]||(t[8]=j($(a=>e.addPointerElement(a),["prevent","stop","self"]),["enter"])),class:"multiselect__input","aria-controls":"listbox-"+e.id},null,44,["name","id","placeholder","value","disabled","tabindex","aria-controls"])):O("v-if",!0),i.isSingleLabelVisible?(u(),D("span",{key:1,class:"multiselect__single",onMousedown:t[10]||(t[10]=$((...a)=>e.toggle&&e.toggle(...a),["prevent"]))},[V(e.$slots,"singleLabel",{option:i.singleValue},()=>[B(R(e.currentOptionLabel),1)])],32)):O("v-if",!0),i.isPlaceholderVisible?(u(),D("span",{key:2,class:"multiselect__placeholder",onMousedown:t[11]||(t[11]=$((...a)=>e.toggle&&e.toggle(...a),["prevent"]))},[V(e.$slots,"placeholder",{},()=>[B(R(e.placeholder),1)])],32)):O("v-if",!0)],512),w(ce,{name:"multiselect"},{default:N(()=>[Y(w("div",{class:"multiselect__content-wrapper",onFocus:t[12]||(t[12]=(...a)=>e.activate&&e.activate(...a)),tabindex:"-1",onMousedown:t[13]||(t[13]=$(()=>{},["prevent"])),style:{maxHeight:e.optimizedHeight+"px"},ref:"list"},[w("ul",{class:"multiselect__content",style:i.contentStyle,role:"listbox",id:"listbox-"+e.id},[V(e.$slots,"beforeList"),e.multiple&&e.max===e.internalValue.length?(u(),D("li",yi,[w("span",Ei,[V(e.$slots,"maxElements",{},()=>[B("Maximum of "+R(e.max)+" options selected. First remove a selected option to select another.",1)])])])):O("v-if",!0),!e.max||e.internalValue.length(u(),D("li",{class:"multiselect__element",key:r,id:e.id+"-"+r,role:a&&(a.$isLabel||a.$isDisabled)?null:"option"},[a&&(a.$isLabel||a.$isDisabled)?O("v-if",!0):(u(),D("span",{key:0,class:[e.optionHighlight(r,a),"multiselect__option"],onClick:$(d=>e.select(a),["stop"]),onMouseenter:$(d=>e.pointerSet(r),["self"]),"data-select":a&&a.isTag?e.tagPlaceholder:i.selectLabelText,"data-selected":i.selectedLabelText,"data-deselect":i.deselectLabelText},[V(e.$slots,"option",{option:a,search:e.search,index:r},()=>[w("span",null,R(e.getOptionLabel(a)),1)])],42,["onClick","onMouseenter","data-select","data-selected","data-deselect"])),a&&(a.$isLabel||a.$isDisabled)?(u(),D("span",{key:1,"data-select":e.groupSelect&&i.selectGroupLabelText,"data-deselect":e.groupSelect&&i.deselectGroupLabelText,class:[e.groupHighlight(r,a),"multiselect__option"],onMouseenter:$(d=>e.groupSelect&&e.pointerSet(r),["self"]),onMousedown:$(d=>e.selectGroup(a),["prevent"])},[V(e.$slots,"option",{option:a,search:e.search,index:r},()=>[w("span",null,R(e.getOptionLabel(a)),1)])],42,["data-select","data-deselect","onMouseenter","onMousedown"])):O("v-if",!0)],8,["id","role"]))),128)):O("v-if",!0),Y(w("li",null,[w("span",wi,[V(e.$slots,"noResult",{search:e.search},()=>[Li])])],512),[[Q,s.showNoResults&&e.filteredOptions.length===0&&e.search&&!s.loading]]),Y(w("li",null,[w("span",Oi,[V(e.$slots,"noOptions",{},()=>[Di])])],512),[[Q,s.showNoOptions&&(e.options.length===0||i.hasOptionGroup===!0&&e.filteredOptions.length===0)&&!e.search&&!s.loading]]),V(e.$slots,"afterList")],12,["id"])],36),[[Q,e.isOpen]])]),_:3})],42,["tabindex","aria-owns"])}nt.render=Si;const Me="/assets/bot-6afebef6.png";const Ai={components:{BotIcon:Me,Multiselect:nt},data(){return{dynamicComponent:null,messages:[],isConnected:!1,waitResponse:!1,botOptions:{botAvatarImg:Me,botTitle:"AI Bot",colorScheme:"#3f83f8",boardContentBg:"#f4f4f4",msgBubbleBgBot:"#fff",msgBubbleBgUser:"#3f83f8",inputPlaceholder:"Ask a new question"},docName:"cloudlinux-documentation",tags:[],options:[{name:"CloudLinux OS 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(){l(()=>import("./vue-bot-ui.common-61a8b46b.js").then(e=>e.v),["assets/vue-bot-ui.common-61a8b46b.js","assets/framework-c44b2977.js"]).then(e=>{this.dynamicComponent=bt(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(s=>s.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}))}}},Vi={id:"bot-ui"},xi={class:"qkb-board-header__title"},Ri={class:"qkb-board-header__select_field"};function Ti(e,t,s,o,n,i){const a=oe("multiselect"),r=oe("ClientOnly");return u(),D(r,null,{default:N(()=>[p("div",Vi,[n.dynamicComponent&&n.isConnected?(u(),D(de(n.dynamicComponent),{key:0,messages:n.messages,options:n.botOptions,"bot-typing":n.waitResponse,"input-disable":n.waitResponse,onMsgSend:i.messageSendHandler,onMsgToServer:i.messageToServer},{header:N(()=>[p("div",xi,R(n.botOptions.botTitle),1),p("div",Ri,[w(a,{modelValue:n.tags,"onUpdate:modelValue":t[0]||(t[0]=d=>n.tags=d),options:n.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"])):O("v-if",!0)])]),_:1})}const Pi=P(Ai,[["render",Ti],["__file","Chat.vue"]]),$i=qt({rootComponents:[Pi],async enhance({app:e}){e.config.globalProperties.$eventBus=Wt()},layouts:{Layout:Nn,HomeLayout:oi,NotFound:ai},setup(){Fe("themeConfig",{cloudlinuxSite:"https://cloudlinux.com",defaultURL:"/",githubBranch:"master",allowGithubEdit:!0,githubMainDir:"docs",githubRepository:"cloudlinux/cloudlinux-documentation",MOBILE_BREAKPOINT:767,documents:ui,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:li,editLinkText:"Edit this page",sidebar:Xe,siteTitle:"Documentation",stayInTouch:"Stay in touch",navbarLinks:ri},productsList:["CloudLinux","Imunify","TuxCare"],productsTitle:"Products",productsURLs:["https://docs.cloudlinux.com","https://docs.imunify360.com","https://docs.tuxcare.com"],social:di,algoliaOptions:{apiKey:"e6b9d79daf71aa98e2e2a51d4556f9d4",indexName:"cloudlinuxos",appId:"0TCNL6CGX8"},MAX_ALGOLIA_VISIBLE_RESULT:20,MAX_ALGOLIA_VISIBLE_ROWS:15,MAX_ALGOLIA_HITS_PER_PAGE:20})}}),ue=[Nt,$i],ki=[["v-8daa1a0e","/",{},["/index.html","/README.md"]],["v-74457223","/cln/",{},["/cln/index.html","/cln/README.md"]],["v-712e14fc","/introduction/",{},["/introduction/index.html","/introduction/README.md"]],["v-3713595e","/shared/",{},["/shared/index.html","/shared/README.md"]],["v-4fa2b6f1","/shared-pro/",{},["/shared-pro/index.html","/shared-pro/README.md"]],["v-257d9eea","/user-docs/",{},["/user-docs/index.html","/user-docs/README.md"]],["v-4ec40180","/admin/components/",{},["/admin/components/index.html","/admin/components/README.md"]],["v-33466da8","/admin/description/",{},["/admin/description/index.html","/admin/description/README.md"]],["v-1321a35c","/admin/faq/",{},["/admin/faq/index.html","/admin/faq/README.md"]],["v-77964adc","/admin/installation/",{},["/admin/installation/index.html","/admin/installation/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-04159818","/shared/alt-ea_packages/",{},["/shared/alt-ea_packages/index.html","/shared/alt-ea_packages/README.md"]],["v-4d221c70","/shared/apache2nginx/",{},["/shared/apache2nginx/index.html","/shared/apache2nginx/README.md"]],["v-0bc575b4","/shared/cloudlinux_installation/",{},["/shared/cloudlinux_installation/index.html","/shared/cloudlinux_installation/README.md"]],["v-2a2b382d","/shared/cloudlinux_os_components/",{},["/shared/cloudlinux_os_components/index.html","/shared/cloudlinux_os_components/README.md"]],["v-7c7edde6","/shared/cloudlinux_os_kernel/",{},["/shared/cloudlinux_os_kernel/index.html","/shared/cloudlinux_os_kernel/README.md"]],["v-16779dec","/shared/command-line_tools/",{},["/shared/command-line_tools/index.html","/shared/command-line_tools/README.md"]],["v-74cd8d69","/shared/control_panel_integration/",{},["/shared/control_panel_integration/index.html","/shared/control_panel_integration/README.md"]],["v-157570eb","/shared/deprecated/",{},["/shared/deprecated/index.html","/shared/deprecated/README.md"]],["v-281849c6","/shared/elevate/",{},["/shared/elevate/index.html","/shared/elevate/README.md"]],["v-4fba1aaa","/shared/faq/",{},["/shared/faq/index.html","/shared/faq/README.md"]],["v-7bb9093e","/shared/features/",{},["/shared/features/index.html","/shared/features/README.md"]],["v-28ef1a8b","/shared/for_cloudlinux_partners/",{},["/shared/for_cloudlinux_partners/index.html","/shared/for_cloudlinux_partners/README.md"]],["v-4a57bc30","/shared/for_cloudlinux_partners/whmcs_saved.html",{},["/shared/for_cloudlinux_partners/whmcs_saved","/shared/for_cloudlinux_partners/whmcs_saved.md"]],["v-3514d6a6","/shared/limits/",{},["/shared/limits/index.html","/shared/limits/README.md"]],["v-241ac397","/shared/lve_manager/",{},["/shared/lve_manager/index.html","/shared/lve_manager/README.md"]],["v-11f342b7","/shared-pro/accelerate-wp/",{},["/shared-pro/accelerate-wp/index.html","/shared-pro/accelerate-wp/README.md"]],["v-26751d8e","/shared-pro/centralized-monitoring/",{},["/shared-pro/centralized-monitoring/index.html","/shared-pro/centralized-monitoring/README.md"]],["v-13868404","/shared-pro/introduction/",{},["/shared-pro/introduction/index.html","/shared-pro/introduction/README.md"]],["v-010e2d7d","/shared-pro/wpos-plugin/",{},["/shared-pro/wpos-plugin/index.html","/shared-pro/wpos-plugin/README.md"]],["v-4f1610aa","/shared-pro/x-ray/",{},["/shared-pro/x-ray/index.html","/shared-pro/x-ray/README.md"]],["v-528d7da2","/solo/activation/",{},["/solo/activation/index.html","/solo/activation/README.md"]],["v-166b4a4c","/solo/administration/",{},["/solo/administration/index.html","/solo/administration/README.md"]],["v-95b487a0","/solo/faq/",{},["/solo/faq/index.html","/solo/faq/README.md"]],["v-309e76be","/solo/installation/",{},["/solo/installation/index.html","/solo/installation/README.md"]],["v-cdb28e44","/solo/introduction/",{},["/solo/introduction/index.html","/solo/introduction/README.md"]],["v-68f2720e","/solo/manager/",{},["/solo/manager/index.html","/solo/manager/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-1d7964ba","/user-docs/user-docs-shared-cloudlinux/",{},["/user-docs/user-docs-shared-cloudlinux/index.html","/user-docs/user-docs-shared-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-c41aa89c","/shared-pro/shared/faq/",{},["/shared-pro/shared/faq/index.html","/shared-pro/shared/faq/README.md"]],["v-13444f59","/shared-pro/shared/features/",{},["/shared-pro/shared/features/index.html","/shared-pro/shared/features/README.md"]],["v-3706649a","/404.html",{},["/404"]]];var Be=me({name:"Vuepress",setup(){const e=kt();return()=>K(e.value)}}),Ii=()=>ki.reduce((e,[t,s,o,n])=>(e.push({name:t,path:s,component:Be,meta:o},...n.map(i=>({path:i,redirect:s}))),e),[{name:"404",path:"/:catchAll(.*)",component:Be}]),Ci=Ot,Mi=()=>{const e=yt({history:Ci(Et("/")),routes:Ii(),scrollBehavior:(t,s,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,s)=>{var o;(t.path!==s.path||s===wt)&&([X.value]=await Promise.all([z.resolvePageData(t.name),(o=qe[t.name])==null?void 0:o.__asyncLoader()]))}),e},Bi=e=>{e.component("ClientOnly",Ht),e.component("Content",Ft)},Hi=(e,t,s)=>{const o=T(t.currentRoute.value.path);ie(()=>t.currentRoute.value.path,b=>o.value=b);const n=A(()=>z.resolveLayouts(s)),i=A(()=>z.resolveRouteLocale(le.value.locales,o.value)),a=A(()=>z.resolveSiteLocaleData(le.value,i.value)),r=A(()=>z.resolvePageFrontmatter(X.value)),d=A(()=>z.resolvePageHeadTitle(X.value,a.value)),c=A(()=>z.resolvePageHead(d.value,r.value,a.value)),m=A(()=>z.resolvePageLang(X.value)),v=A(()=>z.resolvePageLayout(X.value,n.value));return e.provide(Rt,n),e.provide(We,r),e.provide($t,d),e.provide(je,c),e.provide(Ge,m),e.provide(ze,v),e.provide(Ke,i),e.provide(It,a),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>c.value},$headTitle:{get:()=>d.value},$lang:{get:()=>m.value},$page:{get:()=>X.value},$routeLocale:{get:()=>i.value},$site:{get:()=>le.value},$siteLocale:{get:()=>a.value},$withBase:{get:()=>q}}),{layouts:n,pageData:X,pageFrontmatter:r,pageHead:c,pageHeadTitle:d,pageLang:m,pageLayout:v,routeLocale:i,siteData:le,siteLocaleData:a}},Fi=()=>{const e=Pt(),t=Ue(),s=T([]),o=()=>{e.value.forEach(i=>{const a=qi(i);a&&s.value.push(a)})},n=()=>{document.documentElement.lang=t.value,s.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),s.value.splice(0,s.value.length),e.value.forEach(i=>{const a=Ni(i);a!==null&&(document.head.appendChild(a),s.value.push(a))})};Fe(Ct,n),J(()=>{o(),n(),ie(()=>e.value,()=>n())})},qi=([e,t,s=""])=>{const o=Object.entries(t).map(([r,d])=>se(d)?`[${r}=${JSON.stringify(d)}]`:d===!0?`[${r}]`:"").join(""),n=`head > ${e}${o}`;return Array.from(document.querySelectorAll(n)).find(r=>r.innerText===s)||null},Ni=([e,t,s])=>{if(!se(e))return null;const o=document.createElement(e);return St(t)&&Object.entries(t).forEach(([n,i])=>{se(i)?o.setAttribute(n,i):i===!0&&o.setAttribute(n,"")}),se(s)&&o.appendChild(document.createTextNode(s)),o},Wi=Lt,ji=async()=>{var s;const e=Wi({name:"VuepressApp",setup(){var o;Fi();for(const n of ue)(o=n.setup)==null||o.call(n);return()=>[K(Dt),...ue.flatMap(({rootComponents:n=[]})=>n.map(i=>K(i)))]}}),t=Mi();Bi(e),Hi(e,t,ue);for(const o of ue)await((s=o.enhance)==null?void 0:s.call(o,{app:e,router:t,siteData:le}));return e.use(t),{app:e,router:t}};ji().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{ji as createVueApp}; diff --git a/assets/index.html-c34aae8c.js b/assets/index.html-9690bc28.js similarity index 94% rename from assets/index.html-c34aae8c.js rename to assets/index.html-9690bc28.js index 0f882a65c..6a7f56d1b 100644 --- a/assets/index.html-c34aae8c.js +++ b/assets/index.html-9690bc28.js @@ -1,5 +1,5 @@ -import{_ as r,V as l,n as d,p as c,q as t,C as n,A as a,J as e,a7 as s}from"./framework-c44b2977.js";const u="/assets/welcome_page-f075974a.png",h="/assets/installation_summary-7b3831e1.png",p="/assets/installation_source_gray_network-43bff74f.png",m="/assets/installation_source_network_address-b973ac9e.png",g="/assets/installation_iso_source-85ce6a6d.png",f="/assets/installation_source_gray_working-da9de9a8.png",v="/assets/installation_source_gray_done-df1e66ac.png",b="/assets/installation_available-ebd9eee2.png",y="/assets/installation_done-0040c6f7.png",x={},_=t("h1",{id:"installation",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),e(" Installation")],-1),w={class:"table-of-contents"},k=s('

Hardware compatibility

CloudLinux OS Solo supports all the hardware supported by RHEL/CentOS, with few exceptions. Exceptions are usually hardware that requires binary drivers, and that doesn't have any open-source alternatives.

CloudLinux OS Solo does not support ARM-based CPUs (e.g. Graviton)

With RHEL 8 (CloudLinux 8), some devices are no longer supported. You can check the entire list here.

Fresh installation

Downloading installation media

You can download the latest ISO and use it to install CloudLinux OS Solo on your server using this link.

There are multiple ISO types available:

  • CloudLinux-*-boot.iso - this ISO is made specifically for network installation and does not contain any packages inside.
  • CloudLinux-*-dvd1.iso - this one contains all packages from the network installation repository, so you can set up any possible configuration without network access.
  • CloudLinux-*-minimal.iso - this one contains only a minimal set of packages to set up a light server without GUI and Development tools.
',9),S={class:"tip custom-block"},L=t("p",{class:"custom-block-title"},"Note",-1),C=t("code",null,"yum update",-1),O=s('

Installing in the Graphical User Interface

The graphical installation interface is the preferred method of manually installing CloudLinux OS Solo. It allows you to have full control over all available settings, including disk partitioning and storage configuration.

The graphical mode is used by default when you boot the system from the local media.

Language selection

The first screen displayed is the language selection page.

Welcome page screenshot

First, find your preferred language in the left column and then select locale in the right one. The selected language will be used during installation and also as a default language of the installed system.

',7),I=t("code",null,"Continue",-1),T=s('

Installation summary

The Installation summary screen is the main dashboard of your installation parameters. Most of the options which can be configured during the installation can be accessed from here.

Welcome page screenshot

The summary screen displays links to other configuration screens, those links can be in several different states, which are graphically indicated:

  • Grayed-out link means that the installer is currently updating this section. Please wait a little before accessing this section.

  • A warning symbol next to an icon means that a screen requires your attention before you start the installation.

  • Links without a warning symbol mean that the screen does not require your attention. You can still change your settings in these screens, but it is not required to start the installation.

Installation source

The first thing that you should define is where the system will be installed from. There are basically two options:

  • ISO file
  • On the network

On the network source

Use this option to download packages to be installed from a network location. This is the preferred way as you automatically receive all critical bug fixes that may affect installation.

Note

Most likely your network is not configured by default, so you can see the URL configuration field greyed out, like on the screenshot below. Please refer to the Network Configuration screen first to set up a network connection.

Unavailable network source

The correct installation URL for CloudLinux OS Solo is

https://repo.cloudlinux.com/cloudlinux/8/BaseOS/x86_64/kickstart/
-

Type in the installation URL in the corresponding field, configure the proxy if needed and press the Done button.

ISO file source

This option is primarily used as an alternative when you don't have an internet connection on a target server. It is only available if you downloaded Minimal or DVD ISO which contains some bundled packages in.

Tick the ISO file checkbox and press the Done button.

Next steps

',21),A=t("code",null,"Done",-1),R=t("code",null,"Downloading package metadata",-1),D=t("p",null,[t("img",{src:f,alt:""})],-1),E=s('

Software Selection

The Software Selection screen allows you to choose a Base Environment and Add-ons. These options control which software packages will be installed on your system during the installation process.

This screen is only available if Installation Source is properly configured and only after the installer has downloaded package metadata from the source.

It is not possible to select specific packages during a manual installation, you can only select pre-defined environments and add-ons.

To install CloudLinux OS Solo, first, choose the CloudLinux OS Solo (minimal) environment on the left of the screen.

Warning

All other environments are used to install CloudLinux OS Shared, so make sure you choose CloudLinux OS Solo (minimal).

Only one environment can be chosen, even if more are available.

Then, on the right side of the screen, select one or more add-ons which you want to install by ticking the check boxes next to each add-on.

Final preparations

Installation is almost done, all you need to do is to configure your installation target using the Installation Destination menu and create your Root Password.

Doing that, the Begin installation button becomes blue, so click it.

After this point, the installation process actually starts and changes are being made to your selected disks. It is not possible to go back to the Installation Summary and change any settings configured there; if you need to do so, you must wait for the installation process to finish, reboot your system, log in and change your settings on the installed system.

The bottom of the screen shows a progress bar and a message informing you of the current progress of the installation. When the installation finishes, you can press the Finish installation button to reboot your computer and log in to your newly installed system.

Warning

Before you finish the installation and reboot, either remove the media which you used to start the installation, or make sure that your system tries to boot from the hard drive before trying removable media. Otherwise, your computer will start the installer again instead of the installed system.

Next steps

Reboot your system, login and check EULA which is located in the /usr/share/cloudlinux-release/EULA.

',19),N=s('

Converting existing servers

Only CentOS 8/AlmaLinux 8 can be converted to the CloudLinux OS Solo 8.

Sometimes it is required to convert already existing servers with CentOS or AlmaLinux and make them CloudLinux OS Solo.

It is easy to convert your existing installation by cldeploy script. The process takes a few minutes and replaces just a handful of RPMs.

',4),U={class:"warning custom-block"},B=t("p",{class:"custom-block-title"},null,-1),P=s(`

Downloading and running conversion script

If you already have an activation key, run the following commands:

yum install wget -y
+import{_ as r,V as l,n as d,p as c,q as t,C as n,A as a,J as e,a7 as s}from"./framework-c44b2977.js";const u="/assets/welcome_page-f075974a.png",h="/assets/installation_summary-7b3831e1.png",p="/assets/installation_source_gray_network-43bff74f.png",m="/assets/installation_source_network_address-b973ac9e.png",g="/assets/installation_iso_source-85ce6a6d.png",f="/assets/installation_source_gray_working-da9de9a8.png",v="/assets/installation_source_gray_done-df1e66ac.png",y="/assets/installation_available-ebd9eee2.png",b="/assets/installation_done-0040c6f7.png",x={},_=t("h1",{id:"installation",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),e(" Installation")],-1),w={class:"table-of-contents"},k=s('

Hardware compatibility

CloudLinux OS Solo supports all the hardware supported by RHEL/CentOS, with few exceptions. Exceptions are usually hardware that requires binary drivers, and that doesn't have any open-source alternatives.

CloudLinux OS Solo does not support ARM-based CPUs (e.g. Graviton)

With RHEL 8 (CloudLinux 8), some devices are no longer supported. You can check the entire list here.

Fresh installation

Downloading installation media

You can download the latest ISO and use it to install CloudLinux OS Solo on your server using this link.

There are multiple ISO types available:

  • CloudLinux-*-boot.iso - this ISO is made specifically for network installation and does not contain any packages inside.
  • CloudLinux-*-dvd1.iso - this one contains all packages from the network installation repository, so you can set up any possible configuration without network access.
  • CloudLinux-*-minimal.iso - this one contains only a minimal set of packages to set up a light server without GUI and Development tools.
',9),S={class:"tip custom-block"},L=t("p",{class:"custom-block-title"},"Note",-1),C=t("code",null,"yum update",-1),O=s('

Installing in the Graphical User Interface

The graphical installation interface is the preferred method of manually installing CloudLinux OS Solo. It allows you to have full control over all available settings, including disk partitioning and storage configuration.

The graphical mode is used by default when you boot the system from the local media.

Language selection

The first screen displayed is the language selection page.

Welcome page screenshot

First, find your preferred language in the left column and then select locale in the right one. The selected language will be used during installation and also as a default language of the installed system.

',7),I=t("code",null,"Continue",-1),T=s('

Installation summary

The Installation summary screen is the main dashboard of your installation parameters. Most of the options which can be configured during the installation can be accessed from here.

Welcome page screenshot

The summary screen displays links to other configuration screens, those links can be in several different states, which are graphically indicated:

  • Grayed-out link means that the installer is currently updating this section. Please wait a little before accessing this section.

  • A warning symbol next to an icon means that a screen requires your attention before you start the installation.

  • Links without a warning symbol mean that the screen does not require your attention. You can still change your settings in these screens, but it is not required to start the installation.

Installation source

The first thing that you should define is where the system will be installed from. There are basically two options:

  • ISO file
  • On the network

On the network source

Use this option to download packages to be installed from a network location. This is the preferred way as you automatically receive all critical bug fixes that may affect installation.

Note

Most likely your network is not configured by default, so you can see the URL configuration field greyed out, like on the screenshot below. Please refer to the Network Configuration screen first to set up a network connection.

Unavailable network source

The correct installation URL for CloudLinux OS Solo is

https://repo.cloudlinux.com/cloudlinux/8/BaseOS/x86_64/kickstart/
+

Type in the installation URL in the corresponding field, configure the proxy if needed and press the Done button.

ISO file source

This option is primarily used as an alternative when you don't have an internet connection on a target server. It is only available if you downloaded Minimal or DVD ISO which contains some bundled packages in.

Tick the ISO file checkbox and press the Done button.

Next steps

',21),A=t("code",null,"Done",-1),R=t("code",null,"Downloading package metadata",-1),D=t("p",null,[t("img",{src:f,alt:""})],-1),E=s('

Software Selection

The Software Selection screen allows you to choose a Base Environment and Add-ons. These options control which software packages will be installed on your system during the installation process.

This screen is only available if Installation Source is properly configured and only after the installer has downloaded package metadata from the source.

It is not possible to select specific packages during a manual installation, you can only select pre-defined environments and add-ons.

To install CloudLinux OS Solo, first, choose the CloudLinux OS Solo (minimal) environment on the left of the screen.

Warning

All other environments are used to install CloudLinux OS Shared, so make sure you choose CloudLinux OS Solo (minimal).

Only one environment can be chosen, even if more are available.

Then, on the right side of the screen, select one or more add-ons which you want to install by ticking the check boxes next to each add-on.

Final preparations

Installation is almost done, all you need to do is to configure your installation target using the Installation Destination menu and create your Root Password.

Doing that, the Begin installation button becomes blue, so click it.

After this point, the installation process actually starts and changes are being made to your selected disks. It is not possible to go back to the Installation Summary and change any settings configured there; if you need to do so, you must wait for the installation process to finish, reboot your system, log in and change your settings on the installed system.

The bottom of the screen shows a progress bar and a message informing you of the current progress of the installation. When the installation finishes, you can press the Finish installation button to reboot your computer and log in to your newly installed system.

Warning

Before you finish the installation and reboot, either remove the media which you used to start the installation, or make sure that your system tries to boot from the hard drive before trying removable media. Otherwise, your computer will start the installer again instead of the installed system.

Next steps

Reboot your system, login and check EULA which is located in the /usr/share/cloudlinux-release/EULA.

',19),N=s('

Converting existing servers

Only AlmaLinux/Rocky Linux 8+ can be converted to CloudLinux OS Solo.

Sometimes it is required to convert already existing AlmaLinux or Rocky Linux servers to CloudLinux OS Solo.

It is easy to convert your existing installation by cldeploy script. The process takes a few minutes and replaces just a handful of RPMs.

',4),U={class:"warning custom-block"},B=t("p",{class:"custom-block-title"},null,-1),P=s(`

Downloading and running conversion script

If you already have an activation key, run the following commands:

yum install wget -y
 wget https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy
 bash cldeploy -k ACTIVATION_KEY
 

Where ACTIVATION_KEY is the one that you got in the previous step.

If you want to get an IP-based license, run the following commands:

yum install wget -y
diff --git a/cln/account_settings/convert.html b/cln/account_settings/convert.html
index 1d786eceb..a7809a39e 100644
--- a/cln/account_settings/convert.html
+++ b/cln/account_settings/convert.html
@@ -39,10 +39,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 154ea621c..db27d4241 100644 --- a/cln/account_settings/index.html +++ b/cln/account_settings/index.html @@ -39,10 +39,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 15f708798..eca1562c7 100644 --- a/cln/billing/index.html +++ b/cln/billing/index.html @@ -39,10 +39,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 03ec6931c..78b014c0c 100644 --- a/cln/cln_for_resellers/conversion.html +++ b/cln/cln_for_resellers/conversion.html @@ -39,10 +39,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 ca09736ec..d64367320 100644 --- a/cln/cln_for_resellers/index.html +++ b/cln/cln_for_resellers/index.html @@ -39,10 +39,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 type

You can find the process description here

Deposit Top Up

Navigate to Billing → Balance and Top Up.

To add funds via your PayPal account, click Proceed to Checkout. You will be redirected to PayPall checkout page. Fill in Price per item and click Continue, then proceed with PayPal.

If a reseller adds the Payment method, he will be able to "top up" the deposit.

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.

Default state for different 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
  3. Go to the IP Licenses section

  1. Press edit
  2. Choose new permissions

  1. Save permissions
- + diff --git a/cln/dashboard/index.html b/cln/dashboard/index.html index 1e019e45b..84a4bb60b 100644 --- a/cln/dashboard/index.html +++ b/cln/dashboard/index.html @@ -39,11 +39,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.

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 2b8ce525d..48342c8c7 100644 --- a/cln/index.html +++ b/cln/index.html @@ -39,10 +39,10 @@ })(); - +
- + diff --git a/cln/introduction/index.html b/cln/introduction/index.html index 5b0e5250e..9f119e967 100644 --- a/cln/introduction/index.html +++ b/cln/introduction/index.html @@ -39,10 +39,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 839c720ad..e1697654c 100644 --- a/cln/payment_methods/index.html +++ b/cln/payment_methods/index.html @@ -39,10 +39,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 787d68112..ef7badb93 100644 --- a/cln/purchase/index.html +++ b/cln/purchase/index.html @@ -39,10 +39,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 b7644ead5..9739955e0 100644 --- a/cln/shared/faq/index.html +++ b/cln/shared/faq/index.html @@ -39,10 +39,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 1e53a67b1..5994b1cd8 100644 --- a/cln/shared/features/index.html +++ b/cln/shared/features/index.html @@ -39,7 +39,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
@@ -76,6 +76,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 54407c42e..d5d5974c1 100644 --- a/cln/spacewalk/regular.html +++ b/cln/spacewalk/regular.html @@ -39,10 +39,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 d3ff33515..77268d05f 100644 --- a/cln/spacewalk/reseller.html +++ b/cln/spacewalk/reseller.html @@ -39,10 +39,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 73774d6f4..11d171a8a 100644 --- a/cln/terminology/index.html +++ b/cln/terminology/index.html @@ -39,10 +39,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 e06c01b87..fd458ae49 100644 --- a/cln/whmcs_advantage/index.html +++ b/cln/whmcs_advantage/index.html @@ -39,7 +39,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
@@ -49,6 +49,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 594d0b888..cecc9b51a 100644 --- a/cln/whmcs_plugin/index.html +++ b/cln/whmcs_plugin/index.html @@ -39,11 +39,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 3c7a6a79e..7bd065563 100644 --- a/cln/wpos-plugin/index.html +++ b/cln/wpos-plugin/index.html @@ -39,10 +39,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/index.html b/index.html index 875434a4f..3140180ee 100644 --- a/index.html +++ b/index.html @@ -39,10 +39,10 @@ })(); - +
document icon

Introduction to Cloudlinux OS

Introduction to CloudLinux OS editions and their description.

document icon

CloudLinux OS Shared

CloudLinux OS Shared is designed for shared hosting providers. It isolates each customer into a separate “Lightweight Virtualized Environment” (LVE), which allocates and limits server resources.

document icon

CloudLinux OS Shared Pro

CloudLinux OS Shared Pro extends your CloudLinux OS Shared functionality with even more useful features.

document icon

Apache2Nginx (BETA)

Apache2Nginx sets up Nginx hosting with .htaccess support.

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

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 Solo

CloudLinux OS Solo is designed for VPS or dedicated servers with a single hosting account for any number of websites.

document icon

CloudLinux OS Admin

CloudLinux OS Admin is designed for shared hosting providers and allows flawless migration of big shared hosting customers to individual VPS with the same CloudLinux features as on shared hosting.

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 Shared & Solo.

- + diff --git a/introduction/index.html b/introduction/index.html index ae1ee0d14..9c4040a0e 100644 --- a/introduction/index.html +++ b/introduction/index.html @@ -39,12 +39,12 @@ })(); Introduction - +
sidebar hamburger menu

Introduction

CloudLinux OS editions

FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS SharedCloudLinux OS Shared Pro
Maximum amount of hosting accounts15unlimitedunlimited
Resource Limits (LVE)NoYes*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

* 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 Solo

CloudLinux OS Solo is designed for installation on VPS or VDS servers. This edition has major difference against all other, so you should look for the detailed docs here.

CloudLinux OS Admin

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 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.

CloudLinux OS Shared (Pro)

CloudLinux OS Shared 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 Shared 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.

Purchasing CloudLinux OS Shared Pro license extends your CloudLinux OS Shared functionality with even more useful features.

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 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 Shared component that allows each user to easily create Node.js applications, choose Node.js version 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. 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

VE-stats 2 collects LVE usage statistics (CPU, memory, disk space usage) and allows to collect the usage data.

See more.

CloudLinux 9

CloudLinux 9 versionEditionsHosting PanelsVirtuozzo Support
CloudLinux 9 BetaCloudLinux Shared CloudLinux Shared Pro- Non-panel
- Custom panel integration
No
CloudLinux 9.2CloudLinux Shared CloudLinux Shared Pro- Non-panel
- Custom panel integration
- cPanel with experimental key
No
CloudLinux 9.3 [Current Version]CloudLinux Shared
CloudLinux Shared Pro
CloudLinux Solo
CloudLinux Admin
- Non-panel
- Custom panel integration
- cPanel >= 11.116.0.1
No

Note!

Starting from v11.116.0.1, cPanel is fully integrated with CloudLinux 9 (9.2+), and the flag --experimental-os=almalinux-9.2 no longer necessary.

Note!

If you have a server with cPanel + CloudLinux already installed via the experimental flag --experimental-os=almalinux-9.2, as described here, it is highly recommended to reinstall the server from scratch to avoid unexpected behavior.

Note!

While the cPanel version 11.116.0.1 is not in the Stable Release, use the following instructions to install cPanel on the latest versions of CloudLinux 9.

  1. Update the /etc/cpupdate.conf as described here, and set the config value:
CPANEL=current
 
  1. Start the cPanel installation process:
cd /home && curl -o latest -L https://securedownloads.cpanel.net/latest && sh latest
 

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 Shared 6Feb 1, 2011Nov 30, 2020 (ELS until June 30, 2024)
CloudLinux OS Shared 7Apr 1, 2015Jun 30, 2024
CloudLinux OS 8Mar 17, 2020May 31, 2029
CloudLinux OS 9Jan 17, 2023May 31, 2032
- + diff --git a/shared-pro/accelerate-wp/index.html b/shared-pro/accelerate-wp/index.html index 74da29fac..5fb0635e8 100644 --- a/shared-pro/accelerate-wp/index.html +++ b/shared-pro/accelerate-wp/index.html @@ -39,7 +39,7 @@ })(); AccelerateWP - +
sidebar hamburger menu

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

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 Object Caching, Image Optimization and Critical CSS features in their interface, 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.

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

This is a premium suite which includes 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
@@ -359,6 +359,6 @@
 
 yum reinstall ea-php80-php-mbstring
 
- + diff --git a/shared-pro/centralized-monitoring/index.html b/shared-pro/centralized-monitoring/index.html index a0e9df978..9cfe20ea2 100644 --- a/shared-pro/centralized-monitoring/index.html +++ b/shared-pro/centralized-monitoring/index.html @@ -39,7 +39,7 @@ })(); Centralized Monitoring - +
sidebar hamburger menu

Centralized Monitoring

Description

Centralized Monitoring is a tool that allows hosting administrators to monitor load for all their servers and users.

Centralized Monitoring allows you to:

  • View system metrics for all clients’ end servers
  • View the LVE statistics per user for all clients’ end servers
  • Enable AccelerateWP Free on all compatible servers

Installation

Note

Make sure that cm.cloudlinux.com is available on your end server.

  1. Make sure you have a CloudLinux OS Shared Pro subscription.
  2. Make sure you have installed the latest lve-utils package. You can install or update it with the following commands:
    • installation
    yum install lve-utils
    @@ -57,6 +57,6 @@
     

    The statistics collection daemon reacts to the server changing automatically, no need to restart it.

    Warning

    Please note that the daemon checks the server type once in a minute, so the data sent on a minute of switching can be unreliable.

    Logging data sent to pushgateway to the statistics collection daemon log

    Starting from cl-end-server-tools v.1.0.6-1, the statistics collection daemon allows to log data sent to pushgateway to its log /var/log/clplus_sender.log.

    To start logging, run the following command:

    touch /var/lve/cmt_debug_logging
     

    To stop logging, run the following command:

    rm -f /var/lve/cmt_debug_logging
     

    You don't need to restart the daemon after starting/stopping logging. The presence of a control file is evaluated "on the fly".

    Warning

    Use this logging with caution because when it is enabled, the size of the daemon log /var/log/clplus_sender.log will increase each minute minimum on 3-4 KB. The actual increase size depends on the number of active users' processes on a server.

    Known issues

    • MySQL Governor statistics in some cases is collected incorrectly
    • Sorting by MySQL Governor statistics ignores idle users
    • Sorting from the search result set does not work
    • Sorting by ratio for unlimited users works incorrectly
- + diff --git a/shared-pro/index.html b/shared-pro/index.html index cbd2beb6c..48c474932 100644 --- a/shared-pro/index.html +++ b/shared-pro/index.html @@ -39,10 +39,10 @@ })(); - +
- + diff --git a/shared-pro/introduction/index.html b/shared-pro/introduction/index.html index bc94f6816..2647276de 100644 --- a/shared-pro/introduction/index.html +++ b/shared-pro/introduction/index.html @@ -39,10 +39,10 @@ })(); Introduction - +
sidebar hamburger menu

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

The AccelerateWP carries a suite of optimization features that can be enabled and automatically configured for the end user's site.

Centralized Monitoring

Centralized Monitoring is a tool that allows hosting administrators to monitor the load for all their servers and users.

X-Ray

X-Ray is a tool developed for website performance monitoring and performance issues detection. X-Ray can gather and visualize information about the top N slowest system functions, external requests, software modules and database queries of the client’s website.

- + diff --git a/shared-pro/shared/faq/index.html b/shared-pro/shared/faq/index.html index 6eec41685..e712522e1 100644 --- a/shared-pro/shared/faq/index.html +++ b/shared-pro/shared/faq/index.html @@ -39,10 +39,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/shared-pro/shared/features/index.html b/shared-pro/shared/features/index.html index 7349e18e3..2af7a1db8 100644 --- a/shared-pro/shared/features/index.html +++ b/shared-pro/shared/features/index.html @@ -39,7 +39,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
@@ -76,6 +76,6 @@
 

Uninstall procedure for servers with no panel:

/usr/bin/switch_mod_lsapi --uninstall
 apt remove liblsapi liblsapi-dev mod-lsapi
 
- + diff --git a/shared-pro/wpos-plugin/index.html b/shared-pro/wpos-plugin/index.html index 8b4f5e633..81ed299f1 100644 --- a/shared-pro/wpos-plugin/index.html +++ b/shared-pro/wpos-plugin/index.html @@ -39,10 +39,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 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/shared-pro/x-ray/index.html b/shared-pro/x-ray/index.html index f9ce88304..965d71db3 100644 --- a/shared-pro/x-ray/index.html +++ b/shared-pro/x-ray/index.html @@ -39,7 +39,7 @@ })(); X-Ray - +
sidebar hamburger menu

X-Ray

Description

Warning!

X-Ray is available out of the box for cPanel, Plesk, and DirectAdmin. For other control panels you should implement integration as described here

X-Ray is a tool developed for website performance monitoring and performance issues detection.

X-Ray can gather and visualize information about top N slowest system functions, external requests, software modules and database queries of the client’s website.

Known limitations

X-Ray is not compatible with Opcahce JIT optimization. Once X-Ray tracing task is running for the site the Opcache JIT optimization will be disabled until tracing task completed.

Installation

Note

X-Ray Autotracing is installed and enabled by default on all new compatible servers.

  1. Make sure you have CloudLinux OS Shared Pro subscription (only non-reseller accounts apply)

  2. Make sure you have installed LVE Manager version 6.2 or later. You can install or update it with the following commands:

    • installation
    yum install lvemanager
    @@ -138,6 +138,6 @@
     
  3. To restart the X-Ray agent, run the following command:

    service xray-agent restart
     
  4. 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
- + diff --git a/shared/alt-ea_packages/index.html b/shared/alt-ea_packages/index.html index e1d0a4fb2..7264a1a7c 100644 --- a/shared/alt-ea_packages/index.html +++ b/shared/alt-ea_packages/index.html @@ -39,7 +39,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.

x - supported

1. CloudLinux

Cloudlinux 6Cloudlinux 7Cloudlinux 8Cloudlinux 9
alt-php 5.1xxx
alt-php 5.2xxx
alt-php 5.3xxx
alt-php 5.4xxx
alt-php 5.5xxx
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.5x
alt-php 5.6x
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.5xxx
alt-php 5.6xxx
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.3xx

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
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
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*
@@ -442,6 +442,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/shared/apache2nginx/index.html b/shared/apache2nginx/index.html index 46f6011de..17f86e24f 100644 --- a/shared/apache2nginx/index.html +++ b/shared/apache2nginx/index.html @@ -39,7 +39,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.

Apache2Nginx is supported on cPanel servers only.

Installation

To use Apache2Nginx, first install the apache2nginx package:

yum --enablerepo=cloudlinux-updates-testing install apache2nginx
@@ -48,6 +48,6 @@
 

This command removes NGINX from your system and restores Apache configuration.

Force use of Apache for a single website

To force individual website to be served by Apache, run:

apache2nginx proxy -d <domain>
 

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
- + diff --git a/shared/cloudlinux_installation/index.html b/shared/cloudlinux_installation/index.html index 801cdba31..3a9e5b69d 100644 --- a/shared/cloudlinux_installation/index.html +++ b/shared/cloudlinux_installation/index.html @@ -39,7 +39,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

Getting License

You will need a valid activation key - trial or paid - to be able to use your CloudLinux OS Solo 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:

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
@@ -161,6 +161,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/shared/cloudlinux_os_components/index.html b/shared/cloudlinux_os_components/index.html index dd578433b..71b57f28f 100644 --- a/shared/cloudlinux_os_components/index.html +++ b/shared/cloudlinux_os_components/index.html @@ -39,7 +39,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
@@ -1462,6 +1462,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 Shared?

The DirectAdmin and CloudLinux OS Shared (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 Shared 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 Shared 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/shared/cloudlinux_os_kernel/index.html b/shared/cloudlinux_os_kernel/index.html index 168dd032f..855fee431 100644 --- a/shared/cloudlinux_os_kernel/index.html +++ b/shared/cloudlinux_os_kernel/index.html @@ -39,7 +39,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.

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
@@ -226,6 +226,6 @@
 # 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 Shared services.

- + diff --git a/shared/command-line_tools/index.html b/shared/command-line_tools/index.html index d499a026e..0db5fff10 100644 --- a/shared/command-line_tools/index.html +++ b/shared/command-line_tools/index.html @@ -39,7 +39,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_
@@ -606,6 +606,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/shared/control_panel_integration/index.html b/shared/control_panel_integration/index.html index 4d4af3728..40e91e6ec 100644 --- a/shared/control_panel_integration/index.html +++ b/shared/control_panel_integration/index.html @@ -39,7 +39,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 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 Shared 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
@@ -639,6 +639,6 @@
 	}
 }
 
- + diff --git a/shared/deprecated/index.html b/shared/deprecated/index.html index 029253fa5..5f7b5d11f 100644 --- a/shared/deprecated/index.html +++ b/shared/deprecated/index.html @@ -39,7 +39,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 Shared 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
@@ -586,6 +586,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/shared/elevate/index.html b/shared/elevate/index.html index 571ce5d60..2a3f67f4a 100644 --- a/shared/elevate/index.html +++ b/shared/elevate/index.html @@ -39,7 +39,7 @@ })(); ELevate - +
sidebar hamburger menu

ELevate

Beta

CloudLinux ELevate project is currently in beta. Expect potenital issues, in particular with third-party packages and/or repositories. We don't recommend to use or test this tool on your production servers unless you're completely sure about what you're doing.

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 a non-cPanel 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 CloudLinux 7 with cPanel ELevate Scenario uses a modified version of the cPanel ELevate project as an additional layer of the upgrade process.

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 quite 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,

To that end, we highly recommend never running ELevate on a system without a backup 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.

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 CloudLinux 7 no panel/custom panel and cPanel upgrade scenarios behave somewhat differently during the preparation stage. The cPanel scenario will disable the site functionality from this 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.

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 CloudLinux 7 with cPanel ELevate Scenario for step-by-step instructions.

I have a CL7 system with DirectAdmin/Plesk/another 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 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
@@ -88,6 +88,6 @@
 

In addition, make sure your system is running the latest available version of cPanel.

Ensure that you have the package ea-cpanel-tools >= 1.0-67.el7.cloudlinux installed. You may need to activate the cloudlinux-ea4-testing package repository for that version to become accessible. By default, it is located at /etc/yum.repos.d/cloudlinux-ea4-testing.repo.

Download the cPanel ELevate script.

wget -O /scripts/elevate-cpanel https://raw.githubusercontent.com/cloudlinux/elevate/cloudlinux-release/elevate-cpanel

chmod 700 /scripts/elevate-cpanel

Run a preupgrade check. No rpm packages will be installed during this phase.

/scripts/elevate-cpanel --check

Note

In addition to Leapp-created log files and reports, contained in /var/log/leapp, cPanel ELevate also creates an additional log file: /var/log/elevate-cpanel.log

It's advised to check the aforementioned files for possible problems and recommended solutions.

Once the preupgrade process completes, the results will be contained in /var/log/leapp/leapp-report.txt file.

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.

Running

The upgrade process requires a certain amount of system resources to complete.

Machines with RAM lower than 4 Gb can potentially face out-of-memory problems during the update. If such a problem occurs during the initramfs stage of the process, the machine can end up in an inaccessible state.

Please make sure you have enough resources to perform the upgrade safely, and make sure to have a backup of the system prepared before doing so.

Start the upgrade by running the following command:

/scripts/elevate-cpanel --start

Note

By default, the system will be automatically restarted during the upgrade process when nessesary. You can make the process require manual reboots by adding the switch --manual-reboots.

/scripts/elevate-cpanel --start --manual-reboots

The system will reboot several times during the process. While the upgrade is in progress, the system's MOTD will change.

Check the current status of the upgrade process with: /scripts/elevate-cpanel --status

Monitor the elevation log for issues: /scripts/elevate-cpanel --log

In case of errors, once resolved, you can continue the migration process: /scripts/elevate-cpanel --continue

Note

During one of the later upgrade phases, the system will reboot into a custom initramfs, in which the main package upgrade transaction will take place. During this time, the system will be inaccessible through SSH.

The upgrade process after the reboot may take a long time, up to 40-50 minutes, depending on the machine resources. If the machine remains unresponsive for more than 2 hours, assume the upgrade process failed during the post-reboot phase. If it's still possible to access the machine in some way, for example, through remote VNC access, the logs containing the information on what went wrong are located in this folder: /var/log/leapp, as well as here: /var/log/elevate-cpanel.log

Post-upgrade

After the reboot, login into the system and check:

  • the status: /scripts/elevate-cpanel --status
  • the log: /var/log/elevate-cpanel.log
  • the Leapp report: /var/log/leapp/leapp-report.txt

Verify that the current OS is the one you were upgrading to.

cat /etc/redhat-release
 cat /etc/os-release
 

Check the leapp logs for .rpmnew configuration files that may have been created during the upgrade process. In some cases files like /etc/os-release or yum package files may not be replaced automatically - in particular, when said files were modified - requiring the user to rename the .rpmnew files manually.

- + diff --git a/shared/faq/index.html b/shared/faq/index.html index 3107a965a..cc8c75638 100644 --- a/shared/faq/index.html +++ b/shared/faq/index.html @@ -39,10 +39,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/shared/features/index.html b/shared/features/index.html index 1ffb9bf4b..864bf12d3 100644 --- a/shared/features/index.html +++ b/shared/features/index.html @@ -39,7 +39,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
@@ -76,6 +76,6 @@
 

Uninstall procedure for servers with no panel:

/usr/bin/switch_mod_lsapi --uninstall
 apt remove liblsapi liblsapi-dev mod-lsapi
 
- + diff --git a/shared/for_cloudlinux_partners/index.html b/shared/for_cloudlinux_partners/index.html index 853e067b6..5f936b0a4 100644 --- a/shared/for_cloudlinux_partners/index.html +++ b/shared/for_cloudlinux_partners/index.html @@ -39,10 +39,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/shared/for_cloudlinux_partners/whmcs_saved.html b/shared/for_cloudlinux_partners/whmcs_saved.html index 68362aa41..d60c12628 100644 --- a/shared/for_cloudlinux_partners/whmcs_saved.html +++ b/shared/for_cloudlinux_partners/whmcs_saved.html @@ -39,11 +39,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/shared/index.html b/shared/index.html index a464776ef..17b5a6158 100644 --- a/shared/index.html +++ b/shared/index.html @@ -39,10 +39,10 @@ })(); - +
- + diff --git a/shared/limits/index.html b/shared/limits/index.html index a6f58695c..b4d0e4afe 100644 --- a/shared/limits/index.html +++ b/shared/limits/index.html @@ -39,7 +39,7 @@ })(); Limits - +
sidebar hamburger menu

Limits

CloudLinux OS Shared 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 Shared kernel installed, and LVE module loaded. You can check the kernel by running the following command:

uname -r
@@ -100,6 +100,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 Shared should be installed on the server.
  2. You also need to check that your kernel supports Reseller limits feature
    • CloudLinux OS Shared 6 and kernels 2.16+: not supported, you need to migrate to Hybrid.
    • CloudLinux OS Shared 6 Hybrid: supported starting from 3.10.0-714.10.2.lve1.5.3.el6h kernel.
    • CloudLinux OS Shared 7: supported starting from 3.10.0-714.10.2.lve1.5.3.el7 kernel.
    • CloudLinux OS Shared 7 Hybrid: supported
    • CloudLinux OS Shared 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 Shared 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 Shared 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.

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 Shared 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/shared/lve_manager/index.html b/shared/lve_manager/index.html index 8ea894c24..d5b7faf50 100644 --- a/shared/lve_manager/index.html +++ b/shared/lve_manager/index.html @@ -39,7 +39,7 @@ })(); 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
@@ -64,6 +64,6 @@
 

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 Shared 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 Shared 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 Shared 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 Shared.

- + diff --git a/solo/activation/index.html b/solo/activation/index.html index fd98b2a9b..7f6b70d13 100644 --- a/solo/activation/index.html +++ b/solo/activation/index.html @@ -39,7 +39,7 @@ })(); Licensing - +
sidebar hamburger menu

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 Shared 6/7/8 or converting from CentOS 6/7/ 8 to CloudLinux OS Shared 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
@@ -47,6 +47,6 @@
 

using IP-based licensing:

yum install rhn-setup --enablerepo=cloudlinux-base
 /usr/sbin/clnreg_ks
 
- + diff --git a/solo/administration/index.html b/solo/administration/index.html index b0678811c..9f4562923 100644 --- a/solo/administration/index.html +++ b/solo/administration/index.html @@ -39,7 +39,7 @@ })(); Administration - +
sidebar hamburger menu

Administration

This section contains information that will be useful for server administrators that want to automatize server configuration or do some unusual things which are not available in the WEB UI.

OS detection

To get information about the current CloudLinux OS edition, you can run the following command:

cldetect --detect-edition
@@ -49,6 +49,6 @@
 rm -f /etc/sysconfig/rhn/systemid*
 rm -f /etc/sysconfig/rhn/cl-rollout*
 

Updating templates

We strongly recommend recreating templates at least once a month to keep images fresh and up-to-date with the recent CloudLinux OS Solo repositories.

There are two ways of templates update:

  1. Recreate them from scratch each time (recommended).
  2. Boot customized template, register instance again and run the yum update command. Don't forget to remove license keys from the template as described in Finalize your template.

Next steps

Save the modified environment as the template and publish it for your clients.

- + diff --git a/solo/faq/index.html b/solo/faq/index.html index 965ff1daf..830efa679 100644 --- a/solo/faq/index.html +++ b/solo/faq/index.html @@ -39,11 +39,11 @@ })(); FAQ - +
sidebar hamburger menu

FAQ

What is the difference between CloudLinux Solo and CloudLinux OS 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 Shared?

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 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 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/solo/installation/index.html b/solo/installation/index.html index 95d666ee8..03eb81d07 100644 --- a/solo/installation/index.html +++ b/solo/installation/index.html @@ -39,11 +39,11 @@ })(); Installation - +
sidebar hamburger menu

Installation

Hardware compatibility

CloudLinux OS Solo supports all the hardware supported by RHEL/CentOS, with few exceptions. Exceptions are usually hardware that requires binary drivers, and that doesn't have any open-source alternatives.

CloudLinux OS Solo does not support ARM-based CPUs (e.g. Graviton)

With RHEL 8 (CloudLinux 8), some devices are no longer supported. You can check the entire list here.

Fresh installation

Downloading installation media

You can download the latest ISO and use it to install CloudLinux OS Solo on your server using this link.

There are multiple ISO types available:

  • CloudLinux-*-boot.iso - this ISO is made specifically for network installation and does not contain any packages inside.
  • CloudLinux-*-dvd1.iso - this one contains all packages from the network installation repository, so you can set up any possible configuration without network access.
  • CloudLinux-*-minimal.iso - this one contains only a minimal set of packages to set up a light server without GUI and Development tools.

Note

Once you install a server from the ISO, make sure you register your system and then run the yum update command to get all recent updates.

Installing in the Graphical User Interface

The graphical installation interface is the preferred method of manually installing CloudLinux OS Solo. It allows you to have full control over all available settings, including disk partitioning and storage configuration.

The graphical mode is used by default when you boot the system from the local media.

Language selection

The first screen displayed is the language selection page.

Welcome page screenshot

First, find your preferred language in the left column and then select locale in the right one. The selected language will be used during installation and also as a default language of the installed system.

After you select your language and locale, click Continue to confirm your selection and proceed to the Installation Summary.

Installation summary

The Installation summary screen is the main dashboard of your installation parameters. Most of the options which can be configured during the installation can be accessed from here.

Welcome page screenshot

The summary screen displays links to other configuration screens, those links can be in several different states, which are graphically indicated:

  • Grayed-out link means that the installer is currently updating this section. Please wait a little before accessing this section.

  • A warning symbol next to an icon means that a screen requires your attention before you start the installation.

  • Links without a warning symbol mean that the screen does not require your attention. You can still change your settings in these screens, but it is not required to start the installation.

Installation source

The first thing that you should define is where the system will be installed from. There are basically two options:

  • ISO file
  • On the network

On the network source

Use this option to download packages to be installed from a network location. This is the preferred way as you automatically receive all critical bug fixes that may affect installation.

Note

Most likely your network is not configured by default, so you can see the URL configuration field greyed out, like on the screenshot below. Please refer to the Network Configuration screen first to set up a network connection.

Unavailable network source

The correct installation URL for CloudLinux OS Solo is

https://repo.cloudlinux.com/cloudlinux/8/BaseOS/x86_64/kickstart/
-

Type in the installation URL in the corresponding field, configure the proxy if needed and press the Done button.

ISO file source

This option is primarily used as an alternative when you don't have an internet connection on a target server. It is only available if you downloaded Minimal or DVD ISO which contains some bundled packages in.

Tick the ISO file checkbox and press the Done button.

Next steps

After clicking Done, you will be redirected to the Installation Summary screen where Installation source and Software Selection links will be greyed and the Downloading package metadata message wll be shown.

Please hold on while that message disappears and proceed to the Software Selection section.

Software Selection

The Software Selection screen allows you to choose a Base Environment and Add-ons. These options control which software packages will be installed on your system during the installation process.

This screen is only available if Installation Source is properly configured and only after the installer has downloaded package metadata from the source.

It is not possible to select specific packages during a manual installation, you can only select pre-defined environments and add-ons.

To install CloudLinux OS Solo, first, choose the CloudLinux OS Solo (minimal) environment on the left of the screen.

Warning

All other environments are used to install CloudLinux OS Shared, so make sure you choose CloudLinux OS Solo (minimal).

Only one environment can be chosen, even if more are available.

Then, on the right side of the screen, select one or more add-ons which you want to install by ticking the check boxes next to each add-on.

Final preparations

Installation is almost done, all you need to do is to configure your installation target using the Installation Destination menu and create your Root Password.

Doing that, the Begin installation button becomes blue, so click it.

After this point, the installation process actually starts and changes are being made to your selected disks. It is not possible to go back to the Installation Summary and change any settings configured there; if you need to do so, you must wait for the installation process to finish, reboot your system, log in and change your settings on the installed system.

The bottom of the screen shows a progress bar and a message informing you of the current progress of the installation. When the installation finishes, you can press the Finish installation button to reboot your computer and log in to your newly installed system.

Warning

Before you finish the installation and reboot, either remove the media which you used to start the installation, or make sure that your system tries to boot from the hard drive before trying removable media. Otherwise, your computer will start the installer again instead of the installed system.

Next steps

Reboot your system, login and check EULA which is located in the /usr/share/cloudlinux-release/EULA.

Next, activate your installation in order to get updates.

Converting existing servers

Only CentOS 8/AlmaLinux 8 can be converted to the CloudLinux OS Solo 8.

Sometimes it is required to convert already existing servers with CentOS or AlmaLinux and make them CloudLinux OS Solo.

It is easy to convert your existing installation by cldeploy script. The process takes a few minutes and replaces just a handful of RPMs.

Unlike Fresh installation, converting requires a CloudLinux OS Solo license. Please refer to the guide to get the activation key.

Downloading and running conversion script

If you already have an activation key, run the following commands:

yum install wget -y
+

Type in the installation URL in the corresponding field, configure the proxy if needed and press the Done button.

ISO file source

This option is primarily used as an alternative when you don't have an internet connection on a target server. It is only available if you downloaded Minimal or DVD ISO which contains some bundled packages in.

Tick the ISO file checkbox and press the Done button.

Next steps

After clicking Done, you will be redirected to the Installation Summary screen where Installation source and Software Selection links will be greyed and the Downloading package metadata message wll be shown.

Please hold on while that message disappears and proceed to the Software Selection section.

Software Selection

The Software Selection screen allows you to choose a Base Environment and Add-ons. These options control which software packages will be installed on your system during the installation process.

This screen is only available if Installation Source is properly configured and only after the installer has downloaded package metadata from the source.

It is not possible to select specific packages during a manual installation, you can only select pre-defined environments and add-ons.

To install CloudLinux OS Solo, first, choose the CloudLinux OS Solo (minimal) environment on the left of the screen.

Warning

All other environments are used to install CloudLinux OS Shared, so make sure you choose CloudLinux OS Solo (minimal).

Only one environment can be chosen, even if more are available.

Then, on the right side of the screen, select one or more add-ons which you want to install by ticking the check boxes next to each add-on.

Final preparations

Installation is almost done, all you need to do is to configure your installation target using the Installation Destination menu and create your Root Password.

Doing that, the Begin installation button becomes blue, so click it.

After this point, the installation process actually starts and changes are being made to your selected disks. It is not possible to go back to the Installation Summary and change any settings configured there; if you need to do so, you must wait for the installation process to finish, reboot your system, log in and change your settings on the installed system.

The bottom of the screen shows a progress bar and a message informing you of the current progress of the installation. When the installation finishes, you can press the Finish installation button to reboot your computer and log in to your newly installed system.

Warning

Before you finish the installation and reboot, either remove the media which you used to start the installation, or make sure that your system tries to boot from the hard drive before trying removable media. Otherwise, your computer will start the installer again instead of the installed system.

Next steps

Reboot your system, login and check EULA which is located in the /usr/share/cloudlinux-release/EULA.

Next, activate your installation in order to get updates.

Converting existing servers

Only AlmaLinux/Rocky Linux 8+ can be converted to CloudLinux OS Solo.

Sometimes it is required to convert already existing AlmaLinux or Rocky Linux servers to CloudLinux OS Solo.

It is easy to convert your existing installation by cldeploy script. The process takes a few minutes and replaces just a handful of RPMs.

Unlike Fresh installation, converting requires a CloudLinux OS Solo license. Please refer to the guide to get the activation key.

Downloading and running conversion script

If you already have an activation key, run the following commands:

yum install wget -y
 wget https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy
 bash cldeploy -k ACTIVATION_KEY
 

Where ACTIVATION_KEY is the one that you got in the previous step.

If you want to get an IP-based license, run the following commands:

yum install wget -y
@@ -58,6 +58,6 @@
 

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 packages from the CloudLinux repo will still remain. They are the same as CentOS or AlmaLinux packages and don't have to be removed. They will be updated in the future from CentOS repositories, as new versions come out.

- + diff --git a/solo/introduction/index.html b/solo/introduction/index.html index 52afa22f8..7f1276155 100644 --- a/solo/introduction/index.html +++ b/solo/introduction/index.html @@ -39,10 +39,10 @@ })(); Introduction - +
sidebar hamburger menu

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 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.

Supported control panels

PanelSupported
cPanel SoloYes
cPanel regular with one userYes
PleskYes
DirectAdminYes
Other panelsYes
No control panelYes

CloudLinux OS editions comparison

FeaturesCloudLinux OS AdminCloudLinux OS SharedCloudLinux OS Shared Pro
Maximum amount of hosting accounts5unlimitedunlimited
Resource Limits (LVE)Yes*YesYes
Cage FSYesYesYes
MySQL GovernorNoYesYes
PHP SelectorYesYesYes
Python/Node.js SelectorsYesYesYes
Ruby SelectorYes*YesYes
HardenedPHPYesYesYes
Apache mod_lsapi PROYesYesYes
SecureLinksYesYesYes
Website monitoring toolYesYesYes
Website monitoring alertsYesYesYes
Slow Site analyzerYesYesYes
PHP X-RayYesNoYes
Centralized MonitoringNoNoYes
AccelerateWPYesNoYes
Support 24/7YesYesYes

* 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.

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.
- + diff --git a/solo/manager/index.html b/solo/manager/index.html index e90f3720f..119b447e1 100644 --- a/solo/manager/index.html +++ b/solo/manager/index.html @@ -39,7 +39,7 @@ })(); CloudLinux Manager - +
sidebar hamburger menu

CloudLinux Manager

CloudLinux Manager is a plugin for most popular control panels including cPanel, Plesk, DirectAdmin and ISPmanager (InterWorx coming soon). It allows you to control and monitor all CloudLinux OS Solo features.

CloudLinux Manager (previously LVE Manager) is accessible via the Server Configuration tab:

Warning

LVE Manager is renamed to CloudLinux Manager since cPanel v 96.0.9

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;
  • Users tab - provides access to manage user limits;
  • Options tab - provides access to user interface settings, CageFS and Python/NodeJs selectors;
  • Website Monitoring provides access to Website Monitoring and PHP Slow Site Analyzer;
  • X-Ray tab - provides access to X-Ray;
  • Selector tab - provides access to PHP Selector;
  • Smart Advice tab - provides ability to see advice list generated for your WordPress websites;
  • AccelerateWP tab - provides access to AccelerateWP;

Activation

To start using CloudLinux Manager, it must be activated with your CloudLinux OS Solo activation key.

In order to activate CloudLinux Manager features, follow the next steps:

  • Enter your CLN activation key if you already have it

    If you have IP-based license, please leave the Enter Activation Key field empty and just click Activate.

    You can read more about CloudLinux OS Solo and how to get the license here

Website Monitoring tool

Website Monitoring tool (WMT) is a 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.

You can configure the Website Monitoring tool and the 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.

Warning

For now, there is no any possibility to remove the alt-php-ssa and cl-web-monitoring-tool packages so that the Website monitoring tab will be removed. You can turn off the Website monitoring, PHP Sites Analyzer in the Settings tabs, so sites statistics will stop collecting and there will be no additional load on the server.

Main

This subtab views the latest report (for the last 24 hours) of the Website monitoring tool.

Report is regenerated each time the page is loaded, so all changes in configuration (the Settings tab) or in the list of domains will be applied immediately.

  • 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 status code 200
  • 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.

WMT Settings

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

  • Email to send report - all email notifications will be sent to this email address

Warning

If email is not specified, all notifications will be sent to control panel administrator's email.

  • 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.

WMT CLI

The wmt-api utility allows managing Website Monitoring tool via CLI.

Usage

# /usr/share/web-monitoring-tool/wmtbin/wmt-api [command] [--optional arguments]
@@ -341,6 +341,6 @@
  lvemanager #7.8.3-1
 

To start working with CloudLinux PHP Selector:

  1. Update packages
yum update lvemanager lve-utils alt-python27-cllib
 
  1. Open CloudLinux manager -> Selector tab -> Select PHP versions to install.

PHP Handlers

Compatibility matrix

Web ServerPHP Selector
Apache/suPHPYes
Apache/FCGIDYes
Apache/CGIYes
Apache/mod_lsapiYes

How to install Apache modules

You can use cPanel interface:

Administrator interface

In the Selector tab the diagnostic bar help to monitor configuration of PHP Selector

The Main Settings helps to monitor next settings

- + diff --git a/ubuntu/faq/index.html b/ubuntu/faq/index.html index 1a69816d8..1d383d4aa 100644 --- a/ubuntu/faq/index.html +++ b/ubuntu/faq/index.html @@ -39,10 +39,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?

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/ubuntu/features/index.html b/ubuntu/features/index.html index cc53a84ee..71c3ab454 100644 --- a/ubuntu/features/index.html +++ b/ubuntu/features/index.html @@ -39,7 +39,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
@@ -76,6 +76,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 299072406..ed874785a 100644 --- a/ubuntu/installation/index.html +++ b/ubuntu/installation/index.html @@ -39,7 +39,7 @@ })(); Installation - +
sidebar hamburger menu

Installation

For the current release, installation from the ISO images is not available.

Attention!

This is a beta version! We strongly don't recommend using it on the production servers!

To install the CloudLinux subsystem, run the following command:

apt install python3
@@ -47,6 +47,6 @@
 python3 ubuntu2cloudlinux.py
 reboot
 

No registration required! You can start working right after the installation.

Ubuntu2Cloudlinux explained

The ubuntu2cloudlinux.py script gives an opportunity to install CloudLinux Subsystem For Ubuntu. It is a simplier 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 done by the ubuntu2cloudlinux:

  • It 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).
  • 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 a new kernel module.
- + diff --git a/ubuntu/introduction/index.html b/ubuntu/introduction/index.html index f6b66f1b4..fc34189a0 100644 --- a/ubuntu/introduction/index.html +++ b/ubuntu/introduction/index.html @@ -39,10 +39,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® 20.04 LTS users.

Supported version of Ubuntu

We support Ubuntu 20.04 LTS.

CloudLinux OS editions comparison

FeaturesCloudLinux OS SoloCloudLinux OS AdminCloudLinux OS SharedCloudLinux OS Shared Pro
Maximum amount of hosting accounts15unlimitedunlimited
Resource Limits (LVE)NoYes*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

* 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.

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 fc245e897..21dda13d7 100644 --- a/ubuntu/troubleshooting/index.html +++ b/ubuntu/troubleshooting/index.html @@ -39,7 +39,7 @@ })(); 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 
@@ -47,6 +47,6 @@
 /var/log/dmesg - kernel module 
 

Knows Issues

  1. Please take into account that if one of the alt-python37* packages is updated, you should execute the following command to ensure the proper functionality of the LVE-stats daemon:
/sbin/service lvestats try-restart
 

List of alt-python37* packages:

  • alt-python37
  • alt-python37-raven
  • alt-python37-simplejson
  • alt-python37-sqlalchemy
  • alt-python37-alembic
  • alt-python37-libs
  • alt-python37-markupsafe
  • alt-python37-setuptools
  • alt-python37-contextlib
  • alt-python37-mako
  • alt-python27-cllib
  • alt-python37-prettytable
  • alt-python37-logilab-common
  • alt-python37-jinja2
  • alt-python37-psycopg2
  • alt-sqlite

Behavior like this will be fixed in the upcoming versions.

  1. LVE statistics work only with SQLite, other databases (e.g. MySQL, postgreSQL) will be available in the following releases.
  2. alt-php*-zts packages are not available yet.
  3. The tmpreaper package is used instead of tmpwatch.
  4. PNG format for LVE Charts does not work correctly on CloudLinux subsystem on Ubuntu (lvechart utility may produce broken images).
- + diff --git a/ubuntu/uninstalling/index.html b/ubuntu/uninstalling/index.html index 86144b4df..1764ed476 100644 --- a/ubuntu/uninstalling/index.html +++ b/ubuntu/uninstalling/index.html @@ -39,7 +39,7 @@ })(); Uninstalling - +
sidebar hamburger menu

Uninstalling

Deleting the CloudLinux Subsystem For Ubuntu

You can uninstall CloudLinux Subsystem For Ubuntu by running the following commands:

apt install python3
@@ -47,6 +47,6 @@
 
python3 ubuntu2cloudlinux.py --uninstall
 
reboot
 

In that case the script will:

  • Remove the CloudLinux OS components which are installed on your system, choosing from 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 bf93e39ef..ac8874683 100644 --- a/user-docs/index.html +++ b/user-docs/index.html @@ -39,10 +39,10 @@ })(); - +
sidebar hamburger menu

Cloudlinux Documents for end-users

Here you may find the documentation sections for end-users on Cloudlinux OS Shared & Solo.

- + diff --git a/user-docs/user-docs-shared-cloudlinux/index.html b/user-docs/user-docs-shared-cloudlinux/index.html index 1c3c93631..84ef234a9 100644 --- a/user-docs/user-docs-shared-cloudlinux/index.html +++ b/user-docs/user-docs-shared-cloudlinux/index.html @@ -39,10 +39,10 @@ })(); CloudLinux OS Shared for end-users - +
sidebar hamburger menu

CloudLinux OS Shared for end-users

Introduction

CloudLinux OS Shared 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 Shared 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 ed08d0d2d..fc6936097 100644 --- a/user-docs/user-docs-solo-cloudlinux/index.html +++ b/user-docs/user-docs-solo-cloudlinux/index.html @@ -39,7 +39,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 {
@@ -56,6 +56,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

- +