فهرست منبع

Move docs to the main repo (#3086)

* Add docs
Add TypeScript support

* Import version from package.json

* Use the same Font Awesome as the web UI

* Run prettier

Co-authored-by: Jaap Marcus <9754650+jaapmarcus@users.noreply.github.com>
Jakob Bouchard 3 سال پیش
والد
کامیت
ec067c3f13
70فایلهای تغییر یافته به همراه10480 افزوده شده و 20 حذف شده
  1. 9 1
      .eslintignore
  2. 14 4
      .eslintrc.cjs
  3. 24 7
      .gitignore
  4. 12 4
      .prettierignore
  5. 10 0
      .stylelintignore
  6. 161 0
      docs/.vitepress/config.ts
  7. 49 0
      docs/.vitepress/theme/components/FeatureList.vue
  8. 29 0
      docs/.vitepress/theme/components/FeaturePage.vue
  9. 123 0
      docs/.vitepress/theme/components/FeaturePageSection.vue
  10. 42 0
      docs/.vitepress/theme/components/FeaturePageTitle.vue
  11. 14 0
      docs/.vitepress/theme/index.ts
  12. 27 0
      docs/.vitepress/theme/styles/base.css
  13. 18 0
      docs/.vitepress/theme/styles/vars.css
  14. 66 0
      docs/_data/features.ts
  15. 77 0
      docs/_data/team.ts
  16. 10 0
      docs/docs/community/hestia-nginx-cache.md
  17. 6 0
      docs/docs/community/install-script-generator.md
  18. 12 0
      docs/docs/community/ioncube-hestia-installer.md
  19. 115 0
      docs/docs/contributing/development.md
  20. 15 0
      docs/docs/contributing/documentation.md
  21. 76 0
      docs/docs/contributing/quick-install-app.md
  22. 41 0
      docs/docs/contributing/testing.md
  23. 3 0
      docs/docs/contributing/translations.md
  24. 15 0
      docs/docs/introduction/best-practices.md
  25. 114 0
      docs/docs/introduction/getting-started.md
  26. 36 0
      docs/docs/reference/api.md
  27. 6179 0
      docs/docs/reference/cli.md
  28. 168 0
      docs/docs/server-administration/backup-restore.md
  29. 137 0
      docs/docs/server-administration/configuration.md
  30. 70 0
      docs/docs/server-administration/customisation.md
  31. 89 0
      docs/docs/server-administration/databases.md
  32. 162 0
      docs/docs/server-administration/dns.md
  33. 104 0
      docs/docs/server-administration/email.md
  34. 53 0
      docs/docs/server-administration/file-manager.md
  35. 72 0
      docs/docs/server-administration/firewall.md
  36. 73 0
      docs/docs/server-administration/os-upgrades.md
  37. 76 0
      docs/docs/server-administration/rest-api.md
  38. 98 0
      docs/docs/server-administration/ssl-certificates.md
  39. 16 0
      docs/docs/server-administration/troubleshooting.md
  40. 149 0
      docs/docs/server-administration/web-templates.md
  41. 100 0
      docs/docs/user-guide/account.md
  42. 81 0
      docs/docs/user-guide/backups.md
  43. 30 0
      docs/docs/user-guide/cron-jobs.md
  44. 34 0
      docs/docs/user-guide/databases.md
  45. 125 0
      docs/docs/user-guide/dns.md
  46. 5 0
      docs/docs/user-guide/file-manager.md
  47. 156 0
      docs/docs/user-guide/mail-domains.md
  48. 5 0
      docs/docs/user-guide/notifications.md
  49. 124 0
      docs/docs/user-guide/packages.md
  50. 16 0
      docs/docs/user-guide/statistics.md
  51. 72 0
      docs/docs/user-guide/users.md
  52. 129 0
      docs/docs/user-guide/web-domains.md
  53. 18 0
      docs/donate.md
  54. 52 0
      docs/features.md
  55. 46 0
      docs/index.md
  56. 3 0
      docs/public/_headers
  57. BIN
      docs/public/apple-touch-icon.png
  58. BIN
      docs/public/favicon.ico
  59. BIN
      docs/public/icon-192.png
  60. BIN
      docs/public/icon-512.png
  61. 0 0
      docs/public/images/undraw_maintenance_re_59vn.svg
  62. 0 0
      docs/public/images/undraw_personal_email_re_4lx7.svg
  63. 0 0
      docs/public/images/undraw_server_status_re_n8ln.svg
  64. 0 0
      docs/public/images/undraw_two_factor_authentication_namy.svg
  65. 0 0
      docs/public/images/undraw_web_developer_re_h7ie.svg
  66. 0 0
      docs/public/logo.svg
  67. 11 0
      docs/public/site.webmanifest
  68. 46 0
      docs/team.md
  69. 9 1
      package.json
  70. 854 3
      yarn.lock

+ 9 - 1
.eslintignore

@@ -1,3 +1,11 @@
+# Minified files
+*.min.js
+
+# Vendor/packages
 .pnp.*
 .yarn/*
-web/js/vendor/
+**/node_modules/
+**/vendor/
+
+# vitepress
+**/.vitepress/dist/

+ 14 - 4
.eslintrc.cjs

@@ -1,10 +1,17 @@
 module.exports = {
 	root: true,
+	parser: '@typescript-eslint/parser',
 	parserOptions: {
+		sourceType: 'module',
 		ecmaVersion: 'latest',
 	},
-	extends: ['eslint:recommended', 'plugin:editorconfig/noconflict', 'prettier'],
-	plugins: ['editorconfig'],
+	extends: [
+		'eslint:recommended',
+		'plugin:@typescript-eslint/recommended',
+		'plugin:editorconfig/noconflict',
+		'prettier',
+	],
+	plugins: ['editorconfig', '@typescript-eslint'],
 	ignorePatterns: ['*.cjs'],
 	env: {
 		browser: true,
@@ -16,8 +23,11 @@ module.exports = {
 		App: 'readonly',
 	},
 	rules: {
-		'no-unused-vars': 'off',
-		'no-undef': 'off',
+		// Set those as warnings instead. They should be fixed at some point
+		'@typescript-eslint/no-unused-vars': 'warn',
+		'@typescript-eslint/no-empty-function': 'warn',
+		'@typescript-eslint/no-this-alias': 'warn',
 		'no-redeclare': 'off',
+		'no-undef': 'off',
 	},
 };

+ 24 - 7
.gitignore

@@ -1,3 +1,4 @@
+# Packages
 *.tar
 *.zip
 *.gzip
@@ -5,32 +6,48 @@
 *.bz2
 *.deb
 
-.vs
-.nova
-/.idea/
+# Editors
+.vs/
+.nova/
+.idea/
 .vscode/*
 !.vscode/settings.json
 !.vscode/tasks.json
 !.vscode/launch.json
 !.vscode/extensions.json
 !.vscode/*.code-snippets
+
+# macOS
 .DS_Store
+.AppleDouble
+.LSOverride
+._*
 
 .env
+
+# Composer
 composer.phar
 test/vendor/
-**/node_modules/
 web/src/vendor/filp
 web/src/vendor/psr
 web/src/vendor/composer/installed.json
-npm-debug.log
 .phpunit.result.cache
 
-# Yarn (not zero-installs)
-.pnp.*
+# vitepress build output
+**/.vitepress/dist/
+
+# Node
+**/node_modules/
+npm-debug.log
+
+# Yarn Integrity file
+.yarn-integrity
+
+# yarn v2+
 .yarn/*
 !.yarn/patches
 !.yarn/plugins
 !.yarn/releases
 !.yarn/sdks
 !.yarn/versions
+.pnp.*

+ 12 - 4
.prettierignore

@@ -1,4 +1,8 @@
+# macOS
 .DS_Store
+.AppleDouble
+.LSOverride
+._*
 
 # Minified files
 *.min.css
@@ -16,10 +20,14 @@ web/templates/
 # Vendor/packages
 .pnp.*
 .yarn/*
-vendor/
-composer.phar
-composer.json
-composer.lock
+**/node_modules/
+**/vendor/
+**/composer.phar
+**/composer.json
+**/composer.lock
+
+# vitepress build output
+**/.vitepress/dist/
 
 # Logs
 logs

+ 10 - 0
.stylelintignore

@@ -1,2 +1,12 @@
+# Minified files
 web/css/src/dependencies
 *.min.css
+
+# Vendor/packages
+.pnp.*
+.yarn/*
+**/node_modules/
+**/vendor/
+
+# vitepress
+**/.vitepress/dist/

+ 161 - 0
docs/.vitepress/config.ts

@@ -0,0 +1,161 @@
+import { defineConfig, type DefaultTheme } from "vitepress";
+import { version } from "../../package.json";
+
+export default defineConfig({
+	lang: "en-US",
+	title: "Hestia Control Panel",
+	description: "Open-source web server control panel.",
+
+	lastUpdated: true,
+	cleanUrls: "with-subfolders",
+
+	head: [
+		["link", { rel: "icon", sizes: "any", href: "/favicon.ico" }],
+		["link", { rel: "icon", type: "image/svg+xml", sizes: "16x16", href: "/logo.svg" }],
+		["link", { rel: "apple-touch-icon", sizes: "180x180", href: "/apple-touch-icon.png" }],
+		["link", { rel: "manifest", href: "/site.webmanifest" }],
+		["meta", { name: "theme-color", content: "#b7236a" }],
+	],
+
+	themeConfig: {
+		logo: "/logo.svg",
+
+		nav: nav(),
+
+		socialLinks: [
+			{ icon: "github", link: "https://github.com/hestiacp/hestiacp" },
+			{ icon: "discord", link: "https://discord.gg/nXRUZch" },
+			{ icon: "twitter", link: "https://twitter.com/HestiaPanel" },
+			{ icon: "facebook", link: "https://www.facebook.com/hestiacp" },
+		],
+
+		sidebar: { "/docs/": sidebarDocs() },
+
+		outline: [2, 3],
+
+		editLink: {
+			pattern: "https://github.com/hestiacp/hestiacp-docs/edit/main/docs/:path",
+			text: "Edit this page on GitHub",
+		},
+
+		footer: {
+			message: "Released under the GPLv3 License.",
+			copyright: "Copyright © 2019-present Hestia Control Panel",
+		},
+
+		// algolia: {
+		//   appId: "REPLACE_ME",
+		//   apiKey: "REPLACE_ME",
+		//   indexName: "REPLACE_ME",
+		// },
+	},
+});
+
+function nav(): DefaultTheme.NavItem[] {
+	return [
+		{ text: "Features", link: "/features.md" },
+		{ text: "Docs", link: "/docs/introduction/getting-started.md", activeMatch: "/docs/" },
+		{ text: "Team", link: "/team.md" },
+		{ text: "Demo", link: "https://demo.hestiacp.com:8083/" },
+		{ text: "Forum", link: "https://forum.hestiacp.com/" },
+		{ text: "Donate", link: "/donate.md" },
+		{
+			text: `v${version}`,
+			items: [
+				{
+					text: "Changelog",
+					link: "https://github.com/hestiacp/hestiacp/blob/main/CHANGELOG.md",
+				},
+				{
+					text: "Contributing",
+					link: "https://github.com/hestiacp/hestiacp/blob/main/CONTRIBUTING.md",
+				},
+				{
+					text: "Security policy",
+					link: "https://github.com/hestiacp/hestiacp/blob/main/SECURITY.md",
+				},
+			],
+		},
+	];
+}
+
+function sidebarDocs(): DefaultTheme.SidebarGroup[] {
+	return [
+		{
+			text: "Introduction",
+			collapsible: true,
+			items: [
+				{ text: "Getting started", link: "/docs/introduction/getting-started.md" },
+				{ text: "Best practices", link: "/docs/introduction/best-practices.md" },
+			],
+		},
+		{
+			text: "User guide",
+			collapsible: true,
+			items: [
+				{ text: "Account", link: "/docs/user-guide/account.md" },
+				{ text: "Backups", link: "/docs/user-guide/backups.md" },
+				{ text: "Cron jobs", link: "/docs/user-guide/cron-jobs.md" },
+				{ text: "Databases", link: "/docs/user-guide/databases.md" },
+				{ text: "DNS", link: "/docs/user-guide/dns.md" },
+				{ text: "File manager", link: "/docs/user-guide/file-manager.md" },
+				{ text: "Mail domains", link: "/docs/user-guide/mail-domains.md" },
+				{ text: "Notifications", link: "/docs/user-guide/notifications.md" },
+				{ text: "Packages", link: "/docs/user-guide/packages.md" },
+				{ text: "Statistics", link: "/docs/user-guide/statistics.md" },
+				{ text: "Users", link: "/docs/user-guide/users.md" },
+				{ text: "Web domains", link: "/docs/user-guide/web-domains.md" },
+			],
+		},
+		{
+			text: "Server administration",
+			collapsible: true,
+			items: [
+				{ text: "Backup & restore", link: "/docs/server-administration/backup-restore.md" },
+				{ text: "Configuration", link: "/docs/server-administration/configuration.md" },
+				{ text: "Customisation", link: "/docs/server-administration/customisation.md" },
+				{ text: "Databases & phpMyAdmin", link: "/docs/server-administration/databases.md" },
+				{ text: "DNS clusters & DNSSEC", link: "/docs/server-administration/dns.md" },
+				{ text: "Email", link: "/docs/server-administration/email.md" },
+				{ text: "File manager", link: "/docs/server-administration/file-manager.md" },
+				{ text: "Firewall", link: "/docs/server-administration/firewall.md" },
+				{ text: "OS upgrades", link: "/docs/server-administration/os-upgrades.md" },
+				{ text: "Rest API", link: "/docs/server-administration/rest-api.md" },
+				{ text: "SSL certificates", link: "/docs/server-administration/ssl-certificates.md" },
+				{ text: "Web templates & caching", link: "/docs/server-administration/web-templates.md" },
+				{ text: "Troubleshooting", link: "/docs/server-administration/troubleshooting.md" },
+			],
+		},
+		{
+			text: "Contributing",
+			collapsible: true,
+			items: [
+				{ text: "Development", link: "/docs/contributing/development.md" },
+				{ text: "Documentation", link: "/docs/contributing/documentation.md" },
+				{ text: "Quick install app", link: "/docs/contributing/quick-install-app.md" },
+				{ text: "Testing", link: "/docs/contributing/testing.md" },
+				{ text: "Translations", link: "/docs/contributing/translations.md" },
+			],
+		},
+		{
+			text: "Community",
+			collapsible: true,
+			items: [
+				{ text: "Hestia Nginx Cache", link: "/docs/community/hestia-nginx-cache.md" },
+				{
+					text: "Ioncube installer for Hestia",
+					link: "/docs/community/ioncube-hestia-installer.md",
+				},
+				{ text: "Install script generator", link: "/docs/community/install-script-generator.md" },
+			],
+		},
+		{
+			text: "Reference",
+			collapsible: true,
+			items: [
+				{ text: "API", link: "/docs/reference/api.md" },
+				{ text: "CLI", link: "/docs/reference/cli.md" },
+			],
+		},
+	];
+}

+ 49 - 0
docs/.vitepress/theme/components/FeatureList.vue

@@ -0,0 +1,49 @@
+<script lang="ts">
+import { FeatureListItem } from "../../../_data/features";
+
+export default {
+	props: {
+		items: {
+			type: Array<FeatureListItem>,
+			required: true,
+		},
+	},
+};
+</script>
+
+<template>
+	<ul class="FeatureList">
+		<li v-for="item in items">
+			<span v-html="item.text"></span>
+			<ul v-if="item.items">
+				<li v-for="nested in item.items">
+					<span v-html="nested.text"></span>
+				</li>
+			</ul>
+		</li>
+	</ul>
+</template>
+
+<style scoped>
+.FeatureList {
+	margin: 0.55em 0;
+	padding-left: 1em;
+	list-style: disc;
+	line-height: 1.5;
+}
+
+.FeatureList ul {
+	padding-left: 1em;
+	list-style: disc;
+}
+
+.FeatureList li {
+	margin-top: 0.5em;
+}
+
+@media (min-width: 640px) {
+	.FeatureList {
+		font-size: 1.15rem;
+	}
+}
+</style>

+ 29 - 0
docs/.vitepress/theme/components/FeaturePage.vue

@@ -0,0 +1,29 @@
+<template>
+	<div class="FeaturePage">
+		<slot></slot>
+	</div>
+</template>
+
+<style scoped>
+.FeaturePage {
+	line-height: 1.5;
+}
+
+.FeaturePage :deep(.container) {
+	display: flex;
+	flex-direction: column;
+	margin: 0 auto;
+	max-width: 1152px;
+}
+
+.FeaturePage :deep(a) {
+	font-weight: 500;
+	color: var(--vp-c-brand);
+	text-decoration-style: dotted;
+	transition: color 0.25s;
+}
+
+.FeaturePage :deep(a:hover) {
+	color: var(--vp-c-brand-dark);
+}
+</style>

+ 123 - 0
docs/.vitepress/theme/components/FeaturePageSection.vue

@@ -0,0 +1,123 @@
+<script lang="ts">
+export default {
+	props: {
+		image: String,
+	},
+};
+</script>
+
+<template>
+	<div class="FeaturePageSection">
+		<div class="container">
+			<figure v-if="image">
+				<img :src="image" alt="" />
+			</figure>
+			<div>
+				<h2>
+					<slot name="title" />
+				</h2>
+				<p v-if="$slots.lead" class="lead">
+					<slot name="lead" />
+				</p>
+				<slot name="list" />
+			</div>
+		</div>
+	</div>
+</template>
+
+<style scoped>
+.FeaturePageSection {
+	margin: 0 0 0.5em;
+	padding: 0 24px;
+}
+
+.FeaturePageTitle + .FeaturePageSection {
+	padding: 48px 24px 0;
+}
+
+.FeaturePageSection:last-child {
+	padding: 0 24px 48px;
+}
+
+.FeaturePageSection + .FeaturePageSection {
+	margin: 2em 0 0.5em;
+}
+
+.FeaturePageSection h2 {
+	margin: 0 0 0.5em;
+	font-size: 1.5rem;
+	font-weight: 700;
+	line-height: inherit;
+}
+
+.FeaturePageSection .lead {
+	margin: 0.5em 0;
+	font-style: italic;
+}
+
+@media (min-width: 640px) {
+	.FeaturePageSection {
+		padding: 0 48px;
+	}
+
+	.FeaturePageTitle + .FeaturePageSection {
+		padding: 48px 48px 0;
+	}
+
+	.FeaturePageSection:last-child {
+		padding: 0 48px 48px;
+	}
+
+	.FeaturePageSection + .FeaturePageSection {
+		margin: 4em 0 0.5em;
+	}
+
+	.FeaturePageSection h2 {
+		font-size: 1.85rem;
+	}
+
+	.FeaturePageSection .lead {
+		font-size: 1.15rem;
+	}
+}
+
+@media (min-width: 960px) {
+	.FeaturePageSection {
+		padding: 0 64px;
+	}
+
+	.FeaturePageTitle + .FeaturePageSection {
+		padding: 64px 64px 0;
+	}
+
+	.FeaturePageSection:last-child {
+		padding: 0 64px 64px;
+	}
+}
+
+.FeaturePageSection .container {
+	flex-direction: column;
+	gap: 2rem;
+}
+
+@media (min-width: 640px) {
+	.FeaturePageSection .container {
+		flex-direction: row;
+		align-items: flex-start;
+	}
+
+	.FeaturePageSection:nth-child(2n + 1) .container {
+		flex-direction: row-reverse;
+	}
+
+	.FeaturePageSection .container > * {
+		width: 50%;
+	}
+}
+
+figure {
+	padding: 2rem;
+	border-radius: 8px;
+	background-color: var(--vp-c-bg-alt);
+}
+</style>

+ 42 - 0
docs/.vitepress/theme/components/FeaturePageTitle.vue

@@ -0,0 +1,42 @@
+<template>
+	<header class="FeaturePageTitle">
+		<div class="container">
+			<h1>
+				<slot name="title"></slot>
+			</h1>
+			<p v-if="$slots.lead" class="lead">
+				<slot name="lead" />
+			</p>
+		</div>
+	</header>
+</template>
+
+<style scoped>
+.FeaturePageTitle {
+	padding: 0 24px;
+	background-color: var(--vp-c-bg-alt);
+}
+
+.FeaturePageTitle h1 {
+	margin: 0.75em 0;
+	font-size: 2rem;
+	font-weight: 700;
+	line-height: inherit;
+}
+
+@media (min-width: 640px) {
+	.FeaturePageTitle {
+		padding: 0 48px;
+	}
+
+	.FeaturePageTitle h1 {
+		font-size: 2.5rem;
+	}
+}
+
+@media (min-width: 960px) {
+	.FeaturePageTitle {
+		padding: 0 64px;
+	}
+}
+</style>

+ 14 - 0
docs/.vitepress/theme/index.ts

@@ -0,0 +1,14 @@
+import Theme from "vitepress/theme";
+import "@fortawesome/fontawesome-free/css/fontawesome.css";
+import "@fortawesome/fontawesome-free/css/brands.css";
+import "@fortawesome/fontawesome-free/css/solid.css";
+import "./styles/base.css";
+import "./styles/vars.css";
+import FeaturePage from "./components/FeaturePage.vue";
+
+export default {
+	...Theme,
+	enhanceApp({ app }) {
+		app.component("FeaturePage", FeaturePage);
+	},
+};

+ 27 - 0
docs/.vitepress/theme/styles/base.css

@@ -0,0 +1,27 @@
+html {
+	scroll-behavior: smooth;
+}
+
+.VPMenu .item.social-links {
+	justify-content: center;
+}
+
+.has-outline .nested {
+	padding-left: 0;
+}
+
+.has-outline .nested .outline-link::before {
+	content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='5 6 12 8' width='10' height='13'%3E%3Cpath fill='black' d='M12.172 12L9.343 9.172l1.414-1.415L15 12l-4.243 4.243l-1.414-1.415z'%3E%3C/path%3E%3C/svg%3E");
+	margin: 0 5px;
+	opacity: 0.5;
+	transition: opacity 0.5s;
+}
+
+.dark .has-outline .nested .outline-link::before {
+	content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='5 6 12 8' width='10' height='13'%3E%3Cpath fill='white' d='M12.172 12L9.343 9.172l1.414-1.415L15 12l-4.243 4.243l-1.414-1.415z'%3E%3C/path%3E%3C/svg%3E");
+}
+
+.has-outline .nested .outline-link.active::before,
+.has-outline .nested .outline-link:hover::before {
+	opacity: 1;
+}

+ 18 - 0
docs/.vitepress/theme/styles/vars.css

@@ -0,0 +1,18 @@
+:root {
+	--vp-c-brand-lighter: #ff558f;
+	--vp-c-brand-light: #da4778;
+	--vp-c-brand: #b7236a;
+	--vp-c-brand-dark: #9a1d5a;
+	--vp-c-brand-darker: #781746;
+	--vp-home-hero-name-color: transparent;
+	--vp-home-hero-name-background: linear-gradient(120deg, #d83182, #633288, #41d1ff);
+}
+
+.dark {
+	--vp-c-bg: #282828;
+	--vp-c-brand-lighter: #ff85ae;
+	--vp-c-brand-light: #ff558f;
+	--vp-c-brand: #ff558f;
+	--vp-c-brand-dark: #da4778;
+	--vp-c-brand-darker: #b7236a;
+}

+ 66 - 0
docs/_data/features.ts

@@ -0,0 +1,66 @@
+export interface FeatureListItem {
+	text: string;
+	items?: { text: string }[];
+}
+
+export const users: FeatureListItem[] = [
+	{ text: "Support for SFTP chroot jails" },
+	{ text: "Two-Factor Authentication support for the Admin Panel" },
+	{ text: "SSH keys for login via SFTP and SSH" },
+];
+
+export const webDomains: FeatureListItem[] = [
+	{ text: "Nginx FastCGI cache support for Nginx + PHP-FPM" },
+	{ text: "Nginx Proxy cache support for Nginx + Apache2" },
+	{ text: "Per-domain TLS certificates for web domains" },
+	{ text: "MultiIP support for Web/Mail/DNS" },
+	{
+		text: "MultiPHP support for",
+		items: [
+			{ text: "PHP 5.6 (<a href='https://www.php.net/supported-versions.php'>EOL</a>)" },
+			{ text: "PHP 7.0 (<a href='https://www.php.net/supported-versions.php'>EOL</a>)" },
+			{ text: "PHP 7.1 (<a href='https://www.php.net/supported-versions.php'>EOL</a>)" },
+			{ text: "PHP 7.2 (<a href='https://www.php.net/supported-versions.php'>EOL</a>)" },
+			{ text: "PHP 7.3 (<a href='https://www.php.net/supported-versions.php'>EOL</a>)" },
+			{ text: "PHP 7.4" },
+			{ text: "PHP 8.0" },
+			{ text: "PHP 8.1" },
+		],
+	},
+	{
+		text: "One-Click Install Apps",
+		items: [
+			{ text: "WordPress" },
+			{ text: "Dokuwiki" },
+			{ text: "Drupal" },
+			{ text: "Grav" },
+			{ text: "Laravel" },
+			{ text: "MediaWiki" },
+			{ text: "NextCloud" },
+			{ text: "OpenCart" },
+			{ text: "Prestashop" },
+			{ text: "Symphony" },
+		],
+	},
+];
+
+export const mail: FeatureListItem[] = [
+	{
+		text: "Per-domain TLS certificates for inbound and outbound mail services (Exim 4, Dovecot, Webmail)",
+	},
+	{ text: "SMTP relay setup for Exim in case port 25 is blocked by the provider" },
+	{ text: "Rate limit adjustable per user or email account" },
+	{ text: "Let’s Encrypt support for mail domains" },
+	{ text: "Latest version of Roundcube" },
+	{ text: "Optional Rainloop installation" },
+];
+
+export const databases: FeatureListItem[] = [
+	{ text: "Support for MariaDB 10.2 -> 10.8 with 10.6 as default" },
+	{ text: "Support for PostgreSQL" },
+	{ text: "Latest version of phpMyAdmin" },
+];
+
+export const serverAdmin: FeatureListItem[] = [
+	{ text: "Automated backups to SFTP, FTP or Backblaze B2" },
+];

+ 77 - 0
docs/_data/team.ts

@@ -0,0 +1,77 @@
+import type { DefaultTheme } from "vitepress";
+
+export const projectManagers: DefaultTheme.TeamMember[] = [
+	{
+		avatar: "https://www.github.com/ScIT-Raphael.png",
+		name: "Raphael Schneeberger 🇨🇭",
+		title: "Project Founder",
+		links: [{ icon: "github", link: "https://github.com/ScIT-Raphael" }],
+	},
+	{
+		avatar: "https://www.github.com/jaapmarcus.png",
+		name: "Jaap Marcus 🇳🇱",
+		links: [
+			{ icon: "github", link: "https://github.com/jaapmarcus" },
+			{ icon: "twitter", link: "https://twitter.com/jaapmarcus" },
+		],
+	},
+	{
+		avatar: "https://www.github.com/Lupul.png",
+		name: "Robert Zollner 🇷🇴",
+		links: [{ icon: "github", link: "https://github.com/Lupul" }],
+	},
+];
+
+export const teamMembers: DefaultTheme.TeamMember[] = [
+	{
+		avatar: "https://www.github.com/jakobbouchard.png",
+		name: "Jakob Bouchard 🇨🇦",
+		title: "Developer",
+		org: "Prosomo",
+		orgLink: "https://prosomo.com",
+		links: [
+			{ icon: "github", link: "https://github.com/jakobbouchard" },
+			{ icon: "linkedin", link: "https://linkedin.com/in/bouchardjakob" },
+			{
+				icon: {
+					svg: '<svg role="img" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><title>Website</title><path stroke-linecap="round" stroke-linejoin="round" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /></svg>',
+				},
+				link: "https://jakobbouchard.dev",
+			},
+		],
+	},
+	{
+		avatar:
+			"https://cdn.discordapp.com/avatars/737905427097845780/32452f630dd8684ed7c580806ccbee09.webp",
+		name: "Falzo 🇩🇪",
+		links: [{ icon: "github", link: "https://github.com/falzoMAD" }],
+	},
+	{
+		avatar: "https://www.github.com/divinity76.png",
+		name: "divinity76 🇳🇴",
+		links: [{ icon: "github", link: "https://github.com/divinity76" }],
+	},
+	{
+		avatar: "https://www.github.com/istiak101.png",
+		name: "istiak101 🇧🇩",
+		links: [{ icon: "github", link: "https://github.com/istiak101" }],
+	},
+	{
+		avatar: "https://www.github.com/Pleskan.png",
+		name: "Anton Pleskanovskyy 🇺🇦",
+		links: [{ icon: "github", link: "https://github.com/Pleskan" }],
+	},
+	{
+		avatar: "https://www.github.com/AlecRust.png",
+		name: "Alec Rust 🇬🇧",
+		links: [{ icon: "github", link: "https://github.com/AlecRust" }],
+	},
+];
+
+export const emeriti: DefaultTheme.TeamMember[] = [
+	{
+		avatar:
+			"https://cdn.discordapp.com/avatars/737720562482151485/bac8f56f0a909032efaf60c1aa4047e5.webp",
+		name: "Kristan Kenney 🇨🇦",
+	},
+];

+ 10 - 0
docs/docs/community/hestia-nginx-cache.md

@@ -0,0 +1,10 @@
+# Hestia Nginx Cache
+
+By [Jakob Bouchard](https://github.com/jakobbouchard/)  
+[View the project](https://wordpress.org/plugins/hestia-nginx-cache/) – [Source code](https://github.com/jakobbouchard/hestia-nginx-cache)
+
+::: info
+Requires **Hestia >= 1.6.0**, as it uses the latest API.
+:::
+
+WordPress plugin that automatically purges the Nginx cache after you make a website change such as updating a post or changing your theme. You also have the ability to manually purge the cache using a button in the WordPress admin bar.

+ 6 - 0
docs/docs/community/install-script-generator.md

@@ -0,0 +1,6 @@
+# Install Script Generator
+
+By [Gabriel Claudiu Maftei](https://github.com/gabizz/)  
+[View the project](https://gabizz.github.io/hestiacp-scriptline-generator/) – [Source code](https://github.com/gabizz/hestiacp-scriptline-generator)
+
+Tiny online app aimed to generate the necessary scriptline for an unattended Hestia Control Panel installation.

+ 12 - 0
docs/docs/community/ioncube-hestia-installer.md

@@ -0,0 +1,12 @@
+# Install Ioncube on Hestia
+
+By [Jaap Marcus](https://github.com/jaapmarcus/)  
+[Source code](https://github.com/jaapmarcus/ioncube-hestia-installer)
+
+Simple tool to download and install [Ioncube loaders](https://www.ioncube.com/loaders.php) for each available PHP version that is installed.
+
+```bash
+wget https://raw.githubusercontent.com/jaapmarcus/ioncube-hestia-installer/main/install_ioncube.sh
+chmod +x install_ioncube.sh
+./install_ioncube.sh
+```

+ 115 - 0
docs/docs/contributing/development.md

@@ -0,0 +1,115 @@
+# Contributing to Hestia’s development
+
+[View the current guidelines](https://github.com/hestiacp/hestiacp/blob/main/CONTRIBUTING.md).
+
+::: warning
+Development builds are always unstable. If you encounter a bug please [report it via GitHub](https://github.com/hestiacp/hestiacp/issues/new/choose) or [submit a Pull request](https://github.com/hestiacp/hestiacp/pulls).
+:::
+
+## Compiling
+
+::: info
+For building `hestia-nginx` or `hestia-php`, at least 2 GB of memory is required!
+:::
+
+Go into the `src` folder and run one of these commands:
+
+### Compile only
+
+```bash
+# Only Hestia
+./hst_autocompile.sh --hestia --noinstall --keepbuild '~localsrc'
+```
+
+```bash
+# Hestia + hestia-nginx and hestia-php
+./hst_autocompile.sh --all --noinstall --keepbuild '~localsrc'
+```
+
+### Compile and install
+
+::: info
+Use this only if you have Hestia already installed.
+:::
+
+```bash
+# Only Hestia
+./hst_autocompile.sh --hestia --install '~localsrc'
+```
+
+```bash
+# Hestia + hestia-nginx and hestia-php
+./hst_autocompile.sh --all --install '~localsrc'
+```
+
+## Install Hestia from packages
+
+```bash
+# Replace with https://github.com/username/hestiacp.git if you want to test a branch that you created yourself
+git clone https://github.com/hestiacp/hestiacp.git
+cd ./hestiacp/
+
+# Replace main with the branch you want to test
+git checkout main
+
+cd ./src/
+
+# Compile packages
+./hst_autocompile.sh --all --noinstall --keepbuild '~localsrc'
+
+cd ../install
+
+bash hst-install-{os}.sh --with-debs /tmp/hestiacp-src/deb/
+```
+
+Any option can be appended to the installer command. [See the complete list](../introduction/getting-started#list-of-installation-options).
+
+## Update Hestia from GitHub
+
+::: info
+The following method only supports building the `hestia` package. If you need to build `hestia-nginx` or `hestia-php`, use one of the previous commands.
+:::
+
+```bash
+v-update-sys-hestia-git [USERNAME] [BRANCH]
+```
+
+Sometimes dependencies will get added or removed when the packages are installed with `dpkg`. It is not possible to preload the dependencies. If this happens, you will see an error like:
+
+```bash
+dpkg: error processing package hestia (–install):
+dependency problems - leaving unconfigured
+```
+
+To solve this issue, run:
+
+```bash
+apt install -f
+```
+
+## Automated testing
+
+For automated testing, we currently use [Bats](https://github.com/bats-core/bats-core).
+
+### Install
+
+```bash
+# Clone Hestia repo with testing submodules
+git clone --recurse-submodules https://github.com/hestiacp/hestiacp
+# Or, using an existing local repo with an up-to-date main branch
+git submodule update --init --recursive
+
+# Install Bats
+test/test_helper/bats-core/install.sh /usr/local
+```
+
+### Run
+
+::: danger
+Do not run any testing script on a live server. It might cause issues or downtime!
+:::
+
+```bash
+# Run Hestia tests
+test/test.bats
+```

+ 15 - 0
docs/docs/contributing/documentation.md

@@ -0,0 +1,15 @@
+# Contributing to Hestia’s documentation
+
+The documentation is built using [VitePress](https://vitepress.vuejs.org). There are a couple of requirements to contribute to it.
+
+## Requirements
+
+- Node.js 16 or higher with [pnpm installed](https://pnpm.io/installation);
+- A code editor with Vue and Markdown support. We suggest [Visual Studio Code](https://code.visualstudio.com).
+
+## Viewing your changes locally
+
+1. Open the project folder in your terminal.
+2. If the dependencies are not installed yet, install them by running `pnpm i`.
+3. Run `pnpm dev`.
+4. Navigate to `http://localhost:5173` in your browser.

+ 76 - 0
docs/docs/contributing/quick-install-app.md

@@ -0,0 +1,76 @@
+# Quick install app
+
+One of Hestia’s most requested feature is to add support for Softaculous. However, due to the required use of Ioncube in hestia-php and because we are against the use of proprietary software, we have instead developed our own **Quick install app** solution.
+
+More information can be found in the [hestia-quick-install repo](https://github.com/hestiacp/hestia-quick-install/blob/main/Example/ExampleSetup.php)
+
+## Creating a new app
+
+1. Make a new folder called `Example` in `/usr/local/hestia/web/src/app/WebApp/Installers/`
+2. Create a file named `ExampleSetup.php`.
+3. Copy the [example file’s content](https://github.com/hestiacp/hestia-quick-install/blob/main/Example/ExampleSetup.php) into your new file.
+
+This will add an app called “Example” when you open the **Quick install app** page.
+
+## Info
+
+The following settings are required to display the info on the **Quick install app** list:
+
+- Name: Display name of the application. Please be aware that the naming of your app should follow the following regex: `[a-zA-Z][a-zA-Z0,9]`. Otherwise, it will not register as a working app!
+- Group: Currently not used, but we might add features that use it in the future. Currently used: `cms`, `ecommerce`, `framework`.
+- Enabled: Whether or not to show the app in the **Quick install app** page. Default set to `true`.
+- Version: `x.x.x` or `latest`.
+- Thumbnail: The image file for the app icon, include it in the same folder. The max size is 300px by 300px.
+
+## Settings
+
+### Form fields
+
+The following fields are available:
+
+- Text input
+- Selection dropdown
+- Checkbox
+- Radio button
+
+Since this is quite a complex feature, please check our existing apps for usage examples.
+
+### Database
+
+Flag to enable database auto-creation. If enabled, a checkbox is shown, allowing the user to automatically create a new database, as well as the 3 following fields:
+
+- Database Name
+- Database User
+- Database Password
+
+### Downloading the app’s source code
+
+Currently the following methods of download are supported:
+
+- Download a archive from a URL.
+- Via [Composer](https://getcomposer.org).
+- Via [WP-CLI](https://wp-cli.org).
+
+### Server settings
+
+Enables you to set app requirements and web server templates. For example, some apps require a specific Nginx template or will only run on PHP 8.0 or higher.
+
+- Nginx: Template used for Nginx + PHP-FPM setup.
+- Apache2: Template used for Apache2 setup. Can be usually be omitted.
+- PHP version: Array of all supported PHP versions.
+
+## Installing the web application
+
+There are multiple ways to install and configure the web app after it is has been downloaded.
+
+- Manipulation of config files.
+- Run commands. For example, use `drush` to install [Drupal](https://github.com/hestiacp/hestiacp/blob/88598deb49cec6a39be4682beb8e9b8720d59c7b/web/src/app/WebApp/Installers/Drupal/DrupalSetup.php#L56-L65).
+- Using curl to provide configure the app over HTTP.
+
+::: warning
+To prevent any issues, make that all commands are executed as the user, instead of `root` or `admin`. All the commands that are supplied by HestiaCP do this by default.
+:::
+
+## Sharing
+
+Once you are done, you can [submit a Pull Request](https://github.com/hestiacp/hestiacp/pulls) and we will review the code. If it meets our standards, we will include in the next release.

+ 41 - 0
docs/docs/contributing/testing.md

@@ -0,0 +1,41 @@
+# Beta and release candidate testing
+
+::: tip
+If there is a beta or release candidate available, we will announce it via our Discord server or our forum.
+:::
+
+In the last few months, we have seen a growing number of issues when releasing minor and major updates. To prevent this from happening, we have decided to setup a beta apt server so we can push more regular updates, enabling us to test at a larger scale than only 4 or 5 users.
+
+## Activating the beta repo on an existing install
+
+::: danger
+Betas and release candidates might still contain bugs and can possibly break your server. We cannot guarantee it will be fixed directly! Please be careful when testing on servers in production or containing important data!
+:::
+
+Run the following commands as root:
+
+```bash
+# Collecting system data
+ARCH=$(arch)
+case $(arch) in x86_64) ARCH="amd64" ;; aarch64) ARCH="arm64" ;; esac
+codename="$(lsb_release -s -c)"
+apt="/etc/apt/sources.list.d"
+
+# Add the beta repo to hestia.list
+sed -i 's/^/#/' $apt/hestia.list
+echo "deb [arch=$ARCH signed-by=/usr/share/keyrings/hestia-beta-keyring.gpg] https://beta-apt.hestiacp.com/ $codename main" >> $apt/hestia.list
+curl -s "https://beta-apt.hestiacp.com/pubkey.gpg" | gpg --dearmor | tee /usr/share/keyrings/hestia-beta-keyring.gpg > /dev/null 2>&1
+
+# Update to the beta version
+apt update && apt upgrade
+```
+
+## Disabling the beta repo
+
+Edit `/etc/apt/sources.list.d/hestia.list` and remove the `#` in front of `apt.hestiacp.com`, and add a `#` in front of `beta-apt.hestiacp.com`.
+
+Once that’s done, run `apt update && apt upgrade` to rollback to the regular release.
+
+## Reporting bugs
+
+If you encounter a bug, please [open an issue](https://github.com/hestiacp/hestiacp/issues/new/choose) or [submit a Pull Request](https://github.com/hestiacp/hestiacp/pulls). You can also report it on our forum or our Discord server

+ 3 - 0
docs/docs/contributing/translations.md

@@ -0,0 +1,3 @@
+# Contributing to Hestia’s translations
+
+If you are a non-English speaker and would like to improve the quality of the translations used in Hestia’s web interface, please go to [Hestia Translate](https://translate.hestiacp.com/projects/) to review the translations database. For more information, please read [How to contribute with Translations](https://forum.hestiacp.com/t/how-to-contribute-with-translations/1664) on our forum.

+ 15 - 0
docs/docs/introduction/best-practices.md

@@ -0,0 +1,15 @@
+# Best Practices
+
+Managing a server is not easy. Here are a couple of best practices you should try to adhere to while managing your Hestia server.
+
+## Use a regular user
+
+::: danger Never run a web or mail domain with the **admin** user
+By default, the **admin** user has elevated privileges. This can pose a **security threat** to your server. For example, if you run WordPress under your **admin** user and a vulnerability is found in WordPress or a plugin, a malicious user might be able to run commands as **root**!
+:::
+
+Before adding any web or mail domain on your server, you should create a regular user. To do this, you can refer to our [User Management Guide](../user-guide/users.md#adding-a-user).
+
+## Enable two-factor authentication (2FA) for the _admin_ user
+
+Since the **admin** user has full control on the server, as well as elevated privileges, it is **greatly** recommended that you enable 2FA on this account. To do this, you can refer to our [Account Management](../user-guide/account.md#two-factor-authentication-2fa).

+ 114 - 0
docs/docs/introduction/getting-started.md

@@ -0,0 +1,114 @@
+# Getting Started
+
+This section will help you get Hestia installed on your server. If you already have Hestia installed and are just looking for options, you can skip this page.
+
+::: warning
+The installer needs to be run as **root**, either directly from the terminal or remotely, using SSH. If you do not do this, the installer will not proceed.
+:::
+
+## Requirements
+
+::: warning
+Hestia must be installed on top of a fresh operating system installation to ensure proper functionality.
+:::
+
+|                      | Minimum                                           | Recommended                          |
+| -------------------- | ------------------------------------------------- | ------------------------------------ |
+| **CPU**              | 1 core, 64-bit                                    | 4 cores                              |
+| **Memory**           | 1 GB (no SpamAssassin and ClamAV)                 | 4 GB                                 |
+| **Disk**             | 10 GB HDD                                         | 40 GB SSD                            |
+| **Operating System** | Debian 10, 11 <br> Ubuntu 18.04, 20.04, 22.04 LTS | Latest Debian <br> Latest Ubuntu LTS |
+
+::: warning
+Hestia only runs on AMD64 / x86_64 and ARM64 / AArch64 processors. It also requires a 64bit operating system!
+We currently do not support i386 or ARM7-based processors.
+:::
+
+### Supported operating systems
+
+- Debian 10 or 11
+- Ubuntu 18.04, 20.04 or 22.04
+
+::: warning
+Hestia does not support non-LTS Operating systems. If you install it on, for example, Ubuntu 21.10, you will not receive support from us.
+:::
+
+## Regular installation
+
+Interactive installer that will install the default Hestia software configuration.
+
+```bash
+wget -qO - https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh | bash
+```
+
+## Custom installation
+
+If you want to customise which software gets installed, or want to run an unattended installation, you will need to run a custom installation.
+
+### List of installation options
+
+::: tip
+An easier way to choose your installation options is by using the [Install string generator](https://gabizz.github.io/hestiacp-scriptline-generator/) by [Gabriel Claudiu Maftei](https://github.com/gabizz/).
+:::
+
+To choose what software gets installed, you can provide flags to the installation script. You can view the full list of options below.
+
+```bash
+-a, --apache Install Apache [yes | no] default: yes
+-w, --phpfpm Install PHP-FPM [yes | no] default: yes
+-o, --multiphp Install Multi-PHP [yes | no] default: no
+-v, --vsftpd Install Vsftpd [yes | no] default: yes
+-j, --proftpd Install ProFTPD [yes | no] default: no
+-k, --named Install Bind [yes | no] default: yes
+-m, --mysql Install MariaDB [yes | no] default: yes
+-g, --postgresql Install PostgreSQL [yes | no] default: no
+-x, --exim Install Exim [yes | no] default: yes
+-z, --dovecot Install Dovecot [yes | no] default: yes
+-Z, --sieve Install Sieve [yes | no] default: no
+-c, --clamav Install ClamAV [yes | no] default: yes
+-t, --spamassassin Install SpamAssassin [yes | no] default: yes
+-i, --iptables Install Iptables [yes | no] default: yes
+-b, --fail2ban Install Fail2ban [yes | no] default: yes
+-q, --quota Filesystem Quota [yes | no] default: no
+-d, --api Activate API [yes | no] default: yes
+-r, --port Change Backend Port default: 8083
+-l, --lang Default language default: en
+-y, --interactive Interactive install [yes | no] default: yes
+-s, --hostname Set hostname
+-e, --email Set admin email
+-p, --password Set admin password
+-D, --with-debs Path to Hestia debs
+-f, --force Force installation
+-h, --help Print this help
+```
+
+#### Example
+
+```bash
+wget -qO - https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh | bash -s -- \
+	--interactive no \
+	--hostname host.domain.tld \
+	--email email@domain.tld \
+	--password p4ssw0rd \
+	--lang fr \
+	--apache no \
+	--named no \
+	--clamav no \
+	--spamassassin no
+```
+
+This command will install Hestia in French with the following software:
+
+- Nginx Web Server
+- PHP-FPM Application Server
+- MariaDB Database Server
+- IPtables Firewall + Fail2Ban Intrusion prevention software
+- Vsftpd FTP Server
+- Exim Mail Server
+- Dovecot POP3/IMAP Server
+
+## What’s next?
+
+By now, you should have a Hestia installation on your server. You are be ready to add new users, so that you (or they) can add new websites on your server.
+
+To access your control panel, navigate to `https://host.domain.tld:8083` or `http://your.public.ip.address:8083`

+ 36 - 0
docs/docs/reference/api.md

@@ -0,0 +1,36 @@
+# API
+
+::: info
+This page is work in progress. A lot of information will be missing.
+:::
+
+## Examples
+
+Examples can be found in a separate [repo](https://github.com/hestiacp/hestiacp-api-examples).
+
+## Upgrading from username/password authentication to access/secret keys
+
+Replace the following code:
+
+```php
+// Prepare POST query
+$postvars = [
+	"user" => $hst_username,
+	"password" => $hst_password,
+	"returncode" => $hst_returncode,
+	"cmd" => $hst_command,
+	"arg1" => $username,
+];
+```
+
+With the following:
+
+```php
+// Prepare POST query
+$postvars = [
+	"hash" => "access_code:secret_code",
+	"returncode" => $hst_returncode,
+	"cmd" => $hst_command,
+	"arg1" => $username,
+];
+```

+ 6179 - 0
docs/docs/reference/cli.md

@@ -0,0 +1,6179 @@
+# CLI Reference
+
+::: info
+This page is work in progress. Information might be missing or misleading.
+:::
+
+## v-acknowledge-user-notification
+
+update user notification
+
+**Options**: `USER` `NOTIFICATION`
+
+This function updates user notification.
+
+## v-add-access-key
+
+generate access key
+
+**Options**: `USER` `[PERMISSIONS]` `[COMMENT]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-add-access-key admin v-purge-nginx-cache,v-list-mail-accounts comment json
+```
+
+The "PERMISSIONS" argument is optional for the admin user only.
+This function creates a key file in $HESTIA/data/access-keys/
+
+## v-add-backup-host
+
+add backup host
+
+**Options**: `TYPE` `HOST` `USERNAME` `PASSWORD` `[PATH]` `[PORT]`
+
+**Examples**:
+
+```bash
+v-add-backup-host sftp backup.acme.com admin p4$$w@Rd
+v-add-backup-host b2 bucketName keyID applicationKey
+```
+
+Add a new remote backup location. Currently SFTP, FTP and Backblaze are supported
+
+## v-add-cron-hestia-autoupdate
+
+add cron job for hestia automatic updates
+
+**Options**: `MODE`
+
+This function adds a cronjob for hestia automatic updates
+that can be downloaded from apt or git.
+
+## v-add-cron-job
+
+add cron job
+
+**Options**: `USER` `MIN` `HOUR` `DAY` `MONTH` `WDAY` `COMMAND` `[JOB]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-cron-job admin * * * * * sudo /usr/local/hestia/bin/v-backup-users
+```
+
+This function adds a job to cron daemon. When executing commands, any output
+is mailed to user's email if parameter REPORTS is set to 'yes'.
+
+## v-add-cron-letsencrypt-job
+
+add cron job for Let's Encrypt certificates
+
+**Options**: –
+
+This function adds a new cron job for Let's Encrypt.
+
+## v-add-cron-reports
+
+add cron reports
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-add-cron-reports admin
+```
+
+This function for enabling reports on cron tasks and administrative
+notifications.
+
+## v-add-cron-restart-job
+
+add cron reports
+
+**Options**: –
+
+This function for enabling restart cron tasks
+
+## v-add-database
+
+add database
+
+**Options**: `USER` `DATABASE` `DBUSER` `DBPASS` `[TYPE]` `[HOST]` `[CHARSET]`
+
+**Examples**:
+
+```bash
+v-add-database admin wordpress_db matt qwerty123
+```
+
+This function creates the database concatenating username and user_db.
+Supported types of databases you can get using v-list-sys-config script.
+If the host isn't stated and there are few hosts configured on the server,
+then the host will be defined by one of three algorithms. "First" will choose
+the first host in the list. "Random" will chose the host by a chance.
+"Weight" will distribute new database through hosts evenly. Algorithm and
+types of supported databases is designated in the main configuration file.
+
+## v-add-database-host
+
+add new database server
+
+**Options**: `TYPE` `HOST` `DBUSER` `DBPASS` `[MAX_DB]` `[CHARSETS]` `[TEMPLATE]` `[PORT]`
+
+**Examples**:
+
+```bash
+v-add-database-host mysql localhost alice p@$$wOrd
+```
+
+This function add new database server to the server pool. It supports local
+and remote database servers, which is useful for clusters. By adding a host
+you can set limit for number of databases on a host. Template parameter is
+used only for PostgreSQL and has an default value "template1". You can read
+more about templates in official PostgreSQL documentation.
+
+## v-add-database-temp-user
+
+add temp database user
+
+**Options**: `USER` `DATABASE` `[TYPE]` `[HOST]` `[TTL]`
+
+**Examples**:
+
+```bash
+v-add-database-temp-user wordress wordpress_db mysql
+```
+
+This function creates an temporary database user mysql_sso_db_XXXXXXXX and a random password
+The user has an limited validity and only granted access to the specific database
+Returns json to be read SSO Script
+
+## v-add-dns-domain
+
+add dns domain
+
+**Options**: `USER` `DOMAIN` `IP` `[NS1]` `[NS2]` `[NS3]` `[NS4]` `[NS5]` `[NS6]` `[NS7]` `[NS8]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-dns-domain admin example.com ns1.example.com ns2.example.com '' '' '' '' '' '' yes
+```
+
+This function adds DNS zone with records defined in the template. If the exp
+argument isn't stated, the expiration date value will be set to next year.
+The soa argument is responsible for the relevant record. By default the first
+user's NS server is used. TTL is set as common for the zone and for all of
+its records with a default value of 14400 seconds.
+
+## v-add-dns-on-web-alias
+
+add dns domain or dns record after web domain alias
+
+**Options**: `USER` `ALIAS` `IP` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-dns-on-web-alias admin www.example.com 8.8.8.8
+```
+
+This function adds dns domain or dns record based on web domain alias.
+
+## v-add-dns-record
+
+add dns record
+
+**Options**: `USER` `DOMAIN` `RECORD` `TYPE` `VALUE` `[PRIORITY]` `[ID]` `[RESTART]` `[TTL]`
+
+**Examples**:
+
+```bash
+v-add-dns-record admin acme.com www A 162.227.73.112
+```
+
+This function is used to add a new DNS record. Complex records of TXT, MX and
+SRV types can be used by a filling in the 'value' argument. This function also
+gets an ID parameter for definition of certain record identifiers or for the
+regulation of records.
+
+## v-add-domain
+
+add web/dns/mail domain
+
+**Options**: `USER` `DOMAIN` `[IP]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-domain admin example.com
+```
+
+This function adds web/dns/mail domain to a server.
+
+## v-add-fastcgi-cache
+
+Enable FastCGI cache for nginx
+
+**Options**: `USER` `DOMAIN` `[DURATION]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-fastcgi-cache user domain.tld 30m
+```
+
+This function enables FastCGI cache for nginx
+Acceptable values for duration is time in seconds (10s) minutes (10m) or days (10d)
+Add "yes" as last parameter to restart nginx
+
+## v-add-firewall-ban
+
+add firewall blocking rule
+
+**Options**: `IP` `CHAIN`
+
+**Examples**:
+
+```bash
+v-add-firewall-ban 37.120.129.20 MAIL
+```
+
+This function adds new blocking rule to system firewall
+
+## v-add-firewall-chain
+
+add firewall chain
+
+**Options**: `CHAIN` `[PORT]` `[PROTOCOL]` `[PROTOCOL]`
+
+**Examples**:
+
+```bash
+v-add-firewall-chain CRM 5678 TCP
+```
+
+This function adds new rule to system firewall
+
+## v-add-firewall-ipset
+
+add firewall ipset
+
+**Options**: `NAME` `[SOURCE]` `[IPVERSION]` `[AUTOUPDATE]` `[FORCE]`
+
+**Examples**:
+
+```bash
+v-add-firewall-ipset country-nl 'http://ipverse.net/ipblocks/data/countries/nl.zone'
+```
+
+This function adds new ipset to system firewall
+
+## v-add-firewall-rule
+
+add firewall rule
+
+**Options**: `ACTION` `IP` `PORT` `[PROTOCOL]` `[COMMENT]` `[RULE]`
+
+**Examples**:
+
+```bash
+v-add-firewall-rule DROP 185.137.111.77 25
+```
+
+This function adds new rule to system firewall
+
+## v-add-fs-archive
+
+archive directory
+
+**Options**: `USER` `ARCHIVE` `SOURCE` `[SOURCE...]`
+
+**Examples**:
+
+```bash
+v-add-fs-archive admin archive.tar readme.txt
+```
+
+This function creates tar archive
+
+## v-add-fs-directory
+
+add directory
+
+**Options**: `USER` `DIRECTORY`
+
+**Examples**:
+
+```bash
+v-add-fs-directory admin mybar
+```
+
+This function creates new directory on the file system
+
+## v-add-fs-file
+
+add file
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-add-fs-file admin readme.md
+```
+
+This function creates new files on file system
+
+## v-add-letsencrypt-domain
+
+check letsencrypt domain
+
+**Options**: `USER` `DOMAIN` `[ALIASES]` `[MAIL]`
+
+**Examples**:
+
+```bash
+v-add-letsencrypt-domain admin wonderland.com www.wonderland.com,demo.wonderland.com
+example: v-add-letsencrypt-domain admin wonderland.com '' yes
+```
+
+This function check and validates domain with Let's Encrypt
+
+## v-add-letsencrypt-host
+
+add letsencrypt for host and backend
+
+**Options**: –
+
+This function check and validates the backend certificate and generate
+a new let's encrypt certificate.
+
+## v-add-letsencrypt-user
+
+register letsencrypt user account
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-add-letsencrypt-user bob
+```
+
+This function creates and register LetsEncrypt account
+
+## v-add-mail-account
+
+add mail domain account
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `PASSWORD` `[QUOTA]`
+
+**Examples**:
+
+```bash
+v-add-mail-account user example.com john P4$$vvOrD
+```
+
+This function add new email account.
+
+## v-add-mail-account-alias
+
+add mail account alias aka nickname
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `ALIAS`
+
+**Examples**:
+
+```bash
+v-add-mail-account-alias admin acme.com alice alicia
+```
+
+This function add new email alias.
+
+## v-add-mail-account-autoreply
+
+add mail account autoreply message
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `MESSAGE`
+
+**Examples**:
+
+```bash
+v-add-mail-account-autoreply admin example.com user Hello from e-mail!
+```
+
+This function add new email account.
+
+## v-add-mail-account-forward
+
+add mail account forward address
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `FORWARD`
+
+**Examples**:
+
+```bash
+v-add-mail-account-forward admin acme.com alice bob
+```
+
+This function add new email account.
+
+## v-add-mail-account-fwd-only
+
+add mail account forward-only flag
+
+**Options**: `USER` `DOMAIN` `ACCOUNT`
+
+**Examples**:
+
+```bash
+v-add-mail-account-fwd-only admin example.com user
+```
+
+This function adds fwd-only flag
+
+## v-add-mail-domain
+
+add mail domain
+
+**Options**: `USER` `DOMAIN` `[ANTISPAM]` `[ANTIVIRUS]` `[DKIM]` `[DKIM_SIZE]` `[RESTART]` `[REJECT_SPAM]`
+
+**Examples**:
+
+```bash
+v-add-mail-domain admin mydomain.tld
+```
+
+This function adds MAIL domain.
+
+## v-add-mail-domain-antispam
+
+add mail domain antispam support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-antispam admin mydomain.tld
+```
+
+This function enables spamassasin for incoming emails.
+
+## v-add-mail-domain-antivirus
+
+add mail domain antivirus support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-antivirus admin mydomain.tld
+```
+
+This function enables clamav scan for incoming emails.
+
+## v-add-mail-domain-catchall
+
+add mail domain catchall account
+
+**Options**: `USER` `DOMAIN` `EMAIL`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-catchall admin example.com master@example.com
+```
+
+This function enables catchall account for incoming emails.
+
+## v-add-mail-domain-dkim
+
+add mail domain dkim support
+
+**Options**: `USER` `DOMAIN` `[DKIM_SIZE]`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-dkim admin acme.com
+```
+
+This function adds DKIM signature to outgoing domain emails.
+
+## v-add-mail-domain-reject
+
+add mail domain reject spam
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-antivirus admin mydomain.tld
+```
+
+The function enables clamav scan for incoming emails.
+
+## v-add-mail-domain-smtp-relay
+
+Add mail domain smtp relay support
+
+**Options**: `USER` `DOMAIN` `HOST` `[USERNAME]` `[PASSWORD]` `[PORT]`
+
+**Examples**:
+
+```bash
+v-add-mail-domain-smtp-relay user domain.tld srv.smtprelay.tld uname123 pass12345
+```
+
+This function adds mail domain smtp relay support.
+
+## v-add-mail-domain-ssl
+
+add mail SSL for $domain
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[RESTART]`
+
+This function turns on SSL support for a mail domain. Parameter ssl_dir
+is a path to a directory where 2 or 3 ssl files can be found. Certificate file
+mail.domain.tld.crt and its key mail.domain.tld.key are mandatory. Certificate
+authority mail.domain.tld.ca file is optional.
+
+## v-add-mail-domain-webmail
+
+add webmail support for a domain
+
+**Options**: `USER` `DOMAIN` `[WEBMAIL]` `[RESTART]` `[QUIET]`
+
+**Examples**:
+
+```bash
+v-add-sys-webmail user domain.com
+example: v-add-sys-webmail user domain.com rainloop
+example: v-add-sys-webmail user domain.com roundcube
+```
+
+This function enables webmail client for a mail domain.
+
+## v-add-remote-dns-domain
+
+add remote dns domain
+
+**Options**: `USER` `DOMAIN` `[FLUSH]`
+
+**Examples**:
+
+```bash
+v-add-remote-dns-domain admin mydomain.tld yes
+```
+
+This function synchronise dns domain with the remote server.
+
+## v-add-remote-dns-host
+
+add new remote dns host
+
+**Options**: `HOST` `PORT` `USER` `PASSWORD` `[TYPE]` `[DNS_USER]`
+
+**Examples**:
+
+```bash
+v-add-remote-dns-host slave.your_host.com 8083 admin your_passw0rd
+v-add-remote-dns-host slave.your_host.com 8083 api_key ''
+```
+
+This function adds remote dns server to the dns cluster.
+As alternative api_key generated on the slave server.
+See v-generate-api-key can be used to connect the remote dns server
+
+## v-add-remote-dns-record
+
+add remote dns domain record
+
+**Options**: `USER` `DOMAIN` `ID`
+
+**Examples**:
+
+```bash
+v-add-remote-dns-record bob acme.com 23
+```
+
+This function synchronise dns domain with the remote server.
+
+## v-add-sys-api-ip
+
+add IP address to API allow list
+
+**Options**: `IP`
+
+**Examples**:
+
+```bash
+v-add-sys-api-ip 1.1.1.1
+```
+
+## v-add-sys-dependencies
+
+**Options**:
+
+Add php dependencies to Hestia
+options: [MODE]
+
+## v-add-sys-filemanager
+
+add file manager functionality to Hestia Control Panel
+
+**Options**: `[MODE]`
+
+This function installs the File Manager on the server
+for access through the Web interface.
+
+## v-add-sys-firewall
+
+add system firewall
+
+**Options**: –
+
+This function enables the system firewall.
+
+## v-add-sys-ip
+
+add system ip address
+
+**Options**: `IP` `NETMASK` `[INTERFACE]` `[USER]` `[IP_STATUS]` `[IP_NAME]` `[NAT_IP]`
+
+**Examples**:
+
+```bash
+v-add-sys-ip 216.239.32.21 255.255.255.0
+```
+
+This function adds ip address into a system. It also creates rc scripts. You
+can specify ip name which will be used as root domain for temporary aliases.
+For example, if you set a1.myhosting.com as name, each new domain created on
+this ip will automatically receive alias $domain.a1.myhosting.com. Of course
+you must have wildcard record \*.a1.myhosting.com pointed to ip. This feature
+is very handy when customer wants to test domain before dns migration.
+
+## v-add-sys-pma-sso
+
+enables support for single sign on phpMyAdmin
+
+**Options**: `[MODE]`
+
+This function enables support for SSO to phpMyAdmin
+
+## v-add-sys-quota
+
+add system quota
+
+**Options**: –
+
+This function enables filesystem quota on /home partition
+Some kernels do require additional packages to be installed first
+
+## v-add-sys-rainloop
+
+Install Rainloop webmail client
+
+**Options**: `[MODE]`
+
+This function installs the Rainloop webmail client.
+
+## v-add-sys-roundcube
+
+Install Roundcube webmail client
+
+**Options**: `[MODE]`
+
+This function installs the Roundcube webmail client.
+
+## v-add-sys-sftp-jail
+
+add system sftp jail
+
+**Options**: `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-sys-sftp-jail yes
+```
+
+This function enables sftp jailed environment.
+
+## v-add-sys-smtp
+
+Add SMTP Account for logging, notification and internal mail
+
+**Options**: `DOMAIN` `PORT` `SMTP_SECURITY` `USERNAME` `PASSWORD` `EMAIL`
+
+**Examples**:
+
+```bash
+v-add-sys-smtp example.com 587 STARTTLS test@domain.com securepassword test@example.com
+```
+
+This function allows configuring a SMTP account for the server to use
+for logging, notification and warn emails etc.
+
+## v-add-sys-smtp-relay
+
+add system wide smtp relay support
+
+**Options**: `HOST` `[USERNAME]` `[PASSWORD]` `[PORT]`
+
+**Examples**:
+
+```bash
+v-add-sys-smtp-relay srv.smtprelay.tld uname123 pass12345
+```
+
+This function adds system wide smtp relay support.
+
+## v-add-user
+
+add system user
+
+**Options**: `USER` `PASSWORD` `EMAIL` `[PACKAGE]` `[NAME]` `[LASTNAME]`
+
+**Examples**:
+
+```bash
+v-add-user admin2 P4$$w@rD bgates@aol.com
+```
+
+This function creates new user account.
+
+## v-add-user-2fa
+
+add 2fa to existing user
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-add-user-2fa admin
+```
+
+This function creates a new 2fa token for user.
+
+## v-add-user-composer
+
+add composer (php dependency manager) for a user
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-add-user-composer user [version]
+```
+
+This function adds support for composer (php dependency manager)
+Homepage: https://getcomposer.org/
+
+## v-add-user-notification
+
+add user notification
+
+**Options**: `USER` `TOPIC` `NOTICE` `[TYPE]`
+
+This function adds a new user notification to the panel.
+
+## v-add-user-package
+
+adding user package
+
+**Options**: `TMPFILE` `PACKAGE` `[REWRITE]`
+
+This function adds new user package to the system.
+
+## v-add-user-sftp-jail
+
+add user sftp jail
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-user-sftp-jail admin
+```
+
+This function enables sftp jailed environment
+
+## v-add-user-sftp-key
+
+add user sftp key
+
+**Options**: `USER` `[TTL]`
+
+This function creates and updates SSH keys for used with the File Manager.
+
+## v-add-user-ssh-key
+
+add ssh key
+
+**Options**: `USER` `KEY`
+
+**Examples**:
+
+```bash
+v-add-user-ssh-key user 'valid ssh key'
+```
+
+Function check if $user/.ssh/authorized_keys exists and create it.
+After that it append the new key(s)
+
+## v-add-user-wp-cli
+
+add wp-cli for a user
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-add-user-wp-cli user
+```
+
+This function adds support for wp-cli to the user account
+
+## v-add-web-domain
+
+add web domain
+
+**Options**: `USER` `DOMAIN` `[IP]` `[RESTART]` `[ALIASES]` `[PROXY_EXTENSIONS]`
+
+**Examples**:
+
+```bash
+v-add-web-domain admin wonderland.com 192.18.22.43 yes www.wonderland.com
+```
+
+This function adds virtual host to a server. In cases when ip is
+undefined in the script, "default" template will be used. The alias of
+www.domain.tld type will be automatically assigned to the domain unless
+"none" is transmited as argument. If ip have associated dns name, this
+domain will also get the alias domain-tpl.$ipname. An alias with the ip
+name is useful during the site testing while dns isn't moved to server yet.
+
+## v-add-web-domain-alias
+
+add web domain alias
+
+**Options**: `USER` `DOMAIN` `ALIASES` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-alias admin acme.com www.acme.com yes
+```
+
+This function adds one or more aliases to a domain (it is also called
+"domain parking"). This function supports wildcards \*.domain.tpl.
+
+## v-add-web-domain-allow-users
+
+Allow other users create subdomains
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-add-web-domain-allow-users admin admin.com
+```
+
+Bypass the rule check for Enforce subdomain ownership for a specific domain.
+Enforce subdomain ownership setting in /edit/server/ set to no will always overwrite this behaviour
+eg: admin adds admin.com
+user can create user.admin.com
+
+## v-add-web-domain-backend
+
+add web domain backend
+
+**Options**: `USER` `DOMAIN` `[TEMPLATE]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-backend admin example.com default yes
+```
+
+This function is used to add the web backend configuration.
+
+## v-add-web-domain-ftp
+
+add ftp account for web domain.
+
+**Options**: `USER` `DOMAIN` `FTP_USER` `FTP_PASSWORD` `[FTP_PATH]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-ftp alice wonderland.com alice_ftp p4$$vvOrD
+```
+
+This function creates additional ftp account for web domain.
+
+## v-add-web-domain-httpauth
+
+add password protection for web domain
+
+**Options**: `USER` `DOMAIN` `AUTH_USER` `AUTH_PASSWORD` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-httpauth admin acme.com user02 super_pass
+```
+
+This function is used for securing web domain with http auth
+
+## v-add-web-domain-proxy
+
+add webdomain proxy support
+
+**Options**: `USER` `DOMAIN` `[TEMPLATE]` `[EXTENTIONS]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-proxy admin example.com
+```
+
+This function enables proxy support for a domain. This can significantly
+improve website speed.
+
+## v-add-web-domain-redirect
+
+Adding force redirect to domain
+
+**Options**: `USER` `DOMAIN` `REDIRECT` `HTTPCODE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-redirect user domain.tld domain.tld
+example: v-add-web-domain-redirect user domain.tld www.domain.tld
+example: v-add-web-domain-redirect user domain.tld shop.domain.tld
+example: v-add-web-domain-redirect user domain.tld different-domain.com
+example: v-add-web-domain-redirect user domain.tld shop.different-domain.com
+example: v-add-web-domain-redirect user domain.tld different-domain.com 302
+```
+
+Function creates a forced redirect to a domain
+
+## v-add-web-domain-ssl
+
+adding ssl for domain
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[SSL_HOME]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-ssl admin example.com /home/admin/conf/example.com/web
+```
+
+This function turns on SSL support for a domain. Parameter ssl_dir is a path
+to directory where 2 or 3 ssl files can be found. Certificate file
+domain.tld.crt and its key domain.tld.key are mandatory. Certificate
+authority domain.tld.ca file is optional. If home directory parameter
+(ssl_home) is not set, https domain uses public_shtml as separate
+documentroot directory.
+
+## v-add-web-domain-ssl-force
+
+Adding force SSL for a domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[QUIET]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-ssl-force admin acme.com
+```
+
+This function forces SSL for the requested domain.
+
+## v-add-web-domain-ssl-hsts
+
+Adding hsts to a domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[QUIET]`
+
+This function enables HSTS for the requested domain.
+
+## v-add-web-domain-ssl-preset
+
+Adding force SSL for a domain
+
+**Options**: `USER` `DOMAIN` `[SSL]`
+
+Up on creating an web domain set the SSL Force values due to the delay of LE due to DNS propergation over DNS cluster
+When LE has been activated it will set the actions
+
+## v-add-web-domain-stats
+
+add log analyser to generate domain statistics
+
+**Options**: `USER` `DOMAIN` `TYPE`
+
+**Examples**:
+
+```bash
+v-add-web-domain-stats admin example.com awstats
+```
+
+This function is used for enabling log analyser system to a domain. For viewing
+the domain statistics use http://domain.tld/vstats/ link. Access this page
+is not protected by default. If you want to secure it with passwords you
+should use v-add-web-domain_stat_auth script.
+
+## v-add-web-domain-stats-user
+
+add password protection to web domain statistics
+
+**Options**: `USER` `DOMAIN` `STATS_USER` `STATS_PASSWORD` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-stats-user admin example.com watchdog your_password
+```
+
+This function is used for securing the web statistics page.
+
+## v-add-web-php
+
+add php fpm version
+
+**Options**: `VERSION`
+
+**Examples**:
+
+```bash
+v-add-web-php 8.0
+```
+
+This function checks and delete a fpm php version if not used by any domain.
+
+## v-backup-user
+
+backup system user with all its objects
+
+**Options**: `USER` `NOTIFY`
+
+**Examples**:
+
+```bash
+v-backup-user admin yes
+```
+
+This function is used for backing up user with all its domains and databases.
+
+## v-backup-users
+
+backup all users
+
+**Options**: –
+
+This function backups all system users.
+
+## v-change-cron-job
+
+change cron job
+
+**Options**: `USER` `JOB` `MIN` `HOUR` `DAY` `MONTH` `WDAY` `COMMAND`
+
+**Examples**:
+
+```bash
+v-change-cron-job admin 7 * * * * * * /usr/bin/uptime
+```
+
+This function is used for changing existing job. It fully replace job
+parameters with new one but with same id.
+
+## v-change-database-host-password
+
+change database server password
+
+**Options**: `TYPE` `HOST` `USER` `PASSWORD`
+
+**Examples**:
+
+```bash
+v-change-database-host-password mysql localhost wp_user pA$$w@rD
+```
+
+This function changes database server password.
+
+## v-change-database-owner
+
+change database owner
+
+**Options**: `DATABASE` `USER`
+
+**Examples**:
+
+```bash
+v-change-database-owner mydb alice
+```
+
+This function for changing database owner.
+
+## v-change-database-password
+
+change database password
+
+**Options**: `USER` `DATABASE` `DBPASS`
+
+**Examples**:
+
+```bash
+v-change-database-password admin wp_db neW_pAssWorD
+```
+
+This function for changing database user password to a database. It uses the
+full name of database as argument.
+
+## v-change-database-user
+
+change database username
+
+**Options**: `USER` `DATABASE` `DBUSER` `[DBPASS]`
+
+**Examples**:
+
+```bash
+v-change-database-user admin my_db joe_user
+```
+
+This function for changing database user. It uses the
+
+## v-change-dns-domain-dnssec
+
+change dns domain dnssec status
+
+**Options**: `USER` `DOMAIN` `STATUS`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-status admin domain.pp.ua yes
+```
+
+## v-change-dns-domain-exp
+
+change dns domain expiration date
+
+**Options**: `USER` `DOMAIN` `EXP`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-exp admin domain.pp.ua 2020-11-20
+```
+
+This function of changing the term of expiration domain's registration. The
+serial number will be refreshed automatically during update.
+
+## v-change-dns-domain-ip
+
+change dns domain ip address
+
+**Options**: `USER` `DOMAIN` `IP` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-ip admin domain.com 123.212.111.222
+```
+
+This function for changing the main ip of DNS zone.
+
+## v-change-dns-domain-soa
+
+change dns domain soa record
+
+**Options**: `USER` `DOMAIN` `SOA` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-soa admin acme.com d.ns.domain.tld
+```
+
+This function for changing SOA record. This type of records can not be
+modified by v-change-dns-record call.
+
+## v-change-dns-domain-tpl
+
+change dns domain template
+
+**Options**: `USER` `DOMAIN` `TEMPLATE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-tpl admin example.com child-ns yes
+```
+
+This function for changing the template of records. By updating old records
+will be removed and new records will be generated in accordance with
+parameters of new template.
+
+## v-change-dns-domain-ttl
+
+change dns domain ttl
+
+**Options**: `USER` `DOMAIN` `TTL` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-dns-domain-ttl alice example.com 14400
+```
+
+This function for changing the time to live TTL parameter for all records.
+
+## v-change-dns-record
+
+change dns domain record
+
+**Options**: `USER` `DOMAIN` `ID` `RECORD` `TYPE` `VALUE` `[PRIORITY]` `[RESTART]` `[TTL]`
+
+**Examples**:
+
+```bash
+v-change-dns-record admin domain.ua 42 192.18.22.43
+```
+
+This function for changing DNS record.
+
+## v-change-dns-record-id
+
+change dns domain record id
+
+**Options**: `USER` `DOMAIN` `ID` `NEWID` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-dns-record-id admin acme.com 24 42 yes
+```
+
+This function for changing internal record id.
+
+## v-change-domain-owner
+
+change domain owner
+
+**Options**: `DOMAIN` `USER`
+
+**Examples**:
+
+```bash
+v-change-domain-owner www.example.com bob
+```
+
+This function of changing domain ownership.
+
+## v-change-firewall-rule
+
+change firewall rule
+
+**Options**: `RULE` `ACTION` `IP` `PORT` `[PROTOCOL]` `[COMMENT]`
+
+**Examples**:
+
+```bash
+v-change-firewall-rule 3 ACCEPT 5.188.123.17 443
+```
+
+This function is used for changing existing firewall rule.
+It fully replace rule with new one but keeps same id.
+
+## v-change-fs-file-permission
+
+change file permission
+
+**Options**: `USER` `FILE` `PERMISSIONS`
+
+**Examples**:
+
+```bash
+v-change-fs-file-permission admin readme.txt 0777
+```
+
+This function changes file access permissions on the file system
+
+## v-change-mail-account-password
+
+change mail account password
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `PASSWORD`
+
+**Examples**:
+
+```bash
+v-change-mail-account-password admin mydomain.tld user p4$$vvOrD
+```
+
+This function changes email account password.
+
+## v-change-mail-account-quota
+
+change mail account quota
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `QUOTA`
+
+**Examples**:
+
+```bash
+v-change-mail-account-quota admin mydomain.tld user01 unlimited
+```
+
+This function changes email account disk quota.
+
+## v-change-mail-account-rate-limit
+
+change mail domain rate limit
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `RATE`
+
+**Examples**:
+
+```bash
+v-change-mail-domain-quota admin mydomain.tld user01 100
+```
+
+This function changes email account rate limit. Use system to use domain or "server" setting
+
+## v-change-mail-domain-catchall
+
+change mail domain catchall email
+
+**Options**: `USER` `DOMAIN` `EMAIL`
+
+**Examples**:
+
+```bash
+v-change-mail-domain-catchall user01 mydomain.tld master@mydomain.tld
+```
+
+This function changes mail domain catchall.
+
+## v-change-mail-domain-rate-limit
+
+change mail account rate limit
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `RATE`
+
+**Examples**:
+
+```bash
+v-change-mail-account-quota admin mydomain.tld user01 100
+```
+
+This function changes email account rate limit for the domain. account specific setting will overwrite domain setting!
+
+## v-change-mail-domain-sslcert
+
+change domain ssl certificate
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[RESTART]`
+
+This function changes SSL domain certificate and the key. If ca file present
+it will be replaced as well.
+
+## v-change-remote-dns-domain-exp
+
+change remote dns domain expiration date
+
+**Options**: `USER` `DOMAIN`
+
+This function synchronise dns domain with the remote server.
+
+## v-change-remote-dns-domain-soa
+
+change remote dns domain SOA
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-change-remote-dns-domain-soa admin example.org.uk
+```
+
+This function synchronise dns domain with the remote server.
+
+## v-change-remote-dns-domain-ttl
+
+change remote dns domain TTL
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-change-remote-dns-domain-ttl admin domain.tld
+```
+
+This function synchronise dns domain with the remote server.
+
+## v-change-sys-api
+
+Enable / Disable API access
+
+**Options**: `STATUS`
+
+**Examples**:
+
+```bash
+v-change-sys-api enable legacy
+# Enable legacy api currently default on most of api based systems
+example: v-change-sys-api enable api
+# Enable api
+v-change-sys-api disable
+# Disable API
+```
+
+Enabled / Disable API
+
+## v-change-sys-config-value
+
+change sysconfig value
+
+**Options**: `KEY` `VALUE`
+
+**Examples**:
+
+```bash
+v-change-sys-config-value VERSION 1.0
+```
+
+This function is for changing main config settings such as COMPANY_NAME or
+COMPANY_EMAIL and so on.
+
+## v-change-sys-db-alias
+
+change phpmyadmin/phppgadmin alias url
+
+**Options**: `TYPE` `ALIAS`
+
+**Examples**:
+
+```bash
+v-change-sys-db-alias pma phpmyadmin
+# Sets phpMyAdmin alias to phpmyadmin
+v-change-sys-db-alias pga phppgadmin
+# Sets phpPgAdmin alias to phppgadmin
+```
+
+This function changes the database editor url in
+apache2 or nginx configuration.
+
+## v-change-sys-demo-mode
+
+enable or disable demo mode
+
+**Options**: `ACTIVE`
+
+This function will set the demo mode variable,
+which will prevent usage of certain v-scripts in the backend
+and prevent modification of objects in the control panel.
+It will also disable virtual hosts for Apache and NGINX
+for domains which have been created.
+
+## v-change-sys-hestia-ssl
+
+change hestia ssl certificate
+
+**Options**: `SSL_DIR` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-sys-hestia-ssl /home/new/dir/path yes
+```
+
+This function changes hestia SSL certificate and the key.
+
+## v-change-sys-hostname
+
+change hostname
+
+**Options**: `HOSTNAME`
+
+**Examples**:
+
+```bash
+v-change-sys-hostname mydomain.tld
+```
+
+This function for changing system hostname.
+
+## v-change-sys-ip-name
+
+change ip name
+
+**Options**: `IP` `NAME`
+
+**Examples**:
+
+```bash
+v-change-sys-ip-name 80.122.52.70 acme.com
+```
+
+This function for changing dns domain associated with ip.
+
+## v-change-sys-ip-nat
+
+change ip nat address
+
+**Options**: `IP` `NAT_IP` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-sys-ip-nat 185.209.50.140 10.110.104.205
+```
+
+This function for changing nat ip associated with ip.
+
+## v-change-sys-ip-owner
+
+change ip owner
+
+**Options**: `IP` `USER`
+
+**Examples**:
+
+```bash
+v-change-sys-ip-owner 91.198.136.14 admin
+```
+
+This function of changing ip address ownership.
+
+## v-change-sys-ip-status
+
+change ip status
+
+**Options**: `IP` `IP_STATUS`
+
+**Examples**:
+
+```bash
+v-change-sys-ip-status 91.198.136.14 yourstatus
+```
+
+This function of changing an ip address's status.
+
+## v-change-sys-language
+
+change sys language
+
+**Options**: `LANGUAGE` `[UPDATE_USERS]`
+
+**Examples**:
+
+```bash
+v-change-sys-language ru
+```
+
+This function for changing system language.
+
+## v-change-sys-php
+
+Change default php version server wide
+
+**Options**: `VERSION`
+
+**Examples**:
+
+```bash
+v-change-sys-php 8.0
+```
+
+## v-change-sys-port
+
+change system backend port
+
+**Options**: `PORT`
+
+**Examples**:
+
+```bash
+v-change-sys-port 5678
+```
+
+This function for changing the system backend port in NGINX configuration.
+
+## v-change-sys-release
+
+update web templates
+
+**Options**: `[RESTART]`
+
+This function for changing the release branch for the
+Hestia Control Panel. This allows the user to switch between
+stable and pre-release builds which will automaticlly update
+based on the appropriate release schedule if auto-update is
+turned on.
+
+## v-change-sys-service-config
+
+change service config
+
+**Options**: `CONFIG` `SERVICE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-sys-service-config /home/admin/dovecot.conf dovecot yes
+```
+
+This function for changing service confguration.
+
+## v-change-sys-timezone
+
+change system timezone
+
+**Options**: `TIMEZONE`
+
+**Examples**:
+
+```bash
+v-change-sys-timezone Europe/Berlin
+```
+
+This function for changing system timezone.
+
+## v-change-sys-webmail
+
+change webmail alias url
+
+**Options**: `WEBMAIL`
+
+**Examples**:
+
+```bash
+v-change-sys-webmail YourtrickyURLhere
+```
+
+This function changes the webmail url in apache2 or nginx configuration.
+
+## v-change-user-config-value
+
+changes user configuration value
+
+**Options**: `USER` `KEY` `VALUE`
+
+**Examples**:
+
+```bash
+v-change-user-config-value admin ROLE admin
+```
+
+Changes key/value for specified user.
+
+## v-change-user-contact
+
+change user contact email
+
+**Options**: `USER` `EMAIL`
+
+**Examples**:
+
+```bash
+v-change-user-contact admin admin@yahoo.com
+```
+
+This function for changing of e-mail associated with a certain user.
+
+## v-change-user-language
+
+change user language
+
+**Options**: `USER` `LANGUAGE`
+
+**Examples**:
+
+```bash
+v-change-user-language admin en
+```
+
+This function for changing language.
+
+## v-change-user-name
+
+change user full name
+
+**Options**: `USER` `NAME` `[LAST_NAME]`
+
+**Examples**:
+
+```bash
+v-change-user-name admin John Smith
+```
+
+This function allow to change user's full name.
+
+## v-change-user-ns
+
+change user name servers
+
+**Options**: `USER` `NS1` `NS2` `[NS3]` `[NS4]` `[NS5]` `[NS6]` `[NS7]` `[NS8]`
+
+**Examples**:
+
+```bash
+v-change-user-ns ns1.domain.tld ns2.domain.tld
+```
+
+This function for changing default name servers for specific user.
+
+## v-change-user-package
+
+change user package
+
+**Options**: `USER` `PACKAGE` `[FORCE]`
+
+**Examples**:
+
+```bash
+v-change-user-package admin yourpackage
+```
+
+This function changes user's hosting package.
+
+## v-change-user-password
+
+change user password
+
+**Options**: `USER` `PASSWORD`
+
+**Examples**:
+
+```bash
+v-change-user-password admin NewPassword123
+```
+
+This function changes user's password and updates RKEY value.
+
+## v-change-user-php-cli
+
+add php version alias to .bash_aliases
+
+**Options**: `USER` `VERSION`
+
+**Examples**:
+
+```bash
+v-change-user-php-cli user 7.4
+```
+
+add line to .bash_aliases to set default php command line
+version when multi-php is enabled.
+
+## v-change-user-rkey
+
+change user random key
+
+**Options**: `USER` `[HASH]`
+
+This function changes user's RKEY value thats has been used for security value to be used forgot password function only.
+
+## v-change-user-role
+
+updates user role
+
+**Options**: `USER` `ROLE`
+
+**Examples**:
+
+```bash
+v-change-user-role user administrator
+```
+
+Give/revoke user administrator rights to manage all accounts as admin
+
+## v-change-user-shell
+
+change user shell
+
+**Options**: `USER` `SHELL`
+
+**Examples**:
+
+```bash
+v-change-user-shell admin nologin
+```
+
+This function changes system shell of a user. Shell gives ability to use ssh.
+
+## v-change-user-sort-order
+
+updates user role
+
+**Options**: `USER` `SORT_ORDER`
+
+**Examples**:
+
+```bash
+v-change-user-sort-order user date
+```
+
+Changes web UI display sort order for specified user.
+
+## v-change-user-template
+
+change user default template
+
+**Options**: `USER` `TYPE` `TEMPLATE`
+
+**Examples**:
+
+```bash
+v-change-user-template admin WEB wordpress
+```
+
+This function changes default user web template.
+
+## v-change-user-theme
+
+updates user theme
+
+**Options**: `USER` `THEME`
+
+**Examples**:
+
+```bash
+v-change-user-theme admin dark
+example: v-change-user-theme peter vestia
+```
+
+Changes web UI display theme for specified user.
+
+## v-change-web-domain-backend-tpl
+
+change web domain backend template
+
+**Options**: `USER` `DOMAIN` `TEMPLATE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-backend-tpl admin acme.com PHP-7_4
+```
+
+This function changes backend template
+
+## v-change-web-domain-dirlist
+
+enable/disable directory listing
+
+**Options**: `USER` `DOMAIN` `MODE`
+
+**Examples**:
+
+```bash
+v-change-web-domain-dirlist user demo.com on
+```
+
+This function is used for changing the directory list mode.
+
+## v-change-web-domain-docroot
+
+Changes the document root for an existing web domain
+
+**Options**: `USER` `DOMAIN` `TARGET_DOMAIN` `[DIRECTORY]` `[PHP]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-docroot admin domain.tld otherdomain.tld
+# add custom docroot
+# points domain.tld to otherdomain.tld's document root.
+v-change-web-domain-docroot admin test.local default
+# remove custom docroot
+# returns document root to default value for domain.
+```
+
+This call changes the document root of a chosen web domain
+to another available domain under the user context.
+
+## v-change-web-domain-ftp-password
+
+change ftp user password.
+
+**Options**: `USER` `DOMAIN` `FTP_USER` `FTP_PASSWORD`
+
+**Examples**:
+
+```bash
+v-change-web-domain-ftp-password admin example.com ftp_usr ftp_qwerty
+```
+
+This function changes ftp user password.
+
+## v-change-web-domain-ftp-path
+
+change path for ftp user.
+
+**Options**: `USER` `DOMAIN` `FTP_USER` `FTP_PATH`
+
+**Examples**:
+
+```bash
+v-change-web-domain-ftp-path admin example.com /home/admin/example.com
+```
+
+This function changes ftp user path.
+
+## v-change-web-domain-httpauth
+
+change password for http auth user
+
+**Options**: `USER` `DOMAIN` `AUTH_USER` `AUTH_PASSWORD` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-httpauth admin acme.com alice white_rA$$bIt
+```
+
+This function is used for changing http auth user password
+
+## v-change-web-domain-ip
+
+change web domain ip
+
+**Options**: `USER` `DOMAIN` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-ip admin example.com 167.86.105.230 yes
+```
+
+This function is used for changing domain ip
+
+## v-change-web-domain-name
+
+change web domain name
+
+**Options**: `USER` `DOMAIN` `NEW_DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-name alice wonderland.com lookinglass.com yes
+```
+
+This function is used for changing the domain name.
+
+## v-change-web-domain-proxy-tpl
+
+change web domain proxy template
+
+**Options**: `USER` `DOMAIN` `TEMPLATE` `[EXTENTIONS]` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-proxy-tpl admin domain.tld hosting
+```
+
+This function changes proxy template
+
+## v-change-web-domain-sslcert
+
+change domain ssl certificate
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-sslcert admin example.com /home/admin/tmp
+```
+
+This function changes SSL domain certificate and the key. If ca file present
+it will be replaced as well.
+
+## v-change-web-domain-sslhome
+
+changing domain ssl home
+
+**Options**: `USER` `DOMAIN` `SSL_HOME` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-sslhome admin acme.com single
+example: v-change-web-domain-sslhome admin acme.com same
+```
+
+This function changes SSL home directory. Single will seperate the both public_html / public_shtml. Same will always point to public_shtml
+
+## v-change-web-domain-stats
+
+change web domain statistics
+
+**Options**: `USER` `DOMAIN` `TYPE`
+
+**Examples**:
+
+```bash
+v-change-web-domain-stats admin example.com awstats
+```
+
+This function of deleting site's system of statistics. Its type is
+automatically chooses from client's configuration file.
+
+## v-change-web-domain-tpl
+
+change web domain template
+
+**Options**: `USER` `DOMAIN` `TEMPLATE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-change-web-domain-tpl admin acme.com opencart
+```
+
+This function changes template of the web configuration file. The content
+of webdomain directories remains untouched.
+
+## v-check-access-key
+
+check access key
+
+**Options**: `ACCESS_KEY_ID` `SECRET_ACCESS_KEY` `COMMAND` `[IP]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-check-access-key key_id secret v-purge-nginx-cache 127.0.0.1 json
+```
+
+- Checks if the key exists;
+- Checks if the secret belongs to the key;
+- Checks if the key user is suspended;
+- Checks if the key has permission to run the command.
+
+## v-check-api-key
+
+check api key
+
+**Options**: `KEY` `[IP]`
+
+**Examples**:
+
+```bash
+v-check-api-key random_key 127.0.0.1
+```
+
+This function checks a key file in $HESTIA/data/keys/
+
+## v-check-fs-permission
+
+open file
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-check-fs-permission admin readme.txt
+```
+
+This function opens/reads files on the file system
+
+## v-check-mail-account-hash
+
+check user password
+
+**Options**: `TYPE` `PASSWORD` `HASH`
+
+**Examples**:
+
+```bash
+v-check-mail-account-hash ARGONID2 PASS HASH
+```
+
+This function verifies email account password hash
+
+## v-check-user-2fa
+
+check user token
+
+**Options**: `USER` `TOKEN`
+
+**Examples**:
+
+```bash
+v-check-user-2fa admin 493690
+```
+
+This function verifies user 2fa token.
+
+## v-check-user-hash
+
+check user hash
+
+**Options**: `USER` `HASH` `[IP]`
+
+**Examples**:
+
+```bash
+v-check-user-hash admin CN5JY6SMEyNGnyCuvmK5z4r7gtHAC4mRZ...
+```
+
+This function verifies user hash
+
+## v-check-user-password
+
+check user password
+
+**Options**: `USER` `PASSWORD` `[IP]` `[RETURN_HASH]`
+
+**Examples**:
+
+```bash
+v-check-user-password admin qwerty1234
+```
+
+This function verifies user password from file
+
+## v-copy-fs-directory
+
+copy directory
+
+**Options**: `USER` `SRC_DIRECTORY` `DST_DIRECTORY`
+
+**Examples**:
+
+```bash
+v-copy-fs-directory alice /home/alice/dir1 /home/bob/dir2
+```
+
+This function copies directory on the file system
+
+## v-copy-fs-file
+
+copy file
+
+**Options**: `USER` `SRC_FILE` `DST_FILE`
+
+**Examples**:
+
+```bash
+v-copy-fs-file admin readme.txt readme_new.txt
+```
+
+This function copies file on the file system
+
+## v-copy-user-package
+
+duplicate existing package
+
+**Options**: `PACKAGE` `NEW_PACKAGE`
+
+**Examples**:
+
+```bash
+v-copy-user-package default new
+```
+
+This function allows the user to duplicate an existing
+package file to facilitate easier configuration.
+
+## v-delete-access-key
+
+delete access key
+
+**Options**: `ACCESS_KEY_ID`
+
+**Examples**:
+
+```bash
+v-delete-access-key mykey
+```
+
+This function removes a key from in $HESTIA/data/access-keys/
+
+## v-delete-backup-host
+
+delete backup ftp server
+
+**Options**: `TYPE` `[HOST]`
+
+**Examples**:
+
+```bash
+v-delete-backup-host sftp
+```
+
+This function deletes ftp backup host
+
+## v-delete-cron-hestia-autoupdate
+
+delete hestia autoupdate cron job
+
+**Options**: –
+
+This function deletes hestia autoupdate cron job.
+
+## v-delete-cron-job
+
+delete cron job
+
+**Options**: `USER` `JOB`
+
+**Examples**:
+
+```bash
+v-delete-cron-job admin 9
+```
+
+This function deletes cron job.
+
+## v-delete-cron-reports
+
+delete cron reports
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-cron-reports admin
+```
+
+This function for disabling reports on cron tasks and administrative
+notifications.
+
+## v-delete-cron-restart-job
+
+delete restart job
+
+**Options**: –
+
+This function for disabling restart cron tasks
+
+## v-delete-database
+
+delete database
+
+**Options**: `USER` `DATABASE`
+
+**Examples**:
+
+```bash
+v-delete-database admin wp_db
+```
+
+This function for deleting the database. If database user have access to
+another database, he will not be deleted.
+
+## v-delete-database-host
+
+delete database server
+
+**Options**: `TYPE` `HOST`
+
+**Examples**:
+
+```bash
+v-delete-database-host pgsql localhost
+```
+
+This function for deleting the database host from hestia configuration. It will
+be deleted if there are no databases created on it only.
+
+## v-delete-database-temp-user
+
+deletes temp database user
+
+**Options**: `USER` `DBUSER` `[TYPE]` `[HOST]`
+
+**Examples**:
+
+```bash
+v-add-database-temp-user wordress hestia_sso_user mysql
+```
+
+Revokes "temp user" access to a database and removes the user
+To be used in combination with v-add-database-temp-user
+
+## v-delete-databases
+
+delete user databases
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-databases admin
+```
+
+This function deletes all user databases.
+
+## v-delete-dns-domain
+
+delete dns domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-dns-domain alice acme.com
+```
+
+This function for deleting DNS domain. By deleting it all records will also be
+deleted.
+
+## v-delete-dns-domains
+
+delete dns domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-dns-domains bob
+```
+
+This function for deleting all users DNS domains.
+
+## v-delete-dns-domains-src
+
+delete dns domains based on SRC field
+
+**Options**: `USER` `SRC` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-dns-domains-src admin '' yes
+```
+
+This function for deleting DNS domains related to a certain host.
+
+## v-delete-dns-on-web-alias
+
+delete dns domain or dns record based on web domain alias
+
+**Options**: `USER` `DOMAIN` `ALIAS` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-dns-on-web-alias admin example.com www.example.com
+```
+
+This function deletes dns domain or dns record based on web domain alias.
+
+## v-delete-dns-record
+
+delete dns record
+
+**Options**: `USER` `DOMAIN` `ID` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-dns-record bob acme.com 42 yes
+```
+
+This function for deleting a certain record of DNS zone.
+
+## v-delete-domain
+
+delete web/dns/mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-domain admin domain.tld
+```
+
+This function deletes web/dns/mail domain.
+
+## v-delete-fastcgi-cache
+
+Disable FastCGI cache for nginx
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-fastcgi-cache user domain.tld
+```
+
+This function disables FastCGI cache for nginx
+
+## v-delete-firewall-ban
+
+delete firewall blocking rule
+
+**Options**: `IP` `CHAIN`
+
+**Examples**:
+
+```bash
+v-delete-firewall-ban 198.11.130.250 MAIL
+```
+
+This function deletes blocking rule from system firewall
+
+## v-delete-firewall-chain
+
+delete firewall chain
+
+**Options**: `CHAIN`
+
+**Examples**:
+
+```bash
+v-delete-firewall-chain WEB
+```
+
+This function adds new rule to system firewall
+
+## v-delete-firewall-ipset
+
+delete firewall ipset
+
+**Options**: `NAME`
+
+**Examples**:
+
+```bash
+v-delete-firewall-ipset country-nl
+```
+
+This function removes ipset from system and from hestia
+
+## v-delete-firewall-rule
+
+delete firewall rule
+
+**Options**: `RULE`
+
+**Examples**:
+
+```bash
+v-delete-firewall-rule SSH_BLOCK
+```
+
+This function deletes firewall rule.
+
+## v-delete-fs-directory
+
+delete directory
+
+**Options**: `USER` `DIRECTORY`
+
+**Examples**:
+
+```bash
+v-delete-fs-directory admin report1
+```
+
+This function deletes directory on the file system
+
+## v-delete-fs-file
+
+delete file
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-delete-fs-file admin readme.txt
+```
+
+This function deletes file on the file system
+
+## v-delete-letsencrypt-domain
+
+deleting letsencrypt ssl cetificate for domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[MAIL]`
+
+**Examples**:
+
+```bash
+v-delete-letsencrypt-domain admin acme.com yes
+```
+
+This function turns off letsencrypt SSL support for a domain.
+
+## v-delete-mail-account
+
+delete mail account
+
+**Options**: `USER` `DOMAIN` `ACCOUNT`
+
+**Examples**:
+
+```bash
+v-delete-mail-account admin acme.com alice
+```
+
+This function deletes email account.
+
+## v-delete-mail-account-alias
+
+delete mail account alias aka nickname
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `ALIAS`
+
+**Examples**:
+
+```bash
+v-delete-mail-account-alias admin example.com alice alicia
+```
+
+This function deletes email account alias.
+
+## v-delete-mail-account-autoreply
+
+delete mail account autoreply message
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `ALIAS`
+
+**Examples**:
+
+```bash
+v-delete-mail-account-autoreply admin mydomain.tld bob
+```
+
+This function deletes an email accounts autoreply.
+
+## v-delete-mail-account-forward
+
+delete mail account forward
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `EMAIL`
+
+**Examples**:
+
+```bash
+v-delete-mail-account-forward admin acme.com tony bob@acme.com
+```
+
+This function deletes an email accounts forwarding address.
+
+## v-delete-mail-account-fwd-only
+
+delete mail account forward-only flag
+
+**Options**: `USER` `DOMAIN` `ACCOUNT`
+
+**Examples**:
+
+```bash
+v-delete-mail-account-fwd-only admin example.com jack
+```
+
+This function deletes fwd-only flag
+
+## v-delete-mail-domain
+
+delete mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain admin mydomain.tld
+```
+
+This function for deleting MAIL domain. By deleting it all accounts will
+also be deleted.
+
+## v-delete-mail-domain-antispam
+
+delete mail domain antispam support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-antispam admin mydomain.tld
+```
+
+This function disable spamassasin for incoming emails.
+
+## v-delete-mail-domain-antivirus
+
+delete mail domain antivirus support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-antivirus admin mydomain.tld
+```
+
+This function disables clamav scan for incoming emails.
+
+## v-delete-mail-domain-catchall
+
+delete mail domain catchall email
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-catchall admin mydomain.tld
+```
+
+This function disables mail domain cathcall.
+
+## v-delete-mail-domain-dkim
+
+delete mail domain dkim support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-dkim admin mydomain.tld
+```
+
+This function delete DKIM domain pem.
+
+## v-delete-mail-domain-reject
+
+delete mail domain reject spam support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-antispam admin mydomain.tld
+```
+
+The function disable spamassasin for incoming emails.
+
+## v-delete-mail-domain-smtp-relay
+
+Remove mail domain smtp relay support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-smtp-relay user domain.tld
+```
+
+This function removes mail domain smtp relay support.
+
+## v-delete-mail-domain-ssl
+
+delete mail domain ssl support
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-ssl user demo.com
+```
+
+This function delete ssl certificates.
+
+## v-delete-mail-domain-webmail
+
+delete webmail support for a domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[QUIET]`
+
+**Examples**:
+
+```bash
+v-delete-mail-domain-webmail user demo.com
+```
+
+This function removes support for webmail from
+a specified mail domain.
+
+## v-delete-mail-domains
+
+delete mail domains
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-mail-domains admin
+```
+
+This function for deleting all users mail domains.
+
+## v-delete-remote-dns-domain
+
+delete remote dns domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-remote-dns-domain admin example.tld
+```
+
+This function synchronise dns with the remote server.
+
+## v-delete-remote-dns-domains
+
+delete remote dns domains
+
+**Options**: `[HOST]`
+
+This function deletes remote dns domains.
+
+## v-delete-remote-dns-host
+
+delete remote dns host
+
+**Options**: `HOST`
+
+**Examples**:
+
+```bash
+v-delete-remote-dns-host example.org
+```
+
+This function for deleting the remote dns host from hestia configuration.
+
+## v-delete-remote-dns-record
+
+delete remote dns domain record
+
+**Options**: `USER` `DOMAIN` `ID`
+
+**Examples**:
+
+```bash
+v-delete-remote-dns-record user07 acme.com 44
+```
+
+This function synchronise dns with the remote server.
+
+## v-delete-sys-api-ip
+
+delete ip adresss from allowed ip list api
+
+**Options**: `IP`
+
+**Examples**:
+
+```bash
+v-delete-sys-api-ip 1.1.1.1
+```
+
+## v-delete-sys-filemanager
+
+remove file manager functionality from Hestia Control Panel
+
+**Options**: `[MODE]`
+
+This function removes the File Manager and its entry points
+
+## v-delete-sys-firewall
+
+delete system firewall
+
+**Options**: –
+
+This function disables firewall support
+
+## v-delete-sys-ip
+
+delete system ip
+
+**Options**: `IP`
+
+**Examples**:
+
+```bash
+v-delete-sys-ip 212.42.76.210
+```
+
+This function for deleting a system ip. It does not allow to delete first ip
+on interface and do not allow to delete ip which is used by a web domain.
+
+## v-delete-sys-mail-queue
+
+delete exim mail queue
+
+**Options**: –
+
+This function checks for messages stuck in the exim mail queue
+and prompts the user to clear the queue if desired.
+
+## v-delete-sys-pma-sso
+
+disables support for single sign on PHPMYADMIN
+
+**Options**: `[MODE]`
+
+Disables support for SSO to phpMyAdmin
+
+## v-delete-sys-quota
+
+delete system quota
+
+**Options**: –
+
+This function disables filesystem quota on /home partition
+
+## v-delete-sys-sftp-jail
+
+delete system sftp jail
+
+**Options**: –
+
+This function disables sftp jailed environment
+
+## v-delete-sys-smtp
+
+Remove SMTP Account for logging, notification and internal mail
+
+**Options**: –
+
+This function allows configuring a SMTP account for the server to use
+for logging, notification and warn emails etc.
+
+## v-delete-sys-smtp-relay
+
+disable system wide smtp relay support
+
+**Options**: ``
+
+This function disables system wide smtp relay support.
+
+## v-delete-user
+
+delete user
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-user whistler
+```
+
+This function deletes a certain user and all his resources such as domains,
+databases, cron jobs, etc.
+
+## v-delete-user-2fa
+
+delete 2fa of existing user
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-user-2fa admin
+```
+
+This function deletes 2fa token of a user.
+
+## v-delete-user-auth-log
+
+Delete auth log file for user
+
+**Options**:
+
+This function for deleting a users auth log file
+
+## v-delete-user-backup
+
+delete user backup
+
+**Options**: `USER` `BACKUP`
+
+**Examples**:
+
+```bash
+v-delete-user-backup admin admin.2012-12-21_00-10-00.tar
+```
+
+This function deletes user backup.
+
+## v-delete-user-backup-exclusions
+
+delete backup exclusion
+
+**Options**: `USER` `[SYSTEM]`
+
+**Examples**:
+
+```bash
+v-delete-user-backup-exclusions admin
+```
+
+This function for deleting backup exclusion
+
+## v-delete-user-ips
+
+delete user ips
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-user-ips admin
+```
+
+This function deletes all user's ip addresses.
+
+## v-delete-user-log
+
+Delete log file for user
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-user-log user
+```
+
+This function for deleting a users log file
+
+## v-delete-user-notification
+
+delete user notification
+
+**Options**: `USER` `NOTIFICATION`
+
+**Examples**:
+
+```bash
+v-delete-user-notification admin 1
+```
+
+This function deletes user notification.
+
+## v-delete-user-package
+
+delete user package
+
+**Options**: `PACKAGE`
+
+**Examples**:
+
+```bash
+v-delete-user-package admin palegreen
+```
+
+This function for deleting user package.
+
+## v-delete-user-sftp-jail
+
+delete user sftp jail
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-delete-user-sftp-jail whistler
+```
+
+This function disables sftp jailed environment for USER
+
+## v-delete-user-ssh-key
+
+add ssh key
+
+**Options**: `USER` `KEY`
+
+**Examples**:
+
+```bash
+v-delete-user-ssh-key user unique_id
+```
+
+Delete user ssh key from authorized_keys
+
+## v-delete-user-stats
+
+delete user usage statistics
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-user-stats user
+example: v-delete-user-stats admin overall
+```
+
+This function deletes user statistics data.
+
+## v-delete-web-domain
+
+delete web domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain admin wonderland.com
+```
+
+The call of function leads to the removal of domain and all its components
+(statistics, folders contents, ssl certificates, etc.). This operation is
+not fully supported by "undo" function, so the data recovery is possible
+only with a help of reserve copy.
+
+## v-delete-web-domain-alias
+
+delete web domain alias
+
+**Options**: `USER` `DOMAIN` `ALIAS` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-alias admin example.com www.example.com
+```
+
+This function of deleting the alias domain (parked domain). By this call
+default www aliase can be removed as well.
+
+## v-delete-web-domain-allow-users
+
+disables other users create subdomains
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-allow-users admin admin.com
+```
+
+Enable the rule check for Enforce subdomain ownership for a specific domain.
+Enforce subdomain ownership setting in /edit/server/ set to no will always overwrite this behaviour
+eg: admin adds admin.com
+user can create user.admin.com
+
+## v-delete-web-domain-backend
+
+deleting web domain backend configuration
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-backend admin acme.com
+```
+
+This function of deleting the virtualhost backend configuration.
+
+## v-delete-web-domain-ftp
+
+delete webdomain ftp account
+
+**Options**: `USER` `DOMAIN` `FTP_USER`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-ftp admin wonderland.com bob_ftp
+```
+
+This function deletes additional ftp account.
+
+## v-delete-web-domain-httpauth
+
+delete http auth user
+
+**Options**: `USER` `DOMAIN` `AUTH_USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-httpauth admin example.com alice
+```
+
+This function is used for deleting http auth user
+
+## v-delete-web-domain-proxy
+
+deleting web domain proxy configuration
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-proxy alice lookinglass.com
+```
+
+This function of deleting the virtualhost proxy configuration.
+
+## v-delete-web-domain-redirect
+
+Delete force redirect to domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-add-web-domain-redirect user domain.tld
+```
+
+Function delete a forced redirect to a domain
+
+## v-delete-web-domain-ssl
+
+delete web domain SSL support
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-ssl admin acme.com
+```
+
+This function disable https support and deletes SSL certificates.
+
+## v-delete-web-domain-ssl-force
+
+remove ssl force from domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[QUIET]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-ssl-force admin domain.tld
+```
+
+This function removes force SSL configurations.
+
+## v-delete-web-domain-ssl-hsts
+
+remove ssl force from domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[QUIET]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-ssl-hsts user domain.tld
+```
+
+This function removes force SSL configurations.
+
+## v-delete-web-domain-stats
+
+delete web domain statistics
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-stats user02 h1.example.com
+```
+
+This function of deleting site's system of statistics. Its type is
+automatically chooses from client's configuration file.
+
+## v-delete-web-domain-stats-user
+
+disable web domain stats authentication support
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domain-stats-user admin acme.com
+```
+
+This function removes authentication of statistics system. If the script is
+called without naming a certain user, all users will be removed. After
+deleting all of them statistics will be accessible for view without an
+authentication.
+
+## v-delete-web-domains
+
+delete web domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-delete-web-domains admin
+```
+
+This function deletes all user's webdomains.
+
+## v-delete-web-php
+
+delete php fpm version
+
+**Options**: `VERSION`
+
+**Examples**:
+
+```bash
+v-delete-web-php 7.3
+```
+
+This function checks and delete a fpm php version if not used by any domain.
+
+## v-download-backup
+
+Download backup
+
+**Options**: `USER` `BACKUP`
+
+**Examples**:
+
+```bash
+v-download-backup admin admin.2020-11-05_05-10-21.tar
+```
+
+This function download back-up from remote server
+
+## v-extract-fs-archive
+
+archive to directory
+
+**Options**: `USER` `ARCHIVE` `DIRECTORY` `[SELECTED_DIR]` `[STRIP]` `[TEST]`
+
+**Examples**:
+
+```bash
+v-extract-fs-archive admin latest.tar.gz /home/admin
+```
+
+This function extracts archive into directory on the file system
+
+## v-generate-api-key
+
+generate api key
+
+**Options**: –
+
+This function creates a key file in $HESTIA/data/keys/
+
+## v-generate-debug-report
+
+**Options**:
+
+Includes
+shellcheck source=/etc/hestiacp/hestia.conf
+
+## v-generate-password-hash
+
+generate password hash
+
+**Options**: `HASH_METHOD` `SALT` `PASSWORD`
+
+**Examples**:
+
+```php
+    v-generate-password-hash sha-512 rAnDom_string yourPassWord
+```
+
+This function generates password hash
+
+## v-generate-ssl-cert
+
+generate self signed certificate and CSR request
+
+**Options**: `DOMAIN` `EMAIL` `COUNTRY` `STATE` `CITY` `ORG` `UNIT` `[ALIASES]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-generate-ssl-cert example.com mail@yahoo.com USA California Monterey ACME.COM IT
+```
+
+This function generates self signed SSL certificate and CSR request
+
+## v-get-dns-domain-value
+
+get dns domain value
+
+**Options**: `USER` `DOMAIN` `KEY`
+
+**Examples**:
+
+```bash
+v-get-dns-domain-value admin example.com SOA
+```
+
+This function for getting a certain DNS domain parameter.
+
+## v-get-fs-file-type
+
+get file type
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-get-fs-file-type admin index.html
+```
+
+This function shows file type
+
+## v-get-mail-account-value
+
+get mail account value
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `KEY`
+
+**Examples**:
+
+```bash
+v-get-mail-account-value admin example.tld tester QUOTA
+```
+
+This function for getting a certain mail account parameter.
+
+## v-get-mail-domain-value
+
+get mail domain value
+
+**Options**: `USER` `DOMAIN` `KEY`
+
+**Examples**:
+
+```bash
+v-get-mail-domain-value admin example.com DKIM
+```
+
+This function for getting a certain mail domain parameter.
+
+## v-get-sys-timezone
+
+get system timezone
+
+**Options**: `[FORMAT]`
+
+This function to get system timezone
+
+## v-get-sys-timezones
+
+list system timezone
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-get-sys-timezones json
+```
+
+This function checks system timezone settings
+
+## v-get-user-salt
+
+get user salt
+
+**Options**: `USER` `[IP]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-get-user-salt admin
+```
+
+This function provides users salt
+
+## v-get-user-value
+
+get user value
+
+**Options**: `USER` `KEY`
+
+**Examples**:
+
+```bash
+v-get-user-value admin FNAME
+```
+
+This function for obtaining certain user's parameters.
+
+## v-insert-dns-domain
+
+insert dns domain
+
+**Options**: `USER` `DATA` `[SRC]` `[FLUSH]` `#`
+
+This function inserts raw record to the dns.conf
+
+## v-insert-dns-record
+
+insert dns record
+
+**Options**: `USER` `DOMAIN` `DATA`
+
+This function inserts raw dns record to the domain conf
+
+## v-insert-dns-records
+
+inserts dns records
+
+**Options**: `USER` `DOMAIN` `DATA_FILE`
+
+This function copy dns record to the domain conf
+
+## v-list-access-key
+
+list all API access keys
+
+**Options**: `ACCESS_KEY_ID` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-access-key 1234567890ABCDefghij json
+```
+
+## v-list-access-keys
+
+list all API access keys
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-access-keys json
+```
+
+## v-list-api
+
+list api
+
+**Options**: `API` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-api mail-accounts json
+```
+
+## v-list-apis
+
+list available APIs
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-apis json
+```
+
+## v-list-backup-host
+
+list backup host
+
+**Options**: `TYPE` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-backup-host local
+```
+
+This function for obtaining the list of backup host parameters.
+
+## v-list-cron-job
+
+list cron job
+
+**Options**: `USER` `JOB` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-cron-job admin 7
+```
+
+This function of obtaining cron job parameters.
+
+## v-list-cron-jobs
+
+list user cron jobs
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-cron-jobs admin
+```
+
+This function for obtaining the list of all users cron jobs.
+
+## v-list-database
+
+list database
+
+**Options**: `USER` `DATABASE` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-database wp_db
+```
+
+This function for obtaining of all database's parameters.
+
+## v-list-database-host
+
+list database host
+
+**Options**: `TYPE` `HOST` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-database-host mysql localhost
+```
+
+This function for obtaining database host parameters.
+
+## v-list-database-hosts
+
+list database hosts
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-database-hosts json
+```
+
+This function for obtaining the list of all configured database hosts.
+
+## v-list-database-types
+
+list supported database types
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-database-types json
+```
+
+This function for obtaining the list of database types.
+
+## v-list-databases
+
+listing databases
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-databases user json
+```
+
+This function for obtaining the list of all user's databases.
+
+## v-list-default-php
+
+list default PHP version used by default.tpl
+
+**Options**: `[FORMAT]`
+
+List the default version used by de the default template
+
+## v-list-dns-domain
+
+list dns domain
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-domain alice wonderland.com
+```
+
+This function of obtaining the list of dns domain parameters.
+
+## v-list-dns-domains
+
+list dns domains
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-domains admin
+```
+
+This function for obtaining all DNS domains of a user.
+
+## v-list-dns-records
+
+list dns domain records
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-records admin example.com
+```
+
+This function for getting all DNS domain records.
+
+## v-list-dns-template
+
+list dns template
+
+**Options**: `TEMPLATE` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-template zoho
+```
+
+This function for obtaining the DNS template parameters.
+
+## v-list-dns-templates
+
+list dns templates
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-templates json
+```
+
+This function for obtaining the list of all DNS templates available.
+
+## v-list-dnssec-public-key
+
+list public dnssec key
+
+**Options**: `USER` `DOMAIN` `[FROMAT]`
+
+**Examples**:
+
+```bash
+v-list-dns-public-key admin acme.com
+```
+
+This function list the public key to be used with DNSSEC and needs to be added to the domain register.
+
+## v-list-firewall
+
+list iptables rules
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-firewall json
+```
+
+This function of obtaining the list of all iptables rules.
+
+## v-list-firewall-ban
+
+list firewall block list
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-firewall-ban json
+```
+
+This function of obtaining the list of currently blocked ips.
+
+## v-list-firewall-ipset
+
+List firewall ipset
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-firewall-ipset json
+```
+
+This function prints defined ipset lists
+
+## v-list-firewall-rule
+
+list firewall rule
+
+**Options**: `RULE` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-firewall-rule 2
+```
+
+This function of obtaining firewall rule parameters.
+
+## v-list-fs-directory
+
+list directory
+
+**Options**: `USER` `DIRECTORY`
+
+**Examples**:
+
+```bash
+v-list-fs-directory /home/admin/web
+```
+
+This function lists directory on the file system
+
+## v-list-letsencrypt-user
+
+list letsencrypt key
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-letsencrypt-user admin
+```
+
+This function for obtaining the letsencrypt key thumbprint
+
+## v-list-mail-account
+
+list mail domain account
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-account admin domain.tld tester
+```
+
+This function of obtaining the list of account parameters.
+
+## v-list-mail-account-autoreply
+
+list mail account autoreply
+
+**Options**: `USER` `DOMAIN` `ACCOUNT` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-account-autoreply admin example.com testing
+```
+
+This function of obtaining mail account autoreply message.
+
+## v-list-mail-accounts
+
+list mail domain accounts
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-accounts admin acme.com
+```
+
+This function of obtaining the list of all user domains.
+
+## v-list-mail-domain
+
+list mail domain
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-domain user01 mydomain.com
+```
+
+This function of obtaining the list of domain parameters.
+
+## v-list-mail-domain-dkim
+
+list mail domain dkim
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-domain-dkim admin maildomain.tld
+```
+
+This function of obtaining domain dkim files.
+
+## v-list-mail-domain-dkim-dns
+
+list mail domain dkim dns records
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-domain-dkim-dns admin example.com
+```
+
+This function of obtaining domain dkim dns records for proper setup.
+
+## v-list-mail-domain-ssl
+
+list mail domain ssl certificate
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-domain-ssl user acme.com json
+```
+
+This function of obtaining domain ssl files.
+
+## v-list-mail-domains
+
+list mail domains
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-mail-domains admin
+```
+
+This function of obtaining the list of all user domains.
+
+## v-list-remote-dns-hosts
+
+list remote dns host
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-remote-dns-hosts json
+```
+
+This function for obtaining the list of remote dns host.
+
+## v-list-sys-clamd-config
+
+list clamd config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of clamd config parameters.
+
+## v-list-sys-config
+
+list system configuration
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-sys-config json
+```
+
+This function for obtaining the list of system parameters.
+
+## v-list-sys-cpu-status
+
+list system cpu info
+
+**Options**: ``
+
+This function lists cpu information
+
+## v-list-sys-db-status
+
+list db status
+
+**Options**: ``
+
+v-list-sys-db-status
+
+## v-list-sys-disk-status
+
+list disk information
+
+**Options**: ``
+
+This function lists disk information
+
+## v-list-sys-dns-status
+
+list dns status
+
+**Options**: ``
+
+This function lists dns server status
+
+## v-list-sys-dovecot-config
+
+list dovecot config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of dovecot config parameters.
+
+## v-list-sys-hestia-autoupdate
+
+list hestia autoupdate settings
+
+**Options**: `[FORMAT]`
+
+This function for obtaining autoupdate settings.
+
+## v-list-sys-hestia-ssl
+
+list hestia ssl certificate
+
+**Options**: `[FORMAT]`
+
+This function of obtaining hestia ssl files.
+
+## v-list-sys-hestia-updates
+
+list system updates
+
+**Options**: `[FORMAT]`
+
+This function checks available updates for hestia packages.
+
+## v-list-sys-info
+
+list system os
+
+**Options**: `[FORMAT]`
+
+This function checks available updates for hestia packages.
+
+## v-list-sys-interfaces
+
+list system interfaces
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of network interfaces.
+
+## v-list-sys-ip
+
+list system ip
+
+**Options**: `IP` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-sys-ip 116.203.78.202
+```
+
+This function for getting the list of system ip parameters.
+
+## v-list-sys-ips
+
+list system ips
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of system ip adresses.
+
+## v-list-sys-languages
+
+list system languages
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-sys-languages json
+```
+
+This function for obtaining the available languages for HestiaCP
+Output is always in the ISO language code
+
+## v-list-sys-mail-status
+
+list mail status
+
+**Options**: ``
+
+This function lists mail server status
+
+## v-list-sys-memory-status
+
+list virtual memory info
+
+**Options**: ``
+
+This function lists virtual memory information
+
+## v-list-sys-mysql-config
+
+list mysql config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of mysql config parameters.
+
+## v-list-sys-network-status
+
+list system network status
+
+**Options**: ``
+
+This function lists network status
+
+## v-list-sys-nginx-config
+
+list nginx config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of nginx config parameters.
+
+## v-list-sys-pgsql-config
+
+list postgresql config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of postgresql config parameters.
+
+## v-list-sys-php
+
+listing availble PHP versions installed
+
+**Options**: `[FORMAT]`
+
+List /etc/php/\* version check if folder fpm is available
+
+## v-list-sys-php-config
+
+list php config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of php config parameters.
+
+## v-list-sys-proftpd-config
+
+list proftpd config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of proftpd config parameters.
+
+## v-list-sys-rrd
+
+list system rrd charts
+
+**Options**: `[FORMAT]`
+
+List available rrd graphics, its titles and paths.
+
+## v-list-sys-services
+
+list system services
+
+**Options**: `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-sys-services json
+```
+
+This function for obtaining the list of configured system services.
+
+## v-list-sys-shells
+
+list system shells
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of system shells.
+
+## v-list-sys-spamd-config
+
+list spamassassin config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of spamassassin config parameters.
+
+## v-list-sys-sshd-port
+
+list sshd port
+
+**Options**: `[FORMAT]`
+
+This function for obtainings the port of sshd listens to
+
+## v-list-sys-themes
+
+list system themes
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of themes in the theme
+library and displaying them in the backend or user interface.
+
+## v-list-sys-users
+
+list system users
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of system users without
+detailed information.
+
+## v-list-sys-vsftpd-config
+
+list vsftpd config parameters
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of vsftpd config parameters.
+
+## v-list-sys-web-status
+
+list web status
+
+**Options**: ``
+
+This function lists web server status
+
+## v-list-sys-webmail
+
+listing available webmail clients
+
+**Options**: `[FORMAT]`
+
+List available webmail clients
+
+## v-list-user
+
+list user parameters
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user admin
+```
+
+This function to obtain user parameters.
+
+## v-list-user-auth-log
+
+list user log
+
+**Options**: `USER` `[FORMAT]`
+
+This function of obtaining the list of 10 last users commands.
+
+## v-list-user-backup
+
+list user backup
+
+**Options**: `USER` `BACKUP` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-backups admin admin.2019-05-19_03-31-30.tar
+```
+
+This function of obtaining the list of backup parameters. This call, just as
+all v*list*\* calls, supports 3 formats - json, shell and plain.
+
+## v-list-user-backup-exclusions
+
+list backup exclusions
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-backup-exclusions admin
+```
+
+This function for obtaining the backup exclusion list
+
+## v-list-user-backups
+
+list user backups
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-backups admin
+```
+
+This function for obtaining the list of available user backups.
+
+## v-list-user-ips
+
+list user ips
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-ips admin
+```
+
+This function for obtaining the list of available ip addresses.
+
+## v-list-user-log
+
+list user log
+
+**Options**: `USER` `[FORMAT]`
+
+This function of obtaining the list of 100 last users commands.
+
+## v-list-user-notifications
+
+list user notifications
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-notifications admin
+```
+
+This function for getting the list notifications
+
+## v-list-user-ns
+
+list user name servers
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-ns admin
+```
+
+Function for obtaining the list of user's DNS servers.
+
+## v-list-user-package
+
+list user package
+
+**Options**: `PACKAGE` `[FORMAT]`
+
+This function for getting the list of system ip parameters.
+
+## v-list-user-packages
+
+list user packages
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of available hosting packages.
+
+## v-list-user-ssh-key
+
+add ssh key
+
+**Options**: `USER` `[FORMAT]`
+
+Lists $user/.ssh/authorized_keys
+
+## v-list-user-stats
+
+list user stats
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-user-stats admin
+```
+
+This function for listing user statistics
+
+## v-list-users
+
+list users
+
+**Options**: `[FORMAT]`
+
+This function to obtain the list of all system users.
+
+## v-list-users-stats
+
+list overall user stats
+
+**Options**: `[FORMAT]`
+
+This function for listing overall user statistics
+
+## v-list-web-domain
+
+list web domain parameters
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-web-domain admin example.com
+```
+
+This function to obtain web domain parameters.
+
+## v-list-web-domain-accesslog
+
+list web domain access log
+
+**Options**: `USER` `DOMAIN` `[LINES]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-web-domain-accesslog admin example.com
+```
+
+This function of obtaining raw access web domain logs.
+
+## v-list-web-domain-errorlog
+
+list web domain error log
+
+**Options**: `USER` `DOMAIN` `[LINES]` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-web-domain-errorlog admin acme.com
+```
+
+This function of obtaining raw error web domain logs.
+
+## v-list-web-domain-ssl
+
+list web domain ssl certificate
+
+**Options**: `USER` `DOMAIN` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-web-domain-ssl admin wonderland.com
+```
+
+This function of obtaining domain ssl files.
+
+## v-list-web-domains
+
+list web domains
+
+**Options**: `USER` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-list-web-domains alice
+```
+
+This function to obtain the list of all user web domains.
+
+## v-list-web-stats
+
+list web statistics
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of web statistics analyzer.
+
+## v-list-web-templates
+
+list web templates
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of web templates available to a user.
+
+## v-list-web-templates-backend
+
+listing backend templates
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of available backend templates.
+
+## v-list-web-templates-proxy
+
+listing proxy templates
+
+**Options**: `[FORMAT]`
+
+This function for obtaining the list of proxy templates available to a user.
+
+## v-log-action
+
+adds action event to user or system log
+
+**Options**: `LOG_TYPE` `USER`
+
+Event Levels:
+info, warning, error
+
+## v-log-user-login
+
+add user login
+
+**Options**: `USER` `IP` `STATUS` `[FINGERPRINT]`
+
+## v-log-user-logout
+
+Log User logout event
+
+**Options**: `USER` `FINGERPRINT`
+
+## v-move-fs-directory
+
+move file
+
+**Options**: `USER` `SRC_DIRECTORY` `DST_DIRECTORY`
+
+**Examples**:
+
+```bash
+v-move-fs-directory admin /home/admin/web /home/user02/
+```
+
+This function moved file or directory on the file system. This function
+can also be used to rename files just like normal mv command.
+
+## v-move-fs-file
+
+move file
+
+**Options**: `USER` `SRC_FILE` `DST_FILE`
+
+**Examples**:
+
+```bash
+v-move-fs-file admin readme.txt new_readme.txt
+```
+
+This function moved file or directory on the file system. This function
+can also be used to rename files just like normal mv command.
+
+## v-open-fs-config
+
+open config
+
+**Options**: `CONFIG`
+
+**Examples**:
+
+```bash
+v-open-fs-config /etc/mysql/my.cnf
+```
+
+This function opens/reads config files on the file system
+
+## v-open-fs-file
+
+open file
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-open-fs-file admin README.md
+```
+
+This function opens/reads files on the file system
+
+## v-purge-nginx-cache
+
+Purge nginx cache
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-purge-nginx-cache user domain.tld
+```
+
+This function purges nginx cache.
+
+## v-rebuild-all
+
+rebuild all assets for a specified user
+
+**Options**: `USER` `[RESTART]`
+
+This function rebuilds all assets for a user account:
+
+- Web domains
+- DNS zones
+- Mail domains
+- Databases
+- Cron Jobs
+- User account configuration
+
+## v-rebuild-cron-jobs
+
+rebuild cron jobs
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-rebuild-cron-jobs admin yes
+```
+
+This function rebuilds system cron config file for specified user.
+
+## v-rebuild-database
+
+rebuild databases
+
+**Options**: `USER` `DATABASE`
+
+**Examples**:
+
+```bash
+v-rebuild-database user user_wordpress
+```
+
+This function for rebuilding a single database for a user
+
+## v-rebuild-databases
+
+rebuild databases
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-rebuild-databases admin
+```
+
+This function for rebuilding of all databases of a single user.
+
+## v-rebuild-dns-domain
+
+rebuild dns domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]` `[UPDATE_SERIAL]`
+
+**Examples**:
+
+```bash
+v-rebuild-dns-domain alice wonderland.com
+```
+
+This function rebuilds DNS configuration files.
+
+## v-rebuild-dns-domains
+
+rebuild dns domains
+
+**Options**: `USER` `[RESTART]` `[UPDATE_SERIAL]`
+
+**Examples**:
+
+```bash
+v-rebuild-dns-domains alice
+```
+
+This function rebuilds DNS configuration files.
+
+## v-rebuild-mail-domain
+
+rebuild mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-rebuild-mail-domain user domain.tld
+```
+
+This function rebuilds configuration files for a single domain.
+
+## v-rebuild-mail-domains
+
+rebuild mail domains
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-rebuild-mail-domains admin
+```
+
+This function rebuilds EXIM configuration files for all mail domains.
+
+## v-rebuild-user
+
+rebuild system user
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-rebuild-user admin yes
+```
+
+This function rebuilds system user account.
+
+## v-rebuild-users
+
+rebuild system users
+
+**Options**: `[RESTART]`
+
+This function rebuilds user configuration for all users.
+
+## v-rebuild-web-domain
+
+rebuild web domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-rebuild-web-domain user domain.tld
+```
+
+This function rebuilds web configuration files.
+
+## v-rebuild-web-domains
+
+rebuild web domains
+
+**Options**: `USER` `[RESTART]`
+
+This function rebuilds web configuration files.
+
+## v-refresh-sys-theme
+
+change active system theme
+
+**Options**: –
+
+This function for changing the currently active system theme.
+
+## v-rename-user-package
+
+change package name
+
+**Options**: `OLD_NAME` `NEW_NAME` `[MODE]`
+
+**Examples**:
+
+```bash
+v-rename-package package package2
+```
+
+This function changes the name of an existing package.
+
+## v-repair-sys-config
+
+Restore system configuration
+
+**Options**: `[SYSTEM]`
+
+This function repairs or restores the system configuration file.
+
+## v-restart-cron
+
+restart cron service
+
+**Options**: –
+
+This function tells crond service to reread its configuration files.
+
+## v-restart-dns
+
+restart dns service
+
+**Options**: –
+
+This function tells BIND service to reload dns zone files.
+
+## v-restart-ftp
+
+restart ftp service
+
+**Options**: –
+
+This function tells ftp server to reread its configuration.
+
+## v-restart-mail
+
+restart mail service
+
+**Options**: `[RESTART]`
+
+This function tells exim or dovecot services to reload configuration files.
+
+## v-restart-proxy
+
+restart proxy server
+
+**Options**: –
+
+**Examples**:
+
+```bash
+v-restart-proxy [RESTART]
+```
+
+This function reloads proxy server configuration.
+
+## v-restart-service
+
+restart service
+
+**Options**: `SERVICE` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-restart-service apache2
+```
+
+This function restarts system service.
+
+## v-restart-system
+
+restart operating system
+
+**Options**: `RESTART` `[DELAY]`
+
+**Examples**:
+
+```bash
+v-restart-system yes
+```
+
+This function restarts operating system.
+
+## v-restart-web
+
+restart web server
+
+**Options**: `[RESTARRT]`
+
+This function reloads web server configuration.
+
+## v-restart-web-backend
+
+restart backend server
+
+**Options**: –
+
+This function reloads backend server configuration.
+
+## v-restore-cron-job
+
+restore single cron job
+
+**Options**: `USER` `BACKUP` `DOMAIN` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-cron-job USER BACKUP CRON [NOTIFY]
+```
+
+This function allows the user to restore a single cron job
+from a backup archive.
+
+## v-restore-database
+
+restore single database
+
+**Options**: `USER` `BACKUP` `DATABASE` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-database USER BACKUP DATABASE [NOTIFY]
+```
+
+This function allows the user to restore a single database
+from a backup archive.
+
+## v-restore-dns-domain
+
+restore single dns domain
+
+**Options**: `USER` `BACKUP` `DOMAIN` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-dns-domain USER BACKUP DOMAIN [NOTIFY]
+```
+
+This function allows the user to restore a single DNS domain
+from a backup archive.
+
+## v-restore-mail-domain
+
+restore single mail domain
+
+**Options**: `USER` `BACKUP` `DOMAIN` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-mail-domain USER BACKUP DOMAIN [NOTIFY]
+```
+
+This function allows the user to restore a single mail domain
+from a backup archive.
+
+## v-restore-user
+
+restore user
+
+**Options**: `USER` `BACKUP` `[WEB]` `[DNS]` `[MAIL]` `[DB]` `[CRON]` `[UDIR]` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-user admin 2019-04-22_01-00-00.tar
+```
+
+This function for restoring user from backup. To be able to restore the backup,
+the archive needs to be placed in /backup.
+
+## v-restore-web-domain
+
+restore single web domain
+
+**Options**: `USER` `BACKUP` `DOMAIN` `[NOTIFY]`
+
+**Examples**:
+
+```bash
+v-restore-web-domain USER BACKUP DOMAIN [NOTIFY]
+```
+
+This function allows the user to restore a single web domain
+from a backup archive.
+
+## v-revoke-api-key
+
+revokes api key
+
+**Options**: `[HASH]`
+
+**Examples**:
+
+```bash
+v-revoke-api-key mykey
+```
+
+This function removes a key from in $HESTIA/data/keys/
+
+## v-run-cli-cmd
+
+run cli command
+
+**Options**: `USER` `CMD` `[ARG...]`
+
+**Examples**:
+
+```bash
+v-run-cli-cmd user composer require package
+```
+
+This function runs a limited list of cli commands with dropped privileges as the specific hestia user
+
+## v-schedule-letsencrypt-domain
+
+adding cronjob for letsencrypt cetificate installation
+
+**Options**: `USER` `DOMAIN` `[ALIASES]`
+
+**Examples**:
+
+```bash
+v-schedule-letsencrypt-domain admin example.com www.example.com
+```
+
+This function adds cronjob for letsencrypt ssl certificate installation
+
+## v-schedule-user-backup
+
+schedule user backup creation
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-schedule-user-backup admin
+```
+
+This function for scheduling user backup creation.
+
+## v-schedule-user-backup-download
+
+Schedule a backup
+
+**Options**: `USER` `BACKUP`
+
+**Examples**:
+
+```bash
+v-schedule-user-backup-download admin 2019-04-22_01-00-00.tar
+```
+
+This function for scheduling user backup creation.
+
+## v-schedule-user-restore
+
+schedule user backup restoration
+
+**Options**: `USER` `BACKUP` `[WEB]` `[DNS]` `[MAIL]` `[DB]` `[CRON]` `[UDIR]`
+
+**Examples**:
+
+```bash
+v-schedule-user-restore 2019-04-22_01-00-00.tar
+```
+
+This function for scheduling user backup restoration.
+
+## v-search-command
+
+search for available commands
+
+**Options**: `ARG1` `[ARG...]`
+
+**Examples**:
+
+```bash
+v-search-command web
+```
+
+This function searches for available Hestia Control Panel commands
+and returns results based on the specified criteria.
+Originally developed for VestaCP by Federico Krum
+https://github.com/FastDigitalOceanDroplets/VestaCP/blob/master/files/v-search-command
+
+## v-search-domain-owner
+
+search domain owner
+
+**Options**: `DOMAIN` `[TYPE]`
+
+**Examples**:
+
+```bash
+v-search-domain-owner acme.com
+```
+
+This function that allows to find user objects.
+
+## v-search-fs-object
+
+search file or directory
+
+**Options**: `USER` `OBJECT` `[PATH]`
+
+**Examples**:
+
+```bash
+v-search-fs-object admin hello.txt
+```
+
+This function search files and directories on the file system
+
+## v-search-object
+
+search objects
+
+**Options**: `OBJECT` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-search-object example.com json
+```
+
+This function that allows to find system objects.
+
+## v-search-user-object
+
+search objects
+
+**Options**: `USER` `OBJECT` `[FORMAT]`
+
+**Examples**:
+
+```bash
+v-search-user-object admin example.com json
+```
+
+This function that allows to find user objects.
+
+## v-start-service
+
+start service
+
+**Options**: `SERVICE`
+
+**Examples**:
+
+```bash
+v-start-service mysql
+```
+
+This function starts system service.
+
+## v-stop-firewall
+
+stop system firewall
+
+**Options**: –
+
+This function stops iptables
+
+## v-stop-service
+
+stop service
+
+**Options**: `SERVICE`
+
+**Examples**:
+
+```bash
+v-stop-service apache2
+```
+
+This function stops system service.
+
+## v-suspend-cron-job
+
+suspend cron job
+
+**Options**: `USER` `JOB` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-cron-job admin 5 yes
+```
+
+This function suspends a certain job of the cron scheduler.
+
+## v-suspend-cron-jobs
+
+Suspending sys cron jobs
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-cron-jobs admin
+```
+
+This function suspends all user cron jobs.
+
+## v-suspend-database
+
+suspend database
+
+**Options**: `USER` `DATABASE`
+
+**Examples**:
+
+```bash
+v-suspend-database admin admin_wordpress_db
+```
+
+This function for suspending a certain user database.
+
+## v-suspend-database-host
+
+suspend database server
+
+**Options**: `TYPE` `HOST`
+
+**Examples**:
+
+```bash
+v-suspend-database-host mysql localhost
+```
+
+This function for suspending a database server.
+
+## v-suspend-databases
+
+suspend databases
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-suspend-databases admin
+```
+
+This function for suspending of all databases of a single user.
+
+## v-suspend-dns-domain
+
+suspend dns domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-dns-domain alice acme.com
+```
+
+This function suspends a certain user's domain.
+
+## v-suspend-dns-domains
+
+suspend dns domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-dns-domains admin yes
+```
+
+This function suspends all user's DNS domains.
+
+## v-suspend-dns-record
+
+suspend dns domain record
+
+**Options**: `USER` `DOMAIN` `ID` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-dns-record alice wonderland.com 42 yes
+```
+
+This function suspends a certain domain record.
+
+## v-suspend-domain
+
+suspend web/dns/mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-suspend-domain admin example.com
+```
+
+This function suspends web/dns/mail domain.
+
+## v-suspend-firewall-rule
+
+suspend firewall rule
+
+**Options**: `RULE`
+
+**Examples**:
+
+```bash
+v-suspend-firewall-rule 7
+```
+
+This function suspends a certain firewall rule.
+
+## v-suspend-mail-account
+
+suspend mail account
+
+**Options**: `USER` `DOMAIN` `ACCOUNT`
+
+**Examples**:
+
+```bash
+v-suspend-mail-account admin acme.com bob
+```
+
+This function suspends mail account.
+
+## v-suspend-mail-accounts
+
+suspend all mail domain accounts
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-suspend-mail-accounts admin example.com
+```
+
+This function suspends all mail domain accounts.
+
+## v-suspend-mail-domain
+
+suspend mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-suspend-mail-domain admin domain.com
+```
+
+This function suspends mail domain.
+
+## v-suspend-mail-domains
+
+suspend mail domains
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-suspend-mail-domains admin
+```
+
+This function suspends all user's MAIL domains.
+
+## v-suspend-remote-dns-host
+
+suspend remote dns server
+
+**Options**: `HOST`
+
+**Examples**:
+
+```bash
+v-suspend-remote-dns-host hostname.tld
+```
+
+This function for suspending remote dns server.
+
+## v-suspend-user
+
+suspend user
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-user alice yes
+```
+
+This function suspends a certain user and all his objects.
+
+## v-suspend-web-domain
+
+suspend web domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-web-domain admin example.com yes
+```
+
+This function for suspending the site's operation. After blocking it all
+visitors will be redirected to a web page explaining the reason of suspend.
+By blocking the site the content of all its directories remains untouched.
+
+## v-suspend-web-domains
+
+suspend web domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-suspend-web-domains bob
+```
+
+This function of suspending all user's sites.
+
+## v-sync-dns-cluster
+
+synchronize dns domains
+
+**Options**: `HOST`
+
+This function synchronise all dns domains.
+
+## v-unsuspend-cron-job
+
+unsuspend cron job
+
+**Options**: `USER` `JOB` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-cron-job admin 7 yes
+```
+
+This function unsuspend certain cron job.
+
+## v-unsuspend-cron-jobs
+
+unsuspend sys cron
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-cron-jobs admin no
+```
+
+This function unsuspends all suspended cron jobs.
+
+## v-unsuspend-database
+
+unsuspend database
+
+**Options**: `USER` `DATABASE`
+
+**Examples**:
+
+```bash
+v-unsuspend-database admin mydb
+```
+
+This function for unsuspending database.
+
+## v-unsuspend-database-host
+
+unsuspend database server
+
+**Options**: `TYPE` `HOST`
+
+**Examples**:
+
+```bash
+v-unsuspend-database-host mysql localhost
+```
+
+This function for unsuspending a database server.
+
+## v-unsuspend-databases
+
+unsuspend databases
+
+**Options**: `USER`
+
+This function for unsuspending all user's databases.
+
+## v-unsuspend-dns-domain
+
+unsuspend dns domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-unsuspend-dns-domain alice wonderland.com
+```
+
+This function unsuspends a certain user's domain.
+
+## v-unsuspend-dns-domains
+
+unsuspend dns domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-dns-domains alice
+```
+
+This function unsuspends all user's DNS domains.
+
+## v-unsuspend-dns-record
+
+unsuspend dns domain record
+
+**Options**: `USER` `DOMAIN` `ID` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-dns-record admin example.com 33
+```
+
+This function unsuspends a certain domain record.
+
+## v-unsuspend-domain
+
+unsuspend web/dns/mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-unsuspend-domain admin acme.com
+```
+
+This function unsuspends web/dns/mail domain.
+
+## v-unsuspend-firewall-rule
+
+unsuspend firewall rule
+
+**Options**: `RULE`
+
+**Examples**:
+
+```bash
+v-unsuspend-firewall-rule 7
+```
+
+This function unsuspends a certain firewall rule.
+
+## v-unsuspend-mail-account
+
+unsuspend mail account
+
+**Options**: `USER` `DOMAIN` `ACCOUNT`
+
+**Examples**:
+
+```bash
+v-unsuspend-mail-account admin acme.com tester
+```
+
+This function unsuspends mail account.
+
+## v-unsuspend-mail-accounts
+
+unsuspend all mail domain accounts
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-unsuspend-mail-accounts admin acme.com
+```
+
+This function unsuspends all mail domain accounts.
+
+## v-unsuspend-mail-domain
+
+unsuspend mail domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-unsuspend-mail-domain user02 acme.com
+```
+
+This function unsuspends mail domain.
+
+## v-unsuspend-mail-domains
+
+unsuspend mail domains
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-unsuspend-mail-domains admin
+```
+
+This function unsuspends all user's MAIL domains.
+
+## v-unsuspend-remote-dns-host
+
+unsuspend remote dns server
+
+**Options**: `HOST`
+
+**Examples**:
+
+```bash
+v-unsuspend-remote-dns-host hosname.com
+```
+
+This function for unsuspending remote dns server.
+
+## v-unsuspend-user
+
+unsuspend user
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-user bob
+```
+
+This function unsuspends user and all his objects.
+
+## v-unsuspend-web-domain
+
+unsuspend web domain
+
+**Options**: `USER` `DOMAIN` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-web-domain admin acme.com
+```
+
+This function of unsuspending the domain.
+
+## v-unsuspend-web-domains
+
+unsuspend web domains
+
+**Options**: `USER` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-unsuspend-web-domains admin
+```
+
+This function of unsuspending all user's sites.
+
+## v-update-database-disk
+
+update database disk usage
+
+**Options**: `USER` `DATABASE`
+
+**Examples**:
+
+```bash
+v-update-database-disk admin wp_db
+```
+
+This function recalculates disk usage for specific database.
+
+## v-update-databases-disk
+
+update databases disk usage
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-databases-disk admin
+```
+
+This function recalculates disk usage for all user databases.
+
+## v-update-dns-templates
+
+update dns templates
+
+**Options**: `[RESTART]`
+
+This function for obtaining updated dns templates from Hestia package.
+
+## v-update-firewall
+
+update system firewall rules
+
+**Options**: –
+
+This function updates iptables rules
+
+## v-update-firewall-ipset
+
+update firewall ipset
+
+**Options**: `[REFRESH]`
+
+This function creates ipset lists and updates the lists if they are expired or ondemand
+
+## v-update-host-certificate
+
+update host certificate for hestia
+
+**Options**: `USER` `HOSTNAME`
+
+**Examples**:
+
+```bash
+v-update-host-certificate admin example.com
+```
+
+This function updates the SSL certificate used for Hestia Control Panel.
+
+## v-update-letsencrypt-ssl
+
+update letsencrypt ssl certificates
+
+**Options**: –
+
+This function for renew letsencrypt expired ssl certificate for all users
+
+## v-update-mail-domain-disk
+
+update mail domain disk usage
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-update-mail-domain-disk admin example.com
+```
+
+This function updates domain disk usage.
+
+## v-update-mail-domain-ssl
+
+updating ssl certificate for domain
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-update-mail-domain-ssl admin domain.com /home/admin/tmp
+```
+
+This function updates the SSL certificate for a domain. Parameter ssl_dir is a path
+to directory where 2 or 3 ssl files can be found. Certificate file
+domain.tld.crt and its key domain.tld.key are mandatory. Certificate
+authority domain.tld.ca file is optional.
+
+## v-update-mail-domains-disk
+
+calculate disk usage for all mail domains
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-mail-domains-disk admin
+```
+
+This function calculates disk usage for all mail domains.
+
+## v-update-mail-templates
+
+update mail templates
+
+**Options**: `[RESTART]` `[SKIP]`
+
+This function for obtaining updated webmail templates from Hestia package.
+
+## v-update-sys-defaults
+
+update default key database
+
+**Options**: `[SYSTEM]`
+
+**Examples**:
+
+```bash
+v-update-sys-defaults
+example: v-update-sys-defaults user
+```
+
+This function updates the known key/value pair database
+
+## v-update-sys-hestia
+
+update hestia package/configs
+
+**Options**: `PACKAGE`
+
+**Examples**:
+
+```bash
+v-update-sys-hestia hestia-php
+```
+
+This function runs as apt update trigger. It pulls shell script from hestia
+server and runs it. (hestia, hestia-nginx and hestia-php are valid options)
+
+## v-update-sys-hestia-all
+
+update all hestia packages
+
+**Options**: –
+
+This function of updating all hestia packages
+
+## v-update-sys-hestia-git
+
+Install update from Git repository
+
+**Options**: `REPOSITORY` `BRANCH` `INSTALL` `[PACKAGES]`
+
+**Examples**:
+
+```bash
+v-update-sys-hestia-git hestiacp staging/beta install
+# Will download from the hestiacp repository
+# Pulls code from staging/beta branch
+# install: installs package immediately
+# install-auto: installs package and schedules automatic updates from Git
+```
+
+Downloads and compiles/installs packages from GitHub repositories
+
+## v-update-sys-ip
+
+update system ip
+
+**Options**: –
+
+**Examples**:
+
+```bash
+v-update-sys-ip
+# Intended for internal usage
+```
+
+This function scans configured ip in the system and register them with hestia
+internal database. This call is intended for use on vps servers, where ip is
+set by hypervisor.
+
+## v-update-sys-ip-counters
+
+update IP usage counters
+
+**Options**: `IP`
+
+Function updates usage U_WEB_ADOMAINS and U_SYS_USERS counters.
+
+## v-update-sys-queue
+
+update system queue
+
+**Options**: `PIPE`
+
+This function is responsible queue processing. Restarts of services,
+scheduled backups, web log parsing and other heavy resource consuming
+operations are handled by this script. It helps to optimize system behaviour.
+In a nutshell Apache will be restarted only once even if 10 domains are
+added or deleted.
+
+## v-update-sys-rrd
+
+update system rrd charts
+
+**Options**: –
+
+This function is wrapper for all rrd functions. It updates all
+v-update-sys-rrd\_\* at once.
+
+## v-update-sys-rrd-apache2
+
+update apache2 rrd
+
+**Options**: `PERIOD`
+
+This function is for updating apache rrd database and graphic.
+
+## v-update-sys-rrd-ftp
+
+update ftp rrd
+
+**Options**: `PERIOD`
+
+This function is for updating ftpd rrd database and graphic.
+
+## v-update-sys-rrd-httpd
+
+update httpd rrd
+
+**Options**: `PERIOD`
+
+This function is for updating apache rrd database and graphic.
+
+## v-update-sys-rrd-la
+
+update load average rrd
+
+**Options**: `PERIOD`
+
+This function is for updating load average rrd database and graphic.
+
+## v-update-sys-rrd-mail
+
+update mail rrd
+
+**Options**: `PERIOD`
+
+This function is for updating mail rrd database and graphic.
+
+## v-update-sys-rrd-mem
+
+update memory rrd
+
+**Options**: `PERIOD`
+
+This function is for updating memory rrd database and graphic.
+
+## v-update-sys-rrd-mysql
+
+update MySQL rrd
+
+**Options**: `PERIOD`
+
+This function is for updating mysql rrd database and graphic.
+
+## v-update-sys-rrd-net
+
+update network rrd
+
+**Options**: `PERIOD`
+
+This function is for updating network usage rrd database and graphic.
+
+## v-update-sys-rrd-nginx
+
+update nginx rrd
+
+**Options**: `PERIOD`
+
+This function is for updating nginx rrd database and graphic.
+
+## v-update-sys-rrd-pgsql
+
+update PostgreSQL rrd
+
+**Options**: `PERIOD`
+
+This function is for updating postgresql rrd database and graphic.
+
+## v-update-sys-rrd-ssh
+
+update ssh rrd
+
+**Options**: `PERIOD`
+
+This function is for updating ssh rrd database and graphic.
+
+## v-update-user-backup-exclusions
+
+update backup exclusion list
+
+**Options**: `USER` `FILE`
+
+**Examples**:
+
+```bash
+v-update-user-backup-exclusions admin /tmp/backup_exclusions
+```
+
+This function for updating backup exclusion list
+
+## v-update-user-counters
+
+update user usage counters
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-user-counters admin
+```
+
+Function updates usage counters like U_WEB_DOMAINS, U_MAIL_ACCOUNTS, etc.
+
+## v-update-user-disk
+
+update user disk usage
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-user-disk admin
+```
+
+The functions recalculates disk usage and updates database.
+
+## v-update-user-package
+
+update user package
+
+**Options**: `PACKAGE`
+
+**Examples**:
+
+```bash
+v-update-user-package default
+```
+
+This function propagates package to connected users.
+
+## v-update-user-quota
+
+update user disk quota
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-user-quota alice
+```
+
+The functions upates disk quota for specific user
+
+## v-update-user-stats
+
+update user statistics
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-user-stats admin
+```
+
+Function logs user parameters into statistics database.
+
+## v-update-web-domain-disk
+
+update disk usage for domain
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-update-web-domain-disk alice wonderland.com
+```
+
+This function recalculates disk usage for specific webdomain.
+
+## v-update-web-domain-ssl
+
+updating ssl certificate for domain
+
+**Options**: `USER` `DOMAIN` `SSL_DIR` `[RESTART]`
+
+**Examples**:
+
+```bash
+v-update-web-domain-ssl admin domain.com /home/admin/tmp
+```
+
+This function updates the SSL certificate for a domain. Parameter ssl_dir is a path
+to directory where 2 or 3 ssl files can be found. Certificate file
+domain.tld.crt and its key domain.tld.key are mandatory. Certificate
+authority domain.tld.ca file is optional.
+
+## v-update-web-domain-stat
+
+update domain statistics
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-update-web-domain-stat alice acme.com
+```
+
+This function runs log analyser for specific webdomain.
+
+## v-update-web-domain-traff
+
+update domain bandwidth usage
+
+**Options**: `USER` `DOMAIN`
+
+**Examples**:
+
+```bash
+v-update-web-domain-traff admin example.com
+```
+
+This function recalculates bandwidth usage for specific domain.
+
+## v-update-web-domains-disk
+
+update domains disk usage
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-web-domains-disk alice
+```
+
+This function recalculates disk usage for all user webdomains.
+
+## v-update-web-domains-stat
+
+update domains statistics
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-web-domains-stat admin
+```
+
+This function runs log analyser usage for all user webdomains.
+
+## v-update-web-domains-traff
+
+update domains bandwidth usage
+
+**Options**: `USER`
+
+**Examples**:
+
+```bash
+v-update-web-domains-traff bob
+```
+
+This function recalculates bandwidth usage for all user webdomains.
+
+## v-update-web-templates
+
+update web templates
+
+**Options**: `[RESTART]` `[SKIP]`
+
+This function for obtaining updated web (Nginx/Apache2/PHP) templates from the Hestia package.

+ 168 - 0
docs/docs/server-administration/backup-restore.md

@@ -0,0 +1,168 @@
+# Backup & Restore
+
+## How do I move a user to a new server?
+
+The current restore function accepts backups generated by both VestaCP
+and HestiaCP.
+
+1. Create a user backup on the old server.
+
+   ```bash
+   $ v-backup-user username
+   ```
+
+2. Copy the generated tarball to the new server and place it in `/backup`.
+
+   ```bash
+   $ scp /backup/username.2020.01.01-00-00.tar root@host.domain.tld:/backup/
+   ```
+
+3. Restore the backup on the new server. You can restore to a different user by changing the username in the command.
+
+   ```bash
+   $ v-restore-user username username.2020.01.01-00-00.tar
+   ```
+
+User accounts that do not exist will be created.
+
+## What kind of backups are able to be restored?
+
+Currently HestiaCP only support restoring backups made using:
+
+1. HestiaCP
+2. VestaCP
+
+## How to edit the number of backups?
+
+To edit the number of backups, please read the [Packages](../user-guide/packages.md) and [Users](../user-guide/users.md) documentation. You will need to create or edit a package, and assign it to the desired user.
+
+## Not enough disk space available to preform the backup
+
+For safety reasons, Hestia takes into account 2x the user’s disk usage when creating a backup. Therefore, before starting a backup, we check how much disk usage a user has left. If you encounter this error, you can do one of the following to solve the issue:
+
+- Reduce the amount of backups saved per user saved.
+- Move the backups to a remote storage.
+- Move the backup folder to a different drive.
+- Split up the user in multiple users.
+- Exclude certain folders or mail accounts from the backup.
+
+## What is the difference between zstd and gzip
+
+zstd was developed by Facebook as a replacement for gzip. During our testing, we found a significant speed increase and lower disk space usage when compared to gzip.
+
+For more information see [the zstd repo](https://github.com/facebook/zstd).
+
+## What is the optimal compression ratio
+
+The higher the number how better the compression ratio. During our testing, we discoverd that zstd level 3 is similar to level 9 for disk space, however it is much faster. zstd level 11 took about the same time, but gave us a smaller size. Levels higher than 19 should never be used, as zstd then becomes terribly slow.
+
+## What kind of protocols are currently supported
+
+Currently supported backup protocols are:
+
+- FTP
+- SFTP
+- Rclone, which supports up to 50 different cloud providers. [See its documentation](https://rclone.org)
+
+## How to setup an FTP backup server
+
+Login via SSH and run the following command as root:
+
+```bash
+v-add-backup-host 'ftp' 'remote.ftp-host.ltd' 'backup-user' 'p4ssw0rd' '/path-backups/' 'port'
+```
+
+### How to setup an SFTP backup server
+
+::: warning
+Please note passwords are stored as **plain text** on the server. They are only accessible by the root user, but if you want to use a more secure authentication method, use public and private keys.
+:::
+
+Login via SSH and run the following command as root:
+
+```bash
+v-add-backup-host 'sftp' 'remote.ftp-host.ltd' 'backup-user' 'p4ssw0rd' '/path-backups/' 'port'
+```
+
+If using public and private keys (recommended):
+
+```bash
+v-add-backup-host 'sftp' 'remote.ftp-host.ltd' 'backup-user' '/root/id_rsa' '/path-backups/' 'port'
+```
+
+## How to setup rclone
+
+::: tip
+Initial configuration can only be done via CLI. After that, you can update the settings via the web panel.
+:::
+
+First, download [rclone](https://rclone.org/downloads/). The easiest method is to run this command:
+
+```bash
+sudo -v
+curl https://rclone.org/install.sh | sudo bash
+```
+
+Once the download and installation is complete, run `rclone config` and then `n`. Follow the instruction on the screen, then save when completed.
+
+Once the config has been saved you can setup Hestia with the following command:
+
+```bash
+v-add-backup-host 'rclone' 'config_name' '' '' 'Bucket or Folder name' ''
+```
+
+::: tip
+B2 requires you to setup a bucket during the `v-add-backup-host` stage. S3 or R2 storage will work fine during the setup stage.
+:::
+
+## How to change default backup folder
+
+For security reasons, symlinks are not allowed. To change the default backup folder, you can do the following:
+
+1. Make sure backup folder is currently set to `/backup`.
+2. If it has something in it, delete it and recreate it. You can use an FTP client or type `mkdir /backup` in the console.
+3. Mount the desired folder to `/backup`, using `mount`:
+   ```bash
+   mount --bind /path/to/new/backup/folder /backup
+   ```
+
+For a permanent fix you should add a record to `fstab`, so this folder would mount on your system boot:
+
+1. Open `/etc/fstab`.
+2. Add the following line to the end:
+   ```bash
+   /path/to/new/backup/folder /backup none defaults,bind 0 0
+   ```
+3. Save the file.
+
+## How to extract .zstd file
+
+Follow the instructions below or use WinRAR 6.10 or later to unpack .zst files.
+
+### How to extract the domain_data.tar.zst in windows using zstd.exe
+
+1. Download and unzip zstd.exe. It is available on the [zstd GitHub](https://github.com/facebook/zstd/releases/).
+2. To decompress the backup, use the following command:
+
+   ```batch
+   {dir_to_zstd}\zstd.exe -o {dir_to_file}\{file}.tar.zst
+   ```
+
+   For example:
+
+   ```batch
+   C:\Users\{user}\Downloads\zstd-v1.4.4-win64\zstd.exe -d c:\Users\{user}\Downloads\admin.2021-06-27_05-48-23\web\{domain}\domain_data.tar.zst
+   ```
+
+   Output:
+
+   ```batch
+   C:\Users\{user}\Downloads\admin.2021-06-27_05-48-23\web\{domain}\domain_data.tar.zst: 61440 bytes
+   ```
+
+3. Use your preferred program to untar the resulting tarball, and you are done.
+   In this case, the tar was outputted to:
+
+   ```batch
+   C:\Users\{user}\Downloads\admin.2021-06-27_05-48-23\web\{domain}\domain_data.tar
+   ```

+ 137 - 0
docs/docs/server-administration/configuration.md

@@ -0,0 +1,137 @@
+# Server configuration
+
+## I am not able to login
+
+For installing dependencies we use Composer. As are currently not able
+to run it under hestia-php version. We install it via /usr/bin/php. Make
+sure proc_open is allowed in the main php version. In the future we look
+in methods to allow install via composer via hestia-php.
+
+## Where can I find more information about the config files?
+
+A good starting point for every software is to check the official docs:
+
+- For Nginx: [NGINX Docs](https://nginx.org/en/docs/)
+- For Apache2: [Apache Docs](http://httpd.apache.org/docs/2.4/)
+- For PHP-FPM: [PHP Docs](https://www.php.net/manual/en/install.fpm.configuration.php)
+
+You could also try [our Forum](https://forum.hestiacp.com)
+
+## Can I use HestiaCP behind Cloudflare CDN?
+
+By default the [Cloudflare Proxy](https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/) supports only a limited number of ports. This means that Cloudflare will not forward port 8083, which is the default port for Hestia. To change the Hestia port to one that Cloudflare will forward, run this command:
+
+```bash
+v-change-sys-port 2083
+```
+
+You can also disable Cloudflare proxy feature.
+
+## How to remove unused ethernet ports from RRD?
+
+```bash
+nano /usr/local/hestia/conf/hestia.conf
+```
+
+Add the following line:
+
+```bash
+RRD_IFACE_EXCLUDE='lo'
+```
+
+Add network ports as comma separated list
+
+```bash
+rm /usr/local/hestia/web/rrd/net/*
+systemctl restart hestia
+```
+
+## What does the “Enforce subdomain ownership” policy mean?
+
+In Hestia <=1.3.5 and Vesta, it was possible for users to create subdomains from domains that were owned by other users. For example, user Bob could create `bob.alice.com`, even if `alice.com` is owned by Alice. This could cause security issues and therefor we have decided to add a policy to control this behaviour. By default, the policy is enabled.
+
+You can tweak the policy for a specific domain and user, for example for a domain that has been used for testing:
+
+```bash
+# to enable
+v-add-web-domain-allow-users user domain.tld
+# to disable
+v-delete-web-domain-allow-users user domain.tld
+```
+
+## Can I restrict access to the `admin` account?
+
+In Hestia 1.3, we have made it possible to give another user Administrator access. In 1.4, we have given system administrators the option to limit access to the main **System Administrator** account to improve security.
+
+## My server IP has changed, what do I need to do?
+
+When a server IP changes, you need to run the following command, which will rebuild all config files:
+
+```bash
+v-update-sys-ip
+```
+
+## Unable to bind adress
+
+In rare cases the network service might be slower than Apache2 and or Nginx. In that case, Nginx or Apache2 will refuse to successfully start. You can verify that this is the case by looking at the service’s status:
+
+```bash
+systemctl status nginx
+
+# Output
+nginx: [emerg] bind to x.x.x.x:80 failed (99: cannot assign requested address)
+```
+
+Or, in case of Apache2:
+
+```bash
+systemctl status httpd
+
+# Output
+(99)Cannot assign requested address: AH00072: make_sock: could not bind to address x.x.x.x:8443
+```
+
+The following command should allow services to assign to non existing IP addresses:
+
+```bash
+sysctl -w net.ipv4.ip_nonlocal_bind=1
+```
+
+## I am unable to monitor processes with Zabbix
+
+For security reasons, users are not allowed to monitor processes from other users by default.
+
+To solve the issue if you use monitoring via Zabbix, edit `/etc/fstab` and modify it to the following, then reboot the server or remount `/proc`:
+
+```bash
+proc /proc proc defaults,hidepid=2,gid=zabbix 0 0
+```
+
+## Error: 24: Too many open files
+
+If you see an error similar to this:
+
+```bash
+2022/02/21 15:04:38 [emerg] 51772#51772: open() "/var/log/apache2/domains/domain.tld.error.log" failed (24: Too many open files)
+```
+
+It means that there are too many open files with Nginx. To resolve this issue, edit the Nginx daemon config, then reload the daemons by running `systemctl daemon-reload`:
+
+```bash
+# /etc/systemd/system/nginx.service.d/override.conf
+[Service]
+LimitNOFILE=65536
+```
+
+Add this to the Nginx config file (Needs to be smaller or equal to `LimitNOFILE`)
+
+```bash
+# /etc/nginx/nginx.conf
+worker_rlimit_nofile 16384
+```
+
+Restart Nginx with `systemctl restart nginx`, and verify the new limits by running:
+
+```bash
+cat /proc/ < nginx-pid > /limits.
+```

+ 70 - 0
docs/docs/server-administration/customisation.md

@@ -0,0 +1,70 @@
+# Customisation
+
+::: warning
+We currently only support changing the layout via CSS. You can customise HTML files and templates, but they **will** be overwritten during updates, so make sure to [set up hooks](#running-commands-before-and-after-updates) to restore your changes after an update.
+:::
+
+## Adding a new theme
+
+Create a new theme in `/usr/local/hestia/web/css/theme/custom/my_theme.css`
+
+```css
+.body-login,
+.body-reset {
+	height: auto;
+	padding-top: 10%;
+	background: rgb(231, 102, 194) !important;
+	background: radial-gradient(circle, rgba(231, 102, 197, 1), rgba(174, 43, 177, 1)) !important;
+}
+```
+
+## Customising a default theme
+
+Changes to default themes are always overwritten during updates. However, via the `v-add-sys-theme` command, you can create a new theme.
+
+If you want to edit the dark theme,
+
+```bash
+cp $HESTIA/install/deb/themes/dark.css /root/my_dark.css
+```
+
+Apply your changes and follow the instructions above.
+
+## Customising the _Domain not found_ page
+
+The _Domain not found_ page is located in `/var/www/html/index.html`. You can edit it using the following command:
+
+```bash
+nano /var/www/html/index.html
+```
+
+## Customising the default domain skeleton structure
+
+The default structure that will be added to a domain when it gets created is located in `/usr/local/hestia/data/templates/web/skel/public_html`.
+
+## Running commands before and after updates
+
+With the release of Hestia 1.4.6 we have added pre-install and post-install hooks. For example, you can use hooks to:
+
+- Disable and enable demo mode before and after an update.
+- Restore a customised skeleton page.
+
+Hooks are located in one of the following files:
+
+- `/etc/hestiacp/hooks/pre_install.sh`
+- `/etc/hestiacp/hooks/post_install.sh`
+
+::: tip
+Don’t forget to make the file executable by running `chmod +x /etc/hestiacp/hooks/[file].sh`.
+:::
+
+For example, to disable demo mode on pre-install:
+
+```bash /etc/hestiacp/hooks/pre_install.sh
+#!/bin/bash
+sed -i "s|^DEMO_MODE=.*'|DEMO_MODE='no'|g" $HESTIA/conf/hestia.conf
+```
+
+::: warning
+If you use custom error documents you will have to rebuild all websites again!
+:::

+ 89 - 0
docs/docs/server-administration/databases.md

@@ -0,0 +1,89 @@
+# Database & phpMyAdmin SSO
+
+## How to setup a remote database server
+
+1. It is assumed you already have your second server up and running.
+2. On your Hestia server run the following command (`mysql` may be replaced by `postgresql`):
+
+```bash
+v-add-database-host mysql new-server.com root password
+```
+
+To make sure the host has been added, run the following command:
+
+```bash
+v-list-database-hosts
+```
+
+## Why I can’t use `http://ip/phpmyadmin/`
+
+For security reasons, we have decided to disable this option. Please use `https://host.domain.tld/phpmyadmin/` instead.
+
+## How can I enable access to `http://ip/phpmyadmin/`
+
+### For Apache2
+
+```bash
+nano /etc/apache2/conf.d/ip.conf
+
+# Add the following code before both </VirtualHost> closing tags
+IncludeOptional /etc/apache2/conf.d/*.inc
+
+# Restart apache2
+systemctl restart apache2
+
+# You can also add the following in /etc/apache2.conf instead
+IncludeOptional /etc/apache2/conf.d/*.inc
+```
+
+### For Nginx
+
+```bash
+nano /etc/nginx/conf.d/ip.conf
+
+# Replace the following
+location /phpmyadmin/ {
+  alias /var/www/document_errors/;
+  return 404;
+}
+location /phppgadmin/ {
+  alias /var/www/document_errors/;
+  return 404;
+}
+
+# With the following
+include     /etc/nginx/conf.d/phpmyadmin.inc*;
+include     /etc/nginx/conf.d/phppgadmin.inc*;
+```
+
+## How can I connect from a remote location to the database
+
+By default, connections to port 3306 are disabled in the firewall. Open
+port 3306 in the firewall ([documentation](./firewall.md)), then edit `/etc/mysql/mariadb.conf.d/50-server.cnf`:
+
+```bash
+nano /etc/mysql/mariadb.conf.d/50-server.cnf
+
+# Set bind-address to one of the following
+bind-address = 0.0.0.0
+bind-address = "your.server.ip.address"
+```
+
+## PhpMyAdmin Single Sign On
+
+### Unable to activate phpMyAdmin Single Sign on
+
+Make sure the API is enabled and working properly. Hestia’s PhpMyAdmin Single Sign On function connects over the Hestia API.
+
+### When clicking the phpMyAdmin Single Sign On button, I am forwarded to the login page of phpMyAdmin
+
+Automated can sometimes cause issues. Login via SSH and open `/var/log/{webserver}/domains/{hostname.domain.tld.error.log` and look for one of the following error messages:
+
+- `Unable to connect over API, please check API connection`
+  1. Check if the api has been enabled.
+  2. Add the public IP of your server to the allowed IPs in the **Server settings**.
+- `Access denied: There is a security token mismatch`
+  1. Enable and then disable the API. This will refresh both keys.
+  2. If you are behind a firewall or proxy, you may want to disable it and try again.
+- `Link has expired`
+  1. Refresh the database page and try again.

+ 162 - 0
docs/docs/server-administration/dns.md

@@ -0,0 +1,162 @@
+# DNS clusters and DNSSEC
+
+::: info
+With the release of version 1.7.0, we have implemented support for DNSSEC. DNSSEC requires a Master -> Slave setup. IF the existing implementation is a Master <-> Master setup, it is not supported. DNSSEC also requires at least Ubuntu 22.04 or Debian 11!
+:::
+
+## Host your DNS on Hestia
+
+[Create a DNS Zone](../user-guide/dns.md#adding-a-dns-zone) with the **child-ns** template, then login to your domain registrar’s panel and change the name servers of the domain. Depending your registrar panel, you could be able to create glue records. You may need to wait for up to 24 hours before the name servers become active.
+
+## DNS Cluster setup
+
+If you are looking at options to minimise DNS-related downtime or for a way to manage DNS across all your servers, you might consider setting up a DNS cluster.
+
+1. Whitelist your master server IP in **Configure Server** -> **Security** -> **Allowed IP addresses for API**, otherwise you will get an error when adding the slave server to the cluster.
+2. Enable API access for admins (or all users).
+3. Create an API key under the **admin** user with at least the **sync-dns-cluster** permission.
+
+::: info
+With the release of 1.6.0, we have implemented a new API authentication system. We strongly suggest using this method instead of the old system, as it is more secure due to the length of the access key and secret key!
+
+If you still want to use the legacy API to authenticate with **admin** username and the password make sure **Enable legacy API** access is set to **yes**.
+:::
+
+### DNS Cluster with the Hestia API (Master <-> Master)
+
+::: warning
+This method does not support DNSSEC!
+:::
+
+1. Create a new user on the Hestia server that will act as a “Slave”.
+2. Run the following command to enable the DNS server.
+
+```bash
+v-add-remote-dns-host slave.yourhost.com 8083 'accesskey:secretkey' '' 'api' 'dns-user'
+```
+
+Or if you still want to use admin and password authentication
+
+```bash
+v-add-remote-dns-host slave.yourhost.com 8083 'admin' 'strongpassword' 'api' 'dns-user'
+```
+
+This way you can set up Master -> Slave or Master <-> Master <-> Master cluster.
+
+There is no limitation on how to chain DNS servers.
+
+### DNS Cluster with the Hestia API (Master -> Slave)
+
+1. Create a new user on the Hestia server that will act as a “Slave”.
+2. In `/usr/local/hestia/conf/hestia.conf`, change `DNS_CLUSTER_SYSTEM='hestia'` to `DNS_CLUSTER_SYSTEM='zone'`.
+3. On the master server, open `/etc/bind/named.options`, do the following changes, then restart bind9 with `systemctl restart bind9`.
+
+   ```bash
+   # Change this line
+   allow-transfer { "none"; };
+   # To this
+   allow-transfer { your.slave.ip.address; };
+   # Or this, if adding multiple slaves
+   allow-transfer { first.slave.ip.address; second.slave.ip.address; };
+   # Add this line, if adding multiple slaves
+   also-notify { second.slave.ip.address; };
+   ```
+
+4. On the slave server, open `/etc/bind/named.options`, do the following changes, then restart bind9 with `systemctl restart bind9`:
+
+   ```bash
+   # Change this line
+   allow-recursion { 127.0.0.1; ::1; };
+   # To this
+   allow-recursion { 127.0.0.1; ::1; your.master.ip.address; };
+   # Add this line
+   allow-notify{ your.master.ip.address; };
+   ```
+
+5. Run the following command to enable the DNS server:
+
+   ```bash
+   v-add-remote-dns-host slave.yourhost.com 8083 'accesskey:secretkey' '' 'api' 'dns-user'
+   ```
+
+   If you still want to use admin and password authentication:
+
+   ```bash
+   v-add-remote-dns-host slave.yourhost.com 8083 'admin' 'strongpassword' 'api' 'dns-user'
+   ```
+
+### Converting an existing DNS cluster to Master -> Slave
+
+1. In `/usr/local/hestia/conf/hestia.conf`, change `DNS_CLUSTER_SYSTEM='hestia'` to `DNS_CLUSTER_SYSTEM='zone'`.
+2. On the master server, open `/etc/bind/named.options`, do the following changes, then restart bind9 with `systemctl restart bind9`.
+
+   ```bash
+   # Change this line
+   allow-transfer { "none"; };
+   # To this
+   allow-transfer { your.slave.ip.address; };
+   # Or this, if adding multiple slaves
+   allow-transfer { first.slave.ip.address; second.slave.ip.address; };
+   # Add this line, if adding multiple slaves
+   also-notify { second.slave.ip.address; };
+   ```
+
+3. On the slave server, open `/etc/bind/named.options`, do the following changes, then restart bind9 with `systemctl restart bind9`:
+
+   ```bash
+   # Change this line
+   allow-recursion { 127.0.0.1; ::1; };
+   # To this
+   allow-recursion { 127.0.0.1; ::1; your.master.ip.address; };
+   # Add this line
+   allow-notify{ your.master.ip.address; };
+   ```
+
+4. Update DNS with `v-sync-dns-cluster`
+
+## Enabling DNSSEC
+
+::: warning
+DNSSEC can’t be used when Hestia Cluster is active as Master <-> Master
+:::
+
+To enable DNSSEC, check the checkbox in-front of DNSSEC and save.
+
+To view the public key. Got to the list DNS domains and click the <i class="fas fas-key"></i> icon.
+
+Depending on your registrar, you will either be able to create a new record based on the DNSKEY or based on DS key. After the DNSSEC public key has been added to the registrar, DNSSEC is enabled and live.
+
+::: danger
+Removing or disabling the private key in Hestia will make the domain inaccessble.
+:::
+
+## Can I separate DNS accounts by users
+
+Yes, you can just supply the user variable at the end of the command.
+
+```bash
+v-add-remote-dns-host slave.yourhost.com 8083 admin p4sw0rd '' useraccount
+```
+
+Or
+
+```bash
+v-add-remote-dns-host slave.yourhost.com 8083 api_key '' '' useraccount
+```
+
+With the new API system, you can also replace `api_key` with `access_key:secret_key`
+
+::: info
+Please note that currently, only the user `dns-user` is exempted from syncing to other servers. If you have a DNS cluster with multiple master slaves you might run in issues.
+:::
+
+## I am not able to add a server as DNS host
+
+When trying to add a DNS server for a cluster I get the following error:
+
+```bash
+/usr/local/hestia/func/remote.sh: line 43: return: Error:: numeric argument required
+Error: api connection to slave.domain.tld failed
+```
+
+By default, API access has been disabled for non-local IP addresses. Please add your IP address to the **Allowed IP adresses for API** field in the server settings.

+ 104 - 0
docs/docs/server-administration/email.md

@@ -0,0 +1,104 @@
+# Email and mail server
+
+## How do I setup internal mail to be sent over SMTP?
+
+By default, emails generated by Hestia (Notifications, Forgot password, update logs, etc.) are sent the internal mail. If you want, you can setup mail to be send over a SMTP account.
+
+Execute the following script and follow the instructions:
+
+```bash
+bash /usr/local/hestia/install/upgrade/manual/configure-server-smtp.sh
+```
+
+## I am unable to send email
+
+First, check that port 25 is open for outgoing traffic. A lot of providers block port 25 by default to combat spam.
+
+To do so, run the following command:
+
+```bash
+telnet ASPMX.L.GOOGLE.COM 25
+```
+
+If the connection was successful you will see something similar to this:
+
+```bash
+Trying 2a00:1450:400c:c00::1b...
+Connected to ASPMX.L.GOOGLE.COM.
+Escape character is '^]'.
+220 mx.google.com ESMTP a7si1253985wrr.455 - gsmtp
+```
+
+If not, you have 2 options:
+
+1. Contact you provider and ask them to open port 25 for outgoing traffic.
+2. Setup a mail relay under the mail domain settings or set it up generally for the server in system settings. For this you need to use an SMTP relay service like:
+   - [Amazon SES](https://aws.amazon.com/ses/)
+   - [SMTP2GO](https://www.smtp2go.com)
+   - [Sendinblue](https://www.sendinblue.com)
+
+## I am unable to receive email
+
+If you are unable to receive emails, make sure you have setup your DNS properly. If you are using Cloudflare, disable the use of the proxy for `mail.domain.tld`.
+
+When you are done you can check the configuration via [MXToolBox](https://mxtoolbox.com/MXLookup.aspx).
+
+## How do I install Rainloop?
+
+You can install Rainloop by running the following command:
+
+```bash
+v-add-sys-rainloop
+```
+
+## Can I login into the backend of Rainloop
+
+In the root folder, there is an file called `.rainloop` containing the username and password:
+
+```bash
+Username: admin_f0e5a5aa
+Password: D0ung4naLOptuaa
+Secret key: admin_f0e5a5aa
+```
+
+You can access the admin by navigating to `https://webmail.domain.tld/?admin_f0e5a5aa`, and login by using the data you found in the file. Once it’s not needed anymore, remove the file, for security reasons.
+
+## Can I use Cloudflare Proxy with email
+
+No, Cloudflare’s Proxy does not work with email. If you use email hosted on you server, make sure the proxy for the A record `mail.domain.tld` is switched off. Otherwise, you will not be able receive emails. The following records are suggested if you want to use Hestia as your mail server:
+
+- A record with name **mail** pointing to your server IP.
+- A record with name **webmail** pointing to your server IP.
+- MX record with name **@** with pointing to `mail.domain.tld`.
+- TXT record with name **@** containing `v=spf1 a mx ip4:your ip; \~all`
+- TXT record with name **\_domainkey** containing `t=y; o=~;`
+- TXT record with name **mail.\_domainkey** containing `t=y; o=~DKIM key;`
+- TXT record with name **\_dmarc** containing `v=DMARC1; p=quarantine; sp=quarantine; adkim=s; aspf=s;`
+
+The DKIM key and SPF record can be found in the **Mail Domains** list ([documentation](../user-guide/mail-domains.md#get-dns-records)).
+
+## When sending send emails from my server, they end up in the spam folder
+
+Make sure you have set up the correct RDNS, SPF records and DKIM records.
+
+If this doesn’t work, it’s be possible that your IP address is on one or more blacklists. You can try to unblock yourself, but often the easier method is to use SMTP and SMTP Relay with Amazon SES or another SMTP provider.
+
+## How can I enable ManageSieve?
+
+During Hestia’s installation, use the `--sieve` flag. If Hestia is already installed, there is a an upgrade script provided at the following path: `/usr/local/hestia/install/upgrade/manual/install_sieve.sh`
+
+## Can I allow access to ManageSieve via an external mail client?
+
+Open port 4190 in the firewall. [Read the firewall documentation](./firewall.md).
+
+## How can I enable ManageSieve for Rainloop?
+
+Edit `/etc/rainloop/data/_data_/_default_/domains/default.ini` and modify the following settings:
+
+```bash
+sieve_use = On
+sieve_allow_raw = Off
+sieve_host = "localhost"
+sieve_port = 4190
+sieve_secure = "None"
+```

+ 53 - 0
docs/docs/server-administration/file-manager.md

@@ -0,0 +1,53 @@
+# File manager
+
+## How can I enable or disable the file manager
+
+In a new install, the file manager will be enabled by default.
+
+To enable or update the file manager, please run the following command:
+
+```bash
+v-add-sys-filemanager
+```
+
+To disable the file manager, please run the following command:
+
+```bash
+v-delete-sys-filemanager
+```
+
+## File manager gives “Unknown Error” message
+
+This seems to occur specifically when the line `Subsystem sftp /usr/lib/openssh/sftp-server` is removed or changed in `/etc/ssh/sshd_config` in such a way that the install script cannot update it to `Subsystem sftp internal-sftp`.
+
+Short answer: add `Subsystem sftp internal-sftp` to `/etc/ssh/sshd_config`.
+
+Long answer: Refer to the install script `./install/hst-install-{distro}.sh` for all the changes made to `/etc/ssh/sshd_config`. For Debian, the changes can be summarised as follows:
+
+```bash
+# HestiaCP Changes to the default /etc/ssh/sshd_config in Debian 10 Buster
+
+# Forced default yes
+PasswordAuthentication yes
+
+# Changed from default 2m to 1m
+LoginGraceTime 1m
+
+# Changed from default /usr/lib/openssh/sftp-server to internal-sftp
+Subsystem sftp internal-sftp
+
+# Changed from default yes
+DebianBanner no
+```
+
+Changing all of the other parameters to their defaults and also changing to `PasswordAuthentication no` did not reproduce the error, thus it would seem to be isolated to the `Subsystem sftp internal-sftp` parameter.
+
+For more information regarding debugging, inspect the Hestia Nginx log:
+
+```bash
+tail -f -s0.1 /var/log/hestia/nginx-error.log
+```
+
+## I changed SSH port and I cannot use the file manager anymore
+
+The SSH port is loaded in a PHP session. Logging out and logging back in will reset the session, fixing the issue.

+ 72 - 0
docs/docs/server-administration/firewall.md

@@ -0,0 +1,72 @@
+# Firewall
+
+::: warning
+After every restart, Hestia will clear the current iptables unless the rules are added via Hestia.
+:::
+
+## How can I open or block a port or IP?
+
+1. Navigate to the server settings by clicking the <i class="fas fa-fw fa-cog"><span class="visually-hidden">Server</span></i> icon in the top right.
+2. Click the **<i class="fas fa-fw fa-shield-alt"></i> Firewall** button.
+3. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Rule** button.
+4. Select the desired action.
+5. Select the desired protocol.
+6. Enter the port(s) you want this rule to apply to (`0` for all ports).
+7. Set the IP this rule applies to (`0.0.0.0/0` for all IPs) or select an IPSet.
+8. Optionally describe the rule’s function.
+9. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+You can also use the [v-add-firewall-rule](../reference/cli.md#v-add-firewall-rule) command.
+
+## How do I setup an IPSet blacklist or whitelist?
+
+IPSet are large lists of IP adresses or subnets. They can be used for blacklists and whitelists.
+
+1. Navigate to the server settings by clicking the <i class="fas fa-fw fa-cog"><span class="visually-hidden">Server</span></i> icon in the top right.
+2. Click the **<i class="fas fa-fw fa-shield-alt"></i> Firewall** button.
+3. Click the **<i class="fas fa-fw fa-list"></i> Manage IP lists** button.
+4. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add IP list** button.
+5. Name your IP list.
+6. Select the data source by entering one of the following:
+   - URL: `http://ipverse.net/ipblocks/data/countries/nl.zone`
+   - Script (with `chmod 755`): `/usr/local/hestia/install/deb/firewall/ipset/blacklist.sh`
+   - File: `file:/location/of/file`
+   - You can also use one of Hestia’s included sources.
+7. Selected the desired IP version (v4 or v6).
+8. Choose whether to auto-update the list or not.
+9. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## My IPSet doesn’t work
+
+An IPSet must contain at least 10 IP or IP ranges.
+
+## Can I combine multiple sources in one?
+
+If you want to combine multiple IP sources together, you can do so by using the following script:
+
+```bash
+#!/bin/bash
+
+BEL=(
+	"https://raw.githubusercontent.com/ipverse/rir-ip/master/country/be/ipv4-aggregated.txt"
+	"https://raw.githubusercontent.com/ipverse/rir-ip/master/country/nl/ipv4-aggregated.txt"
+	"https://raw.githubusercontent.com/ipverse/rir-ip/master/country/lu/ipv4-aggregated.txt"
+)
+
+IP_BEL_TMP=$(mktemp)
+for i in "${BEL[@]}"; do
+	IP_TMP=$(mktemp)
+	((HTTP_RC = $(curl -L --connect-timeout 10 --max-time 10 -o "$IP_TMP" -s -w "%{http_code}" "$i")))
+	if ((HTTP_RC == 200 || HTTP_RC == 302 || HTTP_RC == 0)); then # "0" because file:/// returns 000
+		command grep -Po '^(?:\d{1,3}\.){3}\d{1,3}(?:/\d{1,2})?' "$IP_TMP" | sed -r 's/^0*([0-9]+)\.0*([0-9]+)\.0*([0-9]+)\.0*([0-9]+)$/\1.\2.\3.\4/' >> "$IP_BEL_TMP"
+	elif ((HTTP_RC == 503)); then
+		echo >&2 -e "\\nUnavailable (${HTTP_RC}): $i"
+	else
+		echo >&2 -e "\\nWarning: curl returned HTTP response code $HTTP_RC for URL $i"
+	fi
+	rm -f "$IP_TMP"
+done
+
+sed -r -e '/^(0\.0\.0\.0|10\.|127\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.|192\.168\.|22[4-9]\.|23[0-9]\.)/d' "$IP_BEL_TMP" | sort -n | sort -mu
+rm -f "$IP_BEL_TMP"
+```

+ 73 - 0
docs/docs/server-administration/os-upgrades.md

@@ -0,0 +1,73 @@
+# Operating system upgrades
+
+::: danger
+Before upgrading your operating system make sure to make a backup! We do not provide support for broken operating system installations. We only provide this page for information about Hestia issues that may come up while upgrading.
+:::
+
+## General
+
+::: info
+Make sure to verify that MariaDB is running on a supported version for the new operating system. If that is not the case, update MariaDB version to a supported version before upgrading your OS!
+:::
+
+Once a backup has been made, update Hestia to the last supported version:
+
+```bash
+apt update && apt upgrade
+```
+
+Follow system instructions to upgrade your OS. When done, make sure to check that the files in `/etc/apt/sources.list.d` are not hashed out. If they are, remove the hash and run `apt update && apt upgrade` again.
+
+## Debian 10 Buster to Debian 11 Bullseye
+
+### SHA512 password encryption
+
+```bash
+sed -i "s/obscure yescrypt/obscure sha512/g" /etc/pam.d/common-password
+```
+
+### Exim4 config
+
+```bash
+rm -f /etc/exim4/exim4.conf.template
+cp -f /usr/local/hestia/install/deb/exim/exim4.conf.4.94.template /etc/exim4/exim4.conf.template
+```
+
+### ProFTPD
+
+Comment out [line 29](https://github.com/hestiacp/hestiacp/blob/1ff8a4e5207aae1e241954a83b7e8070bcdca788/install/deb/proftpd/proftpd.conf#L29) in `/etc/profpd/prodtpd.conf`.
+
+## Debian 9 Stretch to Debian 10 Buster
+
+No issues have been found in the past.
+
+## Ubuntu 20.04 Focal to Ubuntu 22.04 Jammy
+
+::: tip
+Verify that MariaDB is running at least version 10.6. If not, first upgrade to this version in your current operating system! After that, comment out the line in `/etc/apt/sources.list.d/mariadb.list` and then upgrade your OS.
+:::
+
+### SHA512 password encryption
+
+```bash
+sed -i "s/obscure yescrypt/obscure sha512/g" /etc/pam.d/common-password
+```
+
+### Exim4 config
+
+```bash
+rm -f /etc/exim4/exim4.conf.template
+cp -f /usr/local/hestia/install/deb/exim/exim4.conf.4.94.template /etc/exim4/exim4.conf.template
+```
+
+### ProFTPD
+
+Comment out [line 29](https://github.com/hestiacp/hestiacp/blob/1ff8a4e5207aae1e241954a83b7e8070bcdca788/install/deb/proftpd/proftpd.conf#L29) in `/etc/profpd/prodtpd.conf`.
+
+## Ubuntu 18.04 Bionic to Ubuntu 20.04 Focal
+
+No issues have been found in the past.
+
+## Older versions
+
+We haven’t tested the upgrade paths from Ubuntu 16.04 to Ubuntu 20.04 or Debian 8 Jessy to Debian 10

+ 76 - 0
docs/docs/server-administration/rest-api.md

@@ -0,0 +1,76 @@
+# REST API
+
+The Hestia REST API is available to perform core functions of the Control Panel. For example, we use it internally to synchronise DNS clusters and to integrate the WHMCS billing system. The API can also be used to create new user accounts, domains, databases or even to build an alternative web interface.
+
+The [API reference](../reference/api.md) provides PHP code samples demonstrating how you can integrate the API into your application or script. However, you also can use any other language to communicate with the API.
+
+With the release of Hestia v1.6.0, we have introduced a more advanced API system and it will allow non-admin users to use specific commands.
+
+## I’m unable to connect to the API
+
+With the release of Hestia v1.4.0, we have decided the security needed to be tightened. If you want to connect to the API from a remote server, you will first need to whitelist its IP address. To add multiple addresses, separate them with a new line.
+
+## Can I disable the API?
+
+Yes, you can disable the API via the server settings. The file will be deleted from the server and all connections will get ignored. Please note that some functions may not work with the API disabled.
+
+## Password vs API key vs access keys
+
+### Password
+
+- Should only be used by the admin user.
+- Changing the admin password requires updating it everywhere it’s used.
+- Allowed to run all commands.
+
+### API key
+
+- Should only be used by the admin user.
+- Changing the admin password does not have consequences.
+- Allowed to run all commands.
+
+### Access keys
+
+- User-specific.
+- Can limit permissions. For example only `v-purge-nginx-cache`.
+- Ability to disable login via other methods but still allow the use of api keys
+- Can be restricted to admin user only or allowed for all users.
+
+## Setup access/secret key authentication
+
+To create an access key, follow [the guide in our documentation](../user-guide/account.md#api-access-keys).
+
+If the software you are using already supports the hash format, use `ACCESS_KEY:SECRET_KEY` instead of your old API key.
+
+## Create an API key
+
+::: warning
+This method has been replaced by the above access/secret key authentication. We **highly** recommend using this more secure method instead.
+:::
+
+Run the command `v-generate-api-key`.
+
+## Return codes
+
+| Value | Name          | Comment                                                      |
+| ----- | ------------- | ------------------------------------------------------------ |
+| 0     | OK            | Command has been successfully performed                      |
+| 1     | E_ARGS        | Not enough arguments provided                                |
+| 2     | E_INVALID     | Object or argument is not valid                              |
+| 3     | E_NOTEXIST    | Object doesn’t exist                                         |
+| 4     | E_EXISTS      | Object already exists                                        |
+| 5     | E_SUSPENDED   | Object is already suspended                                  |
+| 6     | E_UNSUSPENDED | Object is already unsuspended                                |
+| 7     | E_INUSE       | Object can’t be deleted because it is used by another object |
+| 8     | E_LIMIT       | Object cannot be created because of hosting package limits   |
+| 9     | E_PASSWORD    | Wrong / Invalid password                                     |
+| 10    | E_FORBIDEN    | Object cannot be accessed by this user                       |
+| 11    | E_DISABLED    | Subsystem is disabled                                        |
+| 12    | E_PARSING     | Configuration is broken                                      |
+| 13    | E_DISK        | Not enough disk space to complete the action                 |
+| 14    | E_LA          | Server is to busy to complete the action                     |
+| 15    | E_CONNECT     | Connection failed. Host is unreachable                       |
+| 16    | E_FTP         | FTP server is not responding                                 |
+| 17    | E_DB          | Database server is not responding                            |
+| 18    | E_RDD         | RRDtool failed to update the database                        |
+| 19    | E_UPDATE      | Update operation failed                                      |
+| 20    | E_RESTART     | Service restart failed                                       |

+ 98 - 0
docs/docs/server-administration/ssl-certificates.md

@@ -0,0 +1,98 @@
+# SSL Certificates
+
+## How to setup Let’s Encrypt for the control panel
+
+Make sure the hostname of the server is pointed to the server’s IP address and that you set the hostname correctly.
+
+Running the following commands will change the hostname and generate a Let’s Encrypt certificate for the control panel:
+
+```bash
+v-change-sys-hostname host.domain.tld
+v-add-letsencrypt-host
+```
+
+## Common errors using Let’s Encrypt
+
+::: info
+Due to changes in the code, the error message has been changed. The following list will be extended in the future.
+:::
+
+| Error         | Message                                                                                                                                              |
+| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `rateLimited` | The rate limit of the maximum requests have been passed. Please check [https://crt.sh](https://crt.sh) to see how many active certificates you have. |
+
+### Let’s Encrypt validation status 400.
+
+When requesting an SSL certificate, you may encounter the following error:
+
+```
+Error: Let’s Encrypt validation status 400. Details: Unable to update challenge :: authorisation must be pending
+```
+
+This could mean multiple things:
+
+1.  Cloudflare’s proxy is enabled and the **SSL/TLS** setting is set to **Full (strict)**.
+2.  Nginx or Apache is not reloading correctly.
+3.  IPv6 is setup. Disable IPv6 in DNS.
+4.  There is an issue with a template.
+
+In the future we hope to improve debugging, but currently the easiest way to debug this issue is to navigate to `/var/log/hestia/` and inspect the desired log file (`LE-{user}-{domain}.log`), which should appear after requesting a certificate.
+
+Find **Step 5**, where you will see something similar to the following:
+
+```bash
+==[Step 5]==
+- status: 200
+- nonce: 0004EDQMty6_ZOb1BdRQSc-debiHXGXaXbZuyySFU2xoogk
+- validation: pending
+- details:
+- answer: HTTP/2 200
+server: nginx
+date: Wed, 21 Apr 2021 22:32:16 GMT
+content-type: application/json
+content-length: 186
+boulder-requester: 80260362
+cache-control: public, max-age=0, no-cache
+link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
+link: <https://acme-v02.api.letsencrypt.org/acme/authz-v3/12520447717>;rel="up"
+location: https://acme-v02.api.letsencrypt.org/acme/chall-v3/12520447717/scDRXA
+replay-nonce: 0004EDQMty6_ZOb1BdRQSc-debiHXGXaXbZuyySFU2xoogk
+x-frame-options: DENY
+strict-transport-security: max-age=604800
+
+{
+  "type": "http-01",
+  "status": "pending",
+  "url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/12520447717/scDRXA",
+  "token": "9yriok5bpLtV__m-rZ8f2tQmrfeQli0tCxSj4iNkv2Y"
+}
+```
+
+By following the URL in the JSON response, you will get more info about what went wrong.
+
+### Other tips for debugging Let’s Encrypt
+
+Try to use [Let’s Debug](https://letsdebug.net):
+
+1. Enter your domain name.
+2. Make sure HTTP-01 is selected
+3. Run the test
+
+Once the test is completed, it will show an error or a success message, containing more information.
+
+## Can I enable Cloudflare’s proxy with Let’s Encrypt?
+
+Yes, you are able to use Let’s Encrypt certificates with Cloudflare’s proxy, however you need to follow some special steps:
+
+1.  Disable Cloudflare’s proxy for the desired domain.
+2.  Wait at least 5 minutes, for DNS caches to expire.
+3.  Request the certificate via the control panel or use the CLI command.
+4.  Reenable the proxy.
+5.  In the **SSL/TLS** tab, switch over to **Full (strict)**.
+
+## Can I use a Cloudflare Origin CA SSL Certificate?
+
+1.  Create an Origin CA certificate by [following these steps](https://developers.cloudflare.com/ssl/origin-configuration/origin-ca#1-create-an-origin-ca-certificate).
+2.  Once generated, enter your SSL keys in the **Edit Web Domain** page.
+3.  In the **SSL Certificate Authority / Intermediate** box, enter [this certificate](https://developers.cloudflare.com/ssl/static/origin_ca_rsa_root.pem).
+4.  In Cloudflare’s **SSL/TLS** tab, switch over to **Full (strict)**.

+ 16 - 0
docs/docs/server-administration/troubleshooting.md

@@ -0,0 +1,16 @@
+# Troubleshooting
+
+## Disabling “Use IP address allow list for login attempts” via command line
+
+With the introduction of Hestia v1.4.0 we have added certain security features, including the possibility to limit login to certain IP addresses. If your IP address changes, you will not able to login anymore. To disable this feature, run the following commands:
+
+```bash
+# Disable the feature
+v-change-user-config-value admin LOGIN_USE_IPLIST 'no'
+# Remove listed IP addresses
+v-change-user-config-value admin LOGIN_ALLOW_IPS ''
+```
+
+## Can I update my cronjobs via `crontab -e`?
+
+No, you cannot. When you update HestiaCP, the crontab will simply get overwritten. The changes will not get saved in backups either.

+ 149 - 0
docs/docs/server-administration/web-templates.md

@@ -0,0 +1,149 @@
+# Web Templates and FastCGI/Proxy Cache
+
+## How do web templates work?
+
+::: warning
+Modifying templates could cause errors on the server and may cause some services to not be able to reload or start.
+:::
+
+Everytime you rebuild the user or domain, the config files of the domain are overwritten by the new templates.
+
+This happens when:
+
+- HestiaCP is updated.
+- The admin initiates it.
+- The user modifies settings.
+
+The templates can be found in `/usr/local/hestia/data/templates/web/`.
+
+| Service                 | Location                                              |
+| ----------------------- | ----------------------------------------------------- |
+| Nginx (Proxy)           | /usr/local/hestia/data/templates/web/nginx/           |
+| Nginx - PHP FPM         | /usr/local/hestia/data/templates/web/nginx/php-fpm/   |
+| Apache2 (Legacy/modphp) | /usr/local/hestia/data/templates/web/apache2/         |
+| Apache2 - PHP FPM       | /usr/local/hestia/data/templates/web/apache2/php-fpm/ |
+| PHP-FPM                 | /usr/local/hestia/data/templates/web/php-fpm/         |
+
+::: warning
+Avoid modifying default templates as they are overwritten by updates. To prevent that, copy them instead:
+
+```bash
+cp original.tpl new.tpl
+cp original.stpl new.stpl
+cp original.sh new.sh
+```
+
+:::
+
+When you are done editing your template, enable it for the desired domain from the control panel.
+
+After modifying an existing template, you need to rebuild the user configuration. This can be done using the [v-rebuild-user](../reference/cli.md#v-rebuild-user) command or the bulk operation in the web interface..
+
+### Available variables
+
+| Name                 | Description                                           | Example                                    |
+| -------------------- | ----------------------------------------------------- | ------------------------------------------ |
+| `%ip%`               | IP Address of Server                                  | `123.123.123.123`                          |
+| `%proxy_port%`       | Port of Proxy                                         | `80`                                       |
+| `%proxy_port_ssl%`   | Port of Proxy (SSL)                                   | `443`                                      |
+| `%web_port%`         | Port of Webserver                                     | `8080`                                     |
+| `%web_ssl_port%`     | Port of Webserver (SSL)                               | `8443`                                     |
+| `%domain%`           | Domain                                                | `domain.tld`                               |
+| `%domain_idn%`       | Domain (Internationalised)                            | `domain.tld`                               |
+| `%alias_idn%`        | Alias Domain (Internationalised)                      | `alias.domain.tld`                         |
+| `%docroot%`          | Document root of domain                               | `/home/username/web/public_html/`          |
+| `%sdocroot%`         | Private root of domain                                | `/home/username/web/public_shtml/`         |
+| `%ssl_pem%`          | Location of SSL Certificate                           | `/usr/local/hestia/data/user/username/ssl` |
+| `%ssl_key%`          | Location of SSL Key                                   | `/usr/local/hestia/data/user/username/ssl` |
+| `%web_system%`       | Software used as web server                           | `Nginx`                                    |
+| `%home%`             | Default home directory                                | `/home`                                    |
+| `%user%`             | Username of current user                              | `username`                                 |
+| `%backend_lsnr%`     | Your default FPM Server                               | `proxy:fcgi://127.0.0.1:9000`              |
+| `%proxy_extentions%` | Extensions that should be handled by the proxy server | A list of extensions                       |
+
+::: tip
+`%sdocroot%` can also be set to `%docroot%` with settings
+:::
+
+## How can I change settings for a specific domain
+
+With the switch to PHP-FPM there are currently 2 different ways:
+
+1. Using `.user.ini` in the home directory `/home/user/web/domain.tld/public_html`.
+2. Via the PHP-FPM pool config.
+
+Config templates for the PHP pool can be found in `/usr/local/hestia/data/templates/web/php-fpm/`.
+
+::: warning
+Due to the fact we use multi PHP we need to recognise the PHP version to be used. Therefore we use the following naming scheme: `YOURNAME-PHP-X_Y.tpl`, where X_Y is your PHP version.
+
+For example a PHP 8.1 template would be `YOURNAME-PHP-8_1.tpl`.
+:::
+
+## Installing PHP modules
+
+```bash
+apt install php-package-name
+```
+
+For example, the following command will install `php-memcached` and `php-redis`, including the required additional packages for PHP.
+
+```bash
+apt install php-memcached php-redis
+```
+
+## Nginx FastCGI Cache
+
+::: tip
+FastCGI only applies for Nginx + PHP-FPM servers. If you use Nginx + Apache2 + PHP-FPM, this will not apply to you!
+:::
+
+FastCGI cache is an option within Nginx allowing to cache the output of FastCGI (in this case PHP). It will temporarily create a file with the contents of the output. If another user requests the same page, Nginx will check if the age of the cached file is still valid and if it is, then it will send the cached file to the user, instead of requesting it to FastCGI.
+
+FastCGI cache works best for sites get a lot of request and where the pages don’t change that often, for example a news site. For more dynamic sites, changes might be required to the configuration or it might require totally disabling it.
+
+### Why does software package x and y not work with FastCGI cache
+
+As we have over 20 different templates and we don’t use them all, we have decided to stop releasing new ones the future and hope the community helps improving the templates by [submitting a Pull request](https://github.com/hestiacp/hestiacp/pulls).
+
+If you want to add support to a certain template, follow the instructions below.
+
+### How do I enable FastCGI cache for my custom template
+
+Locate the block where you call `fastcgi_pass`:
+
+```bash
+location ~ [^/]\.php(/|$) {
+    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+    try_files $uri =404;
+    fastcgi_pass    %backend_lsnr%;
+    fastcgi_index   index.php;
+    include         /etc/nginx/fastcgi_params;
+}
+```
+
+Add the following lines under `include /etc/nginx/fastcgi_params;`:
+
+```bash
+include %home%/%user%/conf/web/%domain%/nginx.fastcgi_cache.conf*;
+
+if ($request_uri ~* "/path/with/exceptions/regex/whatever") {
+    set $no_cache 1;
+}
+```
+
+### How can I clear the cache?
+
+When FastCGI cache is enabled a **<i class="fas fa-fw fa-trash"></i> Purge Nginx Cache** button is added to the web domain’s **Edit** page. You can also use the API, or the following command:
+
+```bash
+v-purge-nginx-cache user domain.tld
+```
+
+### Why don’t I have the option to use FastCGI cache
+
+FastCGI cache is an option for Nginx mode only. If you are using Nginx + Apache2, you can select the proxy caching template and proxy cache will be enabled. It is functionally almost the same. In fact, the proxy caching will also work if you use a Docker image or a Node.js app.
+
+To write custom caching templates, use the following naming scheme:
+
+`caching-yourname.tpl`, `caching-yourname.stpl` and `caching-yourname.sh`

+ 100 - 0
docs/docs/user-guide/account.md

@@ -0,0 +1,100 @@
+# Account
+
+To access your account settings, click the <i class="fas fa-lg fa-fw fa-user-circle"><span class="visually-hidden">user</span></i> button in the top right.
+
+## Security
+
+### Password
+
+The password requirements are as follows:
+
+- At least 8 characters, 14 or more are recommended.
+- At least 1 number.
+- At least 1 capital letter and 1 lowercase letter.
+
+If you want to generate a secure password, you can use [1Password’s generator](https://1password.com/password-generator/).
+
+### Two-factor authentication (2FA)
+
+1. In your account settings, check the box labeled **Enable two-factor authentication**.
+2. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+3. Scan the QR code using an authentication app.
+4. Save your **Account Recovery Code** somewhere safe, in case you lose access to your authenticator.
+
+::: details Need a 2FA app?
+If you do not have an authenticator app, here are a couple of recommendations.
+
+- iCloud Keychain – [Windows](https://9to5mac.com/2022/07/25/icloud-passwords-windows-2fa-code/), [macOS](https://9to5mac.com/2021/11/16/use-safari-password-manager-and-2fa-autofill/), [iOS](https://9to5mac.com/2022/03/07/use-ios-15-2fa-code-generator-plus-autofill-iphone/)
+- [Tofu Authenticator](https://www.tofuauth.com/) – Open-source, iOS only
+- [Aegis Authenticator](https://getaegis.app/) – Open-source, Android only
+- [Raivo OTP](https://github.com/raivo-otp/) – Open-source, iOS and macOS only
+- [Google Authenticator](https://googleauthenticator.net/)
+- [Microsoft Authenticator](https://www.microsoft.com/en-ca/security/mobile-authenticator-app)
+- [Authy](https://authy.com/) – Free, has a cloud sync feature
+- [1Password](https://1password.com/) – Paid password manager
+- [Bitwarden](https://bitwarden.com/) – Password manager. 2FA in premium plan only
+
+:::
+
+### Login restrictions
+
+Hestia has the following options to help you secure your account:
+
+- Disable login into the account.
+- Whitelist your IP address to login into your account.
+
+### Security logs
+
+The security logs contain various information, such as: changes to web domains, API access, backup creation, etc. Click the **<i class="fas fa-fw fa-history"></i> Logs** button to view them.
+
+### Login history
+
+On the security logs page, click the **<i class="fas fa-fw fa-binoculars"></i> Login history** button to see the login history. The history contains the time of login, IP address, and user agent of the browser that was used.
+
+## SSH keys
+
+Click the **<i class="fas fa-fw fa-key"></i> Manage SSH keys** button to view the installed keys.
+
+### Adding an SSH key
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add SSH key** button.
+2. Copy your public key in the text area.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+### Deleting an SSH key
+
+1. Hover over the SSH key you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the SSH ID.
+
+::: details Need to generate a key?
+If you do not have an SSH key, here are a couple of ways to generate one.
+
+- For Windows: [Putty](https://www.ssh.com/academy/ssh/putty/windows/puttygen#running-puttygen).
+- For macOS and Linux use `ssh-keygen`.
+
+You can also use an app to manage them:
+
+- [1Password](https://developer.1password.com/docs/ssh/manage-keys/)
+- [Termius](https://www.termius.com/)
+
+:::
+
+## API access keys
+
+::: info
+This option is disabled by default for standard users. An administrator needs to enable it in the server settings.
+:::
+
+Click the **<i class="fas fa-fw fa-key"></i> Access Keys** button to view the access keys. Access keys are used for the API to autenticate instead of using the username and password.
+
+### Creating an access key
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Access key** button.
+2. Select the permission sets you want to enable.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+4. Copy the access key and the secret key. Make sure to save the secret key somewhere safe as it **cannot** be viewed once the page is closed.
+
+### Deleting an access key
+
+1. Hover over the access key you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the access key.

+ 81 - 0
docs/docs/user-guide/backups.md

@@ -0,0 +1,81 @@
+# Backups
+
+To manage your backups, navigate to the **Backups <i class="fas fa-fw fa-file-archive"></i>** tab.
+
+## Manually creating a backup
+
+Click the **<i class="fas fa-fw fa-plus-circle"></i> Create backup** button.
+
+A popup will be shown with the following message:
+
+**Task has been added to the queue. You will receive an email notification when your backup is ready for download.**
+
+## Downloading a backup
+
+1. Hover over the backup you want to download.
+2. Click the <i class="fas fa-fw fa-file-download"><span class="visually-hidden">Download</span></i> icon on the right of the backup’s filename.
+
+If the backup is stored on a remote server, the file is downloaded to the server and you will get notified by email when the download is available.
+
+## Restoring a backup
+
+1. Hover over the backup you want to restore.
+2. Click the backup’s filename or the <i class="fas fa-fw fa-undo"><span class="visually-hidden">Restore</span></i> icon on the right of the backup’s filename.
+3. Restore the backup in one of the following ways:
+   1. You can restore the whole backup by clicking the **<i class="fas fa-fw fa-undo"></i> Restore backup** button on the top right.
+   2. Restore multiple parts of the backup, by selecting them, then selecting **Restore** in the **Apply to selected** menu in the top right and clicking on the <i class="fas fa-fw fa-arrow-right"><span class="visually-hidden">Apply</span></i> button.
+   3. Restore one part of the backup by hovering over it and clicking the <i class="fas fa-fw fa-undo"><span class="visually-hidden">Restore</span></i> icon on the right.
+
+## Deleting a backup
+
+1. Hover over the backup you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the backup’s filename.
+
+## Excluding components from backups
+
+1. Click the **<i class="fas fa-fw fa-folder-minus"></i> Backup Exclusion** button.
+2. Click the **<i class="fas fa-fw fa-pencil-alt"></i> Edit backup exclusions** button.
+
+### Excluding a web domain
+
+In the box labeled **Web Domains**, enter each domain you want to exclude, one per line.
+
+To exclude a specific folder from a domain use the following syntax:
+
+```
+domain.tld:public_html/wp-content/uploads:public_html/cache
+```
+
+This will excude both `public_html/wp-content/uploads/` and `public_html/cache/` from that domain.
+
+To exclude all domains, use `*`.
+
+### Excluding a mail domain
+
+In the box labeled **Mail Domains**, enter each domain you want to exclude, one per line.
+
+To exclude only one or multiple mail account use the following syntax:
+
+```
+domain.tld:info:support
+```
+
+This will excude both `info@domain.tld` and `support@domain.tld`.
+
+To exclude all domains, use `*`.
+
+### Excluding a database
+
+In the box labeled **Databases**, enter the name of each database you want to exclude, one per line.
+
+To exclude all databases, use `*`.
+
+### Excluding a user directory
+
+In the box labeled **User Directories**, enter the name of each directory you want to exclude, one per line.
+
+To exclude all directories, use `*`.
+
+## Editing the number of backups
+
+To edit the number of backups, please read the [Packages](../user-guide/packages.md) and [Users](../user-guide/users.md) documentation. You will need to create or edit a package, and assign it to the desired user.

+ 30 - 0
docs/docs/user-guide/cron-jobs.md

@@ -0,0 +1,30 @@
+# Cron Jobs
+
+To manage your cron jobs, navigate to the **Cron <i class="fas fa-fw fa-clock"></i>** tab.
+
+## Toggling cron job notifications
+
+1. To turn them off click the **<i class="fas fa-fw fa-toggle-off"></i> Turn off notifications** button.
+2. To turn them back on click the **<i class="fas fa-fw fa-toggle-off"></i> Turn on notifications** button.
+
+## Adding a cron job
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add job** button.
+2. Enter the command you want to execute.
+3. Enter the schedule on which you want to execute the command. You can use the generator to help you, or a tool such as [Crontab.guru](https://crontab.guru/).
+
+## Editing a cron job
+
+1. Hover over the job you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the job’s command.
+
+## Suspending a cron job
+
+1. Hover over the job you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the job’s command.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the job’s command.
+
+## Deleting a cron job
+
+1. Hover over the job you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the job’s command.

+ 34 - 0
docs/docs/user-guide/databases.md

@@ -0,0 +1,34 @@
+# Databases
+
+To manage your databases, navigate to the **DB <i class="fas fa-fw fa-database"></i>** tab.
+
+## Adding a database
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Database** button.
+2. Fill out the fields. The name and username will be prefixed with `user_`.
+3. Optionally, provide an email address where the login details will be sent.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+Under **Advanced Options**, you are able to select the host (`localhost` by default) and charset (`utf8` by default).
+
+## Editing a database
+
+1. Hover over the database you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the database’s name. If you don’t want to change the password, keep the password field empty.
+
+## Accessing a database
+
+By default, **phpMyAdmin** and **phpPgAdmin** are accessible at `https://hostname.domain.tld/phpmyadmin` and `https://hostname.domain.tld/phppgadmin` respectively. You can also click the **<i class="fas fa-fw fa-database"></i> phpMyAdmin** and **<i class="fas fa-fw fa-database"></i> phpPgAdmin** buttons in the **DB <i class="fas fa-fw fa-database"></i>** tab.
+
+For MySQL databases, if **phpMyAdmin Single Sign On** is enabled, hovering a database will show an <i class="fas fa-fw fa-sign-in-alt"><span class="visually-hidden">phpMyAdmin</span></i> icon. Click it to login to **phpMyAdmin** directly.
+
+## Suspending a database
+
+1. Hover over the database you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the database’s name.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the database’s name.
+
+## Deleting a database
+
+1. Hover over the database you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the database’s name. Both the database user and the database will get deleted.

+ 125 - 0
docs/docs/user-guide/dns.md

@@ -0,0 +1,125 @@
+# DNS
+
+To manage your DNS zones and records, navigate to the **DNS <i class="fas fa-fw fa-atlas"></i>** tab.
+
+## Adding a DNS zone
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add DNS Zone** button.
+2. Enter the domain name in the **Domain** field.
+   - Choose the appropriate template for the zone.
+   - If the domain requires different name servers, change them in the **Advanced Options** section.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Editing a DNS zone
+
+1. Hover over the zone you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the zone’s domain.
+3. Make the desired changes.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Viewing DNSSEC public keys
+
+1. Hover over the zone whose DNSSEC keys you want to see.
+2. Click the <i class="fas fa-fw fa-key"><span class="visually-hidden">DNSSEC</span></i> icon on the right of the zone’s domain.
+
+## Suspending a DNS zone
+
+1. Hover over the zone you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the zone’s domain.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the zone’s domain.
+
+## Deleting a DNS zone
+
+1. Hover over the zone you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the zone’s domain.
+
+## DNS zone configuration
+
+### IP address
+
+IP address that should be used for the root domain.
+
+### Template
+
+- **default**: Standard DNS template. Suitable for most usecases.
+- **default-nomail**: Standard DNS template. Suitable for most usecases when you don’t want to host mail on Hestia.
+- **gmail**: When your email provider is Google Workspace.
+- **office365**: When your email provider is Microsoft 365 (Exchange).
+- **zoho**: When your email provider is Zoho.
+- **child-ns**: When you are going to use the domain as a name server.
+
+### Expiration date
+
+This date is not used by Hestia, but can be used as a reminder.
+
+### SOA
+
+A Start of Authority (SOA) record includes administrative information about your zone, as defined by the domain name system (DNS).
+
+### TTL
+
+Adjust the default time-to-live. A shorter TTL means faster changes, but results in more requests to the server. If you are going to change the IP, it might be helpful to decrease it to 300 seconds (5 min).
+
+### DNSSEC
+
+Enable DNSSEC to improve security. However, this setting requires some changes to at your domain registrar before it is active. For more information, see the [DNS cluster](../server-administration/dns.md) documentation.
+
+## Adding a DNS record to a zone
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Record** button.
+2. Fill out the fields.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Editing a DNS record
+
+1. Click the recordor the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon that appears on hover.
+2. Make the desired changes.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Suspending a DNS record
+
+1. Hover over the record you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the record’s domain.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the record’s domain.
+
+## Deleting a DNS record
+
+1. Hover over the record you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the record’s domain.
+
+## DNS record configuration
+
+### Record
+
+The record name. `record`.domain.tld. Use `@` for root.
+
+### Type
+
+The following record types are supported:
+
+- A
+- AAAA
+- CAA
+- CNAME
+- DNSKEY
+- IPSECKEY
+- KEY
+- MX
+- NS
+- PTR
+- SPF
+- SRV
+- TLSA
+- TXT
+
+### IP or value
+
+IP or value of the record you want to use.
+
+### Priority
+
+Priority of the record. Only used for MX records
+
+### TTL
+
+Adjust the default time-to-live. A shorter TTL means faster changes, but results in more requests to the server. If you are going to change the IP, it might be helpful to decrease it to 300 seconds (5 min).

+ 5 - 0
docs/docs/user-guide/file-manager.md

@@ -0,0 +1,5 @@
+# File Manager
+
+To access the file manager, click the **<i class="fas fa-fw fa-folder-open"></i> Files** button in the top left.
+
+The file manager Hestia uses is called FileGator. You can find more information about it on [their website](https://filegator.io/).

+ 156 - 0
docs/docs/user-guide/mail-domains.md

@@ -0,0 +1,156 @@
+# Mail Domains
+
+To manage your mail domains, navigate to the **Mail <i class="fas fa-fw fa-mail-bulk"></i>** tab.
+
+## Adding a mail domain
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Mail domain** button.
+2. Enter your domain name.
+3. Select the options you want to use.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Editing a mail domain
+
+1. Hover over the domain you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the mail domain.
+3. Edit the fields.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Suspending a web domain
+
+1. Hover over the domain you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the mail domain.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the mail domain.
+
+## Deleting a web domain
+
+1. Hover over the domain you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the mail domain. Both the mail domain and **all** the mail accounts will get deleted.
+
+## Mail domain configuration
+
+### Webmail client
+
+We currently support Roundcube and Rainloop (optional install). You can also disable webmail access.
+
+### Catch all email
+
+This email address will receive all emails for this domain that are sent to users that don’t exist.
+
+### Rate limit
+
+::: info
+This option is only available for the admin user.
+:::
+
+Set the limit for the amount of emails an account can send per hour.
+
+### Spam filter
+
+::: info
+This option is not always available.
+:::
+
+Enable Spam Assassin for this domain.
+
+### Antivirus
+
+::: info
+This option is not always available
+:::
+
+Enable ClamAV for this domain.
+
+### DKIM
+
+Enable DKIM for this domain.
+
+### SSL
+
+1. Check the **Enable SSL for this domain** box.
+2. Check the **Use Let’s Encrypt to obtain SSL certificate** box to use Let’s Encrypt.
+3. Depending on your requirements, you can enable **Enable automatic HTTPS redirection** or **Enable HTTP Strict Transport Security (HSTS)**.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+If you want to use your own SSL certificate you can enter the SSL certificate in the text area.
+
+If you are having issues with enabling Let’s Encrypt, please refer to our [SSL certicates](../server-administration/ssl-certificates.md) documentation.
+
+### SMTP relay
+
+This option allows the user to use a different SMTP relay than server defined one or bypass the default Exim route. This can enhance deliverability.
+
+1. Check the **SMTP Relay** box and a form will appear.
+2. Enter the information from your SMTP relay provider.
+
+### Get DNS records
+
+If you don’t host your DNS in Hestia, but you still want to use its email service, click the <i class="fas fa-atlas"><span class="visually-hidden">DNS</span></i> icon to view the DNS records you need to add to your DNS provider.
+
+### Webmail
+
+By default, the webmail is accessible at `https://webmail.domain.tld` or `https://mail.domain.tld` when SSL is enabled. Otherwise use `http://` instead.
+
+## Adding a mail account to a domain
+
+1. Click the mail domain.
+2. Click **<i class="fas fa-fw fa-plus-circle"></i> Add Mail account** button.
+3. Enter the account name (without the `@domain.tld` part) and a password.
+4. Optionally, supply an email address that will receive the login details.
+5. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+If required you can also modify the **Advanced Options**, which are explained below.
+
+On the right side, you can see the methods to access your mail account via SMTP, IMAP and POP3.
+
+## Editing a mail account
+
+1. Hover over the account you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the mail account.
+3. Edit the fields.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Suspending a mail account
+
+1. Hover over the account you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the mail account.
+3. To unsuspend it, click the <i class="fas fa-fw fa-play"><span class="visually-hidden">unsuspend</span></i> icon on the right of the mail account.
+
+## Deleting a mail account
+
+1. Hover over the account you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the mail account.
+
+## Mail account configuration
+
+### Quota
+
+The maximum space the account is allowed to use. This includes mail, contacts, etc.
+
+### Aliases
+
+Add an alias to redirect mail to the main account. Enter the username only. For example: `alice`.
+
+### Discard all mail
+
+All incoming mail will not get forwarded and will get deleted.
+
+### Do not store forwarded mail
+
+If this option is selected, all forwarded mail will get deleted.
+
+### Auto-Reply
+
+Setup an auto-reply.
+
+### Forward mail
+
+Forward all incoming mail to the entered email address.
+
+::: warning
+A lot of spam filters may flag the forwarded mail as spam by default!
+:::
+
+### Rate limit
+
+Set the limit for the amount of emails an account can send per hour.

+ 5 - 0
docs/docs/user-guide/notifications.md

@@ -0,0 +1,5 @@
+# Notifications
+
+To view your notifications, click the <i class="fas fa-lg fa-fw fa-bell"><span class="visually-hidden">notification</span></i> icon in the top right.
+
+You can dismiss a notification by clicking the small red circle on its right.

+ 124 - 0
docs/docs/user-guide/packages.md

@@ -0,0 +1,124 @@
+# Packages
+
+To manage packages, log in as an **administrator** and navigate to the **Users <i class="fas fa-fw fa-users"></i>** tab.
+
+## Adding a new package
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Package** button.
+2. Fill out the form. When clicking on <i class="fas fa-fw fa-infinity"><span class="visually-hidden">unlimited</span></i> icon, the limits will be set to unlimited.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Copying a package
+
+1. Hover over the package you want to copy.
+2. Click the <i class="fas fa-fw fa-clone"><span class="visually-hidden">copy</span></i> icon on the right of the package name.
+
+## Editing a package
+
+::: info
+The **system** package can’t be edited or renamed.
+:::
+
+1. Hover over the package you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the package name.
+
+## Deleting a package
+
+::: info
+The **system** package can’t be deleted.
+:::
+
+1. Hover over the package you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the package name.
+
+## Importing existing packages from a different server
+
+Packages are stored in `/usr/local/hestia/data/packages` as `package-name.pkg`. Simply copy these package files to other servers.
+
+## Package configuration
+
+::: info
+Some options may not be available depending on your setup.
+:::
+
+### Quota
+
+Total available storage space including the websites, email accounts, databases and the home folder. If you have enabled **File Quotas** during install or in the server settings, this value enforces the quota limit on websites, email accounts and the home folder. Databases are excluded.
+
+### Bandwidth
+
+Allocated bandwidth. Only outgoing traffic over web is accounted for.
+
+There’s currently no methods of auto-suspending available.
+
+### Backups
+
+Maximum number of backups that can be stored.
+
+## Web domains
+
+### Web domains
+
+Maximum number of web domains that can be created.
+
+### Aliases
+
+Maximum number of aliases that can be added per domain.
+
+### Proxy Template
+
+Default proxy template for created domains.
+
+### Web Template
+
+Default web template for created domains.
+
+## DNS
+
+### DNS Template
+
+Default DNS template that get assigned on domain creation.
+
+### DNS Domains
+
+Maximum number of DNS domains that can be created.
+
+### DNS records
+
+Maximum number of DNS records that can be added per domain.
+
+### Name Servers
+
+Default name servers to be used by the user. Up to 8 different name servers can be added.
+
+## Mail
+
+### Mail Domains
+
+Maximum number of mail domains that can be created.
+
+### Mail accounts
+
+Maximum number of mail accounts that can be added per domain.
+
+### Rate limit
+
+Maximum number of emails that accounts can send per hour.
+
+## Databases
+
+Maximum number of databases that can be created.
+
+## System
+
+### Cron jobs
+
+Maximum number of cron jobs that can be created.
+
+### Shell access
+
+Select the shell that will be shown to the user when logging in via SSH.
+
+::: warning
+When set to `nologin`, SSH access is disabled but SFTP access is still allowed.
+:::

+ 16 - 0
docs/docs/user-guide/statistics.md

@@ -0,0 +1,16 @@
+# Statistics
+
+To access the statistics, click the **<i class="fas fa-fw fa-chart-line"></i> Statistics** button in the top left.
+
+This page will show the current user’s statistics, grouped per month. Here are the available statistics:
+
+- Bandwidth usage
+- Assigned IP addresses
+- Disk usage, split by component
+- Number of web domains and aliases
+- Number of domains using SSL
+- Number of DNS zones and records
+- Number of mail domains and accounts
+- Number of databases
+- Number of cron jobs
+- Number of backups

+ 72 - 0
docs/docs/user-guide/users.md

@@ -0,0 +1,72 @@
+# Users
+
+To manage users, log in as an **administrator** and navigate to the **Users <i class="fas fa-fw fa-users"></i>** tab.
+
+## Adding a user
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add User** button.
+2. Fill out the fields.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Impersonating a user
+
+1. Hover over the user you want to login as.
+2. Click the <i class="fas fa-fw fa-sign-in-alt"><span class="visually-hidden">login as</span></i> icon on the right of the user’s name and email.
+3. You are now logged in as the user. As such, any action you perform will be done as this user.
+
+## Editing a user
+
+The settings specified below are only available to administrators. For the regular settings, you can refer to the [Account Management](../user-guide/account.md) documentation.
+
+To edit a user you can either impersonate them and click the <i class="fas fa-lg fa-fw fa-user-circle"><span class="visually-hidden">user</span></i> icon in the top right, or follow these steps:
+
+1. Hover over the user you want to edit.
+2. Click the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon on the right of the user’s name and email.
+
+## Suspending a user
+
+1. Hover over the user you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the user’s name and email.
+
+## Deleting a user
+
+1. Hover over the user you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete</span></i> icon on the right of the user’s name and email.
+
+## User configuration
+
+### Disabling control panel access
+
+To remove Control Panel access from a user, check the box labelled: **Do not allow user to log in to Control Panel**.
+
+### Changing role
+
+To change a user’s role change the **Role** value from the dropdown.
+
+::: warning
+Assigning the **Administrator** role to a user will enable them to see and edit other users. They will not be able to edit the **admin** user, but will be able to see them, unless disabled in the server settings.
+:::
+
+### Changing package
+
+To change a user’s package, change the **Package** value from the dropdown.
+
+### Changing SSH access
+
+To change a user’s SSH access, click the **Advanced Options** button, then change the **SSH Access** value from the dropdown.
+
+::: warning
+Using the **nologin** shell will _not_ disable SFTP access.
+:::
+
+### Changing PHP CLI version
+
+To change a user’s PHP CLI version, click the **Advanced Options** button, then change the **PHP CLI Version** value from the dropdown.
+
+### Changing default name servers
+
+To change a user’s default name servers, click the **Advanced Options** button, then edit the **Default Name Servers** fields.
+
+::: warning
+At least 2 default name servers are necessary. This is to provide redundancy, in case one of them fails to answer. In fact, it is suggested that both name servers be on separate servers, for better resilience. If you are the system administrator and would like to set this up, refer to our [DNS Cluster documentation](../server-administration/dns.md#dns-cluster-setup).
+:::

+ 129 - 0
docs/docs/user-guide/web-domains.md

@@ -0,0 +1,129 @@
+# Web Domains
+
+To manage your web domains, navigate to the **Web <i class="fas fa-fw fa-globe-americas"></i>** tab.
+
+## Adding a web domain
+
+1. Click the **<i class="fas fa-fw fa-plus-circle"></i> Add Web Domain** button.
+2. Enter the domain name in the **Domain** field.
+   - If you wish to manage this domain’s DNS in Hestia, check the box labeled **Create DNS zone**
+   - If you wish to enable mail for this domain, check the box labeled **Enable mail for this domain**.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Installing an app
+
+1. Click the domain name or the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon that appears on hover.
+2. Click the **<i class="fas fa-fw fa-magic"></i> Quick install App** button in the top right.
+3. Select the application you want to install and click the **Setup** button.
+4. Fill out the fields. If the app uses a database, you will have the option to auto-create a database or use an existing one.
+5. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+::: warning
+Depending on the application you chose to install, this can take 30 seconds or longer. Do not reload or close the tab!
+:::
+
+## Editing a web domain
+
+1. Click the domain name or the <i class="fas fa-fw fa-pencil-alt"><span class="visually-hidden">edit</span></i> icon that appears on hover.
+2. Make your changes. The options are explained below.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+## Viewing access and error logs
+
+1. Hover over the domain whose logs you want to view.
+2. Click the <i class="fas fa-fw fa-binoculars"><span class="visually-hidden">logs</span></i> icon.
+3. At the top of the page, you have the possiblity to download the logs or view the error logs instead.
+
+## Suspending a web domain
+
+1. Hover over the domain you want to suspend.
+2. Click the <i class="fas fa-fw fa-pause"><span class="visually-hidden">suspend</span></i> icon on the right of the web domain.
+
+## Deleting a web domain
+
+1. Hover over the domain you want to delete.
+2. Click the <i class="fas fa-fw fa-trash"><span class="visually-hidden">delete user</span></i> icon on the right of the web domain. **Both** the web domain and the linked FTP accounts will get deleted.
+
+## Web domain configuration
+
+### Enabling statistics
+
+1. Chose **awstats** in the selection boxed labelled **Web Statistics**.
+2. If desired, enter a username and password.
+3. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+4. Navigate to `https://domain.tld/vstats/` to view the stats.
+
+### Managing redirections
+
+1. Check the **Enable domain redirection** box.
+2. Select the option you want. When selecting **Redirect visitors to a custom domain or web address** you have to option to select the HTTP status code (301 by default).
+
+::: warning
+If your domain is an [internationalized domain name (IDN)](https://en.wikipedia.org/wiki/Internationalized_domain_name) containing special characters, even if you select `www.domain.tld` or `domain.tld`, it will convert the domain to [punycode](https://en.wikipedia.org/wiki/Punycode) and select **Redirect visitors to a custom domain or web address**.
+:::
+
+### Enabling SSL
+
+1. Check the **Enable SSL for this domain** box.
+2. Check the **Use Let’s Encrypt to obtain SSL certificate** box to use Let’s Encrypt.
+3. Depending on your requirements, you can enable **Enable automatic HTTPS redirection** or **Enable HTTP Strict Transport Security (HSTS)**.
+4. Click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+If you want to use your own SSL certificate you can enter the SSL certificate in the text area.
+
+If you are having issues with enabling Let’s Encrypt, please refer to our [SSL certicates](../server-administration/ssl-certificates.md) documentation.
+
+### Changing PHP version
+
+::: info
+This option is not always available. It may be disabled in the server settings. Please contact your server administrator for more information.
+:::
+
+1. Select the desired PHP version in the **Backend Template** field.
+
+### Using a different root directory
+
+1. Check the **Custom document root** box.
+2. Select the domain name where you want this domain to point.
+3. Select the path. For example, `/public/` will link to `/home/user/web/domain.tld/public_html/public/`.
+
+### Additional FTP accounts
+
+1. Check the **Additional FTP accounts** box.
+2. Enter a username and a password (or generate one). The username will be prefixed by `user_`.
+3. Enter the path the account will be able to access.
+4. Optionally, provide an email address where the login details will be sent.
+
+To add another FTP account, click the **Add FTP account** button, then click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+To delete an FTP account, click the **DELETE** link on the right of its name, then click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+To change the password, update the password field, then click the **<i class="fas fa-fw fa-save"></i> Save** button in the top right.
+
+### Proxy templates
+
+::: info
+Depending on the server setup, this option may not be available.
+:::
+
+- **default**: All purpose template. Suitable for most usecases.
+- **caching**: Template with proxy cache enabled. Suitable for mostly static content, for example: blogs or news websites.
+- **hosting**: Similar to default.
+
+Any custom templates will also show up here.
+
+::: tip
+Any custom templates starting with `caching-` will allow the use of the **<i class="fas fa-fw fa-trash"></i> Purge Nginx Cache** button. Make sure a `.sh` file exists for `caching-my-template` with at least [this content](https://github.com/hestiacp/hestiacp/blob/main/install/deb/templates/web/nginx/caching.sh)
+:::
+
+### Web templates
+
+For servers running Apache2 and Nginx, the **default** template will work fine.
+
+For servers running Nginx only, pick the template matching the app name you are going to use.
+
+### Managing Nginx caching
+
+When Nginx caching is enabled (using FastCGI cache or with a caching-enabled template), you can purge the cache via the **<i class="fas fa-fw fa-trash"></i> Purge Nginx Cache** button.
+
+When using Nginx only, you can enable FastCGI caching using the **Enable FastCGI Cache** box. When checked, an option is shown to determine for how long the cache is considered valid.

+ 18 - 0
docs/donate.md

@@ -0,0 +1,18 @@
+---
+title: Donate
+aside: false
+lastUpdated: false
+---
+
+# Donate to the project
+
+By donating to Hestia, you help maintain server costs, development time, and more!
+
+Here are our official donation platforms:
+
+- [PayPal](https://www.paypal.com/donate/?cmd=_s-xclick&hosted_button_id=ST87LQH2CHGLA)
+- Crypto
+  - Bitcoin: bc1q48jt5wg5jaj8g9zy7c3j03cv57j2m2u5anlutu
+  - Ethereum: 0xfF3Dd2c889bd0Ff73d8085B84A314FC7c88e5D51
+  - Binance: bnb1l4ywvw5ejfmsgjdcx8jn5lxj7zsun8ktfu7rh8
+  - Smart Chain: 0xfF3Dd2c889bd0Ff73d8085B84A314FC7c88e5D51

+ 52 - 0
docs/features.md

@@ -0,0 +1,52 @@
+---
+layout: page
+title: Features
+---
+
+<script setup lang="ts">
+  import FeaturePageTitle from "./.vitepress/theme/components/FeaturePageTitle.vue";
+  import FeaturePageSection from "./.vitepress/theme/components/FeaturePageSection.vue";
+  import FeatureList from "./.vitepress/theme/components/FeatureList.vue";
+  import { users, webDomains, mail, databases, serverAdmin } from "./_data/features";
+</script>
+
+<FeaturePage>
+  <FeaturePageTitle>
+    <template #title>Features</template>
+  </FeaturePageTitle>
+  <FeaturePageSection image="/images/undraw_two_factor_authentication_namy.svg">
+    <template #title>Users</template>
+    <template #lead>Share access to your server with other users and restrict their resources.</template>
+    <template #list>
+      <FeatureList :items="users"></FeatureList>
+    </template>
+  </FeaturePageSection>
+  <FeaturePageSection image="/images/undraw_web_developer_re_h7ie.svg">
+    <template #title>Web domains</template>
+    <template #lead>Add multiple domains and quickly install apps on them.</template>
+    <template #list>
+      <FeatureList :items="webDomains"></FeatureList>
+    </template>
+  </FeaturePageSection>
+  <FeaturePageSection image="/images/undraw_personal_email_re_4lx7.svg">
+    <template #title>Mail</template>
+    <template #lead>Host your own emails, no need to pay a business mail provider!</template>
+    <template #list>
+      <FeatureList :items="mail"></FeatureList>
+    </template>
+  </FeaturePageSection>
+  <FeaturePageSection image="/images/undraw_maintenance_re_59vn.svg">
+    <template #title>Databases</template>
+    <template #lead>From e-commerce to blogs, databases are always useful and you can choose between MySQL and PostgreSQL.</template>
+    <template #list>
+      <FeatureList :items="databases"></FeatureList>
+    </template>
+  </FeaturePageSection>
+  <FeaturePageSection image="/images/undraw_server_status_re_n8ln.svg">
+    <template #title>Server admin</template>
+    <template #lead>Ultra-configurable and user-friendly, Hestia is as powerful as you could want.</template>
+    <template #list>
+      <FeatureList :items="serverAdmin"></FeatureList>
+    </template>
+  </FeaturePageSection>
+</FeaturePage>

+ 46 - 0
docs/index.md

@@ -0,0 +1,46 @@
+---
+layout: home
+
+title: Hestia Control Panel
+titleTemplate: Open-source web server control panel.
+
+hero:
+  name: Hestia Control Panel
+  text: Open-source web server control panel
+  tagline: Fast, reliable, open-source. The control panel you’ve always wanted is just a command away.
+  image:
+    src: /logo.svg
+    alt: Hestia Logo
+  actions:
+    - theme: brand
+      text: Get started
+      link: /docs/introduction/getting-started
+    - theme: alt
+      text: Try the demo
+      link: https://demo.hestiacp.com:8083/
+    - theme: alt
+      text: View on GitHub
+      link: https://github.com/hestiacp/hestiacp
+
+features:
+  - icon: 🚀
+    title: Fast & easy to learn
+    details: Hestia is made with ease of use in mind. Creating a user or a website is as easy as clicking a button and filling up a couple of fields, while advanced features are easily accessible.
+    link: /docs/introduction/getting-started
+    linkText: Documentation
+  - icon: ❤️
+    title: Made with love & pride
+    details: Hestia is open-source software that is built by passionate people from around the world. This means that the code is reviewed by multiple people and that anybody can contribute to it!
+    link: /team
+    linkText: See the team
+  - icon: 🛠️
+    title: Extendable & powerful
+    details: Hestia is extendable while being easy to learn. You can build your own themes, web templates, quick install applications and can interact with it using third party software via its API.
+    link: /docs/contributing/development
+    linkText: Help develop Hestia
+  - icon: 🤝
+    title: Supported by the community
+    details: Hestia has a great support community, join the forum or the Discord server! To keep the project running, we rely on donations, which can be done via PayPal or cryptocurrency.
+    link: /donate
+    linkText: Donate
+---

+ 3 - 0
docs/public/_headers

@@ -0,0 +1,3 @@
+/assets/*
+	cache-control: max-age=31536000
+	cache-control: immutable

BIN
docs/public/apple-touch-icon.png


BIN
docs/public/favicon.ico


BIN
docs/public/icon-192.png


BIN
docs/public/icon-512.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/images/undraw_maintenance_re_59vn.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/images/undraw_personal_email_re_4lx7.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/images/undraw_server_status_re_n8ln.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/images/undraw_two_factor_authentication_namy.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/images/undraw_web_developer_re_h7ie.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
docs/public/logo.svg


+ 11 - 0
docs/public/site.webmanifest

@@ -0,0 +1,11 @@
+{
+	"name": "Hestia Control Panel",
+	"short_name": "Hestia",
+	"icons": [
+		{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
+		{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
+	],
+	"theme_color": "#b7236a",
+	"background_color": "#ffffff",
+	"display": "standalone"
+}

+ 46 - 0
docs/team.md

@@ -0,0 +1,46 @@
+---
+layout: page
+
+title: The Team
+---
+
+<script setup lang="ts">
+  import { VPTeamPage, VPTeamPageTitle, VPTeamPageSection, VPTeamMembers } from "vitepress/theme";
+  import { projectManagers, teamMembers, emeriti } from "./_data/team";
+</script>
+
+<VPTeamPage>
+  <VPTeamPageTitle>
+    <template #title>The Team</template>
+    <template #lead>
+      The development of Hestia is guided by an international team, some of whom have chosen to be featured below.
+    </template>
+  </VPTeamPageTitle>
+  <VPTeamPageSection>
+    <template #title>Project Managers</template>
+    <template #members>
+      <VPTeamMembers :members="projectManagers" />
+    </template>
+  </VPTeamPageSection>
+  <VPTeamPageSection>
+    <template #title>Team Members</template>
+    <template #members>
+      <VPTeamMembers :members="teamMembers" />
+    </template>
+  </VPTeamPageSection>
+  <VPTeamPageSection>
+    <template #title>Team Emeriti</template>
+    <template #lead>
+      Here we honor some no-longer-active team members who have made valuable contributions in the past.
+    </template>
+    <template #members>
+      <VPTeamMembers :members="emeriti" />
+    </template>
+  </VPTeamPageSection>
+  <!-- <VPTeamPageSection>
+    <template #title>Contributors ❤️</template>
+    <template #members>
+      <VPTeamMembers size="small" :members="featuredContributors" />
+    </template>
+  </VPTeamPageSection> -->
+</VPTeamPage>

+ 9 - 1
package.json

@@ -6,6 +6,9 @@
 	"repository": "https://github.com/hestiacp/hestiacp",
 	"license": "GPL-3.0-or-later",
 	"scripts": {
+		"docs:dev": "vitepress dev docs",
+		"docs:build": "vitepress build docs",
+		"docs:serve": "vitepress serve docs",
 		"build": "postcss web/css/src/themes/*.css --dir web/css/themes --ext .min.css",
 		"lint": "prettier --check . && eslint web/js/ && stylelint web/css/src/**/*.css",
 		"lint-staged": "lint-staged",
@@ -19,6 +22,8 @@
 	},
 	"devDependencies": {
 		"@prettier/plugin-php": "^0.19.2",
+		"@typescript-eslint/eslint-plugin": "^5.45.0",
+		"@typescript-eslint/parser": "^5.45.0",
 		"cssnano": "^5.1.14",
 		"eslint": "^8.28.0",
 		"eslint-config-prettier": "^8.5.0",
@@ -36,6 +41,9 @@
 		"prettier-plugin-sql": "^0.12.1",
 		"stylelint": "^14.15.0",
 		"stylelint-config-prettier": "^9.0.4",
-		"stylelint-config-standard": "^29.0.0"
+		"stylelint-config-standard": "^29.0.0",
+		"typescript": "^4.9.3",
+		"vitepress": "1.0.0-alpha.29",
+		"vue": "^3.2.45"
 	}
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 854 - 3
yarn.lock


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است