فهرست منبع

Add markdownlint (#3107)

Alec Rust 3 سال پیش
والد
کامیت
46a1e76fc2

+ 12 - 0
.github/workflows/lint.yml

@@ -19,6 +19,18 @@ jobs:
         with:
           severity: error
 
+  markdownlint:
+    name: markdownlint
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      - name: Run markdownlint
+        uses: avto-dev/markdown-lint@v1
+        with:
+          args: "*.md docs/**/*.md"
+
   prettier:
     name: Prettier
     runs-on: ubuntu-latest

+ 2 - 0
.lintstagedrc.cjs

@@ -1,4 +1,6 @@
 module.exports = {
+	// Run markdownlint on MD files
+	'*.md': 'markdownlint --fix',
 	// Run Stylelint on CSS files
 	'*.css': 'stylelint --fix',
 	// Run ESLint on TS, TSX, JS, JSX files

+ 11 - 0
.markdownlint.yml

@@ -0,0 +1,11 @@
+# MD010/no-hard-tabs - Hard tabs
+MD010: false
+
+# MD013/line-length - Line length
+MD013: false
+
+# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
+MD024: false
+
+# MD033/no-inline-html - Inline HTML
+MD033: false

+ 4 - 3
.vscode/extensions.json

@@ -1,11 +1,12 @@
 {
 	"recommendations": [
-		"mrmlnc.vscode-apache",
 		"editorconfig.editorconfig",
+		"DavidAnson.vscode-markdownlint",
 		"dbaeumer.vscode-eslint",
+		"timonwong.shellcheck",
 		"esbenp.prettier-vscode",
-		"bmewburn.vscode-intelephense-client",
+		"mrmlnc.vscode-apache",
 		"william-voyek.vscode-nginx",
-		"timonwong.shellcheck"
+		"bmewburn.vscode-intelephense-client"
 	]
 }

+ 24 - 25
CHANGELOG.md

@@ -334,7 +334,7 @@ A bug in v-update-sys-hestia caused auto update to be not working. Please run: `
   - Update zlib to 1.2.12
   - Update PCRE to 10.40
 - Update hestia-php to 8.1.7
-- Updated phpMyAdmin to 5.2.0 (https://www.phpmyadmin.net/files/5.2.0/)
+- Updated phpMyAdmin to 5.2.0 (<https://www.phpmyadmin.net/files/5.2.0/>)
 - Update Filegator to 7.8.1
 - Update PHPmailer to 6.6.2
 - Update composer dependencies
@@ -347,7 +347,7 @@ A bug in v-update-sys-hestia caused auto update to be not working. Please run: `
 
 ### Dependencies
 
-- Update phpMyAdmin to 5.1.4 (https://www.phpmyadmin.net/files/5.1.4/) (#2529)
+- Update phpMyAdmin to 5.1.4 (<https://www.phpmyadmin.net/files/5.1.4/>) (#2529)
 
 ## [1.5.14] - Service release
 
@@ -402,8 +402,8 @@ A bug in v-update-sys-hestia caused auto update to be not working. Please run: `
 
 ### Dependencies
 
-- Update PHPMailer to 6.6.0 (https://github.com/PHPMailer/PHPMailer/releases/tag/v6.6.0)
-- Update Filegator to 7.7.2 (https://github.com/filegator/filegator/releases/tag/v7.7.2)
+- Update PHPMailer to 6.6.0 (<https://github.com/PHPMailer/PHPMailer/releases/tag/v6.6.0>)
+- Update Filegator to 7.7.2 (<https://github.com/filegator/filegator/releases/tag/v7.7.2>)
 
 ## [1.5.8] - Service release
 
@@ -421,11 +421,11 @@ A bug in v-update-sys-hestia caused auto update to be not working. Please run: `
 - Fixed an issue where users were being redirected to login page when visiting /reset/ endpoint #2401
 - Fixed an issue where deleting sftp jail did not revert back permissions of said user. #2143
 - Fixed an issue where "REDIRECT" variable wasn't cleared correctly causing other sites to redirect to the domain after v-update-letsencrypt-ssl
-- Changed repository url MariaDB for new installs to https://wdlm.mariadb.com/repo/mariadb-server
+- Changed repository url MariaDB for new installs to <https://wdlm.mariadb.com/repo/mariadb-server>
 
 ### Dependencies
 
-- Update phpMyAdmin to 5.1.3 (https://github.com/phpmyadmin/phpmyadmin/releases/tag/RELEASE_5_1_3)
+- Update phpMyAdmin to 5.1.3 (<https://github.com/phpmyadmin/phpmyadmin/releases/tag/RELEASE_5_1_3>)
 
 ## [1.5.7] - Service release
 
@@ -435,13 +435,13 @@ A bug in v-update-sys-hestia caused auto update to be not working. Please run: `
 
 If you have to following error
 
-```
+```bash
 The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A189E93654F0B0E5
 ```
 
 Follow the following instructions
 
-```
+```bash
 rm /usr/share/keyrings/hestia-keyring.gpg
 mkdir /root/.gnupg/
 gpg --no-default-keyring --keyring /usr/share/keyrings/hestia-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A189E93654F0B0E5
@@ -454,7 +454,7 @@ After that run apt update && apt upgrade
 ### Bugfixes
 
 - Fixed an issue with the installer. system.pkg didn't allow for a Web alias #2381
-- Fixed an issue with upgrade script causing command to to be executed (https://forum.hestiacp.com/t/upgrading-to-1-5-5-error-line/5449/3)
+- Fixed an issue with upgrade script causing command to to be executed (<https://forum.hestiacp.com/t/upgrading-to-1-5-5-error-line/5449/3>)
 
 ## [1.5.5] - Service release
 
@@ -462,8 +462,8 @@ After that run apt update && apt upgrade
 
 - Improve default php-fpm.conf files. (#2318, #2343)
 - Notify user when a suspended user tries to login (#2310, #2345)
-- Allow setting default web install templates for Quick install (#2344) (https://github.com/hestiacp/hestia-quick-install)
-- Improve security how apt keys are downloaded #2299 (https://blog.cloudflare.com/dont-use-apt-key/)
+- Allow setting default web install templates for Quick install (#2344) (<https://github.com/hestiacp/hestia-quick-install>)
+- Improve security how apt keys are downloaded #2299 (<https://blog.cloudflare.com/dont-use-apt-key/>)
 - Allow users to set system php version in Web GUI (#2357)
 - Added a link to the firewall in list services (#2371) @fra81
 
@@ -487,9 +487,9 @@ After that run apt update && apt upgrade
 
 ### Dependencies
 
-- Update PHPmyadmin to 5.1.2 (https://www.phpmyadmin.net/files/5.1.2/)
-- Update Filegator to 7.7.1 (https://github.com/filegator/filegator/releases/tag/v7.7.1)
-- Update B2CLI to 3.2.0 (https://github.com/Backblaze/B2_Command_Line_Tool/releases/tag/v3.2.0) (#2349) @ptrinh
+- Update PHPmyadmin to 5.1.2 (<https://www.phpmyadmin.net/files/5.1.2/>)
+- Update Filegator to 7.7.1 (<https://github.com/filegator/filegator/releases/tag/v7.7.1>)
+- Update B2CLI to 3.2.0 (<https://github.com/Backblaze/B2_Command_Line_Tool/releases/tag/v3.2.0>) (#2349) @ptrinh
 
 ## [1.5.4] - Service release
 
@@ -628,7 +628,7 @@ After that run apt update && apt upgrade
 
 ### Dependencies
 
-- Update Roundcube to 1.5.0 https://roundcube.net/news/2021/10/18/roundcube-1.5.0-released
+- Update Roundcube to 1.5.0 <https://roundcube.net/news/2021/10/18/roundcube-1.5.0-released>
 - Update jQuery UI to the last version [CVE-2021-41182](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41182)
 
 ## [1.4.17] - Service release
@@ -834,7 +834,7 @@ After that run apt update && apt upgrade
 
 - Improve the calculated disk size of a new backup estimated by excluding the exclude folders, mail accounts and database in backups (#1616) @Myself5
 - Improve v-update-firewall / v-stop-firewall to make it self healing (#1892) @myrevery
-- Update phpMyAdmin version to 1.5.1 (See https://www.phpmyadmin.net/news/2021/6/4/phpmyadmin-511-released/)
+- Update phpMyAdmin version to 1.5.1 (See <https://www.phpmyadmin.net/news/2021/6/4/phpmyadmin-511-released/>)
 - Fixed a bug after rebuilding mail with Exim4 and suspended domains (#1886)
 - Fixed "Allowed IP addresses for API" field with strange behaviour #1866
 - Fixed an issue where the "Saved confirmation" was not set due to a redirect #1879
@@ -854,14 +854,14 @@ After that run apt update && apt upgrade
 
 - **NOTE:** During the 1.4.1 / 1.4.0 release we have introduced a bug for Ubuntu 20.04 and 18.04 users with multiple network ports on the server. This release will solve the problems caused by this bug! If you are unable to download the Hestia packages via apt. Run the following command via CLI or SSH as root
 
-```
-    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+```bash
+iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 ```
 
 Then run the update via
 
-```
-    apt update && apt upgrade
+```bash
+apt update && apt upgrade
 ```
 
 ### Bugfixes
@@ -887,7 +887,7 @@ Then run the update via
 
 - **NOTE:** Ubuntu 16.04 (Xenial) is no longer supported as it has reached EOL (end-of-life) status.
 - **NOTE:** Apache in "standalone" mode is no longer actively supported and has been removed from installer options. Nginx (Proxy) + Apache2 will remain supported.
-- **NOTE:** Custom "quick installer apps" will not work anymore due to changes in how we handle quick installer apps. Minimal changes to the Quick installer apps are required! Please check https://github.com/hestiacp/hestia-quick-install for how to migrate!
+- **NOTE:** Custom "quick installer apps" will not work anymore due to changes in how we handle quick installer apps. Minimal changes to the Quick installer apps are required! Please check <https://github.com/hestiacp/hestia-quick-install> for how to migrate!
 - **NOTE:** Manual upgrade scripts are available to update Roundcube, Rainloop and PHPmyadmin to the last version they can be found in /usr/local/hestia/install/upgrade/manual/
 
 ### Features
@@ -987,7 +987,7 @@ Then run the update via
 
 ### Bugfixes
 
-- Updated APT repository key for PHP from packages.sury.org (https://forum.hestiacp.com/t/apt-upgrade-failed-gpg-error-packages-sury-org)
+- Updated APT repository key for PHP from packages.sury.org (<https://forum.hestiacp.com/t/apt-upgrade-failed-gpg-error-packages-sury-org>)
 - Updated phpMyAdmin to v5.1.0.
 
 ## [1.3.4] - Service Release
@@ -1306,7 +1306,7 @@ Then run the update via
 - Fixed wrong quotes used for default keys folder location in v-generate-api-key backend script.
 - Fixed permissions to allow access for FTP users created in web domains under admin account.
 - Check if user home directory exists before setting permissions on SFTP fail2ban jail.
-- Fixed several reported security issues, thanks to Andrea Cardaci (https://cardaci.xyz/)
+- Fixed several reported security issues, thanks to Andrea Cardaci (<https://cardaci.xyz/>)
 - Security fix: Command line arguments arguments were glob expanded when written to log file.
 - Ensure that SFTP accounts remain configured in sshd when removing web domains/
 - Improved security by ensuring that file operations in user home folder will be executed as the real user.
@@ -1359,7 +1359,7 @@ Then run the update via
 
 ### Bugfixes
 
-- Fixed several security issues, thanks to Andrea Cardaci (https://cardaci.xyz/)
+- Fixed several security issues, thanks to Andrea Cardaci (<https://cardaci.xyz/>)
 - Rework Let's Encrypt ACME staging to use hestia conform standard.
 - Fixed if condition, use nginx for Let's Encrypt ACME request if present.
 
@@ -1422,7 +1422,6 @@ Then run the update via
 
 -
 
-[current]: https://github.com/hestiacp/hestiacp
 [1.0.4]: https://github.com/hestiacp/hestiacp/releases/tag/1.0.4
 [1.0.3]: https://github.com/hestiacp/hestiacp/releases/tag/1.0.3
 [1.0.1]: https://github.com/hestiacp/hestiacp/releases/tag/1.0.1

+ 3 - 3
CONTRIBUTING.md

@@ -1,4 +1,4 @@
-## Hestia Control Panel - Contribution Guidelines
+# Hestia Control Panel - Contribution Guidelines
 
 ## Ways to contribute
 
@@ -38,7 +38,7 @@ The first step is to create a fork of the `hestiacp/hestiacp` repository under y
 
 Once you've created your fork, clone the repository to your computer and make sure that you've checked out the `main` branch. **Always** create a new topic branch for your work.
 
-### Branch naming convention:
+### Branch naming convention
 
 - **Prefix:** `topic/` (such as **fix**, **feature**, **refactor**, etc.)
 - **ID**: `888` (GitHub Issue ID if an issue exists)
@@ -64,7 +64,7 @@ To aid other developers and keep the project's commit history clean, please **sq
 
 All pull requests must include a brief but descriptive title, and a detailed description of the changes that you've made. **Only include commits that are related to your feature, bug fix, or patch in your pull request!**
 
-## Thank you!
+## Thank you
 
 We appreciate **all** contributions no matter what size; your feedback and input directly shapes the future of Hestia Control Panel and we could not do it without your support.
 

+ 14 - 14
README.md

@@ -1,7 +1,7 @@
-![Hestia screenshot](https://hestiacp.com/img/screen_HestiaServer-dark.png)
-
 # [Hestia Control Panel](https://www.hestiacp.com/)
 
+![Hestia screenshot](https://hestiacp.com/img/screen_HestiaServer-dark.png)
+
 **Latest stable release:** Version 1.6.11 | [View Changelog](https://github.com/hestiacp/hestiacp/blob/release/CHANGELOG.md) | [![Build Status](https://drone.hestiacp.com/api/badges/hestiacp/hestiacp/status.svg?ref=refs/heads/main)](https://drone.hestiacp.com/hestiacp/hestiacp) <br>
 
 **Web:** [www.hestiacp.com](https://www.hestiacp.com/)<br>
@@ -29,7 +29,7 @@ Hestia Control Panel is designed to provide administrators an easy to use web an
 - Let's Encrypt SSL support with wildcard certificates
 - Firewall with brute-force attack detection and IP lists (iptables, fail2ban, and ipset).
 
-# Supported platforms and operating systems
+## Supported platforms and operating systems
 
 - **NOTE:** Hestia Control Panel does not support 32 bit operating systems!
 
@@ -38,13 +38,13 @@ Hestia Control Panel is designed to provide administrators an easy to use web an
 
 - **NOTE:** Hestia Control Panel in combination with OpenVZ 7 or lower might have issue Bind9 server not starting or issues with Firewall. If you use a Virtual Private Server we strongly advice you to use something based on KVM or LXC!
 
-# Installing Hestia Control Panel
+## Installing Hestia Control Panel
 
 - **NOTE:** Hestia Control Panel must be installed on top of a fresh operating system installation to ensure proper functionality.
 
 While we have taken every effort to make the installation process and the control panel interface as friendly as possible (even for new users), it is assumed that you will have some prior knowledge and understanding in the basics how to set up a Linux server before continuing.
 
-## Step 1: Log in
+### Step 1: Log in
 
 To start the installation, you will need to be logged in as **root** or a user with super-user privileges. You can perform the installation either directly from the command line console or remotely via SSH:
 
@@ -52,7 +52,7 @@ To start the installation, you will need to be logged in as **root** or a user w
 ssh root@your.server
 ```
 
-## Step 2: Download
+### Step 2: Download
 
 Download the installation script for the latest release:
 
@@ -66,7 +66,7 @@ If the download fails due to an SSL validation error, please be sure you've inst
 apt-get update && apt-get install ca-certificates
 ```
 
-## Step 3: Run
+### Step 3: Run
 
 To begin the installation process, simply run the script and follow the on-screen prompts:
 
@@ -76,7 +76,7 @@ bash hst-install.sh
 
 You will receive a welcome email at the address specified during installation (if applicable) and on-screen instructions after the installation is completed to log in and access your server.
 
-## Custom installation:
+### Custom installation
 
 You may specify a number of various flags during installation to only install the features in which you need. To view a list of available options, run:
 
@@ -84,9 +84,9 @@ You may specify a number of various flags during installation to only install th
 bash hst-install.sh -h
 ```
 
-Alternatively, @gabizz has made available a command-line script generator at https://gabizz.github.io/hestiacp-scriptline-generator/ which allows you to easily generate the installation command via GUI.
+Alternatively, @gabizz has made available a command-line script generator at <https://gabizz.github.io/hestiacp-scriptline-generator/> which allows you to easily generate the installation command via GUI.
 
-# How to upgrade an existing installation
+## How to upgrade an existing installation
 
 Automatic Updates are enabled by default on new installations of Hestia Control Panel and can be managed from **Server Settings > Updates**. To manually check for and install available updates, use the apt package manager:
 
@@ -95,18 +95,18 @@ apt-get update
 apt-get upgrade
 ```
 
-# Issues & Support Requests
+## Issues & Support Requests
 
 - If you encounter a general problem while using Hestia Control Panel and need help, please [visit our forum](https://forum.hestiacp.com/) to search for potential solutions or post a new thread where community members can assist.
 - Bugs and other reproducible issues should be filed via GitHub by [creating a new issue report](https://github.com/hestiacp/hestiacp/issues) so that our developers can investigate further. Please note that requests for support will be redirected to our forum.
 
 **IMPORTANT: We _cannot_ provide support for requests that do not describe the troubleshooting steps that have already been performed, or for third-party applications not related to Hestia Control Panel (such as WordPress). Please make sure that you include as much information as possible in your forum posts or issue reports!**
 
-# Contributions
+## Contributions
 
 If you would like to contribute to the project, please [read our Contribution Guidelines](https://github.com/hestiacp/hestiacp/blob/release/CONTRIBUTING.md) for a brief overview of our development process and standards.
 
-# Copyright
+## Copyright
 
 "Hestia Control Panel", "HestiaCP", and the Hestia logo are original copyright of hestiacp.com and the following restrictions apply:
 
@@ -120,6 +120,6 @@ If you would like to contribute to the project, please [read our Contribution Gu
 - use the names "Hestia Control Panel", "HestiaCP", or the Hestia logo in any context that is not related to the project,
 - alter the name "Hestia Control Panel", "HestiaCP", or the Hestia logo in any way.
 
-# License
+## License
 
 Hestia Control Panel is licensed under [GPL v3](https://github.com/hestiacp/hestiacp/blob/release/LICENSE) license, and is based on the [VestaCP](https://www.vestacp.com/) project.<br>

+ 1 - 1
SECURITY.md

@@ -23,7 +23,7 @@ With that, good luck hacking us ;)
 
 ## Qualifying Vulnerabilities
 
-### Vulnerabilities we really care about!
+### Vulnerabilities we really care about
 
 - Remote command execution
 - Code/SQL Injection

+ 1 - 1
bin/v-list-sys-ips

@@ -4,7 +4,7 @@
 #
 # example: v-list-sys-ips
 #
-# This function for obtaining the list of system ip adresses.
+# This function for obtaining the list of system ip addresses.
 
 #----------------------------------------------------------#
 #                Variables & Functions                     #

+ 4 - 4
docs/docs/reference/cli.md

@@ -778,7 +778,7 @@ v-add-user-composer user [version]
 ```
 
 This function adds support for composer (php dependency manager)
-Homepage: https://getcomposer.org/
+Homepage: <https://getcomposer.org/>
 
 ## v-add-user-notification
 
@@ -1037,7 +1037,7 @@ 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
+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.
 
@@ -4059,7 +4059,7 @@ list system ips
 
 **Options**: `[FORMAT]`
 
-This function for obtaining the list of system ip adresses.
+This function for obtaining the list of system ip addresses.
 
 ## v-list-sys-languages
 
@@ -5066,7 +5066,7 @@ 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
+<https://github.com/FastDigitalOceanDroplets/VestaCP/blob/master/files/v-search-command>
 
 ## v-search-domain-owner
 

+ 6 - 3
docs/docs/server-administration/backup-restore.md

@@ -8,19 +8,19 @@ and HestiaCP.
 1. Create a user backup on the old server.
 
    ```bash
-   $ v-backup-user username
+   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/
+   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
+   v-restore-user username username.2020.01.01-00-00.tar
    ```
 
 User accounts that do not exist will be created.
@@ -122,6 +122,7 @@ For security reasons, symlinks are not allowed. To change the default backup fol
 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
    ```
@@ -130,9 +131,11 @@ For a permanent fix you should add a record to `fstab`, so this folder would mou
 
 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

+ 1 - 1
docs/docs/server-administration/dns.md

@@ -159,4 +159,4 @@ When trying to add a DNS server for a cluster I get the following error:
 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.
+By default, API access has been disabled for non-local IP addresses. Please add your IP address to the **Allowed IP addresses for API** field in the server settings.

+ 1 - 1
docs/docs/server-administration/firewall.md

@@ -20,7 +20,7 @@ You can also use the [v-add-firewall-rule](../reference/cli.md#v-add-firewall-ru
 
 ## 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.
+IPSet are large lists of IP addresses 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.

+ 15 - 15
docs/docs/server-administration/ssl-certificates.md

@@ -21,20 +21,20 @@ Due to changes in the code, the error message has been changed. The following li
 | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
 | `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.
+### Let’s Encrypt validation status 400
 
 When requesting an SSL certificate, you may encounter the following error:
 
-```
+```bash
 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.
+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.
 
@@ -84,15 +84,15 @@ Once the test is completed, it will show an error or a success message, containi
 
 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)**.
+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)**.
+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)**.

+ 2 - 2
docs/docs/user-guide/backups.md

@@ -42,7 +42,7 @@ In the box labeled **Web Domains**, enter each domain you want to exclude, one p
 
 To exclude a specific folder from a domain use the following syntax:
 
-```
+```bash
 domain.tld:public_html/wp-content/uploads:public_html/cache
 ```
 
@@ -56,7 +56,7 @@ In the box labeled **Mail Domains**, enter each domain you want to exclude, one
 
 To exclude only one or multiple mail account use the following syntax:
 
-```
+```bash
 domain.tld:info:support
 ```
 

+ 0 - 1
docs/donate.md

@@ -1,5 +1,4 @@
 ---
-title: Donate
 aside: false
 lastUpdated: false
 ---

+ 2 - 1
package.json

@@ -10,7 +10,7 @@
 		"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": "prettier --check . && eslint web/js/ && stylelint web/css/src/**/*.css && markdownlint *.md docs/**/*.md",
 		"lint-staged": "lint-staged",
 		"format": "prettier --write .",
 		"postinstall": "husky install"
@@ -30,6 +30,7 @@
 		"eslint-plugin-editorconfig": "^4.0.2",
 		"husky": "^8.0.2",
 		"lint-staged": "^13.0.4",
+		"markdownlint-cli": "^0.32.2",
 		"postcss": "^8.4.19",
 		"postcss-cli": "^10.1.0",
 		"postcss-import": "^15.0.1",

+ 4 - 4
web/locale/NOTES.md

@@ -1,8 +1,8 @@
 # Hestia Update guide for improved language system
 
-### Create new translation
+## Create new translation
 
-Open hestiacp.pot in a .po(t) editor for example Poedit-2, gtranslator or online tools like https://localise.biz/free/poeditor
+Open hestiacp.pot in a .po(t) editor for example Poedit-2, gtranslator or online tools like <https://localise.biz/free/poeditor>
 Translate the file. Make sure you escape " with a slash. Save and update it in the folder. "iso"/LC_MESSAGES Please be aware that English (en) becomes en and Dutch (nl) becomes nl
 
 For example I create the file for Spanish:
@@ -11,10 +11,10 @@ Folder becomes locale/nl/LC_MESSAGES
 
 Run the command ./hst-convert-po2mo.sh language (./hst-convert-po2mo.sh nl)
 
-### Upadate translation
+## Upadate translation
 
 Open .po file in /locale/{language}/LC_MESSAGES .po(t) editor
 
-### Add / remove language strings
+## Add / remove language strings
 
 Run the command ./hst_scan_i18n.sh

+ 130 - 6
yarn.lock

@@ -1442,7 +1442,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"commander@npm:^9.4.1":
+"commander@npm:^9.4.1, commander@npm:~9.4.0":
   version: 9.4.1
   resolution: "commander@npm:9.4.1"
   checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13
@@ -1692,6 +1692,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"deep-extend@npm:^0.6.0":
+  version: 0.6.0
+  resolution: "deep-extend@npm:0.6.0"
+  checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7
+  languageName: node
+  linkType: hard
+
 "deep-is@npm:^0.1.3":
   version: 0.1.4
   resolution: "deep-is@npm:0.1.4"
@@ -1848,6 +1855,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"entities@npm:~3.0.1":
+  version: 3.0.1
+  resolution: "entities@npm:3.0.1"
+  checksum: aaf7f12033f0939be91f5161593f853f2da55866db55ccbf72f45430b8977e2b79dbd58c53d0fdd2d00bd7d313b75b0968d09f038df88e308aa97e39f9456572
+  languageName: node
+  linkType: hard
+
 "env-paths@npm:^2.2.0":
   version: 2.2.1
   resolution: "env-paths@npm:2.2.1"
@@ -2487,7 +2501,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"get-stdin@npm:^9.0.0":
+"get-stdin@npm:^9.0.0, get-stdin@npm:~9.0.0":
   version: 9.0.0
   resolution: "get-stdin@npm:9.0.0"
   checksum: 5972bc34d05932b45512c8e2d67b040f1c1ca8afb95c56cbc480985f2d761b7e37fe90dc8abd22527f062cc5639a6930ff346e9952ae4c11a2d4275869459594
@@ -2533,7 +2547,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"glob@npm:^8.0.1":
+"glob@npm:^8.0.1, glob@npm:~8.0.3":
   version: 8.0.3
   resolution: "glob@npm:8.0.3"
   dependencies:
@@ -2688,6 +2702,7 @@ __metadata:
     eslint-plugin-editorconfig: ^4.0.2
     husky: ^8.0.2
     lint-staged: ^13.0.4
+    markdownlint-cli: ^0.32.2
     normalize.css: ^8.0.1
     postcss: ^8.4.19
     postcss-cli: ^10.1.0
@@ -2792,7 +2807,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ignore@npm:^5.2.0, ignore@npm:^5.2.1":
+"ignore@npm:^5.2.0, ignore@npm:^5.2.1, ignore@npm:~5.2.0":
   version: 5.2.1
   resolution: "ignore@npm:5.2.1"
   checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5
@@ -2861,6 +2876,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"ini@npm:~3.0.0":
+  version: 3.0.1
+  resolution: "ini@npm:3.0.1"
+  checksum: 947b582a822f06df3c22c75c90aec217d604ea11f7a20249530ee5c1cf8f508288439abe17b0e1d9b421bda5f4fae5e7aae0b18cb3ded5ac9d68f607df82f10f
+  languageName: node
+  linkType: hard
+
 "ip@npm:^2.0.0":
   version: 2.0.0
   resolution: "ip@npm:2.0.0"
@@ -3050,6 +3072,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"jsonc-parser@npm:~3.1.0":
+  version: 3.1.0
+  resolution: "jsonc-parser@npm:3.1.0"
+  checksum: 81b00c565c60cb1b400523a918d42ad9c7bb3d9cf34c708bf78d37c8c496ecd670c3ff8828f2f60aa6e6627ef4287982794ddf92261ea71e320973c54b29fb22
+  languageName: node
+  linkType: hard
+
 "jsonfile@npm:^6.0.1":
   version: 6.1.0
   resolution: "jsonfile@npm:6.1.0"
@@ -3115,6 +3144,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"linkify-it@npm:^4.0.1":
+  version: 4.0.1
+  resolution: "linkify-it@npm:4.0.1"
+  dependencies:
+    uc.micro: ^1.0.1
+  checksum: 3e0a29921269c14eb7ac6f5db2da68d4854ea9acca6e9014a323f75f2dd39b197ffab57c1fbd6a906ceb021aad3ee6d7ba7d0181236dd9630ffc452b392f7f71
+  languageName: node
+  linkType: hard
+
 "lint-staged@npm:^13.0.4":
   version: 13.0.4
   resolution: "lint-staged@npm:13.0.4"
@@ -3299,6 +3337,57 @@ __metadata:
   languageName: node
   linkType: hard
 
+"markdown-it@npm:13.0.1":
+  version: 13.0.1
+  resolution: "markdown-it@npm:13.0.1"
+  dependencies:
+    argparse: ^2.0.1
+    entities: ~3.0.1
+    linkify-it: ^4.0.1
+    mdurl: ^1.0.1
+    uc.micro: ^1.0.5
+  bin:
+    markdown-it: bin/markdown-it.js
+  checksum: faf5891d389dc433bcf21d3fbff2009beb044b42b117c92f4848899780ca1a2282a209e3ff4672db4afed726a7248304ec473e6e242a7d6498af7113d31974e7
+  languageName: node
+  linkType: hard
+
+"markdownlint-cli@npm:^0.32.2":
+  version: 0.32.2
+  resolution: "markdownlint-cli@npm:0.32.2"
+  dependencies:
+    commander: ~9.4.0
+    get-stdin: ~9.0.0
+    glob: ~8.0.3
+    ignore: ~5.2.0
+    js-yaml: ^4.1.0
+    jsonc-parser: ~3.1.0
+    markdownlint: ~0.26.2
+    markdownlint-rule-helpers: ~0.17.2
+    minimatch: ~5.1.0
+    run-con: ~1.2.11
+  bin:
+    markdownlint: markdownlint.js
+  checksum: 131cb66b0d6da54f0feee4a73edda6337bf81ee5fbf3afcc6417faf4d0ec6f0231b2b471614e43588f6ea19f080b1a2bc5f4312e9dbf87656934fba0edb51231
+  languageName: node
+  linkType: hard
+
+"markdownlint-rule-helpers@npm:~0.17.2":
+  version: 0.17.2
+  resolution: "markdownlint-rule-helpers@npm:0.17.2"
+  checksum: e34c0266ffc0e1102fdd839dd70228b719c3120e8b61d0e21d4e21388a87203b7ec69d5dceb00d7bdc02fe215d2b51b14a7a72d89caa3acc7498edb38877cb40
+  languageName: node
+  linkType: hard
+
+"markdownlint@npm:~0.26.2":
+  version: 0.26.2
+  resolution: "markdownlint@npm:0.26.2"
+  dependencies:
+    markdown-it: 13.0.1
+  checksum: 9e20401410b5701bdaf2306a7856c8fd89c4c004b4b00568fb0f67f51a08952621e5cd260c50f947563794c971e45aac3c80f711781d921a19708c4c7ccc278c
+  languageName: node
+  linkType: hard
+
 "mathml-tag-names@npm:^2.1.3":
   version: 2.1.3
   resolution: "mathml-tag-names@npm:2.1.3"
@@ -3313,6 +3402,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"mdurl@npm:^1.0.1":
+  version: 1.0.1
+  resolution: "mdurl@npm:1.0.1"
+  checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b
+  languageName: node
+  linkType: hard
+
 "mem@npm:^8.0.0":
   version: 8.1.1
   resolution: "mem@npm:8.1.1"
@@ -3404,7 +3500,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"minimatch@npm:^5.0.1":
+"minimatch@npm:^5.0.1, minimatch@npm:~5.1.0":
   version: 5.1.1
   resolution: "minimatch@npm:5.1.1"
   dependencies:
@@ -3424,6 +3520,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"minimist@npm:^1.2.6":
+  version: 1.2.7
+  resolution: "minimist@npm:1.2.7"
+  checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec
+  languageName: node
+  linkType: hard
+
 "minipass-collect@npm:^1.0.2":
   version: 1.0.2
   resolution: "minipass-collect@npm:1.0.2"
@@ -5020,6 +5123,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"run-con@npm:~1.2.11":
+  version: 1.2.11
+  resolution: "run-con@npm:1.2.11"
+  dependencies:
+    deep-extend: ^0.6.0
+    ini: ~3.0.0
+    minimist: ^1.2.6
+    strip-json-comments: ~3.1.1
+  bin:
+    run-con: cli.js
+  checksum: 3a51dd6d2c489d6620b3595446f475bdd5b860443719633f45cee8a16b16778c91e5f614c8b5d3c15a20385fc33fbca4ef890ad1bf9e7ae2698546d8d7c33bcf
+  languageName: node
+  linkType: hard
+
 "run-parallel@npm:^1.1.9":
   version: 1.2.0
   resolution: "run-parallel@npm:1.2.0"
@@ -5365,7 +5482,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
+"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1":
   version: 3.1.1
   resolution: "strip-json-comments@npm:3.1.1"
   checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
@@ -5710,6 +5827,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5":
+  version: 1.0.6
+  resolution: "uc.micro@npm:1.0.6"
+  checksum: 6898bb556319a38e9cf175e3628689347bd26fec15fc6b29fa38e0045af63075ff3fea4cf1fdba9db46c9f0cbf07f2348cd8844889dd31ebd288c29fe0d27e7a
+  languageName: node
+  linkType: hard
+
 "unique-filename@npm:^2.0.0":
   version: 2.0.1
   resolution: "unique-filename@npm:2.0.1"