From 3ba97d54241bdac464fb7ebf8146f32d837a93d3 Mon Sep 17 00:00:00 2001 From: Retype GitHub Action Date: Thu, 16 May 2024 13:16:25 +0000 Subject: [PATCH] Refreshes Retype-generated documentation. Process triggered by jogoossens. --- 404.html | 8 +++---- about_turbostack/pricing/index.html | 8 +++---- about_turbostack/some_history/index.html | 8 +++---- control_panels/cpanel/index.html | 8 +++---- control_panels/directadmin/index.html | 8 +++---- customer-center/contacts/index.html | 8 +++---- customer-center/dns/index.html | 10 ++++----- customer-center/domains/index.html | 8 +++---- index.html | 20 +++++++++--------- resources/js/config.js | 2 +- resources/js/search.json | 2 +- sitemap.xml.gz | Bin 574 -> 574 bytes support/incident_management/index.html | 8 +++---- support/monitoring/index.html | 8 +++---- support/standard_support/index.html | 8 +++---- turbostack-app/basic_install/index.html | 8 +++---- turbostack-app/groups/index.html | 8 +++---- turbostack-app/howto_newapp/index.html | 10 ++++----- turbostack-app/howto_newuser/index.html | 10 ++++----- turbostack-app/turbostackcli/index.html | 8 +++---- turbostack-app/yaml/index.html | 8 +++---- .../caching/redis/index.html | 8 +++---- .../caching/varnish/index.html | 8 +++---- .../database/mysql/index.html | 8 +++---- turbostack_configuration/firewall/index.html | 8 +++---- turbostack_configuration/ftp/index.html | 8 +++---- turbostack_configuration/mail/index.html | 8 +++---- turbostack_configuration/security/index.html | 8 +++---- turbostack_configuration/ssh/index.html | 10 ++++----- .../ssl-tls_configuration/index.html | 8 +++---- .../web-server/apache/index.html | 8 +++---- .../web-server/nginx/index.html | 8 +++---- 32 files changed, 128 insertions(+), 128 deletions(-) diff --git a/404.html b/404.html index 02ddbf00..b747a1d8 100644 --- a/404.html +++ b/404.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/about_turbostack/pricing/index.html b/about_turbostack/pricing/index.html index f711c3f4..fdbd5325 100644 --- a/about_turbostack/pricing/index.html +++ b/about_turbostack/pricing/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/about_turbostack/some_history/index.html b/about_turbostack/some_history/index.html index 8a796676..166fd889 100644 --- a/about_turbostack/some_history/index.html +++ b/about_turbostack/some_history/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/control_panels/cpanel/index.html b/control_panels/cpanel/index.html index a43745ba..8f590b18 100644 --- a/control_panels/cpanel/index.html +++ b/control_panels/cpanel/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/control_panels/directadmin/index.html b/control_panels/directadmin/index.html index 23b61def..3abc8de7 100644 --- a/control_panels/directadmin/index.html +++ b/control_panels/directadmin/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/customer-center/contacts/index.html b/customer-center/contacts/index.html index 3953ee24..741753f7 100644 --- a/customer-center/contacts/index.html +++ b/customer-center/contacts/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/customer-center/dns/index.html b/customer-center/dns/index.html index cb9ba322..d40413e4 100644 --- a/customer-center/dns/index.html +++ b/customer-center/dns/index.html @@ -3,7 +3,7 @@ - + @@ -32,12 +32,12 @@ - + - + - - + +
diff --git a/customer-center/domains/index.html b/customer-center/domains/index.html index 86375799..5053df7a 100644 --- a/customer-center/domains/index.html +++ b/customer-center/domains/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/index.html b/index.html index 1280b8df..3dab7fc8 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
@@ -201,7 +201,7 @@

You have reached our TurboStack® documentation pages because you're interested in the full blown TurboStack® experience. -We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. <a href="https://www.hosted-power.com/en/turbostack#our-packages" target="_blank">Check out our packages here </a>.

+We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. Check out our packages here.

If this is the first time you're trying to log in to your PoC-environment or your Production TurboStack, you've come to the right place. This is where you start. So let's get goin'!

@@ -223,7 +223,7 @@

Login into the Hosted Power Customer Center

-

You can reach the Customer Center via this link: <a href="https://portal.hosted-power.com/" target="_blank">portal.hosted-power.com </a>.

+

