diff --git a/404.html b/404.html index 51bc2ffe..efa187c2 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 c6726851..2fc08f88 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 ea72906b..eae31c98 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/best_practices/backup/index.html b/best_practices/backup/index.html index 1f2db05e..7b9879bf 100644 --- a/best_practices/backup/index.html +++ b/best_practices/backup/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/caching/redis/index.html b/best_practices/caching/redis/index.html index 71673451..dad13c50 100644 --- a/best_practices/caching/redis/index.html +++ b/best_practices/caching/redis/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/best_practices/caching/varnish/index.html b/best_practices/caching/varnish/index.html index 44117689..58a84c5f 100644 --- a/best_practices/caching/varnish/index.html +++ b/best_practices/caching/varnish/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/database/mongodb/index.html b/best_practices/database/mongodb/index.html index c104988d..1af8b14a 100644 --- a/best_practices/database/mongodb/index.html +++ b/best_practices/database/mongodb/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/database/mysql/index.html b/best_practices/database/mysql/index.html index 1f2449fd..889224d7 100644 --- a/best_practices/database/mysql/index.html +++ b/best_practices/database/mysql/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/database/other/index.html b/best_practices/database/other/index.html index 6e44f511..06363cf2 100644 --- a/best_practices/database/other/index.html +++ b/best_practices/database/other/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/database/postgresql/index.html b/best_practices/database/postgresql/index.html index e5536d29..e87a4f87 100644 --- a/best_practices/database/postgresql/index.html +++ b/best_practices/database/postgresql/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/ftp/index.html b/best_practices/ftp/index.html index b2f13056..a13832e7 100644 --- a/best_practices/ftp/index.html +++ b/best_practices/ftp/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/best_practices/mail/index.html b/best_practices/mail/index.html index 5d3de1af..53ff8012 100644 --- a/best_practices/mail/index.html +++ b/best_practices/mail/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/best_practices/performance/blackfire/index.html b/best_practices/performance/blackfire/index.html index 1c2b8cca..064a8f45 100644 --- a/best_practices/performance/blackfire/index.html +++ b/best_practices/performance/blackfire/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/performance/datadog/index.html b/best_practices/performance/datadog/index.html index 0b8b82af..4a4bd2f8 100644 --- a/best_practices/performance/datadog/index.html +++ b/best_practices/performance/datadog/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/performance/newrelic/index.html b/best_practices/performance/newrelic/index.html index acfd224a..3ed2fb8a 100644 --- a/best_practices/performance/newrelic/index.html +++ b/best_practices/performance/newrelic/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/security/index.html b/best_practices/security/index.html index f840c6e5..8b23cd9a 100644 --- a/best_practices/security/index.html +++ b/best_practices/security/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/testing/index.html b/best_practices/testing/index.html index 4d8f7a96..4da9a4fa 100644 --- a/best_practices/testing/index.html +++ b/best_practices/testing/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/best_practices/webserver/apache/index.html b/best_practices/webserver/apache/index.html index a542bee8..b86d0bad 100644 --- a/best_practices/webserver/apache/index.html +++ b/best_practices/webserver/apache/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/best_practices/webserver/nginx/index.html b/best_practices/webserver/nginx/index.html index 5efa6c21..ebfde859 100644 --- a/best_practices/webserver/nginx/index.html +++ b/best_practices/webserver/nginx/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/control_panels/cpanel/index.html b/control_panels/cpanel/index.html index 838e6b2f..691fb217 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 54957417..d9e31a6a 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 4a1074fe..b1527704 100644 --- a/customer-center/contacts/index.html +++ b/customer-center/contacts/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/customer-center/dns/index.html b/customer-center/dns/index.html index 5d99cbd9..c3fca7dd 100644 --- a/customer-center/dns/index.html +++ b/customer-center/dns/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/customer-center/domains/index.html b/customer-center/domains/index.html index b2cc6b5e..0a5369c8 100644 --- a/customer-center/domains/index.html +++ b/customer-center/domains/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/index.html b/index.html index c494200b..97deacab 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
@@ -210,7 +210,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. Check out our packages here.

+We have several scalable packages, tailored for the fastest performance. We offer staging & production packages, which can be clustered if needed. text=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'!

diff --git a/resources/js/config.js b/resources/js/config.js index a72daab5..3b47ba9e 100644 --- a/resources/js/config.js +++ b/resources/js/config.js @@ -1 +1 @@ -var __DOCS_CONFIG__ = {"id":"NrdPGbF/hS182vtfpS8UCaiZgM2dywTVlGN","key":"ufmrlhmEYO+K5vXiFQBcO5Mdo5bhK4a0HEp5utx3A7w.gXaBeg8SU+NjU5MRUNcrs61sHnaOtKUvWpG4FFP3KQ3Oz3LNhzVIPCtBaEWCH/l5wih64nXWxZfCzalrVaOV9g.75","base":"/","host":"docs.turbostack.app","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.766845755172","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":"Turbo​Stack App Basics","s":""},{"n":"groups","l":"Groups","s":""},{"n":"turbostackcli","l":"Turbo​Stack CLI","s":""},{"n":"yaml","l":"YAML","s":""},{"n":"howto_newapp","l":"Howto create a new user and application"}],"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":"firewall","l":"Firewall","s":""},{"n":"ssl-tls_configuration","l":"SSL/TLS configuration","s":""},{"n":"php_configuration","l":"PHP","s":""},{"n":"nginx_configation","l":"Nginx","s":""},{"n":"apache_configation","l":"Apache","s":""},{"n":"ci-cd","l":"CI/CD"},{"n":"pipelines","l":"Pipelines"},{"n":"ssh","l":"SSH","s":""}],"s":""},{"n":"best_practices","l":"Best practices","c":false,"i":[{"n":"backup","l":"Back-​up"},{"n":"caching","l":"Caching","c":false,"i":[{"n":"varnish","l":"Varnish"},{"n":"redis","l":"Redis"}]},{"n":"ftp","l":"FTP","s":""},{"n":"webserver","l":"Web server","c":false,"i":[{"n":"apache","l":"Apache"},{"n":"nginx","l":"Nginx"}]},{"n":"mail","l":"Mail"},{"n":"database","l":"Database","c":false,"i":[{"n":"mysql","l":"My​SQL"},{"n":"postgresql","l":"Postgre​SQL"},{"n":"mongodb","l":"Mongo​DB"},{"n":"other","l":"Other"}]},{"n":"performance","l":"Performance","c":false,"i":[{"n":"datadog","l":"Datadog"},{"n":"newrelic","l":"Newrelic"},{"n":"blackfire","l":"Blackfire"}]},{"n":"security","l":"Security"},{"n":"testing","l":"Testing"}],"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":"Monitoring"},{"n":"alerting","l":"Alerting"},{"n":"incident_management","l":"Incident management"},{"n":"standard_support","l":"Standard support"}],"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":"jAiwqbvUzh3182NA1kPXZk7hdit62AxSpnf","key":"q1DMfsrHuj6YveGx+RI55PqDYeNpUK4hNn/nQC3DBTc.H5UpKyzQy+Ms1G3v2SHWMmzpO9P51MwBDiZibR0nzzQ7zc3h7Fhc9H563lf19lIb9DI4lM3kpvsQs96EPCerIw.118","base":"/","host":"docs.turbostack.app","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.766845757007","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":"Turbo​Stack App Basics","s":""},{"n":"groups","l":"Groups","s":""},{"n":"turbostackcli","l":"Turbo​Stack CLI","s":""},{"n":"yaml","l":"YAML","s":""},{"n":"howto_newapp","l":"Howto create a new user and application"}],"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":"firewall","l":"Firewall","s":""},{"n":"ssl-tls_configuration","l":"SSL/TLS configuration","s":""},{"n":"php_configuration","l":"PHP","s":""},{"n":"nginx_configation","l":"Nginx","s":""},{"n":"apache_configation","l":"Apache","s":""},{"n":"ci-cd","l":"CI/CD"},{"n":"pipelines","l":"Pipelines"},{"n":"ssh","l":"SSH","s":""}],"s":""},{"n":"best_practices","l":"Best practices","c":false,"i":[{"n":"backup","l":"Back-​up"},{"n":"caching","l":"Caching","c":false,"i":[{"n":"varnish","l":"Varnish"},{"n":"redis","l":"Redis"}]},{"n":"ftp","l":"FTP","s":""},{"n":"webserver","l":"Web server","c":false,"i":[{"n":"apache","l":"Apache"},{"n":"nginx","l":"Nginx"}]},{"n":"mail","l":"Mail"},{"n":"database","l":"Database","c":false,"i":[{"n":"mysql","l":"My​SQL"},{"n":"postgresql","l":"Postgre​SQL"},{"n":"mongodb","l":"Mongo​DB"},{"n":"other","l":"Other"}]},{"n":"performance","l":"Performance","c":false,"i":[{"n":"datadog","l":"Datadog"},{"n":"newrelic","l":"Newrelic"},{"n":"blackfire","l":"Blackfire"}]},{"n":"security","l":"Security"},{"n":"testing","l":"Testing"}],"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":"Monitoring"},{"n":"alerting","l":"Alerting"},{"n":"incident_management","l":"Incident management"},{"n":"standard_support","l":"Standard support"}],"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 cf7b631e..129396ef 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. 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 sign-up here. 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: portal.hosted-power.com","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 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":"partner-integration-optional","l":"Partner Integration (optional)","p":["If you are a direct customer, not working with Hosted Power through a partner, please continue to step 4.","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 furnish you with a unique code, enabling you to seamlessly join their account. This integration enhances coordination and ensures a unified workflow, 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, 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":"your-turbostack-application","l":"Your TurboStack® application","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"]},{"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-yaml-configuration","l":"3.1 YAML configuration","p":["It's also possible to configure TurboStack node by editing the YAML file in the app. More info on the YAML-page."]},{"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"},{"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":"TurboStack App Basics"},{"l":"Login and locate your managed servers","p":["When going to the TurboStack App, login with credentials for our Customer Center: portal.hosted-power.com.","If you don't have a login to the Customer Center yet, you can find 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. A user can have one or more applications. In the examples below we have 2 users, prod and stag. The prod user has an applications running on the weburl example.com and www.example.com","TurboStackAppAccountTab","Shows user prod and containing applications","Shows user stag, the layout is here collapsed","Will create an additional user."]},{"i":"the-groups-tab","l":"The 'groups' tab","p":["The groups tab can link a server to existing group. groups can define additional configuration that can then be applied to all servers in that group.","TurboStackAppGroupTab"]},{"i":"the-ssh-tab","l":"The 'SSH' tab","p":["The SSH tab defines 1 or more public ssh keys that allow shell access to a server without using a password. ssh keys can be added, deleted and edited","TurboStackAppSshTab"]},{"i":"the-security-tab","l":"The 'Security' tab","p":["The Security tab can update the server firewall. Allowing (whitelisting) specific IPs or IP ranges Or even allow or block complete country 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":"Groups","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."]},{"l":"Where to set up Groups","p":["In the Customer Center, navigate to Manage contacts. Here you can add your relevant contacts. Click through to the Teams tab. Here you can create your own teams, e.g. Dev, Billing, Agency, etc.","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":"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":["HostsTab"]}],[{"l":"TurboStack 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":"YAML","p":["This page is under construction"]},{"l":"How to add an account"},{"l":"How to add a vHost to an account"}],[{"l":"Howto create a new user and application"},{"l":"Creating a new user","p":["Creating a new user on the TurboStack App. Open the TurboStack app and open the server view","TurboStackNewUser TurboStackNewUser TurboStackNewUser","Go to the accounts page","Add a new account (user)","Give the account a name and save"]},{"l":"Creating a new application","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 TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp 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 website","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."]}],[{"l":"Contacts"},{"l":"Add new contacts","p":["https://portal.hosted-power.com/profiles/add/"]},{"l":"Invite external guests","p":["https://portal.hosted-power.com/profiles/invite/"]},{"l":"Teams"},{"l":"Add new teams","p":["https://portal.hosted-power.com/profiles/teams/"]},{"l":"Invite external Teams","p":["https://portal.hosted-power.com/profiles/teams/invite"]},{"i":"userteams-rights-management","l":"User/Teams Rights management","p":["You have the choice to either give rights to single users or to whole teams."]},{"l":"Billing contacts"},{"l":"Support contacts"},{"l":"Access to TurboStack App"},{"l":"Shared Hosting"},{"l":"Domain management"}],[{"l":"Domains"},{"l":"How to order a domain"},{"l":"How to remove a domain"},{"i":"bulk-transfer-domains","l":"(Bulk) transfer domains"},{"l":"Change owner","p":["..."]}],[{"l":"DNS","p":["ns1.hosted-power.com ns2.hosted-power.com ns3.hosted-power.com"]},{"l":"Manage Nameservers","p":["https://portal.hosted-power.com/clientarea/domains/","..."]}],[{"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":"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."]}],[{"i":"ssltls-configuration","l":"SSL/TLS configuration"}],[{"l":"PHP"}],[{"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","p":["Specific settings for Apache in TS config"]}],[{"i":"cicd","l":"CI/CD"}],[{"l":"Pipelines"}],[{"l":"SSH"},{"l":"How to use SSH Keys on TurboStack"},{"l":"Windows Users","p":["Don't - haha"]},{"l":"Linux Users"}],[{"l":"Back-up"}],[{"l":"Varnish"}],[{"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":"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":"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":"Nginx"}],[{"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":"MySQL"}],[{"l":"PostgreSQL"}],[{"l":"MongoDB"}],[{"l":"Other"}],[{"l":"Datadog"}],[{"l":"Newrelic"}],[{"l":"Blackfire"}],[{"l":"Security"}],[{"l":"Testing"}],[{"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!\""]}],[{"l":"Monitoring"}],[{"l":"Alerting"}],[{"l":"Incident management"}],[{"l":"Standard support"},{"i":"247-proactive-monitoring","l":"24/7 Proactive Monitoring","p":["Our proactive monitoring was developed internally by Hosted Power and is continuously optimized so that we can guarantee the most accurate monitoring. The monitoring keeps an eye on crucial functionalities of the supported hosting environments and your application at all times. Thanks to the monitoring, adequate and proactive action will be taken, after all, prevention is better than the cure. It is possible to carry out specific checks specifically for your application; so that the correct action can be taken in the event of calamities. The customer has an obligation to inform Hosted Power in the event of expected peak times, the shutdown or interruption by the customer of the server or the services included in the monitoring. This must be communicated to Hosted Power at least 1 working day in advance."]},{"l":"scope"}]] \ 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. text=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 sign-up here. 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: portal.hosted-power.com","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 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":"partner-integration-optional","l":"Partner Integration (optional)","p":["If you are a direct customer, not working with Hosted Power through a partner, please continue to step 4.","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 furnish you with a unique code, enabling you to seamlessly join their account. This integration enhances coordination and ensures a unified workflow, 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, 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":"your-turbostack-application","l":"Your TurboStack® application","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"]},{"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-yaml-configuration","l":"3.1 YAML configuration","p":["It's also possible to configure TurboStack node by editing the YAML file in the app. More info on the YAML-page."]},{"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"},{"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":"TurboStack App Basics"},{"l":"Login and locate your managed servers","p":["When going to the TurboStack App, login with credentials for our Customer Center: portal.hosted-power.com.","If you don't have a login to the Customer Center yet, you can find 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. A user can have one or more applications. In the examples below we have 2 users, prod and stag. The prod user has an applications running on the weburl example.com and www.example.com","TurboStackAppAccountTab","Shows user prod and containing applications","Shows user stag, the layout is here collapsed","Will create an additional user."]},{"i":"the-groups-tab","l":"The 'groups' tab","p":["The groups tab can link a server to existing group. groups can define additional configuration that can then be applied to all servers in that group.","TurboStackAppGroupTab"]},{"i":"the-ssh-tab","l":"The 'SSH' tab","p":["The SSH tab defines 1 or more public ssh keys that allow shell access to a server without using a password. ssh keys can be added, deleted and edited","TurboStackAppSshTab"]},{"i":"the-security-tab","l":"The 'Security' tab","p":["The Security tab can update the server firewall. Allowing (whitelisting) specific IPs or IP ranges Or even allow or block complete country 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":"Groups","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."]},{"l":"Where to set up Groups","p":["In the Customer Center, navigate to Manage contacts. Here you can add your relevant contacts. Click through to the Teams tab. Here you can create your own teams, e.g. Dev, Billing, Agency, etc.","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":"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":["HostsTab"]}],[{"l":"TurboStack 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":"YAML","p":["This page is under construction"]},{"l":"How to add an account"},{"l":"How to add a vHost to an account"}],[{"l":"Howto create a new user and application"},{"l":"Creating a new user","p":["Creating a new user on the TurboStack App. Open the TurboStack app and open the server view","TurboStackNewUser TurboStackNewUser TurboStackNewUser","Go to the accounts page","Add a new account (user)","Give the account a name and save"]},{"l":"Creating a new application","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 TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp TurboStackNewApp 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 website","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."]}],[{"l":"Contacts"},{"l":"Add new contacts","p":["https://portal.hosted-power.com/profiles/add/"]},{"l":"Invite external guests","p":["https://portal.hosted-power.com/profiles/invite/"]},{"l":"Teams"},{"l":"Add new teams","p":["https://portal.hosted-power.com/profiles/teams/"]},{"l":"Invite external Teams","p":["https://portal.hosted-power.com/profiles/teams/invite"]},{"i":"userteams-rights-management","l":"User/Teams Rights management","p":["You have the choice to either give rights to single users or to whole teams."]},{"l":"Billing contacts"},{"l":"Support contacts"},{"l":"Access to TurboStack App"},{"l":"Shared Hosting"},{"l":"Domain management"}],[{"l":"Domains"},{"l":"How to order a domain"},{"l":"How to remove a domain"},{"i":"bulk-transfer-domains","l":"(Bulk) transfer domains"},{"l":"Change owner","p":["..."]}],[{"l":"DNS","p":["ns1.hosted-power.com ns2.hosted-power.com ns3.hosted-power.com"]},{"l":"Manage Nameservers","p":["https://portal.hosted-power.com/clientarea/domains/","..."]}],[{"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":"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."]}],[{"i":"ssltls-configuration","l":"SSL/TLS configuration"}],[{"l":"PHP"}],[{"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","p":["Specific settings for Apache in TS config"]}],[{"i":"cicd","l":"CI/CD"}],[{"l":"Pipelines"}],[{"l":"SSH"},{"l":"How to use SSH Keys on TurboStack"},{"l":"Windows Users","p":["Don't - haha"]},{"l":"Linux Users"}],[{"l":"Back-up"}],[{"l":"Varnish"}],[{"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":"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":"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":"Nginx"}],[{"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":"MySQL"}],[{"l":"PostgreSQL"}],[{"l":"MongoDB"}],[{"l":"Other"}],[{"l":"Datadog"}],[{"l":"Newrelic"}],[{"l":"Blackfire"}],[{"l":"Security"}],[{"l":"Testing"}],[{"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!\""]}],[{"l":"Monitoring"}],[{"l":"Alerting"}],[{"l":"Incident management"}],[{"l":"Standard support"},{"i":"247-proactive-monitoring","l":"24/7 Proactive Monitoring","p":["Our proactive monitoring was developed internally by Hosted Power and is continuously optimized so that we can guarantee the most accurate monitoring. The monitoring keeps an eye on crucial functionalities of the supported hosting environments and your application at all times. Thanks to the monitoring, adequate and proactive action will be taken, after all, prevention is better than the cure. It is possible to carry out specific checks specifically for your application; so that the correct action can be taken in the event of calamities. The customer has an obligation to inform Hosted Power in the event of expected peak times, the shutdown or interruption by the customer of the server or the services included in the monitoring. This must be communicated to Hosted Power at least 1 working day in advance."]},{"l":"scope"}]] \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 7de71799..4209070d 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/support/alerting/index.html b/support/alerting/index.html index b01dd149..1d7dae2f 100644 --- a/support/alerting/index.html +++ b/support/alerting/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/support/incident_management/index.html b/support/incident_management/index.html index f59c1e01..eeaba44a 100644 --- a/support/incident_management/index.html +++ b/support/incident_management/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/support/monitoring/index.html b/support/monitoring/index.html index 0ee1e412..23b06372 100644 --- a/support/monitoring/index.html +++ b/support/monitoring/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/support/standard_support/index.html b/support/standard_support/index.html index 2a3bc4fe..91bdb886 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 8d6e2e41..94e1e1fd 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 f61156a2..896afb99 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 653ea330..acc4bdd5 100644 --- a/turbostack-app/howto_newapp/index.html +++ b/turbostack-app/howto_newapp/index.html @@ -3,7 +3,7 @@ - + @@ -32,11 +32,11 @@ - + - + - +
diff --git a/turbostack-app/turbostackcli/index.html b/turbostack-app/turbostackcli/index.html index fb28da03..3b33ead4 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 de396559..73105659 100644 --- a/turbostack-app/yaml/index.html +++ b/turbostack-app/yaml/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/turbostack_configuration/apache_configation/index.html b/turbostack_configuration/apache_configation/index.html index 92f1eae1..23f4ba4e 100644 --- a/turbostack_configuration/apache_configation/index.html +++ b/turbostack_configuration/apache_configation/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/turbostack_configuration/ci-cd/index.html b/turbostack_configuration/ci-cd/index.html index ee30ce3b..2322549a 100644 --- a/turbostack_configuration/ci-cd/index.html +++ b/turbostack_configuration/ci-cd/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/turbostack_configuration/firewall/index.html b/turbostack_configuration/firewall/index.html index 2ae63429..431dbcc5 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/nginx_configation/index.html b/turbostack_configuration/nginx_configation/index.html index 158df10e..8bd9e8b7 100644 --- a/turbostack_configuration/nginx_configation/index.html +++ b/turbostack_configuration/nginx_configation/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/turbostack_configuration/php_configuration/index.html b/turbostack_configuration/php_configuration/index.html index 0d4bf94a..58fba225 100644 --- a/turbostack_configuration/php_configuration/index.html +++ b/turbostack_configuration/php_configuration/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/turbostack_configuration/pipelines/index.html b/turbostack_configuration/pipelines/index.html index 701fde0d..81a6690b 100644 --- a/turbostack_configuration/pipelines/index.html +++ b/turbostack_configuration/pipelines/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +
diff --git a/turbostack_configuration/ssh/index.html b/turbostack_configuration/ssh/index.html index c38784dd..a177233b 100644 --- a/turbostack_configuration/ssh/index.html +++ b/turbostack_configuration/ssh/index.html @@ -3,7 +3,7 @@ - + @@ -30,11 +30,11 @@ - + - + - +
diff --git a/turbostack_configuration/ssl-tls_configuration/index.html b/turbostack_configuration/ssl-tls_configuration/index.html index 1dbe8cbb..266c88c0 100644 --- a/turbostack_configuration/ssl-tls_configuration/index.html +++ b/turbostack_configuration/ssl-tls_configuration/index.html @@ -3,7 +3,7 @@ - + @@ -27,11 +27,11 @@ - + - + - +