diff --git a/.DS_Store b/.DS_Store index f15272855..dff48db1c 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..f9910f226 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,35 @@ + +name: Publish to GitHub Pages + +on: + push: + branches: + - dev + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. + with: + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + # choose node.js version to use + node-version: '14' + + - name: Install and Build 🔧 # + run: | + yarn + yarn docs:build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@3.7.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages # The branch the action should deploy to. + FOLDER: docs/.vuepress/dist # The folder the action should deploy. + CLEAN: true # Automatically remove deleted files from the deploy branch diff --git a/.gitignore b/.gitignore index 91428764a..33652fd76 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ test/e2e/reports selenium-debug.log .env .idea -docs/.vuepress/dist \ No newline at end of file +docs/.vuepress/dist +.DS_Store \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index 2d8f0517b..b6b0e948f 100644 --- a/deploy.sh +++ b/deploy.sh @@ -22,4 +22,4 @@ git commit -m 'deploy [skip ci]' # if you are deploying to https://.github.io/ git push -f git@github.com:cloudlinux/cloudlinux-doc.git master:gh-pages -cd - \ No newline at end of file +cd - diff --git a/docs/.DS_Store b/docs/.DS_Store index 13654fd5a..6da057626 100644 Binary files a/docs/.DS_Store and b/docs/.DS_Store differ diff --git a/docs/.vuepress/.DS_Store b/docs/.vuepress/.DS_Store new file mode 100644 index 000000000..bbeb3c4a5 Binary files /dev/null and b/docs/.vuepress/.DS_Store differ diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 96107fd03..d4a8af25e 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -12,7 +12,7 @@ const slugifyLinks = (s) => { // set your global autometa options const autoMetaOptions = { site: { - name : 'Cloudlinux OS Documentation', + name : 'CloudLinux OS Documentation', // twitter: 'cl_docs', }, canonical_base: 'https://docs.cloudlinux.com/', @@ -35,14 +35,15 @@ module.exports = { before: info => `

${info}

`, after: '
', }], - ['disqus-spa', { shortname: 'docscloudlinuxcom' }], +// ['disqus-spa', { shortname: 'docscloudlinuxcom' }], ['@vuepress/google-analytics', { 'ga': 'UA-12711721-15' } ], - [ 'autometa', autoMetaOptions ], - [ 'separate-pages', { alwaysVisibleBlocks: ['#disqus_thread'] } ] + [ 'autometa', autoMetaOptions ] +// , +// [ 'separate-pages', { alwaysVisibleBlocks: ['#disqus_thread'] } ] ], configureWebpack: { resolve: { @@ -60,6 +61,20 @@ module.exports = { href: "https://fonts.googleapis.com/icon?family=Material+Icons" } ], + [ + "meta", + { + "http-equiv": "Content-Security-Policy", + content: "script-src 'self' 'unsafe-inline' 'unsafe-inline' 'unsafe-eval' *.survicate.com *.googletagmanager.com *.google-analytics.com *.licdn.com *.hotjar.com *.twitter.com *.facebook.net *.kernelcare.info *.twitter.com *.ads-twitter.com;" + } + ], + [ + "meta", + { + name: "referrer", + content: "unsafe-url" + } + ], [ "link", { @@ -67,6 +82,26 @@ module.exports = { href: "/favicon.ico" } ], + [ + "script", + {}, + `(function(w) { +var s = document.createElement('script'); +s.src = 'https://survey.survicate.com/workspaces/8e05b856a98802352b97e8fd3118de1f/web_surveys.js'; +s.async = true; +var e = document.getElementsByTagName('script')[0]; +e.parentNode.insertBefore(s, e); +})(window);` + ], + [ + "script", + {}, + `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); +})(window,document,'script','dataLayer','GTM-T538N4K');` + ] ], locales: { // The key is the path for the locale to be nested under. @@ -74,13 +109,13 @@ module.exports = { "/": { lang: "en-US", // this will be set as the lang attribute on title: "Documentation", - description: "CloudLinux Documentation" + description: "CloudLinux OS Shared Documentation" }, - "/ru/": { - lang: "ru", - title: "Документация", - description: "Документация CloudLinux" - } +// "/ru/": { +// lang: "ru", +// title: "Документация", +// description: "Документация CloudLinux" +// } }, theme: "cloudlinux", markdown: { @@ -98,6 +133,8 @@ module.exports = { translationSource: 'docs.cloudlinux.com', defaultURL: "/introduction/", + submitRequestURL: "https://www.cloudlinux.com/support-portal/", + hideHeading: true, redirectionMapping: urls, sidebarDepth: 2, logo: "/logo.svg", @@ -120,17 +157,18 @@ module.exports = { { text: "How to", url: - "https://cloudlinux.zendesk.com/hc/sections/115001344329-How-do-I" + "https://cloudlinux.zendesk.com/hc/en-us/categories/360002375940" }, { text: "Getting started", url: "https://www.cloudlinux.com/getting-started-with-cloudlinux-os" }, { - text: "Contact support", - url: "https://hubs.ly/H0pk7990" + text: "Submit request", + url: "https://cloudlinux.zendesk.com/hc/en-us/requests/new" }, - { text: "Blog", url: "https://www.cloudlinux.com/blog" } + { text: "Blog", url: "https://blog.cloudlinux.com/" }, + { text: "CloudLinux OS Solo Documentation", url: "https://docs.solo.cloudlinux.com/" } ], // text for the language dropdown title @@ -142,6 +180,7 @@ module.exports = { // text for the edit-on-github link editLinkText: "Edit this page", tryFree: "Try Free", + submitRequest: "Support Portal", search: "Search", // config for Service Worker serviceWorker: { @@ -151,7 +190,7 @@ module.exports = { } }, algolia: { - apiKey: "3990019335416f9a96a6a47d07e25187", + apiKey: "e6b9d79daf71aa98e2e2a51d4556f9d4", indexName: "cloudlinuxos", appId: "0TCNL6CGX8" }, @@ -163,12 +202,14 @@ module.exports = { children: [ "/introduction/", "/cloudlinux_installation/", - "/control_panel_integration/", + "/elevate/", "/limits/", - "/command-line_tools/", "/lve_manager/", - "/x-ray/", + "/cloudlinux-os-plus/", + "/cloudlinux-os-admin/", "/cloudlinux_os_components/", + "/command-line_tools/", + "/control_panel_integration/", "/cloudlinux_os_kernel/", "/for_cloudlinux_partners/", "/deprecated/" @@ -176,60 +217,60 @@ module.exports = { } ] }, - "/ru/": { - title: "Язык", - selectText: "Рус", - label: "Русский", - editLinkText: "Редактировать", - tryFree: "Попробовать бесплатно", - search: "Поиск", - serviceWorker: { - updatePopup: { - message: "Доступен новый контент", - buttonText: "Обновить" - } - }, - algolia: { - apiKey: "3990019335416f9a96a6a47d07e25187", - indexName: "cloudlinuxos-ru", - appId: "0TCNL6CGX8" - }, - stayInTouch: "Будем на связи", - bottomLinks: [ - { - text: "Инструкции", - url: "https://cloudlinux.zendesk.com/hc/sections/115001344329-How-do-I" - }, - { - text: "С чего начать", - url: "https://www.cloudlinux.com/getting-started-with-cloudlinux-os" - }, - { - text: "Техподдержка", - url: "https://hubs.ly/H0pk7990" - }, - { text: "Блог", url: "https://www.cloudlinux.com/blog" } - ], - sidebar: [ - { - title: "Содержание", - collapsable: false, - children: [ - "/ru/introduction/", - "/ru/cloudlinux_installation/", - "/ru/control_panel_integration/", - "/ru/limits/", - "/ru/command-line_tools/", - "/ru/lve_manager/", - "/ru/x-ray/", - "/ru/cloudlinux_os_components/", - "/ru/cloudlinux_os_kernel/", - "/ru/for_cloudlinux_partners/", - "/ru/deprecated/" - ] - } - ] - } +// "/ru/": { +// title: "Язык", +// selectText: "Рус", +// label: "Русский", +// editLinkText: "Редактировать", +// tryFree: "Попробовать бесплатно", +// search: "Поиск", +// serviceWorker: { +// updatePopup: { +// message: "Доступен новый контент", +// buttonText: "Обновить" +// } +// }, +// algolia: { +// apiKey: "3990019335416f9a96a6a47d07e25187", +// indexName: "cloudlinuxos-ru", +// appId: "0TCNL6CGX8" +// }, +// stayInTouch: "Будем на связи", +// bottomLinks: [ +// { +// text: "Инструкции", +// url: "https://cloudlinux.zendesk.com/hc/sections/115001344329-How-do-I" +// }, +// { +// text: "С чего начать", +// url: "https://www.cloudlinux.com/getting-started-with-cloudlinux-os" +// }, +// { +// text: "Техподдержка", +// url: "https://hubs.ly/H0pk7990" +// }, +// { text: "Блог", url: "https://www.cloudlinux.com/blog" } +// ], +// sidebar: [ +// { +// title: "Содержание", +// collapsable: false, +// children: [ +// "/ru/introduction/", + // "/ru/cloudlinux_installation/", + // "/ru/limits/", + // "/ru/lve_manager/", + // "/ru/cloudlinux-os-plus/", + // "/ru/cloudlinux_os_components/", + // "/ru/command-line_tools/", + // "/ru/control_panel_integration/", + // "/ru/cloudlinux_os_kernel/", +// "/ru/for_cloudlinux_partners/" + // "/ru/deprecated/" +// ] +// } +// ] +// } } } }; diff --git a/docs/.vuepress/public/.DS_Store b/docs/.vuepress/public/.DS_Store index 74e8fde2b..3b8c75e3a 100644 Binary files a/docs/.vuepress/public/.DS_Store and b/docs/.vuepress/public/.DS_Store differ diff --git a/docs/.vuepress/public/cloudlinux-xmlrpc-api.pdf b/docs/.vuepress/public/cloudlinux-xmlrpc-api.pdf new file mode 100644 index 000000000..41698223a Binary files /dev/null and b/docs/.vuepress/public/cloudlinux-xmlrpc-api.pdf differ diff --git a/docs/.vuepress/public/cloudlinux_rest_api.pdf b/docs/.vuepress/public/cloudlinux_rest_api.pdf index b53ec8359..135554cf5 100644 Binary files a/docs/.vuepress/public/cloudlinux_rest_api.pdf and b/docs/.vuepress/public/cloudlinux_rest_api.pdf differ diff --git a/docs/.vuepress/public/googleae1a0cf937cbdac2.html b/docs/.vuepress/public/googleae1a0cf937cbdac2.html new file mode 100644 index 000000000..16f3e7401 --- /dev/null +++ b/docs/.vuepress/public/googleae1a0cf937cbdac2.html @@ -0,0 +1 @@ +google-site-verification: googleae1a0cf937cbdac2.html \ No newline at end of file diff --git a/docs/.vuepress/public/images/AWPAdmin.png b/docs/.vuepress/public/images/AWPAdmin.png new file mode 100644 index 000000000..dc9e8cf79 Binary files /dev/null and b/docs/.vuepress/public/images/AWPAdmin.png differ diff --git a/docs/.vuepress/public/images/AWPBrokenPHP.png b/docs/.vuepress/public/images/AWPBrokenPHP.png new file mode 100644 index 000000000..41ab367ec Binary files /dev/null and b/docs/.vuepress/public/images/AWPBrokenPHP.png differ diff --git a/docs/.vuepress/public/images/AWPDisable.png b/docs/.vuepress/public/images/AWPDisable.png new file mode 100644 index 000000000..b904f9c05 Binary files /dev/null and b/docs/.vuepress/public/images/AWPDisable.png differ diff --git a/docs/.vuepress/public/images/AWPFilters.png b/docs/.vuepress/public/images/AWPFilters.png new file mode 100644 index 000000000..e66a268cf Binary files /dev/null and b/docs/.vuepress/public/images/AWPFilters.png differ diff --git a/docs/.vuepress/public/images/AWPNoRedis.png b/docs/.vuepress/public/images/AWPNoRedis.png new file mode 100644 index 000000000..903b43202 Binary files /dev/null and b/docs/.vuepress/public/images/AWPNoRedis.png differ diff --git a/docs/.vuepress/public/images/AWPStats.png b/docs/.vuepress/public/images/AWPStats.png new file mode 100644 index 000000000..54d8877de Binary files /dev/null and b/docs/.vuepress/public/images/AWPStats.png differ diff --git a/docs/.vuepress/public/images/AWPStatsPremium.png b/docs/.vuepress/public/images/AWPStatsPremium.png new file mode 100644 index 000000000..1ec3caeb5 Binary files /dev/null and b/docs/.vuepress/public/images/AWPStatsPremium.png differ diff --git a/docs/.vuepress/public/images/AccelerateWPMain.png b/docs/.vuepress/public/images/AccelerateWPMain.png new file mode 100644 index 000000000..1dbd6e991 Binary files /dev/null and b/docs/.vuepress/public/images/AccelerateWPMain.png differ diff --git a/docs/.vuepress/public/images/AllowBtns.png b/docs/.vuepress/public/images/AllowBtns.png new file mode 100644 index 000000000..3534191d3 Binary files /dev/null and b/docs/.vuepress/public/images/AllowBtns.png differ diff --git a/docs/.vuepress/public/images/AutoLogout.png b/docs/.vuepress/public/images/AutoLogout.png new file mode 100644 index 000000000..64afa3e9c Binary files /dev/null and b/docs/.vuepress/public/images/AutoLogout.png differ diff --git a/docs/.vuepress/public/images/AzureSearch.png b/docs/.vuepress/public/images/AzureSearch.png new file mode 100644 index 000000000..5de669801 Binary files /dev/null and b/docs/.vuepress/public/images/AzureSearch.png differ diff --git a/docs/.vuepress/public/images/AzureSwitch.png b/docs/.vuepress/public/images/AzureSwitch.png new file mode 100644 index 000000000..c0818af02 Binary files /dev/null and b/docs/.vuepress/public/images/AzureSwitch.png differ diff --git a/docs/.vuepress/public/images/AzureVirt.png b/docs/.vuepress/public/images/AzureVirt.png new file mode 100644 index 000000000..56065c475 Binary files /dev/null and b/docs/.vuepress/public/images/AzureVirt.png differ diff --git a/docs/.vuepress/public/images/CL-hide-ruby.png b/docs/.vuepress/public/images/CL-hide-ruby.png new file mode 100644 index 000000000..d6ce17628 Binary files /dev/null and b/docs/.vuepress/public/images/CL-hide-ruby.png differ diff --git a/docs/.vuepress/public/images/CLWPOSError.png b/docs/.vuepress/public/images/CLWPOSError.png new file mode 100644 index 000000000..8bd11f0cc Binary files /dev/null and b/docs/.vuepress/public/images/CLWPOSError.png differ diff --git a/docs/.vuepress/public/images/CLWizardInstallation.png b/docs/.vuepress/public/images/CLWizardInstallation.png new file mode 100644 index 000000000..aaa1d68d5 Binary files /dev/null and b/docs/.vuepress/public/images/CLWizardInstallation.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager1.png b/docs/.vuepress/public/images/CMAlertManager1.png new file mode 100644 index 000000000..3086cdade Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager1.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager3.png b/docs/.vuepress/public/images/CMAlertManager3.png new file mode 100644 index 000000000..00bae4f00 Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager3.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager4.png b/docs/.vuepress/public/images/CMAlertManager4.png new file mode 100644 index 000000000..ce0583d58 Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager4.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager5.png b/docs/.vuepress/public/images/CMAlertManager5.png new file mode 100644 index 000000000..b4777847c Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager5.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager6.png b/docs/.vuepress/public/images/CMAlertManager6.png new file mode 100644 index 000000000..64166de11 Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager6.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager7.png b/docs/.vuepress/public/images/CMAlertManager7.png new file mode 100644 index 000000000..16be0c8e3 Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager7.png differ diff --git a/docs/.vuepress/public/images/CMAlertManager8.png b/docs/.vuepress/public/images/CMAlertManager8.png new file mode 100644 index 000000000..3de8103f9 Binary files /dev/null and b/docs/.vuepress/public/images/CMAlertManager8.png differ diff --git a/docs/.vuepress/public/images/CMAllServers.png b/docs/.vuepress/public/images/CMAllServers.png new file mode 100644 index 000000000..57606ca68 Binary files /dev/null and b/docs/.vuepress/public/images/CMAllServers.png differ diff --git a/docs/.vuepress/public/images/CMApacheConnections.png b/docs/.vuepress/public/images/CMApacheConnections.png new file mode 100644 index 000000000..f082abb91 Binary files /dev/null and b/docs/.vuepress/public/images/CMApacheConnections.png differ diff --git a/docs/.vuepress/public/images/CMCLNAccount.png b/docs/.vuepress/public/images/CMCLNAccount.png new file mode 100644 index 000000000..80fc3a865 Binary files /dev/null and b/docs/.vuepress/public/images/CMCLNAccount.png differ diff --git a/docs/.vuepress/public/images/CMDiskIOpsCompleted.png b/docs/.vuepress/public/images/CMDiskIOpsCompleted.png new file mode 100644 index 000000000..a78481b66 Binary files /dev/null and b/docs/.vuepress/public/images/CMDiskIOpsCompleted.png differ diff --git a/docs/.vuepress/public/images/CMDiskReadWriteData.png b/docs/.vuepress/public/images/CMDiskReadWriteData.png new file mode 100644 index 000000000..ed9dadb8b Binary files /dev/null and b/docs/.vuepress/public/images/CMDiskReadWriteData.png differ diff --git a/docs/.vuepress/public/images/CMDiskReadWriteTime.png b/docs/.vuepress/public/images/CMDiskReadWriteTime.png new file mode 100644 index 000000000..0c1f60905 Binary files /dev/null and b/docs/.vuepress/public/images/CMDiskReadWriteTime.png differ diff --git a/docs/.vuepress/public/images/CMDiskSpaceUsage.png b/docs/.vuepress/public/images/CMDiskSpaceUsage.png new file mode 100644 index 000000000..4de2268d9 Binary files /dev/null and b/docs/.vuepress/public/images/CMDiskSpaceUsage.png differ diff --git a/docs/.vuepress/public/images/CMDiskSpaceUsageBasics.png b/docs/.vuepress/public/images/CMDiskSpaceUsageBasics.png new file mode 100644 index 000000000..36c44da6e Binary files /dev/null and b/docs/.vuepress/public/images/CMDiskSpaceUsageBasics.png differ diff --git a/docs/.vuepress/public/images/CMInstallationProd.png b/docs/.vuepress/public/images/CMInstallationProd.png new file mode 100644 index 000000000..048cff808 Binary files /dev/null and b/docs/.vuepress/public/images/CMInstallationProd.png differ diff --git a/docs/.vuepress/public/images/CMMemoryUsage.png b/docs/.vuepress/public/images/CMMemoryUsage.png new file mode 100644 index 000000000..21ca31cb1 Binary files /dev/null and b/docs/.vuepress/public/images/CMMemoryUsage.png differ diff --git a/docs/.vuepress/public/images/CMMostLoadedUsers.png b/docs/.vuepress/public/images/CMMostLoadedUsers.png new file mode 100644 index 000000000..3d4c4b2b0 Binary files /dev/null and b/docs/.vuepress/public/images/CMMostLoadedUsers.png differ diff --git a/docs/.vuepress/public/images/CMMostPopularStates.png b/docs/.vuepress/public/images/CMMostPopularStates.png new file mode 100644 index 000000000..7552f1ea1 Binary files /dev/null and b/docs/.vuepress/public/images/CMMostPopularStates.png differ diff --git a/docs/.vuepress/public/images/CMMySQLQueries.png b/docs/.vuepress/public/images/CMMySQLQueries.png new file mode 100644 index 000000000..1c771a27c Binary files /dev/null and b/docs/.vuepress/public/images/CMMySQLQueries.png differ diff --git a/docs/.vuepress/public/images/CMNetworkTrafficUsage.png b/docs/.vuepress/public/images/CMNetworkTrafficUsage.png new file mode 100644 index 000000000..99608a8fb Binary files /dev/null and b/docs/.vuepress/public/images/CMNetworkTrafficUsage.png differ diff --git a/docs/.vuepress/public/images/CMOpenFileDescriptorContextSwitches.png b/docs/.vuepress/public/images/CMOpenFileDescriptorContextSwitches.png new file mode 100644 index 000000000..af429ecb0 Binary files /dev/null and b/docs/.vuepress/public/images/CMOpenFileDescriptorContextSwitches.png differ diff --git a/docs/.vuepress/public/images/CMSCPUUsag.png b/docs/.vuepress/public/images/CMSCPUUsag.png new file mode 100644 index 000000000..7dfb165af Binary files /dev/null and b/docs/.vuepress/public/images/CMSCPUUsag.png differ diff --git a/docs/.vuepress/public/images/CMSystemLoad.png b/docs/.vuepress/public/images/CMSystemLoad.png new file mode 100644 index 000000000..2e77616cc Binary files /dev/null and b/docs/.vuepress/public/images/CMSystemLoad.png differ diff --git a/docs/.vuepress/public/images/CMTimeSpentDoingIO.png b/docs/.vuepress/public/images/CMTimeSpentDoingIO.png new file mode 100644 index 000000000..5c7b30a99 Binary files /dev/null and b/docs/.vuepress/public/images/CMTimeSpentDoingIO.png differ diff --git a/docs/.vuepress/public/images/CMUPdates.png b/docs/.vuepress/public/images/CMUPdates.png new file mode 100644 index 000000000..39b90e086 Binary files /dev/null and b/docs/.vuepress/public/images/CMUPdates.png differ diff --git a/docs/.vuepress/public/images/CMUsers.png b/docs/.vuepress/public/images/CMUsers.png new file mode 100644 index 000000000..2bce007dc Binary files /dev/null and b/docs/.vuepress/public/images/CMUsers.png differ diff --git a/docs/.vuepress/public/images/CMUsersCharts.png b/docs/.vuepress/public/images/CMUsersCharts.png new file mode 100644 index 000000000..74c1f22bb Binary files /dev/null and b/docs/.vuepress/public/images/CMUsersCharts.png differ diff --git a/docs/.vuepress/public/images/CMvalue.png b/docs/.vuepress/public/images/CMvalue.png new file mode 100644 index 000000000..791647b5f Binary files /dev/null and b/docs/.vuepress/public/images/CMvalue.png differ diff --git a/docs/.vuepress/public/images/CPUIOLimiting.png b/docs/.vuepress/public/images/CPUIOLimiting.png new file mode 100644 index 000000000..9205fae75 Binary files /dev/null and b/docs/.vuepress/public/images/CPUIOLimiting.png differ diff --git a/docs/.vuepress/public/images/Chart1.png b/docs/.vuepress/public/images/Chart1.png new file mode 100644 index 000000000..b39e8835e Binary files /dev/null and b/docs/.vuepress/public/images/Chart1.png differ diff --git a/docs/.vuepress/public/images/Chart2.png b/docs/.vuepress/public/images/Chart2.png new file mode 100644 index 000000000..86d6b220f Binary files /dev/null and b/docs/.vuepress/public/images/Chart2.png differ diff --git a/docs/.vuepress/public/images/Chart3.png b/docs/.vuepress/public/images/Chart3.png new file mode 100644 index 000000000..185631bcc Binary files /dev/null and b/docs/.vuepress/public/images/Chart3.png differ diff --git a/docs/.vuepress/public/images/Code200.png b/docs/.vuepress/public/images/Code200.png new file mode 100644 index 000000000..14e9e4ebf Binary files /dev/null and b/docs/.vuepress/public/images/Code200.png differ diff --git a/docs/.vuepress/public/images/DashboardVZ.png b/docs/.vuepress/public/images/DashboardVZ.png new file mode 100644 index 000000000..de28161af Binary files /dev/null and b/docs/.vuepress/public/images/DashboardVZ.png differ diff --git a/docs/.vuepress/public/images/EmailNotifications.png b/docs/.vuepress/public/images/EmailNotifications.png new file mode 100644 index 000000000..299d59bba Binary files /dev/null and b/docs/.vuepress/public/images/EmailNotifications.png differ diff --git a/docs/.vuepress/public/images/EnableMultiPHP.png b/docs/.vuepress/public/images/EnableMultiPHP.png new file mode 100644 index 000000000..c7e5019ce Binary files /dev/null and b/docs/.vuepress/public/images/EnableMultiPHP.png differ diff --git a/docs/.vuepress/public/images/FilterIndicator.png b/docs/.vuepress/public/images/FilterIndicator.png new file mode 100644 index 000000000..a8b031801 Binary files /dev/null and b/docs/.vuepress/public/images/FilterIndicator.png differ diff --git a/docs/.vuepress/public/images/HideXRayAppCheckbox.png b/docs/.vuepress/public/images/HideXRayAppCheckbox.png new file mode 100644 index 000000000..8a82d5efb Binary files /dev/null and b/docs/.vuepress/public/images/HideXRayAppCheckbox.png differ diff --git a/docs/.vuepress/public/images/IncompatibilityWarning.png b/docs/.vuepress/public/images/IncompatibilityWarning.png new file mode 100644 index 000000000..cb3bfc75c Binary files /dev/null and b/docs/.vuepress/public/images/IncompatibilityWarning.png differ diff --git a/docs/.vuepress/public/images/IniPath.png b/docs/.vuepress/public/images/IniPath.png new file mode 100644 index 000000000..fcde46374 Binary files /dev/null and b/docs/.vuepress/public/images/IniPath.png differ diff --git a/docs/.vuepress/public/images/LVEFaultsMarker.png b/docs/.vuepress/public/images/LVEFaultsMarker.png new file mode 100644 index 000000000..43bb15354 Binary files /dev/null and b/docs/.vuepress/public/images/LVEFaultsMarker.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedAdditionSettings.png b/docs/.vuepress/public/images/LiteSpeedAdditionSettings.png new file mode 100644 index 000000000..0b00adeed Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedAdditionSettings.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedExternalAppTab.png b/docs/.vuepress/public/images/LiteSpeedExternalAppTab.png new file mode 100644 index 000000000..5cdd2c4da Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedExternalAppTab.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedForOtherCP.png b/docs/.vuepress/public/images/LiteSpeedForOtherCP.png new file mode 100644 index 000000000..3bcaf8cef Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedForOtherCP.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedForPlesk.png b/docs/.vuepress/public/images/LiteSpeedForPlesk.png new file mode 100644 index 000000000..1f720c8ea Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedForPlesk.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedHandlerName.png b/docs/.vuepress/public/images/LiteSpeedHandlerName.png new file mode 100644 index 000000000..1fa405134 Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedHandlerName.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedOtherCP.png b/docs/.vuepress/public/images/LiteSpeedOtherCP.png new file mode 100644 index 000000000..409af0e32 Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedOtherCP.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedPlesk.png b/docs/.vuepress/public/images/LiteSpeedPlesk.png new file mode 100644 index 000000000..42efbf6e2 Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedPlesk.png differ diff --git a/docs/.vuepress/public/images/LiteSpeedScriptHandler.png b/docs/.vuepress/public/images/LiteSpeedScriptHandler.png new file mode 100644 index 000000000..dcab0a38a Binary files /dev/null and b/docs/.vuepress/public/images/LiteSpeedScriptHandler.png differ diff --git a/docs/.vuepress/public/images/LsapiVZ1.png b/docs/.vuepress/public/images/LsapiVZ1.png new file mode 100644 index 000000000..d30380cda Binary files /dev/null and b/docs/.vuepress/public/images/LsapiVZ1.png differ diff --git a/docs/.vuepress/public/images/LsapiVZ2.png b/docs/.vuepress/public/images/LsapiVZ2.png new file mode 100644 index 000000000..5d24da04b Binary files /dev/null and b/docs/.vuepress/public/images/LsapiVZ2.png differ diff --git a/docs/.vuepress/public/images/LsapiVZ3.png b/docs/.vuepress/public/images/LsapiVZ3.png new file mode 100644 index 000000000..e20991bc0 Binary files /dev/null and b/docs/.vuepress/public/images/LsapiVZ3.png differ diff --git a/docs/.vuepress/public/images/MainUsersTab.png b/docs/.vuepress/public/images/MainUsersTab.png new file mode 100644 index 000000000..38cd0eede Binary files /dev/null and b/docs/.vuepress/public/images/MainUsersTab.png differ diff --git a/docs/.vuepress/public/images/ModuleAllowed.png b/docs/.vuepress/public/images/ModuleAllowed.png new file mode 100644 index 000000000..36dafe197 Binary files /dev/null and b/docs/.vuepress/public/images/ModuleAllowed.png differ diff --git a/docs/.vuepress/public/images/NewTurnedOff.png b/docs/.vuepress/public/images/NewTurnedOff.png new file mode 100644 index 000000000..a92ae57d5 Binary files /dev/null and b/docs/.vuepress/public/images/NewTurnedOff.png differ diff --git a/docs/.vuepress/public/images/NewTurnedOn.png b/docs/.vuepress/public/images/NewTurnedOn.png new file mode 100644 index 000000000..5b3f12478 Binary files /dev/null and b/docs/.vuepress/public/images/NewTurnedOn.png differ diff --git a/docs/.vuepress/public/images/PDFReport.png b/docs/.vuepress/public/images/PDFReport.png new file mode 100644 index 000000000..7c6e900f3 Binary files /dev/null and b/docs/.vuepress/public/images/PDFReport.png differ diff --git a/docs/.vuepress/public/images/PluginUnavailable.png b/docs/.vuepress/public/images/PluginUnavailable.png new file mode 100644 index 000000000..ba49c5439 Binary files /dev/null and b/docs/.vuepress/public/images/PluginUnavailable.png differ diff --git a/docs/.vuepress/public/images/RecordedSession.png b/docs/.vuepress/public/images/RecordedSession.png new file mode 100644 index 000000000..6828f0560 Binary files /dev/null and b/docs/.vuepress/public/images/RecordedSession.png differ diff --git a/docs/.vuepress/public/images/RecordedSessions.png b/docs/.vuepress/public/images/RecordedSessions.png new file mode 100644 index 000000000..ee6f931a7 Binary files /dev/null and b/docs/.vuepress/public/images/RecordedSessions.png differ diff --git a/docs/.vuepress/public/images/RequestDetails.png b/docs/.vuepress/public/images/RequestDetails.png new file mode 100644 index 000000000..c9facbaf9 Binary files /dev/null and b/docs/.vuepress/public/images/RequestDetails.png differ diff --git a/docs/.vuepress/public/images/RescanBtn.png b/docs/.vuepress/public/images/RescanBtn.png new file mode 100644 index 000000000..ce8758ce7 Binary files /dev/null and b/docs/.vuepress/public/images/RescanBtn.png differ diff --git a/docs/.vuepress/public/images/ResellerLimits-cPanel.png b/docs/.vuepress/public/images/ResellerLimits-cPanel.png new file mode 100644 index 000000000..2aa793b86 Binary files /dev/null and b/docs/.vuepress/public/images/ResellerLimits-cPanel.png differ diff --git a/docs/.vuepress/public/images/ResellerLimits-diagram.png b/docs/.vuepress/public/images/ResellerLimits-diagram.png new file mode 100644 index 000000000..87165b69c Binary files /dev/null and b/docs/.vuepress/public/images/ResellerLimits-diagram.png differ diff --git a/docs/.vuepress/public/images/ResellerLimits-enabling.png b/docs/.vuepress/public/images/ResellerLimits-enabling.png new file mode 100644 index 000000000..ea06958e0 Binary files /dev/null and b/docs/.vuepress/public/images/ResellerLimits-enabling.png differ diff --git a/docs/.vuepress/public/images/SlowSiteAnalyzerEmailNotifications.png b/docs/.vuepress/public/images/SlowSiteAnalyzerEmailNotifications.png new file mode 100644 index 000000000..31daac5a3 Binary files /dev/null and b/docs/.vuepress/public/images/SlowSiteAnalyzerEmailNotifications.png differ diff --git a/docs/.vuepress/public/images/TopSlow.png b/docs/.vuepress/public/images/TopSlow.png new file mode 100644 index 000000000..7fd037327 Binary files /dev/null and b/docs/.vuepress/public/images/TopSlow.png differ diff --git a/docs/.vuepress/public/images/TurningOnOffNotifications.png b/docs/.vuepress/public/images/TurningOnOffNotifications.png new file mode 100644 index 000000000..da25bdf59 Binary files /dev/null and b/docs/.vuepress/public/images/TurningOnOffNotifications.png differ diff --git a/docs/.vuepress/public/images/UsersEnabled.png b/docs/.vuepress/public/images/UsersEnabled.png new file mode 100644 index 000000000..763a59646 Binary files /dev/null and b/docs/.vuepress/public/images/UsersEnabled.png differ diff --git a/docs/.vuepress/public/images/ViaMultiPHPManager.png b/docs/.vuepress/public/images/ViaMultiPHPManager.png new file mode 100644 index 000000000..2e7435f87 Binary files /dev/null and b/docs/.vuepress/public/images/ViaMultiPHPManager.png differ diff --git a/docs/.vuepress/public/images/WPOSAdminUI.png b/docs/.vuepress/public/images/WPOSAdminUI.png new file mode 100644 index 000000000..e373aff8b Binary files /dev/null and b/docs/.vuepress/public/images/WPOSAdminUI.png differ diff --git a/docs/.vuepress/public/images/WPOSAllowTool.png b/docs/.vuepress/public/images/WPOSAllowTool.png new file mode 100644 index 000000000..23ff19777 Binary files /dev/null and b/docs/.vuepress/public/images/WPOSAllowTool.png differ diff --git a/docs/.vuepress/public/images/WPOSFilters.png b/docs/.vuepress/public/images/WPOSFilters.png new file mode 100644 index 000000000..c33d730f1 Binary files /dev/null and b/docs/.vuepress/public/images/WPOSFilters.png differ diff --git a/docs/.vuepress/public/images/WPOSIconCheck.png b/docs/.vuepress/public/images/WPOSIconCheck.png new file mode 100644 index 000000000..a7a38be15 Binary files /dev/null and b/docs/.vuepress/public/images/WPOSIconCheck.png differ diff --git a/docs/.vuepress/public/images/WPOptimizationSuiteIcon.png b/docs/.vuepress/public/images/WPOptimizationSuiteIcon.png new file mode 100644 index 000000000..ab34ad7cd Binary files /dev/null and b/docs/.vuepress/public/images/WPOptimizationSuiteIcon.png differ diff --git a/docs/.vuepress/public/images/WebsiteMonitoringMain.png b/docs/.vuepress/public/images/WebsiteMonitoringMain.png new file mode 100644 index 000000000..8e94945d8 Binary files /dev/null and b/docs/.vuepress/public/images/WebsiteMonitoringMain.png differ diff --git a/docs/.vuepress/public/images/WebsiteMonitoringPHPSiteAnalyzer.png b/docs/.vuepress/public/images/WebsiteMonitoringPHPSiteAnalyzer.png new file mode 100644 index 000000000..27b733cba Binary files /dev/null and b/docs/.vuepress/public/images/WebsiteMonitoringPHPSiteAnalyzer.png differ diff --git a/docs/.vuepress/public/images/WebsiteMonitoringSlider.png b/docs/.vuepress/public/images/WebsiteMonitoringSlider.png new file mode 100644 index 000000000..865bbe95b Binary files /dev/null and b/docs/.vuepress/public/images/WebsiteMonitoringSlider.png differ diff --git a/docs/.vuepress/public/images/WebsiteMonitoringSlider1.png b/docs/.vuepress/public/images/WebsiteMonitoringSlider1.png new file mode 100644 index 000000000..b86ee1b18 Binary files /dev/null and b/docs/.vuepress/public/images/WebsiteMonitoringSlider1.png differ diff --git a/docs/.vuepress/public/images/WizardVZ.png b/docs/.vuepress/public/images/WizardVZ.png new file mode 100644 index 000000000..19b3d8331 Binary files /dev/null and b/docs/.vuepress/public/images/WizardVZ.png differ diff --git a/docs/.vuepress/public/images/XRayAppUIIcon.png b/docs/.vuepress/public/images/XRayAppUIIcon.png new file mode 100644 index 000000000..839a0b52e Binary files /dev/null and b/docs/.vuepress/public/images/XRayAppUIIcon.png differ diff --git a/docs/.vuepress/public/images/XRayAutotracingtaskstab.png b/docs/.vuepress/public/images/XRayAutotracingtaskstab.png new file mode 100644 index 000000000..4b3bc9400 Binary files /dev/null and b/docs/.vuepress/public/images/XRayAutotracingtaskstab.png differ diff --git a/docs/.vuepress/public/images/XRayCollectedRequests.png b/docs/.vuepress/public/images/XRayCollectedRequests.png index bc161db3f..224509b25 100644 Binary files a/docs/.vuepress/public/images/XRayCollectedRequests.png and b/docs/.vuepress/public/images/XRayCollectedRequests.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportByHourRequests.png b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportByHourRequests.png new file mode 100644 index 000000000..d852896b6 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportByHourRequests.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportCollectedRequests.png b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportCollectedRequests.png new file mode 100644 index 000000000..b23ce70fc Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportCollectedRequests.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportExample.png b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportExample.png new file mode 100644 index 000000000..9e9e86ef6 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportExample.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportRequestDetails.png b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportRequestDetails.png new file mode 100644 index 000000000..faf0da446 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTaskDaylyReportRequestDetails.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTasksList.png b/docs/.vuepress/public/images/XRayContinuousTasksList.png new file mode 100644 index 000000000..8dd82b0cc Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTasksList.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTracingTab.png b/docs/.vuepress/public/images/XRayContinuousTracingTab.png new file mode 100644 index 000000000..bb48baac1 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTracingTab.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTracingTasksList.png b/docs/.vuepress/public/images/XRayContinuousTracingTasksList.png new file mode 100644 index 000000000..198f7691a Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTracingTasksList.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTracingTasksListCreated.png b/docs/.vuepress/public/images/XRayContinuousTracingTasksListCreated.png new file mode 100644 index 000000000..2cc0e42ed Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTracingTasksListCreated.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTracingTasksListGrouped.png b/docs/.vuepress/public/images/XRayContinuousTracingTasksListGrouped.png new file mode 100644 index 000000000..564c8a678 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTracingTasksListGrouped.png differ diff --git a/docs/.vuepress/public/images/XRayContinuousTracingTasksRequestsList.png b/docs/.vuepress/public/images/XRayContinuousTracingTasksRequestsList.png new file mode 100644 index 000000000..b3a517429 Binary files /dev/null and b/docs/.vuepress/public/images/XRayContinuousTracingTasksRequestsList.png differ diff --git a/docs/.vuepress/public/images/XRayCreateContinuousTaskBtn.png b/docs/.vuepress/public/images/XRayCreateContinuousTaskBtn.png new file mode 100644 index 000000000..ec857b78f Binary files /dev/null and b/docs/.vuepress/public/images/XRayCreateContinuousTaskBtn.png differ diff --git a/docs/.vuepress/public/images/XRayCreateContinuousTaskForm.png b/docs/.vuepress/public/images/XRayCreateContinuousTaskForm.png new file mode 100644 index 000000000..0f17c23fc Binary files /dev/null and b/docs/.vuepress/public/images/XRayCreateContinuousTaskForm.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserFPMerror.png b/docs/.vuepress/public/images/XRayEndUserFPMerror.png new file mode 100644 index 000000000..d9d161f8e Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserFPMerror.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserUI.png b/docs/.vuepress/public/images/XRayEndUserUI.png new file mode 100644 index 000000000..91f3cad3d Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserUI.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserUIError.png b/docs/.vuepress/public/images/XRayEndUserUIError.png new file mode 100644 index 000000000..5778db4cb Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserUIError.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserUIStart.png b/docs/.vuepress/public/images/XRayEndUserUIStart.png new file mode 100644 index 000000000..5a9c5f4d3 Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserUIStart.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserUIWarning.png b/docs/.vuepress/public/images/XRayEndUserUIWarning.png new file mode 100644 index 000000000..66be2d7f1 Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserUIWarning.png differ diff --git a/docs/.vuepress/public/images/XRayEndUserUiSpecifyURL.png b/docs/.vuepress/public/images/XRayEndUserUiSpecifyURL.png new file mode 100644 index 000000000..951f28035 Binary files /dev/null and b/docs/.vuepress/public/images/XRayEndUserUiSpecifyURL.png differ diff --git a/docs/.vuepress/public/images/XRayMonitoringReport.png b/docs/.vuepress/public/images/XRayMonitoringReport.png new file mode 100644 index 000000000..1509afa7d Binary files /dev/null and b/docs/.vuepress/public/images/XRayMonitoringReport.png differ diff --git a/docs/.vuepress/public/images/XRaySmartAdviceDetails.png b/docs/.vuepress/public/images/XRaySmartAdviceDetails.png new file mode 100644 index 000000000..303861ebc Binary files /dev/null and b/docs/.vuepress/public/images/XRaySmartAdviceDetails.png differ diff --git a/docs/.vuepress/public/images/XRaySmartAdviceError.png b/docs/.vuepress/public/images/XRaySmartAdviceError.png new file mode 100644 index 000000000..36f5c675d Binary files /dev/null and b/docs/.vuepress/public/images/XRaySmartAdviceError.png differ diff --git a/docs/.vuepress/public/images/XRaySmartAdviceMainTab.png b/docs/.vuepress/public/images/XRaySmartAdviceMainTab.png new file mode 100644 index 000000000..39093cdcc Binary files /dev/null and b/docs/.vuepress/public/images/XRaySmartAdviceMainTab.png differ diff --git a/docs/.vuepress/public/images/XRayTracingTaskCreated.png b/docs/.vuepress/public/images/XRayTracingTaskCreated.png new file mode 100644 index 000000000..9b1e07506 Binary files /dev/null and b/docs/.vuepress/public/images/XRayTracingTaskCreated.png differ diff --git a/docs/.vuepress/public/images/XRayTrcingTaskList1.png b/docs/.vuepress/public/images/XRayTrcingTaskList1.png index 6fdbff024..959f707f4 100644 Binary files a/docs/.vuepress/public/images/XRayTrcingTaskList1.png and b/docs/.vuepress/public/images/XRayTrcingTaskList1.png differ diff --git a/docs/.vuepress/public/images/XRayView1.png b/docs/.vuepress/public/images/XRayView1.png new file mode 100644 index 000000000..4c1e9e46d Binary files /dev/null and b/docs/.vuepress/public/images/XRayView1.png differ diff --git a/docs/.vuepress/public/images/mysql_packages_limits.png b/docs/.vuepress/public/images/mysql_packages_limits.png new file mode 100644 index 000000000..8663ed925 Binary files /dev/null and b/docs/.vuepress/public/images/mysql_packages_limits.png differ diff --git a/docs/.vuepress/public/images/mysql_packages_limits.png.png b/docs/.vuepress/public/images/mysql_packages_limits.png.png new file mode 100644 index 000000000..8663ed925 Binary files /dev/null and b/docs/.vuepress/public/images/mysql_packages_limits.png.png differ diff --git a/docs/.vuepress/public/images/mysql_packages_limits_edit.png b/docs/.vuepress/public/images/mysql_packages_limits_edit.png new file mode 100644 index 000000000..f56772a44 Binary files /dev/null and b/docs/.vuepress/public/images/mysql_packages_limits_edit.png differ diff --git a/docs/.vuepress/public/images/network_settings.png b/docs/.vuepress/public/images/network_settings.png index 6c398a9c9..c67e2ab8b 100644 Binary files a/docs/.vuepress/public/images/network_settings.png and b/docs/.vuepress/public/images/network_settings.png differ diff --git a/docs/.vuepress/public/images/repository_settings.png b/docs/.vuepress/public/images/repository_settings.png index 9577edccb..64d9b9511 100644 Binary files a/docs/.vuepress/public/images/repository_settings.png and b/docs/.vuepress/public/images/repository_settings.png differ diff --git a/docs/.vuepress/public/images/software_selection.png b/docs/.vuepress/public/images/software_selection.png index cf43f4f61..9fd415890 100644 Binary files a/docs/.vuepress/public/images/software_selection.png and b/docs/.vuepress/public/images/software_selection.png differ diff --git a/docs/.vuepress/urls-mapping.js b/docs/.vuepress/urls-mapping.js index c934b5bfa..7bcabac1e 100644 --- a/docs/.vuepress/urls-mapping.js +++ b/docs/.vuepress/urls-mapping.js @@ -54,10 +54,10 @@ module.exports = { "/lilo_boot_loader.html": "/cloudlinux_installation/#lilo-boot-loader", "/index.html?lilo_boot_loader.html": "/cloudlinux_installation/#lilo-boot-loader", "/cloudlinux_installation/#servers-with-lilo-boot-loader": "/cloudlinux_installation/#lilo-boot-loader", - "/cpanel_easyapache_4.html/": "/cloudlinux_installation/#migration-to-easyapache-4", - "/cpanel_easyapache_4.html": "/cloudlinux_installation/#migration-to-easyapache-4", - "/index.html?cpanel_easyapache_4.html": "/cloudlinux_installation/#migration-to-easyapache-4", - "/cloudlinux_installation/#migrating-to-easyapache-4": "/cloudlinux_installation/#migration-to-easyapache-4", + "/cpanel_easyapache_4.html/": "/deprecated/#migration-to-easyapache-4", + "/cpanel_easyapache_4.html": "/deprecated/#migration-to-easyapache-4", + "/index.html?cpanel_easyapache_4.html": "/deprecated/#migration-to-easyapache-4", + "/cloudlinux_installation/#migrating-to-easyapache-4": "/deprecated/#migration-to-easyapache-4", "/faq.html/": "https://cloudlinux.zendesk.com/hc/en-us/articles/360025827914-CloudLinux-OS-Installation-FAQ", "/faq.html": "https://cloudlinux.zendesk.com/hc/en-us/articles/360025827914-CloudLinux-OS-Installation-FAQ", "/index.html?faq.html": "https://cloudlinux.zendesk.com/hc/en-us/articles/360025827914-CloudLinux-OS-Installation-FAQ", @@ -179,22 +179,23 @@ module.exports = { "/user_message.html/": "/lve_manager/#user-message-for-php-version", "/user_message.html": "/lve_manager/#user-message-for-php-version", "/index.html?user_message.html": "/lve_manager/#user-message-for-php-version", - "/reseller_limits.html/": "/cloudlinux_os_components/#reseller-limits", - "/reseller_limits.html": "/cloudlinux_os_components/#reseller-limits", - "/index.html?reseller_limits.html": "/cloudlinux_os_components/#reseller-limits", - "/reseller_limits/": "/cloudlinux_os_components/#reseller-limits", - "/installation_and_requirements.html/": "/cloudlinux_os_components/#requirements", - "/installation_and_requirements.html": "/cloudlinux_os_components/#requirements", - "/index.html?installation_and_requirements.html": "/cloudlinux_os_components/#requirements", - "/reseller_limits/#requirements":"/cloudlinux_os_components/#requirements", - "/how_to_enable_reseller_limits.html/": "/cloudlinux_os_components/#installation-enabling-and-disabling", - "/how_to_enable_reseller_limits.html": "/cloudlinux_os_components/#installation-enabling-and-disabling", - "/index.html?how_to_enable_reseller_limits.html": "/cloudlinux_os_components/#installation-enabling-and-disabling", - "/reseller_limits/#how-to-enable-and-disable-reseller-limits": "/cloudlinux_os_components/#installation-enabling-and-disabling", - "/hoster_interface.html/": "/lve_manager/#hoster-interface", - "/hoster_interface.html": "/lve_manager/#hoster-interface", - "/index.html?hoster_interface.html": "/lve_manager/#hoster-interface", - "/reseller_limits/#hoster-interface": "/lve_manager/#hoster-interface", + "/cloudlinux_os_components/#reseller-limits": "/limits/#reseller-limits", + "/reseller_limits.html/": "/limits/#reseller-limits", + "/reseller_limits.html": "/limits/#reseller-limits", + "/index.html?reseller_limits.html": "/limits/#reseller-limits", + "/reseller_limits/": "/limits/#reseller-limits", + "/installation_and_requirements.html/": "/cloudlinux_os_components/", + "/installation_and_requirements.html": "/cloudlinux_os_components/", + "/index.html?installation_and_requirements.html": "/cloudlinux_os_components/", + "/reseller_limits/#requirements":"/limits/#requirements", + "/how_to_enable_reseller_limits.html/": "/limits/#enabling-reseller-limits", + "/how_to_enable_reseller_limits.html": "/limits/#enabling-reseller-limits", + "/index.html?how_to_enable_reseller_limits.html": "/limits/#enabling-reseller-limits", + "/reseller_limits/#how-to-enable-and-disable-reseller-limits": "/limits/#enabling-reseller-limits", + "/hoster_interface.html/": "/lve_manager/#lve-manager", + "/hoster_interface.html": "/lve_manager/#lve-manager", + "/index.html?hoster_interface.html": "/lve_manager/#lve-manager", + "/reseller_limits/#hoster-interface": "/lve_manager/#lve-manager", "/current_usage_tab.html/": "/lve_manager/#current-usage-2", "/current_usage_tab.html": "/lve_manager/#current-usage-2", "/index.html?current_usage_tab.html": "/lve_manager/#current-usage-2", @@ -773,18 +774,19 @@ module.exports = { "/remote_usage_of_the_cloudlinux.html": "/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", "/index.html?remote_usage_of_the_cloudlinux.html": "/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", "/node_js_selector/#remote-usage-of-the-cloudlinux-selector-utility": "/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", - "/inodes_limits.html/": "/lve_manager/#inodes/", - "/inodes_limits.html": "/lve_manager/#inodes/", - "/index.html?inodes_limits.html": "/lve_manager/#inodes/", - "/inodes_limits/": "/lve_manager/#inodes/", + "/lve_manager/#inodes/": "/limits/#inodes/", + "/inodes_limits.html/": "/limits/#inodes/", + "/inodes_limits.html": "/limits/#inodes/", + "/index.html?inodes_limits.html": "/limits/#inodes/", + "/inodes_limits/": "/limits/#inodes/", "/cl_quota.html/": "/lve_manager/#cl-quota", "/cl_quota.html": "/lve_manager/#cl-quota", - "/index.html?cl_quota.html": "/lve_manager/#cl-quota", - "/inodes_limits/#cl-quota": "/lve_manager/#cl-quota", - "/cl-quota_general.html/": "/lve_manager/#general-provisions", - "/cl-quota_general.html": "/lve_manager/#general-provisions", - "/index.html?cl-quota_general.html": "/lve_manager/#general-provisions", - "/inodes_limits/#general-provisions": "/lve_manager/#general-provisions", + "/index.html?cl_quota.html": "/command-line_tools/#cl-quota", + "/inodes_limits/#cl-quota": "/command-line_tools/#cl-quota", + "/cl-quota_general.html/": "/command-line_tools/#cl-quota", + "/cl-quota_general.html": "/command-line_tools/#cl-quota", + "/index.html?cl-quota_general.html": "/command-line_tools/#cl-quota", + "/inodes_limits/#general-provisions": "/limits/#inodes", "/set_limits_and_integration.html/": "/lve_manager/#setting-limits-and-integration-with-panel-packages", "/set_limits_and_integration.html": "/lve_manager/#setting-limits-and-integration-with-panel-packages", "/index.html?set_limits_and_integration.html": "/lve_manager/#setting-limits-and-integration-with-panel-packages", @@ -792,19 +794,19 @@ module.exports = { "/inheritance.html/": "/lve_manager/#limits-inheritance", "/inheritance.html": "/lve_manager/#limits-inheritance", "/index.html?inheritance.html": "/lve_manager/#limits-inheritance", - "/inodes_limits/#limits-inheritance": "/lve_manager/#limits-inheritance", + "/inodes_limits/#limits-inheritance": "/command-line_tools/#limits-inheritance", "/cache_synchronize.html/": "/lve_manager/#caching-and-synchronizing-the-limits", "/cache_synchronize.html": "/lve_manager/#caching-and-synchronizing-the-limits", "/index.html?cache_synchronize.html": "/lve_manager/#caching-and-synchronizing-the-limits", - "/inodes_limits/#caching-and-synchronizing-the-limits": "/lve_manager/#caching-and-synchronizing-the-limits", - "/db_file.html/": "/lve_manager/#quotas-db-file", - "/db_file.html": "/lve_manager/#quotas-db-file", - "/index.html?db_file.html": "/lve_manager/#quotas-db-file", - "/inodes_limits/#quotas-db-file": "/lve_manager/#quotas-db-file", + "/inodes_limits/#caching-and-synchronizing-the-limits": "/command-line_tools/#caching-and-synchronizing-the-limits", + "/db_file.html/": "/command-line_tools/#quotas-db-file", + "/db_file.html": "/command-line_tools/#quotas-db-file", + "/index.html?db_file.html": "/command-line_tools/#quotas-db-file", + "/inodes_limits/#quotas-db-file": "/command-line_tools/#quotas-db-file", "/cli_examples.html/": "/lve_manager/#cli-options-examples", "/cli_examples.html": "/lve_manager/#cli-options-examples", "/index.html?cli_examples.html": "/lve_manager/#cli-options-examples", - "/inodes_limits/#cli-options-examples": "/lve_manager/#cli-options-examples", + "/inodes_limits/#cli-options-examples": "/command-line_tools/#cli-options-examples", "/kernel_settings.html/": "/cloudlinux_os_kernel/", "/kernel_settings.html": "/cloudlinux_os_kernel/", "/index.html?kernel_settings.html": "/cloudlinux_os_kernel/", @@ -1400,10 +1402,10 @@ module.exports = { "/ru/how_to_enable_reseller_limits.html": "/ru/cloudlinux_os_components/#installation-enabling-and-disabling", "/ru/index.html?how_to_enable_reseller_limits.html": "/ru/cloudlinux_os_components/#installation-enabling-and-disabling", "/ru/reseller_limits/#how-to-enable-and-disable-reseller-limits": "/ru/cloudlinux_os_components/#installation-enabling-and-disabling", - "/ru/hoster_interface.html/": "/ru/lve_manager/#hoster-interface", - "/ru/hoster_interface.html": "/ru/lve_manager/#hoster-interface", - "/ru/index.html?hoster_interface.html": "/ru/lve_manager/#hoster-interface", - "/ru/reseller_limits/#hoster-interface": "/ru/lve_manager/#hoster-interface", + "/ru/hoster_interface.html/": "/ru/lve_manager/#lve-manager", + "/ru/hoster_interface.html": "/ru/lve_manager/#lve-manager", + "/ru/index.html?hoster_interface.html": "/ru/lve_manager/#lve-manager", + "/ru/reseller_limits/#hoster-interface": "/ru/lve_manager/#lve-manager", "/ru/current_usage_tab.html/": "/ru/lve_manager/#current-usage-2", "/ru/current_usage_tab.html": "/ru/lve_manager/#current-usage-2", "/ru/index.html?current_usage_tab.html": "/ru/lve_manager/#current-usage-2", @@ -1981,38 +1983,39 @@ module.exports = { "/ru/remote_usage_of_the_cloudlinux.html": "/ru/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", "/ru/index.html?remote_usage_of_the_cloudlinux.html": "/ru/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", "/ru/node_js_selector/#remote-usage-of-the-cloudlinux-selector-utility": "/ru/cloudlinux_os_components/#remote-usage-of-the-cloudlinux-selector-utility", - "/ru/inodes_limits.html/": "/ru/lve_manager/#inodes/", - "/ru/inodes_limits.html": "/ru/lve_manager/#inodes/", - "/ru/index.html?inodes_limits.html": "/ru/lve_manager/#inodes/", - "/ru/inodes_limits/": "/ru/lve_manager/#inodes/", - "/ru/cl_quota.html/": "/ru/lve_manager/#cl-quota", - "/ru/cl_quota.html": "/ru/lve_manager/#cl-quota", - "/ru/index.html?cl_quota.html": "/ru/lve_manager/#cl-quota", - "/ru/inodes_limits/#cl-quota": "/ru/lve_manager/#cl-quota", - "/ru/cl-quota_general.html/": "/ru/lve_manager/#general-provisions", - "/ru/cl-quota_general.html": "/ru/lve_manager/#general-provisions", - "/ru/index.html?cl-quota_general.html": "/ru/lve_manager/#general-provisions", - "/ru/inodes_limits/#general-provisions": "/ru/lve_manager/#general-provisions", + "/ru/lve_manager/#inodes/": "/ru/limits/#inodes/", + "/ru/inodes_limits.html/": "/ru/limits/#inodes/", + "/ru/inodes_limits.html": "/ru/limits/#inodes/", + "/ru/index.html?inodes_limits.html": "/ru/limits/#inodes/", + "/ru/inodes_limits/": "/ru/limits/#inodes/", + "/ru/cl_quota.html/": "/ru/command-line_tools/#cl-quota", + "/ru/cl_quota.html": "/ru/command-line_tools/#cl-quota", + "/ru/index.html?cl_quota.html": "/ru/command-line_tools/#cl-quota", + "/ru/inodes_limits/#cl-quota": "/ru/command-line_tools/#cl-quota", + "/ru/cl-quota_general.html/": "/ru/command-line_tools/#general-provisions", + "/ru/cl-quota_general.html": "/ru/command-line_tools/#general-provisions", + "/ru/index.html?cl-quota_general.html": "/ru/command-line_tools/#general-provisions", + "/ru/inodes_limits/#general-provisions": "/ru/command-line_tools/#general-provisions", "/ru/set_limits_and_integration.html/": "/ru/lve_manager/#setting-limits-and-integration-with-panel-packages", "/ru/set_limits_and_integration.html": "/ru/lve_manager/#setting-limits-and-integration-with-panel-packages", "/ru/index.html?set_limits_and_integration.html": "/ru/lve_manager/#setting-limits-and-integration-with-panel-packages", "/ru/inodes_limits/#setting-limits-and-integration-with-panel-packages": "/ru/lve_manager/#setting-limits-and-integration-with-panel-packages", - "/ru/inheritance.html/": "/ru/lve_manager/#limits-inheritance", - "/ru/inheritance.html": "/ru/lve_manager/#limits-inheritance", - "/ru/index.html?inheritance.html": "/ru/lve_manager/#limits-inheritance", - "/ru/inodes_limits/#limits-inheritance": "/ru/lve_manager/#limits-inheritance", - "/ru/cache_synchronize.html/": "/ru/lve_manager/#caching-and-synchronizing-the-limits", - "/ru/cache_synchronize.html": "/ru/lve_manager/#caching-and-synchronizing-the-limits", - "/ru/index.html?cache_synchronize.html": "/ru/lve_manager/#caching-and-synchronizing-the-limits", - "/ru/inodes_limits/#caching-and-synchronizing-the-limits": "/ru/lve_manager/#caching-and-synchronizing-the-limits", - "/ru/db_file.html/": "/ru/lve_manager/#quotas-db-file", - "/ru/db_file.html": "/ru/lve_manager/#quotas-db-file", - "/ru/index.html?db_file.html": "/ru/lve_manager/#quotas-db-file", - "/ru/inodes_limits/#quotas-db-file": "/ru/lve_manager/#quotas-db-file", - "/ru/cli_examples.html/": "/ru/lve_manager/#cli-options-examples", - "/ru/cli_examples.html": "/ru/lve_manager/#cli-options-examples", - "/ru/index.html?cli_examples.html": "/ru/lve_manager/#cli-options-examples", - "/ru/inodes_limits/#cli-options-examples": "/ru/lve_manager/#cli-options-examples", + "/ru/inheritance.html/": "/ru/command-line_tools/#limits-inheritance", + "/ru/inheritance.html": "/ru/command-line_tools/#limits-inheritance", + "/ru/index.html?inheritance.html": "/ru/command-line_tools/#limits-inheritance", + "/ru/inodes_limits/#limits-inheritance": "/ru/command-line_tools/#limits-inheritance", + "/ru/cache_synchronize.html/": "/ru/command-line_tools/#caching-and-synchronizing-the-limits", + "/ru/cache_synchronize.html": "/ru/command-line_tools/#caching-and-synchronizing-the-limits", + "/ru/index.html?cache_synchronize.html": "/ru/command-line_tools/#caching-and-synchronizing-the-limits", + "/ru/inodes_limits/#caching-and-synchronizing-the-limits": "/ru/command-line_tools/#caching-and-synchronizing-the-limits", + "/ru/db_file.html/": "/ru/command-line_tools/#quotas-db-file", + "/ru/db_file.html": "/ru/command-line_tools/#quotas-db-file", + "/ru/index.html?db_file.html": "/ru/command-line_tools/#quotas-db-file", + "/ru/inodes_limits/#quotas-db-file": "/ru/command-line_tools/#quotas-db-file", + "/ru/cli_examples.html/": "/ru/command-line_tools/#cli-options-examples", + "/ru/cli_examples.html": "/ru/command-line_tools/#cli-options-examples", + "/ru/index.html?cli_examples.html": "/ru/command-line_tools/#cli-options-examples", + "/ru/inodes_limits/#cli-options-examples": "/ru/command-line_tools/#cli-options-examples", "/ru/kernel_settings.html/": "/ru/cloudlinux_os_kernel/", "/ru/kernel_settings.html": "/ru/cloudlinux_os_kernel/", "/ru/index.html?kernel_settings.html": "/ru/cloudlinux_os_kernel/", @@ -2451,5 +2454,107 @@ module.exports = { "/cloudlinux_os_components/#lveredistimeout": "/deprecated/#lveredistimeout", "/ru/cloudlinux_os_components/#lveredistimeout": "/ru/deprecated/#lveredistimeout", "/cloudlinux_installation/#centos-with-eeasyapache-4": "/cloudlinux_installation/#centos-with-easyapache-4", - "/ru/cloudlinux_installation/#centos-with-eeasyapache-4": "/ru/cloudlinux_installation/#centos-with-easyapache-4" + "/ru/cloudlinux_installation/#centos-with-eeasyapache-4": "/ru/cloudlinux_installation/#centos-with-easyapache-4", + "/x-ray/":"/cloudlinux-os-plus/#x-ray", + "/x-ray/#description":"/cloudlinux-os-plus/#description", + "/x-ray/#installation":"/cloudlinux-os-plus/#installation", + "/x-ray/#how-to-manage-x-ray":"/cloudlinux-os-plus/#how-to-manage-x-ray", + "/x-ray/#create-a-new-tracing-task":"/cloudlinux-os-plus/#create-a-new-tracing-task", + "/x-ray/#advanced-settings":"/cloudlinux-os-plus/#advanced-settings", + "/x-ray/#view-tracing-tasks-list":"/cloudlinux-os-plus/#view-tracing-tasks-list", + "/x-ray/#tracing-status":"/cloudlinux-os-plus/#tracing-status", + "/x-ray/#stop-tracing-task":"/cloudlinux-os-plus/#stop-tracing-task", + "/x-ray/#delete-tracing-task":"/cloudlinux-os-plus/#delete-tracing-task", + "/x-ray/#view-collected-requests-for-tracing-task":"/cloudlinux-os-plus/#view-collected-requests-for-tracing-task", + "/x-ray/#tracing-tasks":"/cloudlinux-os-plus/#tracing-tasks", + "/x-ray/#software-modules-plugins":"/cloudlinux-os-plus/#software-modules-plugins", + "/x-ray/#database-queries":"/cloudlinux-os-plus/#database-queries", + "/x-ray/#external-requests":"/cloudlinux-os-plus/#external-requests", + "/x-ray/#system-functions":"/cloudlinux-os-plus/#system-functions", + "/x-ray/#x-ray-client":"/cloudlinux-os-plus/#x-ray-client", + "/x-ray/#list-of-supported-php-versions":"/cloudlinux-os-plus/#list-of-supported-php-versions", + "/x-ray/#functions-that-x-ray-client-can-hook":"/cloudlinux-os-plus/#functions-that-x-ray-client-can-hook", + "/x-ray/#database-queries-2":"/cloudlinux-os-plus/#database-queries-2", + "/x-ray/#external-requests-2":"/cloudlinux-os-plus/#external-requests-2", + "/x-ray/#system-php-functions":"/cloudlinux-os-plus/#system-php-functions", + "/x-ray/#configuration-options":"/cloudlinux-os-plus/#configuration-options", + "/x-ray/#xray-enabled":"/cloudlinux-os-plus/#xray-enabled", + "/x-ray/#xray-database-queries":"/cloudlinux-os-plus/#xray-database-queries", + "/x-ray/#xray-external-requests":"/cloudlinux-os-plus/#xray-external-requests", + "/x-ray/#xray-system-functions":"/cloudlinux-os-plus/#xray-system-functions", + "/x-ray/#xray-backtrace-depth":"/cloudlinux-os-plus/#xray-backtrace-depth", + "/x-ray/#xray-processor":"/cloudlinux-os-plus/#xray-processor", + "/x-ray/#xray-tasks":"/cloudlinux-os-plus/#xray-tasks", + "/x-ray/#xray-to-file":"/cloudlinux-os-plus/#xray-to-file", + "/x-ray/#xray-debug":"/cloudlinux-os-plus/#xray-debug", + "/x-ray/#xray-debug-file":"/cloudlinux-os-plus/#xray-debug-file", + "/x-ray/#x-ray-agent":"/cloudlinux-os-plus/#x-ray-agent", + "/x-ray/#managing-x-ray-service":"/cloudlinux-os-plus/#managing-x-ray-service", + "/x-ray/#faq":"/cloudlinux-os-plus/#faq", + "/x-ray/#does-x-ray-affect-website-performance":"/cloudlinux-os-plus/#does-x-ray-affect-website-performance", + "/x-ray/#what-should-i-do-if-i-see-the-warning-task-is-duplicated-by-url":"/cloudlinux-os-plus/#what-should-i-do-if-i-see-the-warning-task-is-duplicated-by-url", + "/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":"/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", + "/x-ray/#what-to-do-if-x-ray-is-not-found-in-the-phpinfo-page":"/cloudlinux-os-plus/#what-to-do-if-x-ray-is-not-found-in-the-phpinfo-page", + "/x-ray/#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":"/cloudlinux-os-plus/#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", + "/x-ray/#what-is-the-proper-format-for-the-url":"/cloudlinux-os-plus/#what-is-the-proper-format-for-the-url", + "/ru/x-ray/":"/ru/cloudlinux-os-plus/#x-ray", + "/ru/x-ray/#description":"/ru/cloudlinux-os-plus/#description", + "/ru/x-ray/#installation":"/ru/cloudlinux-os-plus/#installation", + "/ru/x-ray/#how-to-manage-x-ray":"/ru/cloudlinux-os-plus/#how-to-manage-x-ray", + "/ru/x-ray/#create-a-new-tracing-task":"/ru/cloudlinux-os-plus/#create-a-new-tracing-task", + "/ru/x-ray/#advanced-settings":"/ru/cloudlinux-os-plus/#advanced-settings", + "/ru/x-ray/#view-tracing-tasks-list":"/ru/cloudlinux-os-plus/#view-tracing-tasks-list", + "/ru/x-ray/#tracing-status":"/ru/cloudlinux-os-plus/#tracing-status", + "/ru/x-ray/#stop-tracing-task":"/ru/cloudlinux-os-plus/#stop-tracing-task", + "/ru/x-ray/#delete-tracing-task":"/ru/cloudlinux-os-plus/#delete-tracing-task", + "/ru/x-ray/#view-collected-requests-for-tracing-task":"/ru/cloudlinux-os-plus/#view-collected-requests-for-tracing-task", + "/ru/x-ray/#tracing-tasks":"/ru/cloudlinux-os-plus/#tracing-tasks", + "/ru/x-ray/#software-modules-plugins":"/ru/cloudlinux-os-plus/#software-modules-plugins", + "/ru/x-ray/#database-queries":"/ru/cloudlinux-os-plus/#database-queries", + "/ru/x-ray/#external-requests":"/ru/cloudlinux-os-plus/#external-requests", + "/ru/x-ray/#system-functions":"/ru/cloudlinux-os-plus/#system-functions", + "/ru/x-ray/#x-ray-client":"/ru/cloudlinux-os-plus/#x-ray-client", + "/ru/x-ray/#list-of-supported-php-versions":"/ru/cloudlinux-os-plus/#list-of-supported-php-versions", + "/ru/x-ray/#functions-that-x-ray-client-can-hook":"/ru/cloudlinux-os-plus/#functions-that-x-ray-client-can-hook", + "/ru/x-ray/#database-queries-2":"/ru/cloudlinux-os-plus/#database-queries-2", + "/ru/x-ray/#external-requests-2":"/ru/cloudlinux-os-plus/#external-requests-2", + "/ru/x-ray/#system-php-functions":"/ru/cloudlinux-os-plus/#system-php-functions", + "/ru/x-ray/#configuration-options":"/ru/cloudlinux-os-plus/#configuration-options", + "/ru/x-ray/#xray-enabled":"/ru/cloudlinux-os-plus/#xray-enabled", + "/ru/x-ray/#xray-database-queries":"/ru/cloudlinux-os-plus/#xray-database-queries", + "/ru/x-ray/#xray-external-requests":"/ru/cloudlinux-os-plus/#xray-external-requests", + "/ru/x-ray/#xray-system-functions":"/ru/cloudlinux-os-plus/#xray-system-functions", + "/ru/x-ray/#xray-backtrace-depth":"/ru/cloudlinux-os-plus/#xray-backtrace-depth", + "/ru/x-ray/#xray-processor":"/ru/cloudlinux-os-plus/#xray-processor", + "/ru/x-ray/#xray-tasks":"/ru/cloudlinux-os-plus/#xray-tasks", + "/ru/x-ray/#xray-to-file":"/ru/cloudlinux-os-plus/#xray-to-file", + "/ru/x-ray/#xray-debug":"/ru/cloudlinux-os-plus/#xray-debug", + "/ru/x-ray/#xray-debug-file":"/ru/cloudlinux-os-plus/#xray-debug-file", + "/ru/x-ray/#x-ray-agent":"/ru/cloudlinux-os-plus/#x-ray-agent", + "/ru/x-ray/#managing-x-ray-service":"/ru/cloudlinux-os-plus/#managing-x-ray-service", + "/ru/x-ray/#faq":"/ru/cloudlinux-os-plus/#faq", + "/ru/x-ray/#does-x-ray-affect-website-performance":"/ru/cloudlinux-os-plus/#does-x-ray-affect-website-performance", + "/ru/x-ray/#what-should-i-do-if-i-see-the-warning-task-is-duplicated-by-url":"/ru/cloudlinux-os-plus/#what-should-i-do-if-i-see-the-warning-task-is-duplicated-by-url", + "/ru/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":"/ru/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", + "/ru/x-ray/#what-to-do-if-x-ray-is-not-found-in-the-phpinfo-page":"/ru/cloudlinux-os-plus/#what-to-do-if-x-ray-is-not-found-in-the-phpinfo-page", + "/ru/x-ray/#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":"/ru/cloudlinux-os-plus/#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", + "/ru/x-ray/#what-is-the-proper-format-for-the-url":"/ru/cloudlinux-os-plus/#what-is-the-proper-format-for-the-url", + "/introduction/#what-is-cloudlinux": "/introduction/#what-is-cloudlinux-os-shared", + "introduction/#cloudlinux-life-cycle": "/introduction/#cloudlinux-os-shared-life-cycle", + "/introduction/#description-of-cloudlinux-components": "/introduction/#description-of-cloudlinux-os-shared-components", + "lve_manager/#cloudlinux-installation-wizard": "/lve_manager/#cloudlinux-os-shared-installation-wizard", + "/cloudlinux-os-plus/#wp-optimization-suite": "/cloudlinux-os-plus/#acceleratewp", + "/cloudlinux-os-plus/#how-to-enable-wp-optimization-suite": "/cloudlinux-os-plus/#how-to-enable-acceleratewp", + "/cloudlinux-os-plus/#how-to-install-wp-optimization-suite": "/cloudlinux-os-plus/#how-to-install-acceleratewp", + "/disabling_php.html": "/cloudlinux_os_components/#disabling-php-extension-globally", + "/getting_trial_license.html": "/cloudlinux_installation/#getting-trial-license", + "/installation4.html": "/cloudlinux_installation/#installation", + "/installation_mod_lsapi.html": "/cloudlinux_os_components/#installation-2", + "/cloudlinux-os-plus/cloudlinux-os-plus/": "/cloudlinux-os-plus/", + "/cloudlinux_os_components/cloudlinux_os_components/": "/cloudlinux_os_components/", + "/control_panel_integration/cloudlinux_os_components/": "/control_panel_integration/#control-panel-integration", + "/php_selector": "/cloudlinux_os_components/#php-selector", + "https://www.cloudlinux.com/docs/load_averages.php": "https://docs.cloudlinux.com/introduction/", + "https://www.cloudlinux.com/docs/hsphere35.php": "https://docs.cloudlinux.com/introduction/", + "/cloudlinux_installation/#upgrade-between-major-distributions-elevation-beta":"/elevate/" }; diff --git a/docs/cloudlinux-os-admin/README.md b/docs/cloudlinux-os-admin/README.md new file mode 100644 index 000000000..51951b330 --- /dev/null +++ b/docs/cloudlinux-os-admin/README.md @@ -0,0 +1,56 @@ +# CloudLinux OS Admin + +[[toc]] + +## 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, but be careful, +there is no migration to Shared edition available. + +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. + +:::tip Note +The CloudLinux OS Admin plan does not include the NodeJS, Python and Ruby selectors as well as the MySQL Governor. +::: + + +## Installation + +CloudLinux OS Admin installation process is the same as for CloudLinux Shared, +please forward to [installation guide](/cloudlinux_installation) for the detailed instructions. + +:::tip Note +The CloudLinux OS Admin can be installed and compatible only with AlmaLinux OS 8 +::: + +## 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: + + - [MySQL Governor](/control_panel_integration/#mysql-governor) is not available + - NodeJS, Python and Ruby selectors aren't available, however, [PHP Selector](/cloudlinux_os_components/#php-selector) is available + - [X-Ray](./cloudlinux-os-plus/#x-ray) is available like with CloudLinux Shared Pro + - [Accelerate WP](./cloudlinux-os-plus/#acceleratewp) is available like with CloudLinux Shared Pro + +The rest of the components are similar with CloudLinux OS Shared. + + +## 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/docs/cloudlinux-os-plus/README.md b/docs/cloudlinux-os-plus/README.md new file mode 100644 index 000000000..2e4d34ab9 --- /dev/null +++ b/docs/cloudlinux-os-plus/README.md @@ -0,0 +1,2215 @@ +# CloudLinux OS Shared Pro + +[[toc]] + +## X-Ray + +* [Description](/cloudlinux-os-plus/#description) +* [Installation](/cloudlinux-os-plus/#installation) +* [How to manage X-Ray](/cloudlinux-os-plus/#how-to-manage-x-ray) +* [X-Ray client](/cloudlinux-os-plus/#x-ray-client) +* [X-Ray service](/cloudlinux-os-plus/#x-ray-agent) +* [FAQ](/cloudlinux-os-plus/#faq) + +### Description + +:::warning 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](/control_panel_integration/#how-to-integrate-x-ray-with-a-control-panel) +::: + +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 + +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 + ``` +
+ + * update + +
+ + ``` + # yum update lvemanager + ``` +
+3. X-Ray will be activated on all your servers during 4 hours. You will see the X-Ray tab in the LVE Manager UI. + +4. For instant activation, run the following command: + +
+ + ``` + # rhn_check + ``` +
+ + If the `rhn_check` command is not found, run the following command: + +
+ + ``` + # yum install rhn-check rhn-setup + ``` +
+ +5. Then install the `alt-php-xray` package + + * Via user interface + * Go to the _X-Ray_ tab. + * Click _Install_ to start installation. + + ![](/images/XRayUI.png) + + * Via SSH by running the following command: + +
+ + ``` + # yum install lvemanager alt-php-xray + ``` +
+ +6. After installation, use the _Start tracing_ button to create your first tracing task for a slow site. + +![](/images/XRayStartTracing.png) + +### How to manage X-Ray + +X-Ray provides several options for monitoring domain requests speed: Manual Tracing task, X-Ray Autotracing and Continuous tracing. + +* **Manual Tracing task** is a task that you can create for a specific URL to collect server requests. The task will end either after a specified number of requests to the URL or after a specified time (maximum after two days). It is not possible here to automatically email a report but it is possible to export the report in PDF and send to a user. + +* **Autotracing task** is a task that will be created automatically at the end of each day for slow URLs that were found during that day by the [PHP Slow Site Analyzer](/lve_manager/#website-monitoring-tool-and-slow-site-analyzer) (SSA). +Need to be enabled separately, see [How to enable X-Ray Autotracing](/cloudlinux-os-plus/#how-to-enable-x-ray-autotracing). + +* **Continuous tracing** is a task that initiates daily hourly tracing requests for a specified domain and email a monitoring report. Continuous task can't stop automatically, you need to stop it manually. In fact, continuous task allows to automatically create a tracing task for each new day, with the ability to get a report for the past day. + +#### Tracing tasks tab + +The *Tracing tasks* tab contains a list of all tracing tasks created both manually and automatically via continuous tasks. + +![](/images/XRayTracingTaskCreated.png) + +The *Created* column shows how a task was created – automatically (by continuous task) or manually. + +#### Continuous tracing tab + +:::warning Warning +To use Continuous task, update your LVE Manager and alt-PHP-X-Ray packages to versions lvemanager-6.2.9-1 and alt-php-xray-0.2-1 by running the following command: +``` +yum update lvemanager alt-php-xray +``` +::: + +The *Continuous tracing* tab contains a list of continuous tasks for which tracing tasks will be created automatically for a new day for a specific domain. + +![](/images/XRayContinuousTasksList.png) + +### Managing tracing task + +#### Creating a new tracing task + +1. Go to the _X-Ray_ tab +2. Click the _Start tracing_ button to create a new task +3. In the opened popup specify a website URL to trace +4. Click the _Run_ button +5. Tracing will run in the default mode. In the default mode X-Ray traces the first 20 requests for a specified URL + +![](/images/XRayTracingTask.png) + +* **URL** should be a valid URL of the domain which exists on the current hosting server. The URL field supports wildcard matching. To learn more about wildcard matching, click _How to use special characters_. +* **Advanced settings** allow you to set an IP address and tracing options: by time or by number of queries. + + ![](/images/XRayAdvanced.png) + +**Advanced settings** + +* **Client’s IP**: it is an IPv4 address of a machine to trace. For example, if you have a production website that processes requests from different IP addresses and you do not want to add these requests to the tracing task. So, you can set a specific IP address and X-Ray will analyze requests only from this specific IP address. +Record for +* **Time period**: how much time X-Ray collect the requests (2 days max) +* **Requests**: the amount of requests that X-Ray will collect + +After creating, the task appears in the list of tracing tasks. + +![](/images/XRayTrcingTaskList.png) + +#### Viewing tracing tasks list + +![](/images/XRayTrcingTaskList1.png) + +Tasks created *Manually* are simply tracing tasks. + +#### Tracing status + +A tracing task can have the following statuses: + +* **Running** – tracing is in progress +* **Stopped** – tracing was stopped by administrator +* **On hold** – the same URL already exists in the lists. Task processing will not start automatically. Administrator should start it manually. +* **Completed** – period of time is finished or number of requests is reached. + +#### Collected requests for tracing task + +:::warning Warning! +Collected requests are available in the UI for two weeks. +::: + +Click ![](/images/XRayView.png) to open a list of collected requests. + +#### Tracing tasks + +![](/images/XRayCollectedRequests.png) + +The slowest request is highlighted. + +![](/images/XRaySlowestRequest.png) + +* **Total** displays how many requests were collected according to tasks requirements. +* **Pending** displays how many of collected requests are not visible in the table yet. +* **Throttled** displays the number of requests during the execution of which the LVE limits were exceeded. +* **Slow** displays the number of requests lasting more than one second. + +There are filters for the request types and the indicator of a filter used now. + +![](/images/FilterIndicator.png) + +If slow requests were not detected during the tracing task, the following is displayed. Here, you can also view all requests. + +![](/images/RecordedSession.png) + + +X-Ray collects the following data for each request: + +* **Top issues** – the slowest items of a request +* **Software modules/plugins** by execution time (only for WordPress plugins) +* **Database queries** by execution time +* **External requests** by execution time +* **Other system functions** by execution time + +#### Software modules/plugins + +![](/images/XRaySoftwareModulesPlugins.png) + +The _Software modules/plugins_ section displays the following data: + +* **Software type** – a type a module/plugin. For now, X-Ray can analyze only WordPress software +* **Software module** – a name of the WordPress plugin +* **Duration** – plugin execution time +* **Duration (%)** – plugin execution time as a percentage of the total duration of the request + +#### Database queries + +![](/images/XRayDatabaseQueries.png) + +The _Database queries_ section displays the following data: + +* **Query** – the executed SQL-query +* **File** – the file and the line of the executed query and backtrace +* **Software module** – a WordPress plugin name from which the request was completed. If the request does not belong to any of the WordPress plugin, the name of the function that executed the given request is displayed +* **Calls** – the number of identical SQL queries +* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) + +#### External requests + +![](/images/XRayExternalRequests.png) + +The _External requests_ section displays the following data: + +* **URL** – the URL of the executed request +* **File** – the file and the line of the executed request and backtrace +* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) + +#### System functions + +![](/images/XRaySystemFunctions.png) + +The _System functions_ section displays the following data: + +* **Function** – the executed function +* **File** – the file and the line of the executed request +* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) + +#### Stopping tracing task + +Click ![](/images/XRayStop.png) to stop the tracing task. + +![](/images/XRayStopped.png) + +The tracing task status will be changed to **Stopped**. Data will not be collected anymore but you can see already collected information or continue tracing later by clicking ![](/images/XRayStart.png). + +#### Deleting tracing task + +Click ![](/images/XRayDelete.png) to delete the tracing task. + +:::warning Warning! +When you have deleted a tracing task, all collected data will be unavailable. +::: + +### Managing continuous tasks + +#### Creating a new continuous task + +1. Click the *Create continuous tracing* button + +![](/images/XRayCreateContinuousTaskBtn.png) + +2. Specify URL in the *Domain* field and email in the *Email for reports* field and click the *Create* button. + +![](/images/XRayCreateContinuousTaskForm.png) + +3. You can see a new task in the *Continuous tracing* tab in the X-Ray UI. + +![](/images/XRayContinuousTracingTab.png) + +4. If you stop a continuous tracing task, a new task for the next 24 hours will not be created. The task for the current day will be finished at midnight and the report will be emailed. + +5. If you delete a continuous tracing task, the task for the current day will be finished at midnight and the report will be emailed. + +#### Viewing continuous tasks list + +You can find a list of continuous tracing tasks in the _Continuous tracing_ tab. + +![](/images/XRayContinuousTracingTasksList.png) + +You can find automatically created tasks in the _Tracing tasks_ tab marked as _Automatically_ in the _Created_ column. + +![](/images/XRayContinuousTracingTasksListCreated.png) + +The [statuses for automatically created tasks](/cloudlinux-os-plus/#tracing-status) are the same as for tracing task. + +To view detailed info about an automatically created task, click ![](/images/XRayView1.png). You will get requests grouped by hour. + +![](/images/XRayContinuousTracingTasksListGrouped.png) + +Click to a group to open a list of the requests. + +![](/images/XRayContinuousTracingTasksRequestsList.png) + +The following data is collected for each request: + +* Software modules/plugins by execution time (only for WordPress plugins) +* Database queries by execution time +* External requests by execution time +* Other system functions by execution time + +#### Stopping automatic tracing task + +Stopping automatic tracing task (a part of continuous tracing task) affects only the automatic tracing task for the current day. A new task for the next day will be created at the end of the day. + +To stop the continuous tracing task completely, see [Creating a new continuous task, paragraph 4](/cloudlinux-os-plus/#creating-a-new-continuous-task). + + +#### Deleting automatic tracing task + +Deleting automatic tracing task (a part of continuous tracing task) affects only the automatic tracing task for the current day. A new task for the next day will be created at the end of the day. + +To delete the continuous tracing task completely, see [Creating a new continuous task, paragraph 5](/cloudlinux-os-plus/#creating-a-new-continuous-task). + + +#### Continuous task daily report + +1. Users get daily reports on their emails. An example of a report is shown below: + + ![](/images/XRayContinuousTaskDaylyReportExample.png) + +2. Click the link in the email to show the detailed report: + + ![](/images/XRayContinuousTaskDaylyReportCollectedRequests.png) + +3. You can view requests grouped by hour: + + ![](/images/XRayContinuousTaskDaylyReportByHourRequests.png) + +4. You can also view the detailed information about request: + + ![](/images/XRayContinuousTaskDaylyReportRequestDetails.png) + + +### X-Ray Autotracing + +X-Ray Autotracing automatically creates tracing tasks for slow URLs that were found during a day by the [PHP Slow Site Analyzer](/lve_manager/#website-monitoring-tool-and-slow-site-analyzer) (SSA). + +:::warning Warning +To use X-Ray Autotracing, update your alt-php-ssa and alt-php-xray packages to versions alt-php-ssa-0.2-1 and alt-php-xray-0.4-1 or higher by running the following command: +``` +# yum update alt-php-ssa alt-php-xray --enablerepo=cloudlinux-updates-testing +``` +::: + +#### How to enable X-Ray Autotracing + +To enable X-Ray Autotracing, run the following commands via SSH: + +``` +# /usr/sbin/cloudlinux-ssa-manager enable-ssa +# /usr/sbin/cloudlinux-autotracing enable --all +``` + +Check [CLI documentation](/command-line_tools/#x-ray-autotracing) for a description of the `/usr/sbin/cloudlinux-autotracing` CLI utility. + +#### Requirements + +* CloudLinux OS Shared Pro or CloudLinux OS Solo or CloudLinux OS Admin +* alt-php-ssa > 0.2-1 version +* alt-php-xray > 0.4-1 version +* Enabled PHP SSA on the server + +#### Autotracing Interface + +A new tab for Autotracing tasks was added to the X-Ray UI: + + +![](/images/XRayAutotracingtaskstab.png) + + +#### Autotracing FAQ + +Q: Why are the slow URLs in the Slow Site Analyzer report different from those on which the autotracing tasks were created? + +A: Because the autotracing decision module uses rules and thresholds different from Slow Site Analyzer, which are configured by the CloudLinux team. + +Q: How often autotracing tasks will be generated? + +A: Once a day at the same time as a Slow Site Analyzer report. + +### X-Ray Smart Advice + +Smart advice is a new feature of X-Ray that is designed to find and propose solutions to fix performance issues and speed up the performance of a sites. + +:::tip Note +Smart Advice will work only for CloudLinux OS Shared Pro servers with cPanel Control Panel for now. + +At the moment, Smart Advise is focused only on WordPress sites. +::: + +:::warning Warning +To use X-Ray Smart Advice, update your alt-php-ssa and alt-php-xray packages to versions alt-php-ssa-0.2-3 and alt-php-xray-0.5-1 or higher by running the following command: +``` +# yum update alt-php-ssa alt-php-xray lve-utils lvemanager --enablerepo=cloudlinux-updates-testing +``` +::: + +#### How to enable X-Ray Smart Advice + +:::warning Attention! +If you'd like to try Smart Advice and AccelerateWP you should participate in the Beta tester program. To become a beta tester, please send your request at our Beta program page with the signup form [here](https://www.cloudlinux.com/wp-performance/). Once you submit the request, we will send you a confirmation email with program details and terms of use. +::: + +#### Requirements + +* CloudLinux OS Shared Pro or CloudLinux OS Solo +* alt-php-xray > 0.5-1 version +* lve-utils > 6.3.2-1 version +* lvemanager > 7.6.1-1 version +* cloudlinux-site-optimization-module > 0.1-1 version + +We Recommend: + +* Enable [X-Ray Autotracing](cloudlinux-os-plus/#x-ray-autotracing) on the server +* Use alt-php-ssa > 0.2-3 version + +#### How X-Ray Smart Advice works + +The main process of looking for advice is X-Ray tracing tasks. The best way for doing this is to enable X-Ray Autotracing. +This will allow you to most effectively find Smart Advice for sites that have performance issues without your manual participation. +You can find information on how to enable X-Ray Autotracing [here](/cloudlinux-os-plus/#how-to-enable-x-ray-autotracing). +On the other hand, you can create tracing tasks manually or use continuous X-Ray but we suggest you use X-Ray Autotracing for this purpose. + +:::tip Note +Advice will not be generated by old tracing tasks. +::: + +While the tracing task is running, X-Ray will look for places where advice can be applied. New advice will be displayed on the *Smart Advice* tab. + +![](/images/XRaySmartAdviceMainTab.png) + +After the X-Ray finds advice you will see new advice in the *Review* status on the *Smart Advice* tab. +Then you may use the *Details* button to see which URLs were found by X-Ray that will be speed up by that advice and use *Quick Action* to enable advice for a site. + +Example of details: + +![](/images/XRaySmartAdviceDetails.png) + +After you apply the advice by using *Quick Action*, the status will change to the *Applied*. + +If a long time has passed since the last time the advice was updated for a site, it will be moved to the *Outdated* status. + +:::tip Note +New X-Ray task may update *Outdated* advice if X-Ray finds performance issues that may be fixed by that advice. Then the status of advice becomes *Review*. +::: + +If the process of applying advice fails you will see an error log with a detailed error, you may try to fix it manually and try again or [contact our support team for help](https://cloudlinux.zendesk.com/hc/en-us). + +Example when an error appears during advice applying: + +![](/images/XRaySmartAdviceError.png) + +#### Smart Advice FAQ + +Q: Why I can't see new advice on the *Smart Advice* tab? + +A: For the generating of advice, it is necessary to run X-Ray tracing tasks, the best way to do it without manual interaction is to use X-Ray Autoracing. You can find more information on how to enable X-Ray Autotracing [here](/cloudlinux-os-plus/#how-to-enable-x-ray-autotracing). + +#### Useful Smart Advice CLI commands + +:::warning Warning! +This is an experimental feature. The backwards compatibility is not guaranteed. +::: + +To obtain the full list of advice generated for your server use the following CLI command: + +``` +cl-smart-advice list +``` + +For each advice in the list the CLI command returns the following information: +* `metadata`, which includes information about `username`, `domain` and `website` for which the advice is issued +* `advice` information: + * its identifier `id` + * its `type` + * its `status` -- `review` or `applied` + * if advice is Premium `is_premium` + * other internal informational fields + +The example output is given below: + +``` +{ + "data": [ + { + "created_at": "2023-04-11T07:33:48.191870+00:00", + "updated_at": "2023-04-11T07:33:48.191870+00:00", + "metadata": { + "username": "user16", + "domain": "user16.com", + "website": "/wordpress" + }, + "advice": { + "id": 23484, + "type": "OBJECT_CACHE", + "status": "review", + "description": "Turn on Object Caching", + "is_premium": true, + "module_name": "object_cache", + "subscription": { + "status": "no", + "upgrade_url": null + }, + "total_stages": 0, + "completed_stages": 0, + "detailed_description": "To improve site performance, enable the Object Caching We recommend applying the advice if you see it frequen +tly for the most valuable URLs of your site." + } + }, + { + "created_at": "2023-04-11T07:33:48.297784+00:00", + "updated_at": "2023-04-11T08:51:42.362117+00:00", + "metadata": { + "username": "user16", + "domain": "user16.com", + "website": "/wordpress" + }, + "advice": { + "id": 23485, + "type": "SITE_OPTIMIZATION", + "status": "applied", + "description": "Turn on AccelerateWP feature", + "is_premium": false, + "module_name": "accelerate_wp", + "total_stages": 0, + "completed_stages": 0, + "detailed_description": "To improve site performance, enable the AccelerateWP optimization feature. We recommend applying the advice if you see it frequently for the most valuable URLs of your site." + } + } + ], + "result": "success", + "timestamp": 1681203110 +} +``` + +### End-user X-Ray plugin + +:::warning Warning +To use the end-user X-Ray plugin, update your LVE Manager and X-Ray packages to the `lvemanager-6.3.9-1` (or later) and `alt-php-xray-0.3-1` (or later) by running the following command: +``` +# yum update lvemanager alt-php-xray +``` +::: + +#### How to enable/disable the end-user X-Ray plugin + +You can hide or show the end-user X-Ray plugin icon by ticking or unticking the proper checkbox in the LVE Manager. + +Go to _LVE Manager → Options Tab → User interface settings_. + +![](/images/HideXRayAppCheckbox.png) + +:::tip Note +The X-Ray plugin icon in the end-user interface is hidden when the checkbox is ticked. +::: + +![](/images/XRayAppUIIcon.png) + +#### 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. + +![](/images/XRayEndUserUI.png) + +But there are some differences and they are described further. + +* End-users can create tasks only for their domains from the drop-down list: + ![](/images/XRayEndUserUIStart.png) +* To specify URL or wildcard, end-users should use the input field next to the domain: + ![](/images/XRayEndUserUiSpecifyURL.png) + +You can read about all other basic interface elements and managing tracing tasks in the [Managing tracing task section](/cloudlinux-os-plus/#managing-tracing-task). + +:::tip 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 end-user has a limit of tracing tasks running at a time. Before starting the next task, the end-user should wait for the completion of the previous ones or forcefully stop the running ones. Otherwise, the user will get the next error: + + ![](/images/XRayEndUserUIError.png) + :::tip Note + The current limit is one tracing task per user. + ::: +* 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: + + ![](/images/XRayEndUserUIWarning.png) + + 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](/cloudlinux-os-plus/#what-should-i-do-if-i-see-the-warning-task-is-duplicated-by-url). + +* If a user's tracing task was created for a domain which is using the FPM handler there's an additional limitation. To avoid frequent reloads of the particular FPM service, **Start tracing** , **Stop tracing** or **Continue tracing** action would be blocked in case if the latest reload of a corresponding FPM service was done less than 1 minute ago. +If a user gets such an error message - it means that 1 reload in 1 minute for a particular FPM service has been already done. Just try performing the same operation once again in a while. + +![](/images/XRayEndUserFPMerror.png) + +### X-Ray automated throttling detection + +:::tip Note +**CPU throttling detection** is available since `alt-php-xray-0.3-2` and `lvemanager-xray-0.5-2`. + +**IO/IOPS throttling detection** is available since `alt-php-xray-0.3-7` and `lvemanager-xray-0.7-1`. + +- `kmod-lve-2.0-23` (and later) for CloudLinux OS Shared 8 or CloudLinux OS Shared 7 hybrid +- `kernel-1.5-58` (and later) for CloudLinux OS Shared 7 or CloudLinux OS Shared 6 hybrid + +are also required to utilize the feature of **IO/IOPS throttling detection**. +::: + +:::warning Warning +X-Ray automated throttling detection feature is not supported for CloudLinux OS Shared 6 +::: + +The X-Ray automated throttling detection system checks if the account exceeds LVE limits by CPU or by IO/IOPS during the HTTP request execution. Requests with exceeded LVE limits are indicated in both X-Ray Administrator and X-Ray User plugins. + +If CPU limiting was detected for a particular request, it is indicated in the X-Ray UI that the system itself has slowed down the request processing due to CPU throttling and this is apparently not a performance issue in the PHP code. + +If limiting by IO and IOPS in total was detected for a particular request, it is indicated in the X-Ray UI in the same manner, except for the cause of slowing down the request -- IO throttling. + +The case of both limiting for the request is also possible. + +![](/images/CPUIOLimiting.png) + +Requests with exceeded LVE limits are also marked in the request detailed view. + +![](/images/RequestDetails.png) + +Requests with exceeded LVE limits are marked in the PDF report as well. + +![](/images/PDFReport.png) + + +### X-Ray client + +X-Ray client is a PHP extension named `xray.so`. It analyzes the processing time of the entire request and its parts and then sends the data to the X-Ray agent. + +#### List of supported PHP versions + +The list of currently supported PHP versions: + +| | | | | | +|-|-|-|-|-| +|**ALT PHP**:|**EA PHP**:|**Plesk PHP**|**DirectAdmin PHP**|**Other panels PHP**| +| ||||| + +:::warning Warning! +[php-zts](/cloudlinux_os_components/#how-to-configure-alt-php72-zts-to-use-with-php-selector) and [custom PHPs, rolled in selector](/cloudlinux_os_components/#roll-your-own-php), are not supported +::: + +#### Functions that X-Ray client can hook + +#### Database queries + +* Functions from the [MySQL](https://www.php.net/manual/ru/book.mysql.php) extension: + * `mysql_query` + * `mysql_db_query` + * `mysql_unbuffered_query` +* Functions from the [MySQLi](https://www.php.net/manual/ru/book.mysqli.php) extension: + * `mysqli_query` + * `mysqli::query` + * `mysqli_multi_query` + * `mysqli::multi_query` + * `mysqli_real_query` + * `mysqli::real_query` +* Functions from the [PDO](https://www.php.net/manual/ru/book.pdo.php) extension: + * `PDO::exec` + * `PDO::query` + * `PDOStatement::execute` + +#### External requests + +* Function [curl_exec](https://www.php.net/manual/ru/function.exec) + +#### System PHP functions + +It may be any PHP system function which can be related to a PHP engine or other PHP extension, for example `fopen()` or `json_encode()`. A list of these functions can be found [here](https://www.php.net/manual/en/indexes.functions.php). + +#### Configuration Options + +
+ +#### xray.enabled + +
+ +**Syntax**: `xray.enabled=On/Off` + +**Default**: On + +**Changeable**: PHP_INI_SYSTEM + +**Description**: Enable or disable X-Ray extension from php.ini + +----- + +
+ +#### xray.database_queries + +
+ +**Syntax**: `xray.database_queries=[number]` + +**Default**: 20 + +**Changeable**: PHP_INI_SYSTEM + +**Description**: The number of the slowest SQL queries which will be sent to the X-Ray agent. The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. + +----- + +
+ +#### xray.external_requests + +
+ +**Syntax**: `xray.external_requests=[number]` + +**Default**: 20 + +**Changeable**: PHP_INI_SYSTEM + +**Description**: The number of the slowest external requests (the curl_exec function) which will be sent to the X-Ray agent. The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. + +----- + +
+ +#### xray.system_functions + +
+ +**Syntax**: `xray.system_functions=[number]` + +**Default**: 20 + +**Changeable**: PHP_INI_SYSTEM + +**Description**: The number of the slowest system functions which will be sent to the X-Ray agent. +The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. + +----- + +
+ +#### xray.backtrace_depth + +
+ +**Syntax**: `xray.backtrace_depth=[number]` + +**Default**: 10 + +**Changeable**: PHP_INI_SYSTEM + +**Description**: The backtrace depth to the main() function which will be sent to the X-Ray agent. The min value is 0 and the max value is 20. If the variable value is more, the default value will be used. + +----- + +
+ +#### xray.processor + +
+ + +**Syntax**: `xray.processor=[processor_name]` + +**Default**: xray + +**Changeable**: PHP_INI_SYSTEM + +**Description**: Tells the X-Ray client which processor to use. The new processors may be added in the future. The default processor is xray which means to send data to the X-Ray agent. + +----- + +
+ +#### xray.tasks + +
+ +**Syntax**: `xray.tasks=host:uri:ip:id` + +**Default**: no value + +**Changeable**: PHP_INI_SYSTEM + +**Description**: The current tracing tasks for the given PHP request. This directive is added automatically by the X-Ray manager when creating a task. It is not allowed to edit manually, as X-Ray may stop working. + +----- + +
+ +#### xray.to_file + +
+ +**Syntax**: `xray.to_file=On/Off` + +**Default**: Off + +**Changeable**: PHP_INI_SYSTEM + +**Description**: Only for debug purposes. Writes to a file data which is sent to the processor. + +----- + +
+ +#### xray.debug + +
+ +**Syntax**: `xray.debug=On/Off` + +**Default**: Off + +**Changeable**: PHP_INI_SYSTEM + +**Description**: Only for debug purposes. Enables debug output during request processing. In the On mode can slow down the domain. + +----- + +
+ +#### xray.debug_file + +
+ +**Syntax**: `xray.debug_file=[path_to_file]` + +**Default**: `/tmp/xray-debug.log` + +**Changeable**: PHP_INI_SYSTEM + +**Description**: Only for debug purposes. Specifies a file for logging debug information. + + +### X-Ray agent + + +This is a service that receives data from the X-Ray client and sends it to the remote storage. + +#### Managing X-Ray service + +The X-Ray agent is managed by the `service` utility. + +* To start the X-Ray agent, run the following command: + +
+ + ``` + # service xray-agent start + ``` +
+ +* To stop the X-Ray agent, run the following command: + +
+ + ``` + # service xray-agent stop + ``` +
+ +* To restart the X-Ray agent, run the following command: + +
+ + ``` + # service xray-agent restart + ``` +
+ +### FAQ + +#### Does X-Ray affect website performance? + +X-Ray affects website performance. Our tests show 5-10 % overhead from a website loading time with X-Ray tracing enabled. +X-Ray allows you to find website performance issues and should not be enabled permanently. If your website is very slow, you can enable X-Ray to find the cause and then disable it. + +#### 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). + + ![](/images/XRayPHPInfoRemoteAddr.png) + +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: + + ![](/images/XRayPHPInfo.png) + +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. + +4. 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. + +5. If, after checking the previous items, the issue persists, [contact our support team](https://cloudlinux.zendesk.com/hc/en-us/requests/new). + +#### 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. + + ![](/images/XRayScanDir.png) + + 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](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 + + + +## Centralized Monitoring + + +* [Description](/cloudlinux-os-plus/#description-2) +* [Installation](/cloudlinux-os-plus/#installation-2) +* [Centralized Monitoring: mode without session expired](/cloudlinux-os-plus/#centralized-monitoring-mode-without-session-expired) +* [Centralized Monitoring user interface](/cloudlinux-os-plus/#centralized-monitoring-user-interface) +* [Alert Manager](/cloudlinux-os-plus/#alert-manager) +* [FAQ](/cloudlinux-os-plus/#faq-2) +* [Troubleshooting](/cloudlinux-os-plus/#troubleshooting) + +### 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 + +### Installation + +:::tip 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 **lve-utils** package version 4.2.21-2 or later. You can install or update it with the following commands: + * installation + ``` + yum install lve-utils + ``` + * update + ``` + yum update lve-utils + ``` +3. Log in to the [https://cm.cloudlinux.com/](https://cm.cloudlinux.com/) using CLN credentials (if you are already logged in via CLN, authorization via CM is not necessary, it uses SSO). +4. Activate statistics collection on all your servers via the Centralized Monitoring UI ([https://cm.cloudlinux.com](https://cm.cloudlinux.com)) or via the CLN UI [https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring](https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring). + ![](/images/CMInstallationProd.png) +5. Within 5 hours from the activation, statistics collection and sending to the central server will be set up automatically: all required packages and components will be installed. For new, just registered servers, statistics collection and sending will be set up automatically within 5 hours. +6. Make sure you have activated statistics collection (see paragraph 4) otherwise you will not be able to set up your servers. For instant set up of a registered server after statistics collection was enabled, run the following commands for all servers: + ``` + # rhn_check + # /usr/share/cloudlinux/cl_plus/manage_clplus enable + ``` + **Note**: If the `rhn_check` command is not found, run the following command: + ``` + # yum install/update rhn-check rhn-setup + ``` +7. After 5 hours (or after the manual setup), check that statistics for all registered servers is collected via [https://cm.cloudlinux.com/#/servers](https://cm.cloudlinux.com/#/servers). And check that user statistics on the servers is collected via [https://cm.cloudlinux.com/#/users](https://cm.cloudlinux.com/#/users). + :::tip Note + User statistics will be available only for users that were loaded starting from connecting the server to the Centralized Monitoring. + ::: + + +### Centralized Monitoring: mode without session expired + +Users can monitor server’s or user’s load for a long time using the mode without session expired. + +To turn on the mode without session expired, follow the next steps: + +1. Log in to the [cln.cloudlinux.com](https://cln.cloudlinux.com/console/) via your account +2. Open the [cm.cloudlinux.com](https://cm.cloudlinux.com/#/servers) in a new browser tab/window (please, use the same browser as in step 1) +3. Use the toggle to turn on/off 10 min auto logout + + ![](/images/AutoLogout.png) + +Your session in the [cln.cloudlinux.com](https://cln.cloudlinux.com/console/) will expire in 10 min. But your session in the [cm.cloudlinux.com](https://cm.cloudlinux.com/#/servers) will not expire while your browser tab remains open. + + +### Centralized Monitoring user interface + + +You can access Centralized Monitoring in your [CLN account](https://cln.cloudlinux.com/). +Click C-Monitoring in the left menu. + +![](/images/CMCLNAccount.png) + +#### Servers + + +This page contains the list of all clients’ end servers. The server appears in the list after finishing [Installation](/cloudlinux-os-plus/#installation-2). By default, there is a descending sort by CPU usage. + +![](/images/CMAllServers.png) + +The following values are available for each server: + +* **Load Avg 15m** – average system load for the last 15 min +* **CPU Usage** – CPU usage for the last 15 min (the number of cores can be found in the hint) +* **Memory Usage** – free available memory, the second value is the total memory for the last 15 min +* **IO read/write** – disk read bytes/disk written bytes for the last 15 min + +:::tip Note +The values are calculated using a 15 min time period but the metric state is updated automatically every minute by default or you can choose from one of the predefined periods. +::: + +* **Idle state** – there were no statistics for the server for the last minute. +* **N/A state** – there were no statistics for the server for the last 30 days. This can happen if a new server was added but statistics sending was not configured. + +There is no pagination on the _All servers_ page and all columns can be sorted by absolute value. +Use the search tool to operate with the data. + +#### Servers details + +To get the detailed statistics for the server via charts, click a desired server line in the table. +All charts are auto-refreshed and there is an ability to select the period for metrics data to be updated for the chart. + +![](/images/CMUPdates.png) + +:::warning Note +We store the metrics data for one month only. +::: + +#### Charts for server metrics + +#### Visualization of the most popular server states + +![](/images/CMMostPopularStates.png) + +#### Disk space usage + +![](/images/CMDiskSpaceUsage.png) + +#### Open file descriptor/Context switches + +![](/images/CMOpenFileDescriptorContextSwitches.png) + +#### System load 1m , 5m, 15m + +![](/images/CMSystemLoad.png) + +#### CPU usage (total, system, user, iowait, steal) + +![](/images/CMSCPUUsag.png) + +#### Network traffic usage + +![](/images/CMNetworkTrafficUsage.png) + +#### Disk space usage + +![](/images/CMDiskSpaceUsageBasics.png) + +#### Memory usage (total, used, available) + +![](/images/CMMemoryUsage.png) + +#### Time spent doing I/Os + +![](/images/CMTimeSpentDoingIO.png) + +#### Disk IOps Completed + +![](/images/CMDiskIOpsCompleted.png) + +#### Disk read/write data + +![](/images/CMDiskReadWriteData.png) + +#### Disk read/write time + +![](/images/CMDiskReadWriteTime.png) + +#### Apache connections (number)/Number of requests per minute/Max connections + + +:::warning Note +In the current version, we collect these metrics for the cPanel end servers only. We are planning to add other panels support soon. +::: + +:::warning Note +In the current version, we collect these metrics only for Apache (NOT for LiteSpeed, Nginx, etc.). The charts will be empty for LiteSpeed, Nginx, etc.. +::: + +#### MySQL queries + +![](/images/CMMySQLQueries.png) + +MySQL queries collector gets number of queries executed on the server per minute. It takes data from the MySQL server variable "Questions". You may manually check variable value by executing query `SHOW GLOBAL STATUS LIKE 'Questions';`. For more information about MySQL server variables - please, see MySQL documentation. + +#### The most loaded server users for the last minute + +![](/images/CMMostLoadedUsers.png) + +We calculate the user’s load by LVE statistics that we collect on the end server. +The idle state for the user means that the LVE statistics were not collected for the last minute for some reason. + +In each cell there are current usage/limit values for the basic LVE limits: + +* CPU Usage +* Entry Processes +* Physical Memory Usage +* IOPS +* IO Usage +* Number of Processes +* MySQL CPU +* MySQL IO + +In the hint, there is a number of faults for each limit. The values in the columns are underlined (it is red if load-to-limit ratio >=90% and it is yellow if load-to-limit ratio >= 50%). For the current implementation, the only sort by the load-to-limit ratio is available. +By default, there is a descending sort by the CPU usage column. + +When sorting by a column, the lines with the load-to-limit ratio >=90% for this column will have the red background color, and lines with the load-to-limit ratio >=50% for this column will have the yellow background color. + +:::tip Note +The users with unlimited resources (∞) will be at the bottom of the table. +::: + +#### Users + +This page contains all users for the all server of the client and their LVE statistics for the last minute. You can select the number of users on this page and search by user’s data. + +The description of this page is the same as [*The most loaded server users for the last minute*](/cloudlinux-os-plus/#the-most-loaded-server-users-for-the-last-minute) of the top 5 loaded users. + + +![](/images/CMUsers.png) + +User’s metrics data can be sorted by the load-to-limit ratio and by the absolute value. + +The absolute value is used to analyse the load produced by unlimited users. + +The value of the load-to-limit ratio is convenient to use in the analysis of how many resources the users consume and whether they need to change the limits. + +The values like this ![](/images/CMvalue.png) means that the resource is unlimited and 500.2 MB is the current usage of it. + +Metrics data of _Idle users_ is not used in the sorting, so such users always will be at the end of the list. The sorting can be done for only one metric. + +#### Charts for Users metrics + +:::warning Note +We store the metrics data for one month only. +::: + +On the user details page, the admin can find the charts for all LVE limits. + +![](/images/CMUsersCharts.png) + + +### Alert Manager + +Alert Manager allows you to create a server or user alert for selected metrics and email the triggered events. + +#### Alert Manager page + +![](/images/CMAlertManager1.png) + +The Alert Manager page contains a table with the following: + +* **Alert name** - a unique alert name +* **Tracking metric** - a name of a server/user metric which will trigger the alert notification +* **# of servers** - number of servers on which the metric will be tracked + * click ![](/images/CMAlertManager2.png) to view a list of servers host names +* **# of users** - number of users for which the metric will be tracked + * click ![](/images/CMAlertManager2.png) to view a list of users names +* **Value** - a condition for the alert rule which will be applied to the tracking metrics +* **Email** - email to send the triggered events notifications +* **Type** - a type of the alert rule +* **# of triggered events** - the number of events from the time, when alert rule was created + * ![](/images/CMAlertManager3.png) the event is still firing +* **Time of the last trigger** - the time of last triggered event, it is the time in your browser time zone +* **Actions** - click ![](/images/CMAlertManager4.png) to edit and ![](/images/CMAlertManager5.png) to delete the alert rule + +**Color Codes** + +* **Red** color means that the event with the condition "more than" is still firing. +* **Green** color means that the event with the condition "less than" is still firing. + +#### Creating an alert + +To create a new alert, click the _Create alert_ button. + +![](/images/CMAlertManager7.png) + +Next, fill out the opened popup. + +![](/images/CMAlertManager6.png) + +* **Name of alert** - a unique alert name +* **Alert type** - an admin can create a **user** or a **server** alert. [What is the difference between them?](/cloudlinux-os-plus/#difference-between-the-server-alert-and-the-user-alert) +* **Select user/server** - admin will see such dropdown depending on a [case of alert creating](/cloudlinux-os-plus/#cases-of-alert-creating) +* **Notify me** - the condition of the alert trigger +* **Duration** - how much time the condition should be actual to trigger the notification +* **Notify me on email** - the email to send notifications + +#### Editing an alert + +An admin can edit any field in the Alert except the Alert type. + +#### Difference between the server alert and the user alert + +The **server alert** is used to track the state of the whole server, it does not track user state on the server. +The **server alert** tracks the next list of metrics: + +1. Context switches +2. System load (1m) +3. System load (5m) +4. System load (15m) +5. CPU Basic (total) +6. CPU Basic (system) +7. CPU Basic (user) +8. CPU Basic (iowait) +9. CPU Basic (steal) +10. Network Traffic Basic (`eht0_receive`) +11. Network Traffic Basic (`eht0_transmit`) +12. Network Traffic Basic (`ehtN_receive`) +13. Network Traffic Basic (`ehtN_transmit`) +14. Disk Space Used Basic (`mountpoint: <0>`) +15. Disk Space Used Basic (`mountpoint: <1>`) +16. Disk Space Used Basic (`mountpoint: `) +17. Memory Basic (available) +18. Memory Basic (used) +19. Time spent Doing I/Os +20. Disk IOps Writes Completed +21. Disk IOps Reads Completed +22. Disk Read Data +23. Disk Write Data +24. Disk Read Time +25. Disk Write Time +26. Apache connections +27. Number of requests per minute +28. MySQL queries +29. Hardware Temperature (`chip<0>`) +30. Hardware Temperature (`sensor<0>`) +31. Hardware Temperature (`chip`) +32. Hardware Temperature (`sensor`) +33. Open File Description + +During creating a server alert an admin should select the type of metrics as the first step. The list of servers will be collected according to the availability of these metrics on the server. + +For example, for now, we do not collect Apache metrics for non-cPanel servers, so you will get only cPanel servers as a list of servers for these metrics. + +We're planning to implement support for other panels/web servers in the next releases. + +:::tip Small limitation +We collect the server list according to having their statistics in our database (this behavior will be changed in the next releases). +::: + +For example, if server state is N/A or idle more than 24 hours, it will not be visible in the list for the alert. + +The **user alert** tracks the next list of LVE metrics: + +1. CPU Usage (current usage) +2. CPU Usage (faults) +3. Entry Processes (current usage) +4. Entry Processes (faults) +5. Physical Memory Usage (current usage) +6. Physical Memory Usage (faults) +7. IOPS (current usage) +8. IOPS (faults) +9. IO Usage (current usage) +10. IO Usage (faults) +11. Number of Processes (current usage) +12. Number of Processes (faults) +13. MySQL CPU (current usage) +14. MySQL CPU (faults) +15. MySQL IO (current usage) + +:::tip Small limitation +We collect the server list according to having their statistics in our database (this behavior will be changed in the next releases). +::: + +For example, if the user state is N/A or idle more than 24 hours, it will not be visible in the list for the alert. + +#### Cases of alert creating + +* Creating a server alert for the selected metrics for one server +* Creating a server alert for the selected metrics for all servers (the default value) + +In this two cases, you will not see the dropdown for selecting users because the metrics will track the server state. + +* Creating a user alert for one user, so admin can select a server and a user. +* Creating a user alert for all users on several servers/all servers (in this case admin can't select users - all users will be selected automatically) + +#### What is the Firing state of the alert? + +This is the state of an alert that has been active for longer than the configured threshold duration. + + +#### Alert notifications + +![](/images/CMAlertManager8.png) + +* **Alert name** - the link to the alert page +* **Firing target** - the link to the server details page + + + +### FAQ + +#### How can I disable collecting and sending statistics on a client’s server? + +Run this command: + +
+ +``` +/usr/share/cloudlinux/cl_plus/manage_clplus disable +``` +
+ + +#### Where can I view all my servers load? + +You can find all your servers load in your CM personal account here: [https://cm.cloudlinux.com/#/servers](https://cm.cloudlinux.com/#/servers) or in your CLN personal account here: [https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring](https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring). + + +#### Where can I view all my users load? + +You can find all your users load in your CM personal account here: [https://cm.cloudlinux.com/#/users](https://cm.cloudlinux.com/#/users) or in your CLN personal account here: [https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring](https://cln.cloudlinux.com/console/cloudlinux/centralized-monitoring) + + +#### Where can I view a server load details for a period? + +Click the desired server in the server list in the UI. + +#### Where can I view a user load details for the period? + +Click the desired user in the user list in the UI. + +#### How long are statistics stored in the central database? + +30 days. + +#### How can I change the charts period on the details page? + +Choose the desired period in the upper right corner or select it directly on the chart. + +#### I don’t understand how to read the user load chart. + +The user load chart contains three lines: + +* limit +* current load +* count of faults + +Limit and current load are drawing regarding the left vertical axis, the count of faults is drawing regarding the right vertical axis. You can focus on a particular line by clicking a required legend. + + +### Troubleshooting + +#### I can't see a server statistics + +1. Check that your server is registered by key or by IP license of the CloudLinux+ account, i.e., it should be seen in the list of servers in your CLN account here: [https://cln.cloudlinux.com/console/auth/login](https://cln.cloudlinux.com/console/auth/login) +2. Check that the following required packages are installed on the end server: +* `cl-end-server-tools` >= 1.0.7-1 +* `cl-node-exporter` >= 1.1.0-2 +* `rhn-client-tools` + * CloudLinux OS Shared 6 >= 1.1.15-3.el6.cloudlinux.26 + * CloudLinux OS Shared 7 >= 2.0.2-31.el7.clouldinux + * CloudLinux OS Shared 8 >= 2.8.16-14.module_el8.1.0+6074+9dc6073e.cloudlinux.2 +* `lve-stats` >= 3.0.7-2 +* `lve-utils` >= 4.2.21-2 +* `alt-python27-cllib` >= 2.1.13-1 +* `lvemanager` >= 6.2.10-1 +3. Check that service collecting and sending statistics is running: + +
+ +``` +service cl_plus_sender status +``` +
+ +4. Check that log of the _cl_plus_sender_ service doesn't contain errors: + +
+ +``` +/var/log/clplus_sender.log +``` +
+ +#### Where can I view the events log on the client's server? + +You can view the events log on the client's server here: + +
+ +``` +/var/log/clplus_sender.log +``` +
+ +#### Can I get monitoring metrics from LiteSpeed, Nginx or other (Not Apache) web server? + +Starting from end-server-tools-1.0.7, it supports collecting and sending statistics from the Apache and LiteSpeed web servers. + +LiteSpeed is supported on cPanel and DirectAdmin control panels. + +Each minute the statistics collection daemon checks which web server is started. If LiteSpeed is started, the daemon will collect data from it, otherwise, it checks if Apache is started. + +When the daemon detects that the server is changed, it writes the following line into the statistics collection daemon log `/var/log/clplus_sender.log`: + +``` +2020-10-09 17:25:31,462: (CL+_sender_daemon) [INFO] Apache/Litespeed collector: Using Apache +``` +or + +``` +2020-10-09 18:13:03,897: (CL+_sender_daemon) [INFO] Apache/Litespeed collector: Using Litespeed +``` + +If the daemon can't detect either Apache or LiteSpeed, it writes to the log the following: + +``` +2020-10-09 17:33:38,399: (CL+_sender_daemon) [INFO] Apache/Litespeed collector: Apache or Litespeed stopped or absent, collector will not work +``` + +The statistics collection daemon reacts to the server changing automatically, no need to restart it. + +:::warning 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 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 + + +## AccelerateWP + +### Get 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 features suites. + +AccelerateWP suite is always enabled when AccelerateWP is turned on. Choose whether you want to offer AccelerateWP Premium + or CDN (Content Delivery Network) for your users (by opting in) and click "Turn on" to start exploring AccelerateWP. + +![](./images/awp/AWPGettingStarted.png) + +Once the AccelerateWP suite is enabled by 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 enabled by administrator, end-users will get 1 GB of CDN traffic and be able to activate +feature to use until limit is reached. Once 1GB limit is reached - end-user will be suggested to extend CDN limit by +purchasing CDN plan using [WHMCS or 3'd party billing](#billing-integration) + +When AccelerateWP Premium suite enabled by 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](#billing-integration). + + +#### AccelerateWP suite +This is a basic suite which includes [AccelerateWP base feature](https://user-docs.cloudlinux.com/wpos-plugin/#acceleratewp-feature-wordpress-optimization-plugin): +a WordPress optimization plugin that provides full page caching, GZIP compression and some other useful optimizations. + +**AccelerateWP suite limitations** +* the website must be served with Apache web server; +* the website must use PHP version 7.2 or higher. +* the WordPress version must be 5.6 and higher. +* the other WordPress Caching plugins must not be installed. +* the WordPress should not run in Multisite mode. + +#### AccelerateWP Premium suite + +This is a premium suite which includes [Object Caching feature](https://user-docs.cloudlinux.com/wpos-plugin/#acceleratewp-premium-object-caching-feature). + +The Object Caching mechanism stores database query results in additional storage for quick access. +This mechanism is really helpful in case if website 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. + +[Image Optimization feature](https://user-docs.cloudlinux.com/wpos-plugin/#image-optimization) + +[Critical CSS feature](https://user-docs.cloudlinux.com/wpos-plugin/#css-files) + +**Premium suite limitations** + +* the website must be served with Apache web server; +* the website must use one of the following PHP handlers: + * [php-fpm](https://blog.cpanel.com/how-to-use-php-fpm-with-cpanel/) + * [lsapi](/cloudlinux_os_components/#apache-mod-lsapi-pro) +* the website must use ea-PHP version 7.4 or 8.0. +* the WordPress version must be 3.7 and higher. +* the other WordPress Caching plugins must not be installed. +* the [Snuffleupagus](https://snuffleupagus.readthedocs.io/) must be turned off. +* the WordPress should not run in Multisite mode. + + +#### AccelerateWP Premium CDN suite + +This suite includes [CDN feature](https://user-docs.cloudlinux.com/wpos-plugin/#cdn) + +CDN (Content Delivery Network) is the feature which speeds up resource loading for WordPress site customers. +[CDN suite limitations](#acceleratewp-suite) are the same as for AccelerateWP feature. + + +### Limitations +There are the following requirements to use AccelerateWP: +* the server must have CloudLinux Shared PRO license; +* the server must be powered with cPanel or Plesk. + + +### Administrator interface + +#### Overview +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. + +![](./images/awp/AWPAdmin.png) + +Once the feature suite is enabled by 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 is shown. + +![](./images/awp/AWPStats.png) + +It includes: +* `Active Users` block with total number of users and number of users who has activated the optimization feature/total users +* `Wordpress sites on server` block with 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 total number of user's WordPress sites. + +The second column `AccelerateWP` shows 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. + +![](./images/awp/AWPPremiumManage.png) + +In case if both AccelerateWP and AccelerateWP Premium feature suites are enabled, +the statistics is extended with AccelerateWP Premium metrics. + +![](./images/awp/AWPStatsPremium.png) + +Please notice the `AccelerateWP Premium` rows in the `Active Users` and the `Wordpress sites on server` +blocks, and also the `AccelerateWP Premium` column in statistics table. + +:::tip 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. + +![](./images/awp/AWPFilters.png) + +* `Users with WordPress sites only` filter will show statistics for users which already have WordPress sites; users without WordPress installations will be hidden +* `Users with AccelerateWP only` filter will show statistics for users who utilizes the AccelerateWP optimization feature; users who did not activated AccelerateWP feature will be hidden +* `Users with AccelerateWP Premium only` filter will show statistics for users who utilizes AccelerateWP Premium (Object Caching) feature; users who did not activated AccelerateWP Premium feature will be hidden +* `Users with CDN Free only` filter will show statistics for users who utilizes AccelerateWP CDN feature +* `Users with CDN Pro only` filter will show statistics for users who utilize AccelerateWP CDN Pro feature + + +### Activate free AccelerateWP for all WordPress sites on the server +Use the `cloudlinux-awp-admin enable-feature` CLI command to +ensure the best performance for every end-user. CLI command +scans a server for all WordPress sites and activates the AccelerateWP +feature suite. It can take up to 2 minutes for a single site. CLI command skips activation for WordPress sites with +page caching or feature incompatibilities. + +:::tip Note +Please make sure your AccelerateWP version is >= 1.2-2 before proceed. +::: + +Scan the server in background mode and activate AccelerateWP +on those WordPress sites where it is possible: +``` +cloudlinux-awp-admin enable-feature --all +``` +The output will state the number of users for the scan and the +progress state of the process. + +Check activation status: +``` +cloudlinux-awp-admin enable-feature --status +``` +The output will be either: +* Activation is still in progress, +* Activation is done. The message will state how many users +were initially for the scan, a number of WordPress sites with +successfully activated suite, and the total number of WordPress sites +scanned. + +### Enable AccelerateWP CDN Pro + +To enable CDN Pro for all users: +``` +cloudlinux-awp-admin set-suite --suites accelerate_wp_cdn_pro --users all --allowed-for-all +``` + +To enable CDN Pro for a particular user: +``` +cloudlinux-awp-admin set-suite --suites accelerate_wp_cdn_pro --allowed --users= +``` + +### Disable AccelerateWP for a particular user +Use CLI commands to disable undesired optimization suites for a single user. + +To disable AccelerateWP suite: +``` +cloudlinux-awp-admin set-suite --suites=accelerate_wp --disallowed --users= +``` + +To disable AccelerateWP Premium suite: +``` +cloudlinux-awp-admin set-suite --suites=accelerate_wp_premium --disallowed --users= +``` + +To disable AccelerateWP CDN suite: +``` +cloudlinux-awp-admin set-suite --suite=accelerate_wp_cdn --disallowed --users= +``` + +To disable AccelerateWP CDN Pro suite: +``` +cloudlinux-awp-admin set-suite --suite=accelerate_wp_cdn_pro --disallowed --users= +``` + +To disable all suites: +``` +cloudlinux-awp-admin set-suite --suites=accelerate_wp,accelerate_wp_premium,accelerate_wp_cdn,accelerate_wp_cdn_pro --disallowed --users= +``` + +### Useful AccelerateWP CLI commands +Use CLI commands to check AccelerateWP features status. + +If you are also interested in Smart Advice CLI command, they could be found [here](/cloudlinux-os-plus/#useful-smart-advice-cli-commands). + +:::warning Warning! +This is an experimental feature. The backwards compatibility is not guaranteed. +::: + + +#### AccelerateWP suites statistics + +Get suites statistics for all users: +``` +cloudlinux-awp-admin get-report --all +``` + +or for a particular user: +``` +cloudlinux-awp-admin get-report --users= +``` + +This CLI command returns the following information: +* total number of users in the report -- `total_users_count` +* total number of websites in the report -- `total_wordpress_count` +* total number of users with particular suite enabled -- `total_users_count_active` +* total number of websites with particular suite enabled -- `total_sites_count_active` +* number of websites with particular suite enabled per each user in the report -- `*_sites_count` in the `users` list +* suites visibility status per each user in the report -- `suites` in the `users` list + * possible values for visibility status are: `visible`, `allowed`, `disabled` + +The example output for a single user is given below: + +``` +{ + "last_scan_time": 1681198804, + "result": "success", + "timestamp": 1681203383.3503218, + "total_sites_count_active": { + "accelerate_wp": 1, + "accelerate_wp_premium": 0 + }, + "total_users_count": 1, + "total_users_count_active": { + "accelerate_wp": 1, + "accelerate_wp_premium": 0 + }, + "total_wordpress_count": 2, + "users": [ + { + "accelerate_wp_active_sites_count": 1, + "accelerate_wp_premium_sites_count": 0, + "suites": { + "accelerate_wp": { + "source": "manual", + "status": "allowed" + }, + "accelerate_wp_premium": { + "source": "default", + "status": "visible" + } + }, + "username": "user16", + "wp_sites_count": 2 + } + ] +} +``` + +#### AccelerateWP features statistics + +Get overall AccelerateWP features usage statistics for a server with: + +``` +cloudlinux-awp-admin get-stat +``` + +This CLI command returns the following information: +* number of `allowed_users` in `total` and per feature +* number of sites with enabled features in `total` and per feature -- `enabled_sites` +* number of users with visible features in `total` and per feature -- `visible_users` +* features which are currently allowed -- `features_allowed_by_default` +* features which are currently visible -- `features_visible_by_default` + +The example output is given below: + +``` +{ + "allowed_users": { + "object_cache": 0, + "site_optimization": 1, + "total": 1 + }, + "enabled_sites": { + "object_cache": 0, + "site_optimization": 1, + "total": 1 + }, + "features_allowed_by_default": [ + "site_optimization" + ], + "features_visible_by_default": [ + "object_cache", + "site_optimization" + ], + "is_accelerate_wp_flag_enabled": false, + "is_accelerate_wp_icon_enabled": true, + "result": "success", + "timestamp": 1681208259.19426, + "visible_users": { + "object_cache": 22, + "site_optimization": 22, + "total": 23 + } +} +``` + +#### AccelerateWP features detailed statistics + +AccelerateWP features detailed statistics is available in user's environment only. + +Use the following CLI command **_on behalf of a user_**: + +``` +cloudlinux-awp-user get +``` + +The command reports: +* features allowed for a user -- `allowed_features` +* all user's websites `docroots` with features information per each `wps`, which includes: + * status of each feature -- if the feature is `enabled`, if the feature is `visible` + * issues detected (if any) for each feature +* subscription status (for premium features) -- `subscription` +* features visible for a user -- `visible_features` + +The example output is given below: + +``` +{ + "allowed_features": { + "accelerate_wp": [], + "accelerate_wp_premium": [] + }, + "docroots": [ + { + "domains": [ + "user0.com" + ], + "php_handler": "fastcgi", + "php_version": "plesk-php73-fastcgi", + "wps": [ + { + "features": { + "accelerate_wp": { + "enabled": false, + "issues": [ + { + "context": { + "plugins": "WP Rocket" + }, + "description": "Found conflicting plugins: %(plugins)s.", + "fix_tip": "Deactivate and uninstall the conflicting plugin using the WordPress administration interface.", + "header": "Conflicting plugins are enabled", + "type": "incompatibility" + } + ], + "visible": true + }, + "object_cache": { + "enabled": false, + "issues": [ + { + "context": { + "blog_url": "https://blog.cloudlinux.com/", + "supported_handlers": "php-fpm, lsapi" + }, + "description": "Website uses unsupported PHP handler. Currently supported handler(s): %(supported_handlers)s.", + "fix_tip": "Please, set or ask your system administrator to set one of the supported PHP handlers for the domain: %(supported_handlers)s. Or keep watching our blog: %(blog_url)s for supported handlers list updates.", + "header": "Unsupported PHP handler", + "type": "incompatibility" + } + ], + "visible": true + } + }, + "path": "wordpress", + "version": "6.2" + } + ] + }, + { + "domains": [ + "sub.user0.com" + ], + "php_handler": "fastcgi", + "php_version": "plesk-php73-fastcgi", + "wps": [] + } + ], + "max_cache_memory": "64mb", + "result": "success", + "subscription": { + "object_cache": "no" + }, + "timestamp": 1681200081.765476, + "upgrade_url": null, + "used_memory": null, + "visible_features": { + "accelerate_wp": [ + "accelerate_wp" + ], + "accelerate_wp_premium": [ + "object_cache" + ] + } +} +``` + +### WHMCS billing + +CloudLinux developed it's own WHMCS plugin +which provides you AccelerateWP billing integration out of the box. +Check out [the documentation](https://docs.cln.cloudlinux.com/whmcs_awp_plugin/) to find how to install and use the plugin. + +### Other billing integration + +As AccelerateWP Premium is the feature that works on subscription basis, +we made it possible for hosters to integrate their existing billing systems with our plugin and sell the +feature for their users. + +When AccelerateWP Premium is enabled in admin interface, users get proposal to upgrade their subscription. + +![](./images/awp/AWPUpgradeNoLink.png) + +When user upgrades the subscription to the plan with AccelerateWP support, +billing must execute the following command on the server: +``` +cloudlinux-awp-admin set-suite --suites=accelerate_wp_premium --allowed --source=BILLING_OVERRIDE --users= +``` + +This command makes two things: +- allow user to install plugin, bypassing the upgrade window; +- reports premium as being used to CLN, starting the billing cycle for hoster. + + +When user terminates or downgrades plan, the following command must be executed by the billing system: +``` +cloudlinux-awp-admin set-suite --suites=accelerate_wp_premium --default --source=BILLING_OVERRIDE --users= +``` + +### Setup upgrade URL for AccelerateWP Premium + +The upgrade window can be customized with link to the plan upgrade page, which can be set using CLI command: + +``` +cloudlinux-awp-admin set-options --upgrade-url https://plan.upgrade/splash +``` + +![](./images/awp/AWPUpgradeLink.png) + +AccelerateWP automatically appends GET parameters when the link is displayed. + +``` +https://plan.upgrade/splash/?m=acceleratewp&action=provisioning&username=democom&domain=demo.com&server_ip=10.51.0.10 +``` + +| Parameter | Value | Description | +|-----------|--------------|----------------------------------------------------------| +| m | acceleratewp | Constant. | +| action | provisioning | Constant. | +| username | democom | Customer's account name. | +| domain | demo.com | Customer's account primary domain. | +| server_ip | 10.51.0.10 | Primary IP of the server where AccelerateWP is installed | + +Parameters can be used to determine the billing account of the user in order to display proper page. +WHMCS plugin already has automatic redirect to upgrade page, there is only needed to set upgrade-url +to the root of your WHMCS instance. + +``` +cloudlinux-awp-admin set-options --upgrade-url https://whmcs.mydomain.zone/ +``` + +Upgrade URL is opened in modal browser window and will be automatically closed +when AccelerateWP receives callback about successful upgrade. + +Callback is already implemented in WHMCS plugin, but if you are using some other billing, +you should add the following code on the page which appears when user successfully upgrades subscription. + + + + +In order to remove the link, just set upgrade url to the empty one. + +``` +cloudlinux-awp-admin set-options --upgrade-url '' +``` + +### Disable AccelerateWP Premium + +If you would like to stop using AccelerateWP Premium, +click on the `manage` link and remove `Premium Features` checkbox. +AccelerateWP will be still available for your users. + +![](./images/awp/AWPDisablePremiumOnly.png) + +### Disable AccelerateWP + +If you would like to stop using AccelerateWP completely, toggle the `AccelerateWP` back. +Both AccelerateWP and AccelerateWP Premium will be turned off. + +![](./images/awp/AWPDisable.png) + +This operation will: +* disable AccelerateWP tab in users' control panel interface +* disable all AccelerateWP optimization suites +* deactivate all optimization features for all users + +This operation will NOT: +* cancel the subscription made by user in WHMCS or other billing. User's subscription stays + alive and user will still be charged in billing system unless hoster manually makes a refund + + +### Logs +The main AccelerateWP log is located at +* `/var/log/clwpos/main.log` + + +In case if AccelerateWP Premium is active, the auxiliary monitoring daemon `clwpos_monitoring` is also activated. Its log is located at +* `/var/log/clwpos/daemon.log` + + +### FAQ + +#### With which panel can I use AccelerateWP? + +Currently AccelerateWP is compatible with cPanel and Plesk only. + +If you are interested in supporting DirectAdmin control panel, please record your demand on our feature portal respectively: +* [AccelerateWP for DirectAdmin](https://features.cloudlinux.com/c/15-acceleratewp-for-directadmin?utm_medium=social&utm_source=portal_share) + + +#### Is it possible to use AccelerateWP on a non-control panel server? + +No, AccelerateWP is compatible with cPanel and Plesk only. + +#### Do you plan to enable support of Nginx server? + +This is a part of our very long term plans, thus not expected in the nearest future. + +#### How will it help my customers? + +AccelerateWP is a complex solution to help your customers increase their WordPress site performance. AccelerateWP brings number of optimization features, like object caching, css and js preprocessing and website preloading. + +#### How could I monitor Redis instances while using AccelerateWP Premium suite? + +Redis process is started for a user after activating AccelerateWP Premium Object Caching feature for at least one Wordpress site. +It is killed after AccelerateWP Premium Object Caching has been deactivated for all user's websites. + +Look through the processes list to check Redis status for a particular user: +``` + $ ps aux | grep redis + awpuser 2662517 0.0 0.5 101096 8512 ? Sl 15:33 0:00 /opt/alt/redis/bin/redis-server unixsocket:/home/awpuser/.clwpos/redis.sock +``` +In case if AccelerateWP Premium is active, the auxiliary monitoring daemon `clwpos_monitoring` is also activated. It checks Redis instances each 5 minutes, starts new instances, restart failed ones and kills the “garbage” instances if needed. +Check daemon status using `service clwpos_monitoring status` and its main log: `/var/log/clwpos/daemon.log`. + +### My users are complaining that their feature are not installed automatically after subscription upgrade +This can be caused by several reasons. Either your customer's 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. + +Next, you can try to dive into `/var/log/clwpos/daemon.log` and find the reason why the `enable` command failed. +Here is an example of successful feature installation for reference: + + + 2023-02-14 11:01:14,696: (clwpos.daemon_base) [INFO] Running cloudlinux-awp-user enable --feature object_cache --domain wpujj.com --wp-path + 2023-02-14 11:01:15,081: (clwpos.daemon_base) [INFO] Command succeded with output: + `CompletedProcess(args=['/bin/cagefs_enter.proxied', 'cloudlinux-awp-user', 'enable', '--feature', 'object_cache', '--domain', 'wpujj.com', '--wp-path', ''], returncode=0, stdout='{\n "context": {\n "domain": "wpujj.com",\n "feature": "object_cache"\n },\n "result": "success",\n "timestamp": 1676372475.044419,\n \n}\n', stderr='')` + 2023-02-14 11:01:15,086: (clwpos.daemon_base) [INFO] background process finished: pid=415368 + +Also, some useful notes may be present in user's log located at `/home//.clwpos/main.log`. + +If the issue persists, or you cannot resolve it yourself, +contact CloudLinux support and attach `/var/log/clwpos/daemon.log` and `/home//.clwpos/main.log` +for further investigation. + + +### Troubleshooting + +#### End-users of AccelerateWP Premium feature encounter Redis extension is not installed for selected php version +In order to make use of AccelerateWP Premium Object Caching feature, the loaded Redis extension is required for the end-user's website. +End-users will not be able to activate the Object Caching feature until Redis extension configuration is incomplete. + +Corresponding incompatibility warning will be displayed in control panel's User interface: + +![](./images/awp/AWPNoRedis.png) + +The Redis extensions are configured for all installed and supported PHP versions automatically: +* right after the AccelerateWP Premium suite is enabled +* by cron once a day + +or you can trigger the utility manually: +``` +/usr/sbin/enable_redis_for_panel_php +``` + +All errors will be displayed in standard output and logged into `/var/log/clwpos/main.log`. + + +**Ensuring the EA-PHP Redis extension is configured correctly** + +1. Check Redis extension package is installed by running the following command + + ``` + rpm -q ea-phpXY-php-redis + ``` + Install the corresponding extension if it is not present: + ``` + yum install ea-phpXY-php-redis + ``` + Consider the example for checking out and installing Redis extension for `ea-php74`: + ``` + rpm -q ea-php74-php-redis + yum install ea-php74-php-redis + ``` +2. Check Redis `ini` file is present by running the following command: + ``` + ls /opt/cpanel/ea-phpXY/root/etc/php.d/ | grep 50-redis + ``` + Consider the example for checking out Redis extension for `ea-php74`: + ``` + ls /opt/cpanel/ea-php74/root/etc/php.d/ | grep 50-redis + ``` + Try reinstalling the package if `ini` file is missing. +3. Make sure Redis module is loaded under specific user by running the following command: + ``` + su -c "php -m | grep redis" + ``` + + +**Ensuring the ALT-PHP Redis extension is configured correctly** + +1. Check if `redis.so` is present for a particular alt-php version: + ``` + ls /opt/alt/phpXY/usr/lib64/php/modules | grep redis.so + ``` + Consider the example for checking alt-php74 redis.so: + ``` + ls /opt/alt/php74/usr/lib64/php/modules | grep redis.so + redis.so + ``` +2. If the Redis module is missing: + + a. Install the `alt-phpXY-pecl-ext` package manually + b. Run the Redis configuration script `/usr/share/cloudlinux/wpos/enable_redis_for_alt_php.py` + + All errors will be displayed in standard output and logged into `/var/log/clwpos/main.log`. +3. If the Redis module is present for a particular php version, but the incompatibility issue persists, re-check the following: + + a. Make sure the Redis module is loaded under user: + ``` + su -c "php -m | grep redis" + ``` + b. Check the required extensions are enabled in `php.ini`: + ``` + cat /opt/alt/phpXY/etc/php.ini | grep redis.so + cat /opt/alt/phpXY/etc/php.ini | grep json.so + cat /opt/alt/phpXY/etc/php.ini | grep igbinary.so + ``` + + c. Enable missing extensions manually. + + +#### End-users of AccelerateWP encounter PHP-related issues during feature activation +End-users may encounter PHP-related errors while activating the AccelerateWP features. + +![](./images/awp/AWPBrokenPHP.png) + +The general examples of possible reasons are: +* broken PHP binaries +* missing PHP files +* etc. + +To check that this issue is caused by PHP itself, call any PHP command, for example: +``` +/opt/cpanel/ea-php80/root/usr/bin/php -i +``` +And make sure that installed `ea-php80` packages are not broken using +`rpm -V `. + +Reinstall broken packages if found. + +Consider the example issue (presented at the picture above) with broken `mbstring.so` for `ea-php80`: +``` +# /opt/cpanel/ea-php80/root/usr/bin/php -i +Segmentation fault (core dumped) +# rpm -V ea-php80 +# rpm -V ea-php80-php-mbstring +S.5....T. /opt/cpanel/ea-php80/root/usr/lib64/php/modules/mbstring.so +......G.. a /usr/lib/.build-id/9c/38ed78a6d401ff6dce059ccea51c95870d98c5 +# yum reinstall ea-php80-php-mbstring +``` diff --git a/docs/cloudlinux-os-plus/images/awp/AWPAdmin.png b/docs/cloudlinux-os-plus/images/awp/AWPAdmin.png new file mode 100644 index 000000000..ac6ddae32 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPAdmin.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPBrokenPHP.png b/docs/cloudlinux-os-plus/images/awp/AWPBrokenPHP.png new file mode 100644 index 000000000..41ab367ec Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPBrokenPHP.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPDisable.png b/docs/cloudlinux-os-plus/images/awp/AWPDisable.png new file mode 100644 index 000000000..7372711b0 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPDisable.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPDisablePremiumOnly.png b/docs/cloudlinux-os-plus/images/awp/AWPDisablePremiumOnly.png new file mode 100644 index 000000000..d3e2a03cc Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPDisablePremiumOnly.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPFilters.png b/docs/cloudlinux-os-plus/images/awp/AWPFilters.png new file mode 100644 index 000000000..c66a27c07 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPFilters.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPGettingStarted.png b/docs/cloudlinux-os-plus/images/awp/AWPGettingStarted.png new file mode 100644 index 000000000..1680e6942 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPGettingStarted.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPNoRedis.png b/docs/cloudlinux-os-plus/images/awp/AWPNoRedis.png new file mode 100644 index 000000000..903b43202 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPNoRedis.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPPremiumManage.png b/docs/cloudlinux-os-plus/images/awp/AWPPremiumManage.png new file mode 100644 index 000000000..1e8852e92 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPPremiumManage.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPStats.png b/docs/cloudlinux-os-plus/images/awp/AWPStats.png new file mode 100644 index 000000000..672a1647e Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPStats.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPStatsPremium.png b/docs/cloudlinux-os-plus/images/awp/AWPStatsPremium.png new file mode 100644 index 000000000..eef4dd1e8 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPStatsPremium.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPUpgradeLink.png b/docs/cloudlinux-os-plus/images/awp/AWPUpgradeLink.png new file mode 100644 index 000000000..e1662470a Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPUpgradeLink.png differ diff --git a/docs/cloudlinux-os-plus/images/awp/AWPUpgradeNoLink.png b/docs/cloudlinux-os-plus/images/awp/AWPUpgradeNoLink.png new file mode 100644 index 000000000..804f104f0 Binary files /dev/null and b/docs/cloudlinux-os-plus/images/awp/AWPUpgradeNoLink.png differ diff --git a/docs/cloudlinux_installation/.DS_Store b/docs/cloudlinux_installation/.DS_Store new file mode 100644 index 000000000..e04ec8588 Binary files /dev/null and b/docs/cloudlinux_installation/.DS_Store differ diff --git a/docs/cloudlinux_installation/README.md b/docs/cloudlinux_installation/README.md index de785d63a..6539076de 100644 --- a/docs/cloudlinux_installation/README.md +++ b/docs/cloudlinux_installation/README.md @@ -1,22 +1,29 @@ # Installation -* [Hardware compatibility](/cloudlinux_installation/#hardware-compatibility) -* [Converting existing servers](/cloudlinux_installation/#converting-existing-servers) -* [CloudLinux 8 kernel-related features and improvements](/cloudlinux_installation/#cloudlinux-8-kernel-related-features-and-improvements) -* [Activation](/cloudlinux_installation/#activation) -* [Installing new servers](/cloudlinux_installation/#installing-new-servers) -* [CloudLinux OS images](/cloudlinux_installation/#cloudlinux-os-images) -* [Net install](/cloudlinux_installation/#net-install) -* [Provider-specific guidelines](/cloudlinux_installation/#provider-specific-guidelines) -* [LILO boot loader](/cloudlinux_installation/#lilo-boot-loader) -* [Uninstalling](/cloudlinux_installation/#uninstalling) -* [Migration to EasyApache 4](/cloudlinux_installation/#migration-to-easyapache-4) +[[toc]] -### Hardware compatibility +## Hardware compatibility -CloudLinux supports all the hardware supported by RHEL/CentOS, with few exceptions. Exceptions are usually hardware that require binary drivers, and that doesn't have any open source alternatives. +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. -At this moment (for CL6) we are aware of only one such case: +:::tip Note +CloudLinux OS does not support ARM-based CPUs (e.g. Graviton). +::: + +:::warning 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. +::: + +:::tip 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**: | | | | |-|--|-| @@ -25,254 +32,513 @@ At this moment (for CL6) we are aware of only one such case: | B120i/B320i Smart Array SATA RAID Controller | hpvsa | [https://www8.hp.com/h20195/v2/GetPDF.aspx/c04168333.pdf](https://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c01732801)| | SanDisk DAS Cache | | [https://www.dell.com/en-us/work/learn/server-technology-components-caching](https://www.dell.com/en-us/work/learn/server-technology-components-caching)| -### Converting existing servers -* [Explanation of changes](/cloudlinux_installation/#explanation-of-changes) +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](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/considerations_in_adopting_rhel_8/hardware-enablement_considerations-in-adopting-rhel-8#removed-hardware-support_hardware-enablement) -It is easy to convert your existing CentOS server to CloudLinux. The process takes a few minutes and replaces just a handful of RPMs. +## Getting license -* Get `` either by getting [trial subscription](/cloudlinux_installation/#getting-trial-license) or by [purchasing subscription](https://cln.cloudlinux.com/clweb/buy.html). -* Download the conversion script: [cldeploy](https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy). -* If you have an activation key, run the following commands: - -
+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. + +:::tip 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](mailto:sales@cloudlinux.com) and we will help. + +To get the activation key: + +1. Register with CloudLinux Network: [https://cln.cloudlinux.com/console/register/customer](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](https://cln.cloudlinux.com/console/auth/login) +4. Choose the appropriate [CloudLinux edition](/introduction/) 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 by cldeploy script. The process takes a few minutes and replaces just a handful of RPMs. + +:::warning +Unlike [Fresh installation](#installing-new-servers), converting immediately requires CloudLinux OS license. +Please refer to the [guide](#license-activation) 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) + + +:::warning Unsupported OS for conversion: +* CentOS 8 +* CentOS Stream +::: + + +Supported control panels: +* cPanel ([Documentation](https://docs.cpanel.net/installation-guide/system-requirements-cloudlinux/)) +* Plesk +* DirectAdmin +* CyberPanel ([Documentation](https://community.cyberpanel.net/t/1-convert-cyberpanel-to-cloudlinux-os-and-install-cagefs/174)) +* InterWorx ([Documentation](https://appendix.interworx.com/current/nodeworx/plugins/install-use-cloudlinux-plugin-interworx.html)) +* Webuzo ([Documentation](https://webuzo.com/docs/installing-webuzo/install-cloudlinux-os/)) + + +:::warning Other control panels: +Control panels not mentioned in the list of supported panels have native integration or integration by the developer of such a panel. +We cannot guarantee the stability or correct operation of CloudLinux components on such panels. +::: + +:::warning 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 particular 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: + +* Convert CentOS 8 to AlmaLinux 8 using [almalinux-deploy](https://github.com/AlmaLinux/almalinux-deploy) +* Convert AlmaLinux 8 to CloudLinux 8 using [cldeploy](/cloudlinux_installation/#cldeploy-explained) + + +### Downloading and running conversion script + +#### Key-based activation + +If you want to use your activation key for activation, run the following commands: ``` -$ wget https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy -$ sh cldeploy -k +yum install wget -y +wget https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy +bash cldeploy -k ACTIVATION_KEY ``` -
-* If you have an IP-based license, run the following commands: - -
+Where `ACTIVATION_KEY` is the one that you got on previous step. +Your CloudLinux OS edition will be detected automatically based on the `ACTIVATION_KEY` + +#### IP-based activation +If your reseller provides you with an IP-based license, run the following commands: + +To convert server into the CloudLinux OS Shared edition: ``` $ sh cldeploy -i ``` -
-* Reboot by running the following command: - -
+To convert server into the CloudLinux OS Admin edition: +``` +$ sh cldeploy -i --to-admin-edition +``` + +### Next steps +After successful conversion, reboot your system by running the following command: ``` -$ reboot +reboot ``` -
-Once you reboot, you are running CloudLinux kernel with LVE enabled. +Once you reboot - your server should be running with CloudLinux OS LVE kernel. -* For CloudLinux 6 — (RHEL) 2.6 kernel -* For CloudLinux 6 hybrid — (RHEL) 3.10 kernel -* For CloudLinux 7 — (RHEL) 3.10 kernel -* For CloudLinux 7 hybrid — (RHEL) 4.18 kernel -* For CloudLinux 8 — CloudLinux 8 will follow the upstream (RHEL) 4.18 kernel mainline. All CloudLinux-specific features are added as a separate module (lve-kmod). +You may check the booted kernel with the following command: -The script automatically detects and supports the following control panels: -* cPanel with EA4 ([EA3 is not supported](https://blog.cpanel.com/its-been-a-long-road-but-it-will-be-time-to-say-goodbye-soon/)) -* Plesk -* DirectAdmin -* InterWorx * - -It will install CloudLinux kernel, [Apache module](/cloudlinux_os_components/#hostinglimits-module-for-apache), [PAM module](/cloudlinux_os_components/#pam-configuration), [command line tools](/command-line_tools/#command-line-tools-cli) as well as LVE Manager. +``` +$ uname -r +``` -:::tip -* For InterWorx cldeploy script installs mod_hostinglimits, lve-utils, lve-stats packages. LVE Manager is not installed. +:::warning Note +If after rebooting you do not see the CloudLinux kernel (the kernel has the abbreviation LVE in its name) +then please consider check our [knowledge base](https://cloudlinux.zendesk.com/hc/en-us/) or +contact [support](https://cloudlinux.zendesk.com/hc/en-us/requests/new). ::: -:::warning -Note that CloudLinux 8 supports only DirectAdmin as of the initial release. Support for cPanel and Plesk will be added later in 2020. +:::warning Note +SELinux is not supported on CloudLinux OS 6 and 7. SELinux is supported on CloudLinux OS 8+, +but might not work or be compatible with control panels and various components. ::: -ISPmanager 5 has native support for CloudLinux. To deploy CloudLinux on a server with ISPmanager 5, you would need to purchase CloudLinux license directly from ISPSystems and follow ISPmanager's deployment guide. - -Starting from version 1.61, after the end of conversion from CentOS 7.x to CloudLinux 7, the cldeploy script converts CloudLinux 7 to CloudLinux 7 Hybrid. CloudLinux 7 Hybrid has a newer kernel for machines with new hardware. +:::tip Note +At the end of conversion from CentOS 7.x to CloudLinux OS Shared 7, +the cldeploy script converts CloudLinux OS Shared 7 to [CloudLinux OS Shared 7 Hybrid](/cloudlinux_os_kernel/#hybrid-kernels). +::: Automatic hybridization will be performed for the AMD processors with the following CPU families: -* Zen / Zen+ / Zen 2 +* Zen / Zen+ / Zen 2 / Zen 3 * Hygon Dhyana -* Zen 3 -See also [advanced options for cldeploy](/command-line_tools/#cldeploy) +Automatic hybridization may be skipped by passing extra option '--no-force-hybridize'. +See also [advanced options for cldeploy](/command-line_tools/#cldeploy). + +### Minor version step-down + +If you are attempting to convert an AlmaLinux machine of a minor OS version higher than the most recent CloudLinux minor version, you won't be able to perform a standard conversion, since the required packages will be missing. + +E.g. if the AlmaLinux OS 8.8 has already become publicly accessible, but the latest CloudLinux OS release is still 8.7, a standard conversion will not be possible. + +This situation typically occurs after a new AlmaLinux release and persists for several weeks. + +If you cannot wait until the corresponding CloudLinux release, you have an option of performing a step-down conversion, in which cldeploy will install the previous CloudLinux OS minor version on your system. + +For instance, AlmaLinux 8.8 can be converted to CloudLinux 8.7 in such a scenario. :::tip Note -We normally recommend to install `lvemanager`, `lve-utils`, `lve-stats`, and `cagefs` packages after installing a control panel. -But when you deploy CloudLinux from the ISO image, these packages will be preinstalled. You can reinstall them after installing the control panel. +At the moment, the step-down conversion is only supported on systems with no panel, cPanel or Plesk. ::: -#### Explanation of changes +:::tip Note +When performing a step-down conversion, cldeploy will add MySQL and MariaDB RPM packages to the Yum exclude list, in order to avoid downgrading them to CloudLinux-modified versions. + +Not doing so would risk rendering the databases non-functional, since MySQL explicitly does not support minor-version downgrades of its packages. + +If you want to update these packages on a step-down converted system, make sure to exclude/disable the CloudLinux package repositories while doing so. + +In addition, on CloudLinux 9 the kernel packages are downgraded and excluded from updates in order to maintain parity with the CloudLinux kernel modules. +::: + +cldeploy will automatically detect the latest available CloudLinux version and, depending on the result, will either proceed normally or perform the step-down conversion. + +If a normal conversion is not possible, it will request confirmation (yes/no) from the user. To implicitly respond "yes" to this and other questions, running script non-interacively, pass the `-y` option to the cldeploy script. + +#### Updating systems from a step-down conversion + +Once the previously missing minor CloudLinux release becomes available, you will likely want to upgrade to it from a step-down conversion. + +To do so, you need to do the following: + +* Remove the automatically created excludes for MySQL and MariaDB packages from `/etc/yum.conf` + * Specifically, remove `mysql* mariadb*`, and `kernel*` if present, from excludes in your `yum.conf`. + * Any other excluded packages except the above are unrelated to cldeploy and should remain in the configuration. +* Install the newest available `cloudlinux-release` package over the previous one. + * This will replace the AlmaLinux and CloudLinux package repository configuration files that were modified by cldeploy step-down conversion. + * Make sure the new files replace the old ones - check for presence of `.rpmnew` files. +* Update the system normally. + +### Troubleshooting + +If you receive any troubles during the conversion process, +please feel free to search our [knowledge base](https://cloudlinux.zendesk.com/hc/en-us) +or contact our support and attach the conversion log (/var/log/cldeploy.log). + +### How to enable secure boot for CloudLinux 9 + +#### Overview +CloudLinux 9 uses non-modified AlmaLinux 9 kernel.\ +To make secure boot work with CloudLinux's kernel module you need to enroll CloudLinux secure boot key to your server.\ +This procedure shows how to do it + +#### Requirements +* UEFI support +* mokutil package installed +* Access to server's BIOS options menu and boot screen + +#### Procedure +1. Download CloudLinux key + 1. `wget https://repo.cloudlinux.com/cloudlinux/SECURE-BOOT-KEY-cloudlinux-kmod.der` +2. Import the key + 1. `mokutil --import SECURE-BOOT-KEY-cloudlinux-kmod.der` + 2. When prompted, enter a password of your choice. This password will be used when enrolling the key into the MOK list. +3. Reboot server + 1. Upon rebooting, the "Shim UEFI key management" screen appears. Press any key withing 10 seconds to proceed. +4. Enroll the key + +Select `Enroll MOK`\ +![Step 1](./images/cl9_secureboot/1.png) + +Select `View key 0`\ +![Step 2](./images/cl9_secureboot/2.png) + +Make sure that CloudLinux's Secure Boot Key information is displayed\ +Press the Esc key when you are finished\ +![Step 3](./images/cl9_secureboot/3.png) -CloudLinux uses the fact that it is very close to CentOS and RHEL to convert systems in place, requiring just one reboot. Our conversion script does the following actions: +Select `Continue` on the screen from Step 2 +It will ask "Enrol the key(s)?".\ +Select `Yes/OK`\ +![Step 4](./images/cl9_secureboot/4.png) + +Enter the password you used for importing the key (point 2.ii)\ +![Step 5](./images/cl9_secureboot/5.png) + +Select `Reboot` (Older versions may say `Continue boot`)\ +![Step 6](./images/cl9_secureboot/6.png) + +Now you can enable Secure Boot in BIOS options menu + +#### Useful commands +* `mokutil --sb-state` to check current Secure Boot state +* `mokutil --list-enrolled` to show list of enrolled keys + +#### If you wish to remove the CloudLinux key from the MOK list, follow the instructions below +:::warning Warning +Do not delete the key when secure boot is enabled - server will be unable to boot +::: + +1. Disable Secure Boot +2. `mokutil --delete SECURE-BOOT-KEY-cloudlinux-kmod.der` +3. `mokutil --list-delete` (to check the key to be deleted) +4. Reboot the system and go through the MOK management process to complete the deletion from the MOK list. + +### Technical details: cldeploy + +By its design, CloudLinux OS Shared is very close to the upstream operating system - RHEL. +This makes the conversion process relatively straightforward, requiring just one reboot. + +#### Installation process + +Here's what the cldeploy script does when you run it: * Backups the original repository settings into `/etc/cl-convert-saved`. * Backups RHEL system ID into `/etc/cl-convert-saved` (RHEL systems only). -* Installs CL repository settings & imports CL RPM key. -* Replaces redhat/centos-release, redhat-release-notes, redhat-logos with CL version. -* Removes cpuspeed RPM (as it conflicts with CPU limits). -* Re-installs CL version of rhnlib/rhnplugin. +* Installs CloudLinux repository settings & imports CloudLinux RPM key. +* Replaces redhat/centos-release/almalinux-release, redhat-release-notes, redhat-logos with CloudLinux versions. +* Removes cpuspeed RPM (as it conflicts with CloudLinux limits). +* Reinstall CloudLinux version of rhnlib/rhnplugin. * Checks for binary kernel modules, finds replacement if needed. -* Detects OVH servers and fixes mkinitrd issues. +* Detects OVH servers and fixes mkinitrd and possible boot issues. * Detects Linode servers and fixes grub issues. * Checks if LES is installed. * Checks that `/etc/fstab` has correct `/dev/root` -* Checks for efi. -* Installs CL kernel, lve-utils, liblve, lve-stats RPMs. -* Installs LVE Manager for cPanel, Plesk, DirectAdmin, and ISPManager* +* Checks for EFI and performs the necessary configuration. +* Installs CloudLinux kernel, lve-utils, liblve, lve-stats RPMs. +* Installs CloudLinux Manager for the supported control panels. * Installs mod_hostinglimits Apache module *: - * RPM install for Plesk, ISPManager & InterWorx; + * RPM install for supported control panels; * On Plesk, replaces psa-mod_fcgid* with mod_fcgid; - * custombuild for DirectAdmin. + * Perform CustomBuild tool execution for DirectAdmin. -:::warning * -Note that CloudLinux 8 supports only DirectAdmin as of the initial release. Support for cPanel and Plesk will be added later in 2020. -::: +#### Uninstallation process -### Script for converting back: +Here's what the cldeploy script does, if one runs it to uninstall CloudLinux: -* Restores CentOS repositories, and centos-release/release-notes/logos. -* Removes lve, mod_hostinglimits, lve-stats, lvemanager. +* Restores CentOS/AlmaLinux repositories, and almalinux-release/centos-release/release-notes/logos. +* Removes lve, mod_hostinglimits, lve-stats, lvemanager packages. * mod_hostinglimits RPM is removed. -The kernel is not removed - to prevent condition when server has no kernels and wouldn't boot. The command line to remove the kernel is provided. +:::tip Note +**cldeploy doesn't remove the kernel** to prevent condition when server has no kernels and wouldn't boot. Instead, script provide the instructions on how you could remove it manually later, when it is safe to do so. +::: On cPanel servers, rebuild of Apache with EasyApache will complete the conversion back, but doesn't have to be performed immediately. * - On DirectAdmin servers, rebuild of Apache with custombuild will complete the conversion back, but doesn't have to be performed immediately. -:::warning -Note that CloudLinux 8 supports only DirectAdmin as of the initial release. Support for cPanel and Plesk will be added later in 2020. -::: +More information is also available here: [Uninstall CloudLinux](/cloudlinux_installation/#uninstalling). -#### Common issues and troubleshooting during conversion -| | | -|-|-| -|**Issue**|**Solution**| -|Double registration issue with the error: `Maximum usage count of 1 reached`|If you want to use the license on another server or reuse it on the same server after reinstalling, you need to remove the server from CLN and then register the license on your new server. You may use the following page for a reference to remove the server from CLN: [https://docs.cln.cloudlinux.com/index.html?servers.htm](https://docs.cln.cloudlinux.com/index.html?servers.htm) Please don't remove the license, remove only the server.| +## Installing new servers -## CloudLinux 8 kernel-related features and improvements +All CloudLinux OS editions may be installed using one ISO and source. -* [Memory](/cloudlinux_installation/#memory) -* [Security](/cloudlinux_installation/#security) -* [Performance](/cloudlinux_installation/#performance) -* [Common issues and troubleshooting during conversion](/cloudlinux_installation/#common-issues-and-troubleshooting-during-conversion) +### Downloading ISO -#### Memory +You can download the latest CloudLinux OS ISO and use it to install CloudLinux OS on your server: -* Memory management supports 5-level page tables, increasing the physical memory upper limit to 64 TB. -* Non-Uniform Memory Access (NUMA) node count has been increased from 4 NUMA nodes to 8 NUMA nodes, for even bigger servers. +* CloudLinux OS 9 -#### Security + * x86_64 version: [https://www.repo.cloudlinux.com/cloudlinux/9/iso/x86_64/](https://www.repo.cloudlinux.com/cloudlinux/9/iso/x86_64/) -* Code implementing the ext4 file system has been cleaned up, making it better at preventing malicious file system images. -* The TCP listener handling is now completely lockless, making TCP servers faster and more scalable, and improving protection against DDoS attacks. +* CloudLinux OS 8 -#### Performance + * x86_64 version: [https://www.repo.cloudlinux.com/cloudlinux/8/iso/x86_64/](https://www.repo.cloudlinux.com/cloudlinux/8/iso/x86_64/) -* Spectre V2 mitigation default changed from IBRS to Retpolines for better performance. -* Intel Omni-Path Architecture (OPA) provides Host Fabric Interface (HFI) hardware with initialization and setup for high-performance data transfers. This gives you high bandwidth, high message rates, and low latency between compute and I/O nodes in clustered environments. -* IOMMU passthrough is now enabled by default. This is beneficial for customers who want to pass-through hardware devices to virtual machines. -* A new writecache module has been implemented for the Device Mapper, allowing SSD drives or other persistent memory to be used as a cache for block write operations. (Note, Caching of read operations is not implemented, since such operations are cached in the RAM pages cache.) -* A flexible process flow control mode (cgroup.type threaded) was added to the cgroup mode to allow process threads to be managed as a single entity. With this mode, threads in the same process don’t have to belong to the same group. They can be separated into different groups, but they must be threaded and placed in the same cgroup hierarchy. -* Improvements were made to on-the-fly resizing of file systems that use bigalloc. -* On ext4 file systems, inode generation scalability on SMP systems is improved. +* CloudLinux OS 7 -## Activation + * x86_64 version: [https://repo.cloudlinux.com/cloudlinux/7/iso/x86_64/](https://repo.cloudlinux.com/cloudlinux/7/iso/x86_64/) -### Getting trial license +* CloudLinux OS 6 -You will need a trial activation key to be able to convert your CentOS server to CloudLinux. The trial license subscription will work for 30 days. + * x86_64 version: [https://repo.cloudlinux.com/cloudlinux/6/iso/x86_64/](https://repo.cloudlinux.com/cloudlinux/6/iso/x86_64/) + * i386 version: [https://repo.cloudlinux.com/cloudlinux/6/iso/i386/](https://repo.cloudlinux.com/cloudlinux/6/iso/i386/) -If you have any issues getting activation key or if you have any questions regarding using your trial subscription – contact [sales@cloudlinux.com](mailto:sales@cloudlinux.com) and we will help. -To get the activation key: +There are multiple ISO types available: -1. Register with CloudLinux Network: [https://cln.cloudlinux.com/console/register/customer](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](https://cln.cloudlinux.com/console/auth/login) -4. Click on `Get Trial Activation Key` +* `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 network installation repository, + so you can set up any possible configuration without network access. +* `CloudLinux-*-minimal.iso` - this one contains only minimal set of packages to set up light server without GUI and Development tools. -You will get a key that looks like: `12314-d34463a182fede4f4d7e140f1841bcf2` +### Installing using the Graphical User Interface -Use it to register your system or to [convert CentOS server to CloudLinux]() server. +The graphical installation interface is the preferred method of manually installing CloudLinux OS. +It allows you to have full control over all available settings, including disk partitioning and storage configuration. -### License activation +The graphical mode is used by default when you boot the system from the local media. Mount and boot the image, then follow the steps. -To register your server with CloudLinux Network using activation key run: +#### Language selection -
+The first screen displayed is the language selection page. -``` -$ yum install rhn-setup --enablerepo=cloudlinux-base -$ /usr/sbin/rhnreg_ks --force --activationkey= -``` -
+![Welcome page screenshot](./images/welcome_page.png) -Where activation key is like `1231-2b48feedf5b5a0e0609ae028d9275c93` +First, find your preferred language in the left column and than select locale in the right one. +Selected language will be used during installation and also as a default language of the installed system. -If you have IP based license, use `clnreg_ks` command: +After you select your language and locale, click `Continue` to confirm your selection +and proceed to the [Installation Summary](#installation-summary). -
+#### Installation summary -``` -$ yum install rhn-setup --enablerepo=cloudlinux-base -$ /usr/sbin/clnreg_ks --force -``` -
+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](./images/installation_summary.png) -## Installing new servers +The summary screen displays links to other configuration screens, those links can be in +several different states, which are graphically indicated: -You can download the latest CloudLinux ISO and use it to install CloudLinux on your server: +- Grayed out link means that the installer is currently updating this sections. + Please wait a little before accessing this section. -* **Latest stable CloudLinux 7 ISO**: +- A warning symbol next to an icon means that a screen requires your attention before you start the installation. - * x86_64 version: [https://repo.cloudlinux.com/cloudlinux/7/iso/x86_64/](https://repo.cloudlinux.com/cloudlinux/7/iso/x86_64/) +- Links without warning symbol mean that screen does not require your attention. + You can still change your settings in these screens, but it is not required to start installation. +#### Choosing the installation source -* **Latest stable CloudLinux 6 ISO**: +The first thing that you should define is where the system will be installed from. +There are basically two options: - * x86_64 version: [https://repo.cloudlinux.com/cloudlinux/6/iso/x86_64/](https://repo.cloudlinux.com/cloudlinux/6/iso/x86_64/) - * i386 version: [https://repo.cloudlinux.com/cloudlinux/6/iso/i386/](https://repo.cloudlinux.com/cloudlinux/6/iso/i386/) +- 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. :::tip Note -Once you install server from the ISO, make sure you [register your system](/cloudlinux_installation/#license-activation) and then run `yum update`. +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. ::: -:::warning Note -We recommend to reinstall `lvemanager`, `lve-utils`, `lve-stats`, and `cagefs` packages after installing a control panel. +![Unavailable network source](./images/installation_source_gray_network.png) + +The correct installation URL for CloudLinux OS is + +```text +https://repo.cloudlinux.com/cloudlinux/8/BaseOS/x86_64/kickstart/ +``` + +Type in installation URL in the corresponding field, configure proxy if needed and press the `Done` button. + +![](./images/installation_source_network_address.png) + + +#### ISO file source + +This option is primary used as an alternative when you don't have internet connection on a target server. +It is only available if you downloaded Minimal or DVD ISO which contains some bundled packages in. + +![](./images/installation_iso_source.png) + +Tick the `ISO file` checkbox and press the `Done` button. + +#### Next steps + +After clicking `Done`, you will be redirected to the [Installation Summary](./#installation-summary) screen +where [Installation source](./#installation-source) and [Software Selection](./#software-selection) links +will be greyed and the `Downloading package metadata` message wll be shown. + +![](./images/installation_source_gray_working.png) + +Please hold on while that message disappears and proceed to the [Software Selection](./#software-selection) section. + +![](./images/installation_source_gray_done.png) + + +#### 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. + +You should choose the CloudLinux edition that matches your license on this stage: + ![](./images/software_selection.png) + + +The available options are: +* to install CloudLinux OS Shared or Shared Pro, choose the `CloudLinux OS Shared/Pro (minimal)` environment on the left of the screen. +* to install CloudLinux OS Admin, choose the `CloudLinux OS Admin (minimal)` environment on the left of the screen. +* to install CloudLinux OS Solo, choose the `CloudLinux OS Solo (minimal)` environment on the left of the screen. + + +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](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/sect-disk-partitioning-setup-x86) +using the `Installation Destination` menu and create your [Root Password](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/sect-configuration-progress-menu-x86#sect-account-configuration-x86). + +Doing that, the `Begin installation` button becomes blue, so click it. + +![](./images/installation_available.png) + +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 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. ::: +![](./images/installation_done.png) -### Installing CloudLinux OS 8 from ISO image +#### Next steps -You can download and install CloudLinux OS 8 from the following repositories: +Reboot your system, login and check EULA which is located in the `/usr/share/cloudlinux-release/EULA`. -* [https://www.repo.cloudlinux.com/cloudlinux/8/iso/x86_64/](https://www.repo.cloudlinux.com/cloudlinux/8/iso/x86_64/) - network/DVD installation ISOs +Next, [activate your installation](#license-activation) in order to get updates. -Mount and boot the image, then follow the following steps. +### License activation -1. Configure a network connection as shown below. - - ![](/images/network_settings.png) +To register your **CloudLinux OS** server with CloudLinux Network using activation key, run the following command: -2. Configure installation sources: - * select the _On the network_ installation source and enter the following repository URL: `https://www.repo.cloudlinux.com/cloudlinux/8/BaseOS/x86_64/`. - * also, add the additional AppStream repository URL: `https://www.repo.cloudlinux.com/cloudlinux/8/AppStream/x86_64/` - - ![](/images/repository_settings.png) +``` +$ yum install rhn-setup +$ /usr/sbin/rhnreg_ks --activationkey= +``` -3. Select software: select the _Minimal install_ environment. - - ![](/images/software_selection.png) +Where <activation key> is like `1231-2b48feedf5b5a0e0609ae028d9275c93` +If you have IP based license, use the `clnreg_ks` command instead: + +``` +$ yum install rhn-setup +$ /usr/sbin/clnreg_ks --force +``` -## CloudLinux OS images +## Cloud provider images (CloudLinux OS Shared only) * [OpenStack QEMU/KVM](https://download.cloudlinux.com/cloudlinux/images/#kvm-tab) * [VMware](https://download.cloudlinux.com/cloudlinux/images/#vmware-tab) @@ -280,29 +546,32 @@ Mount and boot the image, then follow the following steps. * [Amazon Web Services](https://download.cloudlinux.com/cloudlinux/images/#aws-tab) * [Alibaba Cloud](https://download.cloudlinux.com/cloudlinux/images/#ali-tab) * [Xen](/cloudlinux_installation/#installing-new-servers) +* [CloudLinux Azure Images](/cloudlinux_installation/#cloudlinux-azure-images) -#### Xen images - -:::tip Note -We do not provide Xen images of CloudLinux OS anymore. -::: - -## Net install +### CloudLinux Azure Images -To install CloudLinux over network: +We build and release CloudLinux 7.9 and CloudLinux 8.6 for Azure and upload to the [Mircosoft Azure Community Galleries](https://learn.microsoft.com/en-us/azure/virtual-machines/share-gallery-community?tabs=cli). -1. Download & boot from netboot image from: [https://repo.cloudlinux.com/cloudlinux/7.8/iso/x86_64/CloudLinux-netinst-x86_64-7.8.iso](https://repo.cloudlinux.com/cloudlinux/7.8/iso/x86_64/CloudLinux-netinst-x86_64-7.8.iso). It will boot into CloudLinux installer. +Images are built in both types Azure supports: *gen1 (BIOS based)* and *gen2 (UEFI based)*. CloudLinux Images could be found in the following regions: *West Europe, Germany West Central, Southeast Asia, East US, West US 2*. A publisher of CloudLinux Images in Azure is *cloudlinux*. Community gallery name is *cloudlinux-cbc76afd-63bc-4f6e-b801-65bd2f1ab0a0*. - Alternatively you can configure your PXE server using following folder as reference: [https://repo.cloudlinux.com/cloudlinux/7.8/install/x86_64/images/pxeboot/](https://repo.cloudlinux.com/cloudlinux/7.8/install/x86_64/images/pxeboot/) +How to use CloudLinux Image in Azure: -2. During the CloudLinux installation, select URL as installation source and enter URL: [https://repo.cloudlinux.com/cloudlinux/7.8/install/x86_64/](https://repo.cloudlinux.com/cloudlinux/7.8/install/x86_64/) and continue with installation. +* When creating Virtual Machine, while choosing what OS should be used, click See al images. + ![](/images/AzureVirt.png) +* Switch from Marketplace to Community images. + ![](/images/AzureSwitch.png) +* Search by typing *cloudlinux* or filter by *Publisher* which is also *cloudlinux* or *Azure Compute Gallery* which is *cloudlinux-cbc76afd-63bc-4f6e-b801-65bd2f1ab0a0*. + ![](/images/AzureSearch.png) +* Choose a suitable image. Check that the Publisher of the selected images is *cloudlinux* and Public Gallery Name is *cloudlinux-cbc76afd-63bc-4f6e-b801-65bd2f1ab0a0*. -To install CloudLinux 6.10 instead of 7.8, use the following URL: [https://repo.cloudlinux.com/cloudlinux/6.10/install/x86_64/](https://repo.cloudlinux.com/cloudlinux/6.10/install/x86_64/) -Same URLs can be used to install para-virtualized Xen using either command-line or virt manager. +### Xen images +:::tip Note +We do not provide Xen images of CloudLinux OS Shared anymore, use [ISO images](#installing-new-servers) instead +::: -## Provider-specific guidelines +## Provider-specific guidelines (CloudLinux OS Shared only) * [Amazon Web Services](/cloudlinux_installation/#aws) * [H-Sphere](/cloudlinux_installation/#h-sphere) @@ -312,9 +581,9 @@ Same URLs can be used to install para-virtualized Xen using either command-line ### AWS -CloudLinux OS image list can be found [here](https://download.cloudlinux.com/cloudlinux/images/#aws-tab) +CloudLinux OS Shared image list can be found [here](https://download.cloudlinux.com/cloudlinux/images/#aws-tab) -If you are going to use Cloudlinux OS with cPanel image, you may find useful the following [article](https://cloudlinux.zendesk.com/hc/en-us/articles/360014130320-How-to-get-CloudLinux-OS-with-cPanel-AMI-working-on-AWS) +If you are going to use CloudLinux OS Shared with cPanel image, you may find useful the following [article](https://cloudlinux.zendesk.com/hc/en-us/articles/360014130320-How-to-get-CloudLinux-OS-with-cPanel-AMI-working-on-AWS) ### H-Sphere @@ -324,20 +593,18 @@ If you are going to use Cloudlinux OS with cPanel image, you may find useful the :::tip Note For H-Sphere 3.5+ - Please note, that CageFS and PHP Selector are not supported for H-Sphere ::: - #### Requirements -1. CloudLinux with liblve 0.8 or later. +1. CloudLinux OS Shared with liblve 0.8 or later. 2. Apache 2.2.x or 1.3. 3. mod_suexec should be enabled. To achieve optimal performance, we recommend to [convert from mod_fastcgi to mod_fcgid](/cloudlinux_installation/#converting-from-mod-fastcgi-to-mod-fcgid). -There is no need to install mod_hostinglimits – it comes built in with H-Sphere. Once you load kernel from CloudLinux with liblve 0.8 or later – it will get enabled. +There is no need to install mod_hostinglimits – it comes built in with H-Sphere. Once you load kernel from CloudLinux OS Shared with liblve 0.8 or later – it will get enabled. You can check if LVE is enabled by running: @@ -563,16 +830,16 @@ Other options could be configured according to personal needs. When done - click _SUBMIT_ to apply changes. :::tip Note -After updating H-Sphere software on web server with CloudLinux you need to re-apply step 2 (patch usemodule.phpmode) and restart apache with `/hsphere/shared/scripts/apache-restart` script. +After updating H-Sphere software on web server with CloudLinux OS Shared you need to re-apply step 2 (patch usemodule.phpmode) and restart apache with `/hsphere/shared/scripts/apache-restart` script. ::: ### DigitalOcean -* [Adding CloudLinux OS image to DigitalOcean](/cloudlinux_installation/#adding-cloudlinux-os-image-to-digitalocean) +* [Adding CloudLinux OS Shared image to DigitalOcean](/cloudlinux_installation/#adding-cloudlinux-os-shared-image-to-digitalocean) -How to make CloudLinux work on DigitalOcean: +How to make CloudLinux OS Shared work on DigitalOcean: -DigitalOcean doesn't support custom kernels. The droplet (VM) always runs DigitalOcean's kernel. CloudLinux requires its own kernel. To enable CloudLinux work on DigitalOcean droplets, we provide ability to boot into CloudLinux kernel using `kexec` functionality. +DigitalOcean doesn't support custom kernels. The droplet (VM) always runs DigitalOcean's kernel. CloudLinux OS Shared requires its own kernel. To enable CloudLinux OS Shared work on DigitalOcean droplets, we provide ability to boot into CloudLinux OS Shared kernel using `kexec` functionality. How does this work: @@ -580,11 +847,11 @@ How does this work: * `kexec-tools` are installed; * `kexec` script will be created in `/etc/rc.d/init.d/` and set to run right after `rc.sysinit`. -When executed, script `/etc/rc.d/init.d/kexec` detects the latest installed CloudLinux kernel, and loads that kernel. +When executed, script `/etc/rc.d/init.d/kexec` detects the latest installed CloudLinux OS Shared kernel, and loads that kernel. -If the system cannot boot into CloudLinux kernel (due to any reason), subsequent reboot will skip `kexec`, allow droplet to boot into DigitalOceans' kernel. +If the system cannot boot into CloudLinux OS Shared kernel (due to any reason), subsequent reboot will skip `kexec`, allow droplet to boot into DigitalOceans' kernel. -To disable booting into Cloudlinux kernel, run: +To disable booting into Cloudlinux OS Shared kernel, run:
@@ -593,7 +860,7 @@ chkconfig --del kexec ```
-To re-enable booting into CloudLinux kernel, run: +To re-enable booting into CloudLinux OS Shared kernel, run:
``` @@ -601,13 +868,13 @@ chkconfig --add kexec ```
-#### Adding CloudLinux OS image to DigitalOcean +#### Adding CloudLinux OS Shared image to DigitalOcean -Custom images are Linux distributions that have been modified to fit the specific needs of DigitalOcean users. You can find some basics of importing a custom CloudLinux OS image below. +Custom images are Linux distributions that have been modified to fit the specific needs of DigitalOcean users. You can find some basics of importing a custom CloudLinux OS Shared image below. Importing custom images to DigitalOcean is free, as you are only charged for the storage of your image. To save money, you can easily import your image, start a Droplet from your image, and delete the image, so you don’t incur any storage costs. -Below, we will describe how to add a qcow2 (QEMU/KVM) CloudLinux OS image as a custom image. You can find more information on image options at [https://www.digitalocean.com/docs/images/custom-images/overview/](https://www.digitalocean.com/docs/images/custom-images/overview/) +Below, we will describe how to add a qcow2 (QEMU/KVM) CloudLinux OS Shared image as a custom image. You can find more information on image options at [https://www.digitalocean.com/docs/images/custom-images/overview/](https://www.digitalocean.com/docs/images/custom-images/overview/) 1. To choose the right image, navigate to [https://download.cloudlinux.com/cloudlinux/images/#kvm-tab](https://download.cloudlinux.com/cloudlinux/images/#kvm-tab). Several different images are available for download (with and without a control panel). @@ -615,7 +882,7 @@ Below, we will describe how to add a qcow2 (QEMU/KVM) CloudLinux OS image as a c 2. Copy the link for the image you are going to use and log into [cloud.digitalocean.com](https://blog.digitalocean.com/custom-images/cloud.digitalocean.com). -Click _Images_ on the left of the screen and then choose _Custom Images_. Click the _Import via URL_ button and paste the CloudLinux OS image link. +Click _Images_ on the left of the screen and then choose _Custom Images_. Click the _Import via URL_ button and paste the CloudLinux OS Shared image link. ![](/images/customimages.png) @@ -631,7 +898,7 @@ You can find more information about creating/adding SSH keys in [this article](h ![](/images/addsshkey.png) -4. You will then be able to start a CloudLinux OS Droplet using the image. +4. You will then be able to start a CloudLinux OS Shared Droplet using the image. :::tip Note Your Droplet will be created in the same datacenter that your custom image resides in. @@ -646,17 +913,17 @@ You can find more information about creating/adding SSH keys in [this article](h ### Linode -* [CloudLinux on Linode KVM](/cloudlinux_installation/#cloudlinux-on-linode-kvm) -* [CloudLinux on Linode Xen](/cloudlinux_installation/#cloudlinux-on-linode-xen) +* [CloudLinux OS Shared on Linode KVM](/cloudlinux_installation/#cloudlinux-os-shared-on-linode-kvm) +* [CloudLinux OS Shared on Linode Xen](/cloudlinux_installation/#cloudlinux-os-shared-on-linode-xen) :::warning Warning -If you are installing CloudLinux 8, please make sure you’ve read [https://www.linode.com/community/questions/19397/i-just-upgraded-my-centos-8-linode-and-now-it-wont-boot-how-do-i-fix-this-proble](https://www.linode.com/community/questions/19397/i-just-upgraded-my-centos-8-linode-and-now-it-wont-boot-how-do-i-fix-this-proble) +If you are installing CloudLinux OS Shared 8, please make sure you’ve read [https://www.linode.com/community/questions/19397/i-just-upgraded-my-centos-8-linode-and-now-it-wont-boot-how-do-i-fix-this-proble](https://www.linode.com/community/questions/19397/i-just-upgraded-my-centos-8-linode-and-now-it-wont-boot-how-do-i-fix-this-proble) ::: -#### CloudLinux on Linode KVM +#### CloudLinux OS Shared on Linode KVM -To install CloudLinux 7 on Linode KVM server you should perform the following steps: +To install CloudLinux OS Shared 7 on Linode KVM server you should perform the following steps: 1. Deploy CL to your Linode following the steps from [this section](/cloudlinux_installation/#converting-existing-servers) @@ -694,11 +961,11 @@ grub2-mkconfig -o /boot/grub/grub.cfg 6. Reboot your Linode. -After reboot you will have fully operational CloudLinux 7 system and can proceed with other configuration you need. +After reboot you will have fully operational CloudLinux OS Shared 7 system and can proceed with other configuration you need. -#### CloudLinux on Linode Xen +#### CloudLinux OS Shared on Linode Xen -To install CloudLinux 7 on Linode Xen please perform the following steps: +To install CloudLinux OS Shared 7 on Linode Xen please perform the following steps: 1. Deploy CL to your Linode following the steps from [this section](/cloudlinux_installation/#converting-existing-servers). @@ -715,7 +982,7 @@ initrd /boot/initramfs-$KVERSION.img ``` -where `$KVERSION` is the version of the installed CloudLinux 7 kernel. +where `$KVERSION` is the version of the installed CloudLinux OS Shared 7 kernel. :::tip Note You will need to update `/boot/grub/menu.lst` manually after every kernel update. @@ -730,40 +997,284 @@ In case if you will migrate to KVM later you will need only switch the boot sett ### Virtuozzo and OpenVZ -* [Installation](/cloudlinux_installation/#installation-2) +* [Virtuozzo 7 and OpenVZ 7](/cloudlinux_installation/#virtuozzo-7-and-openvz-7) +* [Virtuozzo 6 and OpenVZ 6](/cloudlinux_installation/#virtuozzo-6-and-openvz-6) -:::warning Note -Starting from November 1st, 2019, we do not support Virtuozzo and OpenVZ **containers**. -However, you can run CloudLinux OS on OpenVZ 6 and Virtuozzo 6 **hypervisors**. The hypervisor virtualization is the same as for **Xen/KVM/VMware**. Check how to run hypervisors [here](/cloudlinux_installation/#cloudlinux-os-images). + +#### Virtuozzo 7 and OpenVZ 7 + + +To use CloudLinux Shared Pro in Virtuozzo container, please update the next packages to the specified versions (or higher): + +* alt-php-ssa-0.3-4 +* alt-php-xray-0.5-8 +* cloudlinux-linksafe-1-5.2 +* accelerate-wp-1.0-11 +* lvemanager-7.7.5-2 +* alt-python27-cllib-3.2.32-1 +* pam_lve-0.4-3 +* lve-wrappers-0.7.7-1 +* lve-utils-6.4.3-1 +* cagefs-7.5.1-1 +* liblve-2.1-11 +* tuned-profiles-cloudlinux-0.2-3 + + +#### Available functionality + +* [Lsapi](/cloudlinux_installation/#lsapi) +* [AccelerateWP](/cloudlinux_installation/#acceleratewp) +* [Hardened PHP](/control_panel_integration/#hardened-php) +* [Website monitoring and Slow Site Analyzer](/lve_manager/#website-monitoring-tool-and-slow-site-analyzer) +* [X-Ray](/cloudlinux-os-plus/#x-ray) +* [CageFS](/cloudlinux_installation/#cagefs) +* [PHP Selector](/cloudlinux_installation/#php-selector) +* [Wizard](/cloudlinux_installation/#cloudlinux-wizard) +* [Dashboard](/cloudlinux_installation/#dashboard) +* [Python Selector](/cloudlinux_installation/#python-selector) +* [Node.js Selector](/cloudlinux_installation/#node-js-selector) + + +#### Requirements + +* [Virtuozzo 7](https://wiki.openvz.org/Virtuozzo) as server system +* Virtuozzo container with CloudLinux Shared Pro 8 +* cloudlinux-updates-testing repo is enabled (+ `yum clean all`) + +#### How to install + +1. Prepare Virtuozzo container with ostemplate almalinux-8-x86_64 +2. Enter to the container +3. Install cPanel: +``` +cd /home && curl -o latest -L https://securedownloads.cpanel.net/latest && sh latest +``` +4. Download and start cldeploy: +``` +wget https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy +chmod 775 cldeploy +./cldeploy -k SHARED_PRO_CLN_KEY_HERE --testing-repo +``` +5. You don't need to restart the container after the cldeploy script finished execution. + + +#### CloudLinux Wizard + +Wizard is a tool to set up CloudLinux OS components. + +In the current version only the lsapi module can be installed. + +![](/images/WizardVZ.png) + +#### Dashboard + +CloudLinux OS Shared dashboard provides a quick overview of statistics and all administrative information for server administrators. + +In the current version only statistics about the lsapi module is available. + +![](/images/DashboardVZ.png) + +#### Lsapi + +To install Lsapi via CloudLinux Wizard, please turn off mod_ruid2 in EasyApache 4 -> Apache Modules. + +:::tip Note +For EasyApache select `Currently Installed Packages`. ::: +![](/images/LsapiVZ1.png) + +![](/images/LsapiVZ2.png) + +![](/images/LsapiVZ3.png) + + :::tip Note -* Virtuozzo 6 and OpenVZ 6 are supported. -* Virtuozzo 7 and OpenVZ 7 are not supported. +Currently mod_suexec is not available in containers and will be released in future versions. Just ignore this message, click "ok" and continue installing lsapi via the Wizard. ::: +You can find the complete lsapi documentation [here](https://docs.cloudlinux.com/cloudlinux_os_components/#apache-mod-lsapi-pro). + +#### AccelerateWP + +If you'd like to try Smart Advice and AccelerateWP you should participate in the Beta tester program. To become a beta tester, please send your request at our Beta program page with the signup form [here](https://www.cloudlinux.com/wp-performance/). Once you submit the request, we will send you a confirmation email with program details, terms of use, and installation instructions. + +All additional information can be found [here](https://docs.cloudlinux.com/cloudlinux-os-plus/#acceleratewp). + + +#### CageFS + +You can fing CageFS documentation [here](/cloudlinux_os_components/#cagefs). + +:::warning Attention! +[Kernel config variables](/cloudlinux_os_kernel/#kernel-config-variables) are not available for the Virtuozzo container! +::: + + +#### PHP Selector + +#### How to install + +1. To install via SSH, update your packages in the container: + ```sh + yum update alt-python27-cllib pam_lve lve-wrappers lve-utils liblve tuned-profiles-cloudlinux lvemanager + ``` +2. The following commands can be executed via SSH or via CloudLinux Wizard + **Via SSH:** + ```sh + yum install cagefs + yum groupinstall alt-php + cagefsctl –init + ``` + **Via CloudLinux Wizard (cPanel only):** + ![](/images/CLWizardInstallation.png) +3. Make sure compatible handlers are installed: + **Via SSH:** + ``` + yum install ea-apache24-mod_suexec + yum install ea-apache24-mod_suphp + ``` + **Or**
+ [Install lsapi](/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4)
+ **It's also possible to install via CloudLinux Wizard:**
+ The `mod_suexec` and `mod_suphp` can be installed via cPanel EasyApache4 installation tool.

+4. Make sure users are enabled in the CageFS: + ![](/images/UsersEnabled.png) + +Useful links: + +* [General information and requirements](/cloudlinux_os_components/#general-information-and-requirements-5) + * [Installation and update](/cloudlinux_os_components/#installation-and-update-4) + * [Installation instructions for cPanel users](/cloudlinux_os_components/#installation-instructions-for-cpanel-users) +* [Uninstalling](/cloudlinux_os_components/#uninstalling-3) + * [Configuration and using](/cloudlinux_os_components/#configuration-and-using) + * [Bundled PHP extensions](/cloudlinux_os_components/#bundled-php-extensions) + + +#### Python Selector + +Python Ыelector for Virtuozzo is available starting from the following packages version: + +* lve-2.1-14 +* alt-python27-cllib-3.2.47-1 +* lvemanager-7.8.8-1 +* cagefs-7.5.5-1 + +Please update or install the packages mentioned above using the following command: + +``` +yum update lve alt-python27-cllib lvemanager cagefs --enablerepo=cloudlinux-updates-testing +``` + +The installation of Python Selector is available via CloudLinux Wizard. Aslo, the information about manual installation can be found [here](/cloudlinux_os_components/#cpanel-2). + +Information about working with Python Selector via GUI can be found [here](/lve_manager/#python-selector-2). + + +#### Node.js Selector + +Node.js Selector for Virtuozzo is available starting from the following packages version: + +* lve-2.1-14 +* alt-python27-cllib-3.2.47-1 +* lvemanager-7.8.8-1 +* cagefs-7.5.5-1 + +Please update or install the packages mentioned above using the following command: + +``` +yum update lve alt-python27-cllib lvemanager cagefs --enablerepo=cloudlinux-updates-testing +``` + +#### Installation for cPanel + +To use Node.js Selector, install Node.js packages by running the following command: + +``` +yum groupinstall alt-nodejs +``` + +CloudLinux OS Shared 7 supports both `ea-ruby24-mod_passenger` and `ea-ruby27-mod_passenger`. + :::tip Note -Kernel 2.6.32-042stab088.4 or later required +The `ea-apache24-mod-alt-passenger` is deprecated in favor of `ea-ruby24-mod_passenger` and `ea-ruby27-mod_passenger`. ::: -CloudLinux provides limited support for OpenVZ and Virtuozzo. At this stage only the following functionality works: +#### General information -* CageFS -* PHP Selector -* max entry processes -* mod_lsapi -* MySQL Governor +General information can be found [here](cloudlinux_os_components/#general-information-and-requirements-7). -#### Installation +#### Requirements -VZ Node (needs to be done once for the server): +Information about Requirements can be found [here](/cloudlinux_os_components/#requirements-2). + +#### Limitations + +Information about limitations can be found [here](/cloudlinux_os_components/#limitations). + +If during Node.js Selector usage on cPanel servers you get "ENOMEM npm ERR! errno-12" error, try to increase Memory limit in cPanel WHM → Server Configuration → Tweak Settings → System → Max cPanel process memory, then restart cPanel service with the following command to apply changes: + +``` +systemctl restart cpanel.service +``` + +#### Node.js deployment + +Information about Node.js deployment can be found [here](/cloudlinux_os_components/#node-js-deployment). + +#### Remote usage of Node.js interpreters + +Information about Remote usage of Node.js interpreters can be found [here](/cloudlinux_os_components/#remote-usage-of-node-js-interpreters). + +#### Node.js Selector UI + +Information about working with Node.js Selector via UI can be found [here](/lve_manager/#node-js-selector-2). + + + +#### FAQ + +Q: My CloudLinux Manager-> options menu is empty. + +A: You don't have AccelerateWP enabled and PHP X-Ray enabled, so there is nothing to configure. Install and enable any of those features to see settings. This minor UI issue will be fixed in future updates. + +Q: Dashboard says both: that data is updated and that I need to refresh it and both panels never disappear. + +A: Just click the refresh button and reload the page, data will be loaded soon. + +Q: Website monitoring does not appear enabled after clicking the toggle. + +A: Just reload the page, the feature will be displayed as active. + +Q: Website monitoring proposes me to enable autotracing while I disable it. + +A: Issue is known and will be fixed soon. + + +#### Known restrictions and issues + +1. We do not recommend using [disk quota](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-disk-quotas) inside of containers - PHP Selector may be not functional for a user when disk quota is exceeded for the user. + +2. The following systemd directives may break CageFS inside containers: + * PrivateDevices + * PrivateMounts + * PrivateTmp + * ProtectSystem + * ReadOnlyDirectories + * ReadWriteDirectories + * InaccessibleDirectories + * ProtectHome + +#### Virtuozzo 6 and OpenVZ 6 + +#### Installation :::tip Note -Make sure all containers are stopped prior to doing this operation. Or reboot the server after the install. +Make sure all containers are stopped prior to doing this operation. Or reboot the server after the installation. ::: :::tip Note -Please make sure you have `vzkernel-headers` and `vzkernel-devel` packages installed. If no - install them with `yum` +Please make sure you have `vzkernel-headers` and `vzkernel-devel` packages installed. :::
@@ -777,11 +1288,13 @@ $ yum install lve-kernel-module
+ This will setup LVE module for VZ kernel, as well as DKMS to update that module each time VZ kernel is updated. After this is done, you can add LVE support for any container on a node, at any time. -To make CloudLinux work inside VZ container, VZ node has to be enabled. This should be done for any container where LVE support needs to be added: +To make CloudLinux OS Shared work inside VZ container, VZ node has to be enabled. This should be done for any container where LVE support needs to be added: +
@@ -801,9 +1314,9 @@ $ vzctl set CT_ID --devnodes lve:none --save
-Inside container, follow [standard CloudLinux installation procedures](/cloudlinux_installation/#converting-existing-servers). +Inside the container, follow [standard CloudLinux installation procedures](/cloudlinux_installation/#converting-existing-servers). -CloudLinux license is required for each VZ container. +CloudLinux OS Shared license is required for each VZ container. :::tip Note Some servers require increasing `fs.ve-mount-nr` on host node, otherwise CageFS will throw errors. @@ -813,13 +1326,25 @@ To increase `fs.ve-mount-nr`, on a host node: 1. add `fs.ve-mount-nr = 15000` to `/etc/sysctl.conf`; -2. apply it with `sysctl -p` command. +2. apply it with the `sysctl -p` command. In very rare cases the value should be increased higher, up to 50000. +#### Available functionality + +* CageFS +* PHP Selector +* max entry processes +* mod_lsapi +* MySQL Governor + + + + + ## LILO boot loader -CloudLinux can be deployed on servers that don't have grub installed, by installing `хороgrub` first. +CloudLinux OS can be deployed on servers that don't have grub installed, by installing `хороgrub` first. To do that: @@ -834,7 +1359,7 @@ mv /etc/lilo.conf /etc/lilo.conf.bak ``` -3. Convert to CloudLinux using [deploy2cl](/cloudlinux_installation/#converting-existing-servers) utility. +3. Convert to CloudLinux OS Shared using [deploy2cl](/cloudlinux_installation/#converting-existing-servers) utility. 4. Check `grub.conf` – it should be configured automatically: @@ -863,203 +1388,76 @@ timeout=5 ``` -6. Reboot and check that you are running CloudLinux. `uname -r` should show something like: `2.6.18-294.8.1.el5.lve0.7.33`. +6. Reboot and check that you are running CloudLinux OS Shared. `uname -r` should show something like: `2.6.18-294.8.1.el5.lve0.7.33`. ## Uninstalling -You can always uninstall CloudLinux. In this case, we will 'convert' the system back to CentOS. Even if the original system was RHEL - we will still convert to CentOS state. +You can always uninstall CloudLinux OS. In this case, the system will be converted back to AlmaLinux or CentOS* (Depends on what system the conversion was done from). + +:::warning +CentOS Linux 8 reached End Of Life (EOL) on December 31st, 2021. You can still uninstall CloudLinux and return to CentOS 8, but we don't guarantee stable operation of the system and its repositories after this action. +::: The following actions will be taken: 1. LVE related packages will be removed. -2. CloudLinux repositories & yum plugin will be removed. -3. CentOS repositories will be setup. +2. CloudLinux OS Shared repositories & yum plugin will be removed. +3. AlmaLinux or CentOS* repositories will be set up. -At the end, the script will provide instructions on how to finish the conversion back to CentOS. That will require removal of CloudLinux kernel (manual step), and installation of CentOS kernel (if needed). +In the end, the script will provide instructions on how to finish the conversion back to AlmaLinux or CentOS*. That will require removal of CloudLinux OS Shared kernel (manual step), and installation of AlmaLinux or CentOS* kernel (if needed). -To uninstall CloudLinux, do: +:::warning +Do not forget to free up a CloudLinux OS Shared license by removing the server from the [Servers section of your CLN account](https://docs.cln.cloudlinux.com/dashboard/#servers). After that, if you don't intend to use the license anymore, you can [remove it](https://docs.cln.cloudlinux.com/dashboard/#cloudlinux-os-activation-keys) to avoid being billed for it. +::: -
+To uninstall CloudLinux OS, run: ``` $ wget -O cldeploy https://repo.cloudlinux.com/cloudlinux/sources/cln/cldeploy $ sh cldeploy -c ``` -
-Now you have converted back to CentOS and it is the time to install kernel. +Now you have converted back to AlmaLinux or CentOS* and it is the time to install kernel. -To delete CloudLinux kernel, run: +To delete CloudLinux OS kernel, run (change the kernel package name to the one you've been using): -
``` -rpm -e --nodeps kernel-2.6.32-673.26.1.lve1.4.27.el6.x86_64 +rpm -e --nodeps $(rpm -qa | grep kernel | grep lve) ``` -
-To install new CentOS kernel once you deleted CloudLinux kernel, type `yum install kernel`. +To install new AlmaLlinux or CentOS* kernel once you deleted CloudLinux OS Shared kernel, run the following command: + +``` +yum install kernel +``` -If `yum` says that the latest kernel is already installed, it is OK. +If `yum` says that the latest kernel is already installed, it is OK. Please check your bootloader configuration before rebooting the system. -To remove unused kmods and lve libs run: - -
+To remove unused kmods and lve libs, run: ``` yum remove lve kmod*lve* ``` -
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: +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 ``` -
:::tip Note -Some of the packages from CloudLinux repo will still be present. They are the same as CentOS packages, and don't have to be removed. They will be updated in the future from CentOS repositories, as new versions come out. +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. ::: - -## Migration to EasyApache 4 - -* [Advices and limitations](/cloudlinux_installation/#advices-and-limitations) -* [CentOS with EasyApache 4](/cloudlinux_installation/#centos-with-easyapache-4) -* [CentOS without EasyApache 4](/cloudlinux_installation/#centos-without-easyapache-4) -* [CloudLinux without EasyApache 4](/cloudlinux_installation/#cloudlinux-without-easyapache-4) -* [More about cloudlinux_ea3_to_ea4 script](/cloudlinux_installation/#more-about-cloudlinux-ea3-to-ea4-script) - -#### Advices and limitations - -* Use cPanel 11.55.999.66(55.999.66) or higher version. -* Hardened EA4 limitations: - * **ea-php51** and **ea-php52** have no PHP-FPM support. Please use **mod_lsapi** instead. - -Follow the instructions [here](/cloudlinux_os_components/#installation-3) to install and configure mod_lsapi. - -#### CentOS with EasyApache 4 - -If EasyApache 4 was installed earlier on your CentOS server and you would like to migrate to CloudLinux: - -1. Convert server from CentOS to CloudLinux (see [these instructions](/cloudlinux_installation/#converting-existing-servers)). - -2. Restart Apache service. - -#### CentOS without EasyApache 4 - -If EasyApache 4 was not installed earlier on your CentOS server and you would like to migrate to CloudLinux: - -1. Convert server from CentOS to CloudLinux (see [these instructions](/cloudlinux_installation/#converting-existing-servers)). - -2. Run: - -
- -``` -cd ~; wget https://repo.cloudlinux.com/cloudlinux/sources/cloudlinux_ea3_to_ea4; sh cloudlinux_ea3_to_ea4 --convert -``` -
- -(Find examples of `cloudlinux_ea3_to_ea4` script usage below). - -#### CloudLinux without EasyApache 4 - -Install EasyApache4 on clean CloudLinux from ISO image or migrate to EasyApache4 on existings CloudLinux servers: - -1. Install cPanel. -2. Run: - -
- -``` -cd ~; wget https://repo.cloudlinux.com/cloudlinux/sources/cloudlinux_ea3_to_ea4; sh cloudlinux_ea3_to_ea4 --convert -``` -
- -(Find examples of `cloudlinux_ea3_to_ea4` script usage below). - - -#### More about cloudlinux_ea3_to_ea4 script - -About `cloudlinux_ea3_to_ea4` migration script parameters: - -
- -``` -cloudlinux_ea3_to_ea4 [ADDITIONS] ACTIONS -``` -
- - -Usage: - -| | | -|-|-| -|-h, --help | Print this message| - -`Actions` (required parameter, shows what should script do): - -| | | -|-|-| -| -c, --convert | Convert EA3 to EA4| -| -r, --revert | Revert to EA3| - -`Additions` (optional parameter, adds to action installation of extra components): - -| | | -|-|-| -| -m, --mod_lsapi | Install mod_lsapi| -| -p, --mod_passenger | Install alt-mod-passenger| -| -a, --altphp | Install/Update alt-php| - - -**Examples:** - -* If you want to install EA4 with mod_lsapi and update/install alt-php: - -
- -``` -sh cloudlinux_ea3_to_ea4 --convert --mod_lsapi --altphp -``` -
- -* 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](https://cloudlinux.zendesk.com/hc/articles/360025827914-CloudLinux-OS-Installation-FAQ) - - \ No newline at end of file diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/1.png b/docs/cloudlinux_installation/images/cl9_secureboot/1.png new file mode 100644 index 000000000..7deb8182a Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/1.png differ diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/2.png b/docs/cloudlinux_installation/images/cl9_secureboot/2.png new file mode 100644 index 000000000..56ead7aff Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/2.png differ diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/3.png b/docs/cloudlinux_installation/images/cl9_secureboot/3.png new file mode 100644 index 000000000..a61a709ba Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/3.png differ diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/4.png b/docs/cloudlinux_installation/images/cl9_secureboot/4.png new file mode 100644 index 000000000..a3030f74b Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/4.png differ diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/5.png b/docs/cloudlinux_installation/images/cl9_secureboot/5.png new file mode 100644 index 000000000..615c56c88 Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/5.png differ diff --git a/docs/cloudlinux_installation/images/cl9_secureboot/6.png b/docs/cloudlinux_installation/images/cl9_secureboot/6.png new file mode 100644 index 000000000..6993d30ac Binary files /dev/null and b/docs/cloudlinux_installation/images/cl9_secureboot/6.png differ diff --git a/docs/cloudlinux_installation/images/installation_available.png b/docs/cloudlinux_installation/images/installation_available.png new file mode 100644 index 000000000..ed38e5aea Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_available.png differ diff --git a/docs/cloudlinux_installation/images/installation_done.png b/docs/cloudlinux_installation/images/installation_done.png new file mode 100644 index 000000000..69edad6ef Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_done.png differ diff --git a/docs/cloudlinux_installation/images/installation_iso_source.png b/docs/cloudlinux_installation/images/installation_iso_source.png new file mode 100644 index 000000000..6855d894c Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_iso_source.png differ diff --git a/docs/cloudlinux_installation/images/installation_iso_source_old.png b/docs/cloudlinux_installation/images/installation_iso_source_old.png new file mode 100644 index 000000000..0e376e8f9 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_iso_source_old.png differ diff --git a/docs/cloudlinux_installation/images/installation_progress.png b/docs/cloudlinux_installation/images/installation_progress.png new file mode 100644 index 000000000..b5c9bff7e Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_progress.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_gray_done.png b/docs/cloudlinux_installation/images/installation_source_gray_done.png new file mode 100644 index 000000000..449fed1b2 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_gray_done.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_gray_done_old.png b/docs/cloudlinux_installation/images/installation_source_gray_done_old.png new file mode 100644 index 000000000..025860a74 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_gray_done_old.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_gray_network.png b/docs/cloudlinux_installation/images/installation_source_gray_network.png new file mode 100644 index 000000000..a7f911b67 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_gray_network.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_gray_network_old1.png b/docs/cloudlinux_installation/images/installation_source_gray_network_old1.png new file mode 100644 index 000000000..7f7df0f15 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_gray_network_old1.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_gray_working.png b/docs/cloudlinux_installation/images/installation_source_gray_working.png new file mode 100644 index 000000000..201c8e203 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_gray_working.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_network_address.png b/docs/cloudlinux_installation/images/installation_source_network_address.png new file mode 100644 index 000000000..854b92cbe Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_network_address.png differ diff --git a/docs/cloudlinux_installation/images/installation_source_network_address_old.png b/docs/cloudlinux_installation/images/installation_source_network_address_old.png new file mode 100644 index 000000000..cd0378ad1 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_source_network_address_old.png differ diff --git a/docs/cloudlinux_installation/images/installation_summary.png b/docs/cloudlinux_installation/images/installation_summary.png new file mode 100644 index 000000000..6ffeb43e4 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_summary.png differ diff --git a/docs/cloudlinux_installation/images/installation_summary_old.png b/docs/cloudlinux_installation/images/installation_summary_old.png new file mode 100644 index 000000000..7353ab849 Binary files /dev/null and b/docs/cloudlinux_installation/images/installation_summary_old.png differ diff --git a/docs/cloudlinux_installation/images/software_selection.png b/docs/cloudlinux_installation/images/software_selection.png new file mode 100644 index 000000000..164a0eff8 Binary files /dev/null and b/docs/cloudlinux_installation/images/software_selection.png differ diff --git a/docs/cloudlinux_installation/images/software_selection1.png b/docs/cloudlinux_installation/images/software_selection1.png new file mode 100644 index 000000000..164a0eff8 Binary files /dev/null and b/docs/cloudlinux_installation/images/software_selection1.png differ diff --git a/docs/cloudlinux_installation/images/software_selection_solo.png b/docs/cloudlinux_installation/images/software_selection_solo.png new file mode 100644 index 000000000..262563b7e Binary files /dev/null and b/docs/cloudlinux_installation/images/software_selection_solo.png differ diff --git a/docs/cloudlinux_installation/images/welcome_page.png b/docs/cloudlinux_installation/images/welcome_page.png new file mode 100644 index 000000000..1ec6e92f9 Binary files /dev/null and b/docs/cloudlinux_installation/images/welcome_page.png differ diff --git a/docs/cloudlinux_installation/images/welcome_page_old.png b/docs/cloudlinux_installation/images/welcome_page_old.png new file mode 100644 index 000000000..df6649f1e Binary files /dev/null and b/docs/cloudlinux_installation/images/welcome_page_old.png differ diff --git a/docs/cloudlinux_installation/tmp b/docs/cloudlinux_installation/tmp deleted file mode 100644 index b638fb826..000000000 --- a/docs/cloudlinux_installation/tmp +++ /dev/null @@ -1,763 +0,0 @@ - 4000 - Y - 5 - analyzes usage of LVE - - - LveUsageAggregator - 5000 - Y - 60 - aggregates data by time periods - - - DBGovSaver - 6000 - Y - 5 - Saves data about database governor - - - FileSaver - 7000 - Y - 5 - Saves LVE data into /var/lve/info - - - CloudLinuxTopFileSaver - 8000 - Y - 60 - saves data used by cloudlinux-top to /var/lve/cloudlinux-top.json - - - DBSaver - 9000 - Y - 60 - save LVE data to dabase - - - DbUsernamesSaver - 10000 - Y - 3600 - saves users name to database - - - DBSaverX60 - 11000 - Y - 3600 - saves aggregated hourly data into database - - - SnapshotSaver - 12000 - Y - 30 - collects & saves snapshots data - - - StatsNotifier - 13000 - Y - varied - notify user/admin based on usage - - - HistoryCleaner - 14000 - Y - 3600 - removes old usage - - - ResMEMCollector - 1500 - N - 30 - collects physical memory usage from processes RES field instead of /proc/lve/list - - - LVEDestroyer - - - N - 5 - destroys LVEs that weren't active for X iterations. Number of iterations is passed from config using iterations variable. iterations=0 means plugin disabled - - - -

To enable non-default plugin, copy or link it to _ /usr/share/lve-stats/plugins_ directory.

-

For example to enable _ ResMEMCollector_ plugin, do:

-

-
ln -s /usr/share/lve-stats/plugins.other/res_mem_collector.py /usr/share/lve-stats/plugins/service lvestats restart
-  
-

Creating a Plugin for

-

Introduction

-

Server Plugin Arrangement

-

Plugin Configuration

-

Types of Plugins

-

Introduction

-

LVE Stats 2 complex has scalable architecture, which allows to connect custom plugins.

-

LVE Stats server searches for plugins in the directory which is specified with plugins parameter of server’s /etc/sysconfig/lvestats2 configuration file. Default directory is _ _ /usr/share/lve-stats/plugins.

-

Each plugin must be of a Python class, must be written in Python language and its file must have .py extension. Files with all other extensions will be ignored. For normal server work access permission 400 is enough; owner – root .

-

Plugins' classes can be of the same name, but better not, because classes' names can affect the set of parameters in set_config method. You can find detailed plugins' configuring information below, in appropriate chapter.

-

Plugin's class must contain execute() method, which is invoked by the server every 5 seconds (by default, can be changed by interval parameter of configuration file). - Also set_config method (configuration settings) can be available. You can find more info in Plugins Configuration chapter.

-

Additionally the following attributes can be set (plugin class instance variable):

-

order (integer) - defines plugin's position in the server's plugin list, (more info in Servers Plugin Arrangement ). - timeout (integer or float ) – the longest allowable duration of one launch of the plugin (execute method). Default value of timeout parameter is 5 seconds. - period (integer) – sets the interval between two launches of execute plugin method in seconds. If not defined, then plugin runs every 5 seconds ( interval parameter in configuration file).

-

When execute() method of the plugin is invoked, the server creates an attribute now in it, where launch time is recorded. This value is equal to what a standard Python function time.time() returns. All the plugins launched one after another receive the same value of now attribute from the server. now is overwritten before execute() method is invoked.

-

The previous value of now attribute is not saved by the server. If plugin needs it, it has to save it by itself.

-

Plugin's class can be inherited from LveStatsPlugin class, which is the part of the server itself. This is not obligatory, but inheritance can help to avoid different errors in servers work, particularly if a plugin doesn't contain required execute method.

-

LveStatsPlugin class is defined in the file: /opt/alt/python27/lib/python2.7/site-packages/lvestats/core/plugin.py .

-

Server Plugin Arrangement

-

When the server starts, it performs the search of plugins in the directory specified in /etc/sysconfig/lvestats2 configuration file. This directory is scanned only when the server starts, therefore if any plugin was added into the directory, the server has to be restarted with the following command: -

-
service lvestats restart.
-  
-

After successful restart the plugins are graded and executed ascending by order attribute. If any plugin's order attribute is not set, it is considered as a Python language constant sys.maxint (which is usually 9223372036854775807). This in fact means that such plugins will be executed in the last. - If any plugins has similar order meanings, their execution order is unpredictable.

-

The server invokes execute method of all plugins one after another.

-

When the server invokes execute() method of any plugin, it transmits a data dictionary ( lve_data argument) into plugin. The dictionary is common for all the plugins. Any plugin can read, write and change any data in this dictionary. LVE Stats 2 server doesn't control this area. That is why one must be careful while developing new plugins, in order not to change or corrupt other plugins' data which can break their functionality.

-

If an exception occurs in execute() method, its text and python stack trace is recorded into server log /var/log/lve-stats and all the changes made to lve_data dictionary before the exception happened are lost.

-

The keys of the lve_data dictionary are recommended to look like PluginName_Key , in order the plugins do not corrupt other data accidentally.

-

Server contains some standard plugins which define and use the following keys in the common dictionary lve_data: LVE_VERSION, stats, old_stats, procs and lve_usage . User plugins can use data from these keys, but it is recommended not to change them if there is no special need, because it can break the next plugins in the execution queue.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyContent
LVE_VERSION LVE version. The same as console command lvectl lve-version produces.
stats Dictionary, that contains lve id’s as keys and LVEStat class objects as values. Every LVEStat object contains values of usages and limits taken from /proc/lve/list file for every LVE Id . Dictionary keys – integer lve id , including 0 for “ default ” LVE. This dictionary is updated on each iteration of lvestats-server (every 5 seconds by default). LVEStat – is a standard server class, it can be imported with the command from lvestats.core.lvestat import LVEStat. The class is described in the file /opt/alt/python27/lib/python2.7/site-packages/lvestats/core/lvestat.py. Here you can find the whole list of data fields and their functions.
old_stats stats content from the previous iteration. Before the first iteration – empty dictionary.
totalHz When LVE_VERSION is 4, real CPU frequency in Hz multiplied by number of cores. When LVE_VERSION > 4, CPU speed is in conventional units and equals to 1000000000 * cores (1 GHz per core).
procs Quantity of CPU /cores.
lve_usages Contains accumulated LVE statistics for each 5-seconds interval in current minute. Cleared each minute.
lve_usage Contains aggregated LVE Statistics for “previous” minute to store to database. Overwritten each minute.
-

Each plugin’s instance lifetime is from the moment it was loaded till the server stops working. But if execute() method working time exceeds timeout, the plugin will be terminated and restarted in the next iteration. All changes to the lve_data dictionary will be lost.

-

During servers graceful shutdown (restart, server shutdown, commands service lvestats stop, service lvestats restart ), each plugin receives SIGTERM signal. - This is useful to correctly unload the plugin (terminate all subsidiary processes, save data to files etc.). If a plugin doesn't need to “finalize” its execution before termination, then there's no need to implement this signal handler. Below you can see an example of such handler.

-

Plugin Configuration

-

LVE Stats 2 Server allows to configure each plugin separately.

-

On initialization stage the server invokes set_config() method of the plugin and locates there a dictionary which contains:

-

all parameters from file /etc/sysconfig/lvestats2 (global). - plugin's individual configuration file parameters (if one exists). Configuration files must be located in /etc/sysconfig/lvestats.config directory, have .cfg extension and be the same format as /etc/sysconfig/lvestats2. Files in this directory are matched with the plugins by name. For instance, if plugin's class is Plugin1_class , then server will try to find and download /etc/sysconfig/lvestats.config/Plugin1_class.cfg. Names are case sensitive. If any plugin doesn't have an individual configuration file, then it's not an error. In this case plugin will just receive parameters from /etc/sysconfig/lvestats2.

-

Types of Plugins

-

According to server architecture, plugins can be of the following types:

-

collectors - analyzers - persistors - notifiers

-

Collectors are designed to collect information; analyzers – to analyze it and form some other data on its basis; persistors – to save information from the common dictionary into files, databases, etc.; notifiers - to notify system users about any events.

-

This division is rather arbitrary. There is an opportunity to execute all the actions on collection, analysis and saving the information in one and only plugin. But at the same time the division into functionally independent parts allows to build flexible and easily configurable system for collecting and processing the data.

-

Also it is possible to implement the systems of lazy-write, planning of collecting/processing tasks and notifying users about different events.

-

Examples of Plugins

-

Here is a practical example of a user plugin.

-

Specification:

-
    -
  1. -

    To trace specified file size changes. The name of file being traced must be specified in configuration file, which allows to change it without modifying the plugin itself. If file size has been changed, it has to be written as a message into our log. The name of log must be specified in configuration file as well.

    -
  2. -
  3. -

    File size must be checked with default interval (5 seconds), and log notification must be held once a minute (to avoid resource expend for possibly regular write).

    -
  4. -
  5. -

    System administrator must receive emails with file size at the moment the email was sent. These notifications must be sent even if the file size hasn’t been changed. Notification emails must be read periodicity from configuration file as well as sender/receiver emails .

    -
  6. -
-

As file size check, fixing the result and notification sending must be held with different periods, then it’s impossible to realize all the tasks by means of one plugin. - The fact that one minute (60 seconds) is multiple to 5 seconds doesn’t matter in this case, because default period can be changed in server’s configuration file, but the condition of fixing the result once a minute is a part of the specification, which can not be violated. In addition, notification email period is known in advance, as it is specified by user in configuration file.

-

That is why we realize 4 plugins: ** ** collector, analyzer, persistor and notifier .

-

Collector

-

Collector's aim is to determine the size of a proper file. -

-
# FSize_watcher_collector.py# Example plugin for monitoring file size.# Part 1. Collectorimport osfrom lvestats.core.plugin import LveStatsPlugin # Key nameCOLLECTOR_KEY = 'FSizeWatcher_fsize'COLLECTOR_KEY_FILENAME = 'FSizeWatcher_fname'  class FSize_watcher_collector (LveStatsPlugin):# this plugin should be first in chainorder = 0# File to monitoringfile_to_monitoring = None def __init__(self):pass # Sets configuration to plugindef set_config(self, config):self.file_to_monitoring = config.get('file_to_monitoring', None)pass# Work methoddef execute(self, lve_data):try:# if monitoring file absent, do nothingif self.file_to_monitoring is None or not os.path.exists(self.file_to_monitoring):return # Get file sizestat_info = os.stat(self.file_to_monitoring)fsize = stat_info.st_size # Place file name and file size to server data dictionarylve_data[COLLECTOR_KEY_FILENAME] = self.file_to_monitoringlve_data[COLLECTOR_KEY] = fsizeexcept (OSError, IOError):# file absent or any other error - remove size from dictionarydel lve_data[COLLECTOR_KEY]
-  
-

Plugin algorithm is extremely simple – file size is read and written into data dictionary. Files name is read from set_config method configuration. If the name is not specified, then None is written into appropriate variable. All the errors are completely ignored (e.g. if specified file doesn't exist or there's no way to read any of it's information).

-

order attribute is specified as 0 to make this plugin go the first among three. Data collector must always be the first in plugins logical chain, because it provides all the necessary information for the analyzer which goes the next. Specific values of я order can be of any kind, but what is important is that when the server starts, all the plugins line up in proper sequence: collector – analyzer – persistor .

-

In order to make plugin work, we have to create configuration file /etc/sysconfig/lvestats.config/FSize_watcher_collector.cfg with the following content: -

-
# Config file for FSize_watcher_collector plugin# Please define monitoring file here#file_to_monitoring = /usr/local/cpanel/logs/error_logfile_to_monitoring = /usr/local/cpanel/logs/access_log
-  
-

Note that file’s name FSize_watcher_collector without .cfg extension matches plugin class name.

-

file_to_monitoring option is read by plugin in set_config method and contains file’s full name for monitoring.

-

Files for monitoring, suggested in the actual example - /usr/local/cpanel/logs/error_log and /usr/local/cpanel/logs/access_log - are real, these are cPanel control panel logs.

-

The first file is errors log; the second is appeal log, is refreshed during common work with panel (e.g. if user email address is changed).

-

Errors log tracking is more important, but appeal log monitoring allows to illustrate plugins work more in details, because it is refreshed more often.

-

Note that plugin can monitor one file only.

-

Analizer

-

Analyzer decides if the file's size has changed and gives a command to persistor to refresh log.

-

-
# FSize_watcher_analyzer.py# Example plugin for monitoring file size.# Part 2. Analyzer from lvestats.core.plugin import LveStatsPlugin # Key name from collector pluginCOLLECTOR_KEY = 'FSizeWatcher_fsize' # Key name 1 for saver pluginSAVER_KEY = 'FSizeWatcher_fsize_to_store'# Key name 2 for saver pluginSAVER_DATA_PRESENCE = 'FSizeWatcher_fsize_present'  class FSize_watcher_analyzer (LveStatsPlugin):# this plugin should be second in chainorder = 1# Last file sizefile_last_size = 0# Plugin run period in secondsperiod = 60 def __init__(self):pass # work methoddef execute(self, lve_data):# Default setting for saverlve_data[SAVER_DATA_PRESENCE] = 0# Check presence dataif COLLECTOR_KEY not in lve_data:return # Get file size from server data dictionaryfsize = lve_data[COLLECTOR_KEY] # Check, if file size changed, store it for saver pluginif fsize == self.file_last_size:return # Put new size for saver pluginlve_data[SAVER_KEY] = fsizeself.file_last_size = fsizelve_data[SAVER_DATA_PRESENCE] = 1
-  
-

This plugin is extremely simple as well. It starts after collector (order=1) , searches for file size in the dictionary and compares it with the previous index. If it has changed, then it writes a sign of presence of a new size into the dictionary. If no changes seen, then sign resets. The previous file size is stored in the plugin itself in file_last_size variable. Note that they are stored during the whole server lve-stats lifetime.

-

If file size is not found in data dictionary, then plugin just ends.

-

All the errors are completely ignored.

-

Analyzer is unconfigurable, that is why it doesn’t require any configuration file and it doesn’t contain set_config method.

-

Plugin starts every 60 seconds (1 minute), because we need data fixation to be performed one time in a minute.

-

Persistor

-

Persistor saves information from the common dictionary into files, databases, etc. -

-
# FSize_watcher_saver.py# Example plugin for monitoring file size and last modification date-time.# Part 3. Data saver import signalimport sysimport timefrom lvestats.core.plugin import LveStatsPlugin # Key name 1 for saver pluginSAVER_KEY = 'FSizeWatcher_fsize_to_store'# Key name 2 for saver pluginSAVER_DATA_PRESENCE = 'FSizeWatcher_fsize_present'# Monitoring file nameCOLLECTOR_KEY_FILENAME = 'FSizeWatcher_fname'  class FSize_watcher_saver (LveStatsPlugin):# this plugin should be third in chainorder = 2# Plugin run period in secondsperiod = 60# Log filenamelog_file_name = None# First run flagis_first_run = True def __init__(self):signal.signal(signal.SIGTERM, self.sigterm_handler) # Sets configuration to plugindef set_config(self, config):# Get log filenameself.log_file_name = config.get('log_filename', None) # work methoddef execute(self, lve_data):# do nothing, if log file not definedif not self.log_file_name:returntry:# Check presence dataif SAVER_DATA_PRESENCE not in lve_data or lve_data[SAVER_DATA_PRESENCE] == 0:# No datareturn# Get file size from server data dictionaryfsize = lve_data[SAVER_KEY]# Store data to logf = open(self.log_file_name, 'a')if self.is_first_run:f.write('%s - FSize_watcher started. Monitoring file: %s, saving data period=%d sec\n' % (time.asctime(time.localtime()), lve_data[COLLECTOR_KEY_FILENAME], self.period))self.is_first_run = Falsef.write('%s - FSize_watcher: file size is %d bytes\n' % (time.asctime(time.localtime()), fsize))f.close()except:# Ignore all errorspass # Terminate handlerdef sigterm_handler(self, signum, frame):if self.log_file_name:try:# Store data to log filef = open(self.log_file_name, 'a')f.write('%s - File watcher saver plugin: TERMINATE\n' % time.asctime(time.localtime()))f.close()passexcept:# Ignore all errorspass# Terminate processsys.exit(0)
-  
-

Configuration file /etc/sysconfig/lvestats.config/FSize_watcher_saver.cfg : -

-
# Config file for FSize_watcher_saver.py plugin# Please define log filename herelog_filename = /var/log/FSize_watcher.log
-  
-

This plugin starts after analyzer (order=2) , checks new file size presence flag, and if positive – writes it into log. If the flag is cleared (which means the size hasn't changed), then plugin simply ends.

-

Starts once in a minute (period=60).

-

Also this plugin shows the work of signal handler.

-

Plugin constructor registers handler-function of a proper signal: signal.signal(signal.SIGTERM, self.sigterm_handler) . This means, that when the server finishes its work, then sigterm_handler method of plugin class will be invoked. In the actual example the function just writes a notification into log, tracing the fact of it's invocation.

-

Pay attention on sys.exit(0) command in the end of the handler. Find the information on it in Server Plugin Arrangement section.

-

In addition see into examples of file log /var/log/FSize_watcher.log formed by the plugins above: - - Tue Feb 3 13:06:24 2015 - FSize_watcher started. Monitoring file: /usr/local/cpanel/logs/access_log, saving data period=60 sec - Tue Feb 3 13:06:24 2015 - FSize_watcher: file size is 122972890 bytes - Tue Feb 3 13:07:25 2015 - FSize_watcher: file size is 122975507 bytes - Tue Feb 3 13:08:25 2015 - FSize_watcher: file size is 122978124 bytes - Tue Feb 3 13:09:25 2015 - FSize_watcher: file size is 122978997 bytes - Tue Feb 3 13:10:25 2015 - FSize_watcher: file size is 122981033 bytes - Tue Feb 3 13:11:25 2015 - FSize_watcher: file size is 122982052 bytes - Tue Feb 3 13:13:25 2015 - FSize_watcher: file size is 122983798 bytes - Tue Feb 3 13:20:15 2015 - File watcher saver plugin: TERMINATE

-

and - - Thu Feb 5 13:07:27 2015 - FSize_watcher started. Monitoring file: /usr/local/cpanel/logs/error_log, saving data period=60 sec - Thu Feb 5 13:07:27 2015 - FSize_watcher: file size is 14771849 bytes - Thu Feb 5 14:03:32 2015 - FSize_watcher: file size is 14771995 bytes - Thu Feb 5 15:01:36 2015 - FSize_watcher: file size is 14772434 bytes - Thu Feb 5 17:15:47 2015 - FSize_watcher: file size is 14772873 bytes - Thu Feb 5 18:47:54 2015 - FSize_watcher: file size is 14775213 bytes - Thu Feb 5 19:11:56 2015 - FSize_watcher: file size is 14775652 bytes - Thu Feb 5 21:09:05 2015 - FSize_watcher: file size is 14776091 bytes - Thu Feb 5 23:06:14 2015 - FSize_watcher: file size is 14776530 bytes - Fri Feb 6 00:47:23 2015 - FSize_watcher: file size is 14778870 bytes - Fri Feb 6 01:02:24 2015 - FSize_watcher: file size is 14779309 bytes - Fri Feb 6 02:00:28 2015 - FSize_watcher: file size is 14779434 bytes - Fri Feb 6 03:16:34 2015 - FSize_watcher: file size is 14779873 bytes - Fri Feb 6 05:04:42 2015 - FSize_watcher: file size is 14779998 bytes - Fri Feb 6 05:12:43 2015 - FSize_watcher: file size is 14780437 bytes - Fri Feb 6 05:56:50 2015 - FSize_watcher: file size is 14780551 bytes - Fri Feb 6 06:01:50 2015 - FSize_watcher: file size is 14780975 bytes - Fri Feb 6 06:03:51 2015 - FSize_watcher: file size is 14782183 bytes - Fri Feb 6 06:04:51 2015 - FSize_watcher: file size is 14782575 bytes - Fri Feb 6 06:18:52 2015 - FSize_watcher: file size is 14782647 bytes - Fri Feb 6 06:21:52 2015 - FSize_watcher: file size is 14782898 bytes - Fri Feb 6 06:48:54 2015 - FSize_watcher: file size is 14785238 bytes - Fri Feb 6 07:09:56 2015 - FSize_watcher: file size is 14785677 bytes - Tue Feb 6 08:03:15 2015 - File watcher saver plugin: TERMINATE

-

You can see that log record is being held once a minute (what we actually need), new file size is written.

-

Also we can notice that handler SIG_TERM was executed, signaling that plugin received the notification about server shut-down.

-

Notifier

-

Notifier informs system users about any events. -

-
# FSize_watcher_saver.py# Example plugin for monitoring file size and last modification date-time.# Part 4. Notifier import timeimport smtplib from lvestats.lib.commons import dateutilfrom lvestats.core.plugin import LveStatsPlugin  # Key nameCOLLECTOR_KEY_FSIZE = 'FSizeWatcher_fsize'COLLECTOR_KEY_FILENAME = 'FSizeWatcher_fname' # email message patternEMAIL_MESSAGE_PATTERN = """Hello, administrator!Size of the file '%s' is %d bytes."""  class FSize_watcher_notifier (LveStatsPlugin):# Default periodDEFAULT_PERIOD_STR = '12h'# this plugin should be third in chainorder = 3# Timeouttimeout = 20# Notifier Log filenamelog_file_name = '/var/log/FSize_watcher_notifier.log'# Email from addressemail_from = None# Email to addressemail_to = None# Email subjectemail_subject = None# Sets configuration to plugindef set_config(self, config):# Email settingsself.email_from = config.get('notify_from_email', None)self.email_to = config.get('notify_to_email', None)self.email_subject = config.get('notify_from_subject', 'Message from FSize_watcher_notifier plugin')# Notify periods_period = config.get('notify_period', None)if s_period:self.period = dateutil.parse_period2(s_period)else:self.period = dateutil.parse_period2(FSize_watcher_notifier.DEFAULT_PERIOD_STR)f = open(self.log_file_name, 'a')f.write('%s - FSize_watcher_notifier plugin: configure\n' % time.asctime(time.localtime()))f.write('       - Period: %s\n' % self.period)f.write('       - From: %s\n' % self.email_from)f.write('       - To: %s\n' % self.email_to)f.write('       - Subject: \'%s\'\n' % self.email_subject)f.close() # work methoddef execute(self, lve_data):if COLLECTOR_KEY_FSIZE not in lve_data or COLLECTOR_KEY_FILENAME not in lve_data:returnif not self.email_from or not self.email_to:f = open(self.log_file_name, 'a')f.write('%s - FSize_watcher_notifier plugin error: email_from or email_to not set\n')f.close()returntry:from email.mime.text import MIMEText# Send emailmsg = MIMEText(EMAIL_MESSAGE_PATTERN % (lve_data[COLLECTOR_KEY_FILENAME], lve_data[COLLECTOR_KEY_FSIZE]))msg['Subject'] = self.email_subjectmsg['From'] = self.email_frommsg['To'] = self.email_to s = smtplib.SMTP('localhost')s.sendmail(self.email_from, [self.email_to], msg.as_string())s.quit() f = open(self.log_file_name, 'a')f.write('%s - FSize_watcher_notifier plugin: email message was successfully sent\n' % time.asctime(time.localtime()))f.close()except Exception as e:f = open(self.log_file_name, 'a')f.write('%s - FSize_watcher_notifier plugin error:\n%s\n' % (time.asctime(time.localtime()), str(e)))f.close()
-  
-

Configuration file /etc/sysconfig/lvestats.config/FSize_watcher_notifier.cfg : -

-
# Config file for FSize_watcher_notifier.py plugin# Please define email options here NOTIFY_FROM_EMAIL=user@hostnameNOTIFY_FROM_SUBJECT=Message from FSize_watcher_notifierNOTIFY_TO_EMAIL=admin@hostnameNOTIFY_PERIOD=12h
-  
-

Plugin’s index number equals 3 ( order=3 ), that is why notifier starts after the rest. But since it uses only data formed by collector , then its order may equal any number bigger that collectors order (>0).

-

Notifier reads the necessary parameters from the configuration (email address, topic, period) and writes them into its own log as reference.

-

Plugin’s execute method checks the availability of all the necessary data (email parameters, collectors data) and sends the message. All the notifications are written into the notifier's own log.

-

If any data is missing, the message is not sent.

-

Log example: - - Thu Feb 5 11:51:34 2015 - FSize_watcher_notifier plugin: configure - _ - Period: 60.0_ - _ - From: user@hostname_ - _ - To: admin@hostname_ - _ - Subject: 'Message from FSize_watcher_notifier'_ - Thu Feb 5 11:51:35 2015 - FSize_watcher_notifier plugin: email message was successfully sent - Thu Feb 5 11:52:35 2015 - FSize_watcher_notifier plugin: email message was successfully sent - Thu Feb 5 11:53:35 2015 - FSize_watcher_notifier plugin: email message was successfully sent - Thu Feb 5 11:54:35 2015 - FSize_watcher_notifier plugin: email message was successfully sent - Thu Feb 5 11:57:00 2015 - FSize_watcher_notifier plugin: configure - _ - Period: 43200.0_ - _ - From: user@hostname_ - _ - To: admin@hostname_ - _ - Subject: 'Message from FSize_watcher_notifier'_ - Thu Feb 5 11:57:00 2015 - FSize_watcher_notifier plugin: email message was successfully sent

-

File info and format for /var/lve/info file

-

This file is used by control panels to display to user their 'current' usage. The file is updated every 5 seconds by lve-stats.

-

When writing to this file we make sure that: average CPU/IOPS/MEM is never more then LIMIT for that resource.

-

Example: - - 0,0,20,0,2500,0,262144,0,0,262144,0,0,100,0,0,0,0,1024,1024,0,0,0,0 - 600,1,20,2492,2500,70,262144,0,0,262144,33,0,100,1,0,0,0,1024,1024,0,5,0,0 - 200,0,20,0,2500,0,262144,0,0,262144,0,0,100,0,0,0,0,1024,1024,0,0,0,0 - 500,0,20,0,2500,0,262144,0,0,262144,0,0,100,0,0,0,0,1024,1024,0,0,0,0

-

First line of the file is ' default limits '.

-

Fields:

-

0 - id

-

1 - mep (average entry processes)

-

2 - lep (limit ...)

-

3 - cpu_usage (average speed)

-

4 - lcpu (limit spped)

-

5 - mem_usage (average virtual memory)

-

6 - lmem (limit ...)

-

7 - mem_fault (number of virtual memory faults)

-

8 - mep_fault (number of entry processes faults)

-

LVE_VERSION >=6

-

9 - lmemphy (limit physical memory)

-

10 - memphy (average ...)

-

11 - memphy_fault (faults ...)

-

12 - lnproc (limit number of processes)

-

13 - nproc (average ...)

-

14 - nproc_fault (faults ...)

-

15 - lcpuw (CPU weight -- deprecated not used)

-

16 - io_usage (average IO usage)

-

17 - io_limit (limit ...)

-

LVE_VERSION >=8 - #18 - liops (limit IOPS) - #19 - iops (average IOPS)

-

Troubleshooting

-

lvestats service and utilities write fatal errors to system log.

-

There is _ /var/log/lve-stats.log_ file with additional information (warnings, tracebacks for errors)

- - - - tag has no matching end tag. - - @ ./docs/lve-stats_2/README.md?vue&type=template&id=65d90f0a& 1:0-457 1:0-457 - @ ./docs/lve-stats_2/README.md - @ ./node_modules/vuepress/lib/app/.temp/routes.js - @ ./node_modules/vuepress/lib/app/app.js - @ ./node_modules/vuepress/lib/app/clientEntry.js - @ multi ./node_modules/vuepress/lib/app/clientEntry.js - -ERROR in ./docs/node_js_selector/README.md?vue&type=template&id=35bc6d04& (./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/vuepress/node_modules/.cache/vuepress","cacheIdentifier":"18759c20-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??ref--1-1!./node_modules/vuepress/lib/webpack/markdownLoader.js??ref--1-2!./docs/node_js_selector/README.md?vue&type=template&id=35bc6d04&) -Module Error (from ./node_modules/vue-loader/lib/loaders/templateLoader.js): -(Emitted value instead of an instance of Error) - Error compiling template: - -

Node.js Selector

-

Overview & Requirements - Requirements - Installation - Command Line Interface - Hoster - End User - User Interface - Hoster - How to enable/disable Node.js - How to manage Node.js - Applications column - End User - How to manage application - Node.js Deployment - Remote Usage of Node.js Interpreters - Remote Usage of the cloudlinux-selector Utility

-

Overview & Requirements

-

Node.js Selector is a CloudLinux component that allows each user to easily create Node.js applications, choose Node.js version and other parameters for applications based on their needs.

-

Node.js Selector supports Node.js versions 6.x, 8.x, 9.x and later. - This feature is available for CloudLinux 7, CloudLinux 6 hybrid and CloudLinux 6. - Node.js Selector requires LVE Manager 4.0 or later. - It supports cPanel and DirectAdmin servers (Plesk is not supported as it already has Node.js support.) For more details, please go to Plesk & Node.js documentation here and here . - For more details about mod_passenger and Node.js, please read documentation here and here . - Node.js Selector is working with EasyApache 3 and EasyApache 4.

-

Installation

-

To use Node.js Selector, please install Node.js packages by running the following command:

-
yum groupinstall alt-nodejs6 alt-nodejs8 alt-nodejs9
-  
-

Also, please install LVE Manager, LVE Utils and Fusion Passenger by running the following command:

-
yum install lvemanager lve-utils ea-apache24-mod-alt-passenger
-  
-

For EasyApache 3:

-
yum install lvemanager lve-utils alt-mod-passenger
-  
-

And we recommend to install CageFS for better security (not mandatory) by running the following command:

-
yum install cagefs
-  
-

CloudLinux 7:

-
systemctl restart cpanel.service
-  
-

CloudLinux 6:

-
service cpanel restart
-  
-

To use Node.js Selector, please install Node.js packages by running the following command:

-
yum groupinstall alt-nodejs6 alt-nodejs8 alt-nodejs9
-  
-

Also, please install LVE Manager, LVE Utils and Fusion Passenger by running the following command:

-
yum install lvemanager lve-utils alt-mod-passenger
-  
-

And we recommend to install CageFS for better security (not mandatory) by running the following command:

-
yum install cagefs
-  
-

Command Line Interface

-

Below is a list of commands hoster and end user can run in a command line.

-

Get information related to Node.js: default version, list of supported versions, status of Node.js Selector , list of users, their applications, etc: -

-
cloudlinux-selector [get] [--json] --interpreter nodejs
-  
-

JSON output for get command: -

-
{  "selector_enabled": true | false,   "default_version": "6.11.3",   "result": "success",   "timestamp": 1508667174.220027  "cache_status": "ready"         //  or “updating” during automatic yum cache rebuild  "available_versions": {   //  begin of  “versions”      "6.11.3" : {   //   begin of version "6.11.3"                  "name_modifier": "",                   "status": "enabled",  //  enabled, disabled, not_installed, installing, removing                  “base_dir”: “/opt/alt/alt-nodejs6”   //  empty when version is not installed                  “users”: {   //  begin of  “users”                      “user1”: {   //  begin of “user1”“homedir”: “/home/user1”,                                         “applications”: {    //  begin of “applications”                             “apps_dir/app1” : {   //   begin of application “apps_dir/app1”                                 “domain”: “cltest1.com”,                                 “app_uri”: “apps/my-app1”,                                         “app_mode” : “development”,                                 “startup_file” : “app.js”,                                 “app_status” : “started”,   // ‘started’ or ‘stopped’                                 “config_files” : [                                     “package.json”,                                     “gruntfile.js”                                 ],                                 “env_vars” : {                                     “var1” : “value1”,                                     “var2” : “value2”                                 },                             },   // end of application “apps_dir/app1”                             “apps_dir/app2” : {    //   begin of application “apps_dir/app2”                                  << data for application “apps_dir/app2”  (same structure as for application “apps_dir/app1” above) >>                             },   //  end of application “apps_dir/app2”                         },   //  end of “applications”                      },   //  end of “user1”                      “user2”: {   //  begin of “user2”                          << data for user “user2”  (same structure as for “user1” above) >>                      },   //  end of “user2”                  },   // end of “users”                },    //  end of version “6.11.3”              "8.21.5" : {   //   begin of version "8.21.5"                    << data for version "8.21.5"  (same structure as for version “6.11.3” above) >>                },    //  end of version “8.21.5”            },    //  end of “versions”}   //   end of json
-  
-

Set default version, supported versions, and status of Node.js Selector : -

-
cloudlinux-selector set [--json] --interpreter nodejs (--selector-status <enabled,disabled> | --default-version <str> | --supported-versions <str>)
-  
-

Note that Node.js Selector is disabled by default. If an available Node.js version is not installed Node.js Selector is always disabled and it is impossible to enable it.

-

To set default Node.js version, please use the following command (note that required Node.js version should be enabled): -

-
cloudlinux-selector set --json --interpreter=nodejs --default-version=<ver>
-  
-

Examples : - This command enables Node.js Selector :

-

-
cloudlinux-selector set --json --interpreter nodejs --selector-status enabled
-  
-

This command sets default Node.js version as 6:

-

-
cloudlinux-selector set --json --interpreter nodejs --default-version 6
-  
-

This command sets supported Node.js version as 8: -

-
cloudlinux-selector set --json --interpreter nodejs --supported-versions='{"6": false, "8": true}'
-  
-

Install required Node.js version: -

-
cloudlinux-selector install-version --json --interpreter nodejs --version 8
-  
-

Uninstall required Node.js version: -

-
cloudlinux-selector uninstall-version --json --interpreter nodejs --version 8
-  
-

Enable required Node.js version: -

-
cloudlinux-selector enable-version --json --interpreter nodejs --version 8
-  
-

Disable required Node.js version (note that it is impossible to disable default Node.js version): -

-
cloudlinux-selector disable-version --json --interpreter nodejs --version 8
-  
-

Change version for application(s): -

-
cloudlinux-selector set [--json] --interpreter nodejs ((--user <str> |  --domain <str>) --app-root <str> | --from-version <str>) --new-version <str>
-  
-

Examples : - This command changes version for the specific application: -

-
cloudlinux-selector set --json --interpreter nodejs --user user1 --app-root apps_dir/app1 --new-version 8
-  
-

Common output for all set commands:

-

in case of success : -

-
{  "result": "success",   "timestamp": 1508666792.863358}
-  
-

in case of error: -

-
{  "result": "Some error message",  "details" : "Traceback: ..." ,  "context": {},  "timestamp": 1508666792.863358}
-  
-

in case of warning: -

-
{  "result": "success",  "warning" : "Some warning message" ,  "context": {},  "timestamp": 1508666792.863358}
-  
-

To resolve issues related to install-version/uninstall-version commands (because they are running in the background) you may use this log file /var/log/cl-nodejs-last-yum.log - It contains full yum output from the latest performed operation (install or uninstall) and it will be rewritten with each operation.

-

Get config file for the user applications

-

-
cloudlinux-selector read-config [--json] --interpreter nodejs  [(--user <str> |  --domain <str>)] --app-root <str> --config-file <name>
-  
-

JSON output: -

-
{          "result": "success",         "timestamp": 1508666792.863358           "data": "content of config file as Base64 encoded string"}
-  
-

Example :

-

This command gets config file for user1 ’s application app1 : -

-
cloudlinux-selector read-config --json --interpreter nodejs  --user user1 --app-root app_dir/app1 --config-file package.json
-  
-

Save config file for the user applications -

-
cloudlinux-selector save-config [--json] --interpreter nodejs  [(--user <str> | --domain <str>)] --app-root <str> --config-file <path> --content <content of config file as Base64 encoded string>
-  
-

JSON output (the same as for all set commands): -

-
{          "result": "success",           "timestamp": 1508666792.863358}
-  
-

Example : - This command saves config file for user1 ’s application app1 :

-

-
cloudlinux-selector save-config --json --interpreter nodejs  --user user1 --app-root app_dir/app1 --config-file package.json  --content                                         VGh1ICAyIE5vdiAxMDo0MzoxMiBFRFQgMjAxNwo=
-  
-

Get a list of applications for the specific user -

-
cloudlinux-selector [get] [--json] --interpreter nodejs  [(--user <str> |  --domain <str>)]
-  
-

Example : - This command gets a list of applications for the user1 : -

-
cloudlinux-selector get --json --interpreter nodejs  --user user1
-  
-

Create user application

-

-
cloudlinux-selector create [--json] --interpreter nodejs [(--user <str> | --domain <str>)] --app-root <str> --app-uri <str> [--version <str>] [--app-mode <str>] [--startup-file <str>] [--env-vars <json string>]
-  
-

Example : - This command creates user1 's application for the domain xyz.com : -

-
cloudlinux-selector create --json --interpreter nodejs --user user1 --app-root my_apps/app1 --app-uri apps/app1
-  
-

or -

-
cloudlinux-selector create --json --interpreter nodejs --app-root my_apps/app1 --domain xyz.com --app-uri apps/app1
-  
-

Start, restart, stop, and destroy user application -

-
cloudlinux-selector (start | restart | stop | destroy) [--json] --interpreter nodejs  [(--user <str> | --domain <str>)] --app-root <str>
-  
-

Example : - This command starts user1 's application: -

-
cloudlinux-selector start --json --interpreter nodejs --user user1 --app-root my_apps/app1
-  
-

Change properties for an application

-

-  
-

Example 1 : - This command sets a production mode, new domain new.xyz.com , new Node.js version 8, new URI , new application root directory and new startup file for user1 application located on the domain xyz.com : -

-
cloudlinux-selector set --json --interpreter nodejs  --user user1 --app-root my_apps/app1 --mode production  --new-app-root new_apps/new_app1  --new-domain new.xyz.com --new-app-uri new_apps/app1  --new-version 8  --startup-file new_app.js --env-vars '{ "var1" : "value1", "var2" : "value2" }'
-  
-

Example 2 : -

-
cloudlinux-selector set --json --interpreter nodejs  --domain xyz.com --app-root my_apps/app1 --mode production  --new-app-root new_apps/new_app1  --new-domain new.xyz.com --new-app-uri new_apps/app1  --new-version 8  --startup-file new_app.js --env-vars '{ "var1" : "value1", "var2" : "value2" }'
-  
-

Run npm install command for the user application -

-
cloudlinux-selector install-modules [--json] --interpreter nodejs  [(--user <str> |  --domain <str>)] --app-root <str>
-  
-

Example : - This command runs _ _ npm install _ _ for user1 application:

-

-
cloudlinux-selector install-modules --json --interpreter nodejs --user user1 --app-root my_apps/app
-  
-

Run a script from package.json file of a user application, arguments are passed to the script -

-
cloudlinux-selector run-script [--json] --interpreter nodejs  [(--user <str> | --domain <str>)] --app-root <str> --script-name <str> [-- <args>...]
-  
-

Example : -

-
cloudlinux-selector run-script --json --interpreter nodejs --user user1 --app-root my_apps/app --script-name test_script -- --script_opt1 --script_opt2 script_arg1 script_arg2
-  
-

JSON output:

-

-
{          "result": "success",           "timestamp": 1508666792.863358           "data": "script output as Base64 encoded string"}
-  
-

Activate virtual environment of NodeJS: -

-
source <home_of_user>/nodevenv/<app_root>/<nodejs_version>/bin/activate
-  
-

This command changes prompt to - Example : -

-
[newusr@192-168-245-108 ~]$ source /home/newusr/nodevenv/newapp4/newapp3/8/bin/activate[newapp4/newapp3 (8)] [newusr@192-168-245-108 ~]$
-  
-

After ativation user can use npm and node from a virtual environment without full paths.

-

User Interface

-

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

-

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

-

Version — displays Node.js version. - Path — Node.js package location. - Applications — number of applications that use this Node.js version. Click on a digit to go to the list of applications. - Enabled — displays if particular Node.js version is enabled. - Actions — allows to install, delete, and make default a particular Node.js version. - To display all changes immediately click Refresh link.

-

-

To enable Node.js move a slider to Enable . - To disable Node.js move a slider back to Disable .

-

-

-

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

-

Enable and disable particular Node.js version

-

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

-

-

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

-

Install and delete particular Node.js version

-

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

-

To delete particular Node.js version do the following: - Click Bin icon in the Actions column for a particular Node.js version. - In the confirmation pop-up click Agree to start uninstall process. - Or close a pop-up without changes.

-

Note that it is impossible : - to remove default Node.js version; - to remove version with applications; - to install or remove version if another installation/uninstall process is running.

-

-

Make a particular Node.js version as a default

-

To make a particular Node.js version as a default do the following: - Click Double-Tick icon in the Actions column for a particular Node.js version. - In the confirmation pop-up click Agree to save changes or Cancel to close pop-up.

-

-

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

-

-

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

-

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

-

Note that Node.js Selector icon in end user interface is absent 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 → Select Node.js Version .

-

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.

-

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 . - Specify Application root — specify in a field a physical address to the application on a server that corresponds with its URI. - Specify Application URL — specify in a field an HTTP/HTTPS link to the application. - Specify Application startup file — specify as NAME.js file . - 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.

-

Node.js Deployment

-

The first approach - remote usage of Node.js Interpreters of different versions . - The second approach - remote usage of the cloudlinux-selector utility .

-

Remote Usage of Node.js Interpreters

-
    -
  1. Create a Node.js project in IntelliJ IDEA/WebStorm . You can download this archive and use it as a basis.
  2. -
  3. Install alt-nodejs packages on the server in use. See installation instructions .
  4. -
  5. Create an application on the server. You can do it by three ways: - Via UI of the Node.js plugin. - Using the following command to create an application: -
  6. -
-
cloudlinux-selector create --interprete=nodejs --json --app-root=<USER_NAME> --app-uri=<APP_NAME> --app-mode=develompent --version=<VERSION> --domain=<DOMAIN>
-  
-

-

Choose a location of the application on the server and synchronize the files with the IntelliJ IDEA project. - 4. Set up Run/Debug Configurations in the project created.

-

-

Specify a path to the remote Node.js interpreter. To be able to specify the remote interpreter, you should install the Node.js Remote Interpreter plugin first. Please find more information here , using server access credentials for a user (Main menu — Run — Edit configurations...) . - Specify initial JavaScript file that will be run with the node command (it is the app.js file from the archive). - Specify Path Mappings between a local and a remote project (Preferences — Deployments — Add) . If you have created your application with the cloudlinux-selector utility or via plugin UI the Path Mappings should be as follows: -

-
/home/<USER_NAME>/<APP_NAME>
-  
-
    -
  1. Synchronize the project directories on the local and the remote machine as per Path Mappings specified.
  2. -
  3. Deploy the modules on the remote and the local machine with the npm install command (if there are dependent modules). In the UI you can click the Run NPM Install button.
  4. -
  5. Run Node.js application with the configuration set at the 4th step (Main menu — Run — Run… — Select configuration) .
  6. -
-

-
    -
  1. If you are using the application from the archive attached, you can see the running application on the 3003 port — http://DOMAIN:3003 .
  2. -
-

Note. The port should be available to a server user.

-

-

The following information should be displayed on this page: - A version of the running Node.js interpreter; - Current environment variables; - A current time. - So that, you can be sure that deployed modules are used properly.

-

If you’d like to use a different version of Node.js to run an application, change a path to the interpreter in the configuration settings of the running. - To apply all changes to the project, synchronize all changes with the server and restart the running application.

-
    -
  1. To debug a script, set breakpoints in the code and run the configuration via Main Menu (Main menu — Run — Debug… — Select configuration) .
  2. -
-

Useful links: - IntelliJ IDEA : https://www.jetbrains.com/help/idea/configure-node-js-remote-interpreter.html - Plugin Node.js Remote Interpreter : https://plugins.jetbrains.com/plugin/8116-node-js-remote-interpreter - WebStorm : https://www.jetbrains.com/help/webstorm/configure-node-js-remote-interpreter.html

-

Note. It is not required to install Passenger while working in IDE if you are using this approach.

-

Remote Usage of the cloudlinux-selector Utility

-

Create an application via UI or with the command as described in the Remote Usage of Node.js Interpreters approach, step 3 (a,b) . - 2. Set up project mapping on the local machine with the created remote application _ _ /home/<USER_NAME>/<APP_NAME> _ (Preferences → Deployments → Add)_ . - 3. Set up the remote commands of the cloudlinux-selector (Preferences → Remote SSH External Tools → Add) for the following actions: - Restart application; - Install packages; - Run script; - Change Node.js version for the application. - You can see the running app at http://DOMAIN/APPLICATION_URL - To apply all changes, restart the application.

-
- - - tag has no matching end tag. - - @ ./docs/node_js_selector/README.md?vue&type=template&id=35bc6d04& 1:0-457 1:0-457 - @ ./docs/node_js_selector/README.md - @ ./node_modules/vuepress/lib/app/.temp/routes.js - @ ./node_modules/vuepress/lib/app/app.js - @ ./node_modules/vuepress/lib/app/clientEntry.js - @ multi ./node_modules/vuepress/lib/app/clientEntry.js -Child html-webpack-plugin for "index.html": - Asset Size Chunks Chunk Names - index.html 1.38 MiB 0 - Entrypoint undefined = index.html - [./node_modules/lodash/lodash.js] 527 KiB {0} [built] - [./node_modules/vuepress-html-webpack-plugin/lib/loader.js!./node_modules/vuepress/lib/app/index.dev.html] 421 bytes {0} [built] - [./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 bytes {0} [built] diff --git a/docs/cloudlinux_os_components/README.md b/docs/cloudlinux_os_components/README.md index 19f393891..bd6f6d1d7 100644 --- a/docs/cloudlinux_os_components/README.md +++ b/docs/cloudlinux_os_components/README.md @@ -1,183 +1,21 @@ # CloudLinux OS components -* [Reseller limits](/cloudlinux_os_components/#reseller-limits) +* [Reseller limits](/limits/#reseller-limits) * [LVE-Stats 2](/cloudlinux_os_components/#lve-stats-2) * [CageFS](/cloudlinux_os_components/#cagefs) * [MySQL Governor](/cloudlinux_os_components/#mysql-governor) * [PHP Selector](/cloudlinux_os_components/#php-selector) * [Python Selector](/cloudlinux_os_components/#python-selector) -* [Python Selector (Old)](/cloudlinux_os_components/#python-selector-old) * [Ruby Selector](/cloudlinux_os_components/#ruby-selector) * [Node.js Selector](/cloudlinux_os_components/#node-js-selector) * [Apache mod_lsapi PRO](/cloudlinux_os_components/#apache-mod-lsapi-pro) * [Additional integration components](/cloudlinux_os_components/#additional-integration-components) * [Apache suexec module](/cloudlinux_os_components/#apache-suexec-module) -## Reseller limits - -### General information and requirements - -* [Types of Users](/cloudlinux_os_components/#types-of-users) -* [Types of Limits](/cloudlinux_os_components/#types-of-limits) -* [What happens when reseller or reseller's end user hits the limit?](/cloudlinux_os_components/#what-happens-when-reseller-or-reseller-s-end-user-hits-the-limit) -* [Requirements](/cloudlinux_os_components/#requirements) - -Reseller limits is a feature that allows hosters to set limits for the resources each reseller can operate with. Hoster also provides controls to the reseller on what resources each reseller’s 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. - -#### Types of Users - -Starting from the **version 3.0-18**, LVE Manager operates with four types of users and their resource usage limits. - -The types of users are as follows: - -* **End User** is a type of user that purchases hosting directly from a hoster and uses it for his own purposes; -* **Reseller** is a type of user that buys hosting from a hoster and resells it to his end users; -* **Reseller’s End User** is a type of user that purchases hosting from a reseller and uses it for his own purposes. -* **Reseller’s End User (no Reseller limit)** is a type of user that purchases hosting from a reseller and uses it for his own purposes but does not have limits set by a reseller. These limits are set by the hoster. - -#### Types of Limits - -See the comparison Table with types of limits. - -| | | | | -|-|--|--|-| -|**Limits** | **Reseller limits** | **Reseller’s end user limits** | **Hoster’s end user limits**| -|SPEED| Yes | Yes | Yes| -|PMEM| Yes | Yes | Yes| -|IO| Yes | Yes | Yes| -|IOPS| Yes | Yes | Yes| -|EP| Yes | Yes | Yes| -|NPROC| Yes | Yes | Yes| -|Inodes | Yes (default for all users) | No | Yes| -|MySQL Limits | Yes (supported only for MySQL Governor ALL mode) | Yes (supported only for MySQL Governor ALL mode) | Yes| - -#### What happens when reseller or reseller's end user hits the limit? - -:::tip Note -**Reseller** is a virtual entity. So, he cannot hit the limit. There is reseller's end user with the same name as reseller. This end user is limited as any other reseller's end user. When hoster sets Reseller limits he limits the group of resellers' end users including reseller's end user with the same name as the reseller. -::: - -* Reseller's end user can hit reseller limit when end user's limit is bigger than reseller's limit. In such case end user will be limited by reseller limit. -* Reseller limit can be hit when all resellers’ end users in total use as much resources as reseller limit. -* Reseller's end user can hit his limit when end user limit is lower than reseller limit. In such case end user will be limited by his limit. - -#### Requirements - -:::tip Note -Reseller Limits are only supported in kernel starting with the version **3.10.0-714.10.2.lve1.5.3.el7** for CloudLinux 7 kernel and **3.10.0-714.10.2.lve1.5.3.el6h** for CloudLinux 6 Hybrid kernel . -::: - -:::tip Note -In case you wish to use the new Reseller limits features and you use CloudLinux 6 kernel, you have to migrate to CloudLinux 6 Hybrid kernel first. -::: - -### Installation, enabling, and disabling - -Use the detailed instruction below: - -1. Install CloudLinux 7 or CloudLinux 6 Hybrid on a new server. Follow the instructions described [here](/cloudlinux_installation/#installing-new-servers). Or you can convert your CentOS 6.x or CentOS 7.x system to CloudLinux 6 or CloudLinux 7 respectively. To do this, follow the instructions described on the [link](/cloudlinux_installation/#converting-existing-servers). -2. If you have installed the CloudLinux 6, please convert it to the CloudLinux 6 Hybrid Kernel. Follow the instructions described [here](/cloudlinux_os_kernel/#hybrid-kernels). -3. Install LVE Manager with Reseller Limit support or update it up to version 3.0-18 (or later) by running the following commands: - -
- - ``` - yum install kernel lve cagefs lvemanager lve-utils lve-stats --disableexcludes=main - ``` -
- - -
- - ``` - yum update - ``` -
- -
- - ``` - reboot - ``` -
- - For CloudLinux 6 Hybrid kernel with Reseller Limit support, please run the following commands: - -
- - ``` - yum install kernel lve cagefs lvemanager lve-utils lve-stats --disableexcludes=main - ``` -
- -
- - ``` - yum update - ``` -
- -
- - ``` - reboot - ``` -
- - -:::tip Note -When you move a user from one reseller to another on DirectAdmin, the LVE Manager's Reset function does not consider package limits of the end-user and reset them to defaults. -To solve this, you can do one of the following: -1. Change a package to one of Reseller's package for the moved users. -2. Create a package with the same name and limits for the Reseller with the moved users. -::: - - -### How to enable and disable Reseller limits - -To start using a new feature **Reseller limits** you would have to enable reseller limits for a particular reseller first. - -To enable **Reseller** access, please do the following: - -1. Log in with a Hoster access. -2. You can create a new account or give privileges to an existing account. -3. For new account tick a checkbox `Make this account a reseller` in the `Reseller Settings` box. - -![](/images/resellersettings.png) - -:::tip Note -If checkbox **Make the account own itself (i.e., the user can modify the account)** is not selected when creating Reseller in cPanel WHM, then user account **Reseller** will belong to root, not to reseller **Reseller**. In such case, the user **Reseller** will be managed by the root. So, LVE limits specified by the root will be applied to the user **Reseller**. User **Reseller** will not be limited by Reseller limits. - -When the checkbox is selected, user **Reseller** will be limited by Reseller limits (in addition to personal user limits set by Reseller). -::: - -4. Give privileges to the proper Reseller account to make all features work. -5. Go to the _Users_ tab and choose a particular reseller you want to enable Reseller limits for and click on the pencil icon. -6. In the pop-up move the slider _Manage Limits_. Click _AGREE_ for the question _Are you sure you want to enable limits_, set limits for that reseller if you you want them to be different from the default limits, otherwise default server limits will be applied. Than click the _Save_. - -![](/images/hmfile_hash_00664772.png) - - -:::tip Note -Resellers’ end users can use as much resources in total as it is provided for that particular reseller by a hoster. The summary usage of all end users that belong to that particular reseller will not exceed the amount of resources provided to reseller by a hoster. If no Reseller Limits are set, reseller’s end user will be limited by default limits set by a hoster. -::: - -### How to disable Reseller limits - -To disable Reseller limits, please do the following: - -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_. Than click _Save_. - -:::tip Note -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. -::: - -See also [Reseller limits UI](/lve_manager/#reseller-limits). +#### General information and requirements ## LVE-Stats 2 + ### General information and requirements * [Why is it needed?](/cloudlinux_os_components/#why-is-it-needed) @@ -241,7 +79,7 @@ Settings of old lve-stats (ver. 0.x) are import SQLite database file is located in `/var/lve/lvestats2.db`, data from old lve-stats (ver. 0.x) are being migrated automatically in the background. Migrating process can last 2-8 hours (during this time lags are possible when admin is trying to check statistics, at the same time users will not be affected). Migrating the latest 30 days, SQLite DB stable migration is provided. -Currently, the new lve-stats supports all databases available in CloudLinux. +Currently, the new lve-stats supports all databases available in CloudLinux OS Shared. :::tip Note You can also use [LVE-stats 2 CLI](/command-line_tools/#lve-stats-2) @@ -258,7 +96,7 @@ yum downgrade lve-stats ``` -and contact CloudLinux support at [https://cloudlinux.zendesk.com/hc/requests/new](https://cloudlinux.zendesk.com/hc/en-us/requests/new) +and contact CloudLinux OS Shared support at [https://cloudlinux.zendesk.com/hc/requests/new](https://cloudlinux.zendesk.com/hc/en-us/requests/new) :::tip Note You may need to rename `*.rpmsave` files to original ones in order to restore settings for old lve-stats (`/etc/sysconfig/lvestats`, `/etc/sysconfig/cloudlinux-notify`). @@ -301,6 +139,11 @@ The main configuration file `/etc/sysconfig/lvestats2` Possible values: * `true` * `false` +* `use_big_uids` - the option is available from lvestats version `3.0.14-1`. It allows using the user uids more than 109 and up to 231-2 (2 147 483 646). Top border is the biggest value which `kmodlve` can use as LVE ID. You should recreate lvestats database by command `lve-create-db --recreate` if you change the option's value from `false` to `true`. + Possible values: + * `true` + * `false` + Configuration files for plugins are located in `/etc/sysconfig/lvestats.config` directory. @@ -330,7 +173,7 @@ Configuration files for plugins are located in `/etc/s * `NOTIFY_FROM_EMAIL` - sender email address. For example: `NOTIFY_FROM_EMAIL=main_admin@host.com`; * `NOTIFY_FROM_SUBJECT` - email message subject. For example: `NOTIFY_FROM_SUBJECT=Message from notifier` * `REPORT_ADMIN_EMAIL` - custom email for admin reporting. For example: `REPORT_ADMIN_EMAIL=report_email@host.com` -* `NOTIFY_CHARSET_EMAIL` – charset type for email. Available for __lve-stats-2.9.4-1__ and later. Default is `us-ascii`. For example: `NOTIFY_CHARSET_EMAIL=utf-8` +* `NOTIFY_CHARSET_EMAIL` – charset type for email. Available for __lve-stats-2.9.4-1__ and later. Default is `us-ascii`. For example: `NOTIFY_CHARSET_EMAIL=utf-8`. If your email templates include non-Latin letters, it is recommended to use the UTF-8 encoding. These values can also be set using [cloudlinux-config CLI](/command-line_tools/#cloudlinux-config) utility @@ -379,7 +222,7 @@ If MySQL Server is not installed, then install it according to control panel doc For non-panel system: -* CloudLinux 6 +* CloudLinux OS Shared 6
@@ -390,7 +233,7 @@ For non-panel system: ```
-* CloudLinux 7 +* CloudLinux OS Shared 7
@@ -581,9 +424,9 @@ Run all the commands below under root. For control panels use proper documentation for installation on the links: [сPanel](https://documentation.cpanel.net/display/CKB/Install+or+Update+PostgreSQL+on+Your+cPanel+Server), [Plesk](https://kb.plesk.com/en/123729). - For non-panel CloudLinux run the following commands: + For non-panel CloudLinux OS Shared, run the following commands: - * CloudLinux 6 + * CloudLinux OS Shared 6
@@ -595,7 +438,7 @@ Run all the commands below under root. ```
- * CloudLinux 7 + * CloudLinux OS Shared 7
@@ -833,6 +676,16 @@ By default the templates for English are set: `/usr/sh * `reseller_notify.html` `reseller_notify.txt` for reseller; * `user_notify.txt` for user. + +Starting from `lve-stats-4.1.2`, it allows server administrators to use their own lvestats notifier email notification templates. + +To use the custom templates, place them and the `locales.json` file to the `/etc/cl.emails.d/LOCALE` directory. File names are the same as in general `/etc/cl.emails.d/LOCALE` file. + +If the `/etc/cl.emails.d/LOCALE` doesn't exist or doesn't contain the templates, you can use the `/usr/share/lve/emails/LOCALE` directory, as it was in previous versions of lve-stats. + +Please do not edit the templates in the the `/usr/share/lve/emails` and place the new updated templates in the `/etc/cl.emails.d` directory. + + The notification is formed as _Multipart content type_ [RFC1341(MIME)](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html). The plain text is taken from the `.txt` files, html version - from the `.html` template. @@ -877,7 +730,7 @@ service lvestats restart ```
-for CloudLinux 7 +for CloudLinux OS Shared 7
@@ -923,6 +776,47 @@ Your Friendly Web Hosting Support Team ```
+:::tip Note +The email template should be in the UTF-8 encoding. The other encodings are not supported. +::: + +Starting from lve-stats v. 3.0.15-1, it allows to localize the words that before were imported directly from the lve-stats program code and couldn't be changed. + +The email template looks like follows: + +``` +Dear {{TONAME}}, +Following accounts experienced issues in the past {{PERIOD}}{% if HOSTNAME is defined %} on host {{HOSTNAME}}{% endif %} + +{{STATS}} + +Sincerely, +Your Friendly Web Hosting Support Team +``` + +Before, the `{TONAME}` was replaced with “Administrator”/”Reseller”/”Customer” according to the type of the addressee. The `{PERIOD}` was replaced with the duration of the period during which the limits faults were detected. The period duration includes the words "days"/"hour"/"minutes"/"seconds". + +In the new version, in order for the lve-stats notifier to include these words in the letter in the language corresponding to the addressee locale, you should create a file for the required locale `/usr/share/lve/emails//locale_defines.json` with the following content: + +``` +{ + "NOTIFY_FROM_SUBJECT": "Your server has lve-stats faults", + "PERIOD": { + "days": "days", "hours": "hour(s)", "minutes": "minutes", "seconds": "seconds" + }, + "TONAME": { + "admin": "Administrator", "reseller": "Reseller", "customer": "Customer" + } +} +``` + +The file format should be JSON, and the file encoding should be UTF-8. If this file is found and successfully read, the words from it will be used in emails. +In case of any file reading/parsing error, a corresponding message will be written in the lve-stats log, and the contents of the file will be completely ignored. +If a key in the JSON file content is missing, then lve-stats notifier uses the word contained in the body of the program (just like in previous lve-stats versions). +Also, this file allows you to override/localize the subject of the email. + +It should be noted that this override of the subject line is the highest priority. I.e., if you want to use the subject from the configuration file `/etc/sysconfig/lvestats.config/StatsNotifier.cfg`, then do not specify the `NOTIFY_FROM_SUBJECT` key in the `locale_defines.json`. + ### Plugins @@ -1595,6 +1489,11 @@ You can also use [LVE-stats 2 CLI](/command-line_tools/#lve-stats-2) There is `/var/log/lve-stats.log` file with additional information (warnings, tracebacks for errors). +To see which letters were sent via lves-tats notifier in the logs, do the following: + +1. In the `/etc/sysconfig/lvestats2`, specify `logging_level=debug`; +2. Execute the `service lvestats restart` command. + ## CageFS ### General information and requirements @@ -1672,7 +1571,30 @@ $ ln -s /home/cagefs-skeleton /usr/share/cagefs-skeleton ```
-::: danger +The commands above should be executed before the `cagefsctl --init`. + +Also, it is needed approximately 4Kb of disk space per one user for the `/var/cagefs` directory. You should place the `/var/cagefs` directory on partition, which is large enough and has disk quota enabled. + +For example, to create the `/var/cagefs` directory on the `/home` partition, execute the following commands before the `cagefsctl --init`: + +
+ +``` +mkdir /home/cagefs +ln -s /home/cagefs /var/cagefs +``` +
+ + +:::danger IMPORTANT +Please make sure to turn on disk quota for a partition where the `/var/cagefs` directory is located, or move the `/var/cagefs` to a partition where disk quota is enabled. This is needed to prevent users from abusing disk quota inside CageFS. +::: + +If the `/var/cagefs` directory is already created, you can move it. How to move the `/var/cagefs` directory: +[https://docs.cloudlinux.com/cloudlinux_os_components/#moving-var-cagefs-directory](https://docs.cloudlinux.com/cloudlinux_os_components/#moving-var-cagefs-directory) + + +::: danger IMPORTANT If you are placing skeleton in `/home` directory on cPanel servers, you must configure the following option in cPanel WHM: **WHM -> Server Configuration -> Basic cPanel/WHM Setup -> Basic Config -> Additional home directories** Change the value to blank (not default Home ). Without changing this option, cPanel will create new accounts in incorrect places. ::: @@ -1812,6 +1734,8 @@ You can also use [CageFS CLI](/command-line_tools/#cagefs) * [Per user virtual mount points](/cloudlinux_os_components/#per-user-virtual-mount-points) * [Split by username](/cloudlinux_os_components/#split-by-username) + + * [Splitted by user’s UID mounts](/cloudlinux_os_components/#splitted-by-user-s-uid-mounts) * [Mounting user’s home directory inside CageFS](/cloudlinux_os_components/#mounting-users-home-directory-inside-cagefs) @@ -1853,6 +1777,8 @@ You can also use [CageFS CLI](/command-line_tools/#cagefs) * [Shared memory (/dev/shm) isolation in CageFS](/cloudlinux_os_components/#shared-memory-dev-shm-isolation-in-cagefs) +* [Preventing process from entering CageFS on error](/cloudlinux_os_components/#preventing-process-from-entering-cagefs-on-error) + #### File system templates @@ -1972,6 +1898,11 @@ And check that the command shows `Disabled`. #### Mount points +:::tip Note +Please do not mount the entire `/var` directory into CageFS (i.e. do not add the `/var` to the `cagefs.mp`). This will break CageFS. +::: + + CageFS creates individual namespace for each user, making it impossible for users to see each other's files and creating high level of isolation. The way namespace is organized: @@ -2125,6 +2056,35 @@ cagefsctl --remount-all After that each subdirectory of _/home/httpd/fcgi-bin_ will be mounted for appropriate user in CageFS: _/home/httpd/fcgi-bin/user1_ will be mounted for user1 and _/home/httpd/fcgi-bin/user2_ will be mounted for user2 . +#### Splitted by user’s UID mounts + +:::tip Note +Requires CageFS v.7.4.2-1 and later +::: + +In addition to [splitted by username mounts](/cloudlinux_os_components/#split-by-username), there is an ability to “split” mounts by user’s UID. This feature is useful for systems with non-unique UIDs, i.e. when multiple users have the same UID. + +Using splitted by UID mounts is more preferable over splitted by username mounts, because you can mount the same directory for all users with the same UID. Also, splitted by UID mounts work fine with renaming of the users (when username changes but UID remains the same). + +For example if you have a directory structure like the following: + +``` +/data/uids/1000/data.db +/data/uids/1001/data.db +``` + +Then you can add the following line to the `/etc/cagefs/cagefs.mp` file: + +``` +*/data/uids +and execute +cagefsctl --remount-all +``` + +After that each subdirectory of the `/data/uids` will be mounted for the appropriate user in CageFS. The `/data/uids/1000` directory will be mounted for the user with UID 1000 and the `/data/uids/1001` directory will be mounted for the user with UID 1001. + + + #### **Mounting users home directory inside CageFS** @@ -2233,9 +2193,9 @@ You should execute `cagefsctl --remount-all` #### PostgreSQL support -CloudLinux 7: +CloudLinux OS Shared 7: -CageFS works with any PostgreSQL version installed from CloudLinux or CentOS repositories. PostgreSQL packages for CloudLinux 7 come from the upstream (CentOS) unmodified. PostgreSQL’s socket is located in _/var/run/postgresql_ directory. This directory is mounted to CageFS by default (in cagefs-5.5-6.34 or later). +CageFS works with any PostgreSQL version installed from CloudLinux OS Shared or CentOS repositories. PostgreSQL packages for CloudLinux OS Shared 7 come from the upstream (CentOS) unmodified. PostgreSQL’s socket is located in _/var/run/postgresql_ directory. This directory is mounted to CageFS by default (in cagefs-5.5-6.34 or later). When PostgreSQL has been installed after CageFS install, please add line:
@@ -2255,11 +2215,11 @@ cagefsctl --remount-all The steps above are enough to configure CageFS to work with PostgreSQL. -CloudLinux 6: +CloudLinux OS Shared 6: CageFS provides separate _/tmp_ directory for each end user. Yet, PostgreSQL keeps its Unix domain socket inside server's main _/tmp_ directory. In addition to that, the location is hard coded inside PostgreSQL libraries. -To resolve the issue, CloudLinux provides a version of PostgreSQL with modified start up script that can store PostgreSQL's socket in _/var/run/postgres._ The script automatically creates link from _/tmp_ to that socket to prevent PostgreSQL dependent applications from breaking. +To resolve the issue, CloudLinux OS Shared provides a version of PostgreSQL with modified start up script that can store PostgreSQL's socket in _/var/run/postgres._ The script automatically creates link from _/tmp_ to that socket to prevent PostgreSQL dependent applications from breaking. In addition to that, CageFS knows how to correctly link this socket inside end user's _/tmp_ directory. @@ -2401,7 +2361,32 @@ If the path to the program being executed does not match any path specified in t * You cannot specify both white and black list (`allow` and `deny`). It is possible to verify that a path specified as a parameter for an option does not refer outside of the user’s home directory. This check is performed for options specified in the `restrict_path` list. All issues are reported in `/var/log/secure` log file. + +> NOTE: By default, option filters only compare the starting parts of arguments with entries specified by lists. +For instance, if option "-f" is forbidden, "-f /etc/list" will be forbidden, but "-vf /etc/list" will not. + +Starting from cagefs v. #7.4.12-1, specifying a `"strict_options": true` switch inside a filter file entry enables an extended parsing mechanism where each short option from a cluster is parsed separately. +It is recommended to enable this option, unless it causes issues with the restricted command's functionality. + +
+ +``` +{ + "default": { + "deny": [ + "-be", + "-bem" + ], + "restrict_path": [ + "-C", + "-D" + ], + "strict_options": true + } +} +``` +
#### Executing by proxy @@ -2767,31 +2752,7 @@ $ cagefsctl --init ```
-2. If _/usr/share/cagefs-skeleton_ already exists: - -
- -``` -$ cagefsctl --disable-cagefs -$ cagefsctl --unmount-all -# To ensure that the following command prints empty output: -$ cat /proc/mounts | grep cagefs -# if you see any cagefs entries, execute "cagefsctl --unmount-all" again. -$ mv /usr/share/cagefs-skeleton /home/cagefs-skeleton -$ ln -s /home/cagefs-skeleton /usr/share/cagefs-skeleton -$ cagefsctl --enable-cagefs -``` -
- -On cPanel servers, if you place skeleton into `/home` directory, then you should configure the following option: - -In _cPanel WHM_ choose _Server Configuration_ and go to _Basic cPanel/WHM Setup_ , then in _Basic Config_ change _Additional home directories_ default value to blank (not "home" ). - -::: tip Note -If this option is not set, then cPanel will create new accounts in incorrect places. -::: - - +2. If _/usr/share/cagefs-skeleton_ already exists, see [this article](https://cloudlinux.zendesk.com/hc/en-us/articles/115004560129-How-do-I-move-usr-share-cagefs-skeleton-to-other-place-because-of-low-disk-space) #### Moving /var/cagefs directory @@ -2879,7 +2840,7 @@ After that directories `/dir1` and `$USER_HOME/.cagefs/dir1` and `$USER_HOME/.cagefs/dir2`. -**Cleanup PHP sessions** +**Cleanup PHP sessions in cPanel** For cPanel servers, CageFS version 6.0-42 or higher performs cleaning of PHP sessions based on `session.gc_maxlifetime` and `session.save_path` directives specified in proper `php.ini` files. @@ -2903,12 +2864,16 @@ This applies to the following Alt-PHP version * alt-php71-7.1.9-5; * alt-php72-7.2.0-0.rc.2.2. -When using EasyApache 3, _session.save_path_ value is normally _/var/cpanel/php/sessions/ea3_ or _/tmp_ . Seettings for EasyApache 3 are usualy taken from the file _/usr/local/lib/php.ini_ . +When using EasyApache 3, _session.save_path_ value is normally _/var/cpanel/php/sessions/ea3_ or _/tmp_ . Settings for EasyApache 3 are usualy taken from the file _/usr/local/lib/php.ini_ . When using EasyApache 4, _session.save_path_ value is normally _/var/cpanel/php/sessions/ea-phpXX_ , where _XX_ corresponds to PHP version. Cleaning is started by cron _/etc/cron.d/cpanel_php_sessions_cron_ , which starts the script _/usr/share/cagefs/clean_user_php_sessions_ twice within one hour. +::: tip Note +Script _clean_user_php_sessions_ deletes only files which names match mask `sess_[a-z0-9]*`. If php was configured to use non-standart session file prefix in some custom save_handler, these session files wouldn't be managed by _clean_user_php_sessions_ . +::: + The settings for ea-php are located in _/opt/cpanel/ea-phpXX/root/etc/php.d/local.ini_ or in _/opt/cpanel/ea-phpXX/root/etc/php.ini_ , where _XX_ corresponds to the PHP version. The settings for alt-php are located in _/opt/alt/phpXX/etc/php.ini_ files, where _XX_ corresponds to PHP version. @@ -3105,6 +3070,27 @@ you should specify `mode=0777`. It is required for the proper operation of share when the size of the `/dev/shm` is specified in percentage of user’s physical memory limit (PMEM), you should remount CageFS after changing PMEM limit in order to change the size of shared memory allocated for the `/dev/shm` in user’s CageFS. To do so, execute `cagefsctl --remount-all` ::: +#### Preventing process from entering CageFS on error + +Starting from CageFS v.7.2.0-1, you can prevent a process from work if it can't enter to CageFS. The option is disabled by default. + +To enable it, run the following commands: + +``` +touch /etc/cagefs/fail.on.error +cagefsctl --remount-all (cagefsctl --remount ) +``` + +To disable it, run the following commands: + +``` +rm -f /etc/cagefs/fail.on.error +cagefsctl --remount-all (cagefsctl --remount ) +``` + +The message “Act like CageFS is disabled” in the `/var/log/messages` will be displayed regardless the file `/etc/cagefs/fail.on.error` is available or not. + + ### Integration with control panels * [cPanel](/cloudlinux_os_components/#cpanel) @@ -3168,17 +3154,24 @@ Or you can manage global CageFS settings via CageFS menu See also [CageFS CLI tools](/command-line_tools/#cagefs). ## MySQL Governor + ### General information and requirements :::tip Note MySQL Governor 0.8-32+ ::: +:::warning Warning +The "All" mode will be deprecated starting from September 1, 2021. You can read more [here.](https://blog.cloudlinux.com/mysql-governor-moving-from-all-to-abusers) +::: + MySQL Governor is software to monitor and restrict MySQL usage in shared hosting environment. The monitoring is done via resource usage statistics per each MySQL thread. - MySQL Governor can also kill off slow SELECT queries. + MySQL Governor has two active modes of operations: +* **off** - In this mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage. +* **abusers** - In this mode, once user goes over the limits specified in the MySQL Governor, all customer's queries will execute inside that user's LVE. - MySQL Governor has multiple modes of operations, depending on the configuration. It can work in monitor-only mode, or it can use different throttling scenarious. +More details of the governor operation modes are described in the [Modes of operation](/cloudlinux_os_components/#modes-of-operation) section MySQL Governor allows to restrict customers who use too much resources. It supports following limits: @@ -3190,8 +3183,57 @@ See also [CageFS CLI tools](/command-line_tools/#cagefs). 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 [configuration file](/cloudlinux_os_components/#configuration-and-operation). 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 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 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. +Customers will also be limited to a finite number of concurrent connections, this number is 30 by default and can be changed. This is done so they wouldn't use up all the MySQL connections to the server. MySQL Governor can also kill off slow SELECT queries. + +### MySQL Governor limits interaction with LVE limits + +#### How is interaction between MySQL Governor and LVE organized? + +The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers. + +Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container. +This is how common server resources can be managed. + +#### Why the СPU/IO charts are different for database and LVE usage? + +SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts: + +![](/images/Chart1.png) + +**Blue chart (database)**: + +This is the user’s real IO Database usage which was calculated by MySQL Governor. + +**Green chart (LVE)**: + +This is the user’s IO Database usage which was calculated by lve-stats. + +Also for different types of database load (for example in case, there is a huge amount of shot requests), CPU usage charts for LVE and database can be different. + +Take a look on this chart: + +![](/images/Chart2.png) + +**Blue (database) CPU usage**: + +It is calculated by MYSQL Governor and the value is identical with top/htop values. + +**Green (LVE) CPU usage**: + +It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time. + +#### For what purpose are the IO limits of MySQL Governor used? + +MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded. + +#### How exactly does IO limiting work for MySQL/MariaDB requests? + +There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly. + +Take a look at the next chart. The I/O load is synchronous with the CPU load. + +![](/images/Chart3.png) ### Installation and update @@ -3200,6 +3242,10 @@ When customer is restricted, the customer will be placed into special LVE with I #### Installation +:::danger IMPORTANT +Please note that MariaDB 10.4 release isn’t supported by cPanel, thus you can’t install this version with MySQL Governor + cPanel. More details are available here: [https://features.cpanel.net/topic/maria-10-4-support](https://features.cpanel.net/topic/maria-10-4-support). +::: + ::: danger IMPORTANT Please make full database backup (including system tables) before you upgrade MySQL or switch to MariaDB. This action will prevent data loss in case if something goes wrong. ::: @@ -3220,7 +3266,7 @@ Then configure MySQL Governor properly. The installation is currently supported only on cPanel, Plesk, DirectAdmin, ISPmanager, InterWorx , as well as on servers without control panel. -If you are installing CloudLinux on a server running MySQL already, set your current MySQL version before calling installation script: +If you are installing CloudLinux OS Shared on a server running MySQL already, set your current MySQL version before calling installation script:
@@ -3235,9 +3281,9 @@ Please make sure to specify your current MySQL version instead of XX as follows: * 55 — MySQL v5.5 * 56 — MySQL v5.6 * 57 — MySQL v5.7 -* 80 — MySQL v8.0 [requires MySQL Governor 1.2-37+; database packages are available in Beta only, so, please use `--install-beta` flag instead of `--install` ] +* 80 — MySQL v8.0 (requires MySQL Governor 1.2-37+) -If you are installing CloudLinux on a server running MariaDB already, do instead: +If you are installing CloudLinux OS Shared on a server running MariaDB already, do instead:
@@ -3254,13 +3300,14 @@ Please make sure to specify your current MariaDB MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+] -* 104 – MariaDB v10.4 [requires MySQL Governor 1.2-53+; database packages are available in Beta only, so, please use `--install-beta` flag instead of `--install`] +* 104 – MariaDB v10.4 [requires MySQL Governor 1.2-53+] +* 105 - MariaDB v10.5 [requires MySQL Governor 1.2-62+] +* 106 - MariaDB v10.6 [requires MySQL Governor 1.2-76+] :::tip Note -MariaDB version 10.4 is not available for CloudLinux 6 yet. +MariaDB version 10.4 is not available for CloudLinux OS Shared 6. ::: - Installation for Percona Server 5.6 [requires MySQL Governor 1.1-22+ or 1.2-21+]:
@@ -3272,7 +3319,7 @@ $ /usr/share/lve/dbgovernor/mysqlgovernor.py --install
-Please note that MySQL/MariaDB/Percona will be updated from CloudLinux repositories. +Please note that MySQL/MariaDB/Percona will be updated from CloudLinux OS Shared repositories. If you are installing MySQL Governor on a server without MySQL at all, you have an opportunity to choose desired MySQL version to be installed with MySQL Governor installation script. Use --mysql-version flag before calling the installation script: @@ -3292,13 +3339,15 @@ $ /usr/share/lve/dbgovernor/mysqlgovernor.py --install |mysql55 |MySQL v5.5 | |mysql56 |MySQL v5.6 | |mysql57 |MySQL v5.7 | -|mysql80 |MySQL v8.0 [requires MySQL Governor 1.2-37+; database packages available in beta only, so use --install-beta flag instead of --install] | +|mysql80 |MySQL v8.0 (requires MySQL Governor 1.2-37+)| |mariadb55 |MariaDB v5.5 | |mariadb100 |MariaDB v10.0 | |mariadb101 |MariaDB v10.1 | |mariadb102 |MariaDB v 10.2 | |mariadb103 |MariaDB v 10.3 [requires MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+] | -|mariadb104 |MariaDB v 10.4 [requires MySQL Governor 1.2-53+; database packages are available in Beta only, so use `--install-beta` flag instead of `--install`]| +|mariadb104 |MariaDB v 10.4 [requires MySQL Governor 1.2-53+]| +|mariadb105 |MariaDB v 10.5 [requires MySQL Governor 1.2-62+]| +|mariadb106 |MariaDB v 10.6 [requires MySQL Governor 1.2-76+]| |percona56 | Percona Server v 5.6 | Generally, stable and beta channels contain different version of MySQL packages - beta contains newer version than stable or the same one. If you would like to install beta packages, use --install-beta flag instead of --install when calling installation script: @@ -3335,6 +3384,14 @@ See also [MySQL Governor CLI](/command-line_tools/#mysql-governor) #### Upgrading database server +::: danger Important +Upgrade from MySQL 8 to MariaDB 10.x isn't supported due to compatibility issues between these database server versions and will break your database server completely. You can find more information about the compatibility issues [here](https://mariadb.com/kb/en/upgrading-from-mysql-to-mariadb/) +::: + +:::warning Warning +Please note that DB Governor is capable of upgrading your database to a newer version, including sequential upgrades, but we make no guarantee that such upgrades do not affect the operation of the database, its components, control panel operation and other functions of database. Always create a backup copy of your data. +::: + In order to change MySQL version you should run the following commands:
@@ -3368,13 +3425,20 @@ The script will install original MySQL server, and remove MySQL Governor configuration is located in /etc/container/mysql-governor.xml It is best to modify it using [dbctl](/command-line_tools/#dbctl) tool. @@ -3456,6 +3520,7 @@ user_max_connections="30"/> + @@ -3480,23 +3545,75 @@ These values can also be set using [cloudlinux-config](/command-line_tools/#clou #### Modes of operation -:::tip Note -MySQL Governor 1.0+ + +:::warning Warning +The "All" mode will be deprecated starting from September 1, 2021. You can read more [here.](https://blog.cloudlinux.com/mysql-governor-moving-from-all-to-abusers) ::: - MySQL Governor has multiple modes of operation. Some of them are experimental at this moment. -Mode: - **off -- Monitor Only** : In this mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage to see the abusers at any given moment in time (and historically). This mode is good when you are just starting and want to see what is going on - **single -- Single restricted's LVE for all restricted customers (deprecated)** : In that mode once customer reaches the limits specified in the MySQL Governor , all customer's queries will be running inside LVE with id 3. This means that when you have 5 customers restricted at the same time, all queries for all those 5 customers will be sharing the same LVE. The larger the number of restricted customers - the less resources per restricted customer will be available - **abusers - Use LVE for a user to restrict queries (default mode)** : In that mode, once user goes over the limits specified in the MySQL Governor , all customer's queries will execute inside that user's LVE. We believe this mode will help with the condition when the site is still fast, but MySQL is slow (restricted) for that user. If someone abuses MySQL, it will cause queries to share LVE with PHP processes, and PHP processes will also be throttled, causing fewer new queries being sent to MySQL. _Requires_ _dbuser-map_ _file_ - **all - Always run queries inside user's LVE** : This way there is no need for separate limits for MySQL. Depending on overhead we see in the future, we might decide to use it as a primary way of operating MySQL Governor . The benefit of this approach is that limits are applied to both PHP & MySQL at the same time, all the time, preventing any spikes whatsoever. _Requires_ _dbuser-map_ _file_ +:::tip Note +MySQL Governor 1.0+ +::: + +**Active modes** + +* **abusers - Use LVE for a user to restrict queries (default mode)**: In that mode, once user goes over the limits specified in the MySQL Governor , all customer's queries will execute inside that user's LVE. We believe this mode will help with the condition when the site is still fast, but MySQL is slow (restricted) for that user. If someone abuses MySQL, it will cause queries to share LVE with PHP processes, and PHP processes will also be throttled, causing fewer new queries being sent to MySQL. _Requires [`dbuser-map` file](/cloudlinux_os_components/#mapping-a-user-to-a-database)_. +* **off - Monitor Only**: In that mode MySQL Governor will not throttle customer's queries, instead it will let you monitor the MySQL usage to see the abusers at any given moment in time (and historically). This mode is good when you are just starting and want to see what is going on. + +--- + +**Deprecated modes** + +* **all - Always run queries inside user's LVE (will be deprecated on September 1, 2021)**: This way there is no need for separate limits for MySQL. Depending on overhead we see in the future, we might decide to use it as a primary way of operating MySQL Governor . The benefit of this approach is that limits are applied to both PHP & MySQL at the same time, all the time, preventing any spikes whatsoever. _Requires [`dbuser-map` file](/cloudlinux_os_components/#mapping-a-user-to-a-database)_. +* **single - Single restricted's LVE for all restricted customers (deprecated)**: In that mode once customer reaches the limits specified in the MySQL Governor , all customer's queries will be running inside LVE with id 3. This means that when you have 5 customers restricted at the same time, all queries for all those 5 customers will be sharing the same LVE. The larger the number of restricted customers - the less resources per restricted customer will be available. +* **on** - Synonym for **single** mode + +:::warning Note +After the `all` mode will be deprecated on September 1, 2021: +* the users, having it, will continue to work with this mode; +* all new installation will not have the `all` mode; +* moving to the `all` mode will be forbidden. +::: + +If the `dbuser-map` file is absent on the server, the `abusers` mode emulates the `single`. + +With the `single` and `abusers` mode, once user is restricted, the queries for that user will be limited as long as user is using more than limits specified. After a minute that user is using less, we will unrestricted that user. + +You can specify modes of operation using [dbctl](/command-line_tools/#dbctl) or by changing [configuration file](/cloudlinux_os_components/#configuration-3). + +#### MySQL Governor limits + +**MySQL Governor limit setting recommendations** + +:::tip Note +Please note that these recommendations on setting limits for MySQL Governor are general. The exact values of the limits for the effective work of MySQL and the site as a whole depend on many factors. +::: + +Here they are: + +* the load of the virtual server with incoming requests +* the database size +* SQL queries efficiency +* absolute values of the LVE limits + + +MySQL Governor allows setting the burstable limits for accounts. To provide that possibility, four levels of limits are defined: `current`, `short`, `middle`, and `long`. Correctly set limits can give users more CPU without having a bottleneck on MySQL. -If dbuser-map file is absent on the server, " abusers " mode emulates " single ". +**General principles of choosing the limits**: -With **single** and **abusers** mode, once user is restricted, the queries for that user will be limited as long as user is using more than limits specified. After a minute that user is using less, we will unrestricted that user. +* `current` and `short` can be more than the LVE limit and should not be less +* setting the `current` and `short` limits more than the LVE limit prevents bottlenecks in SQL request processing +* `middle` limit can be more or less that the LVE limit +* `long` on the contrary, should not be more than the LVE limit +* setting the `middle` and `long` limits less than the LVE limit prevents abuse of other processes in the account (Apache, PHP) by MySQL + +**Example of choosing MySQL Governor limits** + +* With the default LVE SPEED limit is `100`, the possible values of the MySQL Governor CPU limits can be 250/150/110/90. I.e., we admit the short-term exceeding of the limits for processing SQL requests. +* If you face spike CPU consumption with these limits, it is recommended to reduce the excess of the `current` and `short` limits over the LVE limit. For example, to the values 150/110/100/90. +* If the average level of CPU consumption is too high, then it is recommended to reduce the `middle` and `long` limits, too. For example, to the values 150/100/80/50. +* Then MySQL processes will fall into LVE and be limited by LVE limits more often. +* The same clues are applicable to the IO limits – the `current` and `short` IO limits for MySQL Governor can exceed IO LVE limits, but the `middle` and `long` cannot. -You can specify modes of operation using [dbctl](/command-line_tools/#dbctl) or by changing [configuration file](/cloudlinux_os_components/#configuration-3). - dbuser-map file is located in `/etc/container/dbuser-map`. #### Starting and stopping @@ -3522,8 +3639,22 @@ $ service db_governor stop **[** **MySQL Governor** **1.x]** Traditionally MySQL Governor used prefixes to map user to database. With the latest version, we automatically generate user -> database user mapping for cPanel , Plesk and DirectAdmin control panels. + +The mapping file is recreated daily by cron. + +Mapping recreation is also triggered by the following events on cPanel servers: + +* creation of user +* modification of user +* removal of user + +You can also rebuild the mapping file manually on cPanel, Plesk and DirectAdmin control panels by running the following command: + +``` +/usr/share/lve/dbgovernor/mysqlgovernor.py --dbupdate +``` -The mapping file is located in: /etc/container/dbuser-map +The mapping file is located in: `/etc/container/dbuser-map` The format of the file:
@@ -3551,12 +3682,12 @@ pupkin3a_12 pupkin3a 506 ```
-This would specify that db users: pupkinas_us2, pupkinas_u1, pupkinas_u3 belong to user pupkinas with uid (lve id) 502 +This would specify that db users: pupkinas_u2, pupkinas_u1, pupkinas_u3 belong to user pupkinas with uid (lve id) 502 db user pupkin2a_uuu1 belongs to user pupkin2a with uid 505, etc... + +`db_governor` service checks this file for modifications every 5 minutes. -This file is checked for modifications every 5 minutes. - -If you need to force reload of that file, run: +If you need to force reload the mapping file, run:
``` @@ -3589,6 +3720,10 @@ _timestamp_ _username_ LIMIT_ENFORCED _limit_setting_ __current_value_ * TRACKED_VALUES_DUMP is available with MEDIUM & LONG format * SERVER_LOAD is available with LONG format + **Kill_log** + + MySQL Governor kill log is optional log located in the /var/log/dbgovernor-kill.log. Kill log is used to track all killed queries + #### Change MySQL version @@ -3629,13 +3764,13 @@ $ /usr/share/lve/dbgovernor/mysqlgovernor.py --install-beta |mysql55 | MySQL v5.5| |mysql56 | MySQL v5.6| |mysql57 | MySQL v5.7| -|mysql80 | MySQL v8.0 [requires MySQL Governor 1.2-37+; database packages are available in Beta only, so, please use `--install-beta` flag instead of ` --install` ]| +|mysql80 | MySQL v8.0 (requires MySQL Governor 1.2-37+)| |mariadb55 | MariaDB v5.5| |mariadb100 | MariaDB v10.0| |mariadb101 | MariaDB v10.1| |mariadb102 | MariaDB v 10.2| |mariadb103 | MariaDB v 10.3 [requires MySQL Governor 1.2-36+; for cPanel - MySQL Governor 1.2-41+ ]| -|mariadb104 |MariaDB v 10.4 [requires MySQL Governor 1.2-53+; database packages are available in Beta only, so use `--install-beta` flag instead of `--install`]|| +|mariadb104 |MariaDB v 10.4 [requires MySQL Governor 1.2-53+]|| |percona56 | Percona v 5.6| * We don't recommend to downgrade from MySQL v5.6, MariaDB 10.x @@ -3646,24 +3781,40 @@ cPanel does not officially support MariaDB 10.4, that is why we don’t recommen ::: :::tip Note -MariaDB version 10.4 is not available for CloudLinux 6 yet. +MariaDB version 10.4 is not available for CloudLinux OS Shared 6 yet. ::: -::: tip Note -Starting from cPanel & WHM version 70, cPanel supports MySQL 5.7: https://blog.cpanel.com/being-a-good-open-source-community-member-why-we-hesitated-on-mysql-5-7/ +:::tip Note +See also MySQL Governor [CLI](/command-line_tools/#mysql-governor) ::: -::: tip Note -Starting from cPanel & WHM version 78, cPanel supports MariaDB 10.3: https://documentation.cpanel.net/display/78Docs/MySQL+or+MariaDB+Upgrade -::: +#### PrivateDevices mode support -::: tip Note -cPanel does not officially support MySQL 8.0, that is why we don’t recommend to use it on cPanel servers. Use on your own risk for DirectAdmin and Plesk servers, because downgrade can corrupt your databases. -::: +MySQL Governor v. 1.2-66 and later on Cloudlinux OS Shared 7 and 8 supports the PrivateDevices mode for the mysqld service. -:::tip Note -See also MySQL Governor [CLI](/command-line_tools/#mysql-governor) -::: +To switch on the PrivateDevices mode, follow these steps. + +**On Cloudlinux OS Shared 7** + +* Make sure that the systemd version is at least **219-78.2.cloudlinux.1** +* Add the following instruction into the _Service_ section of the _mysqld_ service file: + ``` + PrivateDevices=true + ``` +* Invoke `systemctl daemon-reload` +* Restart _mysqld_ service + + +**On Cloudlinux OS Shared 8** + +* Add the following instructions into the _Service_ section of the _mysqld_ service file: + ``` + PrivateDevices=true + DeviceAllow=/dev/lve + BindPaths=/dev/lve + ``` +* Invoke `systemctl daemon-reload` +* Restart _mysqld_ service ### Backing up MySQL @@ -3703,6 +3854,90 @@ This operation may take some time. See also [MySQL Governor CLI tools](/command-line_tools/#mysql-governor). +### MySQL Governor improvements for CPU calculation + +In MySQL Governor version 1.2-81, we provide improvements in the algorithm of calculation user CPU usage. New behavior helps to increase precision of resource distribution between server users. By default the new type of CPU usage calculation is tuned on. + +Server administrator can turn on/off the new type of CPU usage calculation by using the following command: + +``` +dbctl --lve-improved-accuracy off +``` + +#### What is the impact of improvements? + +The calculation of CPU usage has become more accurate, so the `dbtop` utility provides more correct information to the MySQL Governor and it places user’s requests to the LVE in a proper moment. And as a result, such improvements reduce the possibility of absorbing whole server resources by one user. + +One mpre possible outcome of calculation improvements is that some server users will become in need of MySQL Governor limits reconfiguration. + +#### How to view the impact of improvements? + +Let’s check the CPU usage charts from CloudLinux statistics (lve-stats). + +**The new type of  CPU usage calculation is turned off**. + +In this case, CPU usage by database could be less than LVE average CPU usage (blue chart is lower than green chart): + +![](/images/NewTurnedOff.png) + +**The new type of  CPU usage calculation is turned on**. + +In this case, CPU usage by database become more similar to LVE average CPU usage (blue chart and green chart on the sceen): + +![](/images/NewTurnedOn.png) + +### FAQ + +#### How is interaction between MySQL Governor and LVE organized? + +The main purpose of MySQL Governor is to monitor how many common resources are used by each user for working with MySQL/MariaDB and to manage usage restrictions for such resources by LVE containers. + +Before any SQL request, MySQL Governor determines which user sent the request and if this user exceed limits, the MySQL Governor pushes the request to appropriate LVE container. + +This is how common server resources can be managed. + +#### Why the СPU/IO charts are different for database and LVE usage? + +SQL requests are not limited inside LVE, so there are not any calculations for IO usage there. It can be clearly viewed via the lve-stats charts: + +![](/images/Chart1.png) + +**Blue chart (database)**: + +This is the user’s real IO Database usage which was calculated by MySQL Governor. + +**Green chart (LVE)**: + +This is the user’s IO Database usage which was calculated by lve-stats. + +Also for different types of database load (for example in case, there is a huge amount of shot requests), CPU usage charts for LVE and database can be different. + +Take a look on this chart: + +![](/images/Chart2.png) + +**Blue (database) CPU usage**: + +It is calculated by MYSQL Governor and the value is identical with top/htop values. + +**Green (LVE) CPU usage**: + +It is calculated by lve-stats. The values are less on the LVE CPU usage chart because user requests are placed in the LVE only for part of the time. + +#### For what purpose are the IO limits of MySQL Governor used? + +MySQL Governor uses its limits as triggers to place user’s requests to the LVE. If user’s requests exceed MySQL Governor limits they are placed to the LVE, which already limits resource usage. After some timeout (which can be configured in the MySQL Governor config file requests will not be placed to the LVE. The next placing of the SQL requests to the LVE will occur after the next limits are exceeded. + +#### How exactly does IO limiting work for MySQL/MariaDB requests? + +There is no direct IO limitation for database treads. But in case of exceeding governor IO user limits, their requests will be placed into the LVE and CPU LVE limitation will be applied to the requests. And it’s clear that any IO load causes CPU load. So by CPU limits IO usage will be limited indirectly. + +Take a look at the next chart. The I/O load is synchronous with the CPU load. + +![](/images/Chart3.png) + + + ### Troubleshooting **MariaDB 5.5 and MariaDB 10.0: How to set LimitNOFILE correctly for systemd.** @@ -3756,6 +3991,19 @@ The command updates credentials in MySQL GovernorGovernor successfully connects to MySQL. +### Known limitations + +#### I/O LVE limits don't work for user’s SQL queries + +In the MySQL Governor default mode, once users go over the limits, all their SQL queries will execute inside that user's LVE. + +This technique was provided with the early 1.1.5 version of MySQL Governor. + +It turned out that memory limitation for MySQLrequests causes the OOM (Out Of Memory) issues and as a result database corruptions. So, it was decided not to apply LVE memory limits for SQL queries supplied by MySQL Governor. But the internal implementation of LVE is such that I/O and memory limits work together. That’s why the I/O LVE limits do not apply for user’s SQL queries now. + +Nevertheless, SQL queries inside LVE are restricted by CPU limit which indirectly limits I/O usage, too. + + ## PHP Selector ### General information and requirements @@ -3768,7 +4016,7 @@ The main requirements: * CageFS is initialized without errors * CageFS is enabled for a domain user-owner * An appropriate PHP handler is selected for PHP version which is system version. PHP Selector is **compatible** with the following technologies: _suPHP, mod_fcgid, CGI (suexec), LiteSpeed_. See also [Compatibility Matrix](/limits/#compatibility-matrix). -* PHP version in the CloudLinux PHP selector does not equal to the Native PHP version +* PHP version in the CloudLinux OS Shared PHP selector does not equal to the Native PHP version ::: tip Note PHP Selector is not supported for H-Sphere. @@ -3952,36 +4200,57 @@ Go to cPanel Admin interface → MultiPhp Manager → ### LiteSpeed support ::: tip Note -LiteSpeed detects CloudLinux OS and applies all settings out-of-the-box. +LiteSpeed detects CloudLinux OS Shared and applies all settings out-of-the-box. +::: + +:::tip Note +If your LiteSpeed is installed to a non-standard, custom location path, create a symlink: `ln -s /path/to/custom/lsws /usr/local/lsws` then run `cagefsctl --setup-cl-selector`. ::: If the settings were not applied, you can use the following steps to set up LiteSpeed to use PHP Selector. -**How to set up LiteSpeed version lower than 5.3 to use PHP Selector** +1. Follow PHP Selector [installation guide](/cloudlinux_os_components/#installation-and-update-4). +2. Make sure the following settings are set in the LSWS Web Admin console: + * Configuration ➞ Server ➞ General ➞ CloudLinux OS Shared: `CageFS` or `CageFS without suEXEC` + * Configuration ➞ Server ➞ General ➞ PHP suEXEC: `Yes` -To enable PHP Selector with LiteSpeed Web Server follow PHP Selector [installation guide](/cloudlinux_os_components/#installation-and-update-4) , and then adjust following settings in LiteSpeed : +**How to set up LiteSpeed version 5.3+ to use PHP Selector** -1. CloudLinux (Admin Console | Configuration | Server | General): CageFS -2. Enable SuExec: Server | General | PHP SuEXEC | Yes -3. Go to _External App_ tab, the new **lsphp_selector** is here. +**For Plesk** -:::tip Note -You can select any other application or create a custom one. -::: +![](/images/LiteSpeedForPlesk.png) + +**For other control panels** + +![](/images/LiteSpeedForOtherCP.png) + +Additionally, we recommend setting up the following parameters: -![](/images/litespeed1_zoom70.png) +* Configuration ➞ Server ➞ PHP: +* Click _Edit_ in the PHP Handler Defaults section +* Set _Yes_ in the _Run On Startup_ +* Make sure to set _Max Idle Time_ (for example to 140) -4. The _Command_ line should be **/var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper** on Plesk . For other control panels, _Command_ line should be **/usr/local/bin/lsphp** . +![](/images/LiteSpeedAdditionSettings.png) - _Run On Start Up_ line must contain **Yes** or **No** . +**How to set up LiteSpeed version lower than 5.3 to use PHP Selector** + +Go to the _External App_ tab, _External Application_ ➞ Add. + +![](/images/LiteSpeedExternalAppTab.png) -For Plesk: +* The _Command line_ should be `/var/www/cgi-bin/cgi_wrapper/cloudlinux_wrapper` on Plesk. +* For other control panels, the _Command line_ should be `/usr/local/bin/lsphp`. +* The _Run On Start Up_ line must contain `Yes` or `No`. -![](/images/litespeed3_zoom70.png) +**For Plesk** -For other control panels: +![](/images/LiteSpeedPlesk.png) + +**For other control panels** + +![](/images/LiteSpeedOtherCP.png) -![](/images/litespeed2_zoom70.png) Settings in text format: @@ -4012,33 +4281,21 @@ Settings in text format: |Process Soft Limit|`400`| |Process Hard Limit|`500`| -1. Go to _Script Handler_ tab. For required suffixes change the _Handler Name_ to **lsphp_selector** . - -![](/images/litespeed4_zoom70.png) +Go to the _Script Handler_ tab. For required suffixes, change the _Handler Name_ to `lsphp_selector`. +![](/images/LiteSpeedHandlerName.png) -![](/images/litespeed5_zoom70.png) -**Additional settings for LiteSpeed version 5.3 +** +![](/images/LiteSpeedScriptHandler.png) -Go to Server --> PHP tab. Click _Edit_ in the _PHP Handler Defaults_ section. We recommend to set up the following settings: - -* Set _Yes_ in the _Run On Startup_ -* Make sure to set _Max Idle Time_ - -![](/images/litespeed_4_zoom70.png) - -::: tip Note -In order to use PHP Selector and custom php.ini, lsphp5 needs to be in SuEXEC non-daemon mode. +:::tip Note +In order to use PHP Selector and custom php.ini, lsphp5 needs to be in SuEXEC non-daemon mode. ::: -::: tip Note -Some PHP configurations require more memory for SuExec to work properly. If you are getting error 500 after switching suEXEC to non-daemon mode, try to increase Memory Soft Limit and Memory Hard Limit for external App to at least 650/800M. +:::tip Note +Some PHP configurations require more memory for SuExec to work properly. If you are getting error 500 after switching suEXEC to non-daemon mode, try to increase Memory Soft Limit and Memory Hard Limit for external App to at least 650/800M. ::: -::: tip Note -If you have LiteSpeed installed not in standard location path, please create a symlink: 'ln -s /path/to/custom/lsws /usr/local/lsws' then run 'cagefsctl --setup-cl-selector'. -::: ### ISPmanager support @@ -4122,6 +4379,10 @@ cagefsctl --cl-selector-reset-modules These commands can affect PHP version of your clients’ web sites. Use them with caution as improper usage might cause your clients’ web sites down. ::: +:::tip Note +It is possible to manually uninstall the integral parts of PHP Selector - **alt-php** packages. However, since CloudLinux OS components heavily rely on them, we do not recommend doing so. Proceed with caution and keep an eye on yum dependencies if you decide to uninstall the packages. +::: + #### Disabling PHP extension globally If you want to disable PHP extension globally, you don't need to remove file /opt/alt/phpXX/etc/php.d.all/$EXTENSION.ini . You should just comment out "extension=" directives in it. @@ -4154,7 +4415,7 @@ Reinstalling of `alt-php` packages will not res #### Setting default version and modules -Administrator can set default interpreter version and extensions for all users. All file operations are actually done by CageFS. CageFS takes settings from /etc/cl.selector/defaults.cfg. Currently the /etc/cl.selector/defaults.cfg is created and handled by CloudLinux PHP Selector scripts. It has the following format: +Administrator can set default interpreter version and extensions for all users. All file operations are actually done by CageFS. CageFS takes settings from /etc/cl.selector/defaults.cfg. Currently the /etc/cl.selector/defaults.cfg is created and handled by CloudLinux OS Shared PHP Selector scripts. It has the following format:
``` @@ -4297,7 +4558,7 @@ to apply changes to CageFS for specific users. #### How to substitute global php.ini for individual customer on cPanel server with EasyApache4 :::tip Note -It is enough to put `php.ini` in the directory where PHP script is located in order to run the PHP script with a custom `php.ini` when using SuPHP. Also, you can use cPanel MultiPHP Manager to create user’s custom `php.ini` file, and this approach should work for CGI, FCGI, and LSAPI. Recommended ways to manage `php.ini` settings per user are to use cPanel MultiPHP or CloudLinux PHP Selector interfaces. +It is enough to put `php.ini` in the directory where PHP script is located in order to run the PHP script with a custom `php.ini` when using SuPHP. Also, you can use cPanel MultiPHP Manager to create user’s custom `php.ini` file, and this approach should work for CGI, FCGI, and LSAPI. Recommended ways to manage `php.ini` settings per user are to use cPanel MultiPHP or CloudLinux OS Shared PHP Selector interfaces. ::: 1. For each user that needs custom file, create directory `/etc/cagefs/custom.etc/USER_NAME/php.ini`. @@ -4343,10 +4604,10 @@ It is enough to put `php.ini` in the directory where PHP script is located in or **Notes:** 1. You should restart Apache web server after modifying virtual host configuration for the domains. -2. Custom `php.ini` may break switching PHP version via CloudLinux PHP Selector or cPanel MultiPHP Manager for the appropriate users or domains. +2. Custom `php.ini` may break switching PHP version via CloudLinux OS Shared PHP Selector or cPanel MultiPHP Manager for the appropriate users or domains. 3. When using cPanel ea-php for the domains, additional `php.ini` files may not be loaded, so you should load all needed PHP extensions in custom `/etc/php.ini` file: ![](/images/custom_file_cPanel1.png) -4. When using CloudLinux alt-php, additional `php.ini` files will be loaded: +4. When using CloudLinux OS Shared alt-php, additional `php.ini` files will be loaded: ![](/images/custom_file_cPanel2.png) 5. If you have modified anything in `/etc/cagefs/custom.etc` directory, you should execute one of the following: @@ -4402,7 +4663,7 @@ Once PHP Selector is enabled, you can find it **Configuring Alt-PHP modules loading** - CloudLinux PHP Selector and Alt-PHP can be used in conjunction with Plesk PHP Selector and cPanel MultiPHP . To be compatible, CloudLinux PHP Selector works as follows: modules that are selected in CloudLinux PHP Selector are loaded for Alt-PHP version selected in CloudLinux PHP Selector only. For the rest Alt-PHP versions default module set is loaded ( _/opt/alt/phpXX/etc/php.d/default.ini_ ) . Described above is default behavior. + CloudLinux OS Shared PHP Selector and Alt-PHP can be used in conjunction with Plesk PHP Selector and cPanel MultiPHP . To be compatible, CloudLinux OS Shared PHP Selector works as follows: modules that are selected in CloudLinux OS Shared PHP Selector are loaded for Alt-PHP version selected in CloudLinux OS Shared PHP Selector only. For the rest Alt-PHP versions default module set is loaded ( _/opt/alt/phpXX/etc/php.d/default.ini_ ) . Described above is default behavior. ::: tip Note If system default PHP version selected in cPanel MultiPHP Manager is not ea-php, then default module set is loaded for all Alt-PHP versions by default (/opt/alt/phpXX/etc/php.d/default.ini). @@ -4413,7 +4674,7 @@ When "php.d.location = selector" option is in effect, This behavior is implemented in CageFS-6.1-10 and later. -In LVE Manager 1.0-9.40+ this behavior can be modified so that modules selected in CloudLinux PHP Selector would be loaded for all Alt-PHP versions (with CageFS enabled), which can be quite useful if you use  ‘ per directory ’ or ‘ per domain ’ Alt-PHP configuration and want to select modules using CloudLinux PHP Selector . +In LVE Manager 1.0-9.40+ this behavior can be modified so that modules selected in CloudLinux OS Shared PHP Selector would be loaded for all Alt-PHP versions (with CageFS enabled), which can be quite useful if you use  ‘ per directory ’ or ‘ per domain ’ Alt-PHP configuration and want to select modules using CloudLinux OS Shared PHP Selector . To modify it, create a file _/etc/cl.selector/symlinks.rules_ (read-only for regular users) with the following content: _php.d.location = selector_ @@ -4440,9 +4701,13 @@ And run the command to apply changes: #### FFmpeg -Due to possible patent issues CloudLinux does not provide FFmpeg libraries ( [https://ffmpeg.org/legal.html](https://ffmpeg.org/legal.html) ). We highly recommend researching if you can legally install FFmpeg extension on your server. This might differ based on where you and your servers are located. More information can be found on the link: [https://ffmpeg.org/legal.html](https://ffmpeg.org/legal.html) +:::tip Note +The PHP-FFmpeg project has not been renewed for the last few years and is not compatible with the RHEL 8 based systems. Since code for alt-PHP-FFmpeg is outdated and FFmpeg has a lot of third-party dependencies, this module is not available for CloudLinux OS Shared 8. +::: + +Due to possible patent issues CloudLinux OS Shared does not provide FFmpeg libraries ( [https://ffmpeg.org/legal.html](https://ffmpeg.org/legal.html) ). We highly recommend researching if you can legally install FFmpeg extension on your server. This might differ based on where you and your servers are located. More information can be found on the link: [https://ffmpeg.org/legal.html](https://ffmpeg.org/legal.html) -For your convenience we provide FFMPEG PHP binding. For them to work, you need to install FFmpeg package from the “ Nux Dextop ” repository following the [instructions](http://li.nux.ro/repos.html). +For your convenience we provide FFMPEG PHP binding. For them to work, you need to install FFmpeg package from the “Nux Dextop” repository following the [instructions](http://li.nux.ro/repos.html). Once FFmpeg is installed you can install PHP bindings, by running:
@@ -4603,43 +4868,21 @@ And replace them with the lines with the new paths: #### Using -Once PHP Selector is installed, you will see the **Selector** tab in the **LVE Manager**. - -![](/images/php_selector.png) - - PHP Selector lets you select default PHP version, as well as modules that will be available to user out of the box. - +Once PHP Selector is installed, you will see the [**Selector**](/lve_manager/#selector-tab) tab in the **LVE Manager**. -Inside cPanel , User will be able to change PHP version they would have: - -![](/images/php_selector_user.png) - -as well as extensions that they want to use: - -![](/images/php_selector_customer.png) - -and php.ini settings - -![](/images/php_selector_options.png) - -All changes are saved automatically. +Customers can use [PHP Selector client plugin](/lve_manager/#php-selector-client-plugin) to change their PHP Selctor related settings. #### Custom PHP.ini options -:::tip Note -Requires LVE Manager 0.6+ -::: - PHP Selector allows customer to edit php.ini settings. Admin has a full control over which settings can be modified. -To allow settings to be modifiable, it has to be whitelisted in /etc/cl.selector/php.conf . +To allow settings to be modifiable, it has to be whitelisted in `/etc/cl.selector/php.conf`. Here are some of the examples of allowed directives:
``` Directive = safe_mode -Default = Off Type = bool Remark = <5.4.0 Comment = Enables PHP safe mode. This mode puts a number of restrictions on scripts (say, access to file system) mainly for security reasons. @@ -4659,13 +4902,12 @@ Comment = If PHP is in the safe mode and a script tries to access some files, | | | |-|-| |Directive | php.ini setting| -|Default | Default value| |Type | bool, value (any text), list| |Range | list of values for list Type| |Comment | explanation of the setting to display in UI| Default values, that are shown in PHP Selector web interface, are taken from '/opt/alt/phpXX/usr/bin/php -i' runtime values, if -directive is not there, it will use ' default ' value that was set in php.conf . So, if you wish to change default value of any option for +directive is not there, it will use the output of phpinfo() function. So, if you wish to change default value of any option for "alternative" php version, please modify /opt/alt/phpXX/etc/php.ini files (where XX = 55, 54, 53, etc according to php version). Admin can modify the settings using [selectorctl](/command-line_tools/#selectorctl) command. @@ -4753,7 +4995,7 @@ $ cagefsctl --setup-cl-selector To add your own PHP version in PHP Selector : -* Create directory in (like: /opt/alt/php51), and mimic directory structure inside to be similar to the one of PHP versions bundled by CloudLinux . +* Create directory in (like: /opt/alt/php51), and mimic directory structure inside to be similar to the one of PHP versions bundled by CloudLinux OS Shared. * Put all the ini files for all the modules into /opt/alt/php51/etc/php.d.all * Create a symbolic link /opt/alt/php51/etc/php.d -> /etc/cl.php.d/alt-php51 @@ -5133,7 +5375,7 @@ Result:
+: enabled -~: included in php binary (cannot be disabled) +~: included in php binary (cannot be disabled) or enabled in php global config file _/opt/alt/phpXX/etc/php.ini_ -: disabled **Select default extensions (enable comma-separated list of extensions globally for a version):** @@ -5265,6 +5507,9 @@ Large number of PHP extensions are bundled with each version of PHP. * [PHP 7.2 extensions](/cloudlinux_os_components/#php-7-2-extensions) * [PHP 7.3 extensions](/cloudlinux_os_components/#php-7-3-extensions) * [PHP 7.4 extensions](/cloudlinux_os_components/#php-7-4-extensions) +* [PHP 8.0 extensions](/cloudlinux_os_components/#php-8-0-extensions) +* [PHP 8.1 extensions](/cloudlinux_os_components/#php-8-1-extensions) +* [PHP 8.2 extensions](/cloudlinux_os_components/#php-8-2-extensions) #### PHP 4.4 extensions @@ -5273,7 +5518,7 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|bcmath
bz2
calendar
ctype
curl
dba
dbase
dbx
domxml
exif
fileinfo | ftp
gd
gettext
gmp
iconv
imap
interbase
ioncube_loader
ioncube_loader_4
ioncube_loader_5
json
ldap | mbstring
mcrypt
mhash
mysql
ncurses
odbc
openssl
overload
pcntl
pcre
pgsql | posix
pspell
readline
recode
session
shmop
snmp
sockets
sourceguardian
standard
sybase_ct
sysvmsg | sysvsem
sysvshm
tokenizer
wddx
xml
xmlrpc
zlib| +|bcmath
bz2
calendar
ctype
curl
dba
dbase
dbx
domxml
exif | fileinfo
ftp
gd
gettext
gmp
iconv
imap
interbase
ioncube_loader
json
ldap | mbstring
mcrypt
mhash
mysql
mysql
ncurses
odbc
openssl
overload
pcntl
pcre | pgsql
posix
pspell
readline
recode
session
shmop
snmp
sockets
sourceguardian | standard
sybase_ct
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlrpc
zlib|
#### PHP 5.1 extensions @@ -5283,9 +5528,11 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|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
ioncube_loader
ioncube_loader_4
ioncube_loader_5
ldap
libxml | lzf
mbstring
mcrypt
memcache
msgpack
mysql
mysqli
ncurses
odbc
openssl
pcntl
pcre
pdo
pdo_firebird
pdo_mysql
pdo_odbc
pdo_pgsql
pdo_sqlite
pdo_oci | pgsql
posix
pspell
quickhash
radius
readline
redis
reflection
session
shmop
simplexml
snmp
soap
sockets
sourceguardian
spl
ssh2
standard
stats | stem
sybase_ct
sysvmsg
sysvsem
sysvshm
tidy
timezonedb
tokenizer
translit
wddx
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
zlib | +|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 @@ -5293,9 +5540,13 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|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
gettext
gmagick
gmp
gnupg
geos
haru
hash
hidef
htscanner
huffman
http
iconv
idn
igbinary
imagick
imap
inclued
inotify
interbase
intl
ioncube_loader
ioncube_loader_4
ioncube_loader_5
json
ldap
libxml | lzf
magickwand
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_odbc
pdo_pgsql
pdo_sqlite
pdo_oci | pgsql
phar
posix
pspell
quickhash
radius
rar
readline
recode
redis
reflection
rsync
session
shmop
simplexml
snmp
soap
sockets
sourceguardian
spl
spl_types
sqlite
ssh2
standard
stats
stem
stomp | suhosin
sybase_ct
sysvmsg
sysvsem
sysvshm
tidy
timezonedb
tokenizer
translit
uploadprogress
uuid
wddx
xcache_3
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xrange
xsl
xhprof
yaf
yaz
zend_optimizer
zip
zlib| +|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 @@ -5303,9 +5554,13 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|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
ioncube_loader_4
ioncube_loader_5
jsmin
json
ldap
libevent
libxml
lzf | magickwand
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| +|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 @@ -5313,9 +5568,15 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|apc
apcu
apm
ares
bcmath
big_int
bitset
brotli
bz2
bz2_filter
calendar
clamav
core
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
iconv
igbinary
imagick
imap
inclued
inotify
interbase
intl
ioncube_loader
ioncube_loader_4
ioncube_loader_5
json
ldap
libevent
libsodium
libxml
lzf
luasandbox
magickwand
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
xsl
xhprofjsmin
yaf
yaml
yaz
zend_guard_loader
zip
zlib
zmq| +|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 @@ -5323,9 +5584,13 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|apcu
apm
ares
bcmath
big_int
bitset
brotli
bz2
bz2_filter
calendar
clamav
core
ctype
curl
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
ioncube_loader_4
ioncube_loader_5
jsmin
json
ldap
libevent
libsodium
libxml
lzf
luasandbox
magickwand
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
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
xsl
xhprof
yaf
yaml
yaz
zend_guard_loader
zip
zlib
zmq | +|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 @@ -5334,9 +5599,14 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|apcu
apm
ares
bcmath
big_int
bitset
brotli
bz2
bz2_filter
calendar
core
ctype
curl
date
dba
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
ioncube_loader_4
ioncube_loader_5
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
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
weakref
xcache_3
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xrange
xsl
xhprof
yaml
yaz
zend_guard_loader
zip
zlib
zmq| +|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 @@ -5344,9 +5614,14 @@ Large number of PHP extensions are bundled with each version of PHP. | | | | | | |-|-|-|-|-| -|apcu
bcmath
bitset
brotli
bz2
calendar
core
ctype
curl
date
dba
dbase
dom
diseval
eio
enchant
exif
fileinfo
filter
ftp
ffmpeg
gd
gender
geos | geoip
gettext
gmagick
gmp
gnupg
gRPC
hash
htscanner
http
iconv
igbinary
imagick
imap
inotify
interbase
intl
ioncube_loader
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
pdo_odbc
pdo_pgsql
pdo_sqlite
pdo_sqlsrv
pdo_oci
pgsql
phalcon3
phar | posix
propro
pspell
phalcon4
raphf
rar
readline
redis
reflection
recode
session
shmop
simplexml
snmp
soap
sockets
sourceguardian
solr
spl
sqlite3
sqlsrv
ssh2
standard
stats
suhosin
sysvmsg | swoole
sysvsem
sysvshm
tidy
timezonedb
tokenizer
trader
tideways
uploadprogress
uuid
vips
wddx
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
yaml
yaz
yaf
zip
zlib
zmq| +|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 + ::: tip 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](https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/license-key). @@ -5360,9 +5635,13 @@ Please find more info about New Relic License Key 40-vld
apcu
bcmath
brotli
bz2
calendar
core
ctype
curl
date
dba
dbase
dom
diseval
eio
enchant
exif
fileinfo
filter
ftp
ffmpeg
gd
gender
geoip
gettext | geos
gmagick
gmp
gnupg
gRPC
hash
htscanner
http
iconv
igbinary
imagick
imap
inotify
interbase
intl
ioncube_loader
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
pdo_sqlite
pdo_sqlsrv
pgsql
phalcon3
phar
pdf | pdo_oci
phalcon4
posix
propro
pspell
raphf
rar
readline
redis
reflection
recode
solr
session
shmop
simplexml
snmp
soap
sockets
sourceguardian
spl
sqlite3
sqlsrv
ssh2
standard
stats
suhosin
sysvmsg | swoole
sysvsem
sysvshm
tidy
timezonedb
tokenizer
trader
tideways
uploadprogress
uuid
vips
wddx
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
yaml
yaf
zip
zlib
zmq| +|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 + ::: tip Note To use `newrelic` extension you should set your own `New Relic License Key` in your own `/opt/alt/php7*/etc/php.ini` file. @@ -5376,7 +5655,7 @@ Please find more info about New Relic License Key 40-vld
apcu
bcmath
brotli
bz2
calendar
core
ctype
curl
date
dba
dom
dbase
diseval
eio
enchant
exif
fileinfo
filter
ftp
ffmpeg
gd
gender
geoip
gettext | 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
uploadprogress
uuid
vips
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
xdebug
yaf
yaml
zip
zlib
zmq| +|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| ::: tip Note @@ -5385,518 +5664,201 @@ You can find more info about New Relic License Key - -| | | | | | | -|-|-|-|-|-|-| -|40-snuffleupagus
40-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| - - - -:::tip 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](https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/license-key). -::: - -#### PHP 7.4 extensions - - -
- -| | | | | | -|-|-|-|-|-| -|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
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
phalcon4
phar
posix
propro
pspell
raphf
readline
redis
reflection
session
shmop
simplexml
snmp
soap
sockets
sodium
spl
sqlite3
sqlsrv
standard | stats
swoole
sysvmsg
sysvsem
sysvshm
tidy
timezonedb
tokenizer
trader
uploadprogress
uuid
vips
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
yaml
zip
zlib | -
- - -## Python Selector - -:::tip Note -This documentation is for the new version of Python Selector. You can find documentation for the old Python Selector [here](/cloudlinux_os_components/#python-selector-old) -::: - - -### General information and requirements - -Python Selector is a CloudLinux component that allows each user to easily deploy and manage Python applications via application server. - -* [Requirements](/cloudlinux_os_components/#requirements-2) - -#### Requirements - -:::danger Important! -Do not downgrade LVE Manager to versions lower than 4.2.2 if you have already migrated Python applications because it will break migrated applications. -::: - -* Python Selector supports the following Alt-Python versions: - * `alt-python27 2.7.16`, supported by CloudLinux 6, CloudLinux 7 - * `alt-python33 3.3.7`, supported by CloudLinux 6, CloudLinux 7 - * `alt-python34 3.4.9`, supported by CloudLinux 6, CloudLinux 7 - * `alt-python35 3.5.6`, supported by CloudLinux 6, CloudLinux 7 - * `alt-python36-3.6.8`, supported by CloudLinux 6, CloudLinux 7 - * `alt-python36-3.7.2`, supported by CloudLinux 6, CloudLinux 7 -* This feature is available for CloudLinux 7, CloudLinux 6 hybrid and CloudLinux 6. -* New Python Selector requires LVE Manager version 4.2 or later. -* It supports cPanel and DirectAdmin servers. On DirectAdmin only on Apache. Plesk will not be supported. -* Python Selector uses `mod_passenger` to host Python. For more details about `mod_passenger`, please read [documentation](https://www.phusionpassenger.com/). -* Python Selector works with EasyApache 3 (note EOL at 1st September 2019), EasyApache 4 and LiteSpeed Web Server. Or Apache on DirectAdmin. - - -### Migration to the new Python Selector - -* [How to migrate an application to the new Python Selector](/cloudlinux_os_components/#how-to-migrate-an-application-to-the-new-python-selector) - -The new Python Selector has a bunch of new features: - -* the ability to set environment variables for the application -* the ability to set dependencies from the file requirements -* the ability to start and stop applications as in Node.js Selector -* the ability to add and edit custom configurations -* the ability to install modules from the custom configurations - -All existing Python applications (created before the update of LVE Manager to version 5.0.1-1) will work the same as before. You do not need to migrate them unless you’d like to use new features. These applications we define as old applications. - -:::warning Important! -There are some risks during the migration process and the migration can fail. To avoid such issues and make it possible to solve them if any, only user who created a particular application is allowed to initiate the migration process. -::: - -You do not need to migrate the new applications that will be created after the update to the LVE Manager 5.0.1-1. All new features are available for them. - -:::warning Important! -You cannot migrate back to the old application. If you face any issue during the migration, please [contact our support team](https://cloudlinux.zendesk.com/hc/requests/new). -::: - -#### How to migrate an application to the new Python Selector - -:::tip Note -Only user who created an application can migrate it. -::: - -To migrate a Python application: -* Log in to your control panel. -* Open Python Selector user interface. - ![](/images/Python_general.png) -* Choose an application to migrate and click ![](/images/Migrate-btn.png) in the _Actions_ section. You will see the popup. - ![](/images/Python-migration.png) -* Click _Migrate_ in the popup. -* After successful migration, you will see the confirmation popup. - -If you face any issue during the migration, please [contact our support team](https://cloudlinux.zendesk.com/hc/requests/new). - - -### Installation and update - -New clients can install Python Selector using the [CloudLinux Installation Wizard](/lve_manager/#cloudlinux-installation-wizard). - -* [cPanel](/cloudlinux_os_components/#cpanel-2) -* [DirectAdmin](/cloudlinux_os_components/#directadmin) - -#### cPanel - -To use Python Selector, it is required to install the following: -* alternative Python packages by running the following command: - -
- - ``` - yum groupinstall alt-python - ``` -
-* LVE Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command: - -
- - ``` - yum install lvemanager lve-utils alt-python-virtualenv ea-apache24-mod-alt-passenger - ``` -
- -__For EasyApache 3:__ +* CloudLinux 6/7 -
- -``` -yum install lve-utils lvemanager alt-python-virtualenv alt-mod-passenger -``` -
+** CloudLinux 7 -* CageFS for better security. See [CageFS documentation for details](/cloudlinux_os_components/#cagefs). +#### PHP 7.3 extensions -#### DirectAdmin - -To use Python Selector, it is required to install the following: - -* alternative Python packages by running the following command: - -
- - ``` - yum groupinstall alt-python - ``` -
- -* LVE Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command: - -
- - ``` - yum install lve-utils lvemanager alt-python-virtualenv alt-mod-passenger - ``` -
- -* CageFS for better security. See [CageFS documentation for details](/cloudlinux_os_components/#cagefs). - -:::tip Note -After installation, please make sure that you have unmarked appropriate checkboxes in LVE Manager Options tab to show Python App in the web-interface. -::: - -:::tip Note -Adding Python module requires executing permissions to `gcc/make` binaries. Please enable compilers in Compiler Access section of WHM, then run: - -
- -``` -cagefsctl --force-update -``` -
-::: - - -* See also [Python Selector UI](/lve_manager/#python-selector-2). -* See also [Python Selector CLI](/command-line_tools/#python-selector). - -### Deploying Trac using Python Selector - -* [Trac with MySQL](/cloudlinux_os_components/#trac-with-mysql) -* [EasyApache 4](/cloudlinux_os_components/#easyapache-4) - -1. In **Setup Python App** create an application. Trac project WSGI script will be located in **App Directory** (e.g. `trac`). - -App URI – is a URL where web-interface is located (e.g. Trac – web-interface is located in `YOUR_DOMAIN/trac`). - -Trac needs Python version from **2.5** to **3.0,** in the actual example version 2.7 is used. - -2. When the App is created, add the following modules: `Trac`, `Genshi`, `MySQL-python`. - -2.1. Alternatively, connect to the server via SSH and perform the following steps: - -
- -``` -source ~/virtualenv/trac/2.7/bin/activate -``` -
- -then: - -
- -``` -~/virtualenv/trac/2.7/bin/easy_install Trac mysql-python (using easy_install) -``` -
- -or - -
- -``` -~/virtualenv/trac/2.7/bin/pip install trac mysql-python -``` -
- -(using `pip`). - -3. In cPanel create MySQL database and a user. Add user to database. - -![](/images/Python_trac1.png) - -In this example DB `tractest_trac` and user `tractest_trac` were created. - -4. Connect to the server via SSH using your cPanel account. - -Create Trac project: - -
- - ``` - ~/virtualenv/trac/2.7/bin/trac-admin - ~/trac_project initenv - ``` -
- -For the `Database connection string` parameter enter the following: `mysql://user:password@localhost/database_name` – here the data for connecting MySQL database are specified. - -::: tip Note -In case of `... The charset and collation of database are 'latin1' and 'latin1_swedish_ci' error the database must be created with one of (('utf8', 'utf8_bin'), ('utf8mb4', 'utf8mb4_bin')) ...` while creating the project, you should change database encoding. -::: - -To change encoding, in cPanel run phpMyAdmin, choose `DB`, go to `Operations`, choose the necessary encoding in `Collation` section and click `Go`. - -![](/images/trac2.jpg) - -After that you have to repeat the procedure of creating a project. When done, the `Trac` project must appear: `~/trac_project` - -5. To create project frontend run the following: - -
- -``` -~/virtualenv/trac/2.7/bin/trac-admin ~/track_project deploy ~/trac -``` -
- -`~/track_project` — is the path to the project, -`~/trac` — is the path, that was specified while setting `App Directory`. - -Create topic directory by default: - -
- -``` -cd ~/public_html/trac -mkdir chrome -cp -R ~/trac/htdocs/ ~/public_html/trac/chrome/ -``` -
- -All project static files are located in this directory; the changes can be added here as well. - -6. To add path to WSGI file in the created application: - -Go back to _cPanel Setup Python App_, change `WSGI file location` for your application to `cgi-bin/trac.wsgi`, click `Update` to apply changes and then click `Restart`. - -Your existing application now must look like the following: - -![](/images/Python_trac2.png) - -7. Adding authorization: - -In `~/public_html/trac/.htaccess` after `CLOUDLINUX PASSENGER CONFIGURATION` section add the following lines: - -
- -``` -AuthType Basic -AuthName "trac" -AuthUserFile /home/tractest/trac/passwd -Require valid-user -``` -
- -8. Add new user and create password file `/usr/local/apache/bin/htpasswd` with `~/trac/passwd` admin. - -Enter password. - -
- -``` -~/virtualenv/trac/2.7/bin/trac-admin ~/track_project permission add admin TRAC_ADMIN -``` -
- -Add admin user to `TRAC_ADMIN` group. - -Here the path `trac` directory is equal to `App Directory` in your project. - -Now `Trac` is available via `YOUR_DOMAIN/trac`. - - -#### Trac with MySQL - -To use Trac with MySQL database you should install alt-python27-devel package. -To install run:
-``` -yum install alt-python27-devel --enablerepo=cloudlinux-updates-testing -``` -
- -#### EasyApache 4 - -CloudLinux has Python Selector, which allows creating applications with ea-apache24-mod-alt-passenger. However, it does not allow using cPanel application manager. - -It is not correct to install both of those packages on the server because they contain the same passenger module for Apache web server. - -The new ea-ruby24-mod_passenger is available for download from our updates-testing (beta) repository which allows you to run applications via cPanel application manager and CloudLinux Python Selector. - -To install run: -
+| | | | | | | +|-|-|-|-|-|-| +|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| -``` -# yum install lvemanager alt-python-virtualenv -# yum install ea-ruby24-mod_passenger --enablerepo=cl-ea4-testing -```
-## Python Selector (Old) +* CloudLinux 6/7 + +** CloudLinux 7 :::tip Note -This documentation is for the old version of Python Selector. You can find documentation for the new Python Selector [here](/cloudlinux_os_components/#python-selector) +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](https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/license-key). ::: -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 6 or later. It supports only cPanel servers. +#### PHP 7.4 extensions -You can find a list of supported alt-python versions using the following command.
-``` -yum grouplist | grep alt-python -``` +| | | | | | +|-|-|-|-|-| +|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 -### Installation +** CloudLinux 7 + +#### PHP 8.0 extensions -::: tip Note -The instructions below are suitable only for EasyApache 3 and EasyApache 4. You should follow [this instruction](https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:cloudlinux:enable_ruby_python_selector) if you use LiteSpeed. -::: -Install tools to create isolated Python environments and Passenger Apache module. For servers with EasyApache3:
-``` -yum install lvemanager alt-python-virtualenv alt-mod-passenger -``` +| | | | | | +|-|-|-|-|-| +|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 |
-for EasyApache4: +* CloudLinux 6/7 -
+** CloudLinux 7/8 -``` -yum install lvemanager alt-python-virtualenv ea-apache24-mod-alt-passenger -``` -
+*** CloudLinux 7 + +#### PHP 8.1 extensions -To use Python Selector you should install alternative Python packages:
-``` -yum groupinstall alt-python -``` +| | | | | | +|-|-|-|-|-| +|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 |
-To use MySQL database you should install alt-python27-devel package: +* CloudLinux 6/7 -
+** CloudLinux 7/8 -``` -yum install alt-python27-devel -``` -
+*** CloudLinux 7 -::: tip Note -After installation, please make sure that you have unmarked appropriate checkboxes in LVE Manager Options tab to show Python App in web-interface. -::: -::: tip Note -Adding Python modules requires executing permissions to gcc/make binaries. Please enable compilers in Compiler Access section of WHM, then run: `cagefsctl --force-update` -::: -### End user access +#### 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**| -1. In _Software/Services_ area choose _Select Python Environment_. -![](/images/clip000133.jpg) +* CloudLinux 7 -2. Create project form will appear. Choose interpreter version for your application, application folder name (project path) and URI for accessing your application. Click “Create project” to create an application. +** CloudLinux 7/8 -![](/images/clip000233.jpg) +## Python Selector -After a little while a new application entry will be appended to the web-page. +### General information -![](/images/clip000255.jpg) +Python Selector is a CloudLinux OS Shared component that allows each user to easily deploy and manage Python applications. Users can manage applications at the control panel interface level or from the command line (CLI). -3. You can edit path (folder name of the project in the home directory, for example, _/home/clman1/project_name_ ), uri for application, wsgi handler. If you click Edit - the value is converted to input field and thus becomes editable. When editing is complete, click Save . +### Requirements -![](/images/clip000256.jpg) +* cPanel or DirectAdmin control panel. Plesk isn't supported. +* Apache or LiteSpeed webserver. Apache + Nginx (as a reverse proxy) combination is also supported. +* Python Selector uses `mod_passenger` to host Python. For more details about `mod_passenger`, please read [documentation](https://www.phusionpassenger.com/). The needed version will be installed along with Python Selector. -4. Wsgi entry is to specify python wsgi application entry point. It must be specified as filename, must be callable and separated by colon. If your app is running from file flask/run.py by calling callable app, set flask/run.py:app . +### Supported versions -![](/images/clip000257.jpg) +* Python Selector supports the following alt-python versions for all actual CloudLinux OS Shared versions: -5. When Show control is clicked, python extensions section will be expanded. It gives the ability to add or remove python modules. When start typing in input field, appropriate hints are shown in drop-down list. Choose the entry you want from drop-down and click Add . + * `alt-python 2.7` + * `alt-python 3.3` + * `alt-python 3.4` + * `alt-python 3.5` + * `alt-python 3.6` + * `alt-python 3.7` + * `alt-python 3.8` + * `alt-python 3.9` + * `alt-python 3.10` + +### Installation -![](/images/clip000261.jpg) +You can install Python Selector using the [CloudLinux OS Shared Installation Wizard](/lve_manager/#cloudlinux-os-shared-installation-wizard). -If you click Delete , the corresponding module entry will disappear. -In addition to setting path, uri and wsgi , the interpreter version can be changed as well by changing the value in select drop-down. +After installation, please make sure that you have set appropriate checkboxes in CloudLinux Manager Options tab to show Python App in the web-interface. -6. No changes are applied to application environment until Update button is clicked. Before the Update button is clicked, all changes can be reverted with Reset button. +#### Manual installation -The newly created application will be supplied with stub only. A real application ought to be put into application folder. After application is placed into application folder, the wsgi parameter can be set. +Here you can find the installation steps for supported control panels: -Click Remove to delete the application - the application folder itself will remain unmoved. +* [cPanel](/cloudlinux_os_components/#cpanel-2) +* [DirectAdmin](/cloudlinux_os_components/#directadmin) -_Note. For LVE Manager version 0.9-10 and higher:_ +#### cPanel -When creating an application you can use the key --domain , which attaches application to domain. If --domain key is not specified, then the main users domain will be used by default. -To create application run: +To use Python Selector, it is required to install the following: +* alternative Python packages by running the following command: +
``` -/usr/bin/selectorctl --interpreter=python --version=VERSION[--user=USER] [--domain=DOMAIN] [--print-summary] [--json]–-create-webapp +yum groupinstall alt-python ```
-When changing application URI, --domain key can be used simultaneously, in this case not only URI will be changed, but also the application domain. - -To change application URI run: +* CloudLinux Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command:
``` -/usr/bin/selectorctl --interpreter=python [--user=USER][--domain=NEW_DOMAIN] [--print-summary] [--json] --transit-webapp +yum install lvemanager lve-utils alt-python-virtualenv ```
+ +Phusion Passenger could be installed by using **either** ```ea-ruby24-mod_passenger``` **or** ```ea-ruby27-mod_passenger```. ```ea-ruby27-mod_passenger``` is **not** compatible with systems running CloudLinux OS Shared OS 6. CloudLinux OS Shared OS 7 supports **both** ```ea-ruby24-mod_passenger``` and ```ea-ruby27-mod_passenger```. If your system runs CloudLinux OS Shared OS 8, you can **only** use ```ea-ruby27-mod_passenger```. -The possibility to choose domain when creating an application was added to web interface as well. - -![](/images/webapp001_zoom94.png) +Adding Python module requires executing permissions to `gcc/make` binaries. +Please enable compilers in Compiler Access section of WHM, then run: -Also, you can run simple commands from web interface (e.g. you can install packages from specific repositories or control web applications by means of django -admin). +
-![](/images/webapp002_zoom93.png) +``` +cagefsctl --force-update +``` +
+* We recommend use CageFS for better security. See [CageFS documentation for details](/cloudlinux_os_components/#cagefs). -### Hide Python Selector icon +#### DirectAdmin + +To use Python Selector, it is required to install the following: -It is possible to hide or show Python Selector icons by marking or unmarking proper checkbox in LVE Manager _Options_ tab. +* alternative Python packages by running the following command: -![](/images/CL-hide-python-ruby.png) +
-The same result can be accomplished in CLI by running: +``` +yum groupinstall alt-python +``` +
+ +* CloudLinux Manager, LVE Utils and Phusion Passenger to create isolated Python environments by running the following command:
``` -cloudlinux-config set --json --data '{"options":{"uiSettings":{"hideRubyApp":false, "hidePythonApp":false}}}' +yum install lve-utils lvemanager alt-python-virtualenv alt-mod-passenger ```
- -:::tip Note -If you are using cPanel/WHM, you can also configure hide/show CloudLinux Python Selectors in WHM | Feature Manager. -For that, you’d need to first uncheck `Hide Python App in web-interface` in the LVE Manager. This will make the menu appear for all accounts. After that, you are free to disable this app in WHM | Feature Manager for the required feature lists. -::: + +* We recommend use CageFS for better security. See [CageFS documentation for details](/cloudlinux_os_components/#cagefs). + + +* See also [Python Selector UI](/lve_manager/#python-selector-2). +* See also [Python Selector CLI](/command-line_tools/#python-selector). ## Ruby Selector + ### General information and requirements -We have the ability to deploy Ruby applications via application server. Ruby Selector uses `mod_passenger` to host Ruby. +We have the ability to deploy Ruby applications via an application server. Ruby Selector uses `mod_passenger` to host Ruby applications. -This feature is available for CloudLinux 6 or later. It supports only cPanel servers. +Ruby Selector works only on cPanel/WHM servers. You can find a list of supported `alt-ruby` versions using the following commands. @@ -5923,111 +5885,34 @@ yum groupinstall alt-ruby ``` -To use MySQL database you should install `alt-python27-devel` package: - -
- -``` -yum install alt-python27-devel -``` -
- ::: tip Note -After installation, please make sure that you have unmarked appropriate checkboxes in VE Manager Options tab to show Ruby App in web-interface. Find the instructions on the [link](/cloudlinux_os_components/#hide-ruby-selector-icons). +After installation, please make sure that you have unmarked appropriate checkboxes in VE Manager Options tab to show Ruby App in web-interface. Find the instructions on the [link](/cloudlinux_os_components/#hide-ruby-selector-icon). ::: ::: tip Note Adding Ruby modules requires executing permissions to `gcc/make` binaries. Please enable compilers in Compiler Access section of WHM, then run: `cagefsctl --force-update` ::: -:::tip Note -See also Ruby Selector [CLI](/command-line_tools/#ruby-selector) -::: - ### Configuration and using -* [End user access](/cloudlinux_os_components/#end-user-access-2) +* [End user access](/lve_manager/#ruby-selector-client-plugin) * [Hide Ruby Selector icon](/cloudlinux_os_components/#hide-ruby-selector-icon) * [Deploying Redmine using Ruby Selector](/cloudlinux_os_components/#deploying-redmine-using-ruby-selector) * [EasyApache 4](/cloudlinux_os_components/#easyapache-4-2) #### End user access -1. In _Software/Services_ area choose _Select Ruby Environment_. - -![](/images/clip000133.jpg) - - -2. Create project form will appear. Choose interpreter version for your application, application folder name (project path) and URI for accessing your application. Click “Create project” to create an application. - -![](/images/clip000233.jpg) - -After a little while a new application entry will be appended to the web-page. - -![](/images/clip000255.jpg) - -3. You can edit path (folder name of the project in the home directory, for example, `/home/clman1/project_name`), uri for application, wsgi handler. If you click Edit - the value is converted to input field and thus becomes editable. When editing is complete, click Save . - -![](/images/clip000256.jpg) - -4. Wsgi entry is to specify python wsgi application entry point. It must be specified as filename, must be callable and separated by colon. If your app is running from file flask/run.py by calling callable app, set `flask/run.py:app`. - -![](/images/clip000257.jpg) - -5. When Show control is clicked, python extensions section will be expanded. It gives the ability to add or remove python modules. When start typing in input field, appropriate hints are shown in drop-down list. Choose the entry you want from drop-down and click Add . - -![](/images/clip000261.jpg) - -If you click Delete, the corresponding module entry will disappear. - -In addition to setting path, uri and `wsgi`, the interpreter version can be changed as well by changing the value in select drop-down. - -6. No changes are applied to application environment until Update button is clicked. Before the Update button is clicked, all changes can be reverted with Reset button. - -The newly created application will be supplied with stub only. A real application ought to be put into application folder. After application is placed into application folder, the wsgi parameter can be set. - -Click Remove to delete the application - the application folder itself will remain unmoved. - -:::tip Note -For LVE Manager version 0.9-10 and higher -::: - -When creating an application you can use the key `--domain`, which attaches application to domain. If `--domain` key is not specified, then the main users domain will be used by default. - -To create application run: -
- -``` -/usr/bin/selectorctl --interpreter= --version=VERSION[--user=USER] [--domain=DOMAIN] [--print-summary] [--json]–-create-webapp -``` -
-When changing application URI, `--domain` key can be used simultaneously, in this case not only URI will be changed, but also the application domain. - -To change application URI run: -
- -``` -/usr/bin/selectorctl --interpreter= [--user=USER][--domain=NEW_DOMAIN] [--print-summary] [--json] --transit-webapp -``` -
-The possibility to choose domain when creating an application was added to web interface as well. - -![](/images/webapp001_zoom94.png) - -Also, you can run simple commands from web interface (e.g. you can install packages from specific repositories or control web applications by means of django -admin). - -![](/images/webapp002_zoom93.png) +You can find an example of Ruby application setup [here](https://cloudlinux.zendesk.com/hc/en-us/articles/115004495049-How-to-run-Redmine-with-Ruby-Selector) :::tip Note -See also Ruby Selector [CLI](/command-line_tools/#ruby-selector) +See also Ruby Selector [CLI](/command-line_tools/#ruby-selector) section. ::: #### Hide Ruby Selector icon It is possible to hide or show Ruby Selector icon by marking or unmarking proper checkboxes in LVE Manager Options tab. -![](/images/CL-hide-python-ruby.png) - +![](/images/CL-hide-ruby.png) The same result can be accomplished in CLI by running: @@ -6039,139 +5924,87 @@ cloudlinux-config set --json --data '{"options":{"uiSettings":{"hideRubyApp":fal :::tip Note -If you are using cPanel/WHM, you can also configure hide/show CloudLinux Ruby Selectors in WHM | Feature Manager. +If you are using cPanel/WHM, you can also configure hide/show CloudLinux OS Shared Ruby Selectors in WHM | Feature Manager. For that, you’d need to first uncheck `Hide Ruby App in web-interface` in the LVE Manager. This will make the menu appear for all accounts. After that, you are free to disable this app in WHM | Feature Manager for the required feature lists. ::: #### Deploying Redmine using Ruby Selector ::: tip Note -Provided instructions are valid for older Redmine version 2.6.0. New versions guide could be found [here](https://cloudlinux.zendesk.com/hc/en-us/articles/115004495049-How-to-run-Redmine-with-Ruby-Selector) +You can find Redmine version 2.6.0 and newer deployment guide [here](https://cloudlinux.zendesk.com/hc/en-us/articles/115004495049-How-to-run-Redmine-with-Ruby-Selector) ::: -1. In cPanel create MySQL database and add user to it. In the example given, the databace _redminet_redmine_ was created and user _redminet_redmine_ was added. +#### EasyApache 4 -2. In **Setup Ruby App** section create an application. +:::tip Note +```ea-apache24-mod-alt-passenger``` is deprecated in favor of ```ea-ruby24-mod_passenger``` and ```ea-ruby27-mod_passenger``` +::: - App Directory is the directory where all static files will be placed ( _e.g._ `redmine`). - App URI is web-interface URL ( _e.g._ _redmine_ _web-interface will be located in_ _YOUR_DOMAIN/redmine_ ). +Starting with cPanel/WHM version 66 provides ```ea-ruby24-mod_passenger``` (more information on the [link](https://documentation.cpanel.net/display/66Docs/Application+Manager)), this allows creating Ruby applications with cPanel application manager. -![](/images/hmfile_hash_f8216d04.png) +CloudLinux OS Shared features its own Python and Ruby Selectors, which allow creating applications with one of ```mod_passenger``` Apache modules: -3. After the application was created, add the following modules: - bundle, i18n#0.6.11, builder#3.0.4, rails#3.2.19, mime-types#1.25.1, mocha#1.0.0, jquery-rails#3.1.2, coderay, fastercsv, request_store, rbpdf, mysql2, selenium-webdriver, rmagick, shoulda#3.3.2, ruby-openid#2.3.0, request_store#1.0.5, capybara#2.1.0, net-ldap#0.3.1, rack-openid, shoulda-matchers#1.4.1, redcarpet#2.3.0, yard, rake#10.4.2, bigdecimal. +* ```ea-ruby24-mod_passenger``` +* ```ea-ruby27-mod_passenger``` +```ea-ruby27-mod_passenger``` is **not** compatible with systems running CloudLinux OS Shared 6. CloudLinux OS Shared 7 supports **both** ```ea-ruby24-mod_passenger``` and ```ea-ruby27-mod_passenger```. If your system runs CloudLinux OS 8, you can **only** use ```ea-ruby27-mod_passenger```. -![](/images/hmfile_hash_54c4ccdb.png) +The ```ea-ruby2X-mod_passenger``` allows you to run applications via cPanel application manager and Ruby Selector. -**Note** : If error occurs while installing rmagic module, then you need to install ImageMagick-devel package on your server: +To install, run:
``` -yum install ImageMagick-devel +# yum install lvemanager alt-python-virtualenv +# yum install ea-ruby24-mod_passenger ```
-The installation process takes quite along time, about 7-8 minutes. When done, click Restart button to restart the application. - -![](/images/hmfile_hash_880db2aa.png) -![](/images/hmfile_hash_553ab55c.png) - -3.1 Alternatively, after the application was created, you can add only one module - bundle . - -![](/images/redmine_selector_1.png) - -![](/images/redmine_selector_2.png) -4. Enter the server via SSH, using your cPanel account. +or: -Download the application [http://www.redmine.org/projects/redmine/wiki/Download](http://www.redmine.org/projects/redmine/wiki/Download) . - -In the description given, the latest version Redmine (2.6.0) is assumed. - -[http://www.redmine.org/releases/redmine-2.6.0.tar.gz](http://www.redmine.org/releases/redmine-2.6.0.tar.gz) - tar xzf redmine-2.6.0.tar.gz - -Hereinafter 'redmine' is App Directory meaning which was specified while setting Ruby application. -
- -``` -cp -R ~/redmine-2.6.0/* ~/redmine -cd ~/redmine/config -cp database.yml.example database.yml -``` -
-Edit config/database.yml - add MySQL database connection settings to Production section.
``` -cp -R ~/redmine/public/* ~/public_html/redmine/ -cd ~/public_html/redmine -cat htaccess.fcgi.example >> .htaccess -cp dispatch.fcgi.example dispatch.fcgi +# yum install lvemanager alt-python-virtualenv +# yum install ea-ruby27-mod_passenger ```
-Go to cd ~/redmine directory. - -Add gem "bigdecimal" line into Gemfile file. -Run alternately: -
+See also [Ruby Selector CLI tools](/command-line_tools/#ruby-selector). -``` -source ~/rubyvenv/redmine/2.1/bin/activate -~/rubyvenv/redmine/2.1/bin/bundle install -``` -
-(if running the alternative installation) -
-``` -~/rubyvenv/redmine/2.1/bin/rake generate_secret_token -RAILS_ENV=production ~/rubyvenv/redmine/2.1/bin/rake db:migrate -``` -
-- Database migration; +## Node.js Selector - `RAILS_ENV=production ~/rubyvenv/redmine/2.1/bin/rake redmine:load_default_data` -- Loading default data into database. +### General information and requirements -#### EasyApache 4 +* [Requirements](/cloudlinux_os_components/#requirements-3) +* [Limitation](/cloudlinux_os_components/#limitations) -Since cPanel/WHM version 66 provides ea-ruby24-mod_passenger (more information on the [link](https://documentation.cpanel.net/display/66Docs/Application+Manager)), this allows creating Ruby applications with cPanel application manager. + 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. -CloudLinux already has Python and Ruby Selector , which allows creating applications with ea-apache24-mod-alt-passenger . However, it does not allow using cPanel application manager . +#### **Requirements** -It is not correct to install both of those packages on the server because they contain the same passenger module for Apache web server. +* Node.js Selector supports Node.js versions 6.x, 8.x, 9.x, 10.x, 11.x, 12.x, 14.x, 16.x, 18.x, 19.x. +* Node.js Selector requires LVE Manager 4.0 or later. +* It supports cPanel and DirectAdmin servers as well as non-panel installations (Plesk is not supported as it already has Node.js support.) For more details, please go to Plesk & Node.js documentation [here](https://www.plesk.com/blog/product-technology/node-js-plesk-onyx/) and [here](https://docs.plesk.com/en-US/onyx/administrator-guide/website-management/nodejs-support.76652/) . +* Node.js Selector uses `mod_passenger` to host Node.js. For more details about mod_passenger and Node.js, please read documentation [here](https://www.phusionpassenger.com/library/walkthroughs/deploy/nodejs/) and [here](https://www.phusionpassenger.com/library/walkthroughs/deploy/nodejs/ownserver/apache/oss/el7/deploy_app.html) . +* Node.js Selector supports both EasyApache 3 and EasyApache 4. -The new ea-ruby24-mod_passenger is available for download from our updates-testing (beta) repository which allows you to run applications via cPanel application manager and Ruby Selector. +#### **Limitations** -To install run: -
+Since Node.js Selector uses `mod_passenger` to host Node.js, then Node.js Selector has the same limitations as Phusion Passenger. Phusion Passenger cannot load ECMAScript modules and can only load Common js modules. +If you get an ERR_REQUIRE_ESM error when starting an application app.js. ``` -# yum install lvemanager alt-python-virtualenv -# yum install ea-ruby24-mod_passenger --enablerepo=cl-ea4-testing +Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: app.js ``` -
- -See also [Ruby Selector CLI tools](/command-line_tools/#ruby-selector). - -## Node.js Selector -### General information and requirements - -* [Requirements](/cloudlinux_os_components/#requirements-3) +In this case you can use the following cjs wrapper app_wrapper.cjs to load esm script app.js: - Node.js Selector is a CloudLinux component that allows each user to easily create Node.js applications, choose Node.js version and other parameters for applications based on their needs. - -#### **Requirements** - -* Node.js Selector supports Node.js versions 6.x, 8.x, 9.x and later. -* This feature is available for CloudLinux 7, CloudLinux 6 hybrid and CloudLinux 6. -* Node.js Selector requires LVE Manager 4.0 or later. -* It supports cPanel and DirectAdmin servers (Plesk is not supported as it already has Node.js support.) For more details, please go to Plesk & Node.js documentation [here](https://www.plesk.com/blog/product-technology/node-js-plesk-onyx/) and [here](https://docs.plesk.com/en-US/onyx/administrator-guide/website-management/nodejs-support.76652/) . -* For more details about mod_passenger and Node.js, please read documentation [here](https://www.phusionpassenger.com/library/walkthroughs/deploy/nodejs/) and [here](https://www.phusionpassenger.com/library/walkthroughs/deploy/nodejs/ownserver/apache/oss/el7/deploy_app.html) . -* Node.js Selector is working with EasyApache 3 and EasyApache 4. +``` +cat app_wrapper.cjs +(() => import('app.js'))(); +``` ### Installation and update @@ -6188,13 +6021,20 @@ To use Node.js Selector, install LVE Manager, LVE Utils and Fusion Passenger by running the following command: +Also, please install LVE Manager, LVE Utils and Phusion Passenger by running the following command:
``` -yum install lvemanager lve-utils ea-apache24-mod-alt-passenger +yum install lvemanager lve-utils ```
+ +Phusion Passenger could be installed by using **either** ```ea-ruby24-mod_passenger``` **or** ```ea-ruby27-mod_passenger```. ```ea-ruby27-mod_passenger``` is **not** compatible with systems running CloudLinux OS Shared 6. CloudLinux OS Shared 7 supports **both** ```ea-ruby24-mod_passenger``` and ```ea-ruby27-mod_passenger```. If your system runs CloudLinux OS Shared 8, you can **only** use ```ea-ruby27-mod_passenger```. + +:::tip Note +```ea-apache24-mod-alt-passenger``` is deprecated in favor of ```ea-ruby24-mod_passenger``` and ```ea-ruby27-mod_passenger``` +::: + For EasyApache 3:
@@ -6215,7 +6055,7 @@ If during Node.js Selector usage on cPanel servers you get "ENOMEM npm ERR! errn ::: -CloudLinux 7: +CloudLinux OS Shared 7:
``` @@ -6223,7 +6063,7 @@ systemctl restart cpanel.service ```
-CloudLinux 6: +CloudLinux OS Shared 6:
``` service cpanel restart @@ -6384,6 +6224,7 @@ In this case, there is no useful information for debugging errors and this is su ## Apache mod_lsapi PRO + ### General information and requirements mod_lsapi PRO is an [Apache HTTP Server](https://httpd.apache.org/) module based on [LiteSpeed Technologies API](https://www.litespeedtech.com/open-source/litespeed-sapi) . It serves to execute PHP scripts on a web-server by analogy with other modules like mod_suphp, php-fpm, mod_php. However, mod_lsapi PRO usage offers excellent PHP performance, low memory footprint coupled with great security and support for opcode caching. @@ -6421,7 +6262,7 @@ Currently, the mod_lsapi is not compatible with: * Installed and configured mod_hostinglimitsfor Apache ( **recommended - higher security level** ); * Installed mod_suexec for Apache and configured [SuExecUserGroup](https://httpd.apache.org/docs/2.4/mod/mod_suexec.html#page-header) directive for each virtual host ( **recommended - higher security level** ); * Enabled CageFS for end-users ( **recommended - higher security level** ); -* PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux; +* PHP Selector with alt-php - an easy way to select different PHP versions for each end-user provided by CloudLinux OS Shared; * ea-php - alternative to alt-php provided by cPanel (for cPanel only). ### Installation @@ -6806,13 +6647,16 @@ For installation guide mod_lsapi PRO please visit [Installation](/cloudlinux_os_ * [lsapi_backend_accept_notify](/cloudlinux_os_components/#lsapi-backend-accept-notify) * [lsapi_backend_pgrp_max_reqs](/cloudlinux_os_components/#lsapi-backend-pgrp-max-reqs) * [lsapi_backend_pgrp_max_crashes](/cloudlinux_os_components/#lsapi-backend-pgrp-max-crashes) +* [lsapi_backend_loglevel_info](/cloudlinux_os_components/#lsapi-backend-loglevel-info) +* [lsapi_backend_oom_score_adj](/cloudlinux_os_components/#lsapi-backend-oom-score-adj) +* [lsapi-server-tweak](/cloudlinux_os_components/#lsapi-server-tweak) Beta [Connection pool mode](/cloudlinux_os_components/#connection-pool-mode): * [lsapi_with_connection_pool](/cloudlinux_os_components/#lsapi-with-connection-pool) * [lsapi_backend_max_idle](/cloudlinux_os_components/#lsapi-backend-max-idle) * [lsapi_backend_max_reqs](/cloudlinux_os_components/#lsapi-backend-max-reqs) -[CRIU support (CloudLinux 7 only)](/cloudlinux_os_components/#criu-support-cloudlinux7-only): +[CRIU support](/cloudlinux_os_components/#criu-support-cloudlinux7-only): * [lsapi_criu](/cloudlinux_os_components/#lsapi-criu) * [lsapi_criu_socket_path](/cloudlinux_os_components/#lsapi-criu-socket-path) * [lsapi_criu_imgs_dir_path](/cloudlinux_os_components/#lsapi-criu-imgs-dir-path) @@ -6860,11 +6704,11 @@ Switching mod_lsapi handler on or off. #### **lsapi_socket_path** **Syntax** : lsapi_socket_path [path] -**Default** : lsapi_socket_path `/var/run/mod_lsapi` +**Default** : lsapi_socket_path `/var/mod_lsapi` **Context** : httpd.conf **Description:** -Path to backend lsphp sockets. By default `/var/run/mod_lsapi` +Path to backend lsphp sockets. By default `/var/mod_lsapi` --- @@ -6913,7 +6757,7 @@ Enable or disable output buffering on Apache level. Default value is On. **Description** : If a new HTTP request is coming to LSPHP daemon when all LSPHP workers are still busy, it can process this situation in two different ways. In REJECT mode LSPHP daemon will reject such request immediately. Otherwise, in legacy mode, LSPHP daemon will put this request into infinite queue, until one or more LSPHP daemon becomes free. When HTTP request is rejected in REJECT mode, mod_lsapi will write into Apache error_log the following message: Connect to backend rejected, and the client will receive 507 HTTP response. -By default LSPHP daemon in CloudLinux uses REJECT mode. It can be switched off with this option. +By default LSPHP daemon in CloudLinux OS Shared uses REJECT mode. It can be switched off with this option. --- @@ -6986,6 +6830,10 @@ Example: lsapi_set_env TMP "/var/lsphp-tmp" Note: PATH env var default "/usr/local/bin:/usr/bin:/bin" cannot be changed because of security reasons. To change it, use explicitly lsapi_set_env_path option. +:::tip Beta +When the `lsapi_server_tweak` option is switched `On`, this option can be used in the virtualhost context. +::: + --- #### **lsapi_set_env_path** @@ -6997,6 +6845,10 @@ To change it, use explicitly lsapi_set_env_path option. **Description** : Change PATH variable in the environment of lsPHP processes. Default path /usr/local/bin:/usr/bin:/bin will be used if not set. +:::tip Beta +When the `lsapi_server_tweak` option is switched `On`, this option can be used in the virtualhost context. +::: + --- #### **lsapi_backend_children** @@ -7006,10 +6858,13 @@ Change PATH variable in the environment of lsPHP processes. Default path /usr/lo **Context** : httpd.conf **Description** : -Sets env variable LSAPI_CHILDREN -Maximum number of simultaneously running child backend processes. -Optional, a default value is equal to EP. -min value is 2; max value is 10000. If var value is more, 10000 will be used. +Sets maximum number of simultaneously running child backend processes. Optional, a default directive value is equal to 120. LSAPI_CHILDREN environment variable is set according to the following rules: +* If NPROC and EP are unlimited, the directive value is used. +* If NPROC is set to any limited value and the directive value is set to a number less than NPROC-1, the directive value is used. +* If the value is bigger than NPROC-1 and EP is set to unlimited, NPROC-1 is used. +* If the value is bigger than NPROC-1 and EP is set to any limited value, EP+1 is used. + +For example, with the default lve settings NPROC=100 and EP=20, the effective LSAPI_CHILDREN will be EP+1, that is LSAPI_CHILDREN=21. --- @@ -7039,7 +6894,7 @@ Number of usec to wait while lsPHP starts (if not started on request). **Syntax** : lsapi_backend_max_process_time [number] **Default** : lsapi_backend_max_process_time 300 -**Context** : httpd.conf +**Context** : httpd.conf, virtualhost **Description** : Sets env variable LSAPI_MAX_PROCESS_TIME @@ -7066,7 +6921,7 @@ Should be more or equal to 0. **Syntax** : lsapi_backend_use_own_log On/Off **Default** : lsapi_backend_use_own_log Off -**Context** : httpd.conf, virtualhost, htaccess +**Context** : httpd.conf, virtualhost **Description** : Redirecting log output of backend processes from Apache error_log to dedicated log file or files, depending on value of lsapi_backend_common_own_log option. If Off, use Apache error log file for backend output, or separate file otherwise. @@ -7077,7 +6932,7 @@ Redirecting log output of backend processes from Apache error_log to dedicated l **Syntax** : lsapi_backend_common_own_log On/Off **Default** : lsapi_backend_common_own_log Off -**Context** : httpd.conf, virtualhost, htaccess +**Context** : httpd.conf, virtualhost **Description** : It will be used only when lsapi_backend_use_own_log set to On. On - backend processes of the all virtual hosts will share the common log file. Off - every virtual host will have its own backend log file. @@ -7130,6 +6985,44 @@ Controls how many crashes of its worker processes a control process will detect --- +#### **lsapi_backend_loglevel_info** + +**Syntax**: lsapi_backend_loglevel_info [On/Off] + +**Default**: lsapi_backend_loglevel_info Off + +**Context**: httpd.conf, virtualhost + +**Description**: Controls which log level will be used to write PHP warnings and notices into Apache’s error_log. Optional, the default value is `Off`. In that case `LOG_WARNING` log level will be used. Otherwise, with `On` value, `LOG_INFO` log level will be used. + +--- + +#### **lsapi_backend_oom_score_adj** + +**Syntax**: lsapi_backend_oom_score_adj [number] + +**Default**: lsapi_backend_oom_score_adj 0 + +**Context**: httpd.conf, virtualhost + +**Description**: This option can be used to apply **oom_score_adj** values for PHP processes created by mod_lsapi. Value is an integer in the -1000 to 1000 range. The lower the value, the lower the chance that the process will be killed. +When your server becomes low on free memory and an OOM killer is invoked then desirable that lsphp processes are sacrificed to free up memory. To do this, you need to set oom_score_adj to a large value. +For more information on setting value **oom_score_adj**, see the page [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) + +--- + +#### **lsapi_server_tweak** + +**Syntax**: lsapi_server_tweak [On/Off] + +**Default**: lsapi_server_tweak Off + +**Context**: httpd.conf + +**Description**: This option, when switched on, allows the use of `lsapi_set_env` and `lsapi_set_env_path` config options in the virtualhost context. + +--- + #### **Connection pool mode** #### **lsapi_with_connection_pool** @@ -7165,7 +7058,7 @@ It is relevant only with lsapi_with_connection_pool option switched on. Controls --- -#### **CRIU support (CloudLinux 7 only)** +#### **CRIU support** #### **lsapi_criu** @@ -7192,11 +7085,11 @@ Set path to socket for communication with criu service. Default: /var/run/criu/c #### **lsapi_criu_imgs_dir_path** **Syntax** : lsapi_criu_imgs_dir_path [path] -**Default** : lsapi_criu_imgs_dir_path /var/run/mod_lsapi/ +**Default** : lsapi_criu_imgs_dir_path /var/mod_lsapi/ **Context** : httpd.conf **Description** : -Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/run/mod_lsapi/ +Path to folder where images of freezed PHP will be stored. Should be path. Default: /var/mod_lsapi/ --- @@ -7776,7 +7669,7 @@ See also mod_lsapi PRO FAQ [here](https://cloudlinux.zendesk.com/hc/articles/360 :::tip Note - CloudLinux 7 only + CloudLinux OS Shared 7, CloudLinux OS Shared 7 Hybrid, and CloudLinux OS Shared 8 only ::: CRIU is _Checkpoint/Restore In Userspace_ , (pronounced kree-oo ), is a software tool for Linux operating system. Using this tool, you can freeze a running application (or part of it) and checkpoint it as a collection of files on disk. You can then use the files to restore the application and run it exactly as it was during the time of freeze (more information on the link [https://criu.org/Main_Page](https://criu.org/Main_Page) ). @@ -7791,7 +7684,7 @@ mod_lsapi-1.1-1 is the first beta version with freezing PHP implemented. mod_lsa |lsapi_backend_semtimedwait | Enable/disable flag for notification about lsphp started. This method avoid cycles of waiting for lsphp start. | On/Off | On | |lsapi_backend_initial_start | Number of request when lsphp should be freezed. | [number] 0 - no freezing | 0| |lsapi_criu_use_shm | Method of requests counting. Off - use shared memory. Signals - use signals from child processes to parent. | Off/Signals | Off | -|lsapi_criu_imgs_dir_path | Path to folder where imgs of freezed PHP will be stored. | [path] | /var/run/mod_lsapi/ | +|lsapi_criu_imgs_dir_path | Path to folder where imgs of freezed PHP will be stored. | [path] | /var/mod_lsapi/ | |lsapi_criu_debug | Enable/Disable CRIU related debug logging. | On/Off | Off | Example: @@ -7807,15 +7700,19 @@ lsapi_criu_debug Off ```
-When Apache module mod_lsapi detects CRIU enabled (lsapi_criu On) it prepares a directory for images (on the first request of virtualhost) to store ( lsapi_criu_imgs_dir_path /var/run/mod_lsapi/[dir_name] ), and starts lsphp process. Lsphp increases counter ( lsapi_criu_use_shm Off|Signals ) via shared memory or signals, when counter reaches limit ( lsapi_backend_initial_start 15 ), lsphp sends the request to CRIU for freezing. CRIU service makes images of requested processes. Lsphp will not be frozen if counter has not reached the limit. The next time when lsphp will be stopped, it will be unfrozen from the images. +When Apache module mod_lsapi detects CRIU enabled (lsapi_criu On) it prepares a directory for images (on the first request of virtualhost) to store ( lsapi_criu_imgs_dir_path /var/mod_lsapi/[dir_name] ), and starts lsphp process. Lsphp increases counter ( lsapi_criu_use_shm Off|Signals ) via shared memory or signals, when counter reaches limit ( lsapi_backend_initial_start 15 ), lsphp sends the request to CRIU for freezing. CRIU service makes images of requested processes. Lsphp will not be frozen if counter has not reached the limit. The next time when lsphp will be stopped, it will be unfrozen from the images. The images of the processes will be saved even if Apache is restarted. But all images will be deleted after server restart by default configuration. This can be modified by setting the new path lsapi_criu_imgs_dir_path . -**Important!** If php.ini or configuration file from php.d is changed, the images must be deleted manually. +:::warning Important! +If php.ini or configuration file from php.d is changed, the images must be deleted manually. +::: -**Note** that CRIU (version lower than criu-lve-3.6-1) can't correctly freeze lsphp with PrivateTmp enabled. For correct work, PrivateTmp must be false in httpd.service file . For disabling: +:::tip Note +CRIU (version lower than criu-lve-3.6-1) can't correctly freeze lsphp with PrivateTmp enabled. For correct work, PrivateTmp must be disabled in httpd.service file . +::: -Copy _httpd.service_ to _/etc/systemd/system_ and change there PrivateTmp: +To disable it, copy _httpd.service_ to _/etc/systemd/system_ and change there PrivateTmp:  
@@ -7858,9 +7755,9 @@ and ```
-**Installation** +#### CRIU Installation -Criu is installed with dependency to mod_lsapi-1.1 package. To activate it: +Criu is installed with dependency to mod_lsapi package. To activate it: 1. Enable service and start it: @@ -7894,7 +7791,7 @@ service httpd restart ```
- +#### CRIU Image Cleanup 1. An option added to the Apache configuration for cleaning all the images earlier saved by CRIU. @@ -7909,7 +7806,7 @@ It can be enabled by writing lsapi_reset_criu_on_apach Note that this option works only if lsapi_terminate_backends_on_exit is On (default value is On , it is set in _lsapi.conf_ too). -2. If you need to clean CRIU images for one user you can simply add file to the user's directory with CRIU images (default _/var/run/mod_lsapi/lsapi_ * _criu_imgs_ ). On the next restart of lsphp the images will be cleaned. +2. If you need to clean CRIU images for one user you can simply add file to the user's directory with CRIU images (default _/var/mod_lsapi/lsapi_ * _criu_imgs_ ). On the next restart of lsphp the images will be cleaned. 3. Global reset flag for cleaning all earlier saved images by CRIU. @@ -7956,7 +7853,7 @@ This mode is enabled by default and creates a separate lsphp process for each vi ## Additional integration components -CloudLinux uses various ways to integrate with existing system. +CloudLinux OS Shared uses various ways to integrate with existing system. ### LVE PAM module @@ -7992,6 +7889,10 @@ In this line: It is crucial to place all users that su or sudo to root into that group. Otherwise, once such user gains root, user will be inside LVE, and all applications restarted by that user will be inside that user LVE as well. ::: +:::tip Warning +Please do not add the `pam_lve.so` in the PAM configuration for sudo. It can affect user’s work with the resource usage plugin, and Python/Node.js/PHP selector plugins. +::: + For example, to enable LVE for SSH access, add that line to the `/etc/pam.d/sshd`. To enable LVE for SU, add that line to the `/etc/pam.d/su`. By default, module will not place users with group wheel into lve. If you want to use different group to define users that will not be placed into LVE by pam_lve - pass it as the 3rd argument. @@ -8035,7 +7936,7 @@ $ yum install lve-wrappers ``` -#### **Placing programs inside LVE** +#### Placing programs inside LVE LVE Wrappers provide two tools for placing programs inside LVE: `lve_wrapper` and `lve_suwrapper`. @@ -8085,10 +7986,11 @@ lve_suwrapper LVE_ID * `-f` - force namespace * `-n` - without namespace +* `-c` - remove CPU limits (requires `lve_wrapper` >= 2.1.2) ### MPM ITK -CloudLinux httpd RPM comes with MPM ITK built in. Yet, if you would like to build your own Apache, you need to apply our patch for MPM ITK +CloudLinux OS Shared httpd RPM comes with MPM ITK built in. Yet, if you would like to build your own Apache, you need to apply our patch for MPM ITK * Download file: [https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz](https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz) * Extract: apache2.2-mpm-itk-seculrelve12.patch @@ -8363,7 +8265,7 @@ SkipErrors Off |-|-| |**Description**| List of handlers that should be placed into LVE, support regexp| |**Syntax**|`AllowedHandlers cgi-script %^php% my-script`| -|**Default**| none| +|**Default**| cgi-script %php% fcgid-script application/x-miva-compiled| |**Context**| server config| This directive allows to list handlers which will be intercepted and placed into LVE. @@ -8405,6 +8307,34 @@ This directive allows to list handlers which will be intercepted and placed into ``` +The default modhostinglimits module configuration only handles cgi scripts and ignores static content like html files and images. +With the default configuration, an Apache server denial of service situation can occur when there are many requests for large html files and images. But on the other hand, processing all static files is unprofitable, since when processing many small files, the load average will increase significantly due to the overhead of entering/exiting lve. Therefore, it is better to enable processing only for a subset of static files based on criteria such as file location or file name extension using Apache directives as Location, Directory and Files. + +This functionality is available since version 1.0-40. + +In the following example, the module hostinglimits will process files for a URLs starting with weightcontent, for files with an .avi extension, and for files from the video subdirectory. + + ``` + + + SkipErrors Off + AllowedHandlers cgi-script %php% fcgid-script application/x-miva-compiled + + + AllowedHandlers * + + + + AllowedHandlers * + + + + AllowedHandlers * + + + + ``` + ***
@@ -8737,12 +8667,13 @@ Available for RPM based panels, EasyApache 4 and DirectAdmin. * [Manage reseller limits/users/packages via cPanel/WHM JSON API - JSONHandler](cloudlinux_os_components/#manage-reseller-limits-users-packages-via-cpanel-whm-json-api-jsonhandler) * [Using a WHM API token](/cloudlinux_os_components/#using-a-whm-api-token) -CloudLinux offers JSON API for [lvectl](/command-line_tools/#lvectl) via WHM. You can access it using the following URL: +CloudLinux OS Shared offers JSON API for [lvectl](/command-line_tools/#lvectl) and [cloudlinux-limits](/command-line_tools/#cloudlinux-limits) via WHM. You can access it using the following URL:
``` -https:/IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=list +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=list +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=get ```
@@ -8760,7 +8691,8 @@ The output will look as follows: ||| |-|-| |`cgiaction`|always `jsonhandler`| -|`handler`|should match [lvectl](/command-line_tools/#lvectl) command| +|`command`|`lvectl` or `cloudlinux-limits` (default `lvectl`)| +|`handler`|should match [lvectl](/command-line_tools/#lvectl) or [cloudlinux-limits](/command-line_tools/#cloudlinux-limits) command| For commands like `set`, `destroy` & `delete`, where you need to specify LVE (user) ID, like `lveid=500` (matches user ID 500). @@ -8769,11 +8701,13 @@ For commands like `set`, `destroy` & ``` -https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set&lveid=500&speed=30%&io=2048 +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=30%&io=2048 -https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set&lveid=500&speed=300Mhz&io=2048 +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=300Mhz&io=2048 -https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set&lveid=500&speed=3Ghz&io=2048 +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=lvectl&handler=set&lveid=500&speed=3Ghz&io=2048 + +https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=set&lveid=500&inodes=9090,8989 ```
@@ -8832,7 +8766,7 @@ If the limits for users are set with cPanel LVE Exten |set limits for package, created by reseller|`lvectl package-set res1_pack1 --reseller res1 --speed=88%`|`https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=package-set&lveid=res1_pack1&reseller=res1&speed=30%`| |set limits for user, created by reseller|`lvectl set-user r1user1 --reseller res1 --speed=77%`|`https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&speed=30%`| |set unlimited for user, created by reseller|`lvectl set-user r1user1 --reseller res1 --unlimited`|`https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi/CloudLinux.cgi?cgiaction=jsonhandler&handler=set-user&lveid=r1user1&reseller=res1&unlimited`| - +|set inodes limit|`cloudlinux-limits set --username=r1user1 --inodes=9090,8989`|`https://IP:2087/cpsess_YOURTOKEN/cgi/CloudLinux.cgi?cgiaction=jsonhandler&command=cloudlinux-limits&handler=set&username=r1user1&inodes=9090,8989`| #### Using a WHM API token You can use a WHM API token with curl as follows: @@ -8964,7 +8898,7 @@ alt-suexec package brings suEXEC binaries pre-compiled for specific locations, l **How to switch suEXEC with alt-suexec** -Based on httpd 2.2.16 basic for Cloudlinux 6, httpd 2.4.6 basic for CloudLinux 7 and httpd 2.4.37 basic for CloudLinux 8, the package brings to a server a set of suEXECs with different DOCUMENT ROOTs and MIN_UID/MIN_GID parameters. The first set of suEXECs is listed by such modes: +Based on httpd 2.2.16 basic for Cloudlinux OS Shared 6, httpd 2.4.6 basic for CloudLinux OS Shared 7 and httpd 2.4.37 basic for CloudLinux OS Shared 8, the package brings to a server a set of suEXECs with different DOCUMENT ROOTs and MIN_UID/MIN_GID parameters. The first set of suEXECs is listed by such modes:
@@ -9016,7 +8950,7 @@ USE_HOME ```
-Here is standard suEXEC for CloudLinux 6 clean server: +Here is standard suEXEC for CloudLinux OS Shared 6 clean server:
``` @@ -9079,36 +9013,63 @@ If you need suEXEC with custom parameters absent in current set of alt-suexec, p Recently, cPanel added support for the [Nginx](https://documentation.cpanel.net/display/CKB/Nginx) web server and for [Python](https://documentation.cpanel.net/display/CKB/How+to+Install+a+Python+WSGI+Application) and [Node.js](https://documentation.cpanel.net/display/CKB/How+to+Install+a+Node.js+Application) applications. -We have checked the compatibility of ea-nginx and cPanel application Selectors with CloudLinux LVE and CageFS. +We have checked the compatibility of ea-nginx and cPanel application Selectors with CloudLinux OS Shared LVE and CageFS. All tests passed successfully and all processes started by ea-nginx and cPanel selectors are launched inside LVE and CageFS. -Don’t forget, you can use Ruby/Python/Node.js Selectors from CloudLinux. Here you can find a large number of supported versions for Ruby/Python/Node.js applications. +Don’t forget, you can use Ruby/Python/Node.js Selectors from CloudLinux OS Shared. Here you can find a large number of supported versions for Ruby/Python/Node.js applications. -* [CloudLinux Python Selector](/cloudlinux_os_components/#python-selector) -* [CloudLinux Ruby Selector](/cloudlinux_os_components/#ruby-selector) -* [CloudLinux NodeJS Selector](/cloudlinux_os_components/#node-js-selector) +* [CloudLinux OS Shared Python Selector](/cloudlinux_os_components/#python-selector) +* [CloudLinux OS Shared Ruby Selector](/cloudlinux_os_components/#ruby-selector) +* [CloudLinux OS Shared NodeJS Selector](/cloudlinux_os_components/#node-js-selector) :::tip Note Nginx support is currently experimental. ::: +### How to use Certbot with alt-python36 + +To run Certbot with `alt-python36`, follow the next steps: + +1. Add a path to the `alt-python36` in the environment variable `PATH` as the first element: `/opt/alt/python36/bin/`. +2. Run Certbot with the `--no-bootstrap` parameter. + +**Example:** + +The old command to run Certbot on CentOS 6/Cloudlinux OS Shared 6: + +
+ +``` +# certbot-auto --nginx +``` +
+ +The new command to run Certbot on CentOS 6/CloudLinux OS Shared 6: + +
+ +``` +# PATH="/opt/alt/python36/bin/:$PATH" certbot-auto --no-bootstrap --nginx +``` +
+ ## Apache suexec module ### General information and requirements -* [How does it work with CloudLinux?](/cloudlinux_os_components/#how-does-it-work-with-cloudlinux) +* [How does it work with CloudLinux OS Shared?](/cloudlinux_os_components/#how-does-it-work-with-cloudlinux-os-shared) 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? +#### How does it work with CloudLinux OS Shared? -The DirectAdmin and CloudLinux (for httpd, httpd24-httpd and cPanel EasyApache 4) both provide a patched version of suexec. For other distributions you can use patches available here: +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](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 patch adds the ability to run that script under CageFS. +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. :::tip NOTE Therefore, this module is necessary for the proper work of PHP Selector. ::: @@ -9202,8 +9163,7 @@ 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 by default. +This module is integrated into httpd Apache rpm provided by Cloudlinux OS Shared by default. If you are using an alternative Apache - [httpd24](https://www.cloudlinux.com/cloudlinux-os-blog/entry/httpd24-updated-for-cloudlinux-6), nothing has to be done as this module is also integrated into httpd24-httpd Apache rpm provided by Cloudlinux by default. - diff --git a/docs/cloudlinux_os_kernel/README.md b/docs/cloudlinux_os_kernel/README.md index b1b260651..89300a21a 100644 --- a/docs/cloudlinux_os_kernel/README.md +++ b/docs/cloudlinux_os_kernel/README.md @@ -1,7 +1,10 @@ -# CloudLinux OS kernel +# 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](https://changelog.cloudlinux.com/). * [Hybrid Kernels](/cloudlinux_os_kernel/#hybrid-kernels) -* [SecureLinks](/cloudlinux_os_kernel/#securelinks) +* [SecureLinks and Link Traversal Protection](/cloudlinux_os_kernel/#securelinks-and-link-traversal-protection) * [File change API](/cloudlinux_os_kernel/#file-change-api) * [Tuned-profiles-cloudlinux](/cloudlinux_os_kernel/#tuned-profiles-cloudlinux) * [Kernel config variables](/cloudlinux_os_kernel/#kernel-config-variables) @@ -15,252 +18,136 @@ * [OOM killer for LVE processes](/cloudlinux_os_kernel/#oom-killer-for-lve-processes) * [File system quotas](/cloudlinux_os_kernel/#file-system-quotas) * [Enter LVE when using cPanel utilities](/cloudlinux_os_kernel/#enter-lve-when-using-cpanel-utilities) +* [Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver](/cloudlinux_os_kernel/#proactive-reporting-kernel-crash-events-with-sentry-and-kernel-panic-receiver) ## Hybrid Kernels -**CloudLinux 6 Hybrid kernel** - - CloudLinux 6 Hybrid Kernel is CloudLinux 7 (3.10.0) kernel compiled for CloudLinux 6 OS. New 3.10 kernel features a set of performance and scalability improvements related to IO , networking and memory management, available in CloudLinux 7 OS . It also features improved CPU scheduler for better overall system throughput and latency. - -Please find information on the main features of 3.10 kernel branch on the links: - -[https://kernelnewbies.org/Linux_3.10#head-e740f930dfd021616cc42e8abf21c79d0b07e217](https://kernelnewbies.org/Linux_3.10#head-e740f930dfd021616cc42e8abf21c79d0b07e217) - -[https://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.10.1](https://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.10.1) - - **CloudLinux 7 Hybrid kernel** - - CloudLinux 7 Hybrid Kernel is essentially EL8-based (4.18) kernel compiled for CloudLinux OS 7. +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. -You can find more information on 4.18 kernel branch using this link: - -[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/8.0_release_notes/new-features#kernel](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/8.0_release_notes/new-features#kernel) - - **CloudLinux 8 kernel** - -You can find more information about CloudLinux 8 kernel features [here](/cloudlinux_installation/#cloudlinux-8-kernel-related-features-and-improvements) - -#### How to migrate from the normal to hybrid channel (**CL6h**): +#### How to migrate from the normal kernel to hybrid one ::: tip Note -The system must be registered in CLN. +The system must have an active CloudLinux OS license ::: - -1. Update rhn-client-tools from production - -2. Run normal-to-hybrid script. - -3. Reboot after script execution is completed. - -
- -``` -yum update rhn-client-tools -normal-to-hybrid -reboot -``` -
- -#### How to migrate from the normal to hybrid channel (**CL7h**): - -::: tip Note -The system must be registered in CLN. +:::warning Warning +If you use `yum-plugin-protectbase`, please make sure it is disabled before stating the normal-to-hybrid script. ::: - -1. Update rhn-client-tools rhn-check rhn-setup from testing repository - -2. Run normal-to-hybrid script. - -3. Reboot after script execution is completed. - -
+You should perform the following commands: ``` -yum update rhn-client-tools rhn-check rhn-setup +yum update normal-to-hybrid -reboot ``` -
- -#### How to migrate from hybrid to the normal channel (for both CL6h and CL7h): +Then if the script execution is completed without errors - perform the server reboot. ::: tip Note -The system should be registered in CLN. -::: - - -1. Run hybrid-to-normal script. - -2. Reboot after script execution is completed. - -
- +You can always migrate from the hybrid kernel to normal one with the following commands: ``` +yum update hybrid-to-normal -reboot ``` -
- -**Known limitations and issues of CloudLinux 6 Hybrid kernel** - -1. We do not remove Hybrid kernel after migration from Hybrid to the normal channel, but we remove linux-firmware package which is needed to boot Hybrid kernel. This is because CloudLinux 6 does not allow to remove the package of currently running kernel. Proper removal procedure will be implemented, but for now, we should warn users _not to boot Hybrid kernel if they have migrated to normal channel_. - -2. Kernel module signature isn't checking for now, as 3.10 kernel is using x509 certificates to generate keys and CL6 cannot detect signatures created in such way. The solution will be implemented. - -**Known limitations and issues of CloudLinux 7 Hybrid kernel** - -Features that are absent in the current kernel build: - -* Per LVE traffic accounting +::: -Note that Symlink Owner Match Protection is enabled by default in CL7 Hybrid kernel. To disable it, use `sysctl` utility: +#### Known limitations and issues of hybrid kernels -
+**CloudLinux OS Shared 6 Hybrid kernel** -``` -sysctl -w fs.enforce_symlinksifowner=0 -``` -
+1. We do not remove Hybrid kernel after migration from Hybrid to the normal channel, but we remove linux-firmware package which is needed to boot Hybrid kernel. This is because CloudLinux OS Shared 6 does not allow to remove the package of currently running kernel. Thus please don't reboot the server back to Hybrid kernel after you remove it. -Find more details on [symlink owner match protection](/cloudlinux_os_kernel/#securelinks). +2. Kernel module signature isn't checking for now, as 3.10 kernel is using x509 certificates to generate keys and CloudLinux OS Shared 6 cannot detect signatures created in such way. +## SecureLinks and Link Traversal Protection -## SecureLinks - - -CloudLinux provides comprehensive protection against symbolic link attacks popular in shared hosting environment. +::: tip Note +Link Traversal Protection is disabled by default for the CloudLinux OS Shared. +::: -The protection requires setting multiple kernel options to be enabled. +CloudLinux OS Shared and CloudLinux OS Admin provides comprehensive protection against +symbolic link attacks popular in shared hosting environment. -### Symlink owner match protection +The protection requires setting multiple kernel parameters to be enabled: +**SecureLinks:** * [fs.enforce_symlinksifowner](/cloudlinux_os_kernel/#fs-enforce-symlinksifowner) * [fs.symlinkown_gid](/cloudlinux_os_kernel/#fs-symlinkown-gid) + +**Link Traversal Protection:** +* [fs.protected_symlinks_create](/cloudlinux_os_kernel/#fs-protected-symlinks-create) * [fs.process_symlinks_by_task](/cloudlinux_os_kernel/#fs-process-symlinks-by-task) +Please reffer to [this article](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/configuring-kernel-parameters-at-runtime_managing-monitoring-and-updating-the-kernel#doc-wrapper) in order to know how to setup these parameters. -#### fs.enforce_symlinksifowner +#### **fs.enforce_symlinksifowner** To protect against symlink attack where attacker tricks Apache web server to read some other user PHP config files, or other sensitive file, enable: -
``` fs.enforce_symlinksifowner=1 ``` -
-Setting this option will deny any process running under gid _fs.symlinkown_gid_ to follow the symlink if owner of the link doesn’t match the owner of the target file. +Setting this parameter will deny any process running under gid _fs.symlinkown_gid_ to follow the symlink if owner of the link doesn’t match the owner of the target file. Defaults: -
``` fs.enforce_symlinksifowner = 1 fs.symlinkown_gid = 48 ``` -
| | | |-|-| | _fs.enforce_symlinksifowner = 0_ | do not check symlink ownership| -| _fs.enforce_symlinksifowner = 1_ | deny if symlink ownership doesn’t match target, and process gid matches _symlinkown_gid _ | +| _fs.enforce_symlinksifowner = 1_ | deny if symlink ownership doesn’t match target, and process gid matches _symlinkown_gid| When _fs.enforce_symlinksifowner_ set to 1, processes with GID 48 will not be able to follow symlinks if they are owned by user1 , but point to file owned user2 . -Please, note that _fs.enforce_symlinksifowner = 2_ is deprecated and can cause issues for the system operation. - +:::tip Note +_fs.enforce_symlinksifowner = 2_ is deprecated and can cause issues for the system operation. +::: -#### fs.symlinkown_gid +##### **fs.symlinkown_gid** -On standard RPM Apache installation, Apache is usually running under GID 48. -On cPanel servers, Apache is running under user nobody, GID 99. +On standard Apache installation, this webserver is usually running under GID 48. +On cPanel servers, Apache is running under user nobody, GID 99. -To change GID of processes that cannot follow symlink , edit the file _/etc/sysctl.conf_ , add the line: -
+To change GID of processes that cannot follow symlink, edit the file _/etc/sysctl.conf_ , add the line: ``` fs.symlinkown_gid = XX ``` -
+ And execute: -
``` $ sysctl -p ``` -
- -To disable symlink owner match protection feature, set _fs.enforce_symlinksifowner = 0_ in _/etc/sysctl.conf_ , and execute -
+To disable symlink owner match protection feature, set _fs.enforce_symlinksifowner = 0_ in _/etc/sysctl.conf_ , and execute: ``` $ sysctl -p ``` -
- -::: danger -/proc/sys/fs/global_root_enable [CloudLinux 7 and 7 hybrid kernels only] [applicable for kernels 3.10.0-427.36.1.lve1.4.42+ and CloudLinux 7 Hybrid with lve-kmod 2.0-11+ ] -::: - - _proc/sys/fs/global_root_enable_ flag enables following the symlink with root ownership. If _global_root_enable=0_ , then Symlink Owner Match Protection does not verify the symlink owned by root. - -For example, in the path _/proc/self/fd_ , _self_ is a symlink , which leads to a process directory.  The symlink owner is root . When _global_root_enable=0_ , Symlink Owner Match Protection excludes this element from the verification. When _global_root_enable=1_ , the verification will be performed, which could block the access to _fd_ and cause violation of web site performance. - -It is recommended to set _/proc/sys/fs/global_root_enable=0_ by default. If needed, set _/proc/sys/fs/global_root_enable=1_ to increase the level of protection. ::: tip Note -Starting from lve-utils 3.0-21.2, fs.symlinkown_gid parameter values for httpd service user and fs.proc_super_gid for nagios service user is written to /etc/sysctl.d/90-cloudlinux.conf. +_fs.symlinkown_gid_ parameter values for httpd service user and _fs.proc_super_gid_ for nagios service user is written to _/etc/sysctl.d/90-cloudlinux.conf_. ::: -#### fs.process_symlinks_by_task - -To protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. - -When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID. - -To enable (the default value) the protection for CloudLinux 7 hybrid, set the `fs.process_symlinks_by_task` parameter to 1: -
- -``` -fs.process_symlinks_by_task=1 -``` -
- -To disable the protection for CloudLinux 7 hybrid, set the `fs.process_symlinks_by_task` parameter to 0: -
- -``` -fs.process_symlinks_by_task=0 -``` -
- - - -### Link traversal protection - -* [Known issues with fs.protected_symlinks_create=1 on cPanel servers](/cloudlinux_os_kernel/#known-issues-with-fs-protected-symlinks-create-1-on-cpanel-servers) - +#### **fs.protected_symlinks_create** :::warning Warning When used outside CageFS (from cPanel tools for instance), `fs.protected_symlinks_create` isn't sufficient for symlink protection. To fully protect symlink access in this case, use `fs.process_symlinks_by_task=1` in addition to `fs.protected_symlinks_create=1`. ::: -:::tip Note -`fs.process_symlinks_by_task` is only available for CloudLinux 7 Hybrid for now and supports cPanel only. -::: - - [CageFS](/cloudlinux_os_components/#cagefs) is extremely powerful at stopping most information disclosure attacks, where a hacker could read sensitive files like _/etc/passwd_ . Yet, CageFS does not work in each and every situation. For example, on cPanel servers, it is not enabled in WebDAV server, cPanel file manager and webmail, as well as some FTP servers don’t include proper change rooting. This allows an attacker to create symlink or hardlink to a sensitive file like _/etc/passwd_ and then use WebDAV , filemanager, or webmail to read the content of that file. -Starting with CL6 _kernel 2.6.32-604.16.2.lve1.3.45_, you can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own. +You can prevent such attacks by preventing user from creating symlinks and hardlinks to files that they don’t own. This is done by set following kernel options to 1:
@@ -273,7 +160,35 @@ fs.protected_hardlinks_create = 1 ::: danger We do not recommend to use protected_symlinks option for cPanel users as it might break some of the cPanel functionality. -::: +Please read the known issues section before enabling this feature. +::: + +* [Known issues with fs.protected_symlinks_create=1 on cPanel servers](/cloudlinux_os_kernel/#known-issues-with-fs-protected-symlinks-create-1-on-cpanel-servers) + +#### **fs.process_symlinks_by_task** + +::: tip Note +This option only available on CloudLinux 7 Hybrid or on CloudLinux 8 Shared and Admin editions. +Also please note that this feature is available for cPanel only. +::: + +This parameter is needed to protect against symlink vulnerability where an attacker might get access to files out of the CageFS via cPanel tools: File Manager, WebDAV, Webmail, etc. When a symlink is accessed from cPanel tools (non-root user case) we check whether the current process UID matches the symlink target UID. + +To enable the protection for CloudLinux OS Shared , set the `fs.process_symlinks_by_task` parameter to 1: +
+ +``` +fs.process_symlinks_by_task=1 +``` +
+ +To disable the protection for CloudLinux OS Shared 7 hybrid, set the `fs.process_symlinks_by_task` parameter to 0: +
+ +``` +fs.process_symlinks_by_task=0 +``` +
#### Known issues with fs.protected_symlinks_create=1 on cPanel servers @@ -302,7 +217,7 @@ Permission denied. /bin/tar: .cagefs/tmp/.s.PGSQL.5432: Cannot create symlink to ```
- Any backup for accounts (including cPanel backup) cannot be extracted. +Any backup for accounts (including cPanel backup) cannot be extracted. * `dmesg` is flooded with the `may_create_sym_link` messages like: @@ -311,53 +226,10 @@ Permission denied. /bin/tar: .cagefs/tmp/.s.PGSQL.5432: Cannot create symlink to ``` may_create_sym_link: can't find ea-phpXX in cron may_create_sym_link: can't find ea-phpXX in ea-php-cli -etc ```
- It's popping up each second and may increase the size of the `/var/log/messages` file. - - -::: tip Note -Link Traversal Protection is disabled by default for the new CloudLinux OS installations/convertations. -::: - -
- -``` -fs.protected_symlinks_create = 0 -fs.protected_hardlinks_create = 0 -``` -
-Then setup: -
- -``` -fs.protected_symlinks_allow_gid = id_of_group_linksafe -fs.protected_hardlinks_allow_gid = id_of_group_linksafe -``` -
-This is for example needed by PHP Selector to work (new versions of Alt-PHP can already correctly configure those settings). - -To manually adjust the settings, edit: _/etc/sysctl.d/cloudlinux-linksafe.conf_ -and execute: -
- -``` -sysctl -p /etc/sysctl.d/cloudlinux-linksafe.conf -``` -
- or: -
- -``` -sysctl --system -``` -
- -:::tip Note -Starting from lvemanager 4.0-25.5, if there is no /etc/sysctl.d/cloudlinux-linksafe.conf config file, selectorctl for PHP with --setup-without-cagefs and --revert-to-cagefs keys writes fs.protected_symlinks_create and fs.protected_hardlinks_create parameters to /etc/sysctl.d/90-cloudlinux.conf. -::: +It's popping up each second and may increase the size of the `/var/log/messages` file. ## File change API @@ -365,10 +237,9 @@ Starting from lvemanager 4.0-25.5, if there is no /etc/sysctl.d/cloudlinux-links **General description** - One of the main problems on a shared hosting system for file backup operations is to figure out which files have changed. Using INOTIFY on a 1T drive with a large number of small files and directories guarantees slow startup times, and a lot of context switching between kernel and userspace - generating additional load. On the other hand scanning disk for newly modified files is very IO intensive, and can kill the performance of the fastest disks. -**CloudLinux approach** +**CloudLinux OS Shared approach** CloudLinux File Change API is a kernel level technology with the user space interface that buffers lists of modified files in the kernel and then off-loads that list to user space daemon. @@ -378,7 +249,6 @@ The software is very simple to use and produces the list of modified files. As ### Usage and integration - **Userland utilities** /usr/bin/cloudlinux-backup-helper is a utility for getting the list of changed files. @@ -460,7 +330,7 @@ Kernel Version: 3.10.0-427.36.1.lve1.4.47 To install cloudlinux-fchange system run: -_CloudLinux 7:_ +_CloudLinux OS Shared 7:_
``` @@ -468,7 +338,7 @@ yum install cloudlinux-fchange --enablerepo=cloudlinux-updates-testing ```
-_CloudLinux 6 Hybrid:_ +_CloudLinux OS Shared 6 Hybrid:_
@@ -485,7 +355,7 @@ Database containing list of modified files is located at kernel-exposed data are in place. To start daemon: -_CloudLinux 7:_ +_CloudLinux OS Shared 7:_
@@ -494,7 +364,7 @@ systemctl start cloudlinux-file-change-collector ```
-_CloudLinux 6 Hybrid:_ +_CloudLinux OS Shared 6 Hybrid:_
@@ -504,7 +374,7 @@ service cloudlinux-file-change-collector start
To stop daemon: -_CloudLinux 7:_ +_CloudLinux OS Shared 7:_
@@ -513,7 +383,7 @@ systemctl stop cloudlinux-file-change-collector ```
-_CloudLinux 6 Hybrid:_ +_CloudLinux OS Shared 6 Hybrid:_
@@ -634,7 +504,7 @@ The kernel exposes the functionality to /proc/sys/fs/datacycle/ folder. The **_tuned-profiles-cloudlinux_** package brings a range of kernel under-the-hood tunings to address high LA, iowait issues what were detected earlier on particular users deploys. The package also encloses OOM adjustments to prioritize the elimination of overrun PHP, lsphp, Phusion Passenger workers processes over other processes (e.g. ssh, a cron job). -There are three profiles provided by CloudLinux: +There are three profiles provided by CloudLinux OS Shared:
``` @@ -675,7 +545,7 @@ UBC parameters set the limits for the containers: ubc.dirty_ratio=100 - Defines maximum RAM percentage for dirty memory pages. dirty_background_ratio=75 - Defines RAM percentage when to allow writing dirty pages on the disk. -3. _[CloudLinux 7 only]_ Detects used disk types and changes elevator to 'deadline' for HDD and to 'noop' for SSD in /sys/block/[blockname]/queue/scheduler . +3. _[CloudLinux OS Shared 7 only]_ Detects used disk types and changes elevator to 'deadline' for HDD and to 'noop' for SSD in /sys/block/[blockname]/queue/scheduler . ::: tip Note The script uses /sys/block/[blockname]/queue/rotational flag, some RAID controllers can not set it properly. For example, SSD used for RAID but rotational is set to 1 by RAID driver. As a workaround add the following to /etc/rc.d/rc.local to make it applied on boot: @@ -700,7 +570,7 @@ chmod +x /etc/rc.d/rc.local ```
-4. _[CloudLinux 7 only]_ The profile sets I/O scheduler. For the normal discs the Deadline Scheduler is set to improve IO performance and decrease IO latency, for SSD - noop. +4. _[CloudLinux OS Shared 7 only]_ The profile sets I/O scheduler. For the normal discs the Deadline Scheduler is set to improve IO performance and decrease IO latency, for SSD - noop. When configuring scheduler I/O queue is changed and set to the value 1024 which improves overall I/O subsystem performance by caching IO requests in memory. 5. Disables transparent HugePage . @@ -737,9 +607,9 @@ tuned-adm off ## Kernel config variables -Starting from **lvemanager 4.0-25.5**, **lve-utils 3.0-21.2**, and **cagefs-6.1-26**, CloudLinux OS utilities can read/write kernel config variables from a custom config /etc/sysctl.d/90-cloudlinux.conf (earlier, the parameters were read/written only from sysctl.conf ). +Starting from **lvemanager 4.0-25.5**, **lve-utils 3.0-21.2**, and **cagefs-6.1-26**, CloudLinux OS Shared utilities can read/write kernel config variables from a custom config /etc/sysctl.d/90-cloudlinux.conf (earlier, the parameters were read/written only from sysctl.conf ). -CloudLinux OS utilities get parameter by using `sysctl` system utility. So for now, even if a config variable is not set in the `sysctl.conf` and in the `/etc/sysctl.d` config files, this variable will be read by `sysctl` utility directly from `/proc/sys`. +CloudLinux OS Shared utilities get parameter by using `sysctl` system utility. So for now, even if a config variable is not set in the `sysctl.conf` and in the `/etc/sysctl.d` config files, this variable will be read by `sysctl` utility directly from `/proc/sys`. If you changed some kernel variables in `/etc/sysctl.d/90-cloudlinux.conf` you need to apply these changes to the kernel parameter by running the command: @@ -762,6 +632,7 @@ Variables setting guidelines are the same as for CageFS (see above). As requested by some our customers, we've implemented a new kernel setting to hide `/proc/net/{tcp,udp,unix}` files for additional security/isolation. You can hide them by runnign `sysctl -w kernel.proc_disable_net=1` command, and by default, it's `0` (nothing hidden). +Currently this is implemented for CloudLinux OS Shared 7 only. ## Virtualized /proc filesystem @@ -796,7 +667,7 @@ Starting from **lve-utils v.4.2.0-1**, when installing (not updating) the `lve-u If a group was created in the `fs.proc_super_gid` earlier all stays the same. -Virtualized /proc filesystem will only display following files (as well as directories for PIDs for the user) to unprivileged users: +Virtualized /proc filesystem in CloudLinux OS Shared 8/CloudLinux OS Shared 7 hybrid will display all files to unprivileged users. But unprivileged users will have access only to the following files (as well as directories for PIDs for the user):
``` @@ -810,17 +681,17 @@ Virtualized /proc filesystem will only display following files (as well as direc /proc/cmdline /proc/meminfo /proc/mounts -/proc/tcp -/proc/tcp6 -/proc/udp -/proc/udp6 -/proc/assocs -/proc/raw -/proc/raw6 -/proc/unix -/proc/dev +/proc/net/tcp +/proc/net/tcp6 +/proc/net/udp +/proc/net/udp6 +/proc/net/assocs +/proc/net/raw +/proc/net/raw6 +/proc/net/unix +/proc/net/dev ``` -
+
:::tip Note Starting from lve-utils 3.0-21.2, fs.proc_super_gid parameter in da_add_admin utility is written to /etc/sysctl.d/90-cloudlinux.conf. @@ -881,7 +752,7 @@ to apply `/etc/fstab` changes. Nevertheless, we recommend to manage procfs mount options via `/etc/sysctl.conf` as described above for backward compatibility. ::: tip Note -There is a known issue on CloudLinux 6 systems. User cannot see full /proc inside CageFS even when this user is in “super” group, that should see full /proc. This issue does not affect users with CageFS disabled. CloudLinux 7 is not affected. +There is a known issue on CloudLinux OS Shared 6 systems. User cannot see full /proc inside CageFS even when this user is in “super” group, that should see full /proc. This issue does not affect users with CageFS disabled. CloudLinux OS Shared 7 is not affected. ::: ::: tip Note @@ -892,12 +763,29 @@ Starting from lve-utils 3.0-21.2, lve_namespaces service can read parameters fro Even if fs.proc_can_see_other_uid and fs.proc_super_gid parameters are not set in config files but specified in /proc/sys, then when restarting lve_namespaces service the parameters from /proc/sys will be used. So, /proc will be remounted according to these parameters. ::: +### Remounting procfs on CloudLinux OS Shared 8 + +On CloudLinux OS Shared 8, starting from the kernel version `4.18.0-193.28.1.lve1.el8.x86_64` remounting is controlled by the kernel. + +As before, admins are able to change the settings `fs.proc_can_see_other_uid` and `fs.proc_super_gid` in the `/etc/sysctl.d/90-cloudlinux.conf` or `/etc/sysctl.conf`. + +To apply changes, execute the following command: + +``` +sysctl --system +``` + +It is no longer needed to manually run the `/usr/share/cloudlinux/remount_proc.py` to remount `/proc`. + +::: tip Note +On Cloudlinux OS Shared 8, changing the `/etc/fstab` file for setting `/proc` remounting with the `hidepid=` option **will not cause any effect** as remounting is totally controlled by the kernel and depends on the `fs.proc_can_see_other_uid` option. +::: ## Ptrace block -Starting with kernel 3.10.0-427.18.s2.lve1.4.21 ( CloudLinux 7) and 2.6.32-673.26.1.lve1.4.17 ( CloudLinux 6) we re-implemented ptrace block to protect against ptrace family of vulnerabilities. It prevents end user from using any ptrace related functionality, including such commands as strace, lsof or gdb . +Starting with kernel 3.10.0-427.18.s2.lve1.4.21 ( CloudLinux OS Shared 7) and 2.6.32-673.26.1.lve1.4.17 ( CloudLinux OS Shared 6) we re-implemented ptrace block to protect against ptrace family of vulnerabilities. It prevents end user from using any ptrace related functionality, including such commands as strace, lsof or gdb . -By default, CloudLinux doesn't prevent ptrace functionality. +By default, CloudLinux OS Shared doesn't prevent ptrace functionality. Defaults:
@@ -942,18 +830,18 @@ ptrace protection is known to break PSA service for Plesk 11 By adding xen_blkfront.sda_is_xvda=0 to kernel boot line in grub.conf you will make sure no naming translation is done, and the drives will be identified as xvde . By default, this option is set to 1 in the kernel, and drives are detected as xvda . -This is needed only for CloudLinux 6 and Hybrid kernels. +This is needed only for CloudLinux OS Shared 6 and Hybrid kernels. ## Umask behavior :::tip Note -CloudLinux 6, CloudLinux 6 hybrid, CloudLinux 7, CloudLinux 7 hybrid kernels. +CloudLinux OS Shared 6, CloudLinux OS Shared 6 hybrid, CloudLinux OS Shared 7, CloudLinux OS Shared 7 hybrid kernels. ::: Starting from the kernel module **lve-kmod-2.0-10**, the behavior of umask is changed. Now, when entering LVE task's original umask value is preserved, instead of using LVE's umask value. -This behavior is typical for all kernels: CloudLinux 6, CloudLinux 6 hybrid, CloudLinux 7, CloudLinux 7 hybrid kernels. +This behavior is typical for all kernels: CloudLinux OS Shared 6, CloudLinux OS Shared 6 hybrid, CloudLinux OS Shared 7, CloudLinux OS Shared 7 hybrid kernels. ## IO limits latency @@ -964,7 +852,7 @@ By defining IO latency, you can make sure that no pro This option is OFF by default. -_For CloudLinux 6 and CloudLinux 7 (since Hybrid kernel lve1.4.x.el5h):_ +_For CloudLinux OS Shared 6 , CloudLinux OS Shared 7, CloudLinux OS Shared 8 (kmodlve 2.1-2 and later):_ To enable IO Limits latency and set it to 10 seconds:
@@ -985,7 +873,7 @@ It is possible to set, for example, 1000 as a permanent value. To do so, create `options kmodlve latency=1000` -_For CloudLinux 5 (OBSOLETE):_ +_For CloudLinux OS Shared 5 (OBSOLETE):_ To enable IO Limits latency and set it to 10 seconds:
@@ -1005,7 +893,7 @@ To disable latency: ## Reading LVE usage -CloudLinux kernel provides real time usage data in file. +CloudLinux OS Shared kernel provides real time usage data in file. All the statistics can be read from that file in real time. Depending on your kernel version you will get either Version 6 of the file, or version 4 of the file. You can detect the version by reading the first line of the file. It should look like: @@ -1054,12 +942,12 @@ Version 6 (CL6 & hybrid kernels): ## Flashcache :::tip Note -Available only for x86_64, CloudLinux 6 and Hybrid servers +Available only for x86_64, CloudLinux OS Shared 6 and Hybrid servers ::: Flashcache is a module originally written and released by Facebook (Mohan Srinivasan, Paul Saab and Vadim Tkachenko ) in April of 2010. It is a kernel module that allows Writethrough caching of a drive on another drive. This is most often used for caching a rotational drive on a smaller solid-state drive for performance reasons. This gives you the speed of an SSD and the size of a standard rotational drive for recently cached files. Facebook originally wrote the module to speed up database I/O , but it is easily extended to any I/O . -To install on CloudLinux 6 & Hybrid servers: +To install on CloudLinux OS Shared 6 & Hybrid servers:
``` @@ -1075,11 +963,15 @@ More info on flashcache : [https://github.com ## OOM killer for LVE processes -When LVE reaches its memory limit, the processes inside that LVE are killed by OOM Killer and appropriate message is written to /var/log/messages . When any LVE hits huge number of memory limits in short period of time, then OOM Killer could cause system overload. Starting from kernel 2.6.32-673.26.1.lve1.4.15 ( CloudLinux 6) and from kernel 3.10.0-427.18.2.lve1.4.14 ( CloudLinux 7) heavy OOM Killer could be disabled. If so - lightweight SIGKILL will be used instead. +When LVE reaches its memory limit, the processes inside that LVE are killed by OOM Killer and appropriate message is written to /var/log/messages . When any LVE hits huge number of memory limits in short period of time, then OOM Killer could cause system overload. Starting from kernel 2.6.32-673.26.1.lve1.4.15 ( CloudLinux OS Shared 6) and from kernel 3.10.0-427.18.2.lve1.4.14 ( CloudLinux OS Shared 7) heavy OOM Killer could be disabled. If so - lightweight SIGKILL will be used instead. + +:::tip Note +It is recommended to disable OOM killer for LVE processes and use SIGKILL instead +::: By default OOM Killer is enabled, to disable it please run: -_For CloudLinux 6_ : +_For CloudLinux OS Shared 6_ :
``` @@ -1095,7 +987,8 @@ ubc.ubc_oom_disable=1 ```
-_For CloudLinux 7:_ +_For CloudLinux OS Shared 7:_ +
``` @@ -1104,6 +997,7 @@ _For CloudLinux 7:_
Also, add the following to `/etc/sysctl.conf` file to apply the same during boot: +
``` @@ -1118,6 +1012,7 @@ kernel.memcg_oom_disable=1 In **Ext4** file system, the process with enabled capability CAP_SYS_RESOURCE is not checked on the quota exceeding by default. It allows userland utilities _selectorctl_ and _cagefs_ to operate without fails even if a user exceeds a quota. To disable quota checking in **XFS** file system set `cap_res_quota_disable` option to 1 using the following command: +
``` @@ -1125,15 +1020,16 @@ To disable quota checking in **XFS** file syste ```
-## Enter LVE when using cPanel utilities +## Enter LVE when using cPanel utilities cPanel tools might use more resources than desired, so to limit resource usage, you might want to enter the corresponding LVE when using cPanel tools on-behalf of a non-root user. + This feature is considered experimental, as in this case there might be contention for LVE limits between cPanel tools and web-requests for a given user, which might not be suitable. The `lve_setuid_enter` parameter controls whether you want to enter the corresponding LVE when using cPanel tools on behalf of a non-root user. -By default, the feature is disabled (0), to enable it, run the following for CloudLinux 7 hybrid: +By default, the feature is disabled (0), to enable it, run the following for CloudLinux OS Shared 7 hybrid:
@@ -1142,4 +1038,55 @@ By default, the feature is disabled (0), to enable it, run the following for Clo ```
- \ No newline at end of file +## Proactive reporting kernel crash events with Sentry and Kernel Panic Receiver + +As updating the kernel is one of the most sensitive tasks, we'd like to achieve the maximum stability along the way. +In case something goes wrong, proactive reacting to kernel crashes can help tremendously. + +Our new tool, _Kernel Panic Receiver_, released in [June 2020](https://blog.cloudlinux.com/kernel-panic-receiver-a-new-tool-to-organize-kernel-panic-logs) allows you to to organize kernel panic logs. +Kernel Panic Receiver is an open-source component designed to pre-emptively resolve any kernel-related issues. + +Visit the [Kernel Panic Receiver project GitHub page](https://github.com/cloudlinux/kernel_panic_receiver). + +#### Usage + +To send required kernel logs from the clients' machines to _Kernel Panic Receiver_, we configure the default Linux kernel feature called _netconsole_. + +The configuration is done by the `initscripts` package, starting from the following versions: + +* For CloudLinux OS Shared 6: `9.03.61-1.cloudlinux` +* For CloudLinux OS Shared 7: `9.49.49-1.cloudlinux` +* For CloudLinux OS Shared 8: `10.00.4-1.cloudlinux` + +To update the `initscripts` package, run the following command: + +``` +yum update initscripts --enablerepo=cloudlinux-updates-testing +``` + +When a kernel panic occurs, the _netconsole_ module sends logs to our server as plain text via the UDP protocol. + +#### What data is transferred by netconsole? + +The _netconsole_ sends only OOPs-related messages from the kernel ring buffer. It doesn't transfer any sensitive data, such as usernames, encryption keys, paths, etc. So, there are no security problems you should worry about. + +### Disabling the feature + +If you don't want to send us the data, you can turn the _netconsole_ service off (we don't recommend it, though). +To disable transferring the data, just comment the `SYSLOGADDR` parameter in the _netconsole_ config file (`/etc/sysconfig/netconsole`): + +``` +# For more information about this data transmission, check this page: +# https://cloudlinux.zendesk.com/hc/en-us/articles/360016481200 +# SYSLOGADDR=sentrykernel.cloudlinux.com +``` + +And stop the _netconsole_ service by running the following command: + +``` +service netconsole stop +``` + +:::tip 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/docs/command-line_tools/README.md b/docs/command-line_tools/README.md index 9467ce04a..6055973c2 100644 --- a/docs/command-line_tools/README.md +++ b/docs/command-line_tools/README.md @@ -10,6 +10,8 @@ The list of the commands (CLI) you can use to manage CloudLinux OS components. * [Ruby Selector](/command-line_tools/#ruby-selector) * [Node.js Selector](/command-line_tools/#node-js-selector) * [Apache mod_lsapi PRO](/command-line_tools/#apache-mod-lsapi-pro) +* [Website monitoring tool and Slow Site analyzer](/command-line_tools/#website-monitoring-tool-and-slow-site-analyzer) +* [X-Ray Autotracing](/command-line_tools/#x-ray-autotracing) * [Other CLI tools](/command-line_tools/#other-cli-tools) ## CageFS @@ -121,20 +123,27 @@ If a user has shell enabled - you can simply use:
``` -$ /bin/su - $USERNAME -c "_command_" +$ /bin/su - $USERNAME -c _command_ ```
Yet, if a user have they shell disabled, it wouldn't work. To solve this issue, we have added command:
``` -$ /sbin/cagefs_enter_user $USERNAME "_command_" +$ /sbin/cagefs_enter_user [--root] [--no-fork] $USERNAME _command_ ```
+**Options**: + +* `--root` – tells the utility not to reset UID and GID to user ones. It might be dangerous to call untrusted commands. +* `--no-fork` – do not create a child process for a called command. The called command will replace the cagefs_enter process with exec. +* `--no-cpu-limit`- remove all CPU limits (requires `kmod-lve` >= 2.0.36) +* `--no-io-and-memory-limit` - remove all limits of IO and Memory (requires `kmod-lve` >= 2.0.36) + If you disable CageFS for a user, then `cagefs_enter` will be executed without `proxyexec` . -You can forcibly disable `cagefs_enter` start via `proxyexec` for all users (regardless if CageFS is enabled or disabled) by specifying the parameter _cagefs_enter_proxied=0_ in _/etc/sysconfig/cloudlinux_ . +You can forcibly disable `cagefs_enter` start via `proxyexec` for all users (regardless if CageFS is enabled or disabled) by specifying the parameter _cagefs_enter_proxied=0_ in _/etc/sysconfig/cloudlinux_ . _/bin/cagefs_enter.proxied_ can be executed instead of _/bin/cagefs_enter_ to enter CageFS without `proxyexec` . Note that starting `cagefs_enter` via `proxyexec` is necessary to enable sending local notification messages to users with enabled CageFS. `cagefs_enter` is executed via `proxyexec` by default. @@ -1330,7 +1339,7 @@ The global options modify settings in /etc/cl.selecto | | $ selectorctl --replace-extensions=pdo,phar --version=5.2 | | --list-extensions (-G): | lists extensions for an alternative for a particular version. Requires --version . Example:| | | $ selectorctl --list-extensions --version=5.3
~ xml
- xmlreader
- xmlrpc
- xmlwriter
- xrange
+ xsl
| -| |Plus sign (+) stands for 'enabled', minus (–) for 'disabled', tilde (~) means compiled into interpreter. Enabled and disabled state relates to presence in _/etc/cl.selector/defaults.cfg_ file.| +| |Plus sign (+) stands for 'enabled', minus (–) for 'disabled', tilde (~) means compiled into interpreter or enabled in php global config file _/opt/alt/phpXX/etc/php.ini_. Enabled and disabled state relates to presence in _/etc/cl.selector/defaults.cfg_ file.| **End user options** @@ -2553,6 +2562,164 @@ The following table presents which `[OPTIONS]` are supported for various panels: |`force` | + | + | + | - | + | + | +| |`stat` | +
_*without domain info_ | +
_*without domain info_ | + | + | + | +
_*without domain info_ | +
_*without domain info_| + +## Website Monitoring tool and Slow Site analyzer + +### The cloudlinux-ssa-manager utility + +The `cloudlinux-ssa-manager` utility allows to manage Slow Site analyzer via CLI. + +**Usage** + +``` +# /usr/sbin/cloudlinux-ssa-manager [command] [--optional arguments] +``` + +**Optional arguments**: + +| | | +|-|-| +|`-h`, `--help`|show help message and exit| + +**Commands**: + +| | | +|-|-| +|`set-config`|set the SSA configuration| +|`get-config`|get the SSA configuration| +|`get-ssa-status`|get a current status of SSA| +|`enable-ssa`|enable SSA| +|`disable-ssa`|disable SSA| +|`get-report`|get the latest report| + +You can use the `-h`, `--help` option with commands to get a full list of available optional arguments for each command. + +Example of the `/usr/sbin/cloudlinux-ssa-manager set-config --help` command output: + +``` +# /usr/sbin/cloudlinux-ssa-manager set-config --help +usage: cloudlinux-ssa-manager set-config [-h] + [--domains-number DOMAINS_NUMBER] + [--urls-number URLS_NUMBER] + [--requests-duration REQUESTS_DURATION] + [--request-number REQUEST_NUMBER] + [--time TIME] + [--correlation CORRELATION] + [--correlation-coefficient CORRELATION_COEFFICIENT] + [--ignore-list IGNORE_LIST] +optional arguments: + -h, --help show this help message and exit + --domains-number DOMAINS_NUMBER + Size of TOP list for slow domains + --urls-number URLS_NUMBER + Size of TOP list for slow urls + --requests-duration REQUESTS_DURATION + The threshold value of request duration in seconds + --request-number REQUEST_NUMBER + The threshold value of slow requests number in the + period of time to mark URL as a slow one + --time TIME Period of time in hours required to analyze these + requests + --correlation CORRELATION + Flag to enable or disable correlation + --correlation-coefficient CORRELATION_COEFFICIENT + The threshold value of correlation coefficient + --ignore-list IGNORE_LIST + List of URLs or domains that should not be included in + the daily report +``` + +### The wmt-api utility + +The `wmt-api` utility allows to manage Website Monitoring tool via CLI. + +**Usage** + +``` +# /usr/share/web-monitoring-tool/wmtbin/wmt-api [command] [--optional arguments] +``` + +**Optional arguments**: + +| | | +|-|-| +|`-h`, `--help`|show help message and exit| + +**Commands**: + +| | | +|-|-| +|`config-change`|set the WMT configuration using the JSON string that follows| +|`config-get`|get the WMT configuration as JSON| +|`email-get`|get WMT email from the config file| +|`report-generate`|Generate a report JSON file| +|`send-clickhouse`|Send the summary report to ClickHouse| +|`start`|Start the WMT system| +|`status`|Check the status of the WMT system| +|`stop`|Stop the WMT system| + +Example of the `/usr/share/web-monitoring-tool/wmtbin/wmt-api` command usage: + +``` +# /usr/share/web-monitoring-tool/wmtbin/wmt-api -config-change "{\"ping_connections\":8,\"report_top\":5,\"report_email\":\"user@example.com\"}" +``` + +This way you can set all or only certain parameters. + +## X-Ray Autotracing + +### The cloudlinux-autotracing utility + +The `cloudlinux-autotracing` utility allows to manage the X-Ray Autotracing via CLI. + +**Usage** + +``` +# /usr/sbin/cloudlinux-autotracing [command] [--optional arguments] +``` + +**Commands**: + +| | | +|-|-| +|`enable`|Enable X-Ray Autotracing| +|`disable`|Disable X-Ray Autotracing| +|`status`|Get current status of the X-Ray Autotracing| + +**Optional arguments**: + +| | | +|-|-| +|`-h`, `--help`|Show help message and exit| +|`--all`|Enable or disable for all users| +|`{username}`|Enable/disable the specified user| +|`--list-disabled`|Show list of disabled users| + +You can use the `-h`, `--help` option with commands to get a full list of available optional arguments for each command. + +**Example usage:** + +Disable user1: + +``` +# /usr/sbin/cloudlinux-autotracing disable user1 +{"result": "success"} +``` + +Show list of disabled users: + +``` +# /usr/sbin/cloudlinux-autotracing status --list-disabled +{"result": "success", "disabled_users": ["user1"]} +``` + +Enable all: + +``` +# /usr/sbin/cloudlinux-autotracing enable --all +{"result": "success"} +``` + ## Other CLI tools @@ -2576,9 +2743,9 @@ Usage: | | | |--|--| |`-h, --help`|Print this message| -|`-k, --key <key>`|Update your system to CloudLinux with activation key| -|`-i, --byip`|Update your system to CloudLinux and register by IP| -|`-c, --uninstall`|Convert CloudLinux back to CentOS| +|`-k, --key <key>`|Update your system to CloudLinux OS Shared with activation key| +|`-i, --byip`|Update your system to CloudLinux OS Shared and register by IP| +|`-c, --uninstall`|Convert CloudLinux OS Shared back to CentOS| |`--serverurl`|Use non-default registration server (default is `https://xmlrpc.cln.cloudlinux.com/XMLRPC`)| |`--components-only`|Install control panel components only| |`--conversion-only`|Do not install control panel components after converting| @@ -2586,13 +2753,19 @@ Usage: |`--skip-kmod-check`|Skip check for unsupported kmods| |`--skip-version-check`|Do not check for script updates| |`--skip-registration`|Don't register on CLN if already have access to CL repository| -|`--force-hybridize`|Option allows to convert CloudLinux 7 to CloudLinux 7 Hybrid which has a newer kernel (from v1.61)| +|`--force-hybridize`|Option allows to convert CloudLinux OS Shared 7 to CloudLinux OS Shared 7 Hybrid which has a newer kernel (from v1.61)| +|`--no-force-hybridize `|Don't hybridize machine from CloudLinux 7 to CloudLinux 7 Hybrid automatically, even though machine has a new hardware| +|`--to-solo-edition `|Convert to CloudLinux Solo edition (only allowed with --skip-registration option)| +|`--to-admin-edition `|Convert to CloudLinux Admin edition (only allowed with --skip-registration option)| +|`--to-container-environment `|Convert to CloudLinux which supports working inside containers| +|`--force-packages-installation `|Automatically resolve dependencies and remove conflicting packages| +|`--allow-lower-version `|Convert to lower minor version (Almalinux x.y to CL x.y-1) if current version (CL x.y) is not available| -The script will install the following to the server: +The script will perform the following actions: 1. Register server with CLN. -2. Install CloudLinux kernel, lve libraries, lve-utils, lve-stats and pam_lve packages. -3. It will attempt to detect control panel and do the following actions: +2. Install CloudLinux OS Shared kernel, lve libraries, lve-utils, lve-stats and pam_lve packages. +3. Attempt to detect control panel and do the following actions: * _For cPanel_: * install mod_hostinglimits; * install LVE Manager. @@ -2672,7 +2845,9 @@ $ cldeploy --hostinglimits # update httpd and install | | | |--|--| -| `--cpu=N` |limit `CPU` usage; (deprecated. Use `--speed`)| +| `--enter-count` |enable limit for enters count (by default disabled), use only with command "limit". Supported in lve-utils-6.1.2-1 or later. | +| `--io-and-memory` |enable limit for IO and memory (by default disabled), use only with command "limit". Supported in lve-utils-6.1.2-1 or later. | +| `--cpu=N` |limit `CPU` usage; (deprecated. Use `--speed`)| | `--speed=N%` |limit `CPU` usage in percentage; 100% is one core| | `--speed=Nmhz\ghz` |limit `CPU` usage in mhz\ghz| | `--ncpu=N` |limit VCPU usage (deprecated)| @@ -2811,7 +2986,7 @@ testuser5 0 2 2 1% 52 0 0 lve-utils 1.2-10+ ::: -**cldetect** is used to detect installed software, and adjust CloudLinux options accordingly. +**cldetect** is used to detect installed software, and adjust CloudLinux OS Shared options accordingly. **Usage**:
@@ -2838,7 +3013,7 @@ testuser5 0 2 2 1% 52 0 0 |`--set-securelinks-gid`|changes `/etc/sysctl.conf` if apache gid != 48 (default)| |`--set-nagios`|do some adjustments to make nagios work correctly if it's installed. Called as a part of `--setup-supergids`| |`--setup-supergids`|do some adjustments to make special users/software (nagios, cPanel’s mailman) work correctly if it is installed to the system| -|`--cl-setup`|check if CloudLinux is installing. Returns 0 if installing, 1 otherwise| +|`--cl-setup`|check if CloudLinux OS Shared is installing. Returns 0 if installing, 1 otherwise| |`--update-license`|updates license| |`--update-new-key`|updates license with new key| |`--check-license`|check license. Returns OK if license is not older than 3 days, error message otherwise| @@ -2868,6 +3043,22 @@ If **fs.proc_super_gid** was configured by an admin to some existing group, the * server diagnostics performed by a server administrator for detecting the most common errors in the configuration or software operation; * the focused check of the servers for typical errors performed by the support engineers before proceeding to the detailed analysis of the customer tickets; * servers automatic check by cron with the following generation of the reports and email them to the server administrator. + * Set option `ENABLE_CLDIAG` to `false` in config `/etc/sysconfig/cloudlinux` if you want to disable automatic check by cron permanently + * Use the cldiag key `--disable-cron-checkers` for disabling separate checkers if you want to disable only some checkers (lve-utils >= 4.2.18-1) + * A default email is `root@localhost.localdomain`. Note that the settings of the mail server can change the final email. + +You can change the email in the following ways: + +* In your control panel by changing the mail server settings +* By changing the `/etc/sysconfig/cloudlinux` config: + * Set the desired email instead of the default CP value in the `EMAIL` option + * Set the `CP` value in the `EMAIL` option in the `license_check` section. Add an option with the path to the panel script for receiving emails: + ``` + {PANEL_NAME}_getemail_script=/path/to/getemail_script) + ``` + `{PANEL_NAME}` is the name of the panel from the `cldetect --detect-cp-name` command output. + * If there is no panel script, the default email (`root@localhost.localdomain`) will be used. + * The `/path/to/getemail_script` file should be executable and output to stdout the admin email to which an email with checks results will be sent. Note that the settings of the mail server can change the final email. In all cases, for the negative checker result, the exit code will be > 0 (at the moment it will be equal to the number of failed checkers). @@ -2916,7 +3107,7 @@ Currently implemented checkers: Checks control panel and its configuration (for DirectAdmin only). -Checking control panel availability, thereby detecting it with our code. Displaying control panel name and version. Also, for DirectAdmin, checking if CloudLinux support is enabled in its config. +Checking control panel availability, thereby detecting it with our code. Displaying control panel name and version. Also, for DirectAdmin, checking if CloudLinux OS Shared support is enabled in its config. Fails if `/usr/local/directadmin/custombuild/options.conf` does not contain `cloudlinux=yes` line (for DirectAdmin control panel). @@ -3005,7 +3196,7 @@ Fails if `/etc/cl.selector/php.conf` has incorr Checks compatibility for the PHP Selector -Detecting which PHP handler has been configured on the server and checking its compatibility with the CloudLinux PHP Selector according to [this table](/limits/#compatibility-matrix) and displaying the corresponding message with the link to the documentation in case of a problem detected. No checks are performed for EasyApache3. +Detecting which PHP handler has been configured on the server and checking its compatibility with the CloudLinux OS Shared PHP Selector according to [this table](/limits/#compatibility-matrix) and displaying the corresponding message with the link to the documentation in case of a problem detected. No checks are performed for EasyApache3. Failure reasons: * The installed `mod_ruid` package is incompatible with the PHP Selector @@ -3030,6 +3221,113 @@ Checks the validity of LVE limits on the server. This checker was removed from the cldiag utility as `cldiag --check-rpmdb` can in some cases hang up during `rpmdb` check, which can brake access to the database for `rpm/yum` utilities. ::: +#### check-hidepid + +A new checker `check-hidepid` is available starting from `lve-utils-4.2.18-1` and later. It checks if CageFS is installed and if `/proc` is mounted without the `hidepid=2` parameter. + +* If CageFS is not installed, `check-hidepid` skips and outputs the following: + + ``` + Check mount with hidepid=2 option: + SKIPPED: Cagefs is not installed + ``` + +* If `check-hidepid` triggers and finds an issue, it outputs the following: + + ``` + Check mount with hidepid=2 option: + FAILED: Details: hidepid protection disabled. + Please, mount system with hidepid=2 for better security. + Read more about hidepid option here: https://docs.cloudlinux.com/cloudlinux_os_kernel/#remounting-procfs-with-hidepid-option + ``` + +* If `check-hidepid` triggers and it's OK, it outputs the following: + + ``` + Check mount with hidepid=2 option: + OK: hidepid protection enabled + ``` + +#### check-jwt-token + +This new checker is available starting from LVE-Utils 4.2.21-2 + +Checks the validity and presence of the JWT token which is required for correct work of client part of Centralized Monitoring. + +Failure reasons: +* The JWT token is absent in path `/etc/sysconfig/rhn/jwt.token` +* The JWT token is malformed +* The JWT token is expired. +* The issuer of JWT token is invalid. + +In all cases try running `rhn_check` for getting a new token. + +#### check-cm-all + +This new checker is available starting from LVE-Utils 4.2.21-2 + +Checks the things on a server of client which are required for correct work of client part of Centralized Monitoring: +* Checks the validity and presence of JWT token +* Checks that service `cl_plus_sender` is present, enabled and active +* Checks that service `node_exporter` is present, enabled and active +* Checks that service `lvestats` is present, enabled and active +* Checks that RPM packages `cl-end-server-tools` and `cl-node-exporter` are installed + +#### all + +Performs diagnostic checks from the list: + +* check_cp_diag +* check_symlinksifowner +* check_suexec +* check_suphp +* check_use_pam +* check_symlinkowngid +* check_existence_of_all_users_packages +* check_phpselector +* check_defaults_cfg +* check_php_conf +* check_lve_limits +* check_hidepid +* check_cagefs_partition_disk_quota +* fake_cagefs_checker + +#### generate-email + +Performs diagnostic checks (from the list above) and generates HTML report sent to the administrator's email. + +#### cron-check + +Performs the same diagnostic checks as `generate-email` but with considering the `ENABLE_CLDIAG` option in the `/etc/sysconfig/cloudlinux`. + +Performs diagnostic checks from the list: + +* check_symlinksifowner +* check_use_pam +* check_symlinkowngid +* check_existence_of_all_users_packages +* check_lve_limits +* check_hidepid +* check_cagefs_partition_disk_quota +* check_jwt_token +* check_cl_plus_sender_service +* check_node_exporter_service +* check_cmt_packages +* check_lvestats_service + +#### doctor + +:::tip Note +Available starting from lve-utils version 6.3.9-1. +::: + +This option can be used instead of the following command: + +``` +wget -qq -O - https://repo.cloudlinux.com/cloudlinux/cldoctor/cldoctor.sh | bash +``` + +If this option is provided cldoctor script will be downloaded to a temp directory and executed by cldiag. Also the report will be automatically sent to our support team. ### cloudlinux-config @@ -3230,7 +3528,7 @@ You should not set soft limit higher than hard limit. cl-quota does not control cl-quota utility allows setting inodes limits for users of the system. - cl-quota integrates with the panels through a standard mechanism - [Integrating LVE Limits with Packages](/lve_manager/#detecting-and-working-with-cloudlinux) . + cl-quota integrates with the panels through a standard mechanism - [Integrating LVE Limits with Packages](/lve_manager/#detecting-and-working-with-cloudlinux). Panel users are such users whose UIDs are issued by the above panel integration mechanism. The list of panel packages and the information on the user's affiliation to a particular package is obtained from there as well. @@ -3240,7 +3538,7 @@ When installing/reading the limits, the following peculiarities are applied: 2. Limit value -1 for the packages (see below) is displayed as dash (-). -3. If cl-quota is running under root , it will display the limits returned by repquota utility with no changes. If it is running under some other user, it will return data from a special cache file, see [Quotas cache and synchronization](/lve_manager/#caching-and-synchronizing-the-limits). +3. If cl-quota is running under root , it will display the limits returned by repquota utility with no changes. If it is running under some other user, it will return data from a special cache file, see [Quotas cache and synchronization](/lve_manager/#caching-and-synchronizing-the-limits). 4. Limits setting only works for panel users, for all other users limits are not set (the command is ignored). The only exception - uid=0 . The limits are never set for the root user (uid=0) , but they are stored in DB file and are used by inheritance mechanism. See [Limits Inheritance](/command-line_tools/#limits-inheritance). @@ -3300,7 +3598,7 @@ When installing LVE Manager package, a specia Caching and synchronization can also be performed separately, see ["CLI Options"](/lve_manager/#cli-options-examples) section. -To disable this feature add to the config file _/etc/sysconfig/cloudlinux_ . +To disable this feature add to the config file _/etc/sysconfig/cloudlinux_. #### Quotas DB file @@ -3463,7 +3761,7 @@ Quota disabled for user id 500 (home directory /home/cltest1); quotaon: Mountpoi * [Options](/command-line_tools/#options) * [Examples](/command-line_tools/#examples-5) -`cloudlinux-limits` is an alternative to `lvectl` CLI tool for LVE management. `cloudlinux-limits` utility allows you to get/set any CloudLinux limits. +`cloudlinux-limits` is an alternative to `lvectl` CLI tool for LVE management. `cloudlinux-limits` utility allows you to get/set any CloudLinux OS Shared limits. #### Usage: @@ -3761,19 +4059,3 @@ For resellers' users with reseller limits enabled admin should use the - - - - - - - - - - - - - - - - diff --git a/docs/control_panel_integration/README.md b/docs/control_panel_integration/README.md index 183bdce4c..0cccf9eb4 100644 --- a/docs/control_panel_integration/README.md +++ b/docs/control_panel_integration/README.md @@ -10,12 +10,13 @@ * [Web UI integration](/control_panel_integration/#web-ui-integration) * [PHP-based integration of WEB UI with the control panel](/control_panel_integration/#php-based-integration-of-web-ui-with-the-control-panel) * [How to integrate CageFS with a control panel](/control_panel_integration/#how-to-integrate-cagefs-with-a-control-panel) -* [Integrating CloudLinux PHP Selector](/control_panel_integration/#integrating-cloudlinux-php-selector) +* [Integrating CloudLinux OS Shared and Admin PHP Selector](/control_panel_integration/#integrating-cloudlinux-os-shared-php-selector) * [Integration of Apache modules in control panels](/control_panel_integration/#integration-of-apache-modules-in-control-panels) * [MySQL Governor](/control_panel_integration/#mysql-governor) -* [CloudLinux LVE and CageFS patches](/control_panel_integration/#cloudlinux-lve-and-cagefs-patches) +* [CloudLinux OS Shared and Admin LVE and CageFS patches](/control_panel_integration/#cloudlinux-os-shared-lve-and-cagefs-patches) * [Hardened PHP](/control_panel_integration/#hardened-php) -* [CloudLinux kernel set-up](/control_panel_integration/#cloudlinux-kernel-set-up) +* [CloudLinux OS kernel set-up](/control_panel_integration/#cloudlinux-os-shared-kernel-set-up) +* [How to integrate X-Ray with a conrol panel](/control_panel_integration/#how-to-integrate-x-ray-with-a-control-panel) :::tip Note We encourage you to create a pull request with your feedback at the bottom of the page. @@ -23,34 +24,34 @@ We encourage you to create a pull request with your feedback at the bottom of th ### Introduction -There are several possible ways of integration with CloudLinux OS: +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 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. +* **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](/deprecated/#package-integration). 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 components from a control panel to the CloudLinux web UI and utils. +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 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 components and control panel will not be affected. +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 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. +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 * [Example of the integration config](/control_panel_integration/#example-of-the-integration-config) -To integrate CloudLinux into a control panel, you should implement the following interfaces required by the CloudLinux OS utilities: +To integrate CloudLinux OS into a control panel, you should implement the following interfaces required by the CloudLinux OS utilities: * [CPAPI](/control_panel_integration/#control-panel-api-integration) — a small scripts/files-type interface to get the required information from the control panel * [CP Hooks Integration](/control_panel_integration/#control-panel-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)](/control_panel_integration/#web-ui-integration) — various configuration parameters and scripts to embed interface SPA application into the control panel native interface. Optional, if CLI is enough * [CageFS Integration](/control_panel_integration/#how-to-integrate-cagefs-with-a-control-panel) — 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 kernel set-up](/control_panel_integration/#cloudlinux-kernel-set-up) +* [CloudLinux OS kernel set-up](/control_panel_integration/#cloudlinux-os-shared-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 support module (if CloudLinux support is not built-in). +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”): @@ -61,9 +62,9 @@ Configuration related to integration should be placed in a valid INI file (furth ```
-All users (and in CageFS too) should have read access to this file because some CPAPI methods have to work from end-user too. CloudLinux components only read this file and never write/create it. +All users (and in CageFS too) should have read access to this file because some CPAPI methods have to work from end-user too. CloudLinux OS components only read this file and never write/create it. -The control panel vendor decides where to put CPAPI scripts (CloudLinux utils will read path to scripts from the integration file) but we recommend to put them into `/opt/cpvendor/bin/` (should be created by the vendor first) because `/opt/*` is mounted to CageFS by default and the standard location will save some time during possible support incidents. +The control panel vendor decides where to put CPAPI scripts (CloudLinux OS utils will read path to scripts from the integration file) but we recommend to put them into `/opt/cpvendor/bin/` (should be created by the vendor first) because `/opt/*` is mounted to CageFS by default and the standard location will save some time during possible support incidents. We recommend to deliver a set of scripts for CPAPI and integration file as a separate RPM package. This can greatly simplify support for vendors as they will be able to release any updates and compatibility fixes separately from the panel updates and use dependencies/conflicts management provided by a package manager. @@ -76,9 +77,17 @@ That means that you can add `Conficts: public_cp_vendors_api < VERSION` to the s ### Changelog ::: tip Changelog + +Version 1.2 + +Summary: ability to integrate X-Ray added. +1. `Provides public_cp_vendors_api = 1.2` added to rpm spec of alt-python27-cllib package (see [versioning](/control_panel_integration/#versioning)). +2. [`domains` integration script](https://docs.cloudlinux.com/control_panel_integration/#domains) updated: new optional flag `--with-php` added. This option is required for X-Ray integration only. +4. New X-Ray feature added to `supported_cl_features` of [`panel_info` script](/control_panel_integration/#panel-info). Now the X-Ray UI tab is hidden by default until the panel makes the support clear by setting the `xray` feature to `true`. + Version 1.1 1. Added `Provides public_cp_vendors_api = 1.1` to rpm spec of alt-python27-cllib package (see [versioning](/control_panel_integration/#versioning)). -2. New `supported_cl_features` key added to `panel_info` script. You can specify CloudLinux features that you want to show in LVE Manager, Wizard, Dashboard and other UI and hide others. +2. New `supported_cl_features` key added to [`panel_info` script](/control_panel_integration/#panel-info). You can specify CloudLinux OS features that you want to show in LVE Manager, Wizard, Dashboard and other UI and hide others. ::: @@ -105,7 +114,9 @@ base_path = /panel/path/lvemanager run_service = 1 service_port = 9000 - +use_ssl = 1 +ssl_cert = /path/to/domain_srv.crt +ssl_key = /path/to/domain_srv.key ```
@@ -123,9 +134,15 @@ You can use different scripts for different CPAPI methods or only one script and * Some scripts are run from both root and end-user. If the script is run from end-user it should return information related to this user only, filtering the irrelevant data for security/isolation purposes or return `PermissionDenied` if script is not intended to be run as this user at all. * Scripts run from the end-user should also work from inside CageFS. You can find details on how to implement this [here](/control_panel_integration/#working-with-cpapi-cagefs) +:::warning IMPORTANT +When a user employs CloudLinux utilities through a user interface, it is important to take note that integration scripts may be executed prior to entering CageFS. Certain interpreters, such as Python, have the [capability](https://docs.python.org/3/library/site.html#site.USER_SITE) to execute arbitrary code during interpreter startup before the main code is executed. This presents a potential security risk for servers that utilize Python as an interpreter for executing integration scripts, as users may gain an ability to run their code outside of CageFS. This could lead to unauthorized access and exposure of sensitive system files. +To prevent such incidents, it is crucial to ensure that your integration scripts do not possess similar capabilities or to take necessary measures to eliminate such risks prior to utilization. +In case of any uncertainty, it is recommended to seek assistance from CloudLinux support. +::: + #### Legend -* Necessity `always` means it’s required nearly by all CloudLinux code and should be implemented no matter what features you are interested in. Other methods might not be implemented and this will affect only some CloudLinux features leaving others to work fine. -* `All UNIX users` means any Linux system account (from `/etc/passwd`) that is able to execute CloudLinux utilities directly or indirectly. +* Necessity `always` means it’s required nearly by all CloudLinux OS code and should be implemented no matter what features you are interested in. Other methods might not be implemented and this will affect only some CloudLinux OS Shared features leaving others to work fine. +* `All UNIX users` means any Linux system account (from `/etc/passwd`) that is able to execute CloudLinux OS utilities directly or indirectly. | | | | | @@ -135,7 +152,7 @@ You can use different scripts for different CPAPI methods or only one script and |[db_info](/control_panel_integration/#db-info)|Only for LVE-Stats, otherwise optional|admins (UNIX users)|-| |[packages](/control_panel_integration/#packages)|For limits functionality|admins (UNIX users)|-| |[users](/control_panel_integration/#users)|Always|admins (UNIX users)|-| -|[domains](/control_panel_integration/#domains)|Selectors, some UI features|All UNIX users|+| +|[domains](/control_panel_integration/#domains)|Selectors, some UI features/X-Ray|All UNIX users/administrators (UNIX users)|+/-| |[resellers](/control_panel_integration/#resellers)|Always|admins (UNIX users)|-| |[admins](/control_panel_integration/#admins)|Always|admins (UNIX users)|-| @@ -236,7 +253,7 @@ When data is temporarily unavailable due to internal errors in the integration s | | | | |-|-|-| |Key|Nullable|Description| -|message|False|Error message for an administrator printed by CloudLinux utility| +|message|False|Error message for an administrator printed by CloudLinux OS utility| #### Restricted access @@ -260,7 +277,7 @@ When data is unavailable due to restricted access of a user that called the scri | | | | |-|-|-| |Key|Nullable|Description| -|message|False|Error message for an administrator printed by CloudLinux utility| +|message|False|Error message for an administrator printed by CloudLinux OS utility| :::tip Info @@ -294,7 +311,7 @@ The output is as follows: | | | | |-|-|-| |Key|Nullable|Description| -|message|False|Error message for an administrator printed by CloudLinux utility| +|message|False|Error message for an administrator printed by CloudLinux OS utility| #### Nonexistent entities @@ -324,7 +341,7 @@ This kind of error should be used only in the filtering case. In case when some | | | | |-|-|-| |Key|Nullable|Description| -|message|False|Error message for an administrator printed by CloudLinux utility| +|message|False|Error message for an administrator printed by CloudLinux OS utility| ### The list of the integration scripts @@ -367,7 +384,8 @@ Returns the information about the control panel in the specified format. "mod_lsapi": true, "mysql_governor": true, "cagefs": true, - "reseller_limits": true + "reseller_limits": true, + "xray": false } }, "metadata": { @@ -384,8 +402,9 @@ Returns the information about the control panel in the specified format. |Key|Nullable|Description| |name|False|Control panel name| |version|False|Control panel version| -|user_login_url_template|False|URL template for a user entering to control panel. Used in the lve-stats default templates reporting that user is exceeding server load. You can use the following placeholders in the template: `{domain}`. CloudLinux utility automatically replaces placeholders to the real values. **Example**:`“user_login_url_template”: “https://{domain}:2087/login”` CloudLinux utility automatically replaces `{domain}`, and the link will look like `https://domain.zone:2087/login`| -|supported_cl_features|False|Object that describes which CloudLinux features are supported by your control panel and which must be hidden in web interface.
When `supported_cl_features` is omitted, we assume that all modules are supported. When `supported_cl_features` is empty object, all modules will be hidden. All features that are not listed in `supported_cl_features` are considered to be disabled.
We recommend you to always return object as we can add more features in the future and you will be able to test them and make them visible after checking and tuning.

Features that you currently can disable:
  • php_selector
  • ruby_selector
  • python_selector
  • nodejs_selector
  • mod_lsapi
  • mysql_governor
  • cagefs
  • reseller_limits

    • Available since API v1.1 (see [versioning](/control_panel_integration/#versioning))| +|user_login_url_template|False|URL template for a user entering to control panel. Used in the lve-stats default templates reporting that user is exceeding server load. You can use the following placeholders in the template: `{domain}`. CloudLinux OS utility automatically replaces placeholders to the real values. **Example**:`“user_login_url_template”: “https://{domain}:2087/login”` CloudLinux OS Shared utility automatically replaces `{domain}`, and the link will look like `https://domain.zone:2087/login`| +|supported_cl_features|False|Available since API v1.1 (see [versioning](/control_panel_integration/#versioning))
      Object that describes which CloudLinux OS features are supported by your control panel and which must be hidden in web interface.
      When `supported_cl_features` is omitted, we assume that all modules are supported. When `supported_cl_features` is empty object, all modules will be hidden. All features that are not listed in `supported_cl_features` are considered to be disabled.
      We recommend you to always return object as we can add more features in the future and you will be able to test them and make them visible after checking and tuning.

      Features that you currently can disable: Available since API v1.2 (see [versioning](/control_panel_integration/#versioning))
      • xray (CloudLinuxOS+ license only)
      | + #### db_info @@ -393,7 +412,7 @@ Returns the information about the control panel in the specified format. Returns the information about databases that are available to the control panel users and are managed by the control panel. :::warning WARNING! -For now, CloudLinux supports control panels only with MySQL databases. +For now, CloudLinux OS supports control panels only with MySQL databases. ::: Integration script is optional, when there is no script, [lve-stats won’t collect SQL snapshots](cloudlinux_os_components/#plugins). @@ -532,7 +551,7 @@ If a reseller user or administrator user has a corresponding UNIX-user in the sy |--package-owner|False|Used in pair with package.name. Set the owner of the specified package.| |--username|False|Used for filtering. When the parameter is set, output the information about this UNIX user only.| |--unix-id|False|Used for filtering. When the parameter is set, output the information about this UNIX user only.| -|--fields|False|List fields to output. Fields are divided with a comma; when there is no key, output all available fields.

      The key is used to reduce the data size for the large systems. You can ignore the key and always output the full set of data. Note that in this case, CloudLinux will work more slowly.| +|--fields|False|List fields to output. Fields are divided with a comma; when there is no key, output all available fields.

      The key is used to reduce the data size for the large systems. You can ignore the key and always output the full set of data. Note that in this case, CloudLinux OS will work more slowly.| **Output example** @@ -625,6 +644,8 @@ If a reseller user or administrator user has a corresponding UNIX-user in the sy Returns key-value object, where a key is a domain (or subdomain) and a value is a key-value object contains the owner name (UNIX users), the path to the site root specified in the HTTP server config, and the domain status (main or alternative). +X-Ray support is available since API v1.2 (see [versioning](/control_panel_integration/#versioning)). In order to enable X-Ray support, the value for each domain should include php configuration. Full X-Ray integration documentation can be found [here](/control_panel_integration/#how-to-integrate-x-ray-with-a-control-panel) + ::: warning WARNING To make Python/Node.js/Ruby/PHP Selector workable, this script should be executed with user access and inside CageFS. When running this script as the user, you must limit answer scope to values, allowed for the user to view. E.g. if the control panel has two domains: `user1.com` and `user2.com`, and `user1` Unix user owns only one of them, you should not return second one even if `--name` argument is not set explicitly. @@ -635,7 +656,7 @@ E.g. if the control panel has two domains: `user1.com`
      ``` -/scripts/domains ([--owner=] | [--name=]) +/scripts/domains ([--owner=] | [--name=] | [--with-php]) ```
      @@ -646,6 +667,7 @@ E.g. if the control panel has two domains: `user1.com` |Key|Required|Description| |--owner, -o|False|Used for filtering output; set a name of the owner whose domains to print| |--name, -n|False|Used for filtering output; set a name of the domain, to display information about it| +|--with-php|False (X-Ray support only)|Used for extending output with PHP configuration, required by X-Ray (available since API v1.2, see [versioning](/control_panel_integration/#versioning))| **Output example** @@ -672,6 +694,41 @@ E.g. if the control panel has two domains: `user1.com` ```
+**Output example with optional flag --with-php (X-Ray support only)** + +
+ +``` +{ + "data": { + "domain.com": { + "owner": "username", + "document_root": "/home/username/public_html/", + "is_main": true, + "php": { + "version": "56", + "ini_path": "/opt/alt/php56/link/conf", + "is_native": true + } + }, + "subdomain.domain.com": { + "owner": "username", + "document_root": "/home/username/public_html/subdomain/", + "is_main": false, + "php": { + "version": "72", + "ini_path": "/opt/alt/php72/link/conf", + "fpm": "alt-php72-fpm" + } + } + }, + "metadata": { + "result": "ok" + } +} +``` +
+ **Data description** | | | | @@ -681,6 +738,7 @@ E.g. if the control panel has two domains: `user1.com` |owner|False|UNIX user who is a domain owner| |document_root|False|Absolute path to the site root directory| |is_main|False|Is the domain the main domain for a user| +|Nested dictionary (named array) php|True (False if X-Ray support is enabled)|PHP configuration for a domain, required by X-Ray, see details [here](/control_panel_integration/#how-to-integrate-x-ray-with-a-control-panel) (available since API v1.2, see [versioning](/control_panel_integration/#versioning))| #### resellers @@ -802,7 +860,7 @@ Gives information about panel’s administrators, output information about all p ## Control panel hooks integration -For proper CloudLinux operation, you should implement a hooks mechanism. Hooks are scripts that control panel invokes with the exact arguments at a specific time. The control panel is responsible for executing these scripts as a system root user. +For proper CloudLinux OS operation, you should implement a hooks mechanism. Hooks are scripts that control panel invokes with the exact arguments at a specific time. The control panel is responsible for executing these scripts as a system root user. ### Managing administrators @@ -844,7 +902,7 @@ After removing the administrator, the following command should be called by the ### Managing users -To manage user limits properly, CloudLinux utilities need information about the following control panel events. +To manage user limits properly, CloudLinux OS utilities need information about the following control panel events. After creating a new user, the following script should be called: @@ -940,6 +998,25 @@ After renaming a domain (or any equivalent domain removal operation with transfe |--new-domain|Yes | - |A new domain name | |--include-subdomains|No |False |If set, all subdomains are renamed as well, i.e. when renaming domain.com → domain.eu the corresponding subdomain will be renamed as well test.domain.com → test.domain.eu.| +### Managing packages (hosting plans) + +To manage packages limits properly, CloudLinux OS utilities need information about the following control panel events. + +After renaming a package, the following command should be run: + +
+ +``` +/usr/share/cloudlinux/hooks/post_modify_package.py rename --name package_name --new-name new_package_name +``` +
+ +| | | | | +|-|-|-|-| +|Argument |Mandatory |Default |Description | +|--name|Yes | - |The package name to be changed | +|--new-name|No | - |A new package name | + ## Web UI integration ### ui-user-info script @@ -980,7 +1057,9 @@ The following configuration file parameters are used to determine the location o Files are copied or replaced by `yum update lvemanager` command. * **run_service** - enable LVE Manager web server. If it is set to 1 when installing or updating LVE Manager, we enable and run the web server with LVE Manager * **service_port** - a port used for running a web server for access LVE Manager without the control panel - +* **use_ssl** - use HTTPS for LVE Manager web server. +* **ssl_cert** - path to domain ssl cert file +* **ssl_key** - path to domain ssl cert key file #### Known issues for GUI unification :::warning Known issues for GUI unification @@ -989,9 +1068,8 @@ A user can run standalone services to provide access to LVE Manager without UI i These services have some issues: -* The ability to download log files from CloudLinux Wizard is missed +* The ability to download log files from CloudLinux OS Wizard is missed * Incorrect layout for some UI forms (Node.js Selector/Python Selector) -* Dashboard does not open CageFS options * Some errors are not displayed These issues will be fixed in the near future. @@ -1034,6 +1112,14 @@ echo $manager->insertPanel(); Pass the plugin name to the class constructor to initialize the plugin (user name will be defined). At the time of the insertPanel method invocation, the SPA application with the specified Selector will be embedded. + +`vendor_php` (optional for PHP integration only) - a full path to the `vendor.php` file. This option allows the vendor to implement specific logic before initializing the plugin (for example drop permission). + +Example: + +``` +vendor_php = /opt/cpvendor/etc/vendor.php +``` Queries to the backend are created separately in the points (PHP files) which are located in the LVE Manager catalog. @@ -1051,7 +1137,7 @@ CageFS documentation can be found here: [CageFS](/cloudlinux_os_components/#cage ### CageFS MIN_UID -CageFS has MIN_UID setting. Users with UIDs < MIN_UID will not be limited by CageFS. This setting is configured based on UID_MIN setting from `/etc/login.defs` file by default. So, typically MIN_UID is 500 on CloudLinux 6 and 1000 on CloudLinux 7. +CageFS has MIN_UID setting. Users with UIDs < MIN_UID will not be limited by CageFS. This setting is configured based on UID_MIN setting from `/etc/login.defs` file by default. So, typically MIN_UID is 500 on CloudLinux OS 6 and 1000 on CloudLinux OS Shared 7. You can obtain current MIN_UID value by executing the following command: @@ -1094,7 +1180,7 @@ It is safe to enable an interactive shell (e.g. /bin/bash) for users when CageFS ### Integrating CageFS with Apache -You should apply CloudLinux patches to integrate CageFS with Apache. Details can be found here: +You should apply CloudLinux OS Shared patches to integrate CageFS with Apache. Details can be found here: [Integration of Apache modules in Control Panels](/control_panel_integration/#integration-of-apache-modules-in-control-panels) Note that it may be required to execute `cagefsctl --force-update` after Apache rebuild in order to update CageFS. @@ -1120,6 +1206,25 @@ The commands above require root privileges. You can use the following command wh ```
+### CageFS - temporary LVEs with lvectl options + +Starting from lve-wrappers 0.7.5-1, `cagefs_enter_user` accepts a subset of `lvectl` limit parameters as input. Using any of them will result in a creation of a temporary LVE with a unique ID. That LVE will have the provided limits set and will be destroyed after the given command is run. + +The following parameters are accepted: `--speed`, `--pmem`, `--vmem`, `--io`, `--iops`, `--nproc`, `--maxEntryProcs`. + +
+ +``` +cagefs_enter_user --pmem=512M --speed=70% +``` +
+ +Refer to [documentation on limits](https://docs.cloudlinux.com/limits/#understanding-limits) for more details on the provided parameters. + +:::tip Note +Temporary LVE is destroyed after the process terminates unless the option `--no-fork` passed. +::: + ### Updating CageFS skeleton Updating CageFS skeleton is required after update of the system RPM packages. It may be also required after update of hosting control panel itself. @@ -1180,7 +1285,7 @@ Knowing the location where PHP sessions are stored (described above), you can al ### Creating new user account When user or admin account has been created, you should execute an appropriate hook script. -More about CloudLinux hooks subsystem: [Control Panel Hooks Integration](/control_panel_integration/#control-panel-hooks-integration) +More about CloudLinux OS Shared hooks subsystem: [Control Panel Hooks Integration](/control_panel_integration/#control-panel-hooks-integration) :::tip Note It is safe to enable an interactive shell (/bin/bash) for users when CageFS is enabled. @@ -1253,7 +1358,7 @@ There are two major ways to add files and directories to CageFS: Please do not modify any existing files in the `/etc/cagefs/conf.d` directory because they may be overwritten while updating CageFS package. You should create a new file with a unique name instead. ::: -In order to copy files and directories to CageFS, you can manually create a custom config file in `/etc/cagefs/conf.d` directory. +In order to copy files and directories to CageFS, you can manually create a custom config file with *.cfg extension in `/etc/cagefs/conf.d` directory. Also, you can add files and directories that belong to `rpm` package to CageFS as follows: @@ -1330,18 +1435,18 @@ You should check that users cannot use these commands to get sensitive informati It is possible to disable specific *dangerous* options of programs executed via `proxyexec`. More details: [Filtering options for commands executed by proxyexec](/cloudlinux_os_components/#filtering-options-for-commands-executed-by-proxyexec). -## Integrating CloudLinux PHP Selector +## Integrating CloudLinux OS Shared PHP Selector -Complete documentation for CloudLinux PHP Selector can be found here: +Complete documentation for CloudLinux OS Shared PHP Selector can be found here: [PHP Selector](/cloudlinux_os_components/#php-selector) :::tip Note -CloudLinux PHP Selector requires CageFS, so integration of CageFS must be completed before starting PHP Selector integration. +CloudLinux OS Shared PHP Selector requires CageFS, so integration of CageFS must be completed before starting PHP Selector integration. ::: -If your control panel has some PHP version selector installed already, we suggest you not to enable CloudLinux PHP Selector for your users, so they will not be confused by two multiple PHP Selectors. However, if you want to use CloudLinux PHP Selector anyway, you can refer to the following article to configure loading of extensions for alt-php: [PHP extensions](/cloudlinux_os_components/#php-extensions) +If your control panel has some PHP version selector installed already, we suggest you not to enable CloudLinux OS Shared PHP Selector for your users, so they will not be confused by two multiple PHP Selectors. However, if you want to use CloudLinux OS Shared PHP Selector anyway, you can refer to the following article to configure loading of extensions for alt-php: [PHP extensions](/cloudlinux_os_components/#php-extensions) -For proper operation of CloudLinux PHP Selector, you should specify location of native PHP binaries of your control panel in `/etc/cl.selector/native.conf`. Then execute +For proper operation of CloudLinux OS Shared PHP Selector, you should specify location of native PHP binaries of your control panel in `/etc/cl.selector/native.conf`. Then execute
@@ -1353,18 +1458,18 @@ cagefsctl --setup-cl-selector to apply changes. More details: [Native PHP Configuration](/cloudlinux_os_components/#native-php-configuration) -You can configure CloudLinux PHP Selector to allow your customers to select any custom PHP version specific to your control panel. Here's how to do this: +You can configure CloudLinux OS Shared PHP Selector to allow your customers to select any custom PHP version specific to your control panel. Here's how to do this: [Roll your own PHP](/cloudlinux_os_components/#roll-your-own-php) -Also, you can compile and add your own PHP extensions to CloudLinux PHP Selector: +Also, you can compile and add your own PHP extensions to CloudLinux OS Shared PHP Selector: [Compiling your own extensions](/cloudlinux_os_components/#compiling-your-own-extensions) ## Integration of Apache modules in control panels -We provide control panels with the ability to build their own Apache packages with modules such as alt-mod-passenger, mod_lsapi, mod_hostinglimits. This is due to the fact that control panels often have their own customly-built Apache. At the same time, the modules must be compiled with the version of Apache and APR libraries that control panels use. Therefore, if your control panel uses Apache that is provided by CloudLinux OS, you can use native packages with modules. The following table represents the RPM package compatibility. +We provide control panels with the ability to build their own Apache packages with modules such as alt-mod-passenger, mod_lsapi, mod_hostinglimits. This is due to the fact that control panels often have their own customly-built Apache. At the same time, the modules must be compiled with the version of Apache and APR libraries that control panels use. Therefore, if your control panel uses Apache that is provided by CloudLinux OS Shared, you can use native packages with modules. The following table represents the RPM package compatibility. -RPMs of Apache provided by CloudLinux, if you are using: +RPMs of Apache provided by CloudLinux OS Shared, if you are using: | | | |-|-| @@ -1373,6 +1478,10 @@ RPMs of Apache provided by CloudLinux, if you are using: If you use custom Apache, follow this documentation on how to build a package for your Apache. + +:::tip Note +The supported Apache versions are 2.2 and 2.4. +::: ### alt-mod-passenger @@ -1475,14 +1584,14 @@ FIND_PATH (APACHE2_2_HTTPD_INCLUDE_DIR ) ```
- + 5. Rebuild the package again, if you set everything correctly, there shouldn't be any problems. 6. Install the module, check that it is successfully loaded into Apache. ### mod_lsapi -1. Install the packages needed to build mod_lsapi from the source +1. Install the packages needed to build mod_lsapi from the source. Some packages may be missing on some platforms, this is not critical
@@ -1494,7 +1603,7 @@ yum install -y python-lxml pytest python-mock ```
-On CloudLinux 7 you also should install criu related packages +On CloudLinux OS Shared 7 and above you also should install criu related packages
@@ -1503,6 +1612,15 @@ yum install -y criu-lve python-criu-lve criu-lve-devel crit-lve ```
+On CloudLinux OS Shared 8 and above you also should install next packages + +
+ +``` +yum install -y alt-python37-mock alt-python37-pytest httpd-devel +``` +
+ 2. Download mod_lsapi sources
@@ -1521,6 +1639,11 @@ rpmbuild --rebuild mod_lsapi-ver.el7.cloudlinux.src.rpm ```
+:::tip Note +This command will fail, but it will create a ~/rpmbuild/SPECS/mod_lsapi.spec file. +This ~/rpmbuild/SPECS/mod_lsapi.spec file will need to be modified. +::: + 4. Remove building dependency from `httpd-devel` in the `mod_lsapi.spec` spec file located in the `~/rpmbuild/SPECS/` directory. 5. Change the paths to copy `mod_lsapi.so` and `mod_lsapi.conf` in the %install section of the `mod_lsapi.spec` file. For example, if Apache root is `/usr/local/apache`, then modules directory and config files directory will be `/usr/local/apache/modules` and `/usr/local/apache/conf.d` respectively. So for the config file you should substitute the following line in the `%install` section: @@ -1569,8 +1692,16 @@ Also you should add mentions of both module and config files in the -6. Rebuild the package again, this time you should get to the compilation stage. During compilation, you may encounter some errors: +6. Rebuild the package again, this time you should get to the compilation stage. +Use this command to rebuild a package +
+``` +rpmbuild -bb ~/rpmbuild/SPECS/mod_lsapi.spec +``` +
+ +During compilation, you may encounter some errors:
``` @@ -1597,13 +1728,186 @@ FIND_PATH (APACHE2_2_HTTPD_INCLUDE_DIR ```
-7. Rebuild the package again, if you set everything correctly, there shouldn't be any problems. +Starting from mod_lsapi-1.1-57, you can use macros for custom paths to the Apache/APR includes/binaries. + +A custom Apache location can be defined via the `CUSTOM_APACHE_ROOT` variable. This implies the following structure under the `${CUSTOM_APACHE_ROOT}`: + +| | | +| :---|:----| +|`${CUSTOM_APACHE_ROOT}/bin`| Apache binary directory, apachectl location| +|`${CUSTOM_APACHE_ROOT}/include`|Apache include directory, httpd.h location| +|`${CUSTOM_APACHE_ROOT}/include`| apr include directory, apr.h location| +|`${CUSTOM_APACHE_ROOT}/include`|apr-util include directory, apu.h location| +|`${CUSTOM_APACHE_ROOT}/lib`|apr lib directory, libapr.so location| +|`${CUSTOM_APACHE_ROOT}/lib`|apr-util lib directory, libaprutil.so location| +|`${CUSTOM_APACHE_ROOT}/modules`|Apache modules directory, mod_alias.so location| + +If the real structure of Apache root differs from the implied one, it's possible to define a custom location for every single component. + +| | | +| :---|:----| +|`CUSTOM_APACHE_BIN`|Apache binary directory, apachectl location| +|`CUSTOM_APACHE_INC_HTTPD`|Apache include directory, httpd.h location| +|`CUSTOM_APACHE_INC_APR`|apr include directory, apr.h location| +|`CUSTOM_APACHE_INC_APU`|apr-util include directory, apu.h location| +|`CUSTOM_APACHE_LIB_APR`|apr lib directory, libapr.so location| +|`CUSTOM_APACHE_LIB_APU`|apr-util lib directory, libaprutil.so location| +|`CUSTOM_APACHE_MODULES`|Apache modules directory, mod_alias.so location| + +7. To customize the switch_mod_lsapi script add into `mod_lsapi.spec` custom script and its configuration file. Configuration file name should be `config.ini` file. Script file name can be arbitrary, because its name should be mentioned in `config.ini` file. Both of them should be copied into */usr/share/lve/modlscapi/custom* in the *%install* section of the `mod_lsapi.spec` file. For example, if script file name is `custom.sh`, you should add the following lines into *%install* section of `mod_lsapi.spec` file: + +``` +install -D -m 644 config.ini $RPM_BUILD_ROOT%{g_path}/custom/config.ini +install -D -m 755 custom.sh $RPM_BUILD_ROOT%{g_path}/custom/custom.sh +``` + +Also you should add mentions of both files in the *%files* section of `mod_lsapi.spec`: + +``` +/usr/share/lve/modlscapi/custom/config.ini +/usr/share/lve/modlscapi/custom/custom.sh +``` + +The requirements to the `config.ini` file and script file are described in the following [section](#how-to-integrate-switch_mod_lsapi-script-with-custom-panels) + +8. Rebuild the package again, if you set everything correctly, there shouldn't be any problems. + +Use this command to rebuild a package +
+``` +rpmbuild -bb ~/rpmbuild/SPECS/mod_lsapi.spec +``` +
+ +9. Install the module, check that it is successfully loaded into Apache. + +#### How to integrate switch_mod_lsapi script with custom panels + +To be able to use switch_mod_lsapi you have to do the steps mentioned below. We assume that if the /usr/share/lve/modlscapi/custom/config.ini file exists, then it is a Custom Panel. + +1. Create config.ini file /usr/share/lve/mod_lsapi/custom/ directory. As an example we have created a config.ini.example file. **All directives that are shown in example file needed in GLOBAL section:** + +``` +[GLOBAL] +VERSION = 1.0.0 +APACHECTL_BIN_LOCATION = /usr/sbin/apachectl +DOC_URL = http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html +EXECUTABLE_BIN = custom.sh +PANEL_NAME=CustomPanel +``` + +2. Create executable script in */usr/share/lve/mod_lsapi/custom/executable.sh*. Name it as you want and specify in the config.ini file. Set EXECUTABLE_BIN=executable.sh in the GLOBAL section of the ini file. **Script must be located in the /usr/share/lve/mod_lsapi/custom/ directory.** + +3. Custom script options correspond to the options of the switch_mod_lsapi. For more information use the [this document](https://docs.cloudlinux.com/command-line_tools/#apache-mod-lsapi-pro). + +#### What you need to write in your custom executable.sh file. + +You have to implement options in your script. Switch_mod_lsapi will call executable with corresponding arguments. Script must return exit code 0 as success or some integer in case of fail. + +**Supported options are:** + +``` +switch_mod_lsapi --setup +/usr/share/lve/modlscapi/custom/executable.sh --setup + +switch_mod_lsapi --uninstall +/usr/share/lve/modlscapi/custom/executable.sh --uninstall + +switch_mod_lsapi --enable-domain test.com +/usr/share/lve/modlscapi/custom/executable.sh --enable-domain test.com +``` + +Script executable.sh executed with two arguments --disable-domain and domain name: + +``` +switch_mod_lsapi --disable-domain test.com +/usr/share/lve/modlscapi/custom/executable.sh --disable-domain test.com +``` + +Script executable.sh executed with --enable-global argument: + +``` +switch_mod_lsapi --enable-global +/usr/share/lve/modlscapi/custom/executable.sh --enable-global +``` + +Script executable.sh executed with --disable-global argument: -8. Install the module, check that it is successfully loaded into Apache. +``` +switch_mod_lsapi --disable-global +/usr/share/lve/modlscapi/custom/executable.sh --disable-global +``` +Сustom script executed with --verbose and --force arguments if switch_mod_lsapi are called with. + +**Not supported options are:** + +``` +--setup-light +--build-native-lsphp +--build-native-lsphp-cust +--check-php +--stat +``` + +mod_lsapi uses one predefined lsphp handler *application/x-httpd-lsphp*, which relates to */usr/local/bin/lsphp* binary. All other lsphp handlers should be added by custom script into */etc/container/php.handler* file. + +**An example of /etc/container/php.handler file** + +``` +application/x-lsphp52 /opt/alt/php52/usr/bin/lsphp +application/x-lsphp53 /opt/alt/php53/usr/bin/lsphp +application/x-lsphp54 /opt/alt/php54/usr/bin/lsphp +application/x-lsphp55 /opt/alt/php55/usr/bin/lsphp +application/x-lsphp56 /opt/alt/php56/usr/bin/lsphp +application/x-lsphp70 /opt/alt/php70/usr/bin/lsphp +application/x-lsphp71 /opt/alt/php71/usr/bin/lsphp +application/x-lsphp72 /opt/alt/php72/usr/bin/lsphp + +application/x-httpd-php81-lsphp /usr/local/apps/php81/bin/lsphp +``` + +**An example of executable.sh script:** + +``` +#!/bin/bash + +CMD=$1 + +if [ "$CMD" == "--setup" ]; then + echo "application/x-httpd-php81-lsphp /usr/local/apps/php81/bin/lsphp" >>/etc/container/php.handler +fi + +if [ "$CMD" == "--uninstall" ]; then + sed -i #application/x-httpd-php81-lsphp#d" /etc/container/php.handler +fi + +if [ "$CMD" == "--enable-domain" ]; then + http_root=`/opt/ExamplePanel/domain2root $2` + if [ -e $http_root/.htaccess ]; then + sed -i '/lsphp/d' $http_root/.htaccess + fi +fi + +if [ "$CMD" == "--disable-domain" ]; then + http_root=`/opt/ExamplePanel/domain2root $2` + if [ -e $http_root/.htaccess ]; then + sed -i '/lsphp/d' $http_root/.htaccess + fi +fi + +# if command not supported +if [ "$CMD" == "--enable-global" ]; then + echo "LSAPI enable global command is not supported by ExamplePanel"; exit 1 +fi +``` ## MySQL Governor +:::Warning +MySQL Governor is not available in CloudLinux OS Admin edition. +::: + 1. Install MySQL Governor
@@ -1652,14 +1956,14 @@ dbtop 10. If the load appears in the dbtop output, then you have successfully configured MySQL Governor. -## CloudLinux LVE and CageFS patches +## CloudLinux OS Shared LVE and CageFS patches :::tip Note -If you are using Apache from the CloudLinux repository (such as httpd or httpd24-httpd), skip this section. +If you are using Apache from the CloudLinux OS Shared repository (such as httpd or httpd24-httpd), skip this section. ::: If you use custom Apache, you need to apply patches so that the processes launched by the Apache are working with LVE and CageFS properly. -Cloudlinux provides patches for the following packages: +Cloudlinux OS Shared provides patches for the following packages: * `suphp` * `suexec` @@ -1749,13 +2053,13 @@ yum groupinstall alt-php{some_version} For details, see [PHP Selector Installation and Update](/cloudlinux_os_components/#installation-and-update-4) -## CloudLinux kernel set-up +## CloudLinux OS Shared kernel set-up ### /proc filesystem access control -* [Integrating control panel with CloudLinux](/control_panel_integration/#integrating-control-panel-with-cloudlinux) +* [Integrating control panel with CloudLinux OS Shared](/control_panel_integration/#integrating-control-panel-with-cloudlinux-os-shared) -CloudLinux kernel allows the server administrator to control the user access to the `/proc` filesystem with the special parameters. +CloudLinux OS Shared kernel allows the server administrator to control the user access to the `/proc` filesystem with the special parameters. Unprivileged system users will not be able to see the processes of other system users, they can only see their processes. See details [here](/cloudlinux_os_kernel/#virtualized-proc-filesystem). If the `fs.proc_can_see_other_uid` parameter is not defined in `sysctl` config during the CageFS package installation, it is set to `0`: `fs.proc_can_see_other_uid=0`. @@ -1764,7 +2068,7 @@ You can also set this parameter in the `/etc/sysctl.co [`hidepid`](/cloudlinux_os_kernel/#remounting-procfs-with-hidepid-option) parameter is set based on the `fs.proc_can_see_other_uid` parameter value automatically during the `lve_namespaces` service starting (i.e. during `lve-utils` package installation and server booting). -#### Integrating control panel with CloudLinux +#### Integrating control panel with CloudLinux OS Shared Run the following command to add administrators into `proc_super_gid` group (if the panel administrator is not a root user or there are several administrators): @@ -1789,7 +2093,7 @@ If the [admins](/control_panel_integration/#admins) list script exists when inst * [How to enable symlink protection](/control_panel_integration/#how-to-enable-symlink-protection) -CloudLinux kernels have symlink attacks protection. When this protection is enabled, the system does not allow users to create symlinks (and hard links) to non-existent/not their own files. +CloudLinux OS Shared kernels have symlink attacks protection. When this protection is enabled, the system does not allow users to create symlinks (and hard links) to non-existent/not their own files. [Here](/cloudlinux_os_kernel/#link-traversal-protection) you can find all protection mechanism parameters. @@ -1828,9 +2132,131 @@ To allow an unprivileged user to create such symlink or hard link, a file/direct ### File system quotas -Some of CloudLinux OS utilities (`cagefsctl`, `selectorctl`, `cloudlinux-selector`, etc) writes files to the user’s home directory on behalf of this user. +Some of CloudLinux OS Shared utilities (`cagefsctl`, `selectorctl`, `cloudlinux-selector`, etc) writes files to the user’s home directory on behalf of this user. So they are subject to the disk quotas if any are set for the user. The utilities can override these quotas to avoid failures. See [File system quotas](/cloudlinux_os_kernel/#file-system-quotas) for kernel parameters controlling these permissions. This parameter is used only for XFS file system. - \ No newline at end of file +## How to integrate X-Ray with a control panel + +:::warning WARNING! +Please note that cPanel, Plesk and DirectAdmin are already supported by X-Ray and do not require any integration effort. +::: + +:::tip Note +X-Ray support is available since API v1.2 (see [versioning](/control_panel_integration/#versioning)) +::: + +In order to integrate X-Ray into your panel, you should follow two simple steps. + +1. Extend the output of your existing [domains integration script](/control_panel_integration/#domains) as follows: + +1.1. Implement an optional flag `--with-php`, upon which all domains with their PHP configuration will be returned. +Thus, if your [integration config file](/control_panel_integration/#example-of-the-integration-config) `/opt/cpvendor/etc/integration.ini` has + +
+ +``` +domains = /opt/cpvendor/bin/vendor_integration_script domains +``` +
+ +in `[integration_scripts]` section, X-Ray would call this script as +
+ +``` +/opt/cpvendor/bin/vendor_integration_script domains --with-php +``` +
+ +1.2. In order to enable X-Ray support, the script output should return a representation of all domains on the server: a key-value object, where a key is a domain (or subdomain) and a value is a key-value object contains the owner name (UNIX users) and PHP interpreter configuration. **If you are extending the existing domains integration script, you just include the PHP configuration.** + +PHP interpreter configuration for each domain is to be placed in the nested key-value object of the following format: + +
+ +``` +“php”: { + “version”: str + “ini_path”: str + “is_native”: bool + “fpm”: str +} +``` +
+ +**Output example** + +
+ +``` +{ + "data": { + "domain.com": { + "owner": "username", + "document_root": "/home/username/public_html/", + "is_main": true, + "php": { + "version": "56", + "ini_path": "/opt/alt/php56/link/conf", + "is_native": true + } + }, + "subdomain.domain.com": { + "owner": "username", + "document_root": "/home/username/public_html/subdomain/", + "is_main": false, + "php": { + "version": "72", + "ini_path": "/opt/alt/php72/link/conf", + "fpm": "alt-php72-fpm" + } + } + }, + "metadata": { + "result": "ok" + } +} +``` +
+ +**Data description** + +| | | | +|-|-|-| +|Key|Required|Description| +|version|True|The version of php that is selected by the end user or administrator in the panel for this domain. Should be presented in the format XY where XY is the exact version of PHP. List of supported versions is presented below.| +|ini_path|True|Path where PHP expects additional .ini files to scan, usually compiled path into binary PHP.Example where to get this value: ![](/images/IniPath.png)| +|is_native|False|If your panel [has integrated CloudLinux OS Shared PHP Selector](/control_panel_integration/#integrating-cloudlinux-os-shared-php-selector), then there is the list of native PHP binaries in the `native.conf` (see details [here](/cloudlinux_os_components/#native-php-configuration)). The `is_native` value must be set to true if the binary of the above version of PHP is specified in the `native.conf`, false or omitted otherwise. This way the X-Ray will determine if CloudLinux OS Shared PHP Selector is enabled for a given domain| +|fpm|False|The name of the FPM service that uses specified domain, optional value. To make the X-Ray work on domains using FPM, you need to restart FPM service. In X-Ray added automatic restart of the FPM service if the tracing task is created for the domain that uses the FPM therefore we need this field, otherwise it can be omitted| + +2. After finishing the X-Ray integration script, enable X-Ray support through [panel_info integration script](/control_panel_integration/#panel-info): add xray component into `supported_cl_features` object. + +**Output example** + +
+ +``` +{ + "data": { + "name": "SomeCoolWebPanel", + "version": "1.0.1", + "user_login_url": "https://{domain}:1111/", + "supported_cl_features": { + "php_selector": true, + "ruby_selector": true, + "python_selector": true, + "nodejs_selector": false, + "mod_lsapi": true, + "mysql_governor": true, + "cagefs": true, + "reseller_limits": true, + "xray": true + } + }, + "metadata": { + "result": "ok" + } +} +``` +
diff --git a/docs/deprecated/README.md b/docs/deprecated/README.md index 10c8f6b98..b84c64681 100644 --- a/docs/deprecated/README.md +++ b/docs/deprecated/README.md @@ -1,6 +1,6 @@ -# Deprecated - +# Deprecated +* [Python Selector (Old)](/deprecated/#python-selector-old) * [Git for cPanel](/deprecated/#git-for-cpanel) * [LVE-Stats 0.x](/deprecated/#lve-stats-0-x) * [OptimumCache](/deprecated/#optimumcache) @@ -8,6 +8,164 @@ * [CPU limits](/deprecated/#cpu-limits) * [Package integration](/deprecated/#package-integration). You can use [Control panel integration guide](/control_panel_integration/) instead. * [Redis support for HostingLimits]() +* [Migration to EA4](/deprecated/#migration-to-easyapache-4) + +## Python Selector (Old) + +:::tip Note +This documentation is for the old version of Python Selector. You can find documentation for the new Python Selector [here](/cloudlinux_os_components/#python-selector) +::: + +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 +``` +
+ + +### Installation + +::: tip Note +The instructions below are suitable only for EasyApache 3 and EasyApache 4. You should follow [this instruction](https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:cloudlinux:enable_ruby_python_selector) if you use LiteSpeed. +::: +Install tools to create isolated Python environments and Passenger Apache module. For servers with EasyApache3: + +
+ +``` +yum install lvemanager alt-python-virtualenv alt-mod-passenger +``` +
+ +for EasyApache4: + +
+ +``` +yum install lvemanager alt-python-virtualenv ea-apache24-mod-alt-passenger +``` +
+ +To use Python Selector you should install alternative Python packages: + +
+ +``` +yum groupinstall alt-python +``` +
+ +To use MySQL database you should install alt-python27-devel package: + +
+ +``` +yum install alt-python27-devel +``` +
+ +::: tip Note +After installation, please make sure that you have unmarked appropriate checkboxes in LVE Manager Options tab to show Python App in web-interface. +::: + +::: tip Note +Adding Python modules requires executing permissions to gcc/make binaries. Please enable compilers in Compiler Access section of WHM, then run: `cagefsctl --force-update` +::: + +### End user access + +1. In _Software/Services_ area choose _Select Python Environment_. + +![](/images/clip000133.jpg) + +2. Create project form will appear. Choose interpreter version for your application, application folder name (project path) and URI for accessing your application. Click “Create project” to create an application. + +![](/images/clip000233.jpg) + +After a little while a new application entry will be appended to the web-page. + +![](/images/clip000255.jpg) + +3. You can edit path (folder name of the project in the home directory, for example, _/home/clman1/project_name_ ), uri for application, wsgi handler. If you click Edit - the value is converted to input field and thus becomes editable. When editing is complete, click Save . + +![](/images/clip000256.jpg) + +4. Wsgi entry is to specify python wsgi application entry point. It must be specified as filename, must be callable and separated by colon. If your app is running from file flask/run.py by calling callable app, set flask/run.py:app . + +![](/images/clip000257.jpg) + +5. When Show control is clicked, python extensions section will be expanded. It gives the ability to add or remove python modules. When start typing in input field, appropriate hints are shown in drop-down list. Choose the entry you want from drop-down and click Add . + +![](/images/clip000261.jpg) + +If you click Delete , the corresponding module entry will disappear. +In addition to setting path, uri and wsgi , the interpreter version can be changed as well by changing the value in select drop-down. + +6. No changes are applied to application environment until Update button is clicked. Before the Update button is clicked, all changes can be reverted with Reset button. + +The newly created application will be supplied with stub only. A real application ought to be put into application folder. After application is placed into application folder, the wsgi parameter can be set. + +Click Remove to delete the application - the application folder itself will remain unmoved. + +_Note. For LVE Manager version 0.9-10 and higher:_ + +When creating an application you can use the key --domain , which attaches application to domain. If --domain key is not specified, then the main users domain will be used by default. +To create application run: + +
+ +``` +/usr/bin/selectorctl --interpreter=python --version=VERSION[--user=USER] [--domain=DOMAIN] [--print-summary] [--json]–-create-webapp +``` +
+ +When changing application URI, --domain key can be used simultaneously, in this case not only URI will be changed, but also the application domain. + +To change application URI run: + +
+ +``` +/usr/bin/selectorctl --interpreter=python [--user=USER][--domain=NEW_DOMAIN] [--print-summary] [--json] --transit-webapp +``` +
+ +The possibility to choose domain when creating an application was added to web interface as well. + +![](/images/webapp001_zoom94.png) + +Also, you can run simple commands from web interface (e.g. you can install packages from specific repositories or control web applications by means of django -admin). + +![](/images/webapp002_zoom93.png) + + +### Hide Python Selector icon + +It is possible to hide or show Python Selector icons by marking or unmarking proper checkbox in LVE Manager _Options_ tab. + +![](/images/CL-hide-python-ruby.png) + +The same result can be accomplished in CLI by running: + +
+ +``` +cloudlinux-config set --json --data '{"options":{"uiSettings":{"hideRubyApp":false, "hidePythonApp":false}}}' +``` +
+ +:::tip Note +If you are using cPanel/WHM, you can also configure hide/show CloudLinux OS Shared Python Selectors in WHM | Feature Manager. +For that, you’d need to first uncheck `Hide Python App in web-interface` in the LVE Manager. This will make the menu appear for all accounts. After that, you are free to disable this app in WHM | Feature Manager for the required feature lists. +::: + ## Git for cPanel @@ -222,7 +380,7 @@ $ yum install MySQL-python
-If you have MySQL 5.3+ installed on CloudLinux 5 server, and there is no libmysqlclient_r.so.15 on the server, run: +If you have MySQL 5.3+ installed on CloudLinux OS Shared 5 server, and there is no libmysqlclient_r.so.15 on the server, run:
@@ -630,7 +788,7 @@ OPTIMUMCACHE IS NO LONGER SUPPORTED #### Requirements -* 64bit CloudLinux 6.x or higher +* 64bit CloudLinux OS Shared 6.x or higher * ext4 filesystem * kernel lve1.2.55 or later. @@ -1627,9 +1785,9 @@ You can use [Control panel integration guide](/control_panel_integration/) inste **[lve-utils 1.4+]** -CloudLinux can automatically detect the most popular control panels, like cPanel - and allows to set different limits for users in different packages. It simplifies management as you don't have to choose between one limit that fits all your customers on the server, or individual limits for the customers. +CloudLinux OS Shared can automatically detect the most popular control panels, like cPanel - and allows to set different limits for users in different packages. It simplifies management as you don't have to choose between one limit that fits all your customers on the server, or individual limits for the customers. -If you have a custom made control panel, with your own 'package' implementation, you can still use CloudLinux framework to manage limits for your packages. +If you have a custom made control panel, with your own 'package' implementation, you can still use CloudLinux OS Shared framework to manage limits for your packages. To do that, you would need: @@ -1702,6 +1860,89 @@ Edit or modify parameter `CUSTOM_GETPACKAGE_SCRIPT` + +``` +$ uname -r|grep lve +``` +
+ +If you get an output, it means the system is running CloudLinux kernel. CloudLinux kernels have lve in its name, like: 2.6.32-458.18.1.lve1.2.44.el6.x86_64 + +Alternatively you can check for the presence of `/proc/lve/list` file. + +Check if CageFS is enabled (as root ): + +
+ +``` +$ /usr/sbin/cagefsctl --cagefs-status +``` +
+ +Check if CageFS is enabled for a particular user (as `root` ): + +
+ +``` +$ /usr/sbin/cagefsctl --user-status _USER_NAME_ +``` +
+ +Check if you are inside CageFS: + +Check for the presence of `/var/.cagefs/.cagefs.token` file - if present, it means that you are inside CageFS. + +### Displaying CPU, memory & IO limits + + +Most control panels choose to display CloudLinux OS Shared usage & limits to end customers. To simplify that, we lve-stats exports a file that can be easily read and processed by a control panel to display the necessary information. + +The information is located in the /var/lve/info file. This information is updated every 5 minutes, and contains default limits (first line), as well as usage and limits for all customers. If a customer is not present in the file, it means that customer is not active (no scripts were executed recently for the customer), and a customer has default limits (so you can display no usage, and default limits in the control panel for that customer. + +The data is stored in a form of one line per customer, with coma separated values. + +| | | +|-|-| +|0 | user id| +|1 | entry processes | +|2 | entry processes limit| +|3 | CPU | +|4 | CPU limit| +|5 | Virtual Memory | +|6 | Virtual Memory Limit| +|7 | Number of virtual memory faults| +|8 | Number of entry processes faults| +|9 | Physical Memory Limit| +|10 | Physical Memory | +|11 | Number of Physical memory faults| +|12 | Number of processes limit| +|13 | Number of processes | +|14 | Number of processes fault| +|15 | Reserved| +|16 | IO Usage| +|17 | IO Limit| + +With LVE version 4 (CloudLinux OS Shared lve0.x) only the first 9 parameters are available. You can check the the version by reading the first byte of /proc/lve/list. + +In the version 6 all 15 parameters should be available. + +There are only 2 LVE versions currently used in production. Future versions might add more fields, but will not alter order of existing fields. + +Memory is defined in 4KB pages (so, 1024 would mean 1024 4KB pages, or 4MB). + + IO is defined as KB/s. + + CPU is defined as % of total number of cores on a server. + + ## Redis support for HostingLimits :::warning Warning! @@ -1802,4 +2043,127 @@ Number of seconds to wait before attempting to reconnect to Redis after the last ``` LVERedisTimeout 120 ``` -
\ No newline at end of file +
+ +## Migration to EA4 + +* [Advices and limitations](/cloudlinux_installation/#advices-and-limitations) +* [CentOS with EasyApache 4](/cloudlinux_installation/#centos-with-easyapache-4) +* [CentOS without EasyApache 4](/cloudlinux_installation/#centos-without-easyapache-4) +* [CloudLinux OS Shared without EasyApache 4](/cloudlinux_installation/#cloudlinux-os-shared-without-easyapache-4) +* [More about cloudlinux_ea3_to_ea4 script](/cloudlinux_installation/#more-about-cloudlinux-ea3-to-ea4-script) + +### Advices and limitations + +* Use cPanel 11.55.999.66(55.999.66) or higher version. +* Hardened EA4 limitations: + * **ea-php51** and **ea-php52** have no PHP-FPM support. Please use **mod_lsapi** instead. + +Follow the instructions [here](/cloudlinux_os_components/#installation-3) to install and configure mod_lsapi. + +### CentOS with EasyApache 4 + +If EasyApache 4 was installed earlier on your CentOS server and you would like to migrate to CloudLinux OS Shared: + +1. Convert server from CentOS to CloudLinux (see [these instructions](/cloudlinux_installation/#converting-existing-servers)). + +2. Restart Apache service. + +### CentOS without EasyApache 4 + +If EasyApache 4 was not installed earlier on your CentOS server and you would like to migrate to CloudLinux OS Shared: + +1. Convert server from CentOS to CloudLinux OS Shared (see [these instructions](/cloudlinux_installation/#converting-existing-servers)). + +2. Run: + +
+ +``` +cd ~; wget https://repo.cloudlinux.com/cloudlinux/sources/cloudlinux_ea3_to_ea4; sh cloudlinux_ea3_to_ea4 --convert +``` +
+ +(Find examples of `cloudlinux_ea3_to_ea4` script usage below). + +### CloudLinux OS Shared without EasyApache 4 + +Install EasyApache4 on clean CloudLinux OS Shared from ISO image or migrate to EasyApache4 on existings CloudLinux OS Shared servers: + +1. Install cPanel. +2. Run: + +
+ +``` +cd ~; wget https://repo.cloudlinux.com/cloudlinux/sources/cloudlinux_ea3_to_ea4; sh cloudlinux_ea3_to_ea4 --convert +``` +
+ +(Find examples of `cloudlinux_ea3_to_ea4` script usage below). + + +### More about cloudlinux_ea3_to_ea4 script + +About `cloudlinux_ea3_to_ea4` migration script parameters: + +
+ +``` +cloudlinux_ea3_to_ea4 [ADDITIONS] ACTIONS +``` +
+ + +Usage: + +| | | +|-|-| +|-h, --help | Print this message| + +`Actions` (required parameter, shows what should script do): + +| | | +|-|-| +| -c, --convert | Convert EA3 to EA4| +| -r, --revert | Revert to EA3| + +`Additions` (optional parameter, adds to action installation of extra components): + +| | | +|-|-| +| -m, --mod_lsapi | Install mod_lsapi| +| -p, --mod_passenger | Install alt-mod-passenger| +| -a, --altphp | Install/Update alt-php| + + +**Examples:** + +* If you want to install EA4 with mod_lsapi and update/install alt-php: + +
+ +``` +sh cloudlinux_ea3_to_ea4 --convert --mod_lsapi --altphp +``` +
+ +* 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](https://cloudlinux.zendesk.com/hc/articles/360025827914-CloudLinux-OS-Installation-FAQ) diff --git a/docs/elevate/.DS_Store b/docs/elevate/.DS_Store new file mode 100644 index 000000000..e04ec8588 Binary files /dev/null and b/docs/elevate/.DS_Store differ diff --git a/docs/elevate/README.md b/docs/elevate/README.md new file mode 100644 index 000000000..30c2ab601 --- /dev/null +++ b/docs/elevate/README.md @@ -0,0 +1,644 @@ +# ELevate + +[[toc]] + +:::warning 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. +::: + +:::warning +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](https://www.cloudlinux.com/CloudLinux-and-Imunify-support-policy.pdf). 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](https://wiki.almalinux.org/elevate/), aims to provide a streamlined method of upgrading CloudLinux 7 systems to CloudLinux 8 in-place. + +The [Leapp utility](https://leapp.readthedocs.io/) is the main tool used to perform the upgrade. + +The [CloudLinux 7 with cPanel ELevate Scenario](#elevate-scenario-cloudlinux-7-with-cpanel) uses a modified version of the [cPanel ELevate](https://github.com/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](#will-it-upgrade-everything-i-have-on-my-system). + +Systems with configurations and packages that substantially differ from a typical CloudLinux 7 installation could encounter issues previously not seen before. + + +### Can it break something on my system? + +It can. + +A full system upgrade is an inherently invasive procedure. In some cases, due to different system configurations, package errors or even power failures, you may encounter issues during the upgrade process that can't be automatically recovered from. + +Said issues may be severe, **up to and including rendering the system completely inaccessible.** + +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 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](/elevate/#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 special `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](#elevate-scenario-cloudlinux-7-with-no-panel-or-a-custom-panel) 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](#elevate-scenario-cloudlinux-7-with-cpanel) 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: + +* [How to Backup & Migrate All CloudLinux Settings to Another Server](https://cloudlinux.zendesk.com/hc/en-us/articles/115004277894-How-to-Backup-Migrate-All-CloudLinux-Settings-to-Another-Server) +* [How to Restore PHP Selector Options](https://cloudlinux.zendesk.com/hc/en-us/articles/115004517465) +* [How to obtain activation keys, register and migrate servers ](https://cloudlinux.zendesk.com/hc/en-us/articles/115003888573-How-to-obtain-activation-keys-register-and-migrate-servers) + + +### 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](https://github.com/cpanel/elevate/issues) is the most appropriate place to report them. + +For CloudLinux-specific issues, report them in the [CloudLinux ELevate issue tracker](https://github.com/cloudlinux/elevate/issues) 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](https://github.com/AlmaLinux/leapp-repository/issues). + +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 +``` + + +#### Package repository defined multiple times + +You may encounter the following error message when attempting to upgrade: + +``` +Inhibitor: A YUM/DNF repository defined multiple times +``` + +Refer to the `/var/log/leapp/leapp-report.txt` for the details on the repository in question. + +To correct the issue, examine your yum reposiory configuration and clear out any dupicate entries before restarting the upgrade process. + + +#### SSHD config default mismatch + +If your OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, this upgrade inhibitor will apperar. + +The option's default is "yes" in RHEL7, but will change in RHEL8 to "prohibit-password", which may affect your ability to log onto this machine after the upgrade. + +To prevent this from occuring, set the PermitRootLogin option explicity to preserve the default behaivour after migration: + +``` +echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config +``` + +Alternatively, configure the SSHD so that the option is present explicitly, without leaving it to the default behaviour. + + +#### Disabling PAM modules + +PAM module pam_pkcs11 is no longer available in RHEL-8 since it was replaced by SSSD. +Leaving this module in PAM configuration may lock out the system. + +Allow Leapp to disable the pam_pkcs11 module in PAM configuration by adding an entry to the Leapp answerfile: + +``` +sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True +``` + +#### CLN registration + +Should you encounter an issue with the `switch_cln_channel` actor, make sure that your system is registered with the CLN network. + +`rhn_check; echo $?` + +If it is not, you may want to force a [re-registration.](https://docs.cloudlinux.com/cloudlinux_installation/#license-activation) + + +#### DNF plugin installation + +You may encounter issues with Leapp DNF actors failing with the following message: +`Cannot obtain data about the DNF configuration.` + +To resolve this problem, ensure that the **dnf config-manager plugin** is installed and is functioning properly. + +If not, enable the corresponding package repository (e.g. `centos-extras`) and install it. + +`dnf install 'dnf-command(config-manager)'` + + +#### DNF transaction failure + +The main upgrade transaction is performed while the system is booted into a custom InitRamFS. From there, all the package operations prepared during the previous steps are performed. + +While in this state, the system is inaccessble remotely via SSH. However, it can still be accessed through tools such as VNC. + +In some cases, the upgrade may encounter an unrecoverable error while running the transaction, which can result in the system remaining in a halfway-upgraded, unusable and partially inaccessible state. + +For example, if a package encounters a fatal error inside its `%preun` or `%prein` scriptlets during the upgrade, the transaction and the upgrade process may halt, leaving the system in an unusable state. + +It is recommended to remove such packages prior to the upgrade, or, alternatively, add them to the `to_keep` list (see *Transaction Configuration Files* section) to prevent Leapp from attempting to upgrade them. + + +### ELevate cPanel Scenario issues + +These issues can occur during the upgrade on CloudLinux 7 + cPanel systems. + +#### Post-reboot dnf upgrade error + +In some system configurations, you may encounter an issue with the [stage 4](#stage-4) of the upgrade halting with a message similar to the following: + +``` +[INFO] Running: /usr/bin/dnf -y --allowerasing update +[INFO] Error: Failed to download metadata for repo 'cloudlinux-base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried +[INFO] Sending notification: Fail to update to CloudLinux 8 +[ERROR] The elevation process failed during stage 4. +[ERROR] +[ERROR] You can continue the process after fixing the errors by running: +[ERROR] +[ERROR] /usr/local/cpanel/scripts/elevate-cpanel --continue +``` + +This most commonly occurs in two cases: +* When a package repository configuration file not associated with any RPM packages can no longer be accessed on the post-upgrade system due to the changes in Yum variables; +* When a package repository configuration file associated with a RPM package was modified manually, and thus, not upgraded automatically during the process. + +Check the URL/mirrorlist of the mentioned Yum repository. Make sure it's accessible from the machine. +If there's a related `.rpmnew` file present, consider replacing the repository config file with it. + +#### Missing EA packages after the upgrade + +You may discover that some, or all EasyApache packages (with the `ea-*` naming scheme) on your post-upgrade system are missing. + +This outcome will be accompanied by an error message in the upgrade log (/var/log/elevate-cpanel.log) akin to the following: + +``` +* 2023-03-20 15:10:03 (4265) INFO Running: /usr/local/bin/ea_install_profile --install /etc/cpanel/ea4/profiles/custom/current_state_at_2023-03-20_12:22:49.json +* 2023-03-20 15:10:03 (4266) INFO +* 2023-03-20 15:10:17 (4280) INFO Problem: package ea-apache24-mod_lsapi-1:1.1-64.el8.cloudlinux.x86_64 requires liblsapi < 1:1.1-65, but none of the providers can be installed +* 2023-03-20 15:10:17 (4280) INFO - cannot install both liblsapi-1:1.1-64.el8.cloudlinux.x86_64 and liblsapi-1:1.1-65.el8.cloudlinux.x86_64 +* 2023-03-20 15:10:17 (4280) INFO - cannot install the best candidate for the job +* 2023-03-20 15:10:17 (4280) INFO The entire output was logged to: /usr/local/cpanel/logs/packman/errors/2023-03-20_15:10:17-1 +``` + +This happens most frequently when one or more testing repositories were enabled on the pre-upgrade system. + +The Leapp framework attempts to upgrade all packages to their latest available versions - which includes versions available from testing repositories. + +EasyApache packages are not included in Leapp upgrade procedures - they're removed from the system during the initial upgrade stage and are installed again after Leapp completes the main upgrade transaction. EasyApache packages have strict dependency version requirements, which means that if the installed dependency's version is too recent, it'll need to be downgraded. + +However, the tool used to restore the EA packages, `ea_install_profile`, does not perform downgrades automatically and will instead interrupt the restoration process. + +To resolve the issue: +* First, install the packages listed in the log as problematic manually while downgrading their dependencies as needed. +* Then, run the `ea_install_profile` command with the exact same arguments as shown in the log. + +In the above example, you'd need to run: +``` +dnf -y install ea-apache24-mod_lsapi +/usr/local/bin/ea_install_profile --install /etc/cpanel/ea4/profiles/custom/current_state_at_2023-03-20_12:22:49.json +``` + +#### Outdated cPanel version + +You may encounter the following error message when attempting to upgrade: + +``` +This installation of cPanel *YOUR_CPANEL_VERSION* does not appear to be up to date. Please upgrade cPanel to a most recent version. +``` + +You need to have an updated cPanel installation to proceed with the upgrade. +Please refer to the [Latest cPanel & WHM Builds (All Architectures)](http://httpupdate.cpanel.net/) and ensure you have a cPanel updated to a version from one of the following tiers: STABLE, RELEASE, CURRENT or EDGE. + +LTS versions are not supported. + + +#### EasyApache 4 packages + +You may encounter the following error message when attempting to upgrade: + +``` +[WARN] *** Elevation Blocker detected: *** + One or more EasyApache 4 package(s) are not compatible with CloudLinux 8. + Please remove these packages before continuing the update. + - ea-apache24-mod-unsupported-package + - ... +``` + +Review and remove the listed EasyApache packages, then restart the process. + + +#### Unsupported third-party components + +You may encounter the following error message when attempting to upgrade: + +``` +One or more enabled YUM repo are currently unsupported. +You should disable these repositories and remove packages installed from them +before continuing the update. + +Consider reporting this limitation to https://github.com/cpanel/elevate/issues +``` + +`elevate-cpanel` checks for presence of unknown enabled repositories and blocks the migration process if one is found. + +The packages from the listed repositories **won't be properly upgraded** if Leapp doesn't contain their data in its configuration files. + +It's recommended to follow the provided suggestion and remove the repositories and packages before running the upgrade. + +If you'd like to add the configuration data for new repositories and packages to Leapp, please refer to the **Contribution** section of the manual for information on the proper procedure for doing so. + + +## Known issues + +### Web servers +The Litespeed web server installation scheme is currently incompatible with ELevate. + +It can be updated *after* the upgrade is complete, but won't be automatically upgraded with the rest of the system during the ELevate process. + +The same limitation applies to NGINX installations not provided through cPanel or CloudLinux mechanisms. + +## Contribution + +ELevate is developed and built as a tool for RHEL-based distributives, not just CloudLinux specifically. + +ELevate supports migrating to/from other distributions and is open for all to contribute to and enhance. + +You can find more information and FAQ about the AlmaLinux ELevate this project is built upon at [almalinux.org/elevate](https://almalinux.org/elevate) and [Migration SIG](https://wiki.almalinux.org/sigs/Migration), as well as contribute using the ELevate Contribution Guide. + +CloudLinux does not provide support related to integrating third-party repositories or packages into the upgrade process. However, you can add the aforementioned components to the Leapp database yourself. + +Please check the [Third-party integration](https://github.com/AlmaLinux/leapp-repository/tree/almalinux#third-party-integration) section in the linked README for instructions on integrating external repositories and packages. + + +## ELevate Scenario - CloudLinux 7 with no panel or a custom panel + +This scenario contains steps on how to upgrade CloudLinux 7 to CloudLinux 8 on no-panel/custom panel systems. + +1. First of all, make sure that your CloudLinux 7 is fully upgraded and on the latest kernel version. + +2. After that, download the elevate-testing.repo file with the project testing repo: + +``` +sudo curl https://repo.almalinux.org/elevate/testing/elevate-testing.repo -o /etc/yum.repos.d/elevate-testing.repo +``` + +3. Import the ELevate GPG key: + +``` +sudo rpm --import https://repo.almalinux.org/elevate/RPM-GPG-KEY-ELevate +``` + +4. Install leapp packages and migration data for the CloudLinux OS. + +``` +sudo yum install -y leapp-upgrade leapp-data-cloudlinux +``` + +### Pre-upgrade + +Start a preupgrade check. In the meanwhile, the Leapp utility creates a special `/var/log/leapp/leapp-report.txt` file that contains possible problems and recommended solutions. No rpm packages will be installed during this phase. + +:::danger WARNING +The preupgrade check will likely fail as the default CloudLinux 7 doesn't meet all requirements for migration. That is expected. +::: + +``` +sudo leapp preupgrade +``` + + +This summary report will help you get a picture of whether it is possible to continue the upgrade. + +The preupgrade process may stall with the following message: + +``` +Inhibitor: Newest installed kernel not in use +``` + +Make sure your system is running the latest kernel before proceeding with the upgrade. If you updated the system recently, a reboot may be sufficient to do so. Otherwise, edit your Grub configuration accordingly. + +:::tip Note +In certain configurations, Leapp generates `/var/log/leapp/answerfile` with true/false questions. Leapp utility requires answers to all these questions in order to proceed with the upgrade. +::: + +Once the preupgrade process completes, the results will be contained in the file `/var/log/leapp/leapp-report.txt`. + +It's advised to review the report and consider how the changes will affect your system. + +:::danger WARNING +In particular, pay attention to the packages that will not be upgraded during the transaction. + +Should any packages or package repositories that are unknown to Leapp be detected, they will be listed in the report. Consider how leaving the listed items unupgraded will affect the stability of your system. + +If the packages listed as unknown in the report are critical for your system, proceeding with the upgrade is **extremely likely** to damage its functionality, up to making the machine unaccessible. +::: + +If you'd like to perform an upgrade on a system with unknown packages/repositories reported, and you're confident about all the potential risks, consider first adding the unknown repositories to Leapp's database, as described [here](https://github.com/AlmaLinux/leapp-repository/tree/almalinux#third-party-integration). + + +### Transaction Configuration Files + +If you want to manually override the framework's upgrade actions for specific packages, you may do so by editing the files contained in `/etc/leapp/transaction/`. + +These configuration files have priority over automatic package upgrade resolutions and Package Elevation Service data. + +The configuration files are as follows: +* to_install + * Install these packages. Don't remove them or preserve them as-is. +* to_remove + * Remove these packages. Do not attempt to keep them or upgrade them. +* to_keep + * Do not upgrade these packages. Keep them as they are on the system. +* to_reinstall + * Remove these packages during the update, then reinstall them. Mostly useful for packages that have the same version string between major versions, and thus won't be upgraded automatically. + + +### Upgrade + +Start an upgrade. You’ll be offered to reboot the system after this process is completed. + + +```bash +sudo leapp upgrade +sudo reboot +``` + + +:::tip Note +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 that the upgrade process has 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`. +::: + +A new entry in GRUB called ELevate-Upgrade-Initramfs will appear. The system will be automatically booted into it. Observe the update process in the console. + +After the reboot, login into the system and check the migration report. Verify that the current OS is the one you need. + + +```bash +cat /etc/redhat-release +cat /etc/os-release +rpm -qa | grep el7 # check if there are unupgraded packages present +cat /var/log/leapp/leapp-report.txt +cat /var/log/leapp/leapp-upgrade.log +``` + +In addition, check the leapp logs for .rpmnew configuration files that may have been created during the upgrade process. In some cases os-release or yum package files may not be replaced automatically, requiring the user to rename the .rpmnew files manually. + + +## ELevate Scenario - CloudLinux 7 with cPanel + +This scenario contains steps on how to upgrade CloudLinux 7 to CloudLinux 8 on systems with cPanel present. + +It uses an additional tool to assist with migration of cPanel-related features - a modified version of [elevate-cpanel](https://github.com/cpanel/elevate). + +### Upgrade process overview + +The cPanel upgrade process is divided into multiple `stages`. +Each `stage` is responsible for one part of the upgrade. +Between stages, a `reboot` is performed, with one last reboot at the end of the final stage. + +#### Stage 1 + +The elevation process is initiated by installing the `elevate-cpanel` service responsible for controlling the upgrade process between multiple reboots. + +#### Stage 2 + +The current distro packages are updated. +cPanel services are disabled and the custom upgrade MOTD is set up. + +#### Stage 3 + +The Leapp ELevate package repository is set up and Leapp packages are installed. +The cPanel packages are prepared for the update. + +Some known conflicting packages are removed and some existing configurations are backed up. These packages will be reinstalled later. + +The main `leapp upgrade` process is executed. + +#### Stage 4 + +At this stage the machine should be running CloudLinux 8. + +cPanel products for the new distro are updated. + +The packages that were removed during the previous stage are restored. + +#### Stage 5 + +This is the final stage of the upgrade process. +Some sanity checks and cleanup tasks are performed. + +The `elevate-cpanel` service used during the upgrade process is removed. + +A final reboot is performed at the end of this stage. + +### Preparing + +Make sure your system is fully updated before starting the upgrade process. + +```bash +sudo yum -y update +``` + +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 --upgrade-to=cloudlinux` + + +:::tip 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. + +:::danger 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 + +:::warning +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 --upgrade-to=cloudlinux` + +:::tip 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 --upgrade-to=cloudlinux` +::: + +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` + + +:::tip 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. + +```bash +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/docs/for_cloudlinux_partners/README.md b/docs/for_cloudlinux_partners/README.md index b368e9d3e..0ce7a2a3d 100644 --- a/docs/for_cloudlinux_partners/README.md +++ b/docs/for_cloudlinux_partners/README.md @@ -1,11 +1,11 @@ -# For CloudLinux partners +# For CloudLinux OS partners * [License portal (CLN)](/for_cloudlinux_partners/#license-portal-cln) * [CloudLinux WHMCS plugin](/for_cloudlinux_partners/#cloudlinux-whmcs-plugin) ### License portal (CLN) -You can find the complete documentation for the CloudLinux Network (CLN) [here](https://docs.cln.cloudlinux.com/). +You can find the complete documentation for CloudLinux Network (CLN) [here](https://docs.cln.cloudlinux.com/). ### CloudLinux WHMCS plugin diff --git a/docs/introduction/README.md b/docs/introduction/README.md index 0516d4f9d..319b7fc96 100644 --- a/docs/introduction/README.md +++ b/docs/introduction/README.md @@ -1,81 +1,209 @@ # Introduction -* [What is CloudLinux OS](/introduction/#what-is-cloudlinux-os) -* [CloudLinux OS lifecycle](/introduction/#cloudlinux-os-lifecycle) -* [Description of the CloudLinux OS components](/introduction/#description-of-the-cloudlinux-os-components) +[[toc]] -### What is CloudLinux OS +## CloudLinux OS editions -CloudLinux OS is designed for shared hosting providers. It isolates each customer into a separate “Lightweight Virtualized Environment” (LVE), which partitions, allocates, and limits server resources, like memory, CPU, and connections, for each tenant. This ensures that tenants cannot jeopardize the stability of your servers, causing all sites to slow down or even come to a halt. CloudLinux OS also “cages” tenants from one another to avoid security breaches. This way, unstable scripts or malware are not able to sprawl across your customer sites, causing severe harm. +|**Features**|**CloudLinux OS Solo**|**CloudLinux OS Admin**|**CloudLinux OS Shared**|**CloudLinux OS Shared Pro**| +|:-:|:-:|:-:|:-:|:-:| +|Maximum amount of hosting accounts|1|5|unlimited|unlimited| +|Resource Limits (LVE)|No|**Yes***|**Yes**|**Yes**| +|Cage FS|**Yes**|**Yes**|**Yes**|**Yes**| +|MySQL Governor|No|No|**Yes**|**Yes**| +|PHP Selector|**Yes**|**Yes**|**Yes**|**Yes**| +|Other Selectors (Python, Node.js, Ruby)|No|**Yes****|**Yes****|**Yes****| +|HardenedPHP|**Yes**|**Yes**|**Yes**|**Yes**| +|Apache mod_lsapi PRO|**Yes**|**Yes**|**Yes**|**Yes**| +|SecureLinks|No|**Yes**|**Yes**|**Yes**| +|Website monitoring tool|**Yes**|**Yes**|**Yes**|**Yes**| +|Website monitoring alerts|**Yes**|No|No|No| +|Slow Site analyzer|**Yes**|**Yes**|**Yes**|**Yes**| +|PHP X-Ray|**Yes**|**Yes**|No|**Yes**| +|Centralized Monitoring|No|No|No|**Yes**| +|AccelerateWP|**Yes**|**Yes**|No|**Yes**| +|Support 24/7|**Yes**|**Yes**|**Yes**|**Yes**| -### CloudLinux OS lifecycle +\* Limits are disabled by default. -CloudLinux supports the same end-of-life policy as RHEL. Using a supported operating system is critical to maintaining a stable server environment. +\** Python/Node.js/Ruby Selectors are available only for cPanel, DirectAdmin servers, and servers with custom panel with own integration. -Currently supported: +### 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](https://docs.solo.cloudlinux.com/introduction/). -| | | | -|-|--|-| -|Operating System | Released | End of Life & Support| -|CloudLinux 8 | Mar 17, 2020 | May 31, 2029| -|CloudLinux 7 | Apr 1, 2015 | Jun 30, 2024| -|CloudLinux 6 | Feb 1, 2011 | Nov 30, 2020 ([Extended Support - June 30, 2024](https://www.cloudlinux.com/extended-support-cloudlinux-os-6))| -## Description of the CloudLinux OS components +### 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, but be careful, +there is no migration to Shared edition available. + +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-plus/). + + +## 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](/lve_manager/). + +**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](/cloudlinux_os_components/#cagefs). + +**MySQL Governor** -* **LVE Manager** +:::tip Note +This component is not available in CloudLinux OS Admin edition. +::: - LVE is the Lightweight Virtual Environment. - LVE Manager allows you to maintain fine-tuned control over your resources, including CPU, IO, memory, inodes, numbers of processes, and concurrent connections, that any single account can use. It is lightweight and transparent. Now you can limit abusers while allowing good customers to use what they need. +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](/command-line_tools/#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](/lve_manager/). -* **CageFS** +[See more](/cloudlinux_os_components/#mysql-governor). - 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. +**PHP Selector** - [See more](/cloudlinux_os_components/#cagefs). -* **MySQL Governor** +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. - MySQL Governor tracks CPU and disk IO usage for every user in real time and throttles MySQL queries by using same-per-user LVE limits. By using the [dbtop utility](/command-line_tools/#dbtop), it is possible to see usage as it happens on a per-customer basis, ensuring that system admins always know what is going on. +[See more](/cloudlinux_os_components/#php-selector). - [See more](/cloudlinux_os_components/#mysql-governor). -* **PHP Selector** +**Ruby Selector** - The 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. +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](/cloudlinux_os_components/#php-selector). -* **Ruby Selector** +[See more](/cloudlinux_os_components/#ruby-selector). - The Ruby Selector allows end users to choose the Ruby version for applications and install additional modules (gems) to the application environment. Ruby Selector uses `mod_passenger` for optimum performance. +**Python Selector** - [See more](/cloudlinux_os_components/#ruby-selector). -* **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. - The Python Selector allows end users to choose the Python version as an application and install additional modules. Python Selector uses `mod_passenger` to get the best performance from Python applications. +[See more](/cloudlinux_os_components/#python-selector). - [See more](/cloudlinux_os_components/#python-selector). -* **Node.js Selector** +**Node.js Selector** - Node.js Selector is a CloudLinux component that allows each user to easily create Node.js applications, choose Node.js version and other parameters for applications based on their needs. +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](/cloudlinux_os_components/#node-js-selector). -* **Apache mod_lsapi PRO** +[See more](/cloudlinux_os_components/#node-js-selector). - Mod_lsapi PRO is the fastest and most reliable way to serve PHP pages. It is a drop-in replacement for SuPHP, FCGID, RUID2, and ITK. It has a low memory footprint and understands PHP directives from `.htaccess` files. +**Apache mod_lsapi PRO** - [See more](/cloudlinux_os_components/#apache-mod-lsapi-pro). -* **Reseller limits** +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](/cloudlinux_os_components/#apache-mod-lsapi-pro). - Reseller limits is a feature that allows hosters to set limits for the resources each reseller can operate with. Hoster also provides controls to the reseller on what resources each reseller’s end user will have. Reseller limits set by a hoster limit the total amount of resources resellers’ end users can consume altogether. +**Reseller limits** - 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. +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. - [See more](/cloudlinux_os_components/#reseller-limits). -* **LVE-stats 2** +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. - LVE-stats 2 collects LVE usage statistics (CPU, memory, disk space usage) and allows to query the data. +[See more](/cloudlinux_os_components/#reseller-limits). - [See more](/cloudlinux_os_components/#lve-stats-2). +**LVE-stats 2** - \ No newline at end of file +VE-stats 2 collects LVE usage statistics (CPU, memory, disk space usage) +and allows to collect the usage data. + +[See more](/cloudlinux_os_components/#lve-stats-2). + +## CloudLinux 9 beta + +The first release of CloudLinux 9 is available as Shared and Shared Pro editions.\ +Admin and Solo editions temporarily unavailable to install or activate because of no panel/custom panel release only.\ +Other editions support will be extended once major control panels add support of CL9. + +### CloudLinux 9 beta limitations + +In the non-panel environment, for now, we can guarantee all of the following CloudLinux Shared components functionality: + +* LVE limits +* LVE Stats +* MySQL Governor +* CageFS +* PHP Selector +* HardenedPHP +* Apache mod_lsapi PRO + +Due to integration restrictions with some panels, we are unable to retrieve panel-related information +(e.g. a list of domains or handlers used).\ +As a result, we are currently unable to provide the following components: + +* PHP X-Ray +* Slow Site Analyzer +* Website Monitoring Tool +* Ruby selector +* Centralized Monitoring + +For the custom panel installations, once integration with the CloudLinux components is set, the following components +will work in the CloudLinux OS 9 environment: + +* LVE limits +* LVE Stats +* MySQL Governor +* CageFS +* PHP Selector +* HardenedPHP +* Python Selector +* NodeJS Selector +* Apache mod_lsapi PRO +* PHP X-Ray +* Slow Site Analyzer +* Reseller limits + + +## 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 | Release Date| End of Life and Support| +|CloudLinux OS Shared 6 | Feb 1, 2011 | Nov 30, 2020 ([ELS until June 30, 2024](https://docs.cln.cloudlinux.com/billing/#cloudlinux-os-6-extended-lifecycle-support)) | +|CloudLinux OS Shared 7 | Apr 1, 2015 | Jun 30, 2024 | +|CloudLinux OS Shared (Pro) 8 | Mar 17, 2020 | May 31, 2029 | +|CloudLinux OS Solo (8) | Mar 17, 2020 | May 31, 2029 | +|CloudLinux OS Admin (8) | Mar 17, 2020 | May 31, 2029 | +|CloudLinux OS Shared (Pro) 9 | Jan 17, 2023 | May 31, 2032 | diff --git a/docs/limits/README.md b/docs/limits/README.md index c56b1d358..0cfefce8e 100644 --- a/docs/limits/README.md +++ b/docs/limits/README.md @@ -7,11 +7,14 @@ * [IOPS](/limits/#iops) * [Entry processes](/limits/#entry-processes) * [Number of processes](/limits/#number-of-processes) +* [Inodes](/limits/#inodes) * [Network traffic bandwidth control and accounting system](/limits/#network-traffic-bandwidth-control-and-accounting-system) * [Limits validation](/limits/#limits-validation) * [Compatibility matrix](/limits/#compatibility-matrix) +* [Reseller Limits](/limits/#reseller-limits) +* [WEB interface resource limiting modes](/limits/#web-interface-resource-limiting-modes) -CloudLinux has support for the following limits: +CloudLinux OS Shared has support for the following limits: | | | | | | |--|---|--|--|--| @@ -82,7 +85,7 @@ Each LVE limits amount of entry processes (Apache processes entering into LVE) t #### Checking if LVE is installed -To use LVE you should have CloudLinux kernel installed, and LVE module loaded. You can check the kernel by running the following command: +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:
@@ -205,10 +208,10 @@ Memory is controlled using virtual (VMEM) and physical (PMEM) memory limits. Virtual memory limit corresponds to the amount of memory processes can allocate within LVE. You can see individual process virtual memory usage by monitoring VIRT column in top output for the process. -When process tries to allocate more memory, CloudLinux checks if the new total virtual memory used by all processes within LVE is more then a limit set. In such case CloudLinux will prevent memory from being allocated and increments fVMEM counter. In most cases, but not all of them - this causes process to fail. For CGI/PHP scripts it will usually cause 500 and 503 error. +When process tries to allocate more memory, CloudLinux OS Shared checks if the new total virtual memory used by all processes within LVE is more then a limit set. In such case CloudLinux OS Shared will prevent memory from being allocated and increments fVMEM counter. In most cases, but not all of them - this causes process to fail. For CGI/PHP scripts it will usually cause 500 and 503 error. :::tip Note -It is recommended to disable VMEM limits (set them to 0) in your system at all because they are deprecated in CloudLinux 6 and 7 system and can cause unexpected issues. +It is recommended to disable VMEM limits (set them to 0) in your system at all because they are deprecated in CloudLinux OS Shared 6 and 7 system and can cause unexpected issues. ::: ### Physical memory limit @@ -218,7 +221,7 @@ Physical memory limit corresponds to the amount of memory actually used by end c Additionally physical memory includes shared memory used by the customer, as well as disk cache. In case of disk cache – if a user is starting to lack physical memory, the memory used for disk cache will be freed up, without causing any memory faults. -When LVE goes over physical memory limit, CloudLinux will first free up memory used for disk cache, and if that is not enough, it will kill some of the processes within that LVE, and increment fPMEM counter. This will usually cause web server to serve 500 and 503 errors. Physical memory limit is a much better way to limit memory for shared hosting. +When LVE goes over physical memory limit, CloudLinux OS Shared will first free up memory used for disk cache, and if that is not enough, it will kill some of the processes within that LVE, and increment fPMEM counter. This will usually cause web server to serve 500 and 503 errors. Physical memory limit is a much better way to limit memory for shared hosting. ### Troubleshooting @@ -226,7 +229,7 @@ When LVE goes over physical memory limit, CloudLinux will first free up memory u #### Checking personal users disk cache (If lveinfo shows memory usage but there are no processes there) -If you see no processes under some user, but lve manager keeps telling it is using some memory, then most probably memory is taken by users disk cache. To check personal users disk cache (if lveinfo shows memory usage but not processes there) for CloudLinux 6: +If you see no processes under some user, but lve manager keeps telling it is using some memory, then most probably memory is taken by users disk cache. To check personal users disk cache (if lveinfo shows memory usage but not processes there) for CloudLinux OS Shared 6:
@@ -235,7 +238,7 @@ cat /proc/bc/XXX/meminfo ```
-On **CloudLinux 7 and CloudLinux 6 Hybrid** systems, the file is different: +On **CloudLinux OS Shared 7 and CloudLinux OS Shared 6 Hybrid** systems, the file is different:
@@ -246,7 +249,7 @@ cat /proc/bc/lveXXX/meminfo Look for this line: `Cached: 67300 kB` -On **CloudLinux 8 and CloudLinux 7 Hybrid** systems: +On **CloudLinux OS Shared 8 and CloudLinux OS Shared 7 Hybrid** systems:
@@ -288,10 +291,52 @@ This limit was created to prevent DoS attacks against web server. One of the fai To solve that, we have created entry processes (often called concurrent connections) limit. It will limit the number of concurrent connections to Apache, causing web server to serve error 508 page ( Resource Limit Reached), once there number of concurrent requests for the site goes above the limit. +**In the case of working with the LiteSpeed web server**, the _Entry processes_ limit implementation differs from the one implemented in Apache. + +Therefore, when there is the same load with concurrent requests to Apache and LiteSpeed, the _Entry processes_ limit may differ depending on the web server. + +In the case of LiteSpeed the _Entry processes_ limit increases with the number of lsphp master processes, for example in workgroup mode, the web server only starts one lsphp master process, then this process will fork children processes to process requests without increasing the _Entry processes_ limit. + +If you'd like to set the concurrent connection limit with LiteSpeed, you can use the standard web server tools like [https://docs.litespeedtech.com/cp/cpanel/antiddos/#connection-throttling](https://docs.litespeedtech.com/cp/cpanel/antiddos/#connection-throttling). + + ## Number of processes NPROC controls the total number of processes and threads within LVE. Once the limit is reached, no new process can be created (until another one dies). When that happens NPROC counter is incremented. Apache might return 500 or 503 errors in such case. +## Inodes + +:::tip Note +Supported on cPanel, Plesk, and DirectAdmin control panels +::: + + LVE Manager inodes limits extension allows setting inode limits for the customers. An inode is a data structure on a file system used to keep information about a file or a folder. The number of inodes indicates the number of files and folders an account has. inodes limits work on the level of disk quota , and will be enabled on /home partition only. + + LVE Manager allows to set soft and hard IO limit. + +* Hard limit prevents a user from writing data to disk. + +* Soft limit can be exceeded for a period of time. The grace period can be set using: edquota -t . + +* You can set inodes limits using LVE Manager , the same way you would set any other LVE Limits: + +::: tip Note +We do not collect statistical information on the inodes like we do for other LVE limits. +::: + +The limits can be set on the level of individual [account](/lve_manager/#actions) or [package](/lve_manager/#packages). + +Sometimes disk quota breaks, so do inodes limits. You can reset them through the _Options_ tab of LVE Manager: + +![](/images/inodelimitsoptions_zoom70.png) + +The same can be achieved using [cloudlinux-config](/command-line_tools/#cloudlinux-config) CLI utility + +End users can monitor their inodes usage through cPanel only (not available on Plesk and DirectAdmin): + +![](/images/inodescpanel.png) + +End user can also see the usage inside resource usage menu. ## Network traffic bandwidth control and accounting system @@ -299,7 +344,7 @@ To solve that, we have created entry processes (often called concurrent connecti Requires kernel lve1.4.4.el6 or higher, or lve1.4.56.el7 or higher ::: -Network traffic bandwidth control and accounting systems in CloudLinux 6 allows for each LVE container: +Network traffic bandwidth control and accounting systems in CloudLinux OS Shared 6 allows for each LVE container: * Limiting outgoing network traffic bandwidth * Accounting incoming and outgoing network traffic @@ -313,7 +358,7 @@ The system supports IPv4 only protocol. All outgoing IP packets generated inside LVE container are marked with LVE identifier. Traffic control utility tc from iproute2 package uses this marker to set required bandwidth. :::tip Note -CloudLinux doesn’t limit the network traffic itself, it only marks IP packets with specific LVE id. +CloudLinux OS Shared doesn’t limit the network traffic itself, it only marks IP packets with specific LVE id. ::: **Example 1:** @@ -374,6 +419,16 @@ tc filter add dev eth3 protocol ip parent 1: prio 1 handle 2121 fw flowid 1:20 More info about `tc` and its syntax can be found on the link [http://tldp.org/HOWTO/Traffic-Control-HOWTO/index.html](http://tldp.org/HOWTO/Traffic-Control-HOWTO/index.html) +#### CloudLinux OS 8 specific setup + +In order to apply 256 kbit/s limit to LVE 123 (0x7b) through enp0s3, one needs to run the following commands: + +``` +tc qdisc add dev enp0s3 root handle 1: htb +tc class add dev enp0s3 parent 1: classid 1:7b htb rate 256kbit +tc filter add dev enp0s3 parent 1: handle 1: cgroup +``` + ### Traffic accounting Traffic accounting is performed for each LVE container. Network statistics is collected at `/proc/lve/list` file. Network-related data found at fields: @@ -393,7 +448,7 @@ The data is also collected at `/proc/lve/per-lve// * Current incoming traffic value :::tip Note -The current version of CloudLinux network control system doesn’t limit network traffic volume for a specific period of time (for example 3GB per day), it limits only network bandwidth. +The current version of CloudLinux OS Shared network control system doesn’t limit network traffic volume for a specific period of time (for example 3GB per day), it limits only network bandwidth. Network limits are supported only for processes inside LVE. By default it does not limit static content, but only PHP/cgi scripts processed by Apache and processes launched over ssh etc. ::: @@ -416,6 +471,8 @@ 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: @@ -493,17 +550,18 @@ Set NPROC limit greater than (EP + 15). |Apache / suPHP | Yes | Yes | Yes | Yes | Yes | Yes | Yes| |Apache / FCGID | Yes | Yes | Yes | Yes | Yes | Yes | Yes| |Apache / CGI | Yes | Yes | Yes | Yes | Yes | Yes | Yes| -|Apache / PHP-FPM | Yes 3 | Yes | Yes | Yes | Yes | Yes 3 | No| +|Apache / PHP-FPM | Yes 2 | Yes | Yes | Yes | Yes | Yes 2 | No| |Apache / mod_php (DSO) | Yes | No | Yes | Yes | Yes | No | No| |Apache / mod_ruid2 | Yes | No | Yes | Yes | Yes | No | No| |Apache / MPM ITK | Yes | No | Yes | Yes | Yes | Yes 1 | No| |LiteSpeed | Yes | Yes | Yes | Yes | Yes | Yes | Yes| -|NGINX / PHP-FPM | Yes 3 | Yes | No | Yes | Yes | Yes | No| -|SSH | Yes | Yes | Yes | Yes | Yes | Yes 3 | Yes| -| Cron Jobs | Yes | Yes | Yes | Yes | Yes | Yes | Yes| +|NGINX / PHP-FPM | Yes 2 | Yes | No | Yes | Yes | Yes | No| +|SSH | Yes | Yes | Yes | Yes | Yes | Yes 2 | Yes| +|Cron Jobs | Yes | Yes | Yes | Yes | Yes | Yes | Yes| +|Apache / mod_lsapi | Yes | Yes | Yes | Yes | Yes | Yes | Yes| 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](https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz) -3. The DirectAdmin and CloudLinux PHP provide patched version. For other PHP distributions, please use patches available here: [https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz](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](https://repo.cloudlinux.com/cloudlinux/sources/da/cl-apache-patches.tar.gz) :::tip Note @@ -514,4 +572,117 @@ Please note that mod_lsapi does not work when php-fpm is enabled because php-fpm `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. ::: - \ No newline at end of file + +## 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. + +:::warning +Reseller cannot manage INODE or MYSQL limits. Neither his own, nor for his users. +::: + +- [Design](/limits/#design) +- [Requirements](/limits/#requirements) +- [Configuration](/limits/#configuration) + - [Enabling Reseller limits](/limits/#enabling-reseller-limits) + - [How to disable Reseller limits](/limits/#how-to-disable-reseller-limits) + - [More resources](/limits/#more-resources) + +### Design + +To understand the qwirks of how Reseller Limits operate, we need to look more closely into the four types of users that a typical shared hosting server has: + +![](/images/ResellerLimits-diagram.png) + +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](/cloudlinux_installation/) 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_kernel/#how-to-migrate-from-the-normal-to-hybrid-channel-cl6h). + * 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](/limits/#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. + +![](/images/ResellerLimits-cPanel.png) + +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. + +5. Now that preparations are done, go to _CloudLinux OS Shared LVE Manager_ -> _Users_ tab, choose a reseller and click on the pencil icon. +6. 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_. + +![](/images/ResellerLimits-enabling.png) + +:::tip +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. +::: + +:::tip 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: + +- [FAQ section in our support knowledgebase](https://cloudlinux.zendesk.com/hc/en-us/articles/115005515269-CloudLinux-Reseller-Limits-FAQ) +- [Reseller limits UI explained](/lve_manager/#reseller-interface) + + +## 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/docs/lve_manager/README.md b/docs/lve_manager/README.md index 61c9ea7c9..3977cb881 100644 --- a/docs/lve_manager/README.md +++ b/docs/lve_manager/README.md @@ -1,13 +1,13 @@ -# User interface (LVE Manager) +# CloudLinux Manager UI -* [CloudLinux installation wizard](/lve_manager/#cloudlinux-installation-wizard) -* [LVE Manager](/lve_manager/#lve-manager) -* [inodes](/lve_manager/#inodes) +* [Installation wizard](/lve_manager/#installation-wizard) +* [CloudLinux Manager](/lve_manager/#cloudlinux-manager) +* [Inodes limits](/limits/#inodes) * [Control panel integration guide](/lve_manager/#control-panel-integration-guide) -LVE 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 limits, and set limits on per package bases. +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 limits, and set limits on per package bases. -LVE Manager is installed by default on most servers. If it is missing you can always install it by running: +CloudLinux Manager is installed by default on most servers. If it is missing you can always install it by running:
@@ -16,13 +16,13 @@ $ yum install lvemanager ```
-## CloudLinux installation wizard +## Installation wizard
* [Overview](/lve_manager/#overview) * [Set up](/lve_manager/#set-up) -* [CloudLinux components](/lve_manager/#cloudlinux-components) +* [CloudLinux OS components](/lve_manager/#cloudlinux-os-components) * [CageFS](/lve_manager/#cagefs) * [LSAPI](/lve_manager/#lsapi) * [MySQL Governor](/lve_manager/#mysql-governor) @@ -35,15 +35,15 @@ $ yum install lvemanager #### Overview -CloudLinux Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin. +CloudLinux OS Shared Installation Wizard allows you to easily install and set up CloudLinux OS components on your server with cPanel, Plesk or DirectAdmin. #### Set up -As you have CloudLinux OS installed, navigate to CloudLinux LVE Manager in your control panel. CloudLinux Installation Wizard starts automatically if `lvemanager` package is installed for the first time (not updated). +As you have CloudLinux OS Shared installed, navigate to CloudLinux OS Shared CloudLinux Manager in your control panel. CloudLinux OS Shared Installation Wizard starts automatically if `lvemanager` package is installed for the first time (not updated). ![](/images/installationwizardmain_zoom70.png) -To start setting up your CloudLinux OS, click _Start Wizard_, otherwise click _Skip Wizard_, and you will be redirected to the LVE Manager Dashboard. +To start setting up your CloudLinux OS Shared, click _Start Wizard_, otherwise click _Skip Wizard_, and you will be redirected to the CloudLinux Manager Dashboard. :::tip Note Installation statuses of all components are duplicated inside their corresponding boxes on the Dashboard. All Wizard actions are available there as well. Dashboard will be automatically updated as soon as the installation process finishes. @@ -56,9 +56,9 @@ The next step is selecting required components to be installed. Click _Finish and Install_ to complete installation or click _Skip Wizard_ to go back to the Dashboard. -You can find a complete description of the CloudLinux components below. +You can find a complete description of the CloudLinux OS components below. -#### CloudLinux components +#### CloudLinux OS components
@@ -146,13 +146,13 @@ Allows end users to select the specific version of PHP they need, with over 120 ![](/images/wizard_php_selector_zoom90.png) -Go to LVE Manager settings to set up PHP Selector options and parameters. Read more in the [PHP Selector documentation](/cloudlinux_os_components/#installation-and-update-4). +Go to CloudLinux Manager settings to set up PHP Selector options and parameters. Read more in the [PHP Selector documentation](/cloudlinux_os_components/#installation-and-update-4). :::tip Note CageFS should be enabled for PHP Selector to operate. ::: -When the components to be installed are selected and configured, and installation is started, you will be redirected to the LVE Manager | Dashboard. +When the components to be installed are selected and configured, and installation is started, you will be redirected to the CloudLinux Manager | Dashboard. #### Installation process and possible errors @@ -200,11 +200,11 @@ In case of a fatal error, you will see the following warning. You can contact our support team for further assistance anytime by [submitting a ticket in our helpdesk system](https://cloudlinux.zendesk.com/hc/requests/new). -## LVE Manager +## CloudLinux Manager * [Notifications color codes](/lve_manager/#notifications-color-codes) -cPanel LVE Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics. +cPanel CloudLinux Manager administrator interface allows monitoring and managing limits for hosts end users, managing packages and monitoring statistics. Administrator credentials allow controlling limits for host users. @@ -224,9 +224,9 @@ For more details, please go to the [ImunifyAV documentation](https://docs.imunif
-#### Notifications color codes +#### Notifications color codes -In the LVE Manager UI we use the following color codes for notifications: +In the CloudLinux Manager UI we use the following color codes for notifications: * ![](/images/pic_warning.png) warning * ![](/images/pic_error.png) error @@ -247,19 +247,20 @@ The following actions are available in the system notifications (information, wa
+ ### Dashboard :::tip Note -Available starting from LVE Manager 4.0-26.8 +Available starting from CloudLinux Manager 4.0-26.8 ::: -CloudLinux dashboard provides a quick overview of statistics and all administrative information for server administrators. +CloudLinux OS Shared dashboard provides a quick overview of statistics and all administrative information for server administrators. -Go to LVE Manager | Dashboard. +Go to CloudLinux Manager | Dashboard. ![](/images/dashboard_zoom70.png) -The Cloudlinux Dashboard provides the following information: +The CloudLinux OS Shared Dashboard provides the following information: * End Users hitting limits — number of users reaching their limit in any kind of resource. Data is within the last 24 hours. * Resellers hitting limits —  number of enrolled Resellers that are reaching their limit in any kind of resource. Data is within the last 24 hours. @@ -268,35 +269,35 @@ The Cloudlinux Dashboard provides the following * To manage Node.js Selector, click _Manage_. You will be redirected to LVE Manager | Options | Node.js Selector. - * Click _Install_ to install Node.js Selector, you will be redirected to LVE Manager | Options | Node.js.Selector. + * Click _Install_ to install Node.js Selector, you will be redirected to CloudLinux Manager | Options | Node.js.Selector. * Default version — the current default version of Node.js set in your system. Click _Manage_ to change the default version account wide. * Applications —  number of installed/all applications for the account. * Ruby Selector block displays the following data: * Ruby Selector status (Enabled/Disabled/Not installed) — displays a current status of the Ruby Selector. - * To manage Ruby Selector, click _Manage_. You will be redirected to LVE Manager | Options | Ruby Selector. + * To manage Ruby Selector, click _Manage_. You will be redirected to CloudLinux Manager | Options | Ruby Selector. - * Click _Install_ to install Ruby Selector, you will be redirected to LVE Manager | Options | Ruby Selector. + * Click _Install_ to install Ruby Selector, you will be redirected to CloudLinux Manager | Options | Ruby Selector. * Applications — number of installed/all applications for the account. * [PHP Selector](/lve_manager/#php-selector-2) block displays the following data: * Default version — the default version of PHP binaries. - Click _Manage_ to change the default version, enable or disable PHP Selector, change the list of supported versions, and choose default modules. You will be redirected to LVE Manager | PHP Selector.
+ Click _Manage_ to change the default version, enable or disable PHP Selector, change the list of supported versions, and choose default modules. You will be redirected to CloudLinux Manager | PHP Selector.
PHP Selector (cPanel) has malfunctions warnings about [the most common issues](/lve_manager/#errors). ![](/images/PHPSelectorDashboardMalfunction.png) * [Python Selector](/lve_manager/#python-selector-2) block displays the following data: * Python Selector status (Enabled/Disabled/Not installed — displays a current status of the Python Selector. - * To manage Python Selector, click _Manage_. You will be redirected to LVE Manager | Options | Python Selector. + * To manage Python Selector, click _Manage_. You will be redirected to CloudLinux Manager | Options | Python Selector. - * Click _Install_ to install Python Selector, you will be redirected to LVE Manager | Options | Python Selector. + * Click _Install_ to install Python Selector, you will be redirected to CloudLinux Manager | Options | Python Selector. * Applications —  number of installed/all applications for the account. -* [Reseller Limits](/lve_manager/#reseller-limits) block displays the following data: - * Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click _Manage_. You will be redirected to LVE Manager | Users tab. +* [Reseller Limits](/lve_manager/#reseller-interface) block displays the following data: + * Reseller Limits status (Enabled/Disabled). To manage Reseller Limits, click _Manage_. You will be redirected to CloudLinux Manager | Users tab. * Reseller’s accounts with Reseller Limits/all —  the number of Reseller accounts with Reseller Limits enabled versus the total number of Reseller accounts. * Reseller’s End Users with enabled Reseller Limits/all — the number of end users with Reseller Limits enabled versus all End Users that belong to all resellers. * [MySQL Governor](/cloudlinux_os_components/#mysql-governor) block displays the following data: - * MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click _Manage_. You will be redirected to LVE Manager | Options | MySQL Governor Mode of Operation. Click _Install_ to install MySQL Governor. + * MySQL Governor status (Enabled/Disabled/Not installed/Skipped). To manage MySQL Governor, click _Manage_. You will be redirected to CloudLinux Manager | Options | MySQL Governor Mode of Operation. Click _Install_ to install MySQL Governor. * [Mode](/cloudlinux_os_components/#modes-of-operation) — displays the MySQL Governor mode of operation. Click _Manage_ to change the mode. * Single — single LVE is used for all customers that go over their DB limits (deprecated). * Off — monitor Only, no DB query limits are applied. @@ -304,7 +305,7 @@ The Cloudlinux Dashboard provides the following * Abusers — only queries that go over DB limits are executed inside that user's LVE (this is the default mode). * Database version —  displays a current version of MySQL/MariaDB/Percona server installed in the system. * [CageFS](/cloudlinux_os_components/#cagefs) block displays the following data: - * CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click _Manage_. You will be redirected to LVE Manager | Options | CageFS. Click _Install_ to install CageFS. + * CageFS status (Enabled/Disabled/Not installed). To manage CageFS, click _Manage_. You will be redirected to CloudLinux Manager | Options | CageFS. Click _Install_ to install CageFS. * Mode displays the current CageFS mode of operation. * End users — displays the number of users with CageFS enabled/all. * [ModLSAPI](/cloudlinux_os_components/#apache-mod-lsapi-pro) block displays the following data: @@ -326,8 +327,6 @@ The Cloudlinux Dashboard provides the following ### Current usage - - Choose _Current usage_ tab to monitor users resource usage at the moment displayed in the table. Current usage table provides the information on the usage of Speed, memory, IO, IOPS, Number of Processes, and Entry Processes. @@ -340,16 +339,36 @@ To expand the list of users click on the number above and in the dropdown choose ![](/images/man_01_zoom73.png) +The list of users can be filtered by _Username_ and _Domain_. + +Hoster can **view** all types of users: +* End users +* Resellers +* Reseller’s end users +* Reseller’s end users (no Reseller limit). + +But hoster can only **manage**: +* End users +* Resellers +* Reseller’s end users (no Reseller limit) + +To manage Reseller’s end users hoster should login as a reseller. + ### Users * [Actions](/lve_manager/#actions) * [Group actions for users with enabled CageFS](/lve_manager/#group-actions-for-users-with-enabled-cagefs) +Choose _Users_ tab to view the list of all users in the system and manage their limits. +![](/images/userstabhoster_zoom70.png) -Choose _Users_ tab to view the list of all users in the system and manage their limits. +:::tip Note +A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller). +::: -![](/images/LVEManagerUsersTab.png) +* Tick _Show users with CageFS enabled_ to show users with CageFS file system enabled. +* Tick _Show only ignored users_ to show users with ignored MySQL Governor. The following filters are available: * Manage by @@ -365,27 +384,30 @@ Also, you can search user by his Username, _Actions_ column to edit limits for a proper user. +Click pencil icon in _Actions_ column to edit limits for a particular user. The following actions are available: - * SPEED - * PMEM - * VMEM - * EP - * IO - * IOPS - * NPROC - * INODES +* Enable/disable CageFS +* **Reset** - to reset limits to default values +* Apply **Do not limit** to set the limits to unlimited; +* Setting the limits values: + * SPEED + * SPEED MYSQL + * VMEM + * PMEM + * IO + * MySQL IO + * IOPS + * EP + * NPROC + * INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled _Initial quotas_ in cPanel settings). - ![](/images/man_03_zoom86.png) - ![](/images/man_04_zoom86.png) +Click _Save_ to save changes or _Cancel_ to close the pop-up. - Click _Save_ to apply changes or _Cancel_ to close the pop-up. +![](/images/actionshoster.png) -* **View history** +Click on _History_ symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period. - Click ![](/images/history.png) in the _Actions_ column to view statistics for a proper user. +![](/images/historyhoster.jpg) #### Group actions for users with enabled CageFS @@ -412,24 +434,36 @@ If CageFS is disabled, group actions are not available. See how you can enable C ### Statistics -Choose Statistics tab to view hosts users resource usage statistics. +Choose _Statistics_ tab to view end users, resellers and resellers’ end users limits usage statistics. -The following parameters are displayed in the statistics table: +The following parameters can be displayed in the statistics table: -* CPU usage per user; -* PMEM usage per user; +* SPEED usage per user; +* IO usage per user; +* EP usage per user; * VMEM usage per user; -* IO (in Kb/sec per user). +* PMEM usage per user; +* NPROC usage per user; +* IOPS usage per user; +* MySQL usage per user. + +Click _Show_ and select columns from the drop-down to set which parameters should be displayed in the table. - Statistics table can be filtered by: +Statistics table can be filtered by: -* Timeframe - to view the statistics for a proper period; -* Limit ID - to view a proper limit type usage only; +* Timeframe - to view the statistics for a particular period; +* Limit - to view a particular limit type usage only; * Top LVEs - to view top used limits only; -* LVE approaching limit - to view the limits that are approaching maximum allocated value; +* LVE approaching limit - to view the limits that are approaching maximum provided value; * Fault LVE - the limits that have reached the maximum value. -![](/images/man_05_zoom92.png) +Click _Manage_ to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down. + +![](/images/statisticstabhoster_zoom70.png) + +Click chart symbol in the _View_ column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time. + +![](/images/history_charts_zoom70.png) ### Options @@ -449,6 +483,16 @@ The following sections are available to set the required options: #### LVE Faults Email Notifications +Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves. + +To allow users to do so, the administrator should enable the _Notify Customers_ and _Notify Reseller’s Customers_ options. + +Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface. + +But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface. + +A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose _Options_ tab to manage LVE Faults email notifications. + ![](/images/lve-faults-email-notifications.png) The following types of notification are available: @@ -492,10 +536,6 @@ Set the frequency of email notifications sending to: Allows to reset inode limits and show/hide end-user inode usage. -:::tip Note -Starting from LVE Manager 5.3.7-1 this option is available in cPanel, Plesk, and DirectAdmin. Before it was available only in cPanel. -::: - #### User interface settings ![](/images/user-interface-settings.png) @@ -503,9 +543,6 @@ Starting from LVE Manager 5.3.7-1 this option is available in cPanel, Plesk, and Allows to manage user interface settings: * **Hide LVE end user usage statistic** - a user will not be able to see his usage statistic in his web interface - :::tip Note - Starting from LVE Manager 5.3.7-1 this option is available for cPanel, Plesk, and DirectAdmin control panels. Before it was available only in cPanel. - ::: * **Hide Ruby App in web-interface** - a user will not be able to see Ruby Selector in his web interface #### MySQL Governor settings @@ -617,31 +654,73 @@ Limits from the package will not be applied if the package’s owner differs fro Choose _Packages_ tab to view and modify: -* limits for hosts user’s packages (Created by Admin); -* limits for reseller’s packages (Created by Admin). - -![](/images/man_06_zoom82.png) +* limits for user packages (created by hoster); +* limits for reseller packages (created by hoster); +* limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)). + +![](/images/packageshostertab_zoom70.png) -To modify package limits click on a pencil icon in Action column in a proper package row. The following limits for this package are available for setting: +To modify package limits click on a pencil symbol in _Actions_ column in a particular package row. The following limits for this package are available for setting: * SPEED in percent (%); * Virtual memory (VMEM) (can be set as unlimited by setting 0); * Physical memory (PMEM) (can be set as unlimited by setting 0); +* I/O limits (IO) (can be set as unlimited by setting 0); +* IOPS limits; * Concurrent connections (EP); * Number of processes (NPROC) (can be set as unlimited by setting 0); -* IOPS limits; -* I/O limits (IO) (can be set as unlimited by setting 0); -* INODES soft; -* INODES hard. +* INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled _Initial quotas_ in cPanel settings.) When limits are set click _Save_ to apply changes or _Cancel_ to close the window. +#### MySQL Governor package limits + +Starting from the: +``` +governor-mysql - 1.2-80 +lvemanager - 7.8.3-1 +lve-utils - 6.4.6-1 +alt-python27-cllib - 3.2.40-1 +``` +The possibility to manage Mysql Governor package limits was added. This can be done via CloudLinux Manager or via command line. + +#### How to install +``` +yum update governor-mysql lvemanager lve-utils alt-python27-cllib +``` + +#### Meaning + +In all previous versions admin had possibility to manage individual MySQL Governor limits like: +- SPEED MYSQL +- MySQL IO + +Now admin can manage all those limits for hosting packages and this will increase the convenience of administration. + +**All principles** of working with MySQL Governor package limits are the same as for LVE limits: + +- Initial limits for package can be settled from the the LVE extension (cPanel only) or they are inherited from the DEFAULT package (user). +- Non default (updated) package limits will not be changed in case DEFAULT limits are changed. +- Users in the package inherit package’s limits or have individual limits. +- Individual user limits can be reseted to the package’s limits. +- In case of reseller’s packages and users Mysql Governor limits can be managed only by admin. + +#### Manage MySQL Governor limits + +To view the package limits open this page: + +![](/images/mysql_packages_limits.png) + +To manage the package limits edit the needed package: + +![](/images/mysql_packages_limits_edit.png) + ### PHP Selector * [Selector tab](/lve_manager/#selector-tab) -* [Selector tab additional features (cPanel)](/lve_manager/#selector-tab-additional-features) LVE Manager 6.0.1-2 - * [PHP Selector troubleshooting (cPanel)](/lve_manager/#php-selector-troubleshooting) LVE Manager 6.0.1-2 -* [PHP Selector diagnostic tool and notifications](/lve_manager/#php-selector-diagnostic-tool-and-notifications) LVE Manager 6.0.1-2 +* [Selector tab additional features (cPanel)](/lve_manager/#selector-tab-additional-features) CloudLinux Manager 6.0.1-2 + * [PHP Selector troubleshooting (cPanel)](/lve_manager/#php-selector-troubleshooting) CloudLinux Manager 6.0.1-2 +* [PHP Selector diagnostic tool and notifications](/lve_manager/#php-selector-diagnostic-tool-and-notifications) CloudLinux Manager 6.0.1-2 #### Selector tab @@ -650,23 +729,19 @@ When limits are set click _Save_ to apply chang * In _Selector is_ section choose `Enabled` or `Disabled` from the dropdown list to enable or disable PHP Selector. * In _Default PHP version_ choose a proper PHP version or Native from dropdown list to apply. * In _Hide php extensions for end-user_ you can enable/disable the ability for end-user to select PHP extensions in his web interface. -:::tip Note -Starting from LVE Manager 5.3.7-1 this option is available in cPanel, Plesk, and DirectAdmin. Before it was available only in cPanel. -::: * In _Supported versions_ choose required PHP versions to support. Choose default modules from the list for a proper PHP version or for native. -![](/images/lveman_092.jpg) -![](/images/lveman_093.jpg) +![](/images/php_selector.png) :::tip Note You can also use [PHP Selector CLI](/command-line_tools/#php-selector) ::: -#### Selector tab additional features +#### Selector tab additional features -Go to cPanel admin interface → LVE manager → Selector +Go to cPanel admin interface → CloudLinux manager → Selector ![](/images/NewSelector.png) @@ -686,11 +761,11 @@ Admin can filter the list: ![](/images/SelectorFilters.png) -If an admin clicks _Use PHP selector_ in the _Action_ table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and `php-fpm` is disabled. Users' websites will use the version set in CloudLinux PHP Selector (user interface). Group operation also can be used. +If an admin clicks _Use PHP selector_ in the _Action_ table, the PHP version for a domain in MultiPHP Selector is changed to the system default version and `php-fpm` is disabled. Users' websites will use the version set in CloudLinux OS Shared PHP Selector (user interface). Group operation also can be used. ![](/images/UsePHPSelector.png) -#### PHP Selector troubleshooting +#### PHP Selector troubleshooting You can see the following errors in the _Domains_ tab. @@ -726,7 +801,7 @@ Enable CageFS in the Users tab (see [installation instructions](/cloudlinux_os_c If you cannot see Diagnostic tool notifications, you can restart it. Then you can fix the issues using [these instructions](/lve_manager/#php-selector-diagnostic-tool-and-notifications). -#### PHP Selector diagnostic tool and notifications +#### PHP Selector diagnostic tool and notifications The diagnostic tool allows to catch some issues. You can start diagnostic by clicking _Run diagnostic_ button. @@ -734,7 +809,7 @@ The diagnostic tool allows to catch some issues. You can start diagnostic by cli The most popular errors and solutions: -1. Your PHP Handler does not support CLoudLinux PHP Selector +1. Your PHP Handler does not support CLoudLinux OS Shared PHP Selector ![](/images/Issue1.png) @@ -765,7 +840,7 @@ cagefsctl --force-update **Solution**: see [installation instructions](/cloudlinux_os_components/#installation-instructions-for-cpanel-users) for cPanel users -In the LVE Manager v.6.0.6-1 the diagnostic tool can not catch problems with CageFS. See [installation instructions](/cloudlinux_os_components/#installation-instructions-for-cpanel-users) for cPanel users. +In the CloudLinux Manager v.6.0.6-1 the diagnostic tool can not catch problems with CageFS. See [installation instructions](/cloudlinux_os_components/#installation-instructions-for-cpanel-users) for cPanel users. @@ -781,7 +856,7 @@ In the LVE Manager v.6.0.6-1 the diagnostic tool can not catch problems with Cag Hoster interface allows to enable and disable Python Selector and manage individual Python versions. -Go to LVE Manager → Options Tab → Python Selector. +Go to CloudLinux Manager → Options Tab → Python Selector. A list of installed Python versions is displayed. There are several columns in the list. * Version — displays Python version. @@ -853,7 +928,7 @@ It is impossible: #### Make a particular Python version as a default :::tip Note -You can set a particular Python version as a default version in the CloudLinux [installation wizard](/lve_manager/#cloudlinux-installation-wizard) during the first installation. +You can set a particular Python version as a default version in the CloudLinux OS Shared [installation wizard](/lve_manager/#cloudlinux-installation-wizard) during the first installation. ::: To make a particular Python version as a default version, do the following: @@ -906,7 +981,7 @@ See also: [Python Selector client plugin](/lve_manager/#python-selector-client-p Hoster interface allows to enable and disable Node.js, and manage individual Node.js versions. -Go to _LVE Manager → Options Tab → Node.js Section_ . A list of installed Node.js versions is displayed. There are several columns in the list. +Go to _CloudLinux Manager → Options Tab → Node.js Section_ . A list of installed Node.js versions is displayed. There are several columns in the list. * Version — displays Node.js version. * Path — Node.js package location. @@ -1025,257 +1100,147 @@ By default, Passenger log messages are all writ See also: [Node.js Selector CLI tools](/command-line_tools/#node-js-selector). -### Reseller limits - -* [Hoster interface](/lve_manager/#hoster-interface) - * [Current Usage](/lve_manager/#current-usage-2) - * [Users](/lve_manager/#users-2) - * [Statistics](/lve_manager/#statistics-2) - * [Options](/lve_manager/#options-2) - * [Packages](/lve_manager/#packages-2) - * [Selector](/lve_manager/#selector) -* [Reseller Interface](/lve_manager/#reseller-interface) - * [Current Usage](/lve_manager/#current-usage-tab) - * [Historical Usage](/lve_manager/#historical-usage-tab) - * [Users](/lve_manager/#users-tab) - * [Statistics](/lve_manager/#statistics-tab) - * [Options](/lve_manager/#options-tab) - * [Packages](/lve_manager/#packages-tab) - -#### Hoster interface - -Hoster interface allows to monitor and manage limits for hosters’ end users, resellers and resellers’ end users, and also manage packages and monitor statistics. - -Hoster credentials allow to control limits for hosters’ end users and resellers. To control reseller end user limits Hoster has to log in as Reseller. - -Log in as Hoster to get access to the following functionality. +### Website monitoring tool and Slow Site analyzer -* [Current Usage](/lve_manager/#current-usage-2) tab allows to monitor users and resellers resource usage at the moment. -* [Users](/lve_manager/#users-2) tab with the list of all users and resellers allows viewing and managing all the users and resellers limits. -* [Statistics](/lve_manager/#statistics-2) tab displays the statistics of resource usage for particular timeframe or particular user. -* [Options](/lve_manager/#options-2) tab allows to set LVE faults email notifications for hoster, users, and resellers. -* [Packages](/lve_manager/#packages-2) tab allows to manage resellers packages limits; -* [Selector](/lve_manager/#selector) tab allows to control PHP Selector settings. +* [Website monitoring tab](/lve_manager/#website-monitoring-tab) +* [Main](/lve_manager/#main) +* [PHP Slow Site analyzer](/lve_manager/#php-slow-site-analyzer) +* [Settings](/lve_manager/#settings) +* [What is the density threshold?](/lve_manager/#what-is-the-density-threshold) +* [Email notifications](/lve_manager/#email-notifications) +* [The cloudlinux-ssa-manager CLI utility](/command-line_tools/#the-cloudlinux-ssa-manager-utility) +* [The wmt-api CLI utility](/command-line_tools/#the-wmt-api-utility) +* [FAQ](/lve_manager/#faq) -
- -#### Current Usage - -
- -Choose Current Usage tab to monitor users, resellers and resellers’ end users resource usage at the moment displayed in the table. - -Current Usage table provides information on usage of the following: -* SPEED (All and MySQL) -* memory (MEM) -* data throughput (IO) (All and MySQL) -* read/write operations per second (IOPS) -* number of processes (PNO) -* entry processes (EP) +**Website monitoring tool** is a new tool that collects the statistics of the domains' availability and responsiveness, as well as errors that occur when accessing these domains. An admin can get email reports with the statistics. The website monitoring tool uses the simple curl request like `curl http://domain.com` to get domains’ statistics. -Resource usage values are being refreshed every 10 seconds by default which is set in _Auto-refresh_ field. You can set _Auto-refresh time_ by choosing a value from the drop-down. - -You can refresh the table manually by clicking _Refresh now_ or you can freeze the values by clicking _pause_. Usage values will not change until the next manual refresh. To unfreeze click _unpause_. The countdown will continue. - -Tick _Hide MySQL usage_ to hide the information on MySQL usage. - -The list of users can be filtered by _Username_ and _Domain_. - -Hoster can **view** all types of users: -* End users -* Resellers -* Reseller’s end users -* Reseller’s end users (no Reseller limit). - -But hoster can only **manage**: -* End users -* Resellers -* Reseller’s end users (no Reseller limit) - -To manage Reseller’s end users hoster should login as a reseller. - -In the drop-down _Show top_ you can choose the number of user to be displayed on the page. - -![](/images/currentusagetabhoster_zoom60.png) - -
- -#### Users - -
- -Choose _Users_ tab to view the list of all users and manage their limits. - -To filter the list by user type click _Manage_ and in the drop-down choose: - -* End users - to manage hosts end users only. -* Resellers - to manage resellers only. -* Reseller’s end users - to manage resellers’ end users only. -* Reseller’s end users (no Reseller limits) - to manage resellers’ end users that do not have limits specified by reseller (these limits are specified by the hoster). - -To filter the list by _Username_, _Domain_, _LveID_ click _Filter by_ and choose the value in the drop-down. +**PHP Slow Site analyzer** is a new tool that generates daily reports for the server administrator with information about the top N slow PHP-based domains and URLs. Slow Site analyzer tracks all PHP-based requests and selects slow ones by certain rules. :::tip Note -A hoster can view the list of resellers’ end users and their limits, but can not manage resellers’ end users limits (if those are set by reseller). +Slow Site analyzer is not available for CloudLinux OS Shared 6. ::: + +**Installation** -A hoster can view the limits of all types of users and manage the limits for hosters’ end users and resellers’ end users (only those with Reseller Limits disabled). -* Tick _Show users with CageFS enabled_ to show users with CageFS file system enabled. -* Tick _Show only ignored users_ to show users with ignored MySQL Governor. - -![](/images/userstabhoster_zoom70.png) - -
- -#### Actions - -
- -Click pencil icon in _Actions_ column to edit limits for a particular user. The following actions are available: - -* Enable/disable CageFS -* **Reset** - to reset limits to default values -* Apply **Do not limit** to set the limits to unlimited; -* Setting the limits values: - * SPEED - * SPEED MYSQL - * VMEM - * PMEM - * IO - * MySQL IO - * IOPS - * EP - * NPROC - * INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled _Initial quotas_ in cPanel settings). - -Click _Save_ to save changes or _Cancel_ to close the pop-up. +To install the tool, run the following command: -![](/images/actionshoster.png) +``` +yum update lvemanager +``` -Click on _History_ symbol to view the history of a particular user resource usage. Choose time frame to view the history for a particular time period. +:::warning 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. This possibility will be added in the future releases. -![](/images/historyhoster.jpg) +You can turn off the _Website monitoring_, _PHP Sites Analyzer_ in the _[Settings](/lve_manager/#settings)_ subtab, so sites statistics will stop collecting and there will be no additional load on the server. +::: -
+#### Website monitoring tab -#### Statistics +You can configure the Website monitoring tool and Slow Site analyzer and view the daily reports in the CloudLinux Manager -> Website monitoring tab. -
+There are Main, PHP Site analyzer, and Settings subtabs here. -Choose _Statistics_ tab to view end users, resellers and resellers’ end users limits usage statistics. +#### Main -The following parameters can be displayed in the statistics table: +This subtab views the latest report (for the previous day) of the Website monitoring tool. -* SPEED usage per user; -* IO usage per user; -* EP usage per user; -* VMEM usage per user; -* PMEM usage per user; -* NPROC usage per user; -* IOPS usage per user; -* MySQL usage per user. +![](/images/WebsiteMonitoringMain.png) -Click _Show_ and select columns from the drop-down to set which parameters should be displayed in the table. +Remember that report is created every 24 hours and all changes in configuration (the _Settings_ tab) or in the list of domains will be applied for the next 24 hours (from midnight). -Statistics table can be filtered by: +* **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 ![](/images/Code200.png) +* **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. -* Timeframe - to view the statistics for a particular period; -* Limit - to view a particular limit type usage only; -* Top LVEs - to view top used limits only; -* LVE approaching limit - to view the limits that are approaching maximum provided value; -* Fault LVE - the limits that have reached the maximum value. + ![](/images/TopSlow.png) -Click _Manage_ to choose type of users to be displayed - End users, Resellers, Resellers’ end users or Resellers’ end users (no Reseller limit) by ticking checkbox in the drop-down. -![](/images/statisticstabhoster_zoom70.png) +#### PHP Slow Site analyzer -Click chart symbol in the _View_ column to view the detailed resource usage history for a particular account. Use timeframe drop-down to view the history for a particular period of time. +:::tip Note +The Slow Site analyzer is not available for CloudLinux OS Shared 6. +::: -![](/images/history_charts_zoom70.png) +![](/images/WebsiteMonitoringPHPSiteAnalyzer.png) -
+This is an example of a report from the Slow Site analyzer. The report shows the number of slow requests per domain and its URLs and the average duration of each slow URL. -#### Options +You can find the explanation of the **Slow requests density in period** [here](/lve_manager/#what-is-the-density-threshold). -
-A hoster can set email notifications for panel administrator, reseller customer, and resellers’ customers in cases of limits faults. Choose _Options_ tab to manage LVE Faults email notifications. +#### Settings -In _LVE Faults Email Notifications_ section tick the required checkboxes to set a type of notification. +Here, an admin can configure the Website monitoring and the PHP Site analyzer. -* _Notify Panel Administrator_ - notify hoster when his end users have exceeded minimum number of faults set for particular limits. -* _Notify Reseller_ - notify reseller when his end users have exceeded minimum number of faults set for particular limits. -* _Notify Customers_ - notify hosters’ end users when they have exceeded limits. -* _Notify Reseller's customers_ - notify resellers’ end users when they have exceeded limits. +:::tip Note +All settings which was changed after starting Website monitoring and Slow site analyzer will be applied for the next 24h (from midnight). +::: -![](/images/optionstabemailnotifhoster.png) +To enable or disable **Website monitoring**, use the following slider. -In _Faults to include_ section tick the checkboxes to include required limits to the notifications. -Set the frequency of email notifications sending in _Notify …. every.. days/hours/minutes/seconds_ section. +![](/images/WebsiteMonitoringSlider.png) -![](/images/optionshosterfaultstoinclude.png) +* **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). +* **Requests sending interval** - this is a period in minutes between requests to the same domain. +* **Domain response timeout** - 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. -In _Minimum number of Faults to notify_ section enter the number of faults required for the notification to be sent for _Panel Admin & Reseller_ and _User_. +To enable or disable the **Slow site analyzer**, use the following slider. -![](/images/optionstabhosterminimumftn.png) +:::tip Note +Slow Site analyzer is not available for CloudLinux OS Shared 6. +::: -* In _Inodes limits_ section you can reset inode limits to default values and tick _Show end-user inode usage_. -* In _User interface settings_ section tick the required checkboxes to apply user interface settings. -* In _MySQL Governor settings_ section you can customize MySQL Governor. +![](/images/WebsiteMonitoringSlider1.png) -![](/images/optionstabhosterinodes.png) +* **Top N slow websites to show** - this number (N) will be used to select the top N domains from the list of all domains, marked as slow. +* **Top slow URLs** - this number (N) will be used to select the top N URLs for each domain, marked as slow. +* **Slow request duration** - the duration of a request in seconds. +* **Slow requests number & Analysis time** - how many requests with a certain request duration should be done in time to mark the domain as a slow one. +* **Slow requests density threshold** can be in the interval [0..1], by default it is 0.8. The **density threshold** can be disabled. And the **Domains and URLs Ignore List** can be specified. -
+#### What is the density threshold? -#### Packages +We try to find the most interesting requests for the optimisation from all number of requests to domains during 24 hours. The _Density threshold_ parameter helps to find the most visited URLs and the most popular requests. -
+A density threshold is a numerical measure of some type of correlation, meaning the power of the statistical relationship between slow requests and all requests to the domain. If this parameter is enabled then the resulting table will contain slow requests that have exceeded the specified threshold. Requests with the highest density are usually the most distributed per day and are considered valuable to users, thus interesting for optimization. -_Packages_ tab allows to set the limits for as many users as you need by editing packages of the limits. Each account belonging to a particular package adheres to those limits. +Slow requests that represent bursts of activity and are weakly related to all activity per domain typically have a low density and will be weeded out. -Choose _Packages_ tab to view and modify: +#### Email notifications -* limits for user packages (created by hoster); -* limits for reseller packages (created by hoster); -* limits for resellers’ end users packages if reseller limits are not set for that reseller (hoster access allows identifying a particular reseller’s end user belonging to a particular reseller (created by reseller)). - -![](/images/packageshostertab_zoom70.png) +Email notifications are created by the Web monitoring tools. -To modify package limits click on a pencil symbol in _Actions_ column in a particular package row. The following limits for this package are available for setting: +**Example of the Web monitoring tools report**. -* SPEED in percent (%); -* Virtual memory (VMEM) (can be set as unlimited by setting 0); -* Physical memory (PMEM) (can be set as unlimited by setting 0); -* I/O limits (IO) (can be set as unlimited by setting 0); -* IOPS limits; -* Concurrent connections (EP); -* Number of processes (NPROC) (can be set as unlimited by setting 0); -* INODES (hard and soft) (for end users and resellers’ end users (with no Reseller Limits), if a hoster has enabled _Initial quotas_ in cPanel settings.) +![](/images/EmailNotifications.png) -When limits are set click _Save_ to apply changes or _Cancel_ to close the window. +**Example of the PHP Slow site analyzer report**. -
+![](/images/SlowSiteAnalyzerEmailNotifications.png) -#### Selector -
+#### FAQ -_Selector_ tab allows to control PHP Selector settings. +Q: Does this feature consume a lot server resources for collecting website and PHP data? If I enable it can this slow down the server? -* In _Selector is_ choose _Enabled_ or _Disabled_ from the drop-down to enable or disable PHP Selector. +A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring should not create a significant load and you can keep it always on. -* In _Default PHP version_ choose PHP version or _Native_ from the drop-down to apply. +--- -* In _Supported versions_ choose required PHP versions to support. +Q: Can I change the default value to 10, for example for the "Top N slow websites to show" setting? -Choose default modules from the list for a particular version of PHP or for native. +A: This number is simply the number of the slowest responding sites. All sites are sampled during the day. When generating a report, all sites' responses are sorted by response time from highest to lowest, and to make the report readable, only the first N sites are taken. You can specify N as all existing sites or only the 5 slowest. This number does not affect the server load, it only affects the report that will be visible in the UI or emailed to the administrator. -![](/images/selector01_zoom70.png) +--- -![](/images/selector02_zoom70.png) +Q: What would you recommend: to enable the Website monitoring tool for some days and then disable or I can keep it always turned on? +A: The load depends on the number of websites and the Website monitoring tool settings. Basically, the Website monitoring tool should not create a significant load and you can keep it always on. -#### Reseller Interface +### Reseller interface Reseller interface is designed to manage limits for resellers’ end users, to monitor statistics and the history of resource usage and to modify reseller’s end user packages limits. @@ -1288,7 +1253,9 @@ Log in under a particular reseller credentials to have access to the following f * [Options](/lve_manager/#options-tab) tab allows to set LVE Faults email notifications. * [Packages](/lve_manager/#packages-tab) tab allows to manage reseller’s end user packages limits. -Please note that reseller can manage all his end users via Reseller Interface. Reseller cannot manage INODE or MYSQL limits, neither his own nor for his users. +:::warning +Reseller can manage all his end users via Reseller Interface. Reseller cannot manage INODE or MYSQL limits, neither his own nor for his users. +:::
@@ -1310,7 +1277,9 @@ You can refresh the table manually by clicking _Refres Usage values will not change until the next manual refresh. To unfreeze click on _unpause_ button. The countdown will continue. +:::warning Reseller cannot manage INODE or MYSQL limits. Neither his own, nor for his users. +::: The bottom line star in the table displays the total reseller resource usage. It means, that all the usage of resellers’ end users and of his own is displayed as a summary for each parameter. @@ -1411,6 +1380,15 @@ Choose _Options_ tab to set user email notifica In _LVE Faults email notifications_ section tick appropriate checkboxes to set the required type of notification. +Starting from CloudLinux Manager v.7.3.0-1 and LVE-Stats v.4.1.4-1 users can disable in their Resource Usage plugin email notifications about hitting LVE limits by themselves. + +To allow users to do so, the reseller should enable the _Notify Customers_ and _Notify Reseller’s Customers_ options. + +Unfortunately, it is not possible to disable LVE Faults Email Notifications for all users by default so that users can enable the feature themselves in their interface. + +But it is possible to enable LVE Faults Email Notifications for all users by default, so that users can disable the feature themselves in their interface. + + ![](/images/optionsresellernotify_zoom70.png) * _Notify me on users faults_ - notify reseller when his users have exceeded limits. @@ -1450,44 +1428,118 @@ Click pencil icon in a package row to set the following limits for a package: When limits are set click _Save_ to apply changes. -### Client plugins + + +### LVE plugins branding + +:::tip Note +Requires CloudLinux Manager 2.0-33+ +::: + +It is possible to apply branding to the LVE Plugins in cPanel end users’ interface. To brand the cPanel end users' interface please do the following: + +* Create a script that will patch CloudLinux Manager files (with branding data, for example, image and logo) after every update of `lvemanager rpm` package; + +* Locate this script in `/usr/share/l.v.e-manager/branding_script`; + +* Make this script executable by running the command: + +
+ +``` +chmod a+x /usr/share/l.v.e-manager/branding_script +``` +
+ +When done, the branding script will be executed while every update of lvemanager package and all branding changes will be applied in the end user’s interface. + +:::tip Note +Modifying the CloudLinux Manager WHM plugin (`/usr/local/cpanel/whostmgr/docroot/cgi/CloudLinux.cgi`) via `branding_script` is not allowed. +::: + + +### User message for PHP version + +Since version 1.0-4 CloudLinux Manager acquired a feature of adding user messages to PHP versions*. To add a message, you should create a file in `/opt/alt/phpXX/name_modifier` with a message that you want to be shown to a user. + +For example, if you need to add the following message `Don't use this PHP version` to PHP version 4.4, you should create the following file: + +
+ +``` +/opt/alt/php44/name_modifier: + +echo 'Don`t use this php version' > /opt/alt/php44/name_modifier +``` +
+ +As a result, CloudLinux Manager will automatically pick up this message and will show it in web-interface to administrator (see Figure 1.1 for cPanel, Figure 1.2 for DirectAdmin) and to user (see Figure 2.1 for cPanel, Figure 2.2 for DirectAdmin). You can add messages to other PHP versions this way as well. + +| | +|:---:| +|![](/images/PHP_version_message_cPanel_admin.png)| +| Figure 1.1 cPanel CloudLinux Manager (administrator)| + + +| | +|:---:| +|![](/images/PHP_version_message_DirectAdmin_admin.png)| +| Figure 1.2 DirectAdmin CloudLinux Manager (administrator)| + + +| | +|:---:| +|![](/images/PHP_version_message_cPanel_user.png)| +| Figure 2.1 cPanel CloudLinux Manager (user)| + + +| | +|:---:| +|![](/images/PHP_version_message_DirectAdmin_user.png)| +| Figure 2.2 DirectAdmin CloudLinux Manager (user)| + +:::tip Note +*For cPanel and DirectAdmin only. +::: + +## Client plugins * [Resource Usage client plugin](/lve_manager/#resource-usage-client-plugin) * [Dashboard](/lve_manager/#dashboard-2) * [Current Usage](/lve_manager/#current-usage-3) -* [Current Usage table](/lve_manager/#current-usage-table) -* [Filters](/lve_manager/#filters) -* [Charts](/lve_manager/#charts) -* [Usage](/lve_manager/#usage) + * [Current Usage table](/lve_manager/#current-usage-table) + * [Filters](/lve_manager/#filters) + * [Charts](/lve_manager/#charts) + * [Usage](/lve_manager/#usage) * [Snapshot](/lve_manager/#snapshot) -* [Server processes snapshots](/lve_manager/#server-processes-snapshots) -* [Process list](/lve_manager/#process-list) -* [Database queries (cPanel only)](/lve_manager/#database-queries-cpanel-only) -* [HTTP queries](/lve_manager/#http-queries) + * [Server processes snapshots](/lve_manager/#server-processes-snapshots) + * [Process list](/lve_manager/#process-list) + * [Database queries (cPanel only)](/lve_manager/#database-queries-cpanel-only) + * [HTTP queries](/lve_manager/#http-queries) * [Python Selector client plugin](/lve_manager/#python-selector-client-plugin) -* [How to manage an application](/lve_manager/#how-to-manage-an-application) -* [Create application](/lve_manager/#create-application) -* [Start application](/lve_manager/#start-application) -* [Stop application](/lve_manager/#stop-application) -* [Restart application](/lve_manager/#restart-application) -* [Remove application](/lve_manager/#remove-application) -* [Edit application](/lve_manager/#edit-application) -* [Migrate application](/lve_manager/#migrate-application) + * [How to manage an application](/lve_manager/#how-to-manage-an-application) + * [Create application](/lve_manager/#create-application) + * [Start application](/lve_manager/#start-application) + * [Stop application](/lve_manager/#stop-application) + * [Restart application](/lve_manager/#restart-application) + * [Remove application](/lve_manager/#remove-application) + * [Edit application](/lve_manager/#edit-application) + * [Migrate application](/lve_manager/#migrate-application) * [Node.js Selector client plugin](/lve_manager/#node-js-selector-client-plugin) -* [How to manage application](/lve_manager/#how-to-manage-application) -* [Start application](/lve_manager/#start-application-2) -* [Stop application](/lve_manager/#stop-application-2) -* [Restart application](/lve_manager/#restart-application-2) -* [Remove application](/lve_manager/#remove-application-2) -* [Edit application](/lve_manager/#edit-application-2) + * [How to manage application](/lve_manager/#how-to-manage-application) + * [Start application](/lve_manager/#start-application-2) + * [Stop application](/lve_manager/#stop-application-2) + * [Restart application](/lve_manager/#restart-application-2) + * [Remove application](/lve_manager/#remove-application-2) + * [Edit application](/lve_manager/#edit-application-2) * [Ruby Selector client plugin](/lve_manager/#ruby-selector-client-plugin) * [PHP Selector client plugin](/lve_manager/#php-selector-client-plugin) -* [PHP Selector. My Domains tab (cPanel)](/lve_manager/#php-selector-my-domains-tab) LVE Manager 6.0.1-2 -* [LVE Manager options](/lve_manager/#lve-manager-options) -* [Changing settings manually](/lve_manager/#changing-settings-manually) -* [Changing settings in the config file](/lve_manager/#changing-settings-in-the-config-file) + * [PHP Selector. My Domains tab (cPanel)](/lve_manager/#php-selector-my-domains-tab) CloudLinux Manager 6.0.1-2 +* [CloudLinux Manager options](/lve_manager/#cloudlinux-manager-options) + * [Changing settings manually](/lve_manager/#changing-settings-manually) + * [Changing settings in the config file](/lve_manager/#changing-settings-in-the-config-file) -#### Resource Usage client plugin +### Resource Usage client plugin Client resource usage plugin for cPanel, Plesk, and DirectAdmin allows host’s end users to view and monitor resource usage. @@ -1590,7 +1642,7 @@ You can choose a date and a snapshot to display in the table. #### Server processes snapshots -In case when a CloudLinux user hits LVE limits, appropriate faults are generated and [lvestats](/deprecated/#lve-stats-0-x) package generates server processes snapshot. Snapshot is a list of running applications and a list of running MySQL queries right after the faults happened. +In case when a CloudLinux OS Shared user hits LVE limits, appropriate faults are generated and [lvestats](/deprecated/#lve-stats-0-x) package generates server processes snapshot. Snapshot is a list of running applications and a list of running MySQL queries right after the faults happened. Snapshots allow users to investigate the reason of account hitting its limits. Several snapshots are generated for each incident. An incident is a state when faults are generated in a close time period. The time period is configurable. By default, if faults are generated in 300 seconds time period, we consider them as a single incident. @@ -1646,7 +1698,20 @@ Displays information on HTTP queries in the selected snapshot. ![](/images/RU-HTTP-queries.png) -#### Python Selector client plugin +#### Turning On / Off email notifications per user + +:::warning 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** + +![](/images/TurningOnOffNotifications.png) + +### Python Selector client plugin :::tip Note Python Selector icon in end user interface is hidden when Python is disabled @@ -1683,7 +1748,7 @@ There are several columns in the list: * 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 LVE Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using [cloudlinux-selector utility](/command-line_tools/#new-python-selector)). + * 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](/command-line_tools/#new-python-selector)). 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. @@ -1741,7 +1806,7 @@ The following actions are available: * 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 LVE Manager 5.1.0-2 you can set paths to Passenger logs for Python applications via UI (or using [cloudlinux-selector](/command-line_tools/#new-python-selector) utility). +* 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](/command-line_tools/#new-python-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. @@ -1759,7 +1824,7 @@ For details see [How to migrate an application to the new Python Selector](/clou You can also use [Python Selector CLI](/command-line_tools/#end-user) ::: -#### Node.js Selector client plugin +### Node.js Selector client plugin :::tip Note Node.js Selector icon in end user interface is hidden when Node.js is disabled. @@ -1828,7 +1893,7 @@ The following actions are available: * 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 LVE Manager 5.1.0-2 you can set paths to Passenger logs for Node.js applications via UI (or using [cloudlinux-selector](/command-line_tools/#node-js-selector) utility). +* 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](/command-line_tools/#node-js-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. @@ -1836,7 +1901,7 @@ The following actions are available: You can also use [Node.js Selector CLI](/command-line_tools/#end-user-2) ::: -#### Ruby Selector client plugin +### Ruby Selector client plugin End user interface allows end users to setup and manage Ruby for their web applications. @@ -1853,7 +1918,7 @@ Here you can do the following: * Setup a new application. * View/edit/restart/remove the existing application. -#### PHP Selector client plugin +### PHP Selector client plugin End user interface allows end users to select and manage PHP extensions and options for the particular PHP version. @@ -1863,13 +1928,15 @@ Go to _cPanel → Software Section → Select PHP Vers PHP Extensions page opens. -![](/images/PHPSelectorExtensions.png) +![](/images/php_selector_customer.png) 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_. -![](/images/PHPSelectorOptions.png) +![](/images/php_selector_options.png) + +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. @@ -1887,13 +1954,13 @@ To manage PHP options, click _Switch to PHP options_`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 +#### 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. ![](/images/MyDomainsTab.png) -A user can configure a domain to use CloudLinux PHP Selector. +A user can configure a domain to use CloudLinux OS Shared PHP Selector. 1. Click _Use PHP Selector_ @@ -1908,17 +1975,13 @@ If `php-fpm` is enabled for a domain the only administrator can set it to _Options_. +* Log in to cPanel, go to WHM, choose CloudLinux OS Shared and click _Options_. * Change settings. #### Changing settings in the config file @@ -1947,7 +2010,7 @@ cloudlinux-selector set --json --interpreter=python --selector-status=enabled ```
-Or you can change it via WHM -> LVE Manager -> Options -> Python Selector -> Python +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: @@ -1958,213 +2021,14 @@ After modifying the config files directly, you should execute the following comm ```
-### LVE plugins branding - -:::tip Note -Requires LVE Manager 2.0-33+ -::: - -It is possible to apply branding to the LVE Plugins in cPanel end users’ interface. To brand the cPanel end users' interface please do the following: - -* Create a script that will patch LVE Manager files (with branding data, for example, image and logo) after every update of `lvemanager rpm` package; - -* Locate this script in `/usr/share/l.v.e-manager/branding_script`; - -* Make this script executable by running the command: - -
- -``` -chmod a+x /usr/share/l.v.e-manager/branding_script -``` -
- -When done, the branding script will be executed while every update of lvemanager package and all branding changes will be applied in the end user’s interface. - -:::tip Note -Modifying the LVE Manager WHM plugin (`/usr/local/cpanel/whostmgr/docroot/cgi/CloudLinux.cgi`) via `branding_script` is not allowed. -::: - - -### User message for PHP version - -Since version 1.0-4 LVE Manager acquired a feature of adding user messages to PHP versions*. To add a message, you should create a file in `/opt/alt/phpXX/name_modifier` with a message that you want to be shown to a user. - -For example, if you need to add the following message `Don't use this PHP version` to PHP version 4.4, you should create the following file: - -
- -``` -/opt/alt/php44/name_modifier: - -echo 'Don`t use this php version' > /opt/alt/php44/name_modifier -``` -
- -As a result, LVE Manager will automatically pick up this message and will show it in web-interface to administrator (see Figure 1.1 for cPanel, Figure 1.2 for DirectAdmin) and to user (see Figure 2.1 for cPanel, Figure 2.2 for DirectAdmin). You can add messages to other PHP versions this way as well. - -| | -|:---:| -|![](/images/PHP_version_message_cPanel_admin.png)| -| Figure 1.1 cPanel LVE Manager (administrator)| - - -| | -|:---:| -|![](/images/PHP_version_message_DirectAdmin_admin.png)| -| Figure 1.2 DirectAdmin LVE Manager (administrator)| - - -| | -|:---:| -|![](/images/PHP_version_message_cPanel_user.png)| -| Figure 2.1 cPanel LVE Manager (user)| - - -| | -|:---:| -|![](/images/PHP_version_message_DirectAdmin_user.png)| -| Figure 2.2 DirectAdmin LVE Manager (user)| - -:::tip Note -*For cPanel and DirectAdmin only. -::: - - -## inodes - - -:::tip Note -Supported on cPanel, Plesk, and DirectAdmin control panels -::: - - LVE Manager inodes limits extension allows setting inode limits for the customers. An inode is a data structure on a file system used to keep information about a file or a folder. The number of inodes indicates the number of files and folders an account has. inodes limits work on the level of disk quota , and will be enabled on /home partition only. - - LVE Manager allows to set soft and hard IO limit. - -* Hard limit prevents a user from writing data to disk. - -* Soft limit can be exceeded for a period of time. The grace period can be set using: edquota -t . - -* You can set inodes limits using LVE Manager , the same way you would set any other LVE Limits: - -::: tip Note -We do not collect statistical information on the inodes like we do for other LVE limits. -::: -![](/images/inodes_zoom70.png) - - -The limits can be set on the level of individual account or package: - -![](/images/inodespackages_zoom70.png) - - -Sometimes disk quota breaks, so do inodes limits. You can reset them through the _Options_ tab of LVE Manager: - -![](/images/inodelimitsoptions_zoom70.png) - -The same can be achieved using [cloudlinux-config](/command-line_tools/#cloudlinux-config) CLI utility - -End users can monitor their inodes usage through cPanel only (not available on Plesk and DirectAdmin): - -![](/images/inodescpanel.png) - -End user can also see the usage inside resource usage menu. - -## Control panel integration guide - -Here you will find the instructions and common techniques used to integrate your software with CloudLinux. - - -### Detecting and working with CloudLinux - - -Detecting if system is running CloudLinux/CloudLinux kernel: - - -
- -``` -$ uname -r|grep lve -``` -
- -If you get an output, it means the system is running CloudLinux kernel. CloudLinux kernels have lve in its name, like: 2.6.32-458.18.1.lve1.2.44.el6.x86_64 - -Alternatively you can check for the presence of `/proc/lve/list` file. - -Check if CageFS is enabled (as root ): - -
- -``` -$ /usr/sbin/cagefsctl --cagefs-status -``` -
- -Check if CageFS is enabled for a particular user (as `root` ): - -
- -``` -$ /usr/sbin/cagefsctl --user-status _USER_NAME_ -``` -
- -Check if you are inside CageFS: - -Check for the presence of `/var/.cagefs/.cagefs.token` file - if present, it means that you are inside CageFS. - -### Displaying CPU, memory & IO limits - - -Most control panels choose to display CloudLinux usage & limits to end customers. To simplify that, we lve-stats exports a file that can be easily read and processed by a control panel to display the necessary information. - -The information is located in the /var/lve/info file. This information is updated every 5 minutes, and contains default limits (first line), as well as usage and limits for all customers. If a customer is not present in the file, it means that customer is not active (no scripts were executed recently for the customer), and a customer has default limits (so you can display no usage, and default limits in the control panel for that customer. - -The data is stored in a form of one line per customer, with coma separated values. - -| | | -|-|-| -|0 | user id| -|1 | entry processes | -|2 | entry processes limit| -|3 | CPU | -|4 | CPU limit| -|5 | Virtual Memory | -|6 | Virtual Memory Limit| -|7 | Number of virtual memory faults| -|8 | Number of entry processes faults| -|9 | Physical Memory Limit| -|10 | Physical Memory | -|11 | Number of Physical memory faults| -|12 | Number of processes limit| -|13 | Number of processes | -|14 | Number of processes fault| -|15 | Reserved| -|16 | IO Usage| -|17 | IO Limit| - -With LVE version 4 (CloudLinux lve0.x) only the first 9 parameters are available. You can check the the version by reading the first byte of /proc/lve/list. - -In the version 6 all 15 parameters should be available. - -There are only 2 LVE versions currently used in production. Future versions might add more fields, but will not alter order of existing fields. - -Memory is defined in 4KB pages (so, 1024 would mean 1024 4KB pages, or 4MB). - - IO is defined as KB/s. - - CPU is defined as % of total number of cores on a server. - -### cPanel LVE Extension +## cPanel LVE Extension * [Add Package Extension](/lve_manager/#add-package-extension) * [Edit Package Extensions](/lve_manager/#edit-package-extensions) :::tip Note -LVE Manager 1.0-9.8+ +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). @@ -2205,7 +2069,7 @@ 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 LVE Manager or even via WHM API. +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** @@ -2213,9 +2077,9 @@ To edit package extensions, go to _Packages_ | ![](/images/lve-extension_04.jpg) -**LVE Manager** +**CloudLinux Manager** -To edit package extensions, go to LVE Manager | Server Configuration | CloudLinux LVE Manager | Packages and click pencil (edit) icon. +To edit package extensions, go to CloudLinux Manager | Server Configuration | CloudLinux OS Shared CloudLinux Manager | Packages and click pencil (edit) icon. ![](/images/lve-extension_05.jpg) @@ -2223,4 +2087,6 @@ To edit package extensions, go to LVE Manager | 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](https://documentation.cpanel.net/display/SDK/Guide+to+Package+Extensions+-+Data+Behavior+and+Changes) - \ No newline at end of file +#### Control panel integration guide + +[Here](/control_panel_integration/) you will find the instructions and common techniques used to integrate your software with CloudLinux OS Shared. diff --git a/docs/ru/.DS_Store b/docs/ru/.DS_Store index 2b7acbbbf..00c1d0451 100644 Binary files a/docs/ru/.DS_Store and b/docs/ru/.DS_Store differ diff --git a/docs/ru/cloudlinux-os-plus/README.md b/docs/ru/cloudlinux-os-plus/README.md new file mode 100644 index 000000000..01541d352 --- /dev/null +++ b/docs/ru/cloudlinux-os-plus/README.md @@ -0,0 +1,36 @@ +--- +title: CloudLinux OS+ (BETA) +--- + + +## X-Ray + +### Как управлять X-Ray + +### X-Ray клиент + +#### Функции, которые может подключать X-Ray клиент + +### X-Ray агент + +#### Управление сервисом X-Ray + +#### Влияет ли X-Ray на производительность сайта? + +#### Что делать, если я вижу предупреждение "Task is duplicated by URL"? + +## Centralized Monitoring + +### Описание + +#### Дополнительная нагрузка на сервер + +### Установка + +### Пользовательский интерфейс + +### FAQ + +### Устранение неисправностей + + diff --git a/docs/ru/x-ray/README.md b/docs/ru/x-ray/README.md deleted file mode 100644 index f958664fa..000000000 --- a/docs/ru/x-ray/README.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: X-Ray ---- - -# X-Ray - diff --git a/docs/x-ray/README.md b/docs/x-ray/README.md deleted file mode 100644 index aef6e88c4..000000000 --- a/docs/x-ray/README.md +++ /dev/null @@ -1,477 +0,0 @@ -# X-Ray (BETA) - -* [Description](/x-ray/#description) -* [Installation](/x-ray/#installation) -* [How to manage X-Ray](/x-ray/#how-to-manage-x-ray) -* [X-Ray client](/x-ray/#x-ray-client) -* [X-Ray service](/x-ray/#x-ray-agent) -* [FAQ](/x-ray/#faq) - -:::warning Note -Please note that X-Ray is a new experimental tool. It is in beta testing now. If you’d like to be a beta tester, please fill out [this form](https://cln.cloudlinux.com/console/dashboard/products). You will be able to use the X-Ray tool after receiving the CLN manager approval. -::: - -:::warning Warning! -X-Ray is available only for CloudLinux OS licenses purchased directly, NOT VIA RESELLERS. -::: - -:::warning Warning! -X-Ray is available for cPanel, Plesk, and DirectAdmin. -* X-Ray for non-panel installations is not planned. -::: - -### Description - -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. - -First release of X-Ray is offered for cPanel administrators and support to find the cause of website performance issues. - -X-Ray can monitor websites that were developed on cPanel hosts and use PHP (see [PHP version list](/x-ray/#list-of-supported-php-versions)) or WordPress. - -## Installation - -1. Make sure you have installed **LVE Manager version 6.2 or later**. You can install it with the following command: - -
- - ``` - # yum install lvemanager --enablerepo=cloudlinux-updates-testing - ``` -
- -2. Run the following command: - -
- - ``` - # rhn_check - ``` -
- - If the `rhn_check` command is not found, run the following command: - -
- - ``` - # yum install rhn-check rhn-setup --enablerepo=cloudlinux-updates-testing - ``` -
- -3. Then install the `alt-php-xray` package - - * Via user interface - * Go to the _X-Ray_ tab. - * Click _Install_ to start installation. - - ![](/images/XRayUI.png) - - * Via SSH by running the following command: - -
- - ``` - # yum install lvemanager alt-php-xray --enablerepo=cloudlinux-updates-testing - ``` -
- -4. After installation, use the _Start tracing_ button to create your first tracing task for a slow site. - -![](/images/XRayStartTracing.png) - -## How to manage X-Ray - -### Create a new tracing task - -1. Go to the _X-Ray_ tab -2. Click the _Start tracing_ button to create a new task -3. In the opened popup specify a website URL to trace -4. Click the _Run_ button -5. Tracing will run in the default mode. In the default mode X-Ray traces the first 20 requests for a specified URL - -![](/images/XRayTracingTask.png) - -* **URL** should be a valid URL of the domain which exists on the current hosting server. The URL field supports wildcard matching. To learn more about wildcard matching, click _How to use special characters_. -* **Advanced settings** allow you to set an IP address and tracing options: by time or by number of queries. - - ![](/images/XRayAdvanced.png) - -#### Advanced settings - -* **Client’s IP**: it is an IPv4 address of a machine to trace. For example, if you have a production website that processes requests from different IP addresses and you do not want to add these requests to the tracing task. So, you can set a specific IP address and X-Ray will analyze requests only from this specific IP address. -Record for -* **Time period**: how much time X-Ray collect the requests (2 days max) -* **Requests**: the amount of requests that X-Ray will collect - -After creating, the task appears in the list of tracing tasks. - -![](/images/XRayTrcingTaskList.png) - -### View tracing tasks list - -![](/images/XRayTrcingTaskList1.png) - -#### Tracing status - -A tracing task can have the following statuses: - -* **Running** – tracing is in progress -* **Stopped** – tracing was stopped by administrator -* **On hold** – the same URL already exists in the lists. Task processing will not start automatically. Administrator should start it manually. -* **Completed** – period of time is finished or number of requests is reached. - -### Stop tracing task - -Click ![](/images/XRayStop.png) to stop the tracing task. - -![](/images/XRayStopped.png) - -The tracing task status will be changed to **Stopped**. Data will not be collected anymore but you can see already collected information or continue tracing later by clicking ![](/images/XRayStart.png). - -### Delete tracing task - -Click ![](/images/XRayDelete.png) to delete the tracing task. - -:::warning Warning! -When you have deleted a tracing task, all collected data will be unavailable. -::: - -### View collected requests for tracing task - -:::warning Warning! -Collected requests are available in the UI for two weeks. -::: - -Click ![](/images/XRayView.png) to open a list of collected requests. - -#### Tracing tasks - -![](/images/XRayCollectedRequests.png) - -The slowest request is highlighted. - -![](/images/XRaySlowestRequest.png) - -* **Collected requests** displays how many requests were collected according to tasks requirements. -* **Pending requests** displays how many of collected requests are not visible in the table yet. - -X-Ray collects the following data for each request: - -* **Top issues** – the slowest items of a request -* **Software modules/plugins** by execution time (only for WordPress plugins) -* **Database queries** by execution time -* **External requests** by execution time -* **Other system functions** by execution time - -#### Software modules/plugins - -![](/images/XRaySoftwareModulesPlugins.png) - -The _Software modules/plugins_ section displays the following data: - -* **Software type** – a type a module/plugin. For now, X-Ray can analyze only WordPress software -* **Software module** – a name of the WordPress plugin -* **Duration** – plugin execution time -* **Duration (%)** – plugin execution time as a percentage of the total duration of the request - -#### Database queries - -![](/images/XRayDatabaseQueries.png) - -The _Database queries_ section displays the following data: - -* **Query** – the executed SQL-query -* **File** – the file and the line of the executed query and backtrace -* **Software module** – a WordPress plugin name from which the request was completed. If the request does not belong to any of the WordPress plugin, the name of the function that executed the given request is displayed -* **Calls** – the number of identical SQL queries -* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) - -#### External requests - -![](/images/XRayExternalRequests.png) - -The _External requests_ section displays the following data: - -* **URL** – the URL of the executed request -* **File** – the file and the line of the executed request and backtrace -* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) - -#### System functions - -![](/images/XRaySystemFunctions.png) - -The _System functions_ section displays the following data: - -* **Function** – the executed function -* **File** – the file and the line of the executed request -* **Duration** – execution time as a percentage of the total duration of a request and the function processing time (in brackets) - -## X-Ray client - -X-Ray client is a PHP extension named `xray.so`. It analyzes the processing time of the entire request and its parts and then sends the data to the X-Ray agent. - -### List of supported PHP versions - -The list of currently supported PHP versions: - -| | | | -|-|-|-| -|**ALT PHP**:|**EA PHP**:|**Plesk PHP**| -|
  • alt-php54
  • alt-php55
  • alt-php56
  • alt-php70
  • alt-php71
  • alt-php72
  • alt-php73
  • alt-php74
|
  • ea-php54
  • ea-php55
  • ea-php56
  • ea-php70
  • ea-php71
  • ea-php72
  • ea-php73
  • ea-php74
|
  • php54
  • php55
  • php56
  • php70
  • php71
  • php72
  • php73
  • php74
| - -### Functions that X-Ray client can hook - -#### Database queries - -* Functions from [MySQL](https://www.php.net/manual/ru/book.mysql.php) extension: - * `mysql_query` - * `mysql_db_query` - * `mysql_unbuffered_query` -* Functions from [MySQLi](https://www.php.net/manual/ru/book.mysqli.php) extension: - * `mysqli_query` - * `mysqli::query` - * `mysqli_multi_query` - * `mysqli::multi_query` - * `mysqli_real_query` - * `mysqli::real_query` -* Functions from [PDO](https://www.php.net/manual/ru/book.pdo.php) extension: - * `PDO::exec` - * `PDO::query` - * `PDOStatement::execute` - -#### External requests - -* Function [curl_exec](https://www.php.net/manual/ru/function.exec) - -#### System PHP functions - -It may be any PHP system function which can be related to a PHP engine or other PHP extension, for example `fopen()` or `json_encode()`. A list of these functions can be found [here](https://www.php.net/manual/en/indexes.functions.php). - -### Configuration Options - -#### xray.enabled - -**Syntax**: `xray.enabled=On/Off` - -**Default**: On - -**Changeable**: PHP_INI_SYSTEM - -**Description**: Enable or disable X-Ray extension from php.ini - ------ - -#### xray.database_queries - -**Syntax**: `xray.database_queries=[number]` - -**Default**: 20 - -**Changeable**: PHP_INI_SYSTEM - -**Description**: The number of the slowest SQL queries which will be sent to the X-Ray agent. The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. - ------ - -#### xray.external_requests - -**Syntax**: `xray.external_requests=[number]` - -**Default**: 20 - -**Changeable**: PHP_INI_SYSTEM - -**Description**: The number of the slowest external requests (the curl_exec function) which will be sent to the X-Ray agent. The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. - ------ - -#### xray.system_functions - -**Syntax**: `xray.system_functions=[number]` - -**Default**: 20 - -**Changeable**: PHP_INI_SYSTEM - -**Description**: The number of the slowest system functions which will be sent to the X-Ray agent. -The min value is 0 and the max value is 100. If the variable value is more, the default value will be used. - ------ - -#### xray.backtrace_depth - -**Syntax**: `xray.backtrace_depth=[number]` - -**Default**: 10 - -**Changeable**: PHP_INI_SYSTEM - -**Description**: The backtrace depth to the main() function which will be sent to the X-Ray agent. The min value is 0 and the max value is 20. If the variable value is more, the default value will be used. - ------ - -#### xray.processor - -**Syntax**: `xray.processor=[processor_name]` - -**Default**: xray - -**Changeable**: PHP_INI_SYSTEM - -**Description**: Tells the X-Ray client which processor to use. The new processors may be added in the future. The default processor is xray which means to send data to the X-Ray agent. - ------ - -#### xray.tasks - -**Syntax**: `xray.tasks=host:uri:ip:id` - -**Default**: no value - -**Changeable**: PHP_INI_SYSTEM - -**Description**: The current tracing tasks for the given PHP request. This directive is added automatically by the X-Ray manager when creating a task. It is not allowed to edit manually, as X-Ray may stop working. - ------ - -#### xray.to_file - -**Syntax**: `xray.to_file=On/Off` - -**Default**: Off - -**Changeable**: PHP_INI_SYSTEM - -**Description**: Only for debug purposes. Writes to a file data which is sent to the processor. - ------ - -#### xray.debug - -**Syntax**: `xray.debug=On/Off` - -**Default**: Off - -**Changeable**: PHP_INI_SYSTEM - -**Description**: Only for debug purposes. Enables debug output during request processing. In the On mode can slow down the domain. - ------ - -#### xray.debug_file - -**Syntax**: `xray.debug_file=[path_to_file]` - -**Default**: `/tmp/xray-debug.log` - -**Changeable**: PHP_INI_SYSTEM - -**Description**: Only for debug purposes. Specifies a file for logging debug information. - -## X-Ray agent -This is a service that receives data from the X-Ray client and sends it to the remote storage. - -### Managing X-Ray service - -The X-Ray agent is managed by the `service` utility. - -* To start the X-Ray agent, run the following command: - -
- - ``` - # service xray-agent start - ``` -
- -* To stop the X-Ray agent, run the following command: - -
- - ``` - # service xray-agent stop - ``` -
- -* To restart the X-Ray agent, run the following command: - -
- - ``` - # service xray-agent restart - ``` -
- -## FAQ - -### Does X-Ray affect website performance? - -X-Ray affects website performance. Our tests show 5-10 % overhead from a website loading time with X-Ray tracing enabled. -X-Ray allows you to find website performance issues and should not be enabled permanently. If your website is very slow, you can enable X-Ray to find the cause and then disable it. - -### 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. 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: - - ![](/images/XRayPHPInfo.png) - -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. - - -2. 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. -3. 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. -4. 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). - - ![](/images/XRayPHPInfoRemoteAddr.png) - -5. If, after checking the previous items, the issue persists, [contact our support team](https://cloudlinux.zendesk.com/hc/en-us/requests/new). - -### 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. - - ![](/images/XRayScanDir.png) - - 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](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. - - - - - diff --git a/package.json b/package.json index 24ee4c666..15e7e7d76 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,6 @@ "vuepress": "^1.0.2", "vuepress-plugin-autometa": "^0.1.13", "vuepress-plugin-container": "^2.1.0", - "vuepress-plugin-separate-pages": "^0.1.3", - "vuepress-plugin-disqus-spa": "^0.1.1", "vuepress-theme-cloudlinux": "https://github.com/cloudlinux/cloudlinux-doc-theme.git" }, "resolutions": { diff --git a/yarn.lock b/yarn.lock index ac71a598d..c473ab0e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -796,38 +796,43 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@fortawesome/fontawesome-common-types@^0.2.28": - version "0.2.28" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz#1091bdfe63b3f139441e9cba27aa022bff97d8b2" - integrity sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg== +"@fortawesome/fontawesome-common-types@^0.2.36": + version "0.2.36" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz#b44e52db3b6b20523e0c57ef8c42d315532cb903" + integrity sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg== + +"@fortawesome/fontawesome-common-types@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.3.0.tgz#949995a05c0d8801be7e0a594f775f1dbaa0d893" + integrity sha512-CA3MAZBTxVsF6SkfkHXDerkhcQs0QPofy43eFdbWJJkZiq3SfiaH1msOkac59rQaqto5EqWnASboY1dBuKen5w== "@fortawesome/fontawesome-svg-core@^1.2.2": - version "1.2.28" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.28.tgz#e5b8c8814ef375f01f5d7c132d3c3a2f83a3abf9" - integrity sha512-4LeaNHWvrneoU0i8b5RTOJHKx7E+y7jYejplR7uSVB34+mp3Veg7cbKk7NBCLiI4TyoWS1wh9ZdoyLJR8wSAdg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.3.0.tgz#343fac91fa87daa630d26420bfedfba560f85885" + integrity sha512-UIL6crBWhjTNQcONt96ExjUnKt1D68foe3xjEensLDclqQ6YagwCRYVQdrp/hW0ALRp/5Fv/VKw+MqTUWYYvPg== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.28" + "@fortawesome/fontawesome-common-types" "^0.3.0" "@fortawesome/free-brands-svg-icons@^5.2.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.13.0.tgz#e79de73ba6555055204828dca9c0691e7ce5242b" - integrity sha512-/6xXiJFCMEQxqxXbL0FPJpwq5Cv6MRrjsbJEmH/t5vOvB4dILDpnY0f7zZSlA8+TG7jwlt12miF/yZpZkykucA== + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz#ec8a44dd383bcdd58aa7d1c96f38251e6fec9733" + integrity sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.28" + "@fortawesome/fontawesome-common-types" "^0.2.36" "@fortawesome/free-regular-svg-icons@^5.2.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.13.0.tgz#925a13d8bdda0678f71551828cac80ab47b8150c" - integrity sha512-70FAyiS5j+ANYD4dh9NGowTorNDnyvQHHpCM7FpnF7GxtDjBUCKdrFqCPzesEIpNDFNd+La3vex+jDk4nnUfpA== + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz#b97edab436954333bbeac09cfc40c6a951081a02" + integrity sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.28" + "@fortawesome/fontawesome-common-types" "^0.2.36" "@fortawesome/free-solid-svg-icons@^5.2.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.0.tgz#44d9118668ad96b4fd5c9434a43efc5903525739" - integrity sha512-IHUgDJdomv6YtG4p3zl1B5wWf9ffinHIvebqQOmV3U+3SLw4fC+LUCCgwfETkbTtjy5/Qws2VoVf6z/ETQpFpg== + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz#2a68f3fc3ddda12e52645654142b9e4e8fbb6cc5" + integrity sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w== dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.28" + "@fortawesome/fontawesome-common-types" "^0.2.36" "@fortawesome/vue-fontawesome@0.1.1": version "0.1.1" @@ -1628,8 +1633,9 @@ bluebird@^3.5.5: integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== body-parser@1.19.0: version "1.19.0" @@ -1702,6 +1708,7 @@ braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -2053,8 +2060,9 @@ cli-boxes@^2.2.0: integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== clipboard@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -2580,7 +2588,7 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2681,6 +2689,7 @@ delayed-stream@~1.0.0: delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== delegates@^1.0.0: version "1.0.0" @@ -2854,8 +2863,9 @@ electron-to-chromium@^1.3.413: integrity sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug== elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3024,9 +3034,9 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^1.1.0: version "1.1.1" @@ -3276,11 +3286,9 @@ flush-write-stream@^1.0.0: readable-stream "^3.1.1" follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== - dependencies: - debug "^3.0.0" + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== for-in@^1.0.2: version "1.0.2" @@ -3528,6 +3536,7 @@ globby@^9.2.0: good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: delegate "^3.1.2" @@ -3657,6 +3666,7 @@ hash-sum@^1.0.2: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" @@ -3673,6 +3683,7 @@ hex-color-regex@^1.1.0: hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -3797,9 +3808,9 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -3916,18 +3927,18 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" ini@^1.3.5, ini@~1.3.0: version "1.3.5" @@ -4276,11 +4287,6 @@ javascript-stringify@^2.0.1: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== -jquery@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4549,9 +4555,9 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.5: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== loglevel@^1.6.6: version "1.6.8" @@ -4814,10 +4820,12 @@ mini-css-extract-plugin@0.6.0: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" @@ -5894,8 +5902,9 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" prismjs@^1.13.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + version "1.21.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.21.0.tgz#36c086ec36b45319ec4218ee164c110f9fc015a3" + integrity sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw== optionalDependencies: clipboard "^2.0.0" @@ -6412,6 +6421,7 @@ select-hose@^2.0.0: select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= selfsigned@^1.10.7: version "1.10.7" @@ -7058,8 +7068,9 @@ timsort@^0.3.0: integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tiny-emitter@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== to-arraybuffer@^1.0.0: version "1.0.1" @@ -7405,11 +7416,6 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -vue-disqus-spa@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/vue-disqus-spa/-/vue-disqus-spa-0.1.0.tgz#8a42d50ddbe8f0c30298a3860a2fb3dc246209e1" - integrity sha512-JWM/gdAskBsBE6inKG1vudHN/L4tsJsIivbt7SBTHhvv3WNocPMZSZi2SA5NN0p1NI7VZDjX/7usvsF9eWKGpg== - vue-hot-reload-api@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2" @@ -7486,7 +7492,12 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.5.16, vue@^2.6.10: +vue@^2.5.16: + version "2.6.14" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" + integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== + +vue@^2.6.10: version "2.6.11" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== @@ -7527,21 +7538,6 @@ vuepress-plugin-container@^2.0.2, vuepress-plugin-container@^2.1.0: dependencies: markdown-it-container "^2.0.0" -vuepress-plugin-disqus-spa@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/vuepress-plugin-disqus-spa/-/vuepress-plugin-disqus-spa-0.1.1.tgz#ee511152687ab229f33e11c4e01f563b791e5402" - integrity sha512-s+EsevV4XZMdHvFWxKsBH6ISMvpDsq6ifzOZ7N2na1pHjNONLwI2SVh2QWlDCQJmm7lSCZ2PclMgjzHZi+PtcA== - dependencies: - jquery "^3.5.1" - vue-disqus-spa "^0.1.0" - -vuepress-plugin-separate-pages@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/vuepress-plugin-separate-pages/-/vuepress-plugin-separate-pages-0.1.3.tgz#ff322ba9ab9cefd072506b2ef1456f6b5b22ab17" - integrity sha512-5hGI3VlIQtrIvUnWrqeOT2DKgR+BJbhJZdlENiD8LEjU/avZkebwuAfo4Kk7FEmXy+ALSCOfVpKKWw8rEquT3w== - dependencies: - jquery "^3.5.1" - vuepress-plugin-smooth-scroll@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/vuepress-plugin-smooth-scroll/-/vuepress-plugin-smooth-scroll-0.0.3.tgz#6eff2d4c186cca917cc9f7df2b0af7de7c8c6438" @@ -7551,7 +7547,7 @@ vuepress-plugin-smooth-scroll@^0.0.3: "vuepress-theme-cloudlinux@https://github.com/cloudlinux/cloudlinux-doc-theme.git": version "0.0.1" - resolved "https://github.com/cloudlinux/cloudlinux-doc-theme.git#2a35daf24976e0e7e819ab6227a81b6ab320fcae" + resolved "https://github.com/cloudlinux/cloudlinux-doc-theme.git#0b610e645400f2da78179c07dd42863f5200710d" dependencies: "@fortawesome/fontawesome-svg-core" "^1.2.2" "@fortawesome/free-brands-svg-icons" "^5.2.0"