You can reach the Customer Center via this link: <a href="https://portal.hosted-power.com/" target="_blank">``portal.hosted-power.com `.

Our customer center enables you to:

  • Manage contacts
  • @@ -259,8 +259,8 @@

    Likely the following checkboxes are of particular intrest

    - 1715863199073 -
    1715863199073
    + TurboStack Permissions +
    TurboStack Permissions

    This integration enhances coordination and ensures a unified workflow and allows communicating the right information to the right people.

    @@ -281,8 +281,8 @@

    Once you have your customer profile set up, it's time for the real work. Let's check out your TurboStack environment in the TurboStack App

    - 1715863517795 -
    1715863517795
    + TurboStack GUI +
    TurboStack GUI

    diff --git a/resources/js/config.js b/resources/js/config.js index f6e9778a..825b9267 100644 --- a/resources/js/config.js +++ b/resources/js/config.js @@ -1 +1 @@ -var __DOCS_CONFIG__ = {"id":"+5n2MFqCes8w56sX4y32hB7F02//szewaq","key":"/9l0mVRUyBw3o/4uFzDSOCo5HPJhf5OZkm3kAEyjfTc.NBl0afEWn8nT1jd1ZYDeNtZHH3Yp+uO4ZqMxDhi3bgGwllsQB6Cdk8OSpggm1ZcPvKwcSLDDJcqqaQPqz0pRcw.300111","base":"/","host":"docs.turbostack.app","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.769179780436","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Getting Started","s":""},{"n":"turbostack-app","l":"Turbo​Stack","c":false,"i":[{"n":"basic_install","l":"TS App Basics","s":""},{"n":"howto_newuser","l":"TS Accounts Mgmt","s":""},{"n":"howto_newapp","l":"TS Application Mgmt","s":""},{"n":"groups","l":"TS Groups","s":""},{"n":"yaml","l":"YAML","s":""},{"n":"turbostackcli","l":"TS CLI","s":""}],"s":""},{"n":"customer-center","l":"Customer Center","c":false,"i":[{"n":"contacts","l":"Contacts","s":""},{"n":"domains","l":"Domains","s":""},{"n":"dns","l":"DNS","s":""}],"s":""},{"n":"control_panels","l":"Control Panels","c":false,"i":[{"n":"cpanel","l":"c​Panel","s":""},{"n":"directadmin","l":"Direct​Admin","s":""}],"s":""},{"n":"turbostack_configuration","l":"Configuration","c":false,"i":[{"n":"caching","l":"Caching","c":false,"i":[{"n":"redis","l":"Redis","s":""},{"n":"varnish","l":"Varnish","s":""}],"s":""},{"n":"database","l":"Database","c":false,"i":[{"n":"mysql","l":"My​SQL","s":""}],"s":""},{"n":"firewall","l":"Firewall","s":""},{"n":"ftp","l":"FTP","s":""},{"n":"mail","l":"Mail","s":""},{"n":"security","l":"Security","s":""},{"n":"ssh","l":"SSH","s":""},{"n":"ssl-tls_configuration","l":"SSL/TLS configuration","s":""},{"n":"web-server","l":"Web Server","c":false,"i":[{"n":"nginx","l":"Nginx","s":""},{"n":"apache","l":"Apache","s":""}],"s":""}],"s":""},{"n":"about_turbostack","l":"About Turbo​Stack","c":false,"i":[{"n":"pricing","l":"Pricing","s":""},{"n":"some_history","l":"Some history","s":""}],"s":""},{"n":"support","l":"Support","c":false,"i":[{"n":"monitoring","l":"24/7 Monitoring & Alerting","s":""},{"n":"incident_management","l":"Incident Management","s":""},{"n":"standard_support","l":"Standard Support","s":""}],"s":""}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}}; +var __DOCS_CONFIG__ = {"id":"6GAJ2RYgcDn+wzUVrFI3Ow2TwhgkF32Vkt","key":"Pm7xa8gyz+C7DzSd/75KG8lK8x4qPV2oUeqK0HK0DVg.qHJR3tnv86ewOHi8IJu/PbdcqrPvXM/ZT8mP+det6WzMHvvCnPI3rJkw2K12YSQ0Qpih7bTUaAAYffSmcFXMRA.300075","base":"/","host":"docs.turbostack.app","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.769180582363","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Getting Started","s":""},{"n":"turbostack-app","l":"Turbo​Stack","c":false,"i":[{"n":"basic_install","l":"TS App Basics","s":""},{"n":"howto_newuser","l":"TS Accounts Mgmt","s":""},{"n":"howto_newapp","l":"TS Application Mgmt","s":""},{"n":"groups","l":"TS Groups","s":""},{"n":"yaml","l":"YAML","s":""},{"n":"turbostackcli","l":"TS CLI","s":""}],"s":""},{"n":"customer-center","l":"Customer Center","c":false,"i":[{"n":"contacts","l":"Contacts","s":""},{"n":"domains","l":"Domains","s":""},{"n":"dns","l":"DNS","s":""}],"s":""},{"n":"control_panels","l":"Control Panels","c":false,"i":[{"n":"cpanel","l":"c​Panel","s":""},{"n":"directadmin","l":"Direct​Admin","s":""}],"s":""},{"n":"turbostack_configuration","l":"Configuration","c":false,"i":[{"n":"caching","l":"Caching","c":false,"i":[{"n":"redis","l":"Redis","s":""},{"n":"varnish","l":"Varnish","s":""}],"s":""},{"n":"database","l":"Database","c":false,"i":[{"n":"mysql","l":"My​SQL","s":""}],"s":""},{"n":"firewall","l":"Firewall","s":""},{"n":"ftp","l":"FTP","s":""},{"n":"mail","l":"Mail","s":""},{"n":"security","l":"Security","s":""},{"n":"ssh","l":"SSH","s":""},{"n":"ssl-tls_configuration","l":"SSL/TLS configuration","s":""},{"n":"web-server","l":"Web Server","c":false,"i":[{"n":"nginx","l":"Nginx","s":""},{"n":"apache","l":"Apache","s":""}],"s":""}],"s":""},{"n":"about_turbostack","l":"About Turbo​Stack","c":false,"i":[{"n":"pricing","l":"Pricing","s":""},{"n":"some_history","l":"Some history","s":""}],"s":""},{"n":"support","l":"Support","c":false,"i":[{"n":"monitoring","l":"24/7 Monitoring & Alerting","s":""},{"n":"incident_management","l":"Incident Management","s":""},{"n":"standard_support","l":"Standard Support","s":""}],"s":""}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}}; diff --git a/resources/js/search.json b/resources/js/search.json index 29f2554f..8c22e40e 100644 --- a/resources/js/search.json +++ b/resources/js/search.json @@ -1 +1 @@ -[[{"l":"Getting Started"},{"i":"welcome-️","l":"Welcome ⚡️","p":["You have reached our TurboStack® documentation pages because you're interested in the full blown TurboStack® experience. We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. a href=https://www.hosted-power.com/en/turbostack#our-packages target=_blank Check out our packages here /a.","If this is the first time you're trying to log in to your PoC-environment or your Production TurboStack, you've come to the right place. This is where you start. So let's get goin'!"]},{"l":"Account Setup"},{"l":"Create a Customer Profile","p":["First things first. You need to set up a new account in our Customer Center, which will give you access to your profile & environments. You can a href=https://portal.hosted-power.com/signup/ target=_blank sign-up here /a. Please fill in the required information and submit."]},{"l":"Login into the Hosted Power Customer Center","p":["You can reach the Customer Center via this link: a href=https://portal.hosted-power.com/ target=_blank portal.hosted-power.com /a.","Our customer center enables you to:","Manage contacts","Add billing information","Follow-up on your support tickets","Purchase or transfer domain names","Assign rights to various contacts","Add SSH users, configure SSL certificates","etc..."]},{"l":"Add Relevant Contacts","p":["Once you've created an account, proceed to add all relevant contacts to your account.","This step is crucial for effective communication and collaboration between Hosted Power & your team. Adding relevant contacts to your account ensures that the right people receive the right information and communication."]},{"i":"external-partner-integration-optional","l":"External Partner Integration (optional)","p":["Ihis section is only relevant if you're working with a partner that needs access to your account to configure the environments and/or has to be notified about support tickets etc.","If you're a customer working through a partner, from now on referred to as \"Hosted Partner\" - pun intended-, TurboStack provides a seamless integration process. Request to link your account to the Hosted Partner using our innovative \"teams\" feature. The Hosted Partner can then supply you a unique code, enabling you to seamlessly join your account.","When the partner is linked to your account, the partner will automatically be linked to your account and they will for example be able to get support ticket notifications (if enabled). Furthermore they will be able to control your environments and servers via our TurboStack® GUI portal.","Under Customer Center > Managed Contacts > Teams you will find the invite team button where you can invite the partner as soon as you recieved the \"Invite Code\"","1715862802209","Likely the following checkboxes are of particular intrest","1715863199073","This integration enhances coordination and ensures a unified workflow and allows communicating the right information to the right people."]},{"l":"Set Permissions","p":["TurboStack empowers you with granular control over account permissions. Navigate to the settings and check the appropriate permissions for each contact. Specify who can manage servers, access billing information, receives invoices, handle tickets, and more. This level of customization enables you to allocate resources efficiently by determining which employees can work on specific projects.","Congratulations! You have now successfully set up your account, laying the foundation for efficient account management and collaboration within the Hosted Power ecosystem."]},{"i":"turbostack-suite-gui","l":"TurboStack® Suite GUI","p":["Once you have your customer profile set up, it's time for the real work. Let's check out your TurboStack environment in the TurboStack App","1715863517795"]},{"l":"Getting started with your TurboStack"},{"l":"1. Deployment","p":["Most applications can be easily deployed, as we already have fully optimized TurboStack technology for most commonly used open source solutions. Once deployed, you will receive the necessary info to be able to manage your TurboStack environment."]},{"l":"2. Login via SSH","p":["Get started by creating SSH keys and logging in to your TurboStack via SSH."]},{"l":"3. Configure your TurboStack"},{"i":"31-infrastructure-as-code-with-yaml","l":"3.1 Infrastructure as code with YAML","p":["It's also possible to configure TurboStack node simply by editing and/copy pasting the source code (YAML file) in the app. More info on the [YAML Source code](TurboStack App/YAML.md)."]},{"i":"32-ts-cli","l":"3.2 TS CLI","p":["More info on our TurboStack Command Line Interface"]},{"l":"4. Clone settings from an existing TurboStack","p":["You can clone existing server settings via the Source code(Yaml) view. It allows you to use a predefined template or to create an exact copy of the configuration of an already runnining environment","1715863608338"]},{"l":"5. Installing a new application on your TurboStack"},{"i":"in-need-of-support","l":"In need of Support?","p":["Got burning questions or bursting with feedback? Don't hold back – we thrive on it! Shoot us a message at support@hosted-power.com or call us at +32 53 599 000, and our squad of Turbo-trouble solvers will swoop in. Hosted Power's sales and support gurus are at your service on weekdays during office hours. Of course you can count on your SLA should critical incidents happen."]}],[{"l":"TS App Basics"},{"l":"Login and locate your managed servers","p":["When going to the TurboStack App, login with your credentials for the Customer Center.","If you don't have a login to the Customer Center yet, you first have to create a Primary account. More info here.","TurboStackAppLogin","Once logged in, all servers managed by this account will become visible in the \"Hosts\" tab.","TurboStackAppServers"]},{"l":"Main TurboStack App functions","p":["For each server there are main functions available.","TurboStackAppHeader","Switch between the GUI layout and the (advanced) YAML layout","Revisions: shows all historic configuration changes made to the server","Fetch the credentials and IPs of the servers all users and databases","Save any changes made to the configuration","Save and Publish: saves and deploys the changes made to the server","Under point 5, there the option to save and full publish. This will ensure everything gets deployed."]},{"i":"the-server-tab","l":"The 'server' tab","p":["The server tab defines some basic middleware configuration, like the type of webserver and some different type of databases that are supported.","TurboStackAppServerTab"]},{"i":"the-accounts-tab","l":"The 'accounts' tab","p":["The account tab defines the server users and the applications. Typically, a user can have one or more applications. In the examples below we have 2 users, prod and stag. The prod user has an application running on the weburl example.com and www.example.com","TurboStackAppAccountTab","Shows user prod and its ontaining applications","Shows user stag, with a collapsed layout","Will create an additional user."]},{"i":"the-groups-tab","l":"The 'groups' tab","p":["The groups tab can link a server to an existing group. Groups can define additional configuration that can then be applied to all nodes in that group.","TurboStackAppGroupTab"]},{"i":"the-ssh-tab","l":"The 'SSH' tab","p":["The SSH tab defines one or more public ssh keys that allow shell access to a TurboStack node without using a password. SSH keys can be added, deleted and edited here.","TurboStackAppSshTab"]},{"i":"the-security-tab","l":"The 'Security' tab","p":["The Security tab can update the server firewall. Allowing (whitelisting of) specific IPs or IP ranges. You even have the ability to allow or block complete countries/regions.","TurboStackAppSecurityTab","Allow (whitelist) one or more IPs or IP ranges","Block (blacklist) one or more countries","Only allow (whitelist) one or more countries"]}],[{"l":"TS Accounts Mgmt"},{"i":"creating-a-new-account-linux-user","l":"Creating a new account (linux user)"},{"l":"Linux user","p":["The account is a linux user. Later an application can be deployed under this user. We do not allow to run an application on the root user for security reasons.","Further more we also recommend not to run different types of applications under the same user. for example, the staging and production version of the application should be deployed on a separate user and maybe even on entirely different server"]},{"l":"How to deploy a new account in the GUI","p":["Creating a new user on the TurboStack App.","Open the TurboStack App","Open the server view","TurboStackNewUser","Go to the accounts page","Add a new account (user)","Give the account a name and save","Save and Publish will deploy the change to the host"]},{"l":"How to deploy a new account in the YAML","p":["for more advanced users there also the YAML configuration. adding a new account can be done with","TurboStackNewUser","Now an account is created. Applications can be installed.","Example, Deploy a Magento2 application"]}],[{"l":"TS Application Mgmt"},{"l":"How to create a new application","p":["Open the TurboStack app","Click the host view","Select to host to update"]},{"l":"Prerequisite","p":["Creating a new user on the TurboStack App. An account must exist before an application can be configured. How to create a new account"]},{"l":"Creating a new application in the GUI","p":["Creating a new (default) application under the newly created prod user. Scenario: creating a Magento2 application, listening on www.example.com and using varnish as caching","TurboStackNewApp","Open the detail section for the user","Click to add a new application","The first application for each user should always be default","Go to Hostnames and 1 or more names the website should listen on","Choose a website SSL certificate, there are 3 options: letsencrypt(default), selfsigned and custom(bring your own)","Go to Technologies and set the app type that matches your application","Enable PHP or another technology that your application requires","Scroll down to enable varnish on our websitedat","Optionally a monitoring url can be set that Hosted Power will monitoring 24/7.","Click Save to save and exit the configuration wizard.","Now, the new application is configured, click Save Publish to deploy the configuration to the server.","TurboStackNewApp TurboStackNewApp"]},{"l":"Creating a new application in the YAML","p":["for more advanced users there also the YAML configuration. adding a new application can be done with","a system_user ie. prod is needed before an application can be deployed","TurboStackNewApp"]}],[{"l":"TS Groups","p":["Groups make it possible to alter settings across multiple nodes. e.g. time zones or SSH key access to one or multiple TurboStack nodes."]},{"l":"Create a group","p":["Open the Groups tab to efficiently manage settings without the need to make changes individually for each user or project. Create partner groups, which enables you to provide SSH key access to multiple employees across different end user or partner environments."]},{"i":"scenario-1-use-groups-for-centralised-user-rights-management-with-ssh-keys","l":"Scenario 1: Use Groups for centralised user rights management with SSH keys","p":["SSHTab","Centralized user rights can streamline access control and simplify administration.","Identify the different levels of access required within your system.","Create user groups based on these access levels. For example, you might have groups like \"admin\", \"developers\", \"sysadmins\", etc.","Add users to appropriate groups based on their roles and responsibilities.","Each user who needs access to the system should generate an SSH key pair if they haven't already.","Have users from different groups attempt to log in using SSH keys to ensure that access is restricted according to the group-based configuration.","Regularly review user access and group memberships to ensure that they align with your current organizational requirements.","Hosted Power monitors system logs for any unauthorized access attempts and take appropriate action if necessary."]},{"i":"scenario-2-use-groups-for-centralised-turbostack-node-management","l":"Scenario 2: Use Groups for centralised TurboStack Node management","p":["HostsTab","Managing TurboStack nodes using groups can help streamline operations and ensure consistency across your infrastructure.","Determine the different roles that your TurboStack nodes will fulfill, such as web node, database node, application node, etc.","Create groups based on the identified server roles.","Assign each TurboStack node to the appropriate group based on its role."]},{"l":"The Security Tab","p":["The Security tab can update the firewall for all nodes in the Group. Allowing (whitelisting of) specific IPs or IP ranges. You even have the ability to allow or block complete countries/regions.","TurboStackAppSecurityTab","Allow (whitelist) one or more IPs or IP ranges","Block (blacklist) one or more countries","Only allow (whitelist) one or more countries"]}],[{"l":"YAML","p":["This page is under construction","The source code of the configuration of the server could be found as yaml. The yaml allows to create new and 100% identical servers in seconds.","Yaml Source Code","You could also choose to work with YAML by default via the profile settings.","Profile Settings"]},{"l":"How to add an account"},{"l":"How to add a vHost to an account"}],[{"l":"TS CLI","p":["The TurboStack Command Line Interface (later referred to as TSCLI) is available on all TurboStack nodes to provide you with an easy to use tool to manage the services on your environment, even ones you would normally need root access for. Below is a short description of the various features."]},{"l":"TSCLI Commands","p":["The TSCLI tool uses levels of arguments to categorize functions. Every command starts with 'tscli' followed by the service you're managing, followed by the parameters for the function you're using as documented below."]},{"l":"NGINX Webserver","p":["- Verifies the NGINX configuration and reloads it if it is valid. If it isn't valid you'll get an error with the issue reported."]},{"l":"BlackFire php Profiler","p":["- Installs the Blackfire Profiler and restarts the PHP-FPM service(s).","- Uninstalls the Blackfire Profiler and restarts the PHP-FPM service(s).","- Restarts the Blackfire Profiler service, to apply changes to the configuration."]},{"l":"Firewall","p":["- Returns info on wether the IP parameter is listed in the iptables. Please make sure to only use valid IP addresses.","- Flushes all automatic firewall IP blocks from the blocklist.","- Adds a firewall rule to block a specific IP address as specified in the IP parameter.","- Removes an IP address from the firewall's deny list."]},{"l":"PHP OpCache","p":["- Resets php's OpCache."]},{"l":"Varnish Cache","p":["- Clears everything from Varnish Cache's memory.","- Reloads the Varnisch Cache configuration"]},{"l":"Redis Cache","p":["- Clears everything from Redis Cache's memory."]}],[{"l":"Contacts"},{"l":"The Primary contact","p":["The primary contact will be the user who created the account in our Customer Center.","The primary contact is always the first point of contact should a critical incident on your environment occur.","If you haven't done this yet, you can sign-up here. Please fill in the required information and submit.","Now you can login into the Hosted Power Customer Center.","Our customer center enables you to:","Manage contact information","Add billing information","Follow-up on your support tickets","Purchase or transfer domain names","Assign rights to various contacts","Add SSH users, configure SSL certificates","etc..."]},{"l":"Add new contacts","p":["Now it's time to add your extra contacts. Technical colleagues, billing contacts etc...","In the Customer Center, navigate to Manage contacts. Here you can add your relevant contacts.","May we emphasize this step is really important for Hosted Power to be able to reach the correct people in every situation, so take your time to do this thoroughly if possible. You'll thank us later.","On the invite tab, you also have the option to invite existing contacts, e.g. an external consultant."]},{"l":"Teams"},{"l":"Add new teams","p":["Click through to the Teams tab. Here you can create your own teams, e.g. Dev, Billing, Agency, etc."]},{"l":"Invite external Teams","p":["If you have a new partner requiring access to your environment, you have the possibility to invite an existing team. You can also easliy remove teams from your environment.","CreateTeams"]},{"i":"userteams-rights-management","l":"User/Teams Rights management","p":["You have the choice to either manage the rights of single users or whole teams. Hosted Power advises to implement the \"Teams\" logic, even if you have only one person in this team. It makes management a lot easier in the future.","For your colleagues to be able to login to the TurboStack App, you need to give them access here."]},{"l":"Shared Hosting","p":["We have the possibility to use our shared \"Turbo Hosting\" option for more simple websites. Contact support if you want more information."]},{"l":"Domain management","p":["Check the Domains page for more info."]}],[{"l":"Domains","p":["Hosted Power is a domain registrar. Meaning domains can be bought, registered and managed within our customer center","There you can see the pricing for all TLDs and lookup if your preferred domain is still available."]},{"l":"How to order a domain","p":["TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain","Open the order menu","Select Domain Names from the menu","searchbar for domain names","search the domain name you want to register/purchase","now you can register a new domain","start the transfer from a domain hosted at another registrar"]},{"l":"How to remove a domain","p":["TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain","on the left hand menu open services and select Domains","Choose the domain you no longer need and click the arrow.","select the Auto Renew option","Change the auto renew to Off","save the changes","All domains are registered and paid for 1 year at the time. disabling the auto renew will make sure the domain is not charged anymore to your account after the expiration date."]},{"i":"bulk-transfer-domains","l":"(Bulk) transfer domains"},{"l":"Change owner","p":["..."]}],[{"l":"DNS","p":["The Hosted Power customer center has an application to manage DNS domains. It can be used to manage existing domains or new after registering a new domain","if you already use a control panel like DirectAdmin or Cpanel, we recommend using those internal DNS management tools"]},{"l":"Nameservers","p":["The Hosted Power nameservers"]},{"l":"DNS Management","p":["TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS","Open the order menu","Select DNS Management from the menu","checkout the service","The DNS Management service is now available","Open the management tool","Add 1 domain or multiple in bulk","Add the domain you already registered","Accept the domain","New records can be added like: A, AAAA, CNAME, TXT, ..."]}],[{"l":"cPanel"},{"l":"How to correctly configure a Magento 2 cronjob under cPanel","p":["Login via ssh as the account user (or login via cPanel -> Cronjobs)","(Replace demoshop by your own account name)"]},{"i":"fix---autossl-reduced-ssl-coverage","l":"FIX - AutoSSL reduced SSL coverage","p":["This is a known problem in cPanel AutoSSL.","This now requires each subdomain be verified individually. If this fails, they will automatically stop including them in the attempt and send an alert to your configured mail addresses. This can get very spammy, so you might want to solve the root cause. You can find more context in the official cPanel docs.","To resolve this, we recommend you check the configured domains. As you can see in the screenshot below, this often includes auto-generated cPanel subdomains","AutoSSL issue","As you can see, there's a lot of unprotected subdomains, however, none of these are actually in use. As such, you can safely exclude these from your certificate. To do this, you need to be logged in as the user of the domain for which the certificate is being generated.","Once logged in, you need to find the following option in your main menu: SSL/TLS Status","That page will look like this: AutoSSL issue2","Here you can see what your subdomains might look like. \"AutoSSL Domain Validated\" means it works, so you can ignore those. Then, all subdomains in red need to be checked. If you don't use the subdomain, you should click \"Exclude from AutoSSL\" as seen in the second item in the screenshot. Once you've dealt with all subdomains in error, you can click the \"Run AutoSSL\" button at the top of the page to re-run the validation. This will mean no more errors when running AutoSSL, and no more alert spam!"]}],[{"l":"DirectAdmin"},{"l":"Use composer version 1 on DirectAdmin","p":["Unfortunately DirectAdmin defaults to composer v2, despite efforts to override, this often get's updated to the newer version again.","The solution? Use \"composer1 ...\" command explicitly instead of \"composer ...\" to use the v1 version!"]},{"i":"apache-reverse-proxy-to-docker-nodejs-or-any-other-service","l":"Apache reverse proxy to docker, nodejs or any other service","p":["It's possible to use reverse proxy on DirectAdmin quite easily, however it's important to not block for example Let's Encrypt.","We will use port 8086 as an example here, navigate as admin user to: Server Manager >> Custom HTTPD Configurations >> \"Select applicable domain\" httpd.conf>> Customize >> Put the following code under CUSTOM2","Apache Reverse Proxy DirectAdmin"]},{"l":"Override e-mail in DirectAdmin","p":["DirectAdmin sometimes has an unwanted default email from when using a web form. There are 2 possible solutions:","Use an SMTP connector/plugin and configure it to use localhost","Override the EMAIL tag in the php fpm setting","Go to Custom HTTPD Configurations","Open the \"php-fpm.conf\" from the affected website/account","Inside php-fpm Global |CUSTOM1|","Add the override, for example |?EMAIL=john.doe@example.com|","Make sure to apply on all php versions","Hit the save button","Override mail DirectAdmin"]},{"l":"Disable Local Delivery for a Domain","p":["When you add a domain on your DirectAdmin server, a mail service is started for it by default. This can cause problems if another mail domain on this server wants to send mail to your domain of which the mail is NOT hosted on this server. This mail will try to be delivered locally, causing a message like the following:","SMTP-error (550) Recipient could not be added (No such recipient here).","You can easily solve this by disabling the mail service of your domain.","To do this, log in as the user of your domain and navigate to the option 'DNS Management', found under 'Account Manager'. Here you have the option 'Modify MX records', if you click on it you will see that the option 'Use this server to handle my emails. If not, change the MX records and uncheck this option.' is checked. Uncheck this and your problem is solved."]},{"i":"spamexperts-or-other-mail--spf-failures","l":"Spamexperts (or other) mail / SPF failures","p":["When using spamassisin in front of DirectAdmin, you see messages like:","This is because you need to add spamexperts to the safe senders (relayhost), this can be done as following:","edit this file: /etc/virtual/esf_skip_hosts","(Afterwards restart spamassassin)"]}],[{"l":"Redis","p":["By default there are 16 databases available (0-15), this could be increased on request","By default there are always at least 2 Redis instances available:","Can be cleared at all times, shouldn't influence application when cleared","Data = non persistent (volatile)","Data = persistent (non-volatile)","Notes:","Persistent data/information","port 6378 (non default)","port 6379 (default)","redis-persistent","Should/will never be cleared, clearing would influence application","socket file: /var/run/redis-persistent/redis.sock","socket file: /var/run/redis/redis.sock","Suitable for cache","Suitable for sessions","Try to use seperate databases when having multiple websites/applications on the same server (e.g. db 1 , db 2, ...)","Using the socket file is recommended when using local redis instances (less overhead = better performance!)","Volatile data/information"]}],[{"l":"Varnish","p":["#Varnish","You can add Varnish config to the VCL by adding files to the /etc/varnish/conf.d directory."]}],[{"l":"MySQL"},{"i":"mysql-import--export","l":"MySQL Import & Export","p":["For large databases we recommend exporting and importing trough the commandline"]},{"l":"MySQL Export","p":["OR with gzip (much smaller)"]},{"l":"MySQL Import"},{"i":"potential-errors--resolution","l":"Potential errors & resolution","p":["ERROR 1227 (42000) at line xxx: Access denied; you need (at least one of) the SUPER privilege(s) for this operation","SQLSTATE[42000]: Syntax error or access violation: 1142 TRIGGER command denied to user 'xxx'@'%' for table 'xxx', query was: ...","ERROR 1449 (HY000) at line xxx: The user specified as a definer ('xxx'@'%') does not exist, query was: ...","ERROR 1227 (42000) at line xxx: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation This is most likely because your database has routines/views, make sure to strip the definer owner during export:","OR","Or if you have already a dump file, you can also remove it during import:","mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces If you see this error, make sure to use the \"-y\" argument as in the above example when dumping MySQL database (This is the no-tablespaces option), your dump will still contain everything needed.","mysql: ERROR 1118 (42000) at line xxx: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. If you see this error, probably your data has grown too large to still be imported/exported with the ROW_FORMAT=COMPACT. You can import most likely by converting to ROW_FORMAT=DYNAMIC with the following command"]},{"i":"mysql-charset--collation-fix","l":"MySQL Charset & collation fix","p":["Example script to convert a whole database to a certain charset and collation","cat fixcollaction.bash"]}],[{"l":"Firewall","p":["Hosted Power prefers you to use our TS CLI commands if you want to make changes to the Firewall settings."]},{"i":"configserver-security--firewall-cheat-sheet","l":"ConfigServer Security & Firewall cheat sheet","p":["[IP.add.re.ss] [comment] Allow an IP(allow access to all ports) and add to /etc/csf/csf.allow","[IP.add.re.ss] [comment] Deny an IP and add to /etc/csf/csf.deny","[IP.add.re.ss] Remove an IP from the temporary IP ban or allow list","[IP.add.re.ss] Search the iptables and ip6tables rules for a match (e.g. IP, CIDR, Port Number)","[IP.add.re.ss] Unblock an IP and remove from /etc/csf/csf.deny","Block IP (temporarily for 24 hours, define in seconds)","Command","Configuration location is in the folder /etc/csf/ Main configuration file: /etc/csf/csf.conf","csf -a","csf -a 192.168.0.0/24","csf -a IP","csf -d","csf -df","csf -dr","csf -e","csf -f","csf -g","csf -r","csf -ra","csf -s","csf -t","csf -ta 192.168.0.0/24 86400","csf -td IP 86400","csf -tf","csf -tr","csf -x","Description","Diable CSF Firewall","Displays the current list of temporary allow and deny IP entries with their TTL and comment","Enable CSF Firewall","Example","Flush all IPs from the temporary IP entries","Flush/Stop firewall rule (note: lfd may restart csf)","Remove all temporary IP blocks","Remove and unblock all entries in /etc/csf/csf.deny","Restart CSF/LFD Firewall (iptables rules and LFD service)","Restart LFD only","Restart the firewall rules","root@server[~]#csf -a 187.33.3.3 Home IP Address","root@server[~]#csf -d 66.192.23.1 Blocked This Guy","root@server[~]#csf -df","root@server[~]#csf -dr 66.192.23.1","root@server[~]#csf -f","root@server[~]#csf -g 66.192.23.1","root@server[~]#csf -r","root@server[~]#csf -s","root@server[~]#csf -t","root@server[~]#csf -tf","root@server[~]#csf -tr 66.192.23.1","service lfd restart","Start the firewall rules","Useful CSF SSH Command Line Commands in a “cheat sheet” format.","Whitelist (temporarily) IP range /24 (allow access to all ports)","Whitelist (temporarily) IP range /24 for 24 hours (allow access to all ports, define in seconds)","Whitelist IP (allow access to all ports)"]},{"i":"csf-login-failure-daemon-lfd-blocks","l":"CSF Login Failure Daemon (LFD) blocks","p":["It's possible you or your customers get blocked by the security mechanisms of the ConfigServer Firewall. The LFD component could block too many failed login attempts to SSH, FTP, POP3, IMAP, HTTP, etc.","Unlike other applications, LFD is a daemon process that monitors logs continuously and so can react within seconds of detecting such attempts. It also monitors across protocols, so if attempts are made on different protocols in a short space of time, all those attempts will be counted against the threshold."]},{"i":"unblock-an-ip-address-in-csf--reason-for-blocking","l":"Unblock an IP Address in CSF & Reason for blocking","p":["Unblocking an IP Address in CSF & Reason of blocking Home » Plugins » ConfigServer Security & Firewall","To determine whether an IP address is blocked, you can use the Search for IP button on the ConfigServer Security&Firewall page. Simply enter the IP address into the search field and click the button.","If the IP address is blocked, the reason for the block will be listed and an unlocked padlock icon will appear to the right of the blocked IP address. Clicking the padlock icon will unblock the IP in the firewall."]},{"l":"Whitelist an IP address in CSF","p":["It's possible to ignore some IP-Addresses for your office, home office or third party that are working for something like testing the website/application or if you running a vulnerability scan. Sometimes it can be happy that you will be blocked by the CSF for many failed logins how we explained here above the article. Ignoring an IP-address will be a good solutions to avoid blocking.","Ignoring (Whitelisting) an IP Address Home »Plugins »ConfigServer Security & Firewall","To ignore an IP address in the firewall (csf.ignore), you can enter the IP address into the Quick Ignore section, allow such as “Office network”, and click the Quick Ignore button."]}],[{"l":"FTP"},{"i":"what-causes-the-login-failed-error-","l":"What causes the “Login failed” error ?","p":["Incorrect login details used Login details used by users for FTP access include their username and password. If these credentials are given wrongly in the FTP client, it can give a 530 login error in FTP. But for additional FTP accounts, the FTP login name is of the format ‘username@domain.com’. If the FTP username entered is not in this specific format, login failures happen.“530 Login authentication failed” also happens due to wrong password. Even a single additional space in the password can cause a login failure. Many account owners tend to overlook that aspect and struggle with 530 errors.","Path doesn't exist When the FTP users gets created by the support team, a path will be assagined on creation. If the path doesn't exists on the server this will cause a Login failure.","Unsupported TLS Of course, we can use TLSRequired off in our ProFTPd configuration as this allows for TLS and non-TLS logins, but if you want to make your FTP setup as secure as possible, you should enforce the use of TLS and make exceptions only for the users or groups that use an FTP client that doesn't support TLS (if using another FTP client is not an option for those users).","If we want to allow the FTP user testuser to use plain FTP instead of FTP, we can configure this as follows:"]}],[{"l":"Mail"},{"l":"Mail delivery best practices","p":["SPF record","Most important, make sure to add both the ipv4 and ipv6 of your server!!","Use -all at the end of your record!","DKIM will enhance delivery, however SPF will give you the most gain in delivery success.","DMARC is an extra record which can improve even more, but it's gain in delivery success is less than SPF and DKIM.","However it's quite important from a security point of view (avoid abuse by external parties).","The most basic DMARC txt record to create, which will enforce SPF: v=DMARC1; p=reject; aspf=s;","In doubt: Always use Mail tester","Make sure that you use the exact same method as the one your experience problems with when sending the mail to mail-tester."]},{"l":"SPF Record Syntax"},{"l":"Mechanisms","p":["Mechanisms can be prefixed with one of four qualifiers:","\"+\" Pass","\"-\" Fail","\"~\" SoftFail","\"?\" Neutral","If a mechanism results in a hit, its qualifier value is used. The default qualifier is \"+\", i.e. \"Pass\". For example:","Mechanisms are evaluated in order. If no mechanism or modifier matches, the default result is \"Neutral\".","If a domain has no SPF record at all, the result is \"None\". If a domain has a temporary error during DNS processing, you get the result \"TempError\" (called \"error\" in earlier drafts). If some kind of syntax or evaluation error occurs (eg. the domain specifies an unrecognized mechanism) the result is \"PermError\" (formerly \"unknown\").","Evaluation of an SPF record can return any of these results:"]},{"i":"the-all-mechanism","l":"The \"all\" mechanism","p":["This mechanism always matches. It usually goes at the end of the SPF record.","Examples:","Allow domain's MXes to send mail for the domain, prohibit all others.","The domain sends no mail at all.","The domain owner thinks that SPF is useless and/or doesn't care."]},{"i":"the-ip4-mechanism","l":"The \"ip4\" mechanism","p":["The argument to the \"ip4:\" mechanism is an IPv4 network range. If no prefix-length is given, /32 is assumed (singling out an individual host address).","Examples:","Allow any IP address between 192.168.0.1 and 192.168.255.255."]},{"i":"the-ip6-mechanism","l":"The \"ip6\" mechanism","p":["The argument to the \"ip6:\" mechanism is an IPv6 network range. If no prefix-length is given, /128 is assumed (singling out an individual host address).","Examples:","Allow any IPv6 address between 1080::8:800:0000:0000 and 1080::8:800:FFFF:FFFF."]},{"i":"the-a-mechanism","l":"The \"a\" mechanism","p":["All the A records for domain are tested. If the client IP is found among them, this mechanism matches. If the connection is made over IPv6, then an AAAA lookup is performed instead.","If domain is not specified, the current-domain is used.","The A records have to match the client IP exactly, unless a prefix-length is provided, in which case each IP address returned by the A lookup will be expanded to its corresponding CIDR prefix, and the client IP will be sought within that subnet.","The current-domain is used.","Equivalent if the current-domain is example.com.","Perhaps example.com has chosen to explicitly list all the outbound mailers in a special A record under mailers.example.com.","If example.com resolves to 192.0.2.1, the entire class C of 192.0.2.0/24 would be searched for the client IP. Similarly for offsite.example.com. If more than one A record were returned, each one would be expanded to a CIDR subnet."]},{"i":"the-mx-mechanism","l":"The \"mx\" mechanism","p":["All the A records for all the MX records for domain are tested in order of MX priority. If the client IP is found among them, this mechanism matches.","If domain is not specified, the current-domain is used.","The A records have to match the client IP exactly, unless a prefix-length is provided, in which case each IP address returned by the A lookup will be expanded to its corresponding CIDR prefix, and the client IP will be sought within that subnet.","Examples:","Perhaps a domain sends mail through its MX servers plus another set of servers whose job is to retry mail for deferring domains.","Perhaps a domain's MX servers receive mail on one IP address, but send mail on a different but nearby IP address."]},{"i":"the-include-mechanism","l":"The \"include\" mechanism","p":["The specified domain is searched for a match. If the lookup does not return a match or an error, processing proceeds to the next directive. Warning: If the domain does not have a valid SPF record, the result is a permanent error. Some mail receivers will reject based on a PermError.","Examples:","In the following example, the client IP is 1.2.3.4 and the current-domain is example.com.","If example.com has no SPF record, the result is PermError. Suppose example.com's SPF record were \"v=spf1 a -all\". Look up the A record for example.com. If it matches 1.2.3.4, return Pass. If there is no match, other than the included domain's \"-all\", the include as a whole fails to match; the eventual result is still Fail from the outer directive set in this example. Trust relationships — The \"include:\" mechanism is meant to cross administrative boundaries. Great care is needed to ensure that \"include:\" mechanisms do not place domains at risk for giving SPF Pass results to messages that result from cross user forgery. Unless technical mechanisms are in place at the specified otherdomain to prevent cross user forgery, \"include:\" mechanisms should give a Neutral rather than Pass result. This is done by adding \"?\" in front of \"include:\". The example above would be:","In hindsight, the name \"include\" was poorly chosen. Only the evaluated result of the referenced SPF record is used, rather than acting as if the referenced SPF record was literally included in the first. For example, evaluating a \"-all\" directive in the referenced record does not terminate the overall processing and does not necessarily result in an overall Fail. (Better names for this mechanism would have been \"if-pass\", \"on-pass\", etc.)"]},{"l":"Common SMTP and E-mail ports","p":["Common SMTP ports:","SMTP – port 25 or 587","Secure SMTP (SSL / TLS) – port 465 or 587","Common Email retrieval ports:","POP3 – port 110","POP3 SSL (POP3S) – port 995","IMAP – port 143","IMAP SSL (IMAPS) – port 993"]},{"i":"spf--dkim-record-for-mailchimp","l":"SPF & DKIM Record For MailChimp","p":["To authenticate your domain, you'll need to complete tasks in Mailchimp and in the zone editor(portal) or control panel. This process requires you to copy and paste information from Mailchimp to your domain provider's site. We recommend that you work with two browser windows or tabs to easily move between your sites.","Here's a brief overview of the process:","In Mailchimp","Verify your domain.","Copy two important pieces of information, your CNAME record for DKIM, and your TXT record for SPF","In Your Domain's Control Panel or Zone Editor","DKIM: Create a CNAME record for k1._ domainkey.yourdomain.com with this value: dkim.mcsv.net.","SPF: Create a TXT record for yourdomain.com with this value: v=spf1 include:servers.mcsv.net -all or add \"include:servers.mcsv.net\" to your SPF record","Note","The URLs above are examples only. Replace \"yourdomain.com\" with the domain you want to authenticate."]}],[{"l":"Security","p":["It is essential that companies take the security of their application seriously; as data breaches can have serious and long-lasting consequences. Malicious attacks can cause your website or application to be temporarily or permanently disabled. It can cause significant financial damage to your business, and damage to the trust of your customers if their personal information is released through your site or application. That is why, we at Hosted Power are taking the necessary steps to help prevent this."]},{"i":"virtual-access-security-ssltls","l":"Virtual Access Security (SSL/TLS)","p":["Virtual access protection ensures that if someone tries to intercept data while it is being sent over the internet, they will only see unreadable, unintelligible characters. SSL/TLS-encryption is such an integral part of website security, especially for e-commerce sites. Hosted Power provides this service for free. Not only does this help protect your customers, but search engines are increasingly labelling websites without SSL/TLS certificates as “insecure”, driving visitors away.","You can find more information on SSL/TLS on our dedicated page on the topic."]},{"l":"Managed Backup","p":["Backups are of course important, because in the event that your website or application crashes or gets compromised, you don’t want to lose all your data and have to rebuild your environment from scratch. Hosted Power provides a managed backup solution within the Service Level Agreement (SLA). By default, the backups are kept for 20 days and will be backed up daily. This retention period can be customized if necessary and is included in the Platinum SLA.","Any restores are included in the price and service. The time needed to restore is outside the SLA time."]},{"l":"DDoS-prevention","p":["Distributed Denial-of-Service (DDoS)-attacks are unfortunately a common tool in hacker’s arsenal. In a DDoS attack, they flood your environment with so much traffic that it creates a traffic jam and makes your application inaccessible to legitimate users, leaving your customers ‘deprived of service” as the webserver no longer can accept it. Since DDos attacks can be difficult to resolve, it is important to prevent them before they can happen. Hosted Power takes several steps at the network level to fend off these attacks. Here is a summary:"]},{"l":"Rate limiting","p":["By limiting the number of connections a single client can open in a certain amount of time can preventively limit potential DDoS attacks. In normal use, a web browser can open 5 to 7 TCP connections to a single website when all the resources are loaded to display the page. In contrast, DDoS attacks often go much further than this to maximize their effect. As such, anything above 10 connections simultaneously can be consider unusual activity."]},{"l":"Load balancing","p":["For rate throttling, a load balancer can be a useful first line of defense against DDoS. For example, HAProxy, which is primarily a load balancer proxy for TCP and HTTP, can also act as a traffic controller. HAProxy can be used to protect against DDoS attacks by denying or redirecting connections based on various identifiers such as IP, URL or cookies."]},{"l":"Blackhole-routing","p":["One of the simplest countermeasures to mitigate a DDoS attack is to divert the flow of connections in to a “black hole” b throwing all the data away. Optional extra DDoS-security The most effective way to mitigate DDoS attacks is simply to have more capacity to process incoming data than the cybercriminals can muster. It is unlikely that a single server or service can achieve this on its own, which is why a helping hand from a third party DDoS protection service, such as Cloudflare, can be extremely helpful."]},{"l":"Imunify360","p":["Imunify360 continuously gathers vast amounts of information about new attacks from environments all over the world. The software analyzes the web traffic hitting your nodes, understands all security threats, and uses powerful AI technology to dynamically update its rules and prevent malicious attacks that can cause damage. Imunify360 utilizes machine learning technology and comprehensive algorithms to identify patterns of abnormal behavior almost in real-time and swiftly prevent new attacks.","Where Imunify360 Makes the Difference:","Advanced detection and display of security threats, powered by the self-learning firewall with herd immunity","Protection against many threats, including distributed brute force attacks","Analysis of insights from the global network to ban attackers before they attack you","Protection of web applications against malware injections","Automatic security for your kernel and older PHP versions","Smart intrusion detection","Reputation Management and an advanced Captcha system","Is a responsive system with a high frequency of scanning that does not degrade the performance of your servers."]},{"i":"web-application-firewall-waf","l":"Web Application Firewall (WAF)","p":["Hosted Power obviously takes security into account and can provide Web Application Firewall (WAF) based on ModSecurity. If desired, in addition to ModSecurity, Fortinet FortiWeb Application Firewall can also be set up. This is considered case by case. A WAF goes much further than a standard firewall by analyzing the application layer (OSI layer 7) instead of stopping at Layer 3. The WAF offers, amongst other things, extra protection against SQL injection, XSS attacks, etc. According to the OWASP top 10.","The WAF contains virtual patches for a kinds of frameworks. This guarantees extra high security out of the box, because this way an (for example recently) unpatched leak can still be closed immediately before a patch has been applied to the application layer. If desired, Hosted Power has a WAF available. Please contact your personal account manager if you would like more information about this subject."]}],[{"l":"SSH"},{"l":"Setting Up SSH Client on Windows"},{"i":"step-1-install-openssh-client-feature","l":"Step 1: Install OpenSSH Client Feature","p":["Windows 10 and later versions include an optional feature called \"OpenSSH Client\" that you can install via the Settings app or PowerShell.","Using Settings App:","Open Settings (Press Windows key + I), then go to \"Apps\" > \"Optional Features\".","Click on \"Add a feature\", search for \"OpenSSH Client\", and click \"Install\".","Using PowerShell:","Open PowerShell as an administrator.","Run the following command:"]},{"i":"step-2-generate-ssh-key-pair","l":"Step 2: Generate SSH Key Pair","p":["If you haven't already generated an SSH key pair, you can do so using the ssh-keygen command in PowerShell. Run the following command:","This command will prompt you to choose a location to save the key pair and optionally set a passphrase."]},{"i":"step-3-copy-public-key-to-remote-server","l":"Step 3: Copy Public Key to Remote Server","p":["Once the key pair is generated, you need to copy the public key to the remote server. You can use tools like ssh-copy-id or manually copy the public key."]},{"i":"step-4-test-ssh-connection","l":"Step 4: Test SSH Connection","p":["You can now test your SSH connection to the remote server using the ssh command in PowerShell:","If everything is set up correctly, you should be logged in to the remote server without being prompted for a password."]},{"i":"step-5-optional-configuration","l":"Step 5: Optional Configuration","p":["You can configure your SSH client by editing the ~/.ssh/config file. This file allows you to set options such as default usernames, identities, and SSH server configurations.","You're all set! You can now securely connect to remote servers using SSH without having to enter a password each time."]},{"l":"Setting Up SSH Client on Linux"},{"i":"step-1-install-openssh","l":"Step 1: Install OpenSSH","p":["Make sure OpenSSH client is installed on your Linux system. If not installed, you can install it using your package manager. For example, on Ubuntu or Debian-based systems, you can use:"]},{"i":"step-2-generate-ssh-key-pair-1","l":"Step 2: Generate SSH Key Pair","p":["If you haven't already generated an SSH key pair, you can do so using the ssh-keygen command. Run the following command in your terminal:","This command will prompt you to choose a location to save the key pair and optionally set a passphrase."]},{"i":"step-3-copy-public-key-to-remote-server-1","l":"Step 3: Copy Public Key to Remote Server","p":["Once the key pair is generated, you need to copy the public key to the remote server. You can use the ssh-copy-id command for this. Replace username and remote_host with your username and the hostname or IP address of the remote server:","You'll be prompted to enter your password on the remote server. Once authenticated, your public key will be added to the ~/.ssh/authorized_keys file on the remote server."]},{"i":"step-4-test-ssh-connection-1","l":"Step 4: Test SSH Connection","p":["You can now test your SSH connection to the remote server using the following command:","If everything is set up correctly, you should be logged in to the remote server without being prompted for a password."]},{"i":"step-5-optional-configuration-1","l":"Step 5: Optional Configuration","p":["You can configure your SSH client by editing the ~/.ssh/config file. This file allows you to set options such as default usernames, identities, and SSH server configurations.","You're all set! You can now securely connect to remote servers using SSH without having to enter a password each time."]}],[{"i":"ssltls-configuration","l":"SSL/TLS configuration","p":["A Certificate authority is a trusted entity responsible for issuing digital certificates used to authenticate the identities of entities such as websites, servers, users, and devices on the internet or within a private network"]},{"i":"lets-encrypt-certificate","l":"Let's Encrypt Certificate","p":["LetsEncrypt is a certificate authority that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. The certificate is valid for 90 days, during which renewal can take place at anytime. The offer is accompanied by an automated process designed to overcome manual creation, validation, signing, installation, and renewal of certificates for secure websites","The key principles behind Let's Encrypt, taken from their website","Free - Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.","Automatic - Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.","Secure - Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.","Transparent - All certificates issued or revoked will be publicly recorded and available for anyone to inspect.","Open: The automatic issuance and renewal protocol is published as an open standard that others can adopt.","Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization."]},{"l":"Third Party Certificate"},{"l":"Comodo","p":["Contact our support if you need to install a third party certificate."]}],[{"l":"Nginx"},{"l":"Enable Basic Authentication on your website for NGINX","p":["It's relatively easy to configure Basic Authentication using a .htpasswd file (similar to a basic auth block in Apache .htaccess) in NGINX on TurboStack. This way you can block access to your development version of the website for non-authenticated users. This guide assumes you know what Basic Authentication is."]},{"l":"How-to","p":["First locate your nginx main configuration file from the home directory of your user:","Then, uncomment the following lines to activate Basic Authentication:","OPTIONAL: You can add whitelisting based on IP-addresses for connections that will not need to identify using the Basic Auth service, simply add \"allow \":","Lastly, to enact your changes, reload the NGINX service:"]}],[{"l":"Apache"},{"i":"grant-or-deny-access-to-server-for-specific-ips-while-using-basic-auth","l":"Grant or deny access to server for specific IP's while using basic auth","p":["In this article, we'll tackle the problem how we can decide if a visitor should or should not login on a server with basic auth enabled, based on it's IP-address.","So what is the result we want to achieve? We want to implement an .htpasswd so visitors need to have a valid login, except when the request came from a whitelisted IP adress. In that case, no login is asked and you'll be redirected to the site. Like a VIP that would skip a waiting queue for a club.","This method is used for Apache2"]},{"i":"method-1-server-without-varnish-enabled","l":"Method 1: Server without varnish enabled","p":["There is a difference when a server has or doesn't have Varnish enabled. For now we'll make it simple assuming there is no interruption with any service like Varnish. In that case we'll use the next setup:","For best practice, we put this code at the top of our .htaccess file"]},{"i":"method-2-server-with-varnish-enabled","l":"Method 2: Server with varnish enabled","p":["For a server with varnish enabled, is a different approach needed. All requests that go through varnish will pass the header (X-Forwarded-For), but it may contain some tempered information about the visitors IP. Because of this modification, the request for immediate access will be denied and the visitor will be asked to login. To make sure this won't happen, we'll add a variable for the header that contains the whitelisted IP-adress.","The code below will do the trick:","For best practice will we add the IP's to the required list require ip"]},{"l":"Block infamous bytespider bot","p":["Sometimes a server can go high in load due to the infamous bytespider bot. This one can be excluded by implementing this piece of code inside the .htaccess:"]}],[{"l":"Pricing","p":["TurboStack®, the fastest software stack designed to be fully configurable. Take advantage of any technology in the same stack. Easily customize programming language, caching or database. Enormous flexibility and an ultra secure environment that supports any project."]},{"l":"Versatile Stack with Rapid Delivery"},{"i":"put-an-end-to-instability--difficulties-in-heavy-processes","l":"Put an end to instability & difficulties in heavy processes","p":["Each environment is configured to ensure the fastest loading times and stability to handle the most abrupt visitor spikes.","Your project can be delivered at lightning speed. Within half an hour we deploy any desired technology or software.Your project can be delivered at lightning speed. Within half an hour we deploy any desired technology or software."]},{"i":"pricing-1","l":"Pricing","p":["We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. Check out our packages here."]}],[{"l":"Some history","p":["⚡ * At Hosted Power you will find experts in managed hosting, who are people-oriented and think along with you based on their passion for Cloud technology. * ⚡"]},{"l":"One team of people","p":["Without cooperation there is no team. We want to see our people grow together with Hosted Power. We do this by actively sharing knowledge, striving for transparency, involvement and open communication. We stand behind our each other as one team, our hyper-fast solution and our partners, without losing sight of the fun factor. Freedom and open vision are indispensable. Our people do what they like to do and are given every opportunity to grow.","Happy Colleagues = Happy Partners = Happy Customers!"]},{"l":"Goals","p":["In essence, we exist to serve you as a customer, to improve your situation, to automate, to accelerate it and to unburden you completely with your cloud environment. With our agile, in-house developed custom solution TurboStack®, we will accommodate your needs. We continuously challenge ourselves and follow up the hottest technological trends and see innovation as a challenge."]},{"l":"Our mission","p":["We are creative and businesslike. We aim to be your reliable partner. Our secret is to find the ideal mix between perfecting existing technologies and implementing innovative ideas and technologies. We are therefore 100% committed to a long-term relationship with you as our client. We will always give our honest and clear opinion about what the best solutions is for your specific challenges. Honesty is the most important key in a successful partner relationship. So we don't go for the \"quick fixes\" but for a robust long-term solution with the necessary attention to your needs.","\"If you want to be able to fall back on an external team that actively thinks along, and can offer the best environments, Hosted Power is the right partner for you. Let's meet!\""]}],[{"i":"247-monitoring--alerting","l":"24/7 Monitoring & Alerting"},{"l":"Proactive monitoring","p":["At Hosted Power, we recognize the paramount importance of application availability and stability to our partners. Our comprehensive approach to ensuring stability encompasses various factors, chief among them being the reliability of the TurboStack platform itself. With our dedicated team of experts vigilantly monitoring your environments round the clock, 7 days a week, rest assured that your application's stability is our top priority.","Should any threat arise, our skilled engineers are on standby to swiftly intervene, safeguarding your operations seamlessly."]},{"l":"Alerting","p":["In critical situations , Hosted Power activates its On Call procedure. Our on call team is on standby 24/7, ensuring swift manual investigation and resolution of issues, regardless of office hours. If the primary On Call colleague doesn’t respond within 30 minutes, an alert automatically triggers escalation to the entire on call team, engaging our Operations engineers on call \"pool\" until someone acknowledges the issue en starts to research.","Once alerted, our On Call colleeague tackles the issue, whether it involves tasks like disk space optimization, restarting services, or mitigating abusive traffic. If necessary, escalation to our cloud providers occurs for issues unrelated to Hosted Power."]},{"l":"Escalation Matrix","p":["This matrix shows how our escalation processes take place."]},{"l":"Escalation of customer contacts","p":["Operations engineer (technical) or account manager (commercial)","(Servicemanager) if applicable","Operations manager","Technical teamlead (technical problems) or COO (commercial problems)"]},{"l":"Internal technical escalation","p":["Operations engineer","Technical teamlead","CEO"]},{"l":"Internal commercial escalation","p":["Account manager","COO","CEO"]}],[{"l":"Incident Management","p":["Hosted Power analyzes within the SLA response time whether the reported incident can be qualified as critical unavailability based on all the information. The analysis is done remotely (via telephone, e-mail, and or monitoring tools) by our own system engineers.","You may be requested to provide information, and possibly receive instructions to carry out simple troubleshooting or adjustments in consultation with the Hosted Power technicians. Hosted Power then informs the customer of the solution or proposes a workaround."]},{"l":"Critical support","p":["Critical support includes anything that prevents the correct functioning of the server and requires immediate attention. This concerns defects in the data centers infrastructure, the Hosted Power network, the hardware and the server services that result in a proven unavailability of the services provided."]},{"l":"Non-critical support","p":["All other questions related to matters that do not result in unavailability of the services provided are by definition non-critical questions. This includes (non-exhaustive list):","Questions related to the use of the services offered","Software support for applications provided by Hosted Power","Configuration changes (which are not necessary to fix a critical problem)","The services that form the core of our services, such as our network, power supply, hardware cooling, etc. are proactively monitored 24/7. If a failure is indicated there, we intervene proactively & immediately. We usually see problems arise before they have real impact on your environment."]}],[{"l":"Standard Support","p":["Normal service is available during office hours (and must be done through the service desk, either by e-mail and/or by telephone:","BE: +32 53 599 000","NL: 085 888 4 555","FR: 04 83 97 97 97","Office hours apply from Monday to Thursday between 8:45 am and 17:30pm and on Friday between 8:45 am and 16:30 pm. Hosted Power will always aim to help, but sometimes we need the customer or developer to be able to commit changes.","When the service desk is closed, Hosted Power offers a 24x7 emergency service. Failures can be reported here that lead to the critical unavailability of our services, which Hosted Power is contracted to provide or support. In case of critical unavailability of the environment, this emergency service is always free of charge for contracts. After reporting the issues over the phone, an email notification should also be submitted to support, stating the issue, unless agreed not to be necessary."]}]] \ No newline at end of file +[[{"l":"Getting Started"},{"i":"welcome-️","l":"Welcome ⚡️","p":["You have reached our TurboStack® documentation pages because you're interested in the full blown TurboStack® experience. We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. Check out our packages here.","If this is the first time you're trying to log in to your PoC-environment or your Production TurboStack, you've come to the right place. This is where you start. So let's get goin'!"]},{"l":"Account Setup"},{"l":"Create a Customer Profile","p":["First things first. You need to set up a new account in our Customer Center, which will give you access to your profile & environments. You can a href=https://portal.hosted-power.com/signup/ target=_blank sign-up here /a. Please fill in the required information and submit."]},{"l":"Login into the Hosted Power Customer Center","p":["You can reach the Customer Center via this link: a href=https://portal.hosted-power.com/ target=_blank``portal.hosted-power.com `.","Our customer center enables you to:","Manage contacts","Add billing information","Follow-up on your support tickets","Purchase or transfer domain names","Assign rights to various contacts","Add SSH users, configure SSL certificates","etc..."]},{"l":"Add Relevant Contacts","p":["Once you've created an account, proceed to add all relevant contacts to your account.","This step is crucial for effective communication and collaboration between Hosted Power & your team. Adding relevant contacts to your account ensures that the right people receive the right information and communication."]},{"i":"external-partner-integration-optional","l":"External Partner Integration (optional)","p":["Ihis section is only relevant if you're working with a partner that needs access to your account to configure the environments and/or has to be notified about support tickets etc.","If you're a customer working through a partner, from now on referred to as \"Hosted Partner\" - pun intended-, TurboStack provides a seamless integration process. Request to link your account to the Hosted Partner using our innovative \"teams\" feature. The Hosted Partner can then supply you a unique code, enabling you to seamlessly join your account.","When the partner is linked to your account, the partner will automatically be linked to your account and they will for example be able to get support ticket notifications (if enabled). Furthermore they will be able to control your environments and servers via our TurboStack® GUI portal.","Under Customer Center > Managed Contacts > Teams you will find the invite team button where you can invite the partner as soon as you recieved the \"Invite Code\"","1715862802209","Likely the following checkboxes are of particular intrest","TurboStack Permissions","This integration enhances coordination and ensures a unified workflow and allows communicating the right information to the right people."]},{"l":"Set Permissions","p":["TurboStack empowers you with granular control over account permissions. Navigate to the settings and check the appropriate permissions for each contact. Specify who can manage servers, access billing information, receives invoices, handle tickets, and more. This level of customization enables you to allocate resources efficiently by determining which employees can work on specific projects.","Congratulations! You have now successfully set up your account, laying the foundation for efficient account management and collaboration within the Hosted Power ecosystem."]},{"i":"turbostack-suite-gui","l":"TurboStack® Suite GUI","p":["Once you have your customer profile set up, it's time for the real work. Let's check out your TurboStack environment in the TurboStack App","TurboStack GUI"]},{"l":"Getting started with your TurboStack"},{"l":"1. Deployment","p":["Most applications can be easily deployed, as we already have fully optimized TurboStack technology for most commonly used open source solutions. Once deployed, you will receive the necessary info to be able to manage your TurboStack environment."]},{"l":"2. Login via SSH","p":["Get started by creating SSH keys and logging in to your TurboStack via SSH."]},{"l":"3. Configure your TurboStack"},{"i":"31-infrastructure-as-code-with-yaml","l":"3.1 Infrastructure as code with YAML","p":["It's also possible to configure TurboStack node simply by editing and/copy pasting the source code (YAML file) in the app. More info on the [YAML Source code](TurboStack App/YAML.md)."]},{"i":"32-ts-cli","l":"3.2 TS CLI","p":["More info on our TurboStack Command Line Interface"]},{"l":"4. Clone settings from an existing TurboStack","p":["You can clone existing server settings via the Source code(Yaml) view. It allows you to use a predefined template or to create an exact copy of the configuration of an already runnining environment","1715863608338"]},{"l":"5. Installing a new application on your TurboStack"},{"i":"in-need-of-support","l":"In need of Support?","p":["Got burning questions or bursting with feedback? Don't hold back – we thrive on it! Shoot us a message at support@hosted-power.com or call us at +32 53 599 000, and our squad of Turbo-trouble solvers will swoop in. Hosted Power's sales and support gurus are at your service on weekdays during office hours. Of course you can count on your SLA should critical incidents happen."]}],[{"l":"TS App Basics"},{"l":"Login and locate your managed servers","p":["When going to the TurboStack App, login with your credentials for the Customer Center.","If you don't have a login to the Customer Center yet, you first have to create a Primary account. More info here.","TurboStackAppLogin","Once logged in, all servers managed by this account will become visible in the \"Hosts\" tab.","TurboStackAppServers"]},{"l":"Main TurboStack App functions","p":["For each server there are main functions available.","TurboStackAppHeader","Switch between the GUI layout and the (advanced) YAML layout","Revisions: shows all historic configuration changes made to the server","Fetch the credentials and IPs of the servers all users and databases","Save any changes made to the configuration","Save and Publish: saves and deploys the changes made to the server","Under point 5, there the option to save and full publish. This will ensure everything gets deployed."]},{"i":"the-server-tab","l":"The 'server' tab","p":["The server tab defines some basic middleware configuration, like the type of webserver and some different type of databases that are supported.","TurboStackAppServerTab"]},{"i":"the-accounts-tab","l":"The 'accounts' tab","p":["The account tab defines the server users and the applications. Typically, a user can have one or more applications. In the examples below we have 2 users, prod and stag. The prod user has an application running on the weburl example.com and www.example.com","TurboStackAppAccountTab","Shows user prod and its ontaining applications","Shows user stag, with a collapsed layout","Will create an additional user."]},{"i":"the-groups-tab","l":"The 'groups' tab","p":["The groups tab can link a server to an existing group. Groups can define additional configuration that can then be applied to all nodes in that group.","TurboStackAppGroupTab"]},{"i":"the-ssh-tab","l":"The 'SSH' tab","p":["The SSH tab defines one or more public ssh keys that allow shell access to a TurboStack node without using a password. SSH keys can be added, deleted and edited here.","TurboStackAppSshTab"]},{"i":"the-security-tab","l":"The 'Security' tab","p":["The Security tab can update the server firewall. Allowing (whitelisting of) specific IPs or IP ranges. You even have the ability to allow or block complete countries/regions.","TurboStackAppSecurityTab","Allow (whitelist) one or more IPs or IP ranges","Block (blacklist) one or more countries","Only allow (whitelist) one or more countries"]}],[{"l":"TS Accounts Mgmt"},{"i":"creating-a-new-account-linux-user","l":"Creating a new account (linux user)"},{"l":"Linux user","p":["The account is a linux user. Later an application can be deployed under this user. We do not allow to run an application on the root user for security reasons.","Further more we also recommend not to run different types of applications under the same user. for example, the staging and production version of the application should be deployed on a separate user and maybe even on entirely different server"]},{"l":"How to deploy a new account in the GUI","p":["Creating a new user on the TurboStack App.","Open the TurboStack App","Open the server view","TurboStackNewUser","Go to the accounts page","Add a new account (user)","Give the account a name and save","Save and Publish will deploy the change to the host"]},{"l":"How to deploy a new account in the YAML","p":["for more advanced users there also the YAML configuration. adding a new account can be done with","TurboStackNewUser","Now an account is created. Applications can be installed.","Example, Deploy a Magento2 application"]}],[{"l":"TS Application Mgmt"},{"l":"How to create a new application","p":["Open the TurboStack app","Click the host view","Select to host to update"]},{"l":"Prerequisite","p":["Creating a new user on the TurboStack App. An account must exist before an application can be configured. How to create a new account"]},{"l":"Creating a new application in the GUI","p":["Creating a new (default) application under the newly created prod user. Scenario: creating a Magento2 application, listening on www.example.com and using varnish as caching","TurboStackNewApp","Open the detail section for the user","Click to add a new application","The first application for each user should always be default","Go to Hostnames and 1 or more names the website should listen on","Choose a website SSL certificate, there are 3 options: letsencrypt(default), selfsigned and custom(bring your own)","Go to Technologies and set the app type that matches your application","Enable PHP or another technology that your application requires","Scroll down to enable varnish on our websitedat","Optionally a monitoring url can be set that Hosted Power will monitoring 24/7.","Click Save to save and exit the configuration wizard.","Now, the new application is configured, click Save Publish to deploy the configuration to the server.","TurboStackNewApp TurboStackNewApp"]},{"l":"Creating a new application in the YAML","p":["for more advanced users there also the YAML configuration. adding a new application can be done with","a system_user ie. prod is needed before an application can be deployed","TurboStackNewApp"]}],[{"l":"TS Groups","p":["Groups make it possible to alter settings across multiple nodes. e.g. time zones or SSH key access to one or multiple TurboStack nodes."]},{"l":"Create a group","p":["Open the Groups tab to efficiently manage settings without the need to make changes individually for each user or project. Create partner groups, which enables you to provide SSH key access to multiple employees across different end user or partner environments."]},{"i":"scenario-1-use-groups-for-centralised-user-rights-management-with-ssh-keys","l":"Scenario 1: Use Groups for centralised user rights management with SSH keys","p":["SSHTab","Centralized user rights can streamline access control and simplify administration.","Identify the different levels of access required within your system.","Create user groups based on these access levels. For example, you might have groups like \"admin\", \"developers\", \"sysadmins\", etc.","Add users to appropriate groups based on their roles and responsibilities.","Each user who needs access to the system should generate an SSH key pair if they haven't already.","Have users from different groups attempt to log in using SSH keys to ensure that access is restricted according to the group-based configuration.","Regularly review user access and group memberships to ensure that they align with your current organizational requirements.","Hosted Power monitors system logs for any unauthorized access attempts and take appropriate action if necessary."]},{"i":"scenario-2-use-groups-for-centralised-turbostack-node-management","l":"Scenario 2: Use Groups for centralised TurboStack Node management","p":["HostsTab","Managing TurboStack nodes using groups can help streamline operations and ensure consistency across your infrastructure.","Determine the different roles that your TurboStack nodes will fulfill, such as web node, database node, application node, etc.","Create groups based on the identified server roles.","Assign each TurboStack node to the appropriate group based on its role."]},{"l":"The Security Tab","p":["The Security tab can update the firewall for all nodes in the Group. Allowing (whitelisting of) specific IPs or IP ranges. You even have the ability to allow or block complete countries/regions.","TurboStackAppSecurityTab","Allow (whitelist) one or more IPs or IP ranges","Block (blacklist) one or more countries","Only allow (whitelist) one or more countries"]}],[{"l":"YAML","p":["This page is under construction","The source code of the configuration of the server could be found as yaml. The yaml allows to create new and 100% identical servers in seconds.","Yaml Source Code","You could also choose to work with YAML by default via the profile settings.","Profile Settings"]},{"l":"How to add an account"},{"l":"How to add a vHost to an account"}],[{"l":"TS CLI","p":["The TurboStack Command Line Interface (later referred to as TSCLI) is available on all TurboStack nodes to provide you with an easy to use tool to manage the services on your environment, even ones you would normally need root access for. Below is a short description of the various features."]},{"l":"TSCLI Commands","p":["The TSCLI tool uses levels of arguments to categorize functions. Every command starts with 'tscli' followed by the service you're managing, followed by the parameters for the function you're using as documented below."]},{"l":"NGINX Webserver","p":["- Verifies the NGINX configuration and reloads it if it is valid. If it isn't valid you'll get an error with the issue reported."]},{"l":"BlackFire php Profiler","p":["- Installs the Blackfire Profiler and restarts the PHP-FPM service(s).","- Uninstalls the Blackfire Profiler and restarts the PHP-FPM service(s).","- Restarts the Blackfire Profiler service, to apply changes to the configuration."]},{"l":"Firewall","p":["- Returns info on wether the IP parameter is listed in the iptables. Please make sure to only use valid IP addresses.","- Flushes all automatic firewall IP blocks from the blocklist.","- Adds a firewall rule to block a specific IP address as specified in the IP parameter.","- Removes an IP address from the firewall's deny list."]},{"l":"PHP OpCache","p":["- Resets php's OpCache."]},{"l":"Varnish Cache","p":["- Clears everything from Varnish Cache's memory.","- Reloads the Varnisch Cache configuration"]},{"l":"Redis Cache","p":["- Clears everything from Redis Cache's memory."]}],[{"l":"Contacts"},{"l":"The Primary contact","p":["The primary contact will be the user who created the account in our Customer Center.","The primary contact is always the first point of contact should a critical incident on your environment occur.","If you haven't done this yet, you can sign-up here. Please fill in the required information and submit.","Now you can login into the Hosted Power Customer Center.","Our customer center enables you to:","Manage contact information","Add billing information","Follow-up on your support tickets","Purchase or transfer domain names","Assign rights to various contacts","Add SSH users, configure SSL certificates","etc..."]},{"l":"Add new contacts","p":["Now it's time to add your extra contacts. Technical colleagues, billing contacts etc...","In the Customer Center, navigate to Manage contacts. Here you can add your relevant contacts.","May we emphasize this step is really important for Hosted Power to be able to reach the correct people in every situation, so take your time to do this thoroughly if possible. You'll thank us later.","On the invite tab, you also have the option to invite existing contacts, e.g. an external consultant."]},{"l":"Teams"},{"l":"Add new teams","p":["Click through to the Teams tab. Here you can create your own teams, e.g. Dev, Billing, Agency, etc."]},{"l":"Invite external Teams","p":["If you have a new partner requiring access to your environment, you have the possibility to invite an existing team. You can also easliy remove teams from your environment.","CreateTeams"]},{"i":"userteams-rights-management","l":"User/Teams Rights management","p":["You have the choice to either manage the rights of single users or whole teams. Hosted Power advises to implement the \"Teams\" logic, even if you have only one person in this team. It makes management a lot easier in the future.","For your colleagues to be able to login to the TurboStack App, you need to give them access here."]},{"l":"Shared Hosting","p":["We have the possibility to use our shared \"Turbo Hosting\" option for more simple websites. Contact support if you want more information."]},{"l":"Domain management","p":["Check the Domains page for more info."]}],[{"l":"Domains","p":["Hosted Power is a domain registrar. Meaning domains can be bought, registered and managed within our customer center","There you can see the pricing for all TLDs and lookup if your preferred domain is still available."]},{"l":"How to order a domain","p":["TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain","Open the order menu","Select Domain Names from the menu","searchbar for domain names","search the domain name you want to register/purchase","now you can register a new domain","start the transfer from a domain hosted at another registrar"]},{"l":"How to remove a domain","p":["TurboStackNewDomain TurboStackNewDomain TurboStackNewDomain","on the left hand menu open services and select Domains","Choose the domain you no longer need and click the arrow.","select the Auto Renew option","Change the auto renew to Off","save the changes","All domains are registered and paid for 1 year at the time. disabling the auto renew will make sure the domain is not charged anymore to your account after the expiration date."]},{"i":"bulk-transfer-domains","l":"(Bulk) transfer domains"},{"l":"Change owner","p":["..."]}],[{"l":"DNS","p":["The Hosted Power customer center has an application to manage DNS domains. It can be used to manage existing domains or new after registering a new domain","if you already use a control panel like DirectAdmin or Cpanel, we recommend using those internal DNS management tools"]},{"l":"Nameservers","p":["The Hosted Power nameservers"]},{"l":"DNS Management","p":["TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS TurboStackNewDNS","Open the order menu","Select DNS Management from the menu","checkout the service","The DNS Management service is now available","Open the management tool","Add 1 domain or multiple in bulk","Add the domain you already registered","Accept the domain","New records can be added like: A, AAAA, CNAME, TXT, ..."]}],[{"l":"cPanel"},{"l":"How to correctly configure a Magento 2 cronjob under cPanel","p":["Login via ssh as the account user (or login via cPanel -> Cronjobs)","(Replace demoshop by your own account name)"]},{"i":"fix---autossl-reduced-ssl-coverage","l":"FIX - AutoSSL reduced SSL coverage","p":["This is a known problem in cPanel AutoSSL.","This now requires each subdomain be verified individually. If this fails, they will automatically stop including them in the attempt and send an alert to your configured mail addresses. This can get very spammy, so you might want to solve the root cause. You can find more context in the official cPanel docs.","To resolve this, we recommend you check the configured domains. As you can see in the screenshot below, this often includes auto-generated cPanel subdomains","AutoSSL issue","As you can see, there's a lot of unprotected subdomains, however, none of these are actually in use. As such, you can safely exclude these from your certificate. To do this, you need to be logged in as the user of the domain for which the certificate is being generated.","Once logged in, you need to find the following option in your main menu: SSL/TLS Status","That page will look like this: AutoSSL issue2","Here you can see what your subdomains might look like. \"AutoSSL Domain Validated\" means it works, so you can ignore those. Then, all subdomains in red need to be checked. If you don't use the subdomain, you should click \"Exclude from AutoSSL\" as seen in the second item in the screenshot. Once you've dealt with all subdomains in error, you can click the \"Run AutoSSL\" button at the top of the page to re-run the validation. This will mean no more errors when running AutoSSL, and no more alert spam!"]}],[{"l":"DirectAdmin"},{"l":"Use composer version 1 on DirectAdmin","p":["Unfortunately DirectAdmin defaults to composer v2, despite efforts to override, this often get's updated to the newer version again.","The solution? Use \"composer1 ...\" command explicitly instead of \"composer ...\" to use the v1 version!"]},{"i":"apache-reverse-proxy-to-docker-nodejs-or-any-other-service","l":"Apache reverse proxy to docker, nodejs or any other service","p":["It's possible to use reverse proxy on DirectAdmin quite easily, however it's important to not block for example Let's Encrypt.","We will use port 8086 as an example here, navigate as admin user to: Server Manager >> Custom HTTPD Configurations >> \"Select applicable domain\" httpd.conf>> Customize >> Put the following code under CUSTOM2","Apache Reverse Proxy DirectAdmin"]},{"l":"Override e-mail in DirectAdmin","p":["DirectAdmin sometimes has an unwanted default email from when using a web form. There are 2 possible solutions:","Use an SMTP connector/plugin and configure it to use localhost","Override the EMAIL tag in the php fpm setting","Go to Custom HTTPD Configurations","Open the \"php-fpm.conf\" from the affected website/account","Inside php-fpm Global |CUSTOM1|","Add the override, for example |?EMAIL=john.doe@example.com|","Make sure to apply on all php versions","Hit the save button","Override mail DirectAdmin"]},{"l":"Disable Local Delivery for a Domain","p":["When you add a domain on your DirectAdmin server, a mail service is started for it by default. This can cause problems if another mail domain on this server wants to send mail to your domain of which the mail is NOT hosted on this server. This mail will try to be delivered locally, causing a message like the following:","SMTP-error (550) Recipient could not be added (No such recipient here).","You can easily solve this by disabling the mail service of your domain.","To do this, log in as the user of your domain and navigate to the option 'DNS Management', found under 'Account Manager'. Here you have the option 'Modify MX records', if you click on it you will see that the option 'Use this server to handle my emails. If not, change the MX records and uncheck this option.' is checked. Uncheck this and your problem is solved."]},{"i":"spamexperts-or-other-mail--spf-failures","l":"Spamexperts (or other) mail / SPF failures","p":["When using spamassisin in front of DirectAdmin, you see messages like:","This is because you need to add spamexperts to the safe senders (relayhost), this can be done as following:","edit this file: /etc/virtual/esf_skip_hosts","(Afterwards restart spamassassin)"]}],[{"l":"Redis","p":["By default there are 16 databases available (0-15), this could be increased on request","By default there are always at least 2 Redis instances available:","Can be cleared at all times, shouldn't influence application when cleared","Data = non persistent (volatile)","Data = persistent (non-volatile)","Notes:","Persistent data/information","port 6378 (non default)","port 6379 (default)","redis-persistent","Should/will never be cleared, clearing would influence application","socket file: /var/run/redis-persistent/redis.sock","socket file: /var/run/redis/redis.sock","Suitable for cache","Suitable for sessions","Try to use seperate databases when having multiple websites/applications on the same server (e.g. db 1 , db 2, ...)","Using the socket file is recommended when using local redis instances (less overhead = better performance!)","Volatile data/information"]}],[{"l":"Varnish","p":["#Varnish","You can add Varnish config to the VCL by adding files to the /etc/varnish/conf.d directory."]}],[{"l":"MySQL"},{"i":"mysql-import--export","l":"MySQL Import & Export","p":["For large databases we recommend exporting and importing trough the commandline"]},{"l":"MySQL Export","p":["OR with gzip (much smaller)"]},{"l":"MySQL Import"},{"i":"potential-errors--resolution","l":"Potential errors & resolution","p":["ERROR 1227 (42000) at line xxx: Access denied; you need (at least one of) the SUPER privilege(s) for this operation","SQLSTATE[42000]: Syntax error or access violation: 1142 TRIGGER command denied to user 'xxx'@'%' for table 'xxx', query was: ...","ERROR 1449 (HY000) at line xxx: The user specified as a definer ('xxx'@'%') does not exist, query was: ...","ERROR 1227 (42000) at line xxx: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation This is most likely because your database has routines/views, make sure to strip the definer owner during export:","OR","Or if you have already a dump file, you can also remove it during import:","mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces If you see this error, make sure to use the \"-y\" argument as in the above example when dumping MySQL database (This is the no-tablespaces option), your dump will still contain everything needed.","mysql: ERROR 1118 (42000) at line xxx: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. If you see this error, probably your data has grown too large to still be imported/exported with the ROW_FORMAT=COMPACT. You can import most likely by converting to ROW_FORMAT=DYNAMIC with the following command"]},{"i":"mysql-charset--collation-fix","l":"MySQL Charset & collation fix","p":["Example script to convert a whole database to a certain charset and collation","cat fixcollaction.bash"]}],[{"l":"Firewall","p":["Hosted Power prefers you to use our TS CLI commands if you want to make changes to the Firewall settings."]},{"i":"configserver-security--firewall-cheat-sheet","l":"ConfigServer Security & Firewall cheat sheet","p":["[IP.add.re.ss] [comment] Allow an IP(allow access to all ports) and add to /etc/csf/csf.allow","[IP.add.re.ss] [comment] Deny an IP and add to /etc/csf/csf.deny","[IP.add.re.ss] Remove an IP from the temporary IP ban or allow list","[IP.add.re.ss] Search the iptables and ip6tables rules for a match (e.g. IP, CIDR, Port Number)","[IP.add.re.ss] Unblock an IP and remove from /etc/csf/csf.deny","Block IP (temporarily for 24 hours, define in seconds)","Command","Configuration location is in the folder /etc/csf/ Main configuration file: /etc/csf/csf.conf","csf -a","csf -a 192.168.0.0/24","csf -a IP","csf -d","csf -df","csf -dr","csf -e","csf -f","csf -g","csf -r","csf -ra","csf -s","csf -t","csf -ta 192.168.0.0/24 86400","csf -td IP 86400","csf -tf","csf -tr","csf -x","Description","Diable CSF Firewall","Displays the current list of temporary allow and deny IP entries with their TTL and comment","Enable CSF Firewall","Example","Flush all IPs from the temporary IP entries","Flush/Stop firewall rule (note: lfd may restart csf)","Remove all temporary IP blocks","Remove and unblock all entries in /etc/csf/csf.deny","Restart CSF/LFD Firewall (iptables rules and LFD service)","Restart LFD only","Restart the firewall rules","root@server[~]#csf -a 187.33.3.3 Home IP Address","root@server[~]#csf -d 66.192.23.1 Blocked This Guy","root@server[~]#csf -df","root@server[~]#csf -dr 66.192.23.1","root@server[~]#csf -f","root@server[~]#csf -g 66.192.23.1","root@server[~]#csf -r","root@server[~]#csf -s","root@server[~]#csf -t","root@server[~]#csf -tf","root@server[~]#csf -tr 66.192.23.1","service lfd restart","Start the firewall rules","Useful CSF SSH Command Line Commands in a “cheat sheet” format.","Whitelist (temporarily) IP range /24 (allow access to all ports)","Whitelist (temporarily) IP range /24 for 24 hours (allow access to all ports, define in seconds)","Whitelist IP (allow access to all ports)"]},{"i":"csf-login-failure-daemon-lfd-blocks","l":"CSF Login Failure Daemon (LFD) blocks","p":["It's possible you or your customers get blocked by the security mechanisms of the ConfigServer Firewall. The LFD component could block too many failed login attempts to SSH, FTP, POP3, IMAP, HTTP, etc.","Unlike other applications, LFD is a daemon process that monitors logs continuously and so can react within seconds of detecting such attempts. It also monitors across protocols, so if attempts are made on different protocols in a short space of time, all those attempts will be counted against the threshold."]},{"i":"unblock-an-ip-address-in-csf--reason-for-blocking","l":"Unblock an IP Address in CSF & Reason for blocking","p":["Unblocking an IP Address in CSF & Reason of blocking Home » Plugins » ConfigServer Security & Firewall","To determine whether an IP address is blocked, you can use the Search for IP button on the ConfigServer Security&Firewall page. Simply enter the IP address into the search field and click the button.","If the IP address is blocked, the reason for the block will be listed and an unlocked padlock icon will appear to the right of the blocked IP address. Clicking the padlock icon will unblock the IP in the firewall."]},{"l":"Whitelist an IP address in CSF","p":["It's possible to ignore some IP-Addresses for your office, home office or third party that are working for something like testing the website/application or if you running a vulnerability scan. Sometimes it can be happy that you will be blocked by the CSF for many failed logins how we explained here above the article. Ignoring an IP-address will be a good solutions to avoid blocking.","Ignoring (Whitelisting) an IP Address Home »Plugins »ConfigServer Security & Firewall","To ignore an IP address in the firewall (csf.ignore), you can enter the IP address into the Quick Ignore section, allow such as “Office network”, and click the Quick Ignore button."]}],[{"l":"FTP"},{"i":"what-causes-the-login-failed-error-","l":"What causes the “Login failed” error ?","p":["Incorrect login details used Login details used by users for FTP access include their username and password. If these credentials are given wrongly in the FTP client, it can give a 530 login error in FTP. But for additional FTP accounts, the FTP login name is of the format ‘username@domain.com’. If the FTP username entered is not in this specific format, login failures happen.“530 Login authentication failed” also happens due to wrong password. Even a single additional space in the password can cause a login failure. Many account owners tend to overlook that aspect and struggle with 530 errors.","Path doesn't exist When the FTP users gets created by the support team, a path will be assagined on creation. If the path doesn't exists on the server this will cause a Login failure.","Unsupported TLS Of course, we can use TLSRequired off in our ProFTPd configuration as this allows for TLS and non-TLS logins, but if you want to make your FTP setup as secure as possible, you should enforce the use of TLS and make exceptions only for the users or groups that use an FTP client that doesn't support TLS (if using another FTP client is not an option for those users).","If we want to allow the FTP user testuser to use plain FTP instead of FTP, we can configure this as follows:"]}],[{"l":"Mail"},{"l":"Mail delivery best practices","p":["SPF record","Most important, make sure to add both the ipv4 and ipv6 of your server!!","Use -all at the end of your record!","DKIM will enhance delivery, however SPF will give you the most gain in delivery success.","DMARC is an extra record which can improve even more, but it's gain in delivery success is less than SPF and DKIM.","However it's quite important from a security point of view (avoid abuse by external parties).","The most basic DMARC txt record to create, which will enforce SPF: v=DMARC1; p=reject; aspf=s;","In doubt: Always use Mail tester","Make sure that you use the exact same method as the one your experience problems with when sending the mail to mail-tester."]},{"l":"SPF Record Syntax"},{"l":"Mechanisms","p":["Mechanisms can be prefixed with one of four qualifiers:","\"+\" Pass","\"-\" Fail","\"~\" SoftFail","\"?\" Neutral","If a mechanism results in a hit, its qualifier value is used. The default qualifier is \"+\", i.e. \"Pass\". For example:","Mechanisms are evaluated in order. If no mechanism or modifier matches, the default result is \"Neutral\".","If a domain has no SPF record at all, the result is \"None\". If a domain has a temporary error during DNS processing, you get the result \"TempError\" (called \"error\" in earlier drafts). If some kind of syntax or evaluation error occurs (eg. the domain specifies an unrecognized mechanism) the result is \"PermError\" (formerly \"unknown\").","Evaluation of an SPF record can return any of these results:"]},{"i":"the-all-mechanism","l":"The \"all\" mechanism","p":["This mechanism always matches. It usually goes at the end of the SPF record.","Examples:","Allow domain's MXes to send mail for the domain, prohibit all others.","The domain sends no mail at all.","The domain owner thinks that SPF is useless and/or doesn't care."]},{"i":"the-ip4-mechanism","l":"The \"ip4\" mechanism","p":["The argument to the \"ip4:\" mechanism is an IPv4 network range. If no prefix-length is given, /32 is assumed (singling out an individual host address).","Examples:","Allow any IP address between 192.168.0.1 and 192.168.255.255."]},{"i":"the-ip6-mechanism","l":"The \"ip6\" mechanism","p":["The argument to the \"ip6:\" mechanism is an IPv6 network range. If no prefix-length is given, /128 is assumed (singling out an individual host address).","Examples:","Allow any IPv6 address between 1080::8:800:0000:0000 and 1080::8:800:FFFF:FFFF."]},{"i":"the-a-mechanism","l":"The \"a\" mechanism","p":["All the A records for domain are tested. If the client IP is found among them, this mechanism matches. If the connection is made over IPv6, then an AAAA lookup is performed instead.","If domain is not specified, the current-domain is used.","The A records have to match the client IP exactly, unless a prefix-length is provided, in which case each IP address returned by the A lookup will be expanded to its corresponding CIDR prefix, and the client IP will be sought within that subnet.","The current-domain is used.","Equivalent if the current-domain is example.com.","Perhaps example.com has chosen to explicitly list all the outbound mailers in a special A record under mailers.example.com.","If example.com resolves to 192.0.2.1, the entire class C of 192.0.2.0/24 would be searched for the client IP. Similarly for offsite.example.com. If more than one A record were returned, each one would be expanded to a CIDR subnet."]},{"i":"the-mx-mechanism","l":"The \"mx\" mechanism","p":["All the A records for all the MX records for domain are tested in order of MX priority. If the client IP is found among them, this mechanism matches.","If domain is not specified, the current-domain is used.","The A records have to match the client IP exactly, unless a prefix-length is provided, in which case each IP address returned by the A lookup will be expanded to its corresponding CIDR prefix, and the client IP will be sought within that subnet.","Examples:","Perhaps a domain sends mail through its MX servers plus another set of servers whose job is to retry mail for deferring domains.","Perhaps a domain's MX servers receive mail on one IP address, but send mail on a different but nearby IP address."]},{"i":"the-include-mechanism","l":"The \"include\" mechanism","p":["The specified domain is searched for a match. If the lookup does not return a match or an error, processing proceeds to the next directive. Warning: If the domain does not have a valid SPF record, the result is a permanent error. Some mail receivers will reject based on a PermError.","Examples:","In the following example, the client IP is 1.2.3.4 and the current-domain is example.com.","If example.com has no SPF record, the result is PermError. Suppose example.com's SPF record were \"v=spf1 a -all\". Look up the A record for example.com. If it matches 1.2.3.4, return Pass. If there is no match, other than the included domain's \"-all\", the include as a whole fails to match; the eventual result is still Fail from the outer directive set in this example. Trust relationships — The \"include:\" mechanism is meant to cross administrative boundaries. Great care is needed to ensure that \"include:\" mechanisms do not place domains at risk for giving SPF Pass results to messages that result from cross user forgery. Unless technical mechanisms are in place at the specified otherdomain to prevent cross user forgery, \"include:\" mechanisms should give a Neutral rather than Pass result. This is done by adding \"?\" in front of \"include:\". The example above would be:","In hindsight, the name \"include\" was poorly chosen. Only the evaluated result of the referenced SPF record is used, rather than acting as if the referenced SPF record was literally included in the first. For example, evaluating a \"-all\" directive in the referenced record does not terminate the overall processing and does not necessarily result in an overall Fail. (Better names for this mechanism would have been \"if-pass\", \"on-pass\", etc.)"]},{"l":"Common SMTP and E-mail ports","p":["Common SMTP ports:","SMTP – port 25 or 587","Secure SMTP (SSL / TLS) – port 465 or 587","Common Email retrieval ports:","POP3 – port 110","POP3 SSL (POP3S) – port 995","IMAP – port 143","IMAP SSL (IMAPS) – port 993"]},{"i":"spf--dkim-record-for-mailchimp","l":"SPF & DKIM Record For MailChimp","p":["To authenticate your domain, you'll need to complete tasks in Mailchimp and in the zone editor(portal) or control panel. This process requires you to copy and paste information from Mailchimp to your domain provider's site. We recommend that you work with two browser windows or tabs to easily move between your sites.","Here's a brief overview of the process:","In Mailchimp","Verify your domain.","Copy two important pieces of information, your CNAME record for DKIM, and your TXT record for SPF","In Your Domain's Control Panel or Zone Editor","DKIM: Create a CNAME record for k1._ domainkey.yourdomain.com with this value: dkim.mcsv.net.","SPF: Create a TXT record for yourdomain.com with this value: v=spf1 include:servers.mcsv.net -all or add \"include:servers.mcsv.net\" to your SPF record","Note","The URLs above are examples only. Replace \"yourdomain.com\" with the domain you want to authenticate."]}],[{"l":"Security","p":["It is essential that companies take the security of their application seriously; as data breaches can have serious and long-lasting consequences. Malicious attacks can cause your website or application to be temporarily or permanently disabled. It can cause significant financial damage to your business, and damage to the trust of your customers if their personal information is released through your site or application. That is why, we at Hosted Power are taking the necessary steps to help prevent this."]},{"i":"virtual-access-security-ssltls","l":"Virtual Access Security (SSL/TLS)","p":["Virtual access protection ensures that if someone tries to intercept data while it is being sent over the internet, they will only see unreadable, unintelligible characters. SSL/TLS-encryption is such an integral part of website security, especially for e-commerce sites. Hosted Power provides this service for free. Not only does this help protect your customers, but search engines are increasingly labelling websites without SSL/TLS certificates as “insecure”, driving visitors away.","You can find more information on SSL/TLS on our dedicated page on the topic."]},{"l":"Managed Backup","p":["Backups are of course important, because in the event that your website or application crashes or gets compromised, you don’t want to lose all your data and have to rebuild your environment from scratch. Hosted Power provides a managed backup solution within the Service Level Agreement (SLA). By default, the backups are kept for 20 days and will be backed up daily. This retention period can be customized if necessary and is included in the Platinum SLA.","Any restores are included in the price and service. The time needed to restore is outside the SLA time."]},{"l":"DDoS-prevention","p":["Distributed Denial-of-Service (DDoS)-attacks are unfortunately a common tool in hacker’s arsenal. In a DDoS attack, they flood your environment with so much traffic that it creates a traffic jam and makes your application inaccessible to legitimate users, leaving your customers ‘deprived of service” as the webserver no longer can accept it. Since DDos attacks can be difficult to resolve, it is important to prevent them before they can happen. Hosted Power takes several steps at the network level to fend off these attacks. Here is a summary:"]},{"l":"Rate limiting","p":["By limiting the number of connections a single client can open in a certain amount of time can preventively limit potential DDoS attacks. In normal use, a web browser can open 5 to 7 TCP connections to a single website when all the resources are loaded to display the page. In contrast, DDoS attacks often go much further than this to maximize their effect. As such, anything above 10 connections simultaneously can be consider unusual activity."]},{"l":"Load balancing","p":["For rate throttling, a load balancer can be a useful first line of defense against DDoS. For example, HAProxy, which is primarily a load balancer proxy for TCP and HTTP, can also act as a traffic controller. HAProxy can be used to protect against DDoS attacks by denying or redirecting connections based on various identifiers such as IP, URL or cookies."]},{"l":"Blackhole-routing","p":["One of the simplest countermeasures to mitigate a DDoS attack is to divert the flow of connections in to a “black hole” b throwing all the data away. Optional extra DDoS-security The most effective way to mitigate DDoS attacks is simply to have more capacity to process incoming data than the cybercriminals can muster. It is unlikely that a single server or service can achieve this on its own, which is why a helping hand from a third party DDoS protection service, such as Cloudflare, can be extremely helpful."]},{"l":"Imunify360","p":["Imunify360 continuously gathers vast amounts of information about new attacks from environments all over the world. The software analyzes the web traffic hitting your nodes, understands all security threats, and uses powerful AI technology to dynamically update its rules and prevent malicious attacks that can cause damage. Imunify360 utilizes machine learning technology and comprehensive algorithms to identify patterns of abnormal behavior almost in real-time and swiftly prevent new attacks.","Where Imunify360 Makes the Difference:","Advanced detection and display of security threats, powered by the self-learning firewall with herd immunity","Protection against many threats, including distributed brute force attacks","Analysis of insights from the global network to ban attackers before they attack you","Protection of web applications against malware injections","Automatic security for your kernel and older PHP versions","Smart intrusion detection","Reputation Management and an advanced Captcha system","Is a responsive system with a high frequency of scanning that does not degrade the performance of your servers."]},{"i":"web-application-firewall-waf","l":"Web Application Firewall (WAF)","p":["Hosted Power obviously takes security into account and can provide Web Application Firewall (WAF) based on ModSecurity. If desired, in addition to ModSecurity, Fortinet FortiWeb Application Firewall can also be set up. This is considered case by case. A WAF goes much further than a standard firewall by analyzing the application layer (OSI layer 7) instead of stopping at Layer 3. The WAF offers, amongst other things, extra protection against SQL injection, XSS attacks, etc. According to the OWASP top 10.","The WAF contains virtual patches for a kinds of frameworks. This guarantees extra high security out of the box, because this way an (for example recently) unpatched leak can still be closed immediately before a patch has been applied to the application layer. If desired, Hosted Power has a WAF available. Please contact your personal account manager if you would like more information about this subject."]}],[{"l":"SSH"},{"l":"Setting Up SSH Client on Windows"},{"i":"step-1-install-openssh-client-feature","l":"Step 1: Install OpenSSH Client Feature","p":["Windows 10 and later versions include an optional feature called \"OpenSSH Client\" that you can install via the Settings app or PowerShell.","Using Settings App:","Open Settings (Press Windows key + I), then go to \"Apps\" > \"Optional Features\".","Click on \"Add a feature\", search for \"OpenSSH Client\", and click \"Install\".","Using PowerShell:","Open PowerShell as an administrator.","Run the following command:"]},{"i":"step-2-generate-ssh-key-pair","l":"Step 2: Generate SSH Key Pair","p":["If you haven't already generated an SSH key pair, you can do so using the ssh-keygen command in PowerShell. Run the following command:","This command will prompt you to choose a location to save the key pair and optionally set a passphrase."]},{"i":"step-3-copy-public-key-to-remote-server","l":"Step 3: Copy Public Key to Remote Server","p":["Once the key pair is generated, you need to copy the public key to the remote server. You can use tools like ssh-copy-id or manually copy the public key."]},{"i":"step-4-test-ssh-connection","l":"Step 4: Test SSH Connection","p":["You can now test your SSH connection to the remote server using the ssh command in PowerShell:","If everything is set up correctly, you should be logged in to the remote server without being prompted for a password."]},{"i":"step-5-optional-configuration","l":"Step 5: Optional Configuration","p":["You can configure your SSH client by editing the ~/.ssh/config file. This file allows you to set options such as default usernames, identities, and SSH server configurations.","You're all set! You can now securely connect to remote servers using SSH without having to enter a password each time."]},{"l":"Setting Up SSH Client on Linux"},{"i":"step-1-install-openssh","l":"Step 1: Install OpenSSH","p":["Make sure OpenSSH client is installed on your Linux system. If not installed, you can install it using your package manager. For example, on Ubuntu or Debian-based systems, you can use:"]},{"i":"step-2-generate-ssh-key-pair-1","l":"Step 2: Generate SSH Key Pair","p":["If you haven't already generated an SSH key pair, you can do so using the ssh-keygen command. Run the following command in your terminal:","This command will prompt you to choose a location to save the key pair and optionally set a passphrase."]},{"i":"step-3-copy-public-key-to-remote-server-1","l":"Step 3: Copy Public Key to Remote Server","p":["Once the key pair is generated, you need to copy the public key to the remote server. You can use the ssh-copy-id command for this. Replace username and remote_host with your username and the hostname or IP address of the remote server:","You'll be prompted to enter your password on the remote server. Once authenticated, your public key will be added to the ~/.ssh/authorized_keys file on the remote server."]},{"i":"step-4-test-ssh-connection-1","l":"Step 4: Test SSH Connection","p":["You can now test your SSH connection to the remote server using the following command:","If everything is set up correctly, you should be logged in to the remote server without being prompted for a password."]},{"i":"step-5-optional-configuration-1","l":"Step 5: Optional Configuration","p":["You can configure your SSH client by editing the ~/.ssh/config file. This file allows you to set options such as default usernames, identities, and SSH server configurations.","You're all set! You can now securely connect to remote servers using SSH without having to enter a password each time."]}],[{"i":"ssltls-configuration","l":"SSL/TLS configuration","p":["A Certificate authority is a trusted entity responsible for issuing digital certificates used to authenticate the identities of entities such as websites, servers, users, and devices on the internet or within a private network"]},{"i":"lets-encrypt-certificate","l":"Let's Encrypt Certificate","p":["LetsEncrypt is a certificate authority that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. The certificate is valid for 90 days, during which renewal can take place at anytime. The offer is accompanied by an automated process designed to overcome manual creation, validation, signing, installation, and renewal of certificates for secure websites","The key principles behind Let's Encrypt, taken from their website","Free - Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.","Automatic - Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.","Secure - Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.","Transparent - All certificates issued or revoked will be publicly recorded and available for anyone to inspect.","Open: The automatic issuance and renewal protocol is published as an open standard that others can adopt.","Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization."]},{"l":"Third Party Certificate"},{"l":"Comodo","p":["Contact our support if you need to install a third party certificate."]}],[{"l":"Nginx"},{"l":"Enable Basic Authentication on your website for NGINX","p":["It's relatively easy to configure Basic Authentication using a .htpasswd file (similar to a basic auth block in Apache .htaccess) in NGINX on TurboStack. This way you can block access to your development version of the website for non-authenticated users. This guide assumes you know what Basic Authentication is."]},{"l":"How-to","p":["First locate your nginx main configuration file from the home directory of your user:","Then, uncomment the following lines to activate Basic Authentication:","OPTIONAL: You can add whitelisting based on IP-addresses for connections that will not need to identify using the Basic Auth service, simply add \"allow \":","Lastly, to enact your changes, reload the NGINX service:"]}],[{"l":"Apache"},{"i":"grant-or-deny-access-to-server-for-specific-ips-while-using-basic-auth","l":"Grant or deny access to server for specific IP's while using basic auth","p":["In this article, we'll tackle the problem how we can decide if a visitor should or should not login on a server with basic auth enabled, based on it's IP-address.","So what is the result we want to achieve? We want to implement an .htpasswd so visitors need to have a valid login, except when the request came from a whitelisted IP adress. In that case, no login is asked and you'll be redirected to the site. Like a VIP that would skip a waiting queue for a club.","This method is used for Apache2"]},{"i":"method-1-server-without-varnish-enabled","l":"Method 1: Server without varnish enabled","p":["There is a difference when a server has or doesn't have Varnish enabled. For now we'll make it simple assuming there is no interruption with any service like Varnish. In that case we'll use the next setup:","For best practice, we put this code at the top of our .htaccess file"]},{"i":"method-2-server-with-varnish-enabled","l":"Method 2: Server with varnish enabled","p":["For a server with varnish enabled, is a different approach needed. All requests that go through varnish will pass the header (X-Forwarded-For), but it may contain some tempered information about the visitors IP. Because of this modification, the request for immediate access will be denied and the visitor will be asked to login. To make sure this won't happen, we'll add a variable for the header that contains the whitelisted IP-adress.","The code below will do the trick:","For best practice will we add the IP's to the required list require ip"]},{"l":"Block infamous bytespider bot","p":["Sometimes a server can go high in load due to the infamous bytespider bot. This one can be excluded by implementing this piece of code inside the .htaccess:"]}],[{"l":"Pricing","p":["TurboStack®, the fastest software stack designed to be fully configurable. Take advantage of any technology in the same stack. Easily customize programming language, caching or database. Enormous flexibility and an ultra secure environment that supports any project."]},{"l":"Versatile Stack with Rapid Delivery"},{"i":"put-an-end-to-instability--difficulties-in-heavy-processes","l":"Put an end to instability & difficulties in heavy processes","p":["Each environment is configured to ensure the fastest loading times and stability to handle the most abrupt visitor spikes.","Your project can be delivered at lightning speed. Within half an hour we deploy any desired technology or software.Your project can be delivered at lightning speed. Within half an hour we deploy any desired technology or software."]},{"i":"pricing-1","l":"Pricing","p":["We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. Check out our packages here."]}],[{"l":"Some history","p":["⚡ * At Hosted Power you will find experts in managed hosting, who are people-oriented and think along with you based on their passion for Cloud technology. * ⚡"]},{"l":"One team of people","p":["Without cooperation there is no team. We want to see our people grow together with Hosted Power. We do this by actively sharing knowledge, striving for transparency, involvement and open communication. We stand behind our each other as one team, our hyper-fast solution and our partners, without losing sight of the fun factor. Freedom and open vision are indispensable. Our people do what they like to do and are given every opportunity to grow.","Happy Colleagues = Happy Partners = Happy Customers!"]},{"l":"Goals","p":["In essence, we exist to serve you as a customer, to improve your situation, to automate, to accelerate it and to unburden you completely with your cloud environment. With our agile, in-house developed custom solution TurboStack®, we will accommodate your needs. We continuously challenge ourselves and follow up the hottest technological trends and see innovation as a challenge."]},{"l":"Our mission","p":["We are creative and businesslike. We aim to be your reliable partner. Our secret is to find the ideal mix between perfecting existing technologies and implementing innovative ideas and technologies. We are therefore 100% committed to a long-term relationship with you as our client. We will always give our honest and clear opinion about what the best solutions is for your specific challenges. Honesty is the most important key in a successful partner relationship. So we don't go for the \"quick fixes\" but for a robust long-term solution with the necessary attention to your needs.","\"If you want to be able to fall back on an external team that actively thinks along, and can offer the best environments, Hosted Power is the right partner for you. Let's meet!\""]}],[{"i":"247-monitoring--alerting","l":"24/7 Monitoring & Alerting"},{"l":"Proactive monitoring","p":["At Hosted Power, we recognize the paramount importance of application availability and stability to our partners. Our comprehensive approach to ensuring stability encompasses various factors, chief among them being the reliability of the TurboStack platform itself. With our dedicated team of experts vigilantly monitoring your environments round the clock, 7 days a week, rest assured that your application's stability is our top priority.","Should any threat arise, our skilled engineers are on standby to swiftly intervene, safeguarding your operations seamlessly."]},{"l":"Alerting","p":["In critical situations , Hosted Power activates its On Call procedure. Our on call team is on standby 24/7, ensuring swift manual investigation and resolution of issues, regardless of office hours. If the primary On Call colleague doesn’t respond within 30 minutes, an alert automatically triggers escalation to the entire on call team, engaging our Operations engineers on call \"pool\" until someone acknowledges the issue en starts to research.","Once alerted, our On Call colleeague tackles the issue, whether it involves tasks like disk space optimization, restarting services, or mitigating abusive traffic. If necessary, escalation to our cloud providers occurs for issues unrelated to Hosted Power."]},{"l":"Escalation Matrix","p":["This matrix shows how our escalation processes take place."]},{"l":"Escalation of customer contacts","p":["Operations engineer (technical) or account manager (commercial)","(Servicemanager) if applicable","Operations manager","Technical teamlead (technical problems) or COO (commercial problems)"]},{"l":"Internal technical escalation","p":["Operations engineer","Technical teamlead","CEO"]},{"l":"Internal commercial escalation","p":["Account manager","COO","CEO"]}],[{"l":"Incident Management","p":["Hosted Power analyzes within the SLA response time whether the reported incident can be qualified as critical unavailability based on all the information. The analysis is done remotely (via telephone, e-mail, and or monitoring tools) by our own system engineers.","You may be requested to provide information, and possibly receive instructions to carry out simple troubleshooting or adjustments in consultation with the Hosted Power technicians. Hosted Power then informs the customer of the solution or proposes a workaround."]},{"l":"Critical support","p":["Critical support includes anything that prevents the correct functioning of the server and requires immediate attention. This concerns defects in the data centers infrastructure, the Hosted Power network, the hardware and the server services that result in a proven unavailability of the services provided."]},{"l":"Non-critical support","p":["All other questions related to matters that do not result in unavailability of the services provided are by definition non-critical questions. This includes (non-exhaustive list):","Questions related to the use of the services offered","Software support for applications provided by Hosted Power","Configuration changes (which are not necessary to fix a critical problem)","The services that form the core of our services, such as our network, power supply, hardware cooling, etc. are proactively monitored 24/7. If a failure is indicated there, we intervene proactively & immediately. We usually see problems arise before they have real impact on your environment."]}],[{"l":"Standard Support","p":["Normal service is available during office hours (and must be done through the service desk, either by e-mail and/or by telephone:","BE: +32 53 599 000","NL: 085 888 4 555","FR: 04 83 97 97 97","Office hours apply from Monday to Thursday between 8:45 am and 17:30pm and on Friday between 8:45 am and 16:30 pm. Hosted Power will always aim to help, but sometimes we need the customer or developer to be able to commit changes.","When the service desk is closed, Hosted Power offers a 24x7 emergency service. Failures can be reported here that lead to the critical unavailability of our services, which Hosted Power is contracted to provide or support. In case of critical unavailability of the environment, this emergency service is always free of charge for contracts. After reporting the issues over the phone, an email notification should also be submitted to support, stating the issue, unless agreed not to be necessary."]}]] \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 712063006497f6f1f7739841dc39e5837b5a1a4a..de2a7b24aee562b0abdaafbeb65288f5517e50c2 100644 GIT binary patch delta 222 zcmV<403rXr1il226$F;=HgS;|EPv#v0%-5{X_3#PH7;%l|5UrQhV!l{q^L18iUNDN~w%BZo z>7rlMn(X2%LIn2ZIs-0E0AeIsgCw delta 222 zcmV<403rXr1il226$Fv*Hg=I2EPwe?1<>B@lOoHLxpKlw?V5e^<>hnwlss3nT^|gn zILBZI`=pJr+cGu`Lk2o3%R9(?Xc&kV4PaL%%d;|hYqLGI(VAac4$DiMqAW{xsZFZc zd_ImemiT47sK$7}2GR@2Vjm73A{XB>-gRup#)xYyhiJX57Wrb8=IgZByf75YZNAv9 zimw=Vt$mB_g7!hjbA^AqV?V8NaCRO2A1H2SI+_O#TGZO1$C&>|%(Id7LIF~fHvwG% YX_J)!c>+lBlMn(X2$E3S%YzaC0K~>=3;+NC diff --git a/support/incident_management/index.html b/support/incident_management/index.html index dd3046e3..f4c025b6 100644 --- a/support/incident_management/index.html +++ b/support/incident_management/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/support/monitoring/index.html b/support/monitoring/index.html index 0f4ebc95..405e234f 100644 --- a/support/monitoring/index.html +++ b/support/monitoring/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/support/standard_support/index.html b/support/standard_support/index.html index 94838e4b..3705d628 100644 --- a/support/standard_support/index.html +++ b/support/standard_support/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack-app/basic_install/index.html b/turbostack-app/basic_install/index.html index 47f8f087..c9ff358b 100644 --- a/turbostack-app/basic_install/index.html +++ b/turbostack-app/basic_install/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
    diff --git a/turbostack-app/groups/index.html b/turbostack-app/groups/index.html index 3350ecca..9dab989d 100644 --- a/turbostack-app/groups/index.html +++ b/turbostack-app/groups/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
    diff --git a/turbostack-app/howto_newapp/index.html b/turbostack-app/howto_newapp/index.html index 1def797e..5ffb7dac 100644 --- a/turbostack-app/howto_newapp/index.html +++ b/turbostack-app/howto_newapp/index.html @@ -3,7 +3,7 @@ - + @@ -32,12 +32,12 @@ - + - + - - + +
    diff --git a/turbostack-app/howto_newuser/index.html b/turbostack-app/howto_newuser/index.html index 5aa7b1ce..46f7e9c4 100644 --- a/turbostack-app/howto_newuser/index.html +++ b/turbostack-app/howto_newuser/index.html @@ -3,7 +3,7 @@ - + @@ -32,12 +32,12 @@ - + - + - - + +
    diff --git a/turbostack-app/turbostackcli/index.html b/turbostack-app/turbostackcli/index.html index 690a1f4a..c7a377c1 100644 --- a/turbostack-app/turbostackcli/index.html +++ b/turbostack-app/turbostackcli/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack-app/yaml/index.html b/turbostack-app/yaml/index.html index 42ab082b..97d1416f 100644 --- a/turbostack-app/yaml/index.html +++ b/turbostack-app/yaml/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
    diff --git a/turbostack_configuration/caching/redis/index.html b/turbostack_configuration/caching/redis/index.html index 7d409a10..546006bd 100644 --- a/turbostack_configuration/caching/redis/index.html +++ b/turbostack_configuration/caching/redis/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/caching/varnish/index.html b/turbostack_configuration/caching/varnish/index.html index f51ae01d..ebe1bcbe 100644 --- a/turbostack_configuration/caching/varnish/index.html +++ b/turbostack_configuration/caching/varnish/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/database/mysql/index.html b/turbostack_configuration/database/mysql/index.html index 5dc7dc9e..fab6701c 100644 --- a/turbostack_configuration/database/mysql/index.html +++ b/turbostack_configuration/database/mysql/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/firewall/index.html b/turbostack_configuration/firewall/index.html index 2670b4e8..4e0c763b 100644 --- a/turbostack_configuration/firewall/index.html +++ b/turbostack_configuration/firewall/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/ftp/index.html b/turbostack_configuration/ftp/index.html index 4203b237..8df49c5c 100644 --- a/turbostack_configuration/ftp/index.html +++ b/turbostack_configuration/ftp/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/mail/index.html b/turbostack_configuration/mail/index.html index 4b6b4c95..5aa08dd1 100644 --- a/turbostack_configuration/mail/index.html +++ b/turbostack_configuration/mail/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/security/index.html b/turbostack_configuration/security/index.html index 2dd74764..fdb0404f 100644 --- a/turbostack_configuration/security/index.html +++ b/turbostack_configuration/security/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/ssh/index.html b/turbostack_configuration/ssh/index.html index 626f96f2..8be05476 100644 --- a/turbostack_configuration/ssh/index.html +++ b/turbostack_configuration/ssh/index.html @@ -3,7 +3,7 @@ - + @@ -30,12 +30,12 @@ - + - + - - + +
    diff --git a/turbostack_configuration/ssl-tls_configuration/index.html b/turbostack_configuration/ssl-tls_configuration/index.html index d795d0c2..fbf4f393 100644 --- a/turbostack_configuration/ssl-tls_configuration/index.html +++ b/turbostack_configuration/ssl-tls_configuration/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/web-server/apache/index.html b/turbostack_configuration/web-server/apache/index.html index f38e4eb0..1b8a5e2d 100644 --- a/turbostack_configuration/web-server/apache/index.html +++ b/turbostack_configuration/web-server/apache/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
    diff --git a/turbostack_configuration/web-server/nginx/index.html b/turbostack_configuration/web-server/nginx/index.html index b53ee1f8..32806ec7 100644 --- a/turbostack_configuration/web-server/nginx/index.html +++ b/turbostack_configuration/web-server/nginx/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +