<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.helionet.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Krydos</id>
	<title>HelioHost Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.helionet.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Krydos"/>
	<link rel="alternate" type="text/html" href="https://wiki.helionet.org/Special:Contributions/Krydos"/>
	<updated>2026-04-27T03:46:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Deletion_Policy&amp;diff=2241</id>
		<title>Deletion Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Deletion_Policy&amp;diff=2241"/>
		<updated>2026-04-11T01:46:38Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added full support request deletion section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Deletion Policy ==&lt;br /&gt;
&lt;br /&gt;
This Deletion Policy describes our policies and procedures on the deletion and removal of your information and data when you use our hosting service or contact support.&lt;br /&gt;
&lt;br /&gt;
== Community Support ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run by volunteers who receive no pay for helping you with your hosting issues or maintaining the servers. We volunteer for this organization because we enjoy it, and believe in the mission of providing free hosting to people who can&#039;t afford paid hosting. We aren&#039;t owned by a for-profit company, we don&#039;t have a full time staff of paid employees, and don&#039;t have a quota of how many people we need to force to upgrade each month. If we aren&#039;t having fun volunteering, or if you are rude to us, we will go do something more enjoyable for us. We aren&#039;t required to volunteer a certain number of hours each week, and we may come and go as we please.&lt;br /&gt;
&lt;br /&gt;
In order to reduce the work required by our volunteers, and in order to recruit new volunteers, all of our support is community based and public. This means if someone else has had the same issue as you, we encourage you to search our forum and our wiki to find the solution that worked for other previous users. This also means that regular users can help each other out if they know the answer to someone else&#039;s question. All of our volunteers started out as regular users who decided to be helpful and answer other users questions. When we see someone being helpful in the community we sometimes offer them a promotion to give them more tools and more access to be even more helpful.&lt;br /&gt;
&lt;br /&gt;
== Privacy Policy ==&lt;br /&gt;
&lt;br /&gt;
Our Privacy Policy can be read at https://heliohost.org/privacy/ If you have concerns about your privacy, please contact us, and let us know how we can help. We will do everything we can to keep your private data private.&lt;br /&gt;
&lt;br /&gt;
== Private Support ==&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, but enough people have expressed interest in private support that we do plan on implementing it in some form in the future. Since private support increases the workload on our volunteers and reduces the helpfulness of our user searchable resources, it will not be free. Therefore, only donors will be allowed to use private support. The exact details of the private support and donation level required to access private support will be announced on our news section when it becomes available. There is currently no ETA on when this will be released.&lt;br /&gt;
&lt;br /&gt;
== Support Request Deletion ==&lt;br /&gt;
&lt;br /&gt;
The whole point of community support is for the support requests to be visible to other users so they can solve their own issues by searching or find solutions to their problems, so deleting support requests is detrimental to that goal. Even if your support request is as simple as &amp;quot;add this domain please&amp;quot; it may be useful for someone who doesn&#039;t know how to add domains to their account and finds your post. &amp;quot;Oh, I can just make a post like this to get a new domain added!&amp;quot; Generally requests to delete a whole support request will be denied for this reason. If there is specific information in the support request that you consider private let us know, and those portions can be redacted.&lt;br /&gt;
&lt;br /&gt;
== Username Deletion ==&lt;br /&gt;
&lt;br /&gt;
When you signup for an account with HelioHost it is clearly stated during the signup process not to pick a username that contains anything that you consider private information.&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need support, you will be asked to provide this username to identify your account where it will be visible to other users, so don&#039;t use anything in your username that you consider private information.}}&lt;br /&gt;
&lt;br /&gt;
Unfortunately, not everyone reads things so occasionally someone makes the mistake of creating a username that contains private information. We can help you fix the issue by following these steps:&lt;br /&gt;
# Make a backup of anything on your account that you don&#039;t want to lose and download it to somewhere safe.&lt;br /&gt;
# Request an account reset in order to change your username.&lt;br /&gt;
# During the reset process choose a different username that doesn&#039;t contain private information.&lt;br /&gt;
# Restore the backups to your account after the reset.&lt;br /&gt;
# Contact support to request that the previous username that contains private information be changed to the new username that doesn&#039;t contain private information.&lt;br /&gt;
&lt;br /&gt;
{{Caution|If you think your username is private information and you want it removed from a support request you must first either:&lt;br /&gt;
# Change your username&lt;br /&gt;
# Delete your account&lt;br /&gt;
Requests to remove usernames from support requests who haven&#039;t already done of the two options listed above will be denied.}}&lt;br /&gt;
&lt;br /&gt;
== Domain Deletion ==&lt;br /&gt;
&lt;br /&gt;
We don&#039;t consider domain names to be private information. On the contrary, most people pay good money to get their domains listed in as many places on the internet as possible, because the more links to their site exist, the higher their website will rank on search engine results. We provide this optimization service of giving your website a boost in search engine results for free to any of our users who has a website hosted with us and a legitimate support request.&lt;br /&gt;
&lt;br /&gt;
Frequently, people who ask to have their domain removed from their support requests do so because they are under the incorrect assumption that their website will be &amp;quot;more secure&amp;quot; or &amp;quot;impossible to find&amp;quot; if it isn&#039;t listed on our forum. Security by obscurity never works. Just for fun we have tried creating domains with 50 randomly selected letters and numbers that we never post anywhere publicly, but it doesn&#039;t matter because the bots always eventually find it anyways. Sometimes it takes a few weeks, sometimes it takes a few months, but eventually the 404 errors for wp_login.php start showing up. If you want your website to be secure use actual security measures, such as SSL which we provide for free, or password protection. Hoping no one finds it is like hoping no one finds your front door key under your floor mat. It&#039;s laughably bad security.&lt;br /&gt;
&lt;br /&gt;
After acknowledging that it will not improve the security of your website and also acknowledging that you want your search engine optimization to be worse, if you would still like to have your domain name removed from one of your support requests, we will be happy to help. We generally try to reply to all support requests within 24 hours.&lt;br /&gt;
&lt;br /&gt;
== Suspended Account Deletion ==&lt;br /&gt;
&lt;br /&gt;
Depending on why an account was suspended we may not be able to delete it for you right away. For instance, if the contents of the account need to be held as evidence for law enforcement our policy is to hold the data for at least 60 days. This is our policy because we want to do everything within our power to help stop criminals from committing more crimes.&lt;br /&gt;
&lt;br /&gt;
Since HelioHost is based in the United States we have to comply with United States law. A common misunderstanding is people think that since they live in country X they don&#039;t have to follow the laws of the United States. If you use a hosting service that is also located in country X that is true, but if you use HelioHost you have to follow the laws of the country HelioHost is located in, which is the United States. We understand that not everyone is familiar with what is and what is not legal in the United States so we encourage you to read our Terms of Service first, and also talk with us prior to uploading your website to make sure it will be ok.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Deletion_Policy&amp;diff=2240</id>
		<title>Deletion Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Deletion_Policy&amp;diff=2240"/>
		<updated>2026-04-11T01:40:06Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Ranted for a bit about people requesting stuff to be deleted.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Deletion Policy ==&lt;br /&gt;
&lt;br /&gt;
This Deletion Policy describes our policies and procedures on the deletion and removal of your information and data when you use our hosting service or contact support.&lt;br /&gt;
&lt;br /&gt;
== Community Support ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run by volunteers who receive no pay for helping you with your hosting issues or maintaining the servers. We volunteer for this organization because we enjoy it, and believe in the mission of providing free hosting to people who can&#039;t afford paid hosting. We aren&#039;t owned by a for-profit company, we don&#039;t have a full time staff of paid employees, and don&#039;t have a quota of how many people we need to force to upgrade each month. If we aren&#039;t having fun volunteering, or if you are rude to us, we will go do something more enjoyable for us. We aren&#039;t required to volunteer a certain number of hours each week, and we may come and go as we please.&lt;br /&gt;
&lt;br /&gt;
In order to reduce the work required by our volunteers, and in order to recruit new volunteers, all of our support is community based and public. This means if someone else has had the same issue as you, we encourage you to search our forum and our wiki to find the solution that worked for other previous users. This also means that regular users can help each other out if they know the answer to someone else&#039;s question. All of our volunteers started out as regular users who decided to be helpful and answer other users questions. When we see someone being helpful in the community we sometimes offer them a promotion to give them more tools and more access to be even more helpful.&lt;br /&gt;
&lt;br /&gt;
== Privacy Policy ==&lt;br /&gt;
&lt;br /&gt;
Our Privacy Policy can be read at https://heliohost.org/privacy/ If you have concerns about your privacy, please contact us, and let us know how we can help. We will do everything we can to keep your private data private.&lt;br /&gt;
&lt;br /&gt;
== Private Support ==&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, but enough people have expressed interest in private support that we do plan on implementing it in some form in the future. Since private support increases the workload on our volunteers and reduces the helpfulness of our user searchable resources, it will not be free. Therefore, only donors will be allowed to use private support. The exact details of the private support and donation level required to access private support will be announced on our news section when it becomes available. There is currently no ETA on when this will be released.&lt;br /&gt;
&lt;br /&gt;
== Username Deletion ==&lt;br /&gt;
&lt;br /&gt;
When you signup for an account with HelioHost it is clearly stated during the signup process not to pick a username that contains anything that you consider private information.&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need support, you will be asked to provide this username to identify your account where it will be visible to other users, so don&#039;t use anything in your username that you consider private information.}}&lt;br /&gt;
&lt;br /&gt;
Unfortunately, not everyone reads things so occasionally someone makes the mistake of creating a username that contains private information. We can help you fix the issue by following these steps:&lt;br /&gt;
# Make a backup of anything on your account that you don&#039;t want to lose and download it to somewhere safe.&lt;br /&gt;
# Request an account reset in order to change your username.&lt;br /&gt;
# During the reset process choose a different username that doesn&#039;t contain private information.&lt;br /&gt;
# Restore the backups to your account after the reset.&lt;br /&gt;
# Contact support to request that the previous username that contains private information be changed to the new username that doesn&#039;t contain private information.&lt;br /&gt;
&lt;br /&gt;
{{Caution|If you think your username is private information and you want it removed from a support request you must first either:&lt;br /&gt;
# Change your username&lt;br /&gt;
# Delete your account&lt;br /&gt;
Requests to remove usernames from support requests who haven&#039;t already done of the two options listed above will be denied.}}&lt;br /&gt;
&lt;br /&gt;
== Domain Deletion ==&lt;br /&gt;
&lt;br /&gt;
We don&#039;t consider domain names to be private information. On the contrary, most people pay good money to get their domains listed in as many places on the internet as possible, because the more links to their site exist, the higher their website will rank on search engine results. We provide this optimization service of giving your website a boost in search engine results for free to any of our users who has a website hosted with us and a legitimate support request.&lt;br /&gt;
&lt;br /&gt;
Frequently, people who ask to have their domain removed from their support requests do so because they are under the incorrect assumption that their website will be &amp;quot;more secure&amp;quot; or &amp;quot;impossible to find&amp;quot; if it isn&#039;t listed on our forum. Security by obscurity never works. Just for fun we have tried creating domains with 50 randomly selected letters and numbers that we never post anywhere publicly, but it doesn&#039;t matter because the bots always eventually find it anyways. Sometimes it takes a few weeks, sometimes it takes a few months, but eventually the 404 errors for wp_login.php start showing up. If you want your website to be secure use actual security measures, such as SSL which we provide for free, or password protection. Hoping no one finds it is like hoping no one finds your front door key under your floor mat. It&#039;s laughably bad security.&lt;br /&gt;
&lt;br /&gt;
After acknowledging that it will not improve the security of your website and also acknowledging that you want your search engine optimization to be worse, if you would still like to have your domain name removed from one of your support requests, we will be happy to help. We generally try to reply to all support requests within 24 hours.&lt;br /&gt;
&lt;br /&gt;
== Suspended Account Deletion ==&lt;br /&gt;
&lt;br /&gt;
Depending on why an account was suspended we may not be able to delete it for you right away. For instance, if the contents of the account need to be held as evidence for law enforcement our policy is to hold the data for at least 60 days. This is our policy because we want to do everything within our power to help stop criminals from committing more crimes.&lt;br /&gt;
&lt;br /&gt;
Since HelioHost is based in the United States we have to comply with United States law. A common misunderstanding is people think that since they live in country X they don&#039;t have to follow the laws of the United States. If you use a hosting service that is also located in country X that is true, but if you use HelioHost you have to follow the laws of the country HelioHost is located in, which is the United States. We understand that not everyone is familiar with what is and what is not legal in the United States so we encourage you to read our Terms of Service first, and also talk with us prior to uploading your website to make sure it will be ok.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Stevie&amp;diff=2219</id>
		<title>Stevie</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Stevie&amp;diff=2219"/>
		<updated>2026-03-23T19:55:25Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Stevie */ Recycled.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Stevie ==&lt;br /&gt;
&lt;br /&gt;
Stevie is the first physical server that HelioHost purchased in July 2008. He ran CentOS 5 for eight years until November 2016 when he suffered a hard drive failure. After replacing the hard drive [https://en.wikipedia.org/wiki/VMware_ESXi VMware ESXi] was installed, and the virtual machine [[:Ricky|Ricky]] was created. Stevie has been empty since July 2023 when Ricky was powered off. Stevie was officially retired in August 2024 when he was powered off forever. Stevie&#039;s physical remains were recycled in March 2026, but his spirit lives on in Stevie 2.0. RIP Stevie.&lt;br /&gt;
&lt;br /&gt;
Stevie 2.0 was purchased in February 2025 after a [https://donorbox.org/rebirth-of-stevie successful fundraiser]. He is now equipped with Dual Xeon Gold 6138 CPUs, 192 GB of memory, and runs [https://en.wikipedia.org/wiki/VMware_ESXi VMware ESXi].&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Terms&amp;diff=2217</id>
		<title>Terms</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Terms&amp;diff=2217"/>
		<updated>2026-03-15T01:04:31Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Terms of Service */ Changed order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Terms of Service ==&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following Terms of Service as well as the [[:#DISCLAIMER|DISCLAIMER]] presented below. If you do not agree to these Terms, you may not use HelioHost. Users who already have an account must [https://heliohost.org/dashboard/delete/ delete their account] if they no longer agree to the Terms.&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong style=&amp;quot;color: #ff4d4d; font-size: 120%;&amp;quot;&amp;gt;Each person is allowed to have a maximum of one account between Tommy and Johnny. You may not maintain someone else&#039;s account on their behalf. &amp;lt;/strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: 120%;&amp;quot;&amp;gt;Exceptions to this policy can be requested by contacting support. Approval of such requests is not guaranteed. This policy does not apply to [https://heliohost.org/morty/ Morty] or [https://heliohost.org/vps/ VPS accounts].&amp;lt;/span&amp;gt;&lt;br /&gt;
* You must be at least 13 years old to use HelioHost.&lt;br /&gt;
* You will not register or maintain an account using a disposable email address.&lt;br /&gt;
* Your site will contain no content illegal under US law.&lt;br /&gt;
* No phishing. Your site will not collect or attempt to collect personal information by deception.&lt;br /&gt;
* Your website will not offer banking, investment, credit/loans, or similar financial services, as our data center does not meet PCI DSS compliance or ISO/IEC 27001 certification.&lt;br /&gt;
* You will not host any form of online gambling or betting website that accepts wagers or pays prizes in real money, cryptocurrency, or credits that are redeemable for real money or cryptocurrency.&lt;br /&gt;
* No cryptocurrency mining.&lt;br /&gt;
* Proxies are not permitted on Plesk plans. Users wishing to host a proxy are encouraged to [https://heliohost.org/vps/ purchase a VPS].&lt;br /&gt;
* Johnny and Tommy plans are intended for non-commercial uses, such as hobbyists, development environments, registered nonprofits, and personal websites. Microbusinesses that just launched are acceptable but are subject to review. HelioHost reserves the right to require users switch to Morty or a VPS if it is determined that your website belongs to a commercial business. This is a requirement of Plesk&#039;s nonprofit licensing.&lt;br /&gt;
* You may not infringe on any copyrights through your site. You may be asked for proof of purchase or license if copyrighted content or commercial software is used on your account.&lt;br /&gt;
* No IPTV websites. You will not host a streaming video website that offers access to television or movie streams, regardless of the content on offer.&lt;br /&gt;
* Your site will not be of a pornographic nature and will refrain from providing pictures and/or photographs of nude men and women.&lt;br /&gt;
* Your site will not email, personal message, instant message, or communicate any kind of &amp;quot;spam,&amp;quot; or unsolicited bulk advertising of any kind.&lt;br /&gt;
* Your site will not offer any form of social media &amp;quot;marketing&amp;quot; service, including but not limited to services that provide &amp;quot;Facebook Likes&amp;quot;, &amp;quot;Instagram Followers&amp;quot;, or &amp;quot;X Followers&amp;quot;. Your account will not store or operate scripts required to provide such services (e.g. &amp;quot;like bots&amp;quot;, &amp;quot;follower bots&amp;quot;, &amp;quot;smm panels&amp;quot;, &amp;quot;sosmed panels&amp;quot;).&lt;br /&gt;
* Your site will not offer any service that purports to modify or add game content or credits to third-party online game accounts, or that is designed to interrupt, disable, cause a ban from, or otherwise prevent the normal operation of, a third party online game service or account.&lt;br /&gt;
* Everything displayed on your site will be your property. HelioHost assumes no responsibility for any content displayed by customers of our services.&lt;br /&gt;
* HelioHost is based in the USA. Federal Regulations prohibit us from accepting donations, providing free services, or providing paid services to anyone in Iran, Cuba, or North Korea.&lt;br /&gt;
* You will not intentionally send large volumes of traffic to your website or intentionally cause high server load for the purposes of testing performance, resource limits, or capabilities. Users who engage in such conduct may be subject to a permanent ban without warning or refund.&lt;br /&gt;
* VPS customers only: Your VPS must respond to ICMP pings. This is required by our ISP.&lt;br /&gt;
* Refunds are provided pursuant to our [https://heliohost.org/refunds Refund Policy].&lt;br /&gt;
* You agree to not hold HelioHost liable for any loss of data, content, revenues, relationships, or traffic that occurs as a result of a systems failure or outage. You understand that HelioHost services are provided &#039;&#039;&#039;AS-IS and that HelioHost does not guarantee service availability&#039;&#039;&#039;. Services are provided in accordance with our [[#Disclaimer|Service Disclaimer]].&lt;br /&gt;
* We reserve the right to change the Terms of Service at any time. An announcement will be made to you via email and our normal [https://helionet.org/index/forum/1-news/ News channels] when we make such changes. If you disagree with the changes, you can decline them by [https://heliohost.org/dashboard/delete/ deleting your account].&lt;br /&gt;
* We reserve the right to delete, change, or edit your account or your content with or without prior notification, including, but not limited to cases arising from abuse of these Terms.&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&lt;br /&gt;
HelioHost hosting service is provided &#039;AS-IS&#039; with NO WARRANTY of any kind, neither express nor implied, not even the implied warranties of merchantability, non-infringement, and fitness for a particular purpose. Furthermore, HelioHost makes no guarantees as to the proper operation of the service, availability of the service, or the safety or security of the service.&lt;br /&gt;
&lt;br /&gt;
HelioHost is NOT LIABLE FOR DATA LOSS, equipment malfunction or failure, or other damages (physical, digital, monetary, or otherwise) caused by the use of this service, the improper operation of the service due to abuse, misuse, or malfunction of any kind, or the quality of the service&#039;s performance (or its failure to perform). Use the service at your own risk.&lt;br /&gt;
&lt;br /&gt;
== HelioNet Terms ==&lt;br /&gt;
&lt;br /&gt;
Users on [[:HelioNet|HelioNet]] must abide by the following rules:&lt;br /&gt;
&lt;br /&gt;
* [https://www.helionet.org/index/topic/4-the-official-rules-guide/ Official Rules Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/2-the-official-spam-guide/ Official Spam Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/3-the-official-enforcement-guide/ Official Enforcement Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/1544-the-official-etiquette-guide/ Official Etiquette Guide]&lt;br /&gt;
&lt;br /&gt;
Failure to abide by these terms may result in suspension of ALL HelioNet affiliated accounts, including accounts related to HelioHost, to be determined at HelioNet&#039;s sole discretion.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Terms&amp;diff=2216</id>
		<title>Terms</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Terms&amp;diff=2216"/>
		<updated>2026-03-15T00:57:47Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Terms of Service */ 2026-03-14 Terms of Service update adds 1. no commercial websites on non-profit licenses, 2. proof of purchase or license may be required, 3. no casino or gambling websites, 4. no ddosing yourself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Terms of Service ==&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following Terms of Service as well as the [[:#DISCLAIMER|DISCLAIMER]] presented below. If you do not agree to these Terms, you may not use HelioHost. Users who already have an account must [https://heliohost.org/dashboard/delete/ delete their account] if they no longer agree to the Terms.&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong style=&amp;quot;color: #ff4d4d; font-size: 120%;&amp;quot;&amp;gt;Each person is allowed to have a maximum of one account between Tommy and Johnny. You may not maintain someone else&#039;s account on their behalf. &amp;lt;/strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: 120%;&amp;quot;&amp;gt;Exceptions to this policy can be requested by contacting support. Approval of such requests is not guaranteed. This policy does not apply to [https://heliohost.org/morty/ Morty] or [https://heliohost.org/vps/ VPS accounts].&amp;lt;/span&amp;gt;&lt;br /&gt;
* You must be at least 13 years old to use HelioHost.&lt;br /&gt;
* You will not register or maintain an account using a disposable email address.&lt;br /&gt;
* Your site will contain no content illegal under US law.&lt;br /&gt;
* No phishing. Your site will not collect or attempt to collect personal information by deception.&lt;br /&gt;
* Your website will not offer banking, investment, credit/loans, or similar financial services, as our data center does not meet PCI DSS compliance or ISO/IEC 27001 certification.&lt;br /&gt;
* You will not host any form of online gambling or betting website that accepts wagers or pays prizes in real money, cryptocurrency, or credits that are redeemable for real money or cryptocurrency.&lt;br /&gt;
* No cryptocurrency mining.&lt;br /&gt;
* Proxies are not permitted on Plesk plans. Users wishing to host a proxy are encouraged to [https://heliohost.org/vps/ purchase a VPS].&lt;br /&gt;
* You may not infringe on any copyrights through your site. You may be asked for proof of purchase or license if copyrighted content or commercial software is used on your account.&lt;br /&gt;
* No IPTV websites. You will not host a streaming video website that offers access to television or movie streams, regardless of the content on offer.&lt;br /&gt;
* Your site will not be of a pornographic nature and will refrain from providing pictures and/or photographs of nude men and women.&lt;br /&gt;
* Your site will not email, personal message, instant message, or communicate any kind of &amp;quot;spam,&amp;quot; or unsolicited bulk advertising of any kind.&lt;br /&gt;
* Your site will not offer any form of social media &amp;quot;marketing&amp;quot; service, including but not limited to services that provide &amp;quot;Facebook Likes&amp;quot;, &amp;quot;Instagram Followers&amp;quot;, or &amp;quot;X Followers&amp;quot;. Your account will not store or operate scripts required to provide such services (e.g. &amp;quot;like bots&amp;quot;, &amp;quot;follower bots&amp;quot;, &amp;quot;smm panels&amp;quot;, &amp;quot;sosmed panels&amp;quot;).&lt;br /&gt;
* Your site will not offer any service that purports to modify or add game content or credits to third-party online game accounts, or that is designed to interrupt, disable, cause a ban from, or otherwise prevent the normal operation of, a third party online game service or account.&lt;br /&gt;
* Everything displayed on your site will be your property. HelioHost assumes no responsibility for any content displayed by customers of our services.&lt;br /&gt;
* HelioHost is based in the USA. Federal Regulations prohibit us from accepting donations, providing free services, or providing paid services to anyone in Iran, Cuba, or North Korea.&lt;br /&gt;
* Johnny and Tommy plans are intended for non-commercial uses, such as hobbyists, development environments, registered nonprofits, and personal websites. Microbusinesses that just launched are acceptable but are subject to review. HelioHost reserves the right to require users switch to Morty or a VPS if it is determined that your website belongs to a commercial business. This is a requirement of Plesk&#039;s nonprofit licensing.&lt;br /&gt;
* You will not intentionally send large volumes of traffic to your website or intentionally cause high server load for the purposes of testing performance, resource limits, or capabilities. Users who engage in such conduct may be subject to a permanent ban without warning or refund.&lt;br /&gt;
* VPS customers only: Your VPS must respond to ICMP pings. This is required by our ISP.&lt;br /&gt;
* Refunds are provided pursuant to our [https://heliohost.org/refunds Refund Policy].&lt;br /&gt;
* You agree to not hold HelioHost liable for any loss of data, content, revenues, relationships, or traffic that occurs as a result of a systems failure or outage. You understand that HelioHost services are provided &#039;&#039;&#039;AS-IS and that HelioHost does not guarantee service availability&#039;&#039;&#039;. Services are provided in accordance with our [[#Disclaimer|Service Disclaimer]].&lt;br /&gt;
* We reserve the right to change the Terms of Service at any time. An announcement will be made to you via email and our normal [https://helionet.org/index/forum/1-news/ News channels] when we make such changes. If you disagree with the changes, you can decline them by [https://heliohost.org/dashboard/delete/ deleting your account].&lt;br /&gt;
* We reserve the right to delete, change, or edit your account or your content with or without prior notification, including, but not limited to cases arising from abuse of these Terms.&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&lt;br /&gt;
HelioHost hosting service is provided &#039;AS-IS&#039; with NO WARRANTY of any kind, neither express nor implied, not even the implied warranties of merchantability, non-infringement, and fitness for a particular purpose. Furthermore, HelioHost makes no guarantees as to the proper operation of the service, availability of the service, or the safety or security of the service.&lt;br /&gt;
&lt;br /&gt;
HelioHost is NOT LIABLE FOR DATA LOSS, equipment malfunction or failure, or other damages (physical, digital, monetary, or otherwise) caused by the use of this service, the improper operation of the service due to abuse, misuse, or malfunction of any kind, or the quality of the service&#039;s performance (or its failure to perform). Use the service at your own risk.&lt;br /&gt;
&lt;br /&gt;
== HelioNet Terms ==&lt;br /&gt;
&lt;br /&gt;
Users on [[:HelioNet|HelioNet]] must abide by the following rules:&lt;br /&gt;
&lt;br /&gt;
* [https://www.helionet.org/index/topic/4-the-official-rules-guide/ Official Rules Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/2-the-official-spam-guide/ Official Spam Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/3-the-official-enforcement-guide/ Official Enforcement Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/1544-the-official-etiquette-guide/ Official Etiquette Guide]&lt;br /&gt;
&lt;br /&gt;
Failure to abide by these terms may result in suspension of ALL HelioNet affiliated accounts, including accounts related to HelioHost, to be determined at HelioNet&#039;s sole discretion.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2215</id>
		<title>MariaDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2215"/>
		<updated>2026-03-14T17:05:43Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Created new section for example config&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers MariaDB which is the fully free, fully open source version of MySQL.&lt;br /&gt;
&lt;br /&gt;
MariaDB is a very handy tool available to webmasters who want to take advantage of dynamic web pages which run on languages such as PHP, as well as software like WordPress that may have been manually installed (not installed using [[:Softaculous|Softaculous]]).&lt;br /&gt;
&lt;br /&gt;
More information about MariaDB can be found at [https://en.wikipedia.org/wiki/MariaDB/ Wikipedia] and [https://mariadb.org/ the official MariaDB website].&lt;br /&gt;
&lt;br /&gt;
== Plesk Procedure  ==&lt;br /&gt;
&lt;br /&gt;
The following are a list of steps to follow to create a MariaDB in Plesk.&lt;br /&gt;
&lt;br /&gt;
== Navigating to the &#039;Databases&#039; Section  ==&lt;br /&gt;
&lt;br /&gt;
Before you take advantage of MariaDB, you will need to create a database and a user to work with. To access the &#039;Databases&#039; section of Plesk, use the button available left hand menu.  Depending on your resolution (e.g. mobile devices), there may be a menu icon ( ☰ ) that you have to click to display the menu.  You can also access the &#039;Database&#039; section from the &#039;Websites &amp;amp; Domains&#039; section.&lt;br /&gt;
&lt;br /&gt;
== Creating the Database  ==&lt;br /&gt;
&lt;br /&gt;
In the &#039;Databases&#039; section of Plesk, there&#039;s a button &#039;+ Add Database&#039;. On smaller resolutions, the menu icon will appear.  On the resulting page, you will have to fill out a form.&lt;br /&gt;
&lt;br /&gt;
== General Section ==&lt;br /&gt;
&lt;br /&gt;
The first section is general.  There are three items in this section.  &lt;br /&gt;
&lt;br /&gt;
The first item is the database name, this is prefixed with the format&#039;&amp;lt;Username&amp;gt;_&#039;.  &lt;br /&gt;
&lt;br /&gt;
The second item is the server.  This will be a dropdown of the available database servers.  From this dropdown select &#039;localhost:3306( default for MariaDB )&#039;. &lt;br /&gt;
&lt;br /&gt;
The third item is a drop down to associate your database with a site.  The default is no related sites.  From this dropdown you can associate your database with any website you have set up.  This is a convenience feature to help associate a database with a website and is not required.&lt;br /&gt;
&lt;br /&gt;
== User Section ==&lt;br /&gt;
&lt;br /&gt;
The next section is &#039;Users&#039;.  In this section there are 5 items as well as two buttons.  &lt;br /&gt;
&lt;br /&gt;
The first item is a checkbox to indicate whether or not you want to add a user while creating your database.  This is checked by default.&lt;br /&gt;
&lt;br /&gt;
The second item is the username, this will have a prefix of the same format as the database name.&lt;br /&gt;
&lt;br /&gt;
The third item is the password.  This item is associated with the two buttons.  The &#039;Generate&#039; button will generate a password for you.  The second button will display the password on your screen.  Generated passwords are hidden by default unless the show button is pressed.  You can also enter any password you require.  Once a password is entered a &#039;Password Strength&#039; meter will appear.  There is a help button &#039;(?)&#039; with more details regarding this meter.&lt;br /&gt;
&lt;br /&gt;
The fourth item is a confirm password.  This must match the password.&lt;br /&gt;
&lt;br /&gt;
The fifth item is a checkbox to indicate a &#039;User has access to all databases within the selected subscription&#039;.  This means the user can access all databases listed in the main &#039;Databases&#039; section.&lt;br /&gt;
&lt;br /&gt;
The sixth item is access control.  You have three choices.  You can allow local only connections.  You can allow connections from any IP, or you can submit a list of IPs or FQDNs.  This list supports wildcards and examples are provided.&lt;br /&gt;
&lt;br /&gt;
Once these sections are complete, you can click &#039;OK&#039; to create the database.&lt;br /&gt;
&lt;br /&gt;
== DB User Permissions ==&lt;br /&gt;
&lt;br /&gt;
In order to change user permissions and privileges, you have to navigate to the user.  This is done from the &#039;Databases&#039; section.  A list of users will be listed next to your databases.  Click on the user you want to modify to proceed to the &#039;Edit Database User&#039; screen.&lt;br /&gt;
&lt;br /&gt;
== DB User Editing ==&lt;br /&gt;
&lt;br /&gt;
The first section of this screen is identical to the [user section](#plesk-create-step2) while creating the database and will not be covered here.&lt;br /&gt;
&lt;br /&gt;
There are two items available while editing a user that aren&#039;t available while creating a database.  &lt;br /&gt;
&lt;br /&gt;
You can assign roles: Read &amp;amp; Write, Read Only, Write Only, and Customer.  There are also data/structure access which will specify which privileges a DB user has.  See the [https://mariadb.com/docs/server/ref/mdb/privileges/ MariaDB privileges documentation] for more details on the individual privileges.&lt;br /&gt;
&lt;br /&gt;
== Accessing the Database  ==&lt;br /&gt;
&lt;br /&gt;
Below are some tips to connect to your database either through Plesk via phpmyadmin, locally via code, or remotely through code or other client (e.g. MariaDB&#039;s mysql command line or some other utility such as a GUI listed on the [https://mariadb.com/kb/en/graphical-and-enhanced-clients/ MariaDB website]).&lt;br /&gt;
&lt;br /&gt;
== Local connections  ==&lt;br /&gt;
&lt;br /&gt;
If you are connecting locally, then your &#039;HOST&#039; is &#039;localhost&#039;. Your database name is the name you specified, but prefixed with your Plesk username and then an underscore (e.g. PLESK_USERNAME_DATABASE).&lt;br /&gt;
&lt;br /&gt;
== Managing the database with phpMyAdmin ==&lt;br /&gt;
&lt;br /&gt;
By using the phpMyAdmin button on Plesk&#039;s homepage, you can control and manage your databases and issue commands. More information about phpMyAdmin is available at the [https://www.phpmyadmin.net official site].&lt;br /&gt;
&lt;br /&gt;
== Connecting Remotely ==&lt;br /&gt;
&lt;br /&gt;
# Login at https://heliohost.org/login/&lt;br /&gt;
# Click continue to Plesk.&lt;br /&gt;
# Click databases in the left navigation panel.&lt;br /&gt;
# If you haven&#039;t already created a database see [https://wiki.helionet.org/MariaDB#Creating_the_Database Creating the Database] above, otherwise click the database you wish to connect to remotely.&lt;br /&gt;
# Click the database user near the bottom of the database tile. It will be your main account username followed by an underscore followed by whatever you picked when creating the database.&lt;br /&gt;
# Locate the access control section near the bottom of the page.&lt;br /&gt;
# By default databases are created with local connections only for increased security. If you want to allow any IP address to connect select the &#039;Allow remote connections from any host&#039; option. If you want to allow only one or a few IP addresses to connect select the &#039;Allow remote connections from&#039; option, and enter the IP address(es) into the box that appears.&lt;br /&gt;
# Click &#039;Ok&#039; at the bottom of the page to save the changes.&lt;br /&gt;
# The host you use will be determined by which server you&#039;re on. Look at the URL of the Plesk page you&#039;re on currently, and if it says &#039;morty.heliohost.org/smb/database/list&#039; that means you&#039;ll be using &#039;morty.heliohost.org&#039; as your host value.&lt;br /&gt;
# The remote MariaDB port is 3306 for all of our plans.&lt;br /&gt;
# The full remote MariaDB config will look something like this:&lt;br /&gt;
&lt;br /&gt;
== Example Remote MariaDB Values ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host=morty.heliohost.org&lt;br /&gt;
port=3306&lt;br /&gt;
username=username_user&lt;br /&gt;
database=username_db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Caution|Make sure you update the above host based on which server you&#039;re actually on, make sure you update the username to match the actual username you created, and make sure you update the database name to match the actual database you created. This is just an example, and if you copy/paste it exactly as displayed without updating it to real values it won&#039;t work.}}&lt;br /&gt;
&lt;br /&gt;
== Example Code Links ==&lt;br /&gt;
&lt;br /&gt;
Official MariaDB docs:&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/developers/resources/language/php/ PHP Example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/ Python MariaDB module example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/using-sqlalchemy-with-mariadb-connector-python-part-1/ Python SQLAlchemy module example]&lt;br /&gt;
&lt;br /&gt;
Offical PHP and Python module docs:&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/en/book.mysqli.php PHP MySQLi Docs]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb-corporation.github.io/mariadb-connector-python/ Python MariaDB module docs]&lt;br /&gt;
&lt;br /&gt;
[https://docs.sqlalchemy.org/en/20/ Python SQLAlchemy module docs]&lt;br /&gt;
&lt;br /&gt;
You can find other language examples using your favorite search engine.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2214</id>
		<title>MariaDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2214"/>
		<updated>2026-03-14T17:04:17Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Removed hosts section, since it&amp;#039;s covered in the Connecting Remotely section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers MariaDB which is the fully free, fully open source version of MySQL.&lt;br /&gt;
&lt;br /&gt;
MariaDB is a very handy tool available to webmasters who want to take advantage of dynamic web pages which run on languages such as PHP, as well as software like WordPress that may have been manually installed (not installed using [[:Softaculous|Softaculous]]).&lt;br /&gt;
&lt;br /&gt;
More information about MariaDB can be found at [https://en.wikipedia.org/wiki/MariaDB/ Wikipedia] and [https://mariadb.org/ the official MariaDB website].&lt;br /&gt;
&lt;br /&gt;
== Plesk Procedure  ==&lt;br /&gt;
&lt;br /&gt;
The following are a list of steps to follow to create a MariaDB in Plesk.&lt;br /&gt;
&lt;br /&gt;
== Navigating to the &#039;Databases&#039; Section  ==&lt;br /&gt;
&lt;br /&gt;
Before you take advantage of MariaDB, you will need to create a database and a user to work with. To access the &#039;Databases&#039; section of Plesk, use the button available left hand menu.  Depending on your resolution (e.g. mobile devices), there may be a menu icon ( ☰ ) that you have to click to display the menu.  You can also access the &#039;Database&#039; section from the &#039;Websites &amp;amp; Domains&#039; section.&lt;br /&gt;
&lt;br /&gt;
== Creating the Database  ==&lt;br /&gt;
&lt;br /&gt;
In the &#039;Databases&#039; section of Plesk, there&#039;s a button &#039;+ Add Database&#039;. On smaller resolutions, the menu icon will appear.  On the resulting page, you will have to fill out a form.&lt;br /&gt;
&lt;br /&gt;
== General Section ==&lt;br /&gt;
&lt;br /&gt;
The first section is general.  There are three items in this section.  &lt;br /&gt;
&lt;br /&gt;
The first item is the database name, this is prefixed with the format&#039;&amp;lt;Username&amp;gt;_&#039;.  &lt;br /&gt;
&lt;br /&gt;
The second item is the server.  This will be a dropdown of the available database servers.  From this dropdown select &#039;localhost:3306( default for MariaDB )&#039;. &lt;br /&gt;
&lt;br /&gt;
The third item is a drop down to associate your database with a site.  The default is no related sites.  From this dropdown you can associate your database with any website you have set up.  This is a convenience feature to help associate a database with a website and is not required.&lt;br /&gt;
&lt;br /&gt;
== User Section ==&lt;br /&gt;
&lt;br /&gt;
The next section is &#039;Users&#039;.  In this section there are 5 items as well as two buttons.  &lt;br /&gt;
&lt;br /&gt;
The first item is a checkbox to indicate whether or not you want to add a user while creating your database.  This is checked by default.&lt;br /&gt;
&lt;br /&gt;
The second item is the username, this will have a prefix of the same format as the database name.&lt;br /&gt;
&lt;br /&gt;
The third item is the password.  This item is associated with the two buttons.  The &#039;Generate&#039; button will generate a password for you.  The second button will display the password on your screen.  Generated passwords are hidden by default unless the show button is pressed.  You can also enter any password you require.  Once a password is entered a &#039;Password Strength&#039; meter will appear.  There is a help button &#039;(?)&#039; with more details regarding this meter.&lt;br /&gt;
&lt;br /&gt;
The fourth item is a confirm password.  This must match the password.&lt;br /&gt;
&lt;br /&gt;
The fifth item is a checkbox to indicate a &#039;User has access to all databases within the selected subscription&#039;.  This means the user can access all databases listed in the main &#039;Databases&#039; section.&lt;br /&gt;
&lt;br /&gt;
The sixth item is access control.  You have three choices.  You can allow local only connections.  You can allow connections from any IP, or you can submit a list of IPs or FQDNs.  This list supports wildcards and examples are provided.&lt;br /&gt;
&lt;br /&gt;
Once these sections are complete, you can click &#039;OK&#039; to create the database.&lt;br /&gt;
&lt;br /&gt;
== DB User Permissions ==&lt;br /&gt;
&lt;br /&gt;
In order to change user permissions and privileges, you have to navigate to the user.  This is done from the &#039;Databases&#039; section.  A list of users will be listed next to your databases.  Click on the user you want to modify to proceed to the &#039;Edit Database User&#039; screen.&lt;br /&gt;
&lt;br /&gt;
== DB User Editing ==&lt;br /&gt;
&lt;br /&gt;
The first section of this screen is identical to the [user section](#plesk-create-step2) while creating the database and will not be covered here.&lt;br /&gt;
&lt;br /&gt;
There are two items available while editing a user that aren&#039;t available while creating a database.  &lt;br /&gt;
&lt;br /&gt;
You can assign roles: Read &amp;amp; Write, Read Only, Write Only, and Customer.  There are also data/structure access which will specify which privileges a DB user has.  See the [https://mariadb.com/docs/server/ref/mdb/privileges/ MariaDB privileges documentation] for more details on the individual privileges.&lt;br /&gt;
&lt;br /&gt;
== Accessing the Database  ==&lt;br /&gt;
&lt;br /&gt;
Below are some tips to connect to your database either through Plesk via phpmyadmin, locally via code, or remotely through code or other client (e.g. MariaDB&#039;s mysql command line or some other utility such as a GUI listed on the [https://mariadb.com/kb/en/graphical-and-enhanced-clients/ MariaDB website]).&lt;br /&gt;
&lt;br /&gt;
== Local connections  ==&lt;br /&gt;
&lt;br /&gt;
If you are connecting locally, then your &#039;HOST&#039; is &#039;localhost&#039;. Your database name is the name you specified, but prefixed with your Plesk username and then an underscore (e.g. PLESK_USERNAME_DATABASE).&lt;br /&gt;
&lt;br /&gt;
== Managing the database with phpMyAdmin ==&lt;br /&gt;
&lt;br /&gt;
By using the phpMyAdmin button on Plesk&#039;s homepage, you can control and manage your databases and issue commands. More information about phpMyAdmin is available at the [https://www.phpmyadmin.net official site].&lt;br /&gt;
&lt;br /&gt;
== Connecting Remotely ==&lt;br /&gt;
&lt;br /&gt;
# Login at https://heliohost.org/login/&lt;br /&gt;
# Click continue to Plesk.&lt;br /&gt;
# Click databases in the left navigation panel.&lt;br /&gt;
# If you haven&#039;t already created a database see [https://wiki.helionet.org/MariaDB#Creating_the_Database Creating the Database] above, otherwise click the database you wish to connect to remotely.&lt;br /&gt;
# Click the database user near the bottom of the database tile. It will be your main account username followed by an underscore followed by whatever you picked when creating the database.&lt;br /&gt;
# Locate the access control section near the bottom of the page.&lt;br /&gt;
# By default databases are created with local connections only for increased security. If you want to allow any IP address to connect select the &#039;Allow remote connections from any host&#039; option. If you want to allow only one or a few IP addresses to connect select the &#039;Allow remote connections from&#039; option, and enter the IP address(es) into the box that appears.&lt;br /&gt;
# Click &#039;Ok&#039; at the bottom of the page to save the changes.&lt;br /&gt;
# The host you use will be determined by which server you&#039;re on. Look at the URL of the Plesk page you&#039;re on currently, and if it says &#039;morty.heliohost.org/smb/database/list&#039; that means you&#039;ll be using &#039;morty.heliohost.org&#039; as your host value.&lt;br /&gt;
# The remote MariaDB port is 3306 for all of our plans.&lt;br /&gt;
# The full remote MariaDB config will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host=morty.heliohost.org&lt;br /&gt;
port=3306&lt;br /&gt;
username=username_user&lt;br /&gt;
database=username_db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Caution|Make sure you update the above host based on which server you&#039;re actually on, make sure you update the username to match the actual username you created, and make sure you update the database name to match the actual database you created. This is just an example, and if you copy/paste it exactly as displayed without updating it to real values it won&#039;t work.}}&lt;br /&gt;
&lt;br /&gt;
== Example Code Links ==&lt;br /&gt;
&lt;br /&gt;
Official MariaDB docs:&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/developers/resources/language/php/ PHP Example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/ Python MariaDB module example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/using-sqlalchemy-with-mariadb-connector-python-part-1/ Python SQLAlchemy module example]&lt;br /&gt;
&lt;br /&gt;
Offical PHP and Python module docs:&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/en/book.mysqli.php PHP MySQLi Docs]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb-corporation.github.io/mariadb-connector-python/ Python MariaDB module docs]&lt;br /&gt;
&lt;br /&gt;
[https://docs.sqlalchemy.org/en/20/ Python SQLAlchemy module docs]&lt;br /&gt;
&lt;br /&gt;
You can find other language examples using your favorite search engine.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2213</id>
		<title>MariaDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2213"/>
		<updated>2026-03-14T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Connecting Remotely */ A few more details about how to enable remote connections.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MariaDB ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers MariaDB which is the fully free, fully open source version of MySQL.&lt;br /&gt;
&lt;br /&gt;
MariaDB is a very handy tool available to webmasters who want to take advantage of dynamic web pages which run on languages such as PHP, as well as software like WordPress that may have been manually installed (not installed using [[:Softaculous|Softaculous]]).&lt;br /&gt;
&lt;br /&gt;
More information about MariaDB can be found at [https://en.wikipedia.org/wiki/MariaDB/ Wikipedia] and [https://mariadb.org/ the official MariaDB website].&lt;br /&gt;
&lt;br /&gt;
== Plesk Procedure  ==&lt;br /&gt;
&lt;br /&gt;
The following are a list of steps to follow to create a MariaDB in Plesk.&lt;br /&gt;
&lt;br /&gt;
== Navigating to the &#039;Databases&#039; Section  ==&lt;br /&gt;
&lt;br /&gt;
Before you take advantage of MariaDB, you will need to create a database and a user to work with. To access the &#039;Databases&#039; section of Plesk, use the button available left hand menu.  Depending on your resolution (e.g. mobile devices), there may be a menu icon ( ☰ ) that you have to click to display the menu.  You can also access the &#039;Database&#039; section from the &#039;Websites &amp;amp; Domains&#039; section.&lt;br /&gt;
&lt;br /&gt;
== Creating the Database  ==&lt;br /&gt;
&lt;br /&gt;
In the &#039;Databases&#039; section of Plesk, there&#039;s a button &#039;+ Add Database&#039;. On smaller resolutions, the menu icon will appear.  On the resulting page, you will have to fill out a form.&lt;br /&gt;
&lt;br /&gt;
== General Section ==&lt;br /&gt;
&lt;br /&gt;
The first section is general.  There are three items in this section.  &lt;br /&gt;
&lt;br /&gt;
The first item is the database name, this is prefixed with the format&#039;&amp;lt;Username&amp;gt;_&#039;.  &lt;br /&gt;
&lt;br /&gt;
The second item is the server.  This will be a dropdown of the available database servers.  From this dropdown select &#039;localhost:3306( default for MariaDB )&#039;. &lt;br /&gt;
&lt;br /&gt;
The third item is a drop down to associate your database with a site.  The default is no related sites.  From this dropdown you can associate your database with any website you have set up.  This is a convenience feature to help associate a database with a website and is not required.&lt;br /&gt;
&lt;br /&gt;
== User Section ==&lt;br /&gt;
&lt;br /&gt;
The next section is &#039;Users&#039;.  In this section there are 5 items as well as two buttons.  &lt;br /&gt;
&lt;br /&gt;
The first item is a checkbox to indicate whether or not you want to add a user while creating your database.  This is checked by default.&lt;br /&gt;
&lt;br /&gt;
The second item is the username, this will have a prefix of the same format as the database name.&lt;br /&gt;
&lt;br /&gt;
The third item is the password.  This item is associated with the two buttons.  The &#039;Generate&#039; button will generate a password for you.  The second button will display the password on your screen.  Generated passwords are hidden by default unless the show button is pressed.  You can also enter any password you require.  Once a password is entered a &#039;Password Strength&#039; meter will appear.  There is a help button &#039;(?)&#039; with more details regarding this meter.&lt;br /&gt;
&lt;br /&gt;
The fourth item is a confirm password.  This must match the password.&lt;br /&gt;
&lt;br /&gt;
The fifth item is a checkbox to indicate a &#039;User has access to all databases within the selected subscription&#039;.  This means the user can access all databases listed in the main &#039;Databases&#039; section.&lt;br /&gt;
&lt;br /&gt;
The sixth item is access control.  You have three choices.  You can allow local only connections.  You can allow connections from any IP, or you can submit a list of IPs or FQDNs.  This list supports wildcards and examples are provided.&lt;br /&gt;
&lt;br /&gt;
Once these sections are complete, you can click &#039;OK&#039; to create the database.&lt;br /&gt;
&lt;br /&gt;
== DB User Permissions ==&lt;br /&gt;
&lt;br /&gt;
In order to change user permissions and privileges, you have to navigate to the user.  This is done from the &#039;Databases&#039; section.  A list of users will be listed next to your databases.  Click on the user you want to modify to proceed to the &#039;Edit Database User&#039; screen.&lt;br /&gt;
&lt;br /&gt;
== DB User Editing ==&lt;br /&gt;
&lt;br /&gt;
The first section of this screen is identical to the [user section](#plesk-create-step2) while creating the database and will not be covered here.&lt;br /&gt;
&lt;br /&gt;
There are two items available while editing a user that aren&#039;t available while creating a database.  &lt;br /&gt;
&lt;br /&gt;
You can assign roles: Read &amp;amp; Write, Read Only, Write Only, and Customer.  There are also data/structure access which will specify which privileges a DB user has.  See the [https://mariadb.com/docs/server/ref/mdb/privileges/ MariaDB privileges documentation] for more details on the individual privileges.&lt;br /&gt;
&lt;br /&gt;
== Accessing the Database  ==&lt;br /&gt;
&lt;br /&gt;
Below are some tips to connect to your database either through Plesk via phpmyadmin, locally via code, or remotely through code or other client (e.g. MariaDB&#039;s mysql command line or some other utility such as a GUI listed on the [https://mariadb.com/kb/en/graphical-and-enhanced-clients/ MariaDB website]).&lt;br /&gt;
&lt;br /&gt;
== Local connections  ==&lt;br /&gt;
&lt;br /&gt;
If you are connecting locally, then your &#039;HOST&#039; is &#039;localhost&#039;. Your database name is the name you specified, but prefixed with your Plesk username and then an underscore (e.g. PLESK_USERNAME_DATABASE).&lt;br /&gt;
&lt;br /&gt;
== Managing the database with phpMyAdmin ==&lt;br /&gt;
&lt;br /&gt;
By using the phpMyAdmin button on Plesk&#039;s homepage, you can control and manage your databases and issue commands. More information about phpMyAdmin is available at the [https://www.phpmyadmin.net official site].&lt;br /&gt;
&lt;br /&gt;
== Connecting Remotely ==&lt;br /&gt;
&lt;br /&gt;
# Login at https://heliohost.org/login/&lt;br /&gt;
# Click continue to Plesk.&lt;br /&gt;
# Click databases in the left navigation panel.&lt;br /&gt;
# If you haven&#039;t already created a database see [https://wiki.helionet.org/MariaDB#Creating_the_Database Creating the Database] above, otherwise click the database you wish to connect to remotely.&lt;br /&gt;
# Click the database user near the bottom of the database tile. It will be your main account username followed by an underscore followed by whatever you picked when creating the database.&lt;br /&gt;
# Locate the access control section near the bottom of the page.&lt;br /&gt;
# By default databases are created with local connections only for increased security. If you want to allow any IP address to connect select the &#039;Allow remote connections from any host&#039; option. If you want to allow only one or a few IP addresses to connect select the &#039;Allow remote connections from&#039; option, and enter the IP address(es) into the box that appears.&lt;br /&gt;
# Click &#039;Ok&#039; at the bottom of the page to save the changes.&lt;br /&gt;
# The host you use will be determined by which server you&#039;re on. Look at the URL of the Plesk page you&#039;re on currently, and if it says &#039;morty.heliohost.org/smb/database/list&#039; that means you&#039;ll be using &#039;morty.heliohost.org&#039; as your host value.&lt;br /&gt;
# The remote MariaDB port is 3306 for all of our plans.&lt;br /&gt;
# The full remote MariaDB config will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host=morty.heliohost.org&lt;br /&gt;
port=3306&lt;br /&gt;
username=username_user&lt;br /&gt;
database=username_db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Caution|Make sure you update the above host based on which server you&#039;re actually on, make sure you update the username to match the actual username you created, and make sure you update the database name to match the actual database you created. This is just an example, and if you copy/paste it exactly as displayed without updating it to real values it won&#039;t work.}}&lt;br /&gt;
&lt;br /&gt;
== Server Hosts ==&lt;br /&gt;
&lt;br /&gt;
Use the host for your server:&lt;br /&gt;
&lt;br /&gt;
* Morty: morty.heliohost.org&lt;br /&gt;
* Tommy: tommy.heliohost.org&lt;br /&gt;
* Johnny: johnny.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== Example Code Links ==&lt;br /&gt;
&lt;br /&gt;
Official MariaDB docs:&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/developers/resources/language/php/ PHP Example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/ Python MariaDB module example]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb.com/resources/blog/using-sqlalchemy-with-mariadb-connector-python-part-1/ Python SQLAlchemy module example]&lt;br /&gt;
&lt;br /&gt;
Offical PHP and Python module docs:&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/en/book.mysqli.php PHP MySQLi Docs]&lt;br /&gt;
&lt;br /&gt;
[https://mariadb-corporation.github.io/mariadb-connector-python/ Python MariaDB module docs]&lt;br /&gt;
&lt;br /&gt;
[https://docs.sqlalchemy.org/en/20/ Python SQLAlchemy module docs]&lt;br /&gt;
&lt;br /&gt;
You can find other language examples using your favorite search engine.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2189</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2189"/>
		<updated>2026-02-08T00:36:38Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Request WSGI Control Access */ Flask uses flask.wsgi not dispatch.wsgi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flask ==&lt;br /&gt;
&lt;br /&gt;
== About Flask ==&lt;br /&gt;
&lt;br /&gt;
Flask is a Python web framework built with a small core and easy-to-extend philosophy. Read more at [https://www.fullstackpython.com/flask.html Full Stack Python].&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 5.0.7 || 3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.0.7 || 3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 3.0.3 || 3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How To Setup Flask on Plesk ==&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;flasktest&#039;. ==&lt;br /&gt;
&lt;br /&gt;
If you were transferred from the old cPanel, your main domain will be parked on the &#039;public_html&#039; directory.  &lt;br /&gt;
&lt;br /&gt;
If you created a new account on Plesk, your directory will be &#039;httpdocs&#039;.&lt;br /&gt;
&lt;br /&gt;
== Create an &#039;.htaccess&#039; file inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(admin_media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(flask\.wsgi/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(.*)$ flasktest/flask.wsgi/$1 [QSA,PT,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;flask.wsgi&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Update the code example, beneath where it says &amp;quot;edit your path below&amp;quot;, and type in the path to your actual website address, instead of the placeholder &#039;domain.helioho.st&#039; part.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&lt;br /&gt;
&lt;br /&gt;
# edit your path below&lt;br /&gt;
sys.path.append(&amp;quot;/home/domain.helioho.st/httpdocs/flasktest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sys.path.insert(0, os.path.dirname(__file__))&lt;br /&gt;
from myapp import app as application&lt;br /&gt;
&lt;br /&gt;
# set this to something harder to guess&lt;br /&gt;
application.secret_key = &#039;secret&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;myapp.py&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
from flask import Flask, __version__&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
application = app&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
  return &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Flask is working on HelioHost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/python/version/&amp;quot;&amp;gt;Python version&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/flask/version/&amp;quot;&amp;gt;Flask version&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/python/version/&amp;quot;)&lt;br /&gt;
def p_version():&lt;br /&gt;
  return &amp;quot;Python version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % sys.version&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/flask/version/&amp;quot;)&lt;br /&gt;
def f_version():&lt;br /&gt;
  return &amp;quot;Flask version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % __version__&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  app.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Make sure your directory structure and files look like this: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flasktest/&lt;br /&gt;
├── flask.wsgi&lt;br /&gt;
├── .htaccess&lt;br /&gt;
└── myapp.py&lt;br /&gt;
&lt;br /&gt;
0 directories, 3 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== If you did everything right it should look like the below: ==&lt;br /&gt;
&lt;br /&gt;
Screenshot taken from [https://krydos.heliohost.org/flasktest https://krydos.heliohost.org/flasktest/]&lt;br /&gt;
&lt;br /&gt;
[[File:flask_test.png]]&lt;br /&gt;
&lt;br /&gt;
== WSGI Uses Caching ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Flask changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because [[:Flask#WSGI_Uses_Server_Side_Caching|WSGI uses server side caching]].&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer [[#Options_to_Work_Around_Caching|a few options to work around caching]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What Caching Does ==&lt;br /&gt;
&lt;br /&gt;
Multiple Apache processes are running on the server, and each time you refresh your site you are randomly assigned to one of these processes. If that particular process has already displayed your site, it shows the cached version of your code; otherwise, it shows the new code changes. This means that during the first 2 hours after a site change, you may intermittently see old or new content, depending on which process you get assigned to. This situation will resolve when Apache is restarted, which happens every 2 hours.&lt;br /&gt;
&lt;br /&gt;
== Options to Work Around Caching ==&lt;br /&gt;
&lt;br /&gt;
== Request WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
A new feature currently available only on the [[:Morty]] plan is the ability for users to restart their Flask app themselves. Please note that this feature takes &#039;&#039;&#039;at a minimum&#039;&#039;&#039; 260 GB memory per day, which will result in a bill of &#039;&#039;&#039;$1.91 or more&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
WSGI Control Access is no longer available on the [[:Tommy]] and [[:Johnny]] servers. Users who need WSGI Control Access can [[:Moving_Your_Account | move their account]] to Morty using our [https://heliohost.org/dashboard/move/ Dashboard page for account moves], or purchase a VPS. {{Template:VPSInfo}} The main advantage of the VPS over Morty is you get root SSH access, which makes Flask development even easier.&lt;br /&gt;
&lt;br /&gt;
To try to keep the cost as low as possible, users on Morty also have the option to request that WSGI Control Access be temporarily enabled it to allow for debugging. Once they have completed troubleshooting, they can request for WSGI Control Access to be disabled.&lt;br /&gt;
&lt;br /&gt;
Once you have created a Flask app that has a &#039;flask.wsgi&#039; file, create a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure to provide:&lt;br /&gt;
# Your username.&lt;br /&gt;
# Confirmation that you are on the Morty server.&lt;br /&gt;
# Confirmation that you have already created a &#039;flask.wsgi&#039; file. &lt;br /&gt;
# Confirmation that you understand that WSGI Control Access uses &#039;&#039;&#039;at a minimum&#039;&#039;&#039; 260 GB memory per day and your bill will probably be about &#039;&#039;&#039;$1.91 or more per month&#039;&#039;&#039;.&lt;br /&gt;
# The domain name(s) for which you want WSGI Control Access. &#039;&#039;&#039;Note:&#039;&#039;&#039; If you have 2 Flask apps on 2 different domains, you need to request WSGI Control Access for each domain.&lt;br /&gt;
&lt;br /&gt;
Once you have confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, you can edit your &#039;flask.wsgi&#039; to reload your Flask app so new code changes load immediately. The edits to the file can be as simple as adding or removing a space or a blank line. As long as the file&#039;s &#039;last modified date&#039; changes it will discard the cache and reload your Flask app.&lt;br /&gt;
&lt;br /&gt;
Please let us know if you experience unexpected results with this new feature.&lt;br /&gt;
&lt;br /&gt;
== Account Resets Remove WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
If you [[:FAQ#How_do_I_reset_my_hosting_account_to_start_fresh|request an account reset]] you will need to re-request WSGI Control Access after the reset has been completed. By default, account resets will disable WSGI Control Access.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Use Local Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Another option to see code changes reflected immediately is to develop your Django app on your home computer and then host the production copy on the server. This is a useful approach for users on the [[:Tommy]] and [[:Johnny]] servers, where WSGI Control Access is no longer offered.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
&lt;br /&gt;
You may prefer to upgrade to a VPS, depending on your requirements. {{Template:VPSInfo}} The main advantage of the VPS over Morty is you get root SSH access, which makes Flask development even easier.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== You don&#039;t have permission to access /flasktest/flask.wsgi/ on this server ===&lt;br /&gt;
&lt;br /&gt;
If you receive an error of &#039;You don&#039;t have permission to access /flasktest/flask.wsgi/ on this server&#039;, you may need to add &#039;AddHandler cgi-script .py&#039; on a new line in your &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
=== ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process ===&lt;br /&gt;
&lt;br /&gt;
If you receive an error of &#039;ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process&#039;, this happens because we use WSGI in embedded mode to reduce load on [[:Tommy | Tommy]] and [[:Johnny | Johnny.]] &lt;br /&gt;
&lt;br /&gt;
On [[:Morty | Morty]] you have the option to use WSGI in daemon mode, but it uses 260 GB memory per day so you would get overage charges every day and pay about $1.91 per month.&lt;br /&gt;
&lt;br /&gt;
You can also switch to a VPS to get rid of the error. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
To get rid of the error on Morty, Tommy, or Johnny, you could use Python CGI instead of Flask.&lt;br /&gt;
&lt;br /&gt;
== Running Flask at the Webroot ==&lt;br /&gt;
&lt;br /&gt;
The above example is for Flask in a subdirectory, so users can host different projects in different subdirectories rather than dedicating the whole domain to one Flask app.&lt;br /&gt;
&lt;br /&gt;
If you prefer to run Flask at the webroot instead, this is possible with some slight changes to the &#039;.htaccess&#039;, &#039;flask.wsgi&#039;, and &#039;myapp.py&#039; files.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from the [https://helionet.org/index/topic/53856-how-to-use-flask-on-plesk/ How to Use Flask on Plesk] post on the HelioNet forum, answered by Krydos.&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If this tutorial has not worked for you, please go back and check all of your steps again to make sure you didn&#039;t miss anything. If you can&#039;t figure out what is wrong, please check your account [[:View_Error_Logs | error logs]], since these will often provide information that can help you resolve the problem. If you&#039;re still stuck, please post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039; and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2188</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2188"/>
		<updated>2026-02-08T00:36:07Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Request WSGI Control Access */ Flask uses flask.wsgi not dispatch.wsgi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flask ==&lt;br /&gt;
&lt;br /&gt;
== About Flask ==&lt;br /&gt;
&lt;br /&gt;
Flask is a Python web framework built with a small core and easy-to-extend philosophy. Read more at [https://www.fullstackpython.com/flask.html Full Stack Python].&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 5.0.7 || 3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.0.7 || 3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 3.0.3 || 3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How To Setup Flask on Plesk ==&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;flasktest&#039;. ==&lt;br /&gt;
&lt;br /&gt;
If you were transferred from the old cPanel, your main domain will be parked on the &#039;public_html&#039; directory.  &lt;br /&gt;
&lt;br /&gt;
If you created a new account on Plesk, your directory will be &#039;httpdocs&#039;.&lt;br /&gt;
&lt;br /&gt;
== Create an &#039;.htaccess&#039; file inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(admin_media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(flask\.wsgi/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(.*)$ flasktest/flask.wsgi/$1 [QSA,PT,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;flask.wsgi&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Update the code example, beneath where it says &amp;quot;edit your path below&amp;quot;, and type in the path to your actual website address, instead of the placeholder &#039;domain.helioho.st&#039; part.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&lt;br /&gt;
&lt;br /&gt;
# edit your path below&lt;br /&gt;
sys.path.append(&amp;quot;/home/domain.helioho.st/httpdocs/flasktest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sys.path.insert(0, os.path.dirname(__file__))&lt;br /&gt;
from myapp import app as application&lt;br /&gt;
&lt;br /&gt;
# set this to something harder to guess&lt;br /&gt;
application.secret_key = &#039;secret&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;myapp.py&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
from flask import Flask, __version__&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
application = app&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
  return &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Flask is working on HelioHost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/python/version/&amp;quot;&amp;gt;Python version&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/flask/version/&amp;quot;&amp;gt;Flask version&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/python/version/&amp;quot;)&lt;br /&gt;
def p_version():&lt;br /&gt;
  return &amp;quot;Python version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % sys.version&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/flask/version/&amp;quot;)&lt;br /&gt;
def f_version():&lt;br /&gt;
  return &amp;quot;Flask version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % __version__&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  app.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Make sure your directory structure and files look like this: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flasktest/&lt;br /&gt;
├── flask.wsgi&lt;br /&gt;
├── .htaccess&lt;br /&gt;
└── myapp.py&lt;br /&gt;
&lt;br /&gt;
0 directories, 3 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== If you did everything right it should look like the below: ==&lt;br /&gt;
&lt;br /&gt;
Screenshot taken from [https://krydos.heliohost.org/flasktest https://krydos.heliohost.org/flasktest/]&lt;br /&gt;
&lt;br /&gt;
[[File:flask_test.png]]&lt;br /&gt;
&lt;br /&gt;
== WSGI Uses Caching ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Flask changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because [[:Flask#WSGI_Uses_Server_Side_Caching|WSGI uses server side caching]].&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer [[#Options_to_Work_Around_Caching|a few options to work around caching]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What Caching Does ==&lt;br /&gt;
&lt;br /&gt;
Multiple Apache processes are running on the server, and each time you refresh your site you are randomly assigned to one of these processes. If that particular process has already displayed your site, it shows the cached version of your code; otherwise, it shows the new code changes. This means that during the first 2 hours after a site change, you may intermittently see old or new content, depending on which process you get assigned to. This situation will resolve when Apache is restarted, which happens every 2 hours.&lt;br /&gt;
&lt;br /&gt;
== Options to Work Around Caching ==&lt;br /&gt;
&lt;br /&gt;
== Request WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
A new feature currently available only on the [[:Morty]] plan is the ability for users to restart their Flask app themselves. Please note that this feature takes &#039;&#039;&#039;at a minimum&#039;&#039;&#039; 260 GB memory per day, which will result in a bill of &#039;&#039;&#039;$1.91 or more&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
WSGI Control Access is no longer available on the [[:Tommy]] and [[:Johnny]] servers. Users who need WSGI Control Access can [[:Moving_Your_Account | move their account]] to Morty using our [https://heliohost.org/dashboard/move/ Dashboard page for account moves], or purchase a VPS. {{Template:VPSInfo}} The main advantage of the VPS over Morty is you get root SSH access, which makes Flask development even easier.&lt;br /&gt;
&lt;br /&gt;
To try to keep the cost as low as possible, users on Morty also have the option to request that WSGI Control Access be temporarily enabled it to allow for debugging. Once they have completed troubleshooting, they can request for WSGI Control Access to be disabled.&lt;br /&gt;
&lt;br /&gt;
Once you have created a Flask app that has a &#039;dispatch.wsgi&#039; file, create a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure to provide:&lt;br /&gt;
# Your username.&lt;br /&gt;
# Confirmation that you are on the Morty server.&lt;br /&gt;
# Confirmation that you have already created a &#039;flask.wsgi&#039; file. &lt;br /&gt;
# Confirmation that you understand that WSGI Control Access uses &#039;&#039;&#039;at a minimum&#039;&#039;&#039; 260 GB memory per day and your bill will probably be about &#039;&#039;&#039;$1.91 or more per month&#039;&#039;&#039;.&lt;br /&gt;
# The domain name(s) for which you want WSGI Control Access. &#039;&#039;&#039;Note:&#039;&#039;&#039; If you have 2 Flask apps on 2 different domains, you need to request WSGI Control Access for each domain.&lt;br /&gt;
&lt;br /&gt;
Once you have confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, you can edit your &#039;flask.wsgi&#039; to reload your Flask app so new code changes load immediately. The edits to the file can be as simple as adding or removing a space or a blank line. As long as the file&#039;s &#039;last modified date&#039; changes it will discard the cache and reload your Flask app.&lt;br /&gt;
&lt;br /&gt;
Please let us know if you experience unexpected results with this new feature.&lt;br /&gt;
&lt;br /&gt;
== Account Resets Remove WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
If you [[:FAQ#How_do_I_reset_my_hosting_account_to_start_fresh|request an account reset]] you will need to re-request WSGI Control Access after the reset has been completed. By default, account resets will disable WSGI Control Access.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Use Local Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Another option to see code changes reflected immediately is to develop your Django app on your home computer and then host the production copy on the server. This is a useful approach for users on the [[:Tommy]] and [[:Johnny]] servers, where WSGI Control Access is no longer offered.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
&lt;br /&gt;
You may prefer to upgrade to a VPS, depending on your requirements. {{Template:VPSInfo}} The main advantage of the VPS over Morty is you get root SSH access, which makes Flask development even easier.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== You don&#039;t have permission to access /flasktest/flask.wsgi/ on this server ===&lt;br /&gt;
&lt;br /&gt;
If you receive an error of &#039;You don&#039;t have permission to access /flasktest/flask.wsgi/ on this server&#039;, you may need to add &#039;AddHandler cgi-script .py&#039; on a new line in your &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
=== ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process ===&lt;br /&gt;
&lt;br /&gt;
If you receive an error of &#039;ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process&#039;, this happens because we use WSGI in embedded mode to reduce load on [[:Tommy | Tommy]] and [[:Johnny | Johnny.]] &lt;br /&gt;
&lt;br /&gt;
On [[:Morty | Morty]] you have the option to use WSGI in daemon mode, but it uses 260 GB memory per day so you would get overage charges every day and pay about $1.91 per month.&lt;br /&gt;
&lt;br /&gt;
You can also switch to a VPS to get rid of the error. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
To get rid of the error on Morty, Tommy, or Johnny, you could use Python CGI instead of Flask.&lt;br /&gt;
&lt;br /&gt;
== Running Flask at the Webroot ==&lt;br /&gt;
&lt;br /&gt;
The above example is for Flask in a subdirectory, so users can host different projects in different subdirectories rather than dedicating the whole domain to one Flask app.&lt;br /&gt;
&lt;br /&gt;
If you prefer to run Flask at the webroot instead, this is possible with some slight changes to the &#039;.htaccess&#039;, &#039;flask.wsgi&#039;, and &#039;myapp.py&#039; files.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from the [https://helionet.org/index/topic/53856-how-to-use-flask-on-plesk/ How to Use Flask on Plesk] post on the HelioNet forum, answered by Krydos.&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If this tutorial has not worked for you, please go back and check all of your steps again to make sure you didn&#039;t miss anything. If you can&#039;t figure out what is wrong, please check your account [[:View_Error_Logs | error logs]], since these will often provide information that can help you resolve the problem. If you&#039;re still stuck, please post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039; and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Addon_Domains&amp;diff=2187</id>
		<title>Addon Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Addon_Domains&amp;diff=2187"/>
		<updated>2026-01-29T19:44:59Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Addon Domains */ Changed order to standardized best plan &amp;gt; lesser plan &amp;gt; lesser plan. Removed extra ) and extra space.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Addon Domains ==&lt;br /&gt;
&lt;br /&gt;
HelioHost accounts on the [[:Morty]] plan can have up to 15 domains total, but if you need more than 15 domains, you can create additional Morty accounts. Users on [[:Tommy]] can have up to 10 domains in total, and on [[:Johnny]] you can have up to 5 domains in total. This includes addon domains, [[:Subdomains|subdomains]], and [[:Parked_(Alias)_Domains|aliases (parked domains)]].&lt;br /&gt;
&lt;br /&gt;
Users cannot yet manage domains on their account themselves. We plan to add this feature in the future, but [[:ETA|there is no ETA for when it may be implemented]]. &lt;br /&gt;
&lt;br /&gt;
In the meantime, HelioHost staff will be happy to help you manage your addon domains.&lt;br /&gt;
&lt;br /&gt;
== What is an Addon Domain? ==&lt;br /&gt;
&lt;br /&gt;
An addon domain is a domain which reflects the contents of a folder in your Plesk File Manager.&lt;br /&gt;
&lt;br /&gt;
== How can I create an Addon Domain? ==&lt;br /&gt;
&lt;br /&gt;
To create an addon domain, submit a request in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum] and provide the following information: &lt;br /&gt;
# Your hosting account &#039;&#039;&#039;username&#039;&#039;&#039;&lt;br /&gt;
# The &#039;&#039;&#039;full addon domain&#039;&#039;&#039; name you want, &#039;&#039;&#039;including the top-level domain (TLD)&#039;&#039;&#039;:&lt;br /&gt;
#* If you&#039;re using HelioHost&#039;s domains, specify either &#039;&#039;&#039;helioho.st&#039;&#039;&#039; or &#039;&#039;&#039;heliohost.us&#039;&#039;&#039;&lt;br /&gt;
#* If you&#039;ve purchased a custom domain, specify the TLD (such as &#039;&#039;&#039;.com&#039;&#039;&#039;, &#039;&#039;&#039;.net&#039;&#039;&#039;, etc.)&lt;br /&gt;
&lt;br /&gt;
== Where are the Addon Domain Files? ==&lt;br /&gt;
&lt;br /&gt;
Addon domains don&#039;t use an httpdocs folder. Instead, each addon domain gets its own folder in your home directory with the same name as the addon domain. For example, if your addon domain is &#039;addondomain.helioho.st&#039;, visitors will see whatever files you upload to that folder.&lt;br /&gt;
&lt;br /&gt;
[[File:addon_domain_files_folder.png]]&lt;br /&gt;
&lt;br /&gt;
== Custom Addon Domains == &lt;br /&gt;
&lt;br /&gt;
== Nameservers ==&lt;br /&gt;
&lt;br /&gt;
You will need to point your custom domain to the following nameservers:&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== DNS Records == &lt;br /&gt;
&lt;br /&gt;
If you prefer to add A records (IPv4) or AAAA records (IPv6) to your custom domain registrar&#039;s dashboard instead of nameservers, look up the IP addresses for your server by using the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain name] &amp;gt; and check at the bottom of the page.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What do I do now? == &lt;br /&gt;
&lt;br /&gt;
{{Info|Whether you are using one of HelioHost&#039;s domains or a custom domain, you will need to wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your addon domain to become fully active. If after an entire 2 hours, you still see a message saying &#039;HelioHost Account Queued&#039;, please [[:Clear_Your_Cache|clear your web browser cache]].}}&lt;br /&gt;
&lt;br /&gt;
== Checking Custom Domain DNS == &lt;br /&gt;
&lt;br /&gt;
Full DNS propagation can take up to 24 - 48 hours globally in some cases. To check that your DNS is properly configured, go to [https://dnschecker.org/ dnschecker.org]. Select the type of record you want to check (NS record, A record, or AAAA record), and type in your custom domain.&lt;br /&gt;
&lt;br /&gt;
== How can I delete an Addon Domain? == &lt;br /&gt;
&lt;br /&gt;
{{Danger|Deleting your addon domain will delete all the files associated with it, so we strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] before requesting to delete an addon domain.&lt;br /&gt;
&lt;br /&gt;
As mentioned in our [[:Terms|Terms of Service]], it is not HelioHost&#039;s responsibility to keep backups of your data.}}&lt;br /&gt;
&lt;br /&gt;
To request deletion of an addon domain, create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum] and provide the following information: &lt;br /&gt;
# Your hosting account &#039;&#039;&#039;username&#039;&#039;&#039;&lt;br /&gt;
# The &#039;&#039;&#039;addon domain&#039;&#039;&#039; you want deleted&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Charlie&amp;diff=2179</id>
		<title>Charlie</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Charlie&amp;diff=2179"/>
		<updated>2025-12-30T05:52:23Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Charlie */ Update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Charlie == &lt;br /&gt;
&lt;br /&gt;
Charlie is a physical server that was purchased in December 2010 and originally hosted [[:Cody|Cody]] and [[:Johnny|Johnny]]. In 2016 when [[:Eddie|Eddie]] was purchased [[:Cody|Cody]] was moved to [[:Eddie|Eddie]] so [[:Johnny|Johnny]] could have all of the resources of Charlie to himself. When [[:Sparkie|Sparkie]] was purchased in 2019 [[:Johnny|Johnny]] was moved off of Charlie as well. He is equipped with a Core 2 Quad Q9550 CPU, 8 GB of memory, and runs [https://en.wikipedia.org/wiki/VMware_ESXi VMware ESXi]. Charlie as been empty since December 2025, and is next in line to be retired.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=WordPress&amp;diff=2174</id>
		<title>WordPress</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=WordPress&amp;diff=2174"/>
		<updated>2025-12-11T01:35:38Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Abusive IPs */ Added another Digital Ocean range&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WordPress ==&lt;br /&gt;
&lt;br /&gt;
WordPress is a popular content management system (CMS) that allows users to easily create and manage websites.&lt;br /&gt;
&lt;br /&gt;
{{Caution|WordPress is known to require a lot of server resources, as it&#039;s not very well optimized. Also, the more pages or plugins a WordPress site has, the bigger the site load will be.&lt;br /&gt;
&lt;br /&gt;
Exceeding the account load limits will cause your user account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Accounts on our [[:Morty|Morty]] server will not be suspended but will be charged for account load overages.&lt;br /&gt;
&lt;br /&gt;
If you use WordPress, we recommend you [https://heliohost.org/dashboard/load/ monitor your site load here].&lt;br /&gt;
&lt;br /&gt;
If at any point you become concerned about your account server usage load getting you suspended, you can add &amp;quot;deny from all&amp;quot; to the bottom of your &#039;.htaccess&#039; file to take the site offline. Once that&#039;s been done, the site should stop generating load practically instantly.}}&lt;br /&gt;
&lt;br /&gt;
== But my WordPress Site is Brand New / Has No Plugins / Gets Hardly Any Visitor Traffic ==&lt;br /&gt;
&lt;br /&gt;
WordPress causes 0 load with 0 traffic, but sites built with WordPress are prime targets for bot attacks. When bots discover your site URL address, they will keep trying to hack in, which causes load on the server resources.&lt;br /&gt;
&lt;br /&gt;
Even if your WordPress install is brand new, with no plugins, and your site gets few visitors, there is still a risk of bots spamming your site. This could cause your account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Accounts on our [[:Morty|Morty]] server will not be suspended but will be charged for account load overages&lt;br /&gt;
&lt;br /&gt;
Additionally, a lot of free themes and plugins can be backdoors for hackers, and installing them comes with risks. Once bots access your site, they will &#039;phone home&#039; which then enables hackers to change your site files, set up phishing sites, send spam from your account, etc.&lt;br /&gt;
&lt;br /&gt;
== How Much Server Load Could It Cause? ==&lt;br /&gt;
&lt;br /&gt;
WordPress was one of the apps we load tested, with the benchmark testing results posted on our [[:Common_Software_Load|Common Software Load]] page.&lt;br /&gt;
&lt;br /&gt;
Here are [https://helionet.org/index/topic/57357-solved-disconnect-addon-domain/?do=findComment&amp;amp;comment=252857 some comparison calculations] about how much demand on the server WordPress can cause.&lt;br /&gt;
&lt;br /&gt;
== How Can I Keep My Server Load Low? ==&lt;br /&gt;
&lt;br /&gt;
Our first recommendation is to switch to anything other than WordPress.&lt;br /&gt;
&lt;br /&gt;
=== WordPress Alternatives ===&lt;br /&gt;
* Some of our users have switched from WordPress to &#039;&#039;&#039;Joomla&#039;&#039;&#039; and liked it.&lt;br /&gt;
* &#039;&#039;&#039;Drupal&#039;&#039;&#039; performed well in our recent benchmark load tests.&lt;br /&gt;
* Another popular alternative is &#039;&#039;&#039;Gatsby&#039;&#039;&#039;. You can check out a guide on migrating your site [https://www.gatsbyjs.com/blog/2019-03-21-migrating-from-wordpress-to-gatsby/ here] or follow our quick [[:Gatsby|Gatsby tutorial]] to set up a basic site from scratch.&lt;br /&gt;
* For static blog generators, &#039;&#039;&#039;Publii&#039;&#039;&#039; may be an option for you. Please note that as it&#039;s local, you will need to upload every time you post. It&#039;s not for Android or iOS, and it cannot be synced unless you use a cloud syncing service for the local files. You can check out a guide on how to import data from your WordPress site into Publii [https://getpublii.com/docs/import-wordpress-into-static-html-site.html here].&lt;br /&gt;
* &#039;&#039;&#039;Jekyll&#039;&#039;&#039; is a popular static site generator. &lt;br /&gt;
* &#039;&#039;&#039;Hugo&#039;&#039;&#039; is one of the most popular open-source static site generators.&lt;br /&gt;
* &#039;&#039;&#039;Grav&#039;&#039;&#039; is an open-source flat-file CMS (Content Management System).&lt;br /&gt;
* &#039;&#039;&#039;Eleventy&#039;&#039;&#039; (11ty) offers a simple &#039;zero-config&#039; option to quickly get a site built. Since it runs on Node, which consumes a lot of memory, we recommend running the build process locally, and then deploying the static pages to your hosting account.&lt;br /&gt;
* &#039;&#039;&#039;Astro&#039;&#039;&#039; is a modern, fast, and flexible web framework. Our [[:Astro|Astro tutorial]] guides you through building and deploying a site with a dedicated blog section.&lt;br /&gt;
&lt;br /&gt;
=== How To Reduce WordPress Server Load ===&lt;br /&gt;
&lt;br /&gt;
If moving away from WordPress is not an option for you, here are other things to try:&lt;br /&gt;
* Update everything to the latest version.&lt;br /&gt;
* Disable uptime monitors.&lt;br /&gt;
* Disable logins.&lt;br /&gt;
* Disable unneeded plugins and themes.&lt;br /&gt;
* Use caching plugins to reduce the load (users have mentioned that &#039;&#039;&#039;WP Fastest Cache&#039;&#039;&#039; plugin can be useful).&lt;br /&gt;
* Use Cloudflare caching.&lt;br /&gt;
* Use Cloudflare and the &#039;&#039;&#039;Super Page Cache for Cloudflare&#039;&#039;&#039; WordPress plugin to [https://helionet.org/index/topic/57606-handling-cpu-load-spikes-or-high-load-using-cloudflare/ mitigate load spikes or other high load issues].&lt;br /&gt;
** If Super Page Cache for Cloudflare tells you to disable the options &amp;quot;Smart static files processing&amp;quot; and &amp;quot;Serve static files directly by Nginx&amp;quot; on the &amp;quot;Apache &amp;amp; Nginx Settings&amp;quot; page of your Plesk panel, you can change these settings yourself by navigating to: &#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Hosting &amp;amp; DNS &amp;gt; Apache &amp;amp; Nginx &amp;gt; Uncheck the &#039;smart static files processing box&#039; and make sure the &#039;Serve static files directly by Nginx&#039; box is also unchecked.&#039;&#039;&#039;&lt;br /&gt;
* Actively monitor your access logs and look for IPs with an unreasonably high number of hits/page views. &lt;br /&gt;
** Block any suspicious / abusive IPs by adding &amp;lt;code&amp;gt;Deny from x.x.x.x&amp;lt;/code&amp;gt; to your &#039;.htaccess&#039; file, or block them with Cloudflare if you have a custom domain.&lt;br /&gt;
** To check site stats, navigate to: &#039;&#039;&#039;Plesk &amp;gt; Statistics &amp;gt; Web Statistics &amp;gt; your domain &amp;gt; [View].&#039;&#039;&#039;&lt;br /&gt;
* Convert to a static site. &lt;br /&gt;
** Users have mentioned &#039;&#039;&#039;WP2Static&#039;&#039;&#039; as being a useful plugin that converts WordPress sites to static sites.&lt;br /&gt;
** Explore [https://jamstack.org/generators/ this list of Open Source static site generators] to find alternatives.&lt;br /&gt;
* Upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
** You can ask us to install Hestia, a free and popular control panel, on your [https://heliohost.org/vps/ VPS] for you. Hestia includes a one-click WordPress installation feature. Preview the setup steps in our [[:VPS_WordPress | Installing WordPress on a VPS running Hestia Control Panel tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Abusive IPs ==&lt;br /&gt;
&lt;br /&gt;
HelioHost needed to block the below IP addresses and IP Ranges since some of  our WordPress users were under attack from bots coming from these sources. If you use WordPress, we strongly recommend that you add the below to your own .htaccess file to proactively protect your site from IPs known to be abusive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# added by HelioHost - hacking attempt&lt;br /&gt;
Deny from 165.22.48.216&lt;br /&gt;
Deny from 52.169.95.1&lt;br /&gt;
Deny from 52.164.121.3&lt;br /&gt;
# these ranges are bots running at Digital Ocean who seems to have an abuse hosting problem&lt;br /&gt;
Deny from 68.183.176.0/20&lt;br /&gt;
Deny from 104.248.0.0/16&lt;br /&gt;
Deny from 104.131.0.0/16&lt;br /&gt;
Deny from 104.236.0.0/16&lt;br /&gt;
Deny from 165.232.0.0/16&lt;br /&gt;
Deny from 107.170.0.0/16&lt;br /&gt;
Deny from 128.199.0.0/16&lt;br /&gt;
Deny from 134.122.0.0/16&lt;br /&gt;
Deny from 134.199.128.0/17&lt;br /&gt;
Deny from 134.209.0.0/16&lt;br /&gt;
Deny from 137.184.0.0/16&lt;br /&gt;
Deny from 157.245.0.0/20&lt;br /&gt;
Deny from 152.42.191.0/24&lt;br /&gt;
Deny from 152.42.197.0/24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your site is under attack from other IPs or IP Ranges, you can [[:Contributing_to_the_Wiki | edit the Wiki]] to add more details.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Lily&amp;diff=2140</id>
		<title>Lily</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Lily&amp;diff=2140"/>
		<updated>2025-10-18T20:39:09Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* .NET */ Added .NET 9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lily ==&lt;br /&gt;
&lt;br /&gt;
Lily is a virtual server that runs Windows Server. She is mostly managed by [[:Wolstech|Wolstech]], a root admin.&lt;br /&gt;
&lt;br /&gt;
== How to Request a Lily Account ==&lt;br /&gt;
&lt;br /&gt;
To request an account on Lily, you must already have a Plesk account on Morty, Tommy, or Johnny. Then, please create a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] to request that we create an account for you on Lily.&lt;br /&gt;
&lt;br /&gt;
Please note that there is no control panel on Lily, and access is done via FTP. The eventual plan is to rebuild Lily to run Plesk as our other servers do. However there is [[:ETA|no estimated timeframe]] as to when this functionality may be implemented, since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
== .NET ==&lt;br /&gt;
&lt;br /&gt;
* .NET 1.1&lt;br /&gt;
* .NET 2.0&lt;br /&gt;
* .NET 3.0&lt;br /&gt;
* .NET 3.5&lt;br /&gt;
* .NET 4.0&lt;br /&gt;
* .NET 4.5&lt;br /&gt;
* .NET 4.6&lt;br /&gt;
* .NET 4.7&lt;br /&gt;
* .NET 5.0&lt;br /&gt;
* .NET 6.0&lt;br /&gt;
* .NET 8.0&lt;br /&gt;
* .NET 9.0&lt;br /&gt;
* .NET Core 3.1&lt;br /&gt;
* Classic ASP&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
All versions of [[:PHP|PHP]] supported have &#039;exec()&#039; enabled: &lt;br /&gt;
* PHP 5.3&lt;br /&gt;
* PHP 5.4&lt;br /&gt;
* PHP 5.5&lt;br /&gt;
* PHP 5.6&lt;br /&gt;
* PHP 7.0&lt;br /&gt;
* PHP 7.1&lt;br /&gt;
* PHP 7.2&lt;br /&gt;
* PHP 7.3&lt;br /&gt;
* PHP 7.4&lt;br /&gt;
* PHP 8.2&lt;br /&gt;
&lt;br /&gt;
== Databases ==&lt;br /&gt;
&lt;br /&gt;
* MariaDB&lt;br /&gt;
* MS SQL Server Express 2017&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=How_You_Can_Help&amp;diff=1963</id>
		<title>How You Can Help</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=How_You_Can_Help&amp;diff=1963"/>
		<updated>2025-08-18T02:12:10Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Review Us on Trustpilot */ Make the capitalization consistent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How You Can Help ==&lt;br /&gt;
&lt;br /&gt;
HelioHost provides community-powered free hosting for everyone. There are several ways you can help support us.&lt;br /&gt;
&lt;br /&gt;
== Make a Donation ==&lt;br /&gt;
&lt;br /&gt;
=== Donate via PayPal or Crypto ===&lt;br /&gt;
&lt;br /&gt;
The best way to help us keep providing free hosting is by donating at [https://heliohost.org/donate/ heliohost.org/donate]. You can donate via PayPal, Microsoft Points, Brave Creators, or the cryptocurrencies listed on the page.&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate using a Debit or Credit Card, so PayPal will act as the card payment processor, but you will not need a PayPal account. If this option is available to you, after clicking on the yellow PayPal button, you should see the &#039;Donate with Debit or Credit Card&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:donate-debit-credit-card.png]]&lt;br /&gt;
&lt;br /&gt;
=== Corporate Donation Matching ===&lt;br /&gt;
&lt;br /&gt;
A lot of employers will make a donation match to approved 501(c)(3) charities, which is what HelioHost is. So, if you donate $100 your job might match your donation and send another $100 to us. You can ask at work to see if your company has a donation matching program like this, and then search for us under &#039;Helio Networks&#039; or &#039;HelioHost&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Donate via Charityvest ===&lt;br /&gt;
&lt;br /&gt;
You can [https://www.charityvest.org/charity/helio-networks-d5b1f0df-8759-41c4-91b3-e9e75099579d donate to Helio Networks via Charityvest] and it will be fee-free, since HelioHost is registered with the PayPal Giving Fund, which is the method Charityvest uses to [https://www.charityvest.org/blog/charityvest-implements-paypal-grant-payments-to-enable-electronic-payments-to-charities enable electronic payments to charities].&lt;br /&gt;
&lt;br /&gt;
=== Donate via Facebook  ===&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate on the [https://www.facebook.com/HelioHost.org HelioHost Facebook page].&lt;br /&gt;
&lt;br /&gt;
=== Donate via Brave browser ===&lt;br /&gt;
&lt;br /&gt;
HelioHost is a Verified Creator in the Brave Creators program. This means that if you use the Brave web browser, you can now donate to us by clicking the triangle shape while viewing [https://heliohost.org/ heliohost.org] or [https://helionet.org/ helionet.org] or Plesk, and then clicking Send Contribution. If you have auto-contribute enabled, you can donate to us simply by using our website and forum as you normally would.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not familiar with the Brave browser, check out [https://privacytests.org/ PrivacyTests.org]. Brave is based on Chromium just like Chrome and Edge, but has a built in ad-blocker and annoyance blocker that is better than most extensions you can install on any of the other browsers. You can even get paid to visit websites if you enable the option in the settings and set up a crypto wallet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ADS WERE DISABLED Jun 4 2025 &lt;br /&gt;
=== Turn Brave Ad-Blocker Off ===&lt;br /&gt;
Using Brave&#039;s ad-blocker is a great way to support us with donations instead of viewing ads. However, as a non-profit fully funded by advertising revenue and donations, we appreciate you viewing our ads to help us stay in business. To double your donations from Brave, you can disable the Brave shields on our pages to view our ads, while also auto-contributing.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Donate via Edge browser ===&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate using the Edge browser by visiting [https://heliohost.org/ heliohost.org] and clicking the &#039;Donate&#039; button. &lt;br /&gt;
&lt;br /&gt;
=== Donate Cash in Edge ===&lt;br /&gt;
&lt;br /&gt;
You can choose to donate cash via Benevity.&lt;br /&gt;
&lt;br /&gt;
[[File:edge-donate-cash.png]]&lt;br /&gt;
&lt;br /&gt;
=== Donate Microsoft Rewards Points in Edge ===&lt;br /&gt;
&lt;br /&gt;
You can choose to donate using Microsoft Rewards points via Benevity.&lt;br /&gt;
&lt;br /&gt;
{{Danger|Please note that:&lt;br /&gt;
* Microsoft Rewards points cannot be used for Morty or Tommy accounts or for the purchase of paid services.&lt;br /&gt;
** Donations of Microsoft Rewards points [https://helionet.org/index/topic/63324-hh830443-donations-via-bing/#findComment-285484 cannot be traced back to the individual who made them]. Microsoft combines everything and sends it to us without including any information about the dates of individual donations or details about the people who made them.&lt;br /&gt;
** Donations of Microsoft Rewards points [https://helionet.org/index/topic/62006-hh561624-can-i-donate-via-microsoft-rewards/#findComment-280045 can take between at least 2 months] and [https://helionet.org/index/topic/63324-hh830443-donations-via-bing/#findComment-285484 sometimes even up to 6 months] to be received.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ADS WERE DISABLED Jun 4 2025 &lt;br /&gt;
== Allow Ads on Our Sites ==&lt;br /&gt;
If you don&#039;t view our ads, we don&#039;t earn any ad revenue from your visits to our site. It&#039;s free to allow our ads, and we promise they&#039;re not too annoying. Who knows? You might even see an ad for something amazing that you want to check out. Make sure to add our sites below to your to your ad-blocker &amp;quot;Allow List&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
* [https://heliohost.org/ heliohost.org]&lt;br /&gt;
* [https://helionet.org/ helionet.org]&lt;br /&gt;
* [https://wiki.helionet.org/ wiki.helionet.org]&lt;br /&gt;
* [https://morty.heliohost.org/ morty.heliohost.org]&lt;br /&gt;
* [https://tommy.heliohost.org/ tommy.heliohost.org]&lt;br /&gt;
* [https://johnny.heliohost.org/ johnny.heliohost.org]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== Use Our Affiliate Links ==&lt;br /&gt;
&lt;br /&gt;
HelioHost has an affiliate agreement with [https://heliohost.org/partners/namecheap Namecheap], so if you&#039;re in the market for a new domain we highly recommend purchasing it from them. &lt;br /&gt;
&lt;br /&gt;
Using the affiliate banner below to sign up and register your domain will not cost you anything extra, but it helps HelioHost earn a bit of commission for the referral.&lt;br /&gt;
&lt;br /&gt;
[[File:Namecheap.png|link=https://heliohost.org/partners/namecheap]]&lt;br /&gt;
&lt;br /&gt;
{{Info|After checking if your preferred domain name is available, sometimes there will be a &#039;&#039;&#039;Promo Code&#039;&#039;&#039; to get a lower price for the first year.}}&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve purchased a domain from Namecheap, set the nameservers to &#039;&#039;&#039;ns1.heliohost.org&#039;&#039;&#039; and &#039;&#039;&#039;ns2.heliohost.org&#039;&#039;&#039; and we can host the website on your brand new domain for you. For more details, visit our [[:Namecheap_DNS_Records|Namecheap DNS Record Management]] guide.&lt;br /&gt;
&lt;br /&gt;
== Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
=== Refer Your Friends and Family ===&lt;br /&gt;
&lt;br /&gt;
As a small non-profit funded by donations, we don&#039;t have a huge budget to afford paid advertising, and rely on word of mouth recommendations so we can find more users and continue to grow. If you know someone who is looking for an affordable VPS, inexpensive or free web hosting, please refer us! &#039;&#039;&#039;Note:&#039;&#039;&#039; If you share an internet connection or computer with the friend or family member that you refer to us, please [https://helionet.org/index/forum/45-customer-service/?do=add contact us] before they sign up to let us know. Users are only allowed 1 account on the Tommy and Johnny servers, and letting us know ahead of time of the referral enables us to adjust the Duplicate Account Detection System. &lt;br /&gt;
&lt;br /&gt;
=== Put our Banner on your Site ===&lt;br /&gt;
&lt;br /&gt;
You can find some user-contributed HelioHost banner graphics to use in [https://helionet.org/index/topic/28401-put-our-banner-on-your-site/ this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
=== Put our Badge on your Site ===&lt;br /&gt;
&lt;br /&gt;
Find a user-contributed configurable HelioHost badge to add to your site in [https://helionet.org/index/topic/31107-badge/ this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
== Recommend Us ==&lt;br /&gt;
&lt;br /&gt;
=== Recommend us on AlternativeTo ===&lt;br /&gt;
&lt;br /&gt;
If you can think of a competitor to what we offer, find them on [https://alternativeto.net/ AlternativeTo.net] and make sure HelioHost is listed on their page as an alternative option.&lt;br /&gt;
&lt;br /&gt;
To give HelioHost an upvote as an alternative to our competitors, use the links in [https://helionet.org/index/topic/28394-upvote-heliohost-on-alternativetonet/#comment-129850 this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
=== Mention us on Quora ===&lt;br /&gt;
&lt;br /&gt;
Answer a question with a description of HelioHost on [https://www.quora.com/search?q=Web%20Hosting%20Providers Quora.com]. (Must be logged in to your Quora account to view this link.)&lt;br /&gt;
&lt;br /&gt;
== Review Us ==&lt;br /&gt;
&lt;br /&gt;
Write a review about HelioHost at the sites below:&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Trustpilot ===&lt;br /&gt;
&lt;br /&gt;
You may randomly receive an email with a link to review us on Trustpilot. If you receive one of these special links please click the link in the email, and write a 5 star verified review.&lt;br /&gt;
&lt;br /&gt;
{{Danger|Trustpilot deletes most 5 star reviews that don&#039;t use the email link, but leaves up any 1 or 2 star reviews that are nonsense or even say in the review that they didn&#039;t use our service.}}&lt;br /&gt;
&lt;br /&gt;
We recommend waiting for the email link to make sure your review doesn&#039;t get deleted. While you wait for your verified review link, please let us know how much you like HelioHost because we love to hear about it.&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Sitejabber===&lt;br /&gt;
&lt;br /&gt;
* [https://www.sitejabber.com/reviews/heliohost.org Sitejabber]&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Free-Webhosts ===&lt;br /&gt;
&lt;br /&gt;
The details about what HelioHost offers are a little out of date on this site, since a lot has changed since 2018. HelioHost has doubled the storage offered to new accounts, for example. However new users still find us from reviews, so feel free to share your thoughts!&lt;br /&gt;
&lt;br /&gt;
* [http://www.free-webhosts.com/reviews/add-review.php?hostname=HelioHost Free-Webhosts.com]&lt;br /&gt;
&lt;br /&gt;
=== Review Us on WHTop ===&lt;br /&gt;
&lt;br /&gt;
The details about what HelioHost offers are a little out of date on this site, since a lot has changed since 2020. However new users still find us from reviews, so feel free to share your thoughts!&lt;br /&gt;
&lt;br /&gt;
* [http://www.whtop.com/review/heliohost.org#reviews-open WHTop]&lt;br /&gt;
&lt;br /&gt;
== Social Media ==&lt;br /&gt;
&lt;br /&gt;
=== Post about us on Facebook ===&lt;br /&gt;
&lt;br /&gt;
Let your Facebook friends know about us by posting on your timeline using [https://www.facebook.com/share.php?u=http://www.heliohost.org/ this link].&lt;br /&gt;
&lt;br /&gt;
=== Mention us on X (formerly Twitter) ===&lt;br /&gt;
&lt;br /&gt;
Let your followers know you&#039;re hosting your website with us by using &#039;@HelioHost&#039; in your tweet. You can use [https://twitter.com/intent/tweet?text=My%20website%20is%20on%20%40heliohost%20the%20community%20powered%20free%20web%20host%20for%20everyone.%20Get%20your%20own%20free%20website%20at%20http%3A%2F%2Fheliohost.org%2F this link].&lt;br /&gt;
&lt;br /&gt;
=== Subscribe to our YouTube channel ===&lt;br /&gt;
&lt;br /&gt;
We regularly post video guides on [https://www.youtube.com/@HelioHostYT YouTube] since some users find it much easier to follow a video guide than a written tutorial.&lt;br /&gt;
&lt;br /&gt;
Subscribe to our channel and like our videos to help us continue to find more users and continue to grow. Please let us know if there is a specific topic that you think would be good for our next video.&lt;br /&gt;
&lt;br /&gt;
== Join the Community ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is community powered. We are active on the platforms below, and welcoming to new users. Please ensure you follow our simple rules. &lt;br /&gt;
&lt;br /&gt;
* [https://helionet.org/index/ HelioNet forum]&lt;br /&gt;
** Forum users must follow [[:Terms|these terms]]&lt;br /&gt;
&lt;br /&gt;
* [https://discord.com/invite/y8QJfXg HelioHost Discord channel]&lt;br /&gt;
** Channel users must follow [https://discord.com/channels/398197622168616962/419629456794058752/1101198173386571816 these rules]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=How_You_Can_Help&amp;diff=1962</id>
		<title>How You Can Help</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=How_You_Can_Help&amp;diff=1962"/>
		<updated>2025-08-18T02:11:35Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Review Us on Trustpilot */ Removed link to TrustPilot page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How You Can Help ==&lt;br /&gt;
&lt;br /&gt;
HelioHost provides community-powered free hosting for everyone. There are several ways you can help support us.&lt;br /&gt;
&lt;br /&gt;
== Make a Donation ==&lt;br /&gt;
&lt;br /&gt;
=== Donate via PayPal or Crypto ===&lt;br /&gt;
&lt;br /&gt;
The best way to help us keep providing free hosting is by donating at [https://heliohost.org/donate/ heliohost.org/donate]. You can donate via PayPal, Microsoft Points, Brave Creators, or the cryptocurrencies listed on the page.&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate using a Debit or Credit Card, so PayPal will act as the card payment processor, but you will not need a PayPal account. If this option is available to you, after clicking on the yellow PayPal button, you should see the &#039;Donate with Debit or Credit Card&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:donate-debit-credit-card.png]]&lt;br /&gt;
&lt;br /&gt;
=== Corporate Donation Matching ===&lt;br /&gt;
&lt;br /&gt;
A lot of employers will make a donation match to approved 501(c)(3) charities, which is what HelioHost is. So, if you donate $100 your job might match your donation and send another $100 to us. You can ask at work to see if your company has a donation matching program like this, and then search for us under &#039;Helio Networks&#039; or &#039;HelioHost&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Donate via Charityvest ===&lt;br /&gt;
&lt;br /&gt;
You can [https://www.charityvest.org/charity/helio-networks-d5b1f0df-8759-41c4-91b3-e9e75099579d donate to Helio Networks via Charityvest] and it will be fee-free, since HelioHost is registered with the PayPal Giving Fund, which is the method Charityvest uses to [https://www.charityvest.org/blog/charityvest-implements-paypal-grant-payments-to-enable-electronic-payments-to-charities enable electronic payments to charities].&lt;br /&gt;
&lt;br /&gt;
=== Donate via Facebook  ===&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate on the [https://www.facebook.com/HelioHost.org HelioHost Facebook page].&lt;br /&gt;
&lt;br /&gt;
=== Donate via Brave browser ===&lt;br /&gt;
&lt;br /&gt;
HelioHost is a Verified Creator in the Brave Creators program. This means that if you use the Brave web browser, you can now donate to us by clicking the triangle shape while viewing [https://heliohost.org/ heliohost.org] or [https://helionet.org/ helionet.org] or Plesk, and then clicking Send Contribution. If you have auto-contribute enabled, you can donate to us simply by using our website and forum as you normally would.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not familiar with the Brave browser, check out [https://privacytests.org/ PrivacyTests.org]. Brave is based on Chromium just like Chrome and Edge, but has a built in ad-blocker and annoyance blocker that is better than most extensions you can install on any of the other browsers. You can even get paid to visit websites if you enable the option in the settings and set up a crypto wallet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ADS WERE DISABLED Jun 4 2025 &lt;br /&gt;
=== Turn Brave Ad-Blocker Off ===&lt;br /&gt;
Using Brave&#039;s ad-blocker is a great way to support us with donations instead of viewing ads. However, as a non-profit fully funded by advertising revenue and donations, we appreciate you viewing our ads to help us stay in business. To double your donations from Brave, you can disable the Brave shields on our pages to view our ads, while also auto-contributing.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Donate via Edge browser ===&lt;br /&gt;
&lt;br /&gt;
In some countries, you can donate using the Edge browser by visiting [https://heliohost.org/ heliohost.org] and clicking the &#039;Donate&#039; button. &lt;br /&gt;
&lt;br /&gt;
=== Donate Cash in Edge ===&lt;br /&gt;
&lt;br /&gt;
You can choose to donate cash via Benevity.&lt;br /&gt;
&lt;br /&gt;
[[File:edge-donate-cash.png]]&lt;br /&gt;
&lt;br /&gt;
=== Donate Microsoft Rewards Points in Edge ===&lt;br /&gt;
&lt;br /&gt;
You can choose to donate using Microsoft Rewards points via Benevity.&lt;br /&gt;
&lt;br /&gt;
{{Danger|Please note that:&lt;br /&gt;
* Microsoft Rewards points cannot be used for Morty or Tommy accounts or for the purchase of paid services.&lt;br /&gt;
** Donations of Microsoft Rewards points [https://helionet.org/index/topic/63324-hh830443-donations-via-bing/#findComment-285484 cannot be traced back to the individual who made them]. Microsoft combines everything and sends it to us without including any information about the dates of individual donations or details about the people who made them.&lt;br /&gt;
** Donations of Microsoft Rewards points [https://helionet.org/index/topic/62006-hh561624-can-i-donate-via-microsoft-rewards/#findComment-280045 can take between at least 2 months] and [https://helionet.org/index/topic/63324-hh830443-donations-via-bing/#findComment-285484 sometimes even up to 6 months] to be received.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ADS WERE DISABLED Jun 4 2025 &lt;br /&gt;
== Allow Ads on Our Sites ==&lt;br /&gt;
If you don&#039;t view our ads, we don&#039;t earn any ad revenue from your visits to our site. It&#039;s free to allow our ads, and we promise they&#039;re not too annoying. Who knows? You might even see an ad for something amazing that you want to check out. Make sure to add our sites below to your to your ad-blocker &amp;quot;Allow List&amp;quot;: &lt;br /&gt;
&lt;br /&gt;
* [https://heliohost.org/ heliohost.org]&lt;br /&gt;
* [https://helionet.org/ helionet.org]&lt;br /&gt;
* [https://wiki.helionet.org/ wiki.helionet.org]&lt;br /&gt;
* [https://morty.heliohost.org/ morty.heliohost.org]&lt;br /&gt;
* [https://tommy.heliohost.org/ tommy.heliohost.org]&lt;br /&gt;
* [https://johnny.heliohost.org/ johnny.heliohost.org]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== Use Our Affiliate Links ==&lt;br /&gt;
&lt;br /&gt;
HelioHost has an affiliate agreement with [https://heliohost.org/partners/namecheap Namecheap], so if you&#039;re in the market for a new domain we highly recommend purchasing it from them. &lt;br /&gt;
&lt;br /&gt;
Using the affiliate banner below to sign up and register your domain will not cost you anything extra, but it helps HelioHost earn a bit of commission for the referral.&lt;br /&gt;
&lt;br /&gt;
[[File:Namecheap.png|link=https://heliohost.org/partners/namecheap]]&lt;br /&gt;
&lt;br /&gt;
{{Info|After checking if your preferred domain name is available, sometimes there will be a &#039;&#039;&#039;Promo Code&#039;&#039;&#039; to get a lower price for the first year.}}&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve purchased a domain from Namecheap, set the nameservers to &#039;&#039;&#039;ns1.heliohost.org&#039;&#039;&#039; and &#039;&#039;&#039;ns2.heliohost.org&#039;&#039;&#039; and we can host the website on your brand new domain for you. For more details, visit our [[:Namecheap_DNS_Records|Namecheap DNS Record Management]] guide.&lt;br /&gt;
&lt;br /&gt;
== Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
=== Refer Your Friends and Family ===&lt;br /&gt;
&lt;br /&gt;
As a small non-profit funded by donations, we don&#039;t have a huge budget to afford paid advertising, and rely on word of mouth recommendations so we can find more users and continue to grow. If you know someone who is looking for an affordable VPS, inexpensive or free web hosting, please refer us! &#039;&#039;&#039;Note:&#039;&#039;&#039; If you share an internet connection or computer with the friend or family member that you refer to us, please [https://helionet.org/index/forum/45-customer-service/?do=add contact us] before they sign up to let us know. Users are only allowed 1 account on the Tommy and Johnny servers, and letting us know ahead of time of the referral enables us to adjust the Duplicate Account Detection System. &lt;br /&gt;
&lt;br /&gt;
=== Put our Banner on your Site ===&lt;br /&gt;
&lt;br /&gt;
You can find some user-contributed HelioHost banner graphics to use in [https://helionet.org/index/topic/28401-put-our-banner-on-your-site/ this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
=== Put our Badge on your Site ===&lt;br /&gt;
&lt;br /&gt;
Find a user-contributed configurable HelioHost badge to add to your site in [https://helionet.org/index/topic/31107-badge/ this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
== Recommend Us ==&lt;br /&gt;
&lt;br /&gt;
=== Recommend us on AlternativeTo ===&lt;br /&gt;
&lt;br /&gt;
If you can think of a competitor to what we offer, find them on [https://alternativeto.net/ AlternativeTo.net] and make sure HelioHost is listed on their page as an alternative option.&lt;br /&gt;
&lt;br /&gt;
To give HelioHost an upvote as an alternative to our competitors, use the links in [https://helionet.org/index/topic/28394-upvote-heliohost-on-alternativetonet/#comment-129850 this HelioNet forum thread].&lt;br /&gt;
&lt;br /&gt;
=== Mention us on Quora ===&lt;br /&gt;
&lt;br /&gt;
Answer a question with a description of HelioHost on [https://www.quora.com/search?q=Web%20Hosting%20Providers Quora.com]. (Must be logged in to your Quora account to view this link.)&lt;br /&gt;
&lt;br /&gt;
== Review Us ==&lt;br /&gt;
&lt;br /&gt;
Write a review about HelioHost at the sites below:&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Trustpilot ===&lt;br /&gt;
&lt;br /&gt;
You may randomly receive an email with a link to review us on TrustPilot. If you receive one of these special links please click the link in the email, and write a 5 star verified review.&lt;br /&gt;
&lt;br /&gt;
{{Danger|TrustPilot deletes most 5 star reviews that don&#039;t use the email link, but leaves up any 1 or 2 star reviews that are nonsense or even say in the review that they didn&#039;t use our service.}}&lt;br /&gt;
&lt;br /&gt;
We recommend waiting for the email link to make sure your review doesn&#039;t get deleted. While you wait for your verified review link, please let us know how much you like HelioHost because we love to hear about it.&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Sitejabber===&lt;br /&gt;
&lt;br /&gt;
* [https://www.sitejabber.com/reviews/heliohost.org Sitejabber]&lt;br /&gt;
&lt;br /&gt;
=== Review Us on Free-Webhosts ===&lt;br /&gt;
&lt;br /&gt;
The details about what HelioHost offers are a little out of date on this site, since a lot has changed since 2018. HelioHost has doubled the storage offered to new accounts, for example. However new users still find us from reviews, so feel free to share your thoughts!&lt;br /&gt;
&lt;br /&gt;
* [http://www.free-webhosts.com/reviews/add-review.php?hostname=HelioHost Free-Webhosts.com]&lt;br /&gt;
&lt;br /&gt;
=== Review Us on WHTop ===&lt;br /&gt;
&lt;br /&gt;
The details about what HelioHost offers are a little out of date on this site, since a lot has changed since 2020. However new users still find us from reviews, so feel free to share your thoughts!&lt;br /&gt;
&lt;br /&gt;
* [http://www.whtop.com/review/heliohost.org#reviews-open WHTop]&lt;br /&gt;
&lt;br /&gt;
== Social Media ==&lt;br /&gt;
&lt;br /&gt;
=== Post about us on Facebook ===&lt;br /&gt;
&lt;br /&gt;
Let your Facebook friends know about us by posting on your timeline using [https://www.facebook.com/share.php?u=http://www.heliohost.org/ this link].&lt;br /&gt;
&lt;br /&gt;
=== Mention us on X (formerly Twitter) ===&lt;br /&gt;
&lt;br /&gt;
Let your followers know you&#039;re hosting your website with us by using &#039;@HelioHost&#039; in your tweet. You can use [https://twitter.com/intent/tweet?text=My%20website%20is%20on%20%40heliohost%20the%20community%20powered%20free%20web%20host%20for%20everyone.%20Get%20your%20own%20free%20website%20at%20http%3A%2F%2Fheliohost.org%2F this link].&lt;br /&gt;
&lt;br /&gt;
=== Subscribe to our YouTube channel ===&lt;br /&gt;
&lt;br /&gt;
We regularly post video guides on [https://www.youtube.com/@HelioHostYT YouTube] since some users find it much easier to follow a video guide than a written tutorial.&lt;br /&gt;
&lt;br /&gt;
Subscribe to our channel and like our videos to help us continue to find more users and continue to grow. Please let us know if there is a specific topic that you think would be good for our next video.&lt;br /&gt;
&lt;br /&gt;
== Join the Community ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is community powered. We are active on the platforms below, and welcoming to new users. Please ensure you follow our simple rules. &lt;br /&gt;
&lt;br /&gt;
* [https://helionet.org/index/ HelioNet forum]&lt;br /&gt;
** Forum users must follow [[:Terms|these terms]]&lt;br /&gt;
&lt;br /&gt;
* [https://discord.com/invite/y8QJfXg HelioHost Discord channel]&lt;br /&gt;
** Channel users must follow [https://discord.com/channels/398197622168616962/419629456794058752/1101198173386571816 these rules]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Configuring_Environment&amp;diff=1933</id>
		<title>Configuring Environment</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Configuring_Environment&amp;diff=1933"/>
		<updated>2025-07-28T22:55:05Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Python */ .htaccess was missing a c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
== Python ==&lt;br /&gt;
For Python, Flask, and Django, place your environment variables in a &amp;quot;.env&amp;quot; file located in your app&#039;s root directory. This is the same directory that contains your &amp;quot;.htaccess&amp;quot; file. The web server will restrict remote access to this file.&lt;br /&gt;
&lt;br /&gt;
This file should be a list of key/value pairs similar to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DEV_ENV=development&lt;br /&gt;
SECRET_API_KEY=***my_secret_key***&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Info|You can add the following code to your &amp;quot;.htaccess&amp;quot; file as an extra explicit instruction for Apache to restrict access}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#hide .env files from http access&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.env&amp;quot;&amp;gt;&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Deny from all&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessing the variables ===&lt;br /&gt;
==== Python and Flask ====&lt;br /&gt;
To access your environment variables from python you will nee to load them first using the &amp;lt;code&amp;gt;dotenv&amp;lt;/code&amp;gt; package and the operating system environment with &amp;lt;code&amp;gt;os&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
from os import environ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to give load_dotenv the path to your &amp;quot;.env&amp;quot; file and then access the variables.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#replace MY_USER_ID and MY_APP_DIR with your account root and app directory&lt;br /&gt;
load_dotenv(&amp;quot;/home/MY_USER_ID.helioho.st/MY_APP_DIR/.env&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
my_dev_environment = os.environ.get(&amp;quot;DEV_ENV&amp;quot;) # &amp;quot;development&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1923</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1923"/>
		<updated>2025-07-16T16:18:15Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to [https://heliohost.org/dashboard/move/ upgrade your hosting plan].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Minimum Restart !! Maximum Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.08 minutes || 1.18 minutes || 13.67 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 3.64 minutes || 0.99 minutes || 6.65 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 9.87 seconds || 4.45 seconds || 12.52 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1922</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1922"/>
		<updated>2025-07-16T16:18:03Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to [https://heliohost.org/dashboard/move/ upgrade your hosting plan].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Minimum Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.08 minutes || 1.18 minutes || 13.67 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 3.64 minutes || 0.99 minutes || 6.65 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 9.87 seconds || 4.45 seconds || 12.52 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1921</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1921"/>
		<updated>2025-07-16T16:17:40Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */ Updated restart times&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to [https://heliohost.org/dashboard/move/ upgrade your hosting plan].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.08 minutes || 1.18 minutes || 13.67 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 3.64 minutes || 0.99 minutes || 6.65 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 9.87 seconds || 4.45 seconds || 12.52 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Terms&amp;diff=1842</id>
		<title>Terms</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Terms&amp;diff=1842"/>
		<updated>2025-06-19T23:12:06Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Terms of Service */ Removed Syria&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Terms of Service ==&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following Terms of Service as well as the [[:#DISCLAIMER|DISCLAIMER]] presented below. If you do not agree to these Terms, you may not use HelioHost. Users who already have an account must [https://heliohost.org/dashboard/delete/ delete their account] if they no longer agree to the Terms.&lt;br /&gt;
&lt;br /&gt;
By signing up with HelioHost for any service, you agree to the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong style=&amp;quot;color: #ff4d4d; font-size: 120%;&amp;quot;&amp;gt;Each person is allowed to have a maximum of one account between Tommy and Johnny. You may not maintain someone else&#039;s account on their behalf. &amp;lt;/strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: 120%;&amp;quot;&amp;gt;Exceptions to this policy can be requested by contacting support. Approval of such requests is not guaranteed. This policy does not apply to [https://heliohost.org/morty/ Morty] or [https://heliohost.org/vps/ VPS accounts].&amp;lt;/span&amp;gt;&lt;br /&gt;
* You must be at least 13 years old to use HelioHost.&lt;br /&gt;
* Your site will contain no content illegal under US law.&lt;br /&gt;
* No phishing. Your site will not collect or attempt to collect personal information by deception.&lt;br /&gt;
* No cryptocurrency mining.&lt;br /&gt;
* Your website will not offer banking, investment, credit/loans, or similar financial services, as our data center does not meet PCI DSS compliance or ISO/IEC 27001 certification.&lt;br /&gt;
* Proxies are not permitted on Plesk plans. Users wishing to host a proxy are encouraged to [https://heliohost.org/vps/ purchase a VPS].&lt;br /&gt;
* You may not infringe on any copyrights through your site.&lt;br /&gt;
* No IPTV websites. You will not host a streaming video website that offers access to television or movie streams, regardless of the content on offer.&lt;br /&gt;
* Your site will not be of a pornographic nature and will refrain from providing pictures and/or photographs of nude men and women.&lt;br /&gt;
* Your site will not email, personal message, instant message, or communicate any kind of &amp;quot;spam,&amp;quot; or unsolicited bulk advertising of any kind.&lt;br /&gt;
* Your site will not offer any form of social media &amp;quot;marketing&amp;quot; service, including but not limited to services that provide &amp;quot;Facebook Likes&amp;quot;, &amp;quot;Instagram Followers&amp;quot;, or &amp;quot;X Followers&amp;quot;. Your account will not store or operate scripts required to provide such services (e.g. &amp;quot;like bots&amp;quot;, &amp;quot;follower bots&amp;quot;, &amp;quot;smm panels&amp;quot;, &amp;quot;sosmed panels&amp;quot;).&lt;br /&gt;
* Your site will not offer any service that purports to modify or add game content or credits to third-party online game accounts, or that is designed to interrupt, disable, cause a ban from, or otherwise prevent the normal operation of, a third party online game service or account.&lt;br /&gt;
* Everything displayed on your site will be your property. HelioHost assumes no responsibility for any content displayed by customers of our services.&lt;br /&gt;
* HelioHost is based in the USA. Federal Regulations prohibit us from accepting donations, providing free services, or providing paid services to anyone in Iran, Cuba, or North Korea.&lt;br /&gt;
* You will not register or maintain an account using a disposable email address.&lt;br /&gt;
* VPS customers only: Your VPS must respond to ICMP pings. This is required by our ISP.&lt;br /&gt;
* Refunds are provided pursuant to our [https://heliohost.org/refunds Refund Policy].&lt;br /&gt;
* You agree to not hold HelioHost liable for any loss of data, content, revenues, relationships, or traffic that occurs as a result of a systems failure or outage. You understand that HelioHost services are provided &#039;&#039;&#039;AS-IS and that HelioHost does not guarantee service availability&#039;&#039;&#039;. Services are provided in accordance with our [[#Disclaimer|Service Disclaimer]].&lt;br /&gt;
* We reserve the right to change the Terms of Service at any time. An announcement will be made to you via email and our normal [https://helionet.org/index/forum/1-news/ News channels] when we make such changes. If you disagree with the changes, you can decline them by [https://heliohost.org/dashboard/delete/ deleting your account].&lt;br /&gt;
* We reserve the right to delete, change, or edit your account or your content with or without prior notification, including, but not limited to cases arising from abuse of these Terms.&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&lt;br /&gt;
HelioHost hosting service is provided &#039;AS-IS&#039; with NO WARRANTY of any kind, neither express nor implied, not even the implied warranties of merchantability, non-infringement, and fitness for a particular purpose. Furthermore, HelioHost makes no guarantees as to the proper operation of the service, availability of the service, or the safety or security of the service.&lt;br /&gt;
&lt;br /&gt;
HelioHost is NOT LIABLE FOR DATA LOSS, equipment malfunction or failure, or other damages (physical, digital, monetary, or otherwise) caused by the use of this service, the improper operation of the service due to abuse, misuse, or malfunction of any kind, or the quality of the service&#039;s performance (or its failure to perform). Use the service at your own risk.&lt;br /&gt;
&lt;br /&gt;
== HelioNet Terms ==&lt;br /&gt;
&lt;br /&gt;
Users on [[:HelioNet|HelioNet]] must abide by the following rules:&lt;br /&gt;
&lt;br /&gt;
* [https://www.helionet.org/index/topic/4-the-official-rules-guide/ Official Rules Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/2-the-official-spam-guide/ Official Spam Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/3-the-official-enforcement-guide/ Official Enforcement Guide]&lt;br /&gt;
* [https://www.helionet.org/index/topic/1544-the-official-etiquette-guide/ Official Etiquette Guide]&lt;br /&gt;
&lt;br /&gt;
Failure to abide by these terms may result in suspension of ALL HelioNet affiliated accounts, including accounts related to HelioHost, to be determined at HelioNet&#039;s sole discretion.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=WordPress&amp;diff=1841</id>
		<title>WordPress</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=WordPress&amp;diff=1841"/>
		<updated>2025-06-19T17:13:02Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Abusive IPs */ Added another Digital Ocean range&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WordPress ==&lt;br /&gt;
&lt;br /&gt;
WordPress is a popular content management system (CMS) that allows users to easily create and manage websites.&lt;br /&gt;
&lt;br /&gt;
{{Caution|WordPress is known to require a lot of server resources, as it&#039;s not very well optimized. Also, the more pages or plugins a WordPress site has, the bigger the site load will be.&lt;br /&gt;
&lt;br /&gt;
Exceeding the account load limits will cause your user account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Accounts on our [[:Morty|Morty]] server will not be suspended but will be charged for account load overages.&lt;br /&gt;
&lt;br /&gt;
If you use WordPress, we recommend you [https://heliohost.org/dashboard/load/ monitor your site load here].&lt;br /&gt;
&lt;br /&gt;
If at any point you become concerned about your account server usage load getting you suspended, you can add &amp;quot;deny from all&amp;quot; to the bottom of your &#039;.htaccess&#039; file to take the site offline. Once that&#039;s been done, the site should stop generating load practically instantly.}}&lt;br /&gt;
&lt;br /&gt;
== But my WordPress Site is Brand New / Has No Plugins / Gets Hardly Any Visitor Traffic ==&lt;br /&gt;
&lt;br /&gt;
WordPress causes 0 load with 0 traffic, but sites built with WordPress are prime targets for bot attacks. When bots discover your site URL address, they will keep trying to hack in, which causes load on the server resources.&lt;br /&gt;
&lt;br /&gt;
Even if your WordPress install is brand new, with no plugins, and your site gets few visitors, there is still a risk of bots spamming your site. This could cause your account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Accounts on our [[:Morty|Morty]] server will not be suspended but will be charged for account load overages&lt;br /&gt;
&lt;br /&gt;
Additionally, a lot of free themes and plugins can be backdoors for hackers, and installing them comes with risks. Once bots access your site, they will &#039;phone home&#039; which then enables hackers to change your site files, set up phishing sites, send spam from your account, etc.&lt;br /&gt;
&lt;br /&gt;
== How Much Server Load Could It Cause? ==&lt;br /&gt;
&lt;br /&gt;
WordPress was one of the apps we load tested, with the benchmark testing results posted on our [[:Common_Software_Load|Common Software Load]] page.&lt;br /&gt;
&lt;br /&gt;
Here are [https://helionet.org/index/topic/57357-solved-disconnect-addon-domain/?do=findComment&amp;amp;comment=252857 some comparison calculations] about how much demand on the server WordPress can cause.&lt;br /&gt;
&lt;br /&gt;
== How Can I Keep My Server Load Low? ==&lt;br /&gt;
&lt;br /&gt;
Our first recommendation is to switch to anything other than WordPress.&lt;br /&gt;
&lt;br /&gt;
=== WordPress Alternatives ===&lt;br /&gt;
* Some of our users have switched from WordPress to &#039;&#039;&#039;Joomla&#039;&#039;&#039; and liked it.&lt;br /&gt;
* Another popular alternative is &#039;&#039;&#039;Gatsby&#039;&#039;&#039;. You can check out a guide on migrating your site [https://www.gatsbyjs.com/blog/2019-03-21-migrating-from-wordpress-to-gatsby/ here] or follow our quick [[:Gatsby|Gatsby tutorial]] to set up a basic site from scratch.&lt;br /&gt;
* For static blog generators, &#039;&#039;&#039;Publii&#039;&#039;&#039; may be an option for you. Please note that as it&#039;s local, you will need to upload every time you post. It&#039;s not for Android or iOS, and it cannot be synced unless you use a cloud syncing service for the local files. You can check out a guide on how to import data from your WordPress site into Publii [https://getpublii.com/docs/import-wordpress-into-static-html-site.html here].&lt;br /&gt;
* &#039;&#039;&#039;Jekyll&#039;&#039;&#039; is a popular static site generator. &lt;br /&gt;
* &#039;&#039;&#039;Hugo&#039;&#039;&#039; is one of the most popular open-source static site generators.&lt;br /&gt;
* &#039;&#039;&#039;Grav&#039;&#039;&#039; is an open-source flat-file CMS (Content Management System).&lt;br /&gt;
* &#039;&#039;&#039;Eleventy&#039;&#039;&#039; (11ty) offers a simple &#039;zero-config&#039; option to quickly get a site built. Since it runs on Node, which consumes a lot of memory, we recommend running the build process locally, and then deploying the static pages to your hosting account.&lt;br /&gt;
* &#039;&#039;&#039;Astro&#039;&#039;&#039; is a modern, fast, and flexible web framework. Our [[:Astro|Astro tutorial]] guides you through building and deploying a site with a dedicated blog section.&lt;br /&gt;
&lt;br /&gt;
=== How To Reduce WordPress Server Load ===&lt;br /&gt;
&lt;br /&gt;
If moving away from WordPress is not an option for you, here are other things to try:&lt;br /&gt;
* Update everything to the latest version.&lt;br /&gt;
* Disable uptime monitors.&lt;br /&gt;
* Disable logins.&lt;br /&gt;
* Disable unneeded plugins and themes.&lt;br /&gt;
* Use caching plugins to reduce the load (users have mentioned that &#039;&#039;&#039;WP Fastest Cache&#039;&#039;&#039; plugin can be useful).&lt;br /&gt;
* Use Cloudflare caching.&lt;br /&gt;
* Use Cloudflare and the &#039;&#039;&#039;Super Page Cache for Cloudflare&#039;&#039;&#039; WordPress plugin to [https://helionet.org/index/topic/57606-handling-cpu-load-spikes-or-high-load-using-cloudflare/ mitigate load spikes or other high load issues].&lt;br /&gt;
** If Super Page Cache for Cloudflare tells you to disable the options &amp;quot;Smart static files processing&amp;quot; and &amp;quot;Serve static files directly by Nginx&amp;quot; on the &amp;quot;Apache &amp;amp; Nginx Settings&amp;quot; page of your Plesk panel, you can change these settings yourself by navigating to: Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Hosting &amp;amp; DNS &amp;gt; Apache &amp;amp; Nginx &amp;gt; Uncheck the &#039;smart static files processing box&#039; and make sure the &#039;Serve static files directly by Nginx&#039; box is also unchecked.&lt;br /&gt;
* Actively monitor your access logs and look for IPs with an unreasonably high number of hits/page views. &lt;br /&gt;
** Block any suspicious / abusive IPs by adding &amp;lt;code&amp;gt;Deny from x.x.x.x&amp;lt;/code&amp;gt; to your &#039;.htaccess&#039; file, or block them with Cloudflare if you have a custom domain.&lt;br /&gt;
** To check site stats, navigate to: Plesk &amp;gt; Statistics &amp;gt; Web Statistics &amp;gt; your domain &amp;gt; [View].&lt;br /&gt;
* Convert to a static site (users have mentioned &#039;&#039;&#039;WP2Static&#039;&#039;&#039; as being a useful plugin that converts WordPress sites to static sites).&lt;br /&gt;
* Upgrade to a [https://heliohost.org/vps/ VPS]. We offer a range of VPS plans, and a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Abusive IPs ==&lt;br /&gt;
&lt;br /&gt;
HelioHost needed to block the below IP addresses and IP Ranges since some of  our WordPress users were under attack from bots coming from these sources. If you use WordPress, we strongly recommend that you add the below to your own .htaccess file to proactively protect your site from IPs known to be abusive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# added by HelioHost - hacking attempt&lt;br /&gt;
Deny from 165.22.48.216&lt;br /&gt;
Deny from 52.169.95.1&lt;br /&gt;
Deny from 52.164.121.3&lt;br /&gt;
# these ranges are bots running at Digital Ocean who seems to have an abuse hosting problem&lt;br /&gt;
Deny from 104.248.0.0/16&lt;br /&gt;
Deny from 104.131.0.0/16&lt;br /&gt;
Deny from 104.236.0.0/16&lt;br /&gt;
Deny from 165.232.0.0/16&lt;br /&gt;
Deny from 107.170.0.0/16&lt;br /&gt;
Deny from 128.199.0.0/16&lt;br /&gt;
Deny from 134.122.0.0/16&lt;br /&gt;
Deny from 134.199.128.0/17&lt;br /&gt;
Deny from 134.209.0.0/16&lt;br /&gt;
Deny from 137.184.0.0/16&lt;br /&gt;
Deny from 157.245.0.0/20&lt;br /&gt;
Deny from 152.42.191.0/24&lt;br /&gt;
Deny from 152.42.197.0/24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your site is under attack from other IPs or IP Ranges, you can [[:Contributing_to_the_Wiki | edit the Wiki]] to add more details.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Storage&amp;diff=1839</id>
		<title>Storage</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Storage&amp;diff=1839"/>
		<updated>2025-06-16T02:42:15Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Donations for Additional Storage */ Add link to self-service storage upgrade&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Account Storage ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers 1000 MB of web space, with unlimited inodes, for hosting accounts on our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers.&lt;br /&gt;
&lt;br /&gt;
This figure combines your stored files (including [[:Account_Backups|account backups]], [[:View_Error_Logs|error logs]], and [[:Unlimited_Email_Accounts | emails]]), your databases, and items in your trash folder.&lt;br /&gt;
&lt;br /&gt;
This should be more than enough to handle any forum, blog, or other script you might need to host. Sites that might encounter problems with this limit include photo galleries with high-megapixel images or online storage sites. In general, this limit should not be a problem to the great majority of hosting users.&lt;br /&gt;
&lt;br /&gt;
== Viewing Your Storage Usage ==&lt;br /&gt;
&lt;br /&gt;
To check how much disk space your account is using, follow the navigation steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Statistics  &amp;gt; Disk space&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Reducing Storage Usage == &lt;br /&gt;
&lt;br /&gt;
To reduce disk usage if you&#039;re nearing your account storage limit:&lt;br /&gt;
* [[:Account_Backups#Downloading_a_Local_Copy_of_Your_Backup | Download backups]] from inside Plesk and delete them off the server. &lt;br /&gt;
* Set a [[:Account_Backups#Limiting_the_Number_of_Backups_Stored_in_Plesk | limit on the number of backups]] stored inside Plesk.&lt;br /&gt;
* Change your [[:View_Error_Logs#Limiting_the_Storage_Space_Used_by_Error_Logs | Plesk logging settings]] to make smaller log files.&lt;br /&gt;
* Empty your trash folder on a regular basis.&lt;br /&gt;
* Delete [[:Unlimited_Email_Accounts | emails]] with large attachments.&lt;br /&gt;
&lt;br /&gt;
== Plesk Storage Calculation == &lt;br /&gt;
&lt;br /&gt;
Plesk counts the entire contents of your home folder (which includes all addon domains) on your main domain&#039;s disk space. It will not display your file storage use distributed across your addon domains. The disk space usage reported for addon domains only consists of things such as log files and mail. This is the standard behavior in Plesk, and cannot be customized. &lt;br /&gt;
&lt;br /&gt;
== Plesk File Storage Recalculation == &lt;br /&gt;
&lt;br /&gt;
Plesk takes &#039;&#039;&#039;up to 24 hours&#039;&#039;&#039; to reflect changes to disk space use after files are added or removed. Plesk storage usage recalculation is not done in real time.&lt;br /&gt;
&lt;br /&gt;
== Storage Upgrade Options ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, users wish to increase their account capacity. We offer the following paid options:&lt;br /&gt;
&lt;br /&gt;
== Donations for Additional Storage ==&lt;br /&gt;
&lt;br /&gt;
For each one-time $5 USD donation, users can [[:Donations_for_Increased_Storage|add 1000 MB extra space]] to their account on [[:Morty|Morty]], [[:Tommy|Tommy]], or [[:Johnny|Johnny]], up to a maximum account size of 7000 MB. You can upgrade your storage at [https://heliohost.org/dashboard/storage/ heliohost.org/dashboard/storage]&lt;br /&gt;
&lt;br /&gt;
The storage space, once increased, stays with your account forever. If you switch hosting plans, the storage transfers with your account. If you go inactive and your account is archived, the storage space will still be there years from now when you renew your account.&lt;br /&gt;
&lt;br /&gt;
== Paid VPS Plans ==&lt;br /&gt;
&lt;br /&gt;
For users who wish to pay for more memory, CPUs, or file space, we offer [https://heliohost.org/vps/ VPS plans] with storage options ranging from 50 GB to 300 GB, and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1805</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1805"/>
		<updated>2025-05-30T18:52:10Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */ Updated numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to [https://heliohost.org/dashboard/move/ upgrade your hosting plan].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.65 minutes || 1.59 minutes || 15.21 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 4.63 minutes || 0.87 minutes || 6.22 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 9.37 seconds || 4.30 seconds || 11.62 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=1800</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=1800"/>
		<updated>2025-05-27T02:05:11Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Request WSGI Control Access */ Beta ended&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flask ==&lt;br /&gt;
&lt;br /&gt;
== About Flask ==&lt;br /&gt;
&lt;br /&gt;
Flask is a Python web framework built with a small core and easy-to-extend philosophy. Read more at [https://www.fullstackpython.com/flask.html Full Stack Python].&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a [https://heliohost.org/vps/ VPS]. You can get a 10% discount when you pay for 6 months upfront.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 5.0.7 || 3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a [https://heliohost.org/vps/ VPS]. You can get a 10% discount when you pay for 6 months upfront.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.0.7 || 3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Flask on another version of Python, you&#039;ll need to get a [https://heliohost.org/vps/ VPS]. You can get a 10% discount when you pay for 6 months upfront.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Flask Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 3.0.3 || 3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How To Setup Flask on Plesk ==&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;flasktest&#039;. ==&lt;br /&gt;
&lt;br /&gt;
If you were transferred from the old cPanel, your main domain will be parked on the &#039;public_html&#039; directory.  &lt;br /&gt;
&lt;br /&gt;
If you created a new account on Plesk, your directory will be &#039;httpdocs&#039;.&lt;br /&gt;
&lt;br /&gt;
== Create an &#039;.htaccess&#039; file inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(admin_media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(flask\.wsgi/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(.*)$ flasktest/flask.wsgi/$1 [QSA,PT,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;flask.wsgi&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Update the code example, beneath where it says &amp;quot;edit your path below&amp;quot;, and type in the path to your actual website address, instead of the placeholder &#039;domain.helioho.st&#039; part.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&lt;br /&gt;
&lt;br /&gt;
# edit your path below&lt;br /&gt;
sys.path.append(&amp;quot;/home/domain.helioho.st/httpdocs/flasktest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
sys.path.insert(0, os.path.dirname(__file__))&lt;br /&gt;
from myapp import app as application&lt;br /&gt;
&lt;br /&gt;
# set this to something harder to guess&lt;br /&gt;
application.secret_key = &#039;secret&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a file named &#039;myapp.py&#039; inside the &#039;flasktest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
from flask import Flask, __version__&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
application = app&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
  return &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Flask is working on HelioHost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/python/version/&amp;quot;&amp;gt;Python version&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;/flasktest/flask/version/&amp;quot;&amp;gt;Flask version&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/python/version/&amp;quot;)&lt;br /&gt;
def p_version():&lt;br /&gt;
  return &amp;quot;Python version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % sys.version&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/flask/version/&amp;quot;)&lt;br /&gt;
def f_version():&lt;br /&gt;
  return &amp;quot;Flask version %s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&#039;/flasktest/&#039;&amp;gt;back&amp;lt;/a&amp;gt;&amp;quot; % __version__&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  app.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Make sure your directory structure and files look like this: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flasktest/&lt;br /&gt;
├── flask.wsgi&lt;br /&gt;
├── .htaccess&lt;br /&gt;
└── myapp.py&lt;br /&gt;
&lt;br /&gt;
0 directories, 3 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== If you did everything right it should look like the below: ==&lt;br /&gt;
&lt;br /&gt;
Screenshot taken from [https://krydos.heliohost.org/flasktest https://krydos.heliohost.org/flasktest/]&lt;br /&gt;
&lt;br /&gt;
[[File:flask_test.png]]&lt;br /&gt;
&lt;br /&gt;
== WSGI Uses Caching ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Flask changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because [[:Flask#WSGI_Uses_Server_Side_Caching|WSGI uses server side caching]].&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer [[#Options_to_Work_Around_Caching|a few options to work around caching]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What Caching Does ==&lt;br /&gt;
&lt;br /&gt;
Multiple Apache processes are running on the server, and each time you refresh your site you are randomly assigned to one of these processes. If that particular process has already displayed your site, it shows the cached version of your code; otherwise, it shows the new code changes. This means that during the first 2 hours after a site change, you may intermittently see old or new content, depending on which process you get assigned to. This situation will resolve when Apache is restarted, which happens every 2 hours.&lt;br /&gt;
&lt;br /&gt;
== Options to Work Around Caching ==&lt;br /&gt;
&lt;br /&gt;
== Request WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
A new feature currently available only on the [[:Morty]] plan is the ability for users to restart their Flask app themselves. Please note that this feature takes &#039;&#039;&#039;at a minimum&#039;&#039;&#039; 260 GB memory per day, which will result in a bill of &#039;&#039;&#039;$1.91 or more&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To try to keep the cost as low as possible, users on Morty also have the option to request that WSGI Control Access be temporarily enabled it to allow for debugging. Once they have completed troubleshooting, they can request for WSGI Control Access to be disabled. &lt;br /&gt;
&lt;br /&gt;
WSGI Control Access is no longer available on the [[:Tommy]] and [[:Johnny]] servers. &lt;br /&gt;
&lt;br /&gt;
Once you have created a Flask app that has a &#039;dispatch.wsgi&#039; file, create a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure to provide:&lt;br /&gt;
# Your username.&lt;br /&gt;
# Confirmation that you are on the Morty server.&lt;br /&gt;
# The domain name(s) for which you want WSGI Control Access. &#039;&#039;&#039;Note:&#039;&#039;&#039; If you have 2 Flask apps on 2 different domains, you need to request WSGI Control Access for each domain.&lt;br /&gt;
&lt;br /&gt;
Once you have been given WSGI Control Access on Morty, you can edit your &#039;flask.wsgi&#039; to reload your Flask app so new code changes load immediately. The edits to the file can be as simple as adding or removing a space or a blank line. As long as the file&#039;s &#039;last modified date&#039; changes it will discard the cache and reload your Flask app.&lt;br /&gt;
&lt;br /&gt;
Please let us know if you experience unexpected results with this new feature.&lt;br /&gt;
&lt;br /&gt;
== Account Resets Remove WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
If you [[:FAQ#How_do_I_reset_my_hosting_account_to_start_fresh|request an account reset]] you will need to re-request WSGI Control Access after the reset has been completed. By default, account resets will disable WSGI Control Access.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Use Local Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Another option to see code changes reflected immediately is to develop your Django app on your home computer and then host the production copy on the server. This is a useful approach for users on the [[:Tommy]] and [[:Johnny]] servers, where WSGI Control Access is no longer offered.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
&lt;br /&gt;
You may prefer to explore one of our paid [https://heliohost.org/vps/ VPS plans], depending on your requirements. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you receive an error of &#039;You don&#039;t have permission to access /flasktest/flask.wsgi/ on this server&#039;, you may need to add &#039;AddHandler cgi-script .py&#039; on a new line in your &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
== Running Flask at the Webroot ==&lt;br /&gt;
&lt;br /&gt;
The above example is for Flask in a subdirectory, so users can host different projects in different subdirectories rather than dedicating the whole domain to one Flask app.&lt;br /&gt;
&lt;br /&gt;
If you prefer to run Flask at the webroot instead, this is possible with some slight changes to the &#039;.htaccess&#039;, &#039;flask.wsgi&#039;, and &#039;myapp.py&#039; files.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from the [https://helionet.org/index/topic/53856-how-to-use-flask-on-plesk/ How to Use Flask on Plesk] post on the HelioNet forum, answered by Krydos.&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If this tutorial has not worked for you, please go back and check all of your steps again to make sure you didn&#039;t miss anything. If you can&#039;t figure out what is wrong, please check your account [[:View_Error_Logs | error logs]], since these will often provide information that can help you resolve the problem. If you&#039;re still stuck, please post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039; and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1794</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1794"/>
		<updated>2025-05-24T17:39:09Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */ Add another link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to [https://heliohost.org/dashboard/move/ upgrade your hosting plan].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.44 minutes || 1.58 minutes || 16.76 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 4.63 minutes || 1.04 minutes || 6.22 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 8.72 seconds || 5.83 seconds || 11.62 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1778</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1778"/>
		<updated>2025-05-13T18:03:46Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */ Updated Apache restart times&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to upgrade your hosting plan.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 7.44 minutes || 1.58 minutes || 16.76 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 4.63 minutes || 1.04 minutes || 6.22 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 8.72 seconds || 5.83 seconds || 11.62 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Johnny&amp;diff=1769</id>
		<title>Johnny</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Johnny&amp;diff=1769"/>
		<updated>2025-04-28T19:31:07Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Uptime Goal */ Missecd changing 1 Tommy to Johnny in the copy/pasta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Johnny ==&lt;br /&gt;
&lt;br /&gt;
Johnny is our free server, offering great stability, speed, and uptime.&lt;br /&gt;
&lt;br /&gt;
Because of Johnny&#039;s popularity, [https://heliohost.org/signup/ new account signups] are available on a limited basis twice a day, at noon and midnight UTC. Please see our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny|list of helpful tips for getting a free account on Johnny]].&lt;br /&gt;
&lt;br /&gt;
To keep your account on Johnny active, make sure you [[:Suspension_Policy#Inactivity_Policy|log in at least once a month]].&lt;br /&gt;
&lt;br /&gt;
== Uptime Goal ==&lt;br /&gt;
&lt;br /&gt;
Our goal for the Johnny server is to keep the uptime at or above 97.00%. This is not a Service Level Agreement (SLA), and we make no guarantees about our service or uptime. If the uptime is at or above 97.00% we consider this to be an acceptable level and there is no problem. If the uptime is below 97.00% we consider this a problem, and we are working to improve the situation. You can read more about why we don&#039;t provide [[:ETA#ETA_for_New_Features,_Version_Upgrades,_and_Server_Repairs|SLAs or ETAs]]. If you are dissatisfied with performance of the Johnny server you can take a look at how to [[:Moving_Your_Account|move your account to a better server]]. You can see the historical uptime and performance data for Johnny on our [https://status.heliohost.org/history/johnny Johnny status page].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* [[:Plesk_Features|Plesk]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:MySQL|MySQL]]&lt;br /&gt;
* [[:Node.js|Node.js]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:PostgreSQL|PostgreSQL]]&lt;br /&gt;
* [[:Python|Python]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Johnny&amp;diff=1768</id>
		<title>Johnny</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Johnny&amp;diff=1768"/>
		<updated>2025-04-28T19:30:25Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added uptime goal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Johnny ==&lt;br /&gt;
&lt;br /&gt;
Johnny is our free server, offering great stability, speed, and uptime.&lt;br /&gt;
&lt;br /&gt;
Because of Johnny&#039;s popularity, [https://heliohost.org/signup/ new account signups] are available on a limited basis twice a day, at noon and midnight UTC. Please see our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny|list of helpful tips for getting a free account on Johnny]].&lt;br /&gt;
&lt;br /&gt;
To keep your account on Johnny active, make sure you [[:Suspension_Policy#Inactivity_Policy|log in at least once a month]].&lt;br /&gt;
&lt;br /&gt;
== Uptime Goal ==&lt;br /&gt;
&lt;br /&gt;
Our goal for the Johnny server is to keep the uptime at or above 97.00%. This is not a Service Level Agreement (SLA), and we make no guarantees about our service or uptime. If the uptime is at or above 97.00% we consider this to be an acceptable level and there is no problem. If the uptime is below 97.00% we consider this a problem, and we are working to improve the situation. You can read more about why we don&#039;t provide [[:ETA#ETA_for_New_Features,_Version_Upgrades,_and_Server_Repairs|SLAs or ETAs]]. If you are dissatisfied with performance of the Tommy server you can take a look at how to [[:Moving_Your_Account|move your account to a better server]]. You can see the historical uptime and performance data for Johnny on our [https://status.heliohost.org/history/johnny Johnny status page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* [[:Plesk_Features|Plesk]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:MySQL|MySQL]]&lt;br /&gt;
* [[:Node.js|Node.js]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:PostgreSQL|PostgreSQL]]&lt;br /&gt;
* [[:Python|Python]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Morty&amp;diff=1767</id>
		<title>Morty</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Morty&amp;diff=1767"/>
		<updated>2025-04-28T19:28:05Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Uptime Goal */ Mentioned moving to VPS if Morty isn&amp;#039;t good enough&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Morty == &lt;br /&gt;
&lt;br /&gt;
Morty is our flagship production server, available only to paid subscribers. Morty is the fastest server we have ever built, running on the fastest processor we have ever purchased, using the fastest SSD raid array we have ever had, and the fastest memory our processor supports. Thanks to 82 amazing donors during our 2023 fundraiser, we were able to raise enough money to purchase our newest server which is home to Morty, among other things. &lt;br /&gt;
&lt;br /&gt;
In November 2024, donors from our last fundraiser were transferred over to Morty and they spent a few weeks beta testing. The few issues found were fixed, and Morty was opened to account transfers from existing users in December 2024. &lt;br /&gt;
&lt;br /&gt;
The [[:Moving_Your_Account|account move]] page in the dashboard is 100% automated, so if you decide to move to Morty you can do so without any help from an admin, and without even talking to anyone if you don&#039;t want to. That said, we would love to hear what you have to say about our new server if you decide to try it out, or if you have any feedback about the transfer process.&lt;br /&gt;
&lt;br /&gt;
== No Login Requirement ==&lt;br /&gt;
&lt;br /&gt;
Unlike our other shared hosting servers, Morty has no requirement to log in to your account every 30 days to keep it active. As long as there is a positive balance on your account, it will remain active.&lt;br /&gt;
&lt;br /&gt;
== Pricing ==&lt;br /&gt;
&lt;br /&gt;
There will eventually be two ways to pay for Morty, the monthly subscription and the prepay option. Right now only the prepay option is available, but you can get $6 of Morty balance for only $5, which could keep your website online for 6 months. There is also the option to buy $12 balance and $24 balance for discounted rates.&lt;br /&gt;
&lt;br /&gt;
== Adding Funds to Morty Account == &lt;br /&gt;
&lt;br /&gt;
To add funds to your Morty account, go to [https://heliohost.org/donate/ heliohost.org/donate] and type in the amount you want to add. Once the transaction is complete, create a new topic in the [http://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and provide:&lt;br /&gt;
# Your account &#039;&#039;&#039;username&#039;&#039;&#039;&lt;br /&gt;
# The &#039;&#039;&#039;Transaction ID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once an admin confirms the transaction, the funds will be added to your Morty account balance.&lt;br /&gt;
&lt;br /&gt;
The ability to add funds to your Morty account will eventually be built into the account dashboard, but there is [[:ETA | no ETA]] for when this will be completed. Once this feature is available, it will be announced in the HelioNet [https://helionet.org/index/forum/1-news/ News] section, as well as elsewhere on our site and our social media.&lt;br /&gt;
&lt;br /&gt;
=== Providing PayPal Transaction ID ===&lt;br /&gt;
 &lt;br /&gt;
Some users are hesitant to provide their PayPal transaction ID. Please refer to this post by a PayPal employee explaining that [https://www.paypal-community.com/t5/Refunds-and-cancellations/OK-TO-RELEASE-PAYPAL-TRANSACTION-ID-NUMBER/td-p/719651 providing your transaction ID to your seller is perfectly safe].&lt;br /&gt;
&lt;br /&gt;
== Account Load Overage Charges ==&lt;br /&gt;
&lt;br /&gt;
Keep in mind if your account uses more than {{Template:MemoryLimit}} memory or 10k CPU in a day we will charge you an extra $0.0005 per 1 GB memory and $0.005 per 1k CPU rather than suspending you. So if you have a lot of overages the $6 balance won&#039;t last you a full 6 months, but we will email you when the balance gets low.&lt;br /&gt;
&lt;br /&gt;
For up to date information on Morty, check out the HelioNet Forum [https://helionet.org/index/forum/1-news/ News section].&lt;br /&gt;
&lt;br /&gt;
== Uptime Goal ==&lt;br /&gt;
&lt;br /&gt;
Our goal for the Morty server is to keep the uptime at or above 99.99%. This is not a Service Level Agreement (SLA), and we make no guarantees about our service or uptime. You can read more about why we don&#039;t provide [[:ETA#ETA_for_New_Features,_Version_Upgrades,_and_Server_Repairs|SLAs or ETAs]]. If you are dissatisfied with performance of the Morty server you can [https://heliohost.org/vps/ move your domain(s) to a VPS] or read our [[:Refunds|refund policy]]. You can see the historical uptime and performance data since Morty was created on our [https://status.heliohost.org/history/morty Morty status page].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* [[:Plesk_Features|Plesk]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:MySQL|MySQL]]&lt;br /&gt;
* [[:Node.js|Node.js]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:PostgreSQL|PostgreSQL]]&lt;br /&gt;
* [[:Python|Python]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Tommy&amp;diff=1766</id>
		<title>Tommy</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Tommy&amp;diff=1766"/>
		<updated>2025-04-28T19:26:28Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added uptime goal section and disclaimers about no SLA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tommy ==&lt;br /&gt;
&lt;br /&gt;
Tommy is our exclusive donor server offering stability and speed suitable for production sites.&lt;br /&gt;
&lt;br /&gt;
We offer various [https://heliohost.org/tommy/ Donor Plans], and for a one-time donation of as little as $1 USD, you can open an account any time of day.&lt;br /&gt;
&lt;br /&gt;
To keep your account on Tommy active, make sure you [[:Suspension_Policy#Inactivity_Policy|log in at least once a month]].&lt;br /&gt;
&lt;br /&gt;
== Uptime Goal ==&lt;br /&gt;
&lt;br /&gt;
Our goal for the Tommy server is to keep the uptime at or above 99.50%. This is not a Service Level Agreement (SLA), and we make no guarantees about our service or uptime. If the uptime is at or above 99.50% we consider this to be an acceptable level and there is no problem. If the uptime is below 99.50% we consider this a problem, and we are working to improve the situation. You can read more about why we don&#039;t provide [[:ETA#ETA_for_New_Features,_Version_Upgrades,_and_Server_Repairs|SLAs or ETAs]]. If you are dissatisfied with performance of the Tommy server you can take a look at how to [[:Moving_Your_Account|move your account to a better server]] or read our [[:Refunds|refund policy]]. You can see the historical uptime and performance data for Tommy on our [https://status.heliohost.org/history/tommy Tommy status page].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* [[:Plesk_Features|Plesk]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:MySQL|MySQL]]&lt;br /&gt;
* [[:Node.js|Node.js]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:PostgreSQL|PostgreSQL]]&lt;br /&gt;
* [[:Python|Python]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Morty&amp;diff=1765</id>
		<title>Morty</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Morty&amp;diff=1765"/>
		<updated>2025-04-28T19:18:45Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added uptime goal section and disclaimer about no guarantees&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Morty == &lt;br /&gt;
&lt;br /&gt;
Morty is our flagship production server, available only to paid subscribers. Morty is the fastest server we have ever built, running on the fastest processor we have ever purchased, using the fastest SSD raid array we have ever had, and the fastest memory our processor supports. Thanks to 82 amazing donors during our 2023 fundraiser, we were able to raise enough money to purchase our newest server which is home to Morty, among other things. &lt;br /&gt;
&lt;br /&gt;
In November 2024, donors from our last fundraiser were transferred over to Morty and they spent a few weeks beta testing. The few issues found were fixed, and Morty was opened to account transfers from existing users in December 2024. &lt;br /&gt;
&lt;br /&gt;
The [[:Moving_Your_Account|account move]] page in the dashboard is 100% automated, so if you decide to move to Morty you can do so without any help from an admin, and without even talking to anyone if you don&#039;t want to. That said, we would love to hear what you have to say about our new server if you decide to try it out, or if you have any feedback about the transfer process.&lt;br /&gt;
&lt;br /&gt;
== No Login Requirement ==&lt;br /&gt;
&lt;br /&gt;
Unlike our other shared hosting servers, Morty has no requirement to log in to your account every 30 days to keep it active. As long as there is a positive balance on your account, it will remain active.&lt;br /&gt;
&lt;br /&gt;
== Pricing ==&lt;br /&gt;
&lt;br /&gt;
There will eventually be two ways to pay for Morty, the monthly subscription and the prepay option. Right now only the prepay option is available, but you can get $6 of Morty balance for only $5, which could keep your website online for 6 months. There is also the option to buy $12 balance and $24 balance for discounted rates.&lt;br /&gt;
&lt;br /&gt;
== Adding Funds to Morty Account == &lt;br /&gt;
&lt;br /&gt;
To add funds to your Morty account, go to [https://heliohost.org/donate/ heliohost.org/donate] and type in the amount you want to add. Once the transaction is complete, create a new topic in the [http://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and provide:&lt;br /&gt;
# Your account &#039;&#039;&#039;username&#039;&#039;&#039;&lt;br /&gt;
# The &#039;&#039;&#039;Transaction ID&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once an admin confirms the transaction, the funds will be added to your Morty account balance.&lt;br /&gt;
&lt;br /&gt;
The ability to add funds to your Morty account will eventually be built into the account dashboard, but there is [[:ETA | no ETA]] for when this will be completed. Once this feature is available, it will be announced in the HelioNet [https://helionet.org/index/forum/1-news/ News] section, as well as elsewhere on our site and our social media.&lt;br /&gt;
&lt;br /&gt;
=== Providing PayPal Transaction ID ===&lt;br /&gt;
 &lt;br /&gt;
Some users are hesitant to provide their PayPal transaction ID. Please refer to this post by a PayPal employee explaining that [https://www.paypal-community.com/t5/Refunds-and-cancellations/OK-TO-RELEASE-PAYPAL-TRANSACTION-ID-NUMBER/td-p/719651 providing your transaction ID to your seller is perfectly safe].&lt;br /&gt;
&lt;br /&gt;
== Account Load Overage Charges ==&lt;br /&gt;
&lt;br /&gt;
Keep in mind if your account uses more than {{Template:MemoryLimit}} memory or 10k CPU in a day we will charge you an extra $0.0005 per 1 GB memory and $0.005 per 1k CPU rather than suspending you. So if you have a lot of overages the $6 balance won&#039;t last you a full 6 months, but we will email you when the balance gets low.&lt;br /&gt;
&lt;br /&gt;
For up to date information on Morty, check out the HelioNet Forum [https://helionet.org/index/forum/1-news/ News section].&lt;br /&gt;
&lt;br /&gt;
== Uptime Goal ==&lt;br /&gt;
&lt;br /&gt;
Our goal for the Morty server is to keep the uptime at or above 99.99%. This is not a Service Level Agreement (SLA), and we make no guarantees about our service or uptime. You can read more about why we don&#039;t provide [[:ETA#ETA_for_New_Features,_Version_Upgrades,_and_Server_Repairs|SLAs or ETAs]]. If you are dissatisfied with performance of the Morty server you can read our [[:Refunds|refund policy]]. You can see the historical uptime and performance data since Morty was created on our [https://status.heliohost.org/history/morty Morty status page].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* [[:Plesk_Features|Plesk]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:MySQL|MySQL]]&lt;br /&gt;
* [[:Node.js|Node.js]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:PostgreSQL|PostgreSQL]]&lt;br /&gt;
* [[:Python|Python]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1752</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1752"/>
		<updated>2025-04-21T20:44:14Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* How to Get Rid of 502 Errors */ added comma&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime, is to upgrade your hosting plan.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 5.33 minutes || 1.55 minutes || 15.39 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.08 minutes || 1.05 minutes || 11.11 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 6.26 seconds || 4.82 seconds || 9.80 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1751</id>
		<title>502 Bad Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=502_Bad_Gateway&amp;diff=1751"/>
		<updated>2025-04-21T20:43:33Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added information about how to get rid of 502 errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 502 Bad Gateway ==&lt;br /&gt;
&lt;br /&gt;
== Apache Restarts ==&lt;br /&gt;
&lt;br /&gt;
Apache restarts happen every 2 hours on the shared hosting servers. During the restarts on the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, your site may display a 502 error to visitors. On the [[:Morty|Morty]] server, a [[:504_Gateway_Timeout|504 error]] may display. These errors typically last no longer than a couple of minutes and are resolved once Apache has finished restarting.&lt;br /&gt;
&lt;br /&gt;
The difference in error messages (502 vs. 504) is because of different restart methods used. A hard restart interrupts Apache abruptly, leading to a 502 (Bad Gateway), and a graceful restart will give the 504 (Gateway Timeout). The restart approach on Tommy and Johnny is different in order to minimize downtime and address user concerns about longer wait times for their sites to come back up after server restarts. Because the wait time for restarts on Morty was already minimal, the graceful approach is preferred for this server.&lt;br /&gt;
&lt;br /&gt;
To check the status of our servers, please visit the visit the [https://status.heliohost.org/ HelioHost Services Status Page]. The status page provides a real-time overview of your server’s status and includes a history of past incidents.&lt;br /&gt;
&lt;br /&gt;
== How to Get Rid of 502 Errors ==&lt;br /&gt;
&lt;br /&gt;
If you see frequent 502 errors on your website, the best way to fix the issue and get better uptime is to upgrade your hosting plan.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plan !! Average Restart !! Min Restart !! Max Restart  &lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 5.33 minutes || 1.55 minutes || 15.39 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.08 minutes || 1.05 minutes || 11.11 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 6.26 seconds || 4.82 seconds || 9.80 seconds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Apache restarts take less than 30 seconds no error messages are displayed, and it counts as 100% uptime. Tommy is a little better than Johnny, but we recommend switching to Morty if you want to get rid of the 502 errors entirely. You can upgrade your existing account to the Morty plan at [https://heliohost.org/dashboard/move/ heliohost.org/dashboard/move].&lt;br /&gt;
&lt;br /&gt;
You can also upgrade to a [https://heliohost.org/vps/ VPS Plan] to fix the 502 errors. On a [https://heliohost.org/vps/ VPS Plan] there are no other users sharing the server with you, so Apache only restarts when you restart it yourself. You can leave it running without a restart for months if you want to. We offer a range of [https://heliohost.org/vps/ VPS Plans], and a 10% discount when you pay for 6 months upfront.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=1714</id>
		<title>Converting an Existing Django App</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=1714"/>
		<updated>2025-04-06T18:07:53Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Create a new project called &amp;#039;djangotest&amp;#039; */ Removed word &amp;#039;text&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Converting an Existing Django App to work on HelioHost == &lt;br /&gt;
&lt;br /&gt;
== About Django ==&lt;br /&gt;
&lt;br /&gt;
Django is a web development framework designed specifically for Python. As Ruby on Rails does for Ruby, Django aims to provide an MVC (Model-View-Controller) architecture for web application development as well as a large set of prebuilt libraries to simplify the development of common web app features. Django&#039;s modularity also allows easy scalability and enables the reuse of various code blocks, aligning to the DRY (&amp;quot;Don&#039;t Repeat Yourself&amp;quot;) software development principle.&lt;br /&gt;
&lt;br /&gt;
== Django Versions Available ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you need to run Django on another version of Python, you&#039;ll need to get a [https://heliohost.org/vps/ VPS]. We offer a range of VPS plans, and a 10% discount when you pay for 6 months upfront.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Django Version !! Python Version !! Python Modules Installed !! Python Path !! Loader&lt;br /&gt;
|-&lt;br /&gt;
| Morty || 5.0.7 || 3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || 5.0.7 || 3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|-&lt;br /&gt;
| Johnny || 5.0.7 || 3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View] || /usr/bin/python3.12 || WSGI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Enabled ==&lt;br /&gt;
&lt;br /&gt;
== WSGI ==&lt;br /&gt;
&lt;br /&gt;
Using the WSGI loader for a shared hosting environment is ideal because it conserves memory and enhances security.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Django changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because [[:Converting_an_Existing_Django_App#WSGI_Uses_Server_Side_Caching|WSGI uses server side caching]].&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer [[:Converting_an_Existing_Django_App#Options_to_Work_Around_Caching|a few options to work around caching]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MySQL|MySQL]], [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Info|Before requesting additional modules, make sure you check the list of modules already installed. Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Server !! Python Modules Installed&lt;br /&gt;
|-&lt;br /&gt;
| Morty || [https://krydos3.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|-&lt;br /&gt;
| Tommy || [https://krydos1.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|-&lt;br /&gt;
| Johnny || [https://krydos2.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After checking the list of modules that are already installed, if you need to request additional libraries, please raise a request in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, your &#039;&#039;&#039;server&#039;&#039;&#039;, and &#039;&#039;&#039;the libraries you need&#039;&#039;&#039; including any relevant &#039;&#039;&#039;version numbers&#039;&#039;&#039; for them.&lt;br /&gt;
&lt;br /&gt;
== Disabled ==&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
We don&#039;t offer shell (command line) access to our users. Many Django tutorials and installation instructions assume that users have command line access, which may make working with Python &amp;amp; Django more difficult. Most people tend to develop on their home computer and then upload to their web server, which almost negates the need for this feature. Furthermore, most configuration done through the command line can be done through other methods, such as FTP and manual file editing.&lt;br /&gt;
&lt;br /&gt;
== WSGI Daemon Mode ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to configure Django to work with the mod_wsgi loader in Apache. You can either create a separate daemon for each Django process (daemon mode) or embed Django into the Apache daemon (embedded mode). While daemon mode tends to be the standard among Django admins because of the increased control it offers, we use embedded mode because it can be set up on a per-user basis without very much root-level configuration. Embedded mode is slightly harder to get working (see directions below), and might break compatibility with some Django tutorials. In most cases, it should not be a problem.&lt;br /&gt;
&lt;br /&gt;
== Converting an Existing Django App to work on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This tutorial will guide you through using the command line on your development system to convert an existing Django app for hosting on HelioHost.&lt;br /&gt;
&lt;br /&gt;
If you prefer not to use the command line, our brief [[:Django_on_HelioHost|Django on HelioHost]] tutorial may better suit your needs. &lt;br /&gt;
&lt;br /&gt;
We recommend referring to the [https://docs.djangoproject.com/ official Django documentation] and following the introduction tutorial relevant to the Django version you are using. We also suggest using &#039;virtualenv&#039; to differentiate each Django installation for each project. The below tutorial has been designed for Linux users, but Windows users should work it out easily. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conventions:&#039;&#039;&#039; The following commands don&#039;t need root access to be executed. Shell commands are preceded by a &#039;$&#039; (dollar sign) to differentiate them from the output.  &lt;br /&gt;
The Python executable name used on the local computer is &#039;python3&#039;, but this can vary depending on the distribution used, so change it as needed to match your system requirements.&lt;br /&gt;
&lt;br /&gt;
== Create a new project called &#039;djangotest&#039; ==&lt;br /&gt;
&lt;br /&gt;
On your local computer, open a terminal, create a new project and perform the minimal configuration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ django-admin startproject djangotest&lt;br /&gt;
$ cd djangotest/ &amp;amp;&amp;amp; python3 manage.py migrate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verify Project Structure ==&lt;br /&gt;
&lt;br /&gt;
The below directory structure, with a &#039;djangotest&#039; folder nested inside another &#039;djangotest&#039; folder, is standard for a Django project. Please note that you cannot name the project folder &#039;django&#039;, it will not work. This is why the name &#039;djangotest&#039; has been used for this tutorial.&lt;br /&gt;
&lt;br /&gt;
Make sure that your directory structure and files look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ tree ../djangotest/&lt;br /&gt;
&lt;br /&gt;
../djangotest/&lt;br /&gt;
├── db.sqlite3&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── __pycache__/&lt;br /&gt;
│   │   ├── ...&lt;br /&gt;
│   ├── asgi.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   ├── urls.py&lt;br /&gt;
│   └── wsgi.py&lt;br /&gt;
└── manage.py&lt;br /&gt;
&lt;br /&gt;
2 directories, 10 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Run the Test Server ==&lt;br /&gt;
&lt;br /&gt;
Inside the first (outer) &#039;djangotest&#039; folder, start the testing server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python3 manage.py runserver 0.0.0.0:8000&lt;br /&gt;
&lt;br /&gt;
Watching for file changes with StatReloader&lt;br /&gt;
Performing system checks...&lt;br /&gt;
&lt;br /&gt;
System check identified no issues (0 silenced).&lt;br /&gt;
May 31, 2024 - 18:12:55&lt;br /&gt;
Django version 4.1, using settings &#039;djangotest.settings&#039;&lt;br /&gt;
Starting development server at http://0.0.0.0:8000/&lt;br /&gt;
Quit the server with CONTROL-C.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Open Test Server in Browser ==&lt;br /&gt;
&lt;br /&gt;
By using the test server, you can develop the app on your local computer and changes you make will take effect immediately.  &lt;br /&gt;
&lt;br /&gt;
Point your web browser to [http://127.0.0.1:8000/ http://127.0.0.1:8000] and you should see a message confirming the installation worked successfully:&lt;br /&gt;
&lt;br /&gt;
[[File:django-install-success.png]]&lt;br /&gt;
&lt;br /&gt;
== Configuring the Project for Deployment ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Django changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because [[:Converting_an_Existing_Django_App#WSGI_Uses_Server_Side_Caching|WSGI uses server side caching]].&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer [[:Converting_an_Existing_Django_App#Options_to_Work_Around_Caching|a few options to work around caching]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Rename the &#039;wsgi.py&#039; file to &#039;dispatch.wsgi&#039; ==&lt;br /&gt;
&lt;br /&gt;
To prepare the project for deployment, rename the &#039;wsgi.py&#039; file to &#039;dispatch.wsgi&#039;. Both files are inside the second (inner) &#039;djangotest&#039; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mv djangotest/wsgi.py djangotest/dispatch.wsgi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create an &#039;.htaccess&#039; file  ==&lt;br /&gt;
&lt;br /&gt;
Inside the first (outer) &#039;djangotest&#039; folder, create an &#039;.htaccess&#039; file with these contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(admin_media/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(djangotest/dispatch\.wsgi/.*)$ - [L]&lt;br /&gt;
RewriteRule ^(.*)$ djangotest/djangotest/dispatch.wsgi/$1 [QSA,PT,L]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instructs Apache to redirect all the requests (except those requesting something from &#039;media/&#039; or &#039;admin_media/&#039;) to the dispatcher file.&lt;br /&gt;
&lt;br /&gt;
== Edit the &#039;dispatch.wsgi&#039; file ==&lt;br /&gt;
&lt;br /&gt;
Inside the second (inner) &#039;djangotest&#039; folder, edit the dispatcher file &#039;dispatch.wsgi&#039; to instruct it how to load your Django settings. Change it from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
&lt;br /&gt;
os.environ.setdefault(&#039;DJANGO_SETTINGS_MODULE&#039;, &#039;djangotest.settings&#039;)&lt;br /&gt;
&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&lt;br /&gt;
&lt;br /&gt;
# edit your path below&lt;br /&gt;
sys.path.append(&amp;quot;/home/domain.helioho.st/httpdocs/djangotest&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&#039;DJANGO_SETTINGS_MODULE&#039;, &#039;djangotest.settings&#039;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Caution|Update the code example, beneath where it says &amp;quot;edit your path below&amp;quot;, and type in the path to your actual website address, instead of the placeholder &#039;domain.helioho.st&#039; part.&lt;br /&gt;
&lt;br /&gt;
On Plesk, your path is &amp;quot;/home/domain.helioho.st/httpdocs/djangotest&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you were transferred from cPanel, your path is &amp;quot;/home/domain.helioho.st/public_html/djangotest&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
== Edit the &#039;urls.py&#039; file ==&lt;br /&gt;
&lt;br /&gt;
Inside the second (inner) &#039;djangotest&#039; folder, edit the &#039;urls.py&#039; file. Change it from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.contrib import admin&lt;br /&gt;
from django.urls import path&lt;br /&gt;
&lt;br /&gt;
urlpatterns = [&lt;br /&gt;
    path(&#039;admin/&#039;, admin.site.urls),&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.contrib import admin&lt;br /&gt;
from django.urls import path&lt;br /&gt;
&lt;br /&gt;
urlpatterns = [&lt;br /&gt;
#    path(&#039;admin/&#039;, admin.site.urls),&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commenting out the path to the admin interface is done for security reasons, to prevent unauthorized access to the admin panel in a production environment.&lt;br /&gt;
&lt;br /&gt;
== Edit the &#039;settings.py&#039; file ==&lt;br /&gt;
&lt;br /&gt;
Inside the second (inner) &#039;djangotest&#039; folder, edit the &#039;settings.py&#039; file. &lt;br /&gt;
&lt;br /&gt;
Adding the web server address to the app settings will allow the web server to serve your Django app. Change it from: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = []&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To the below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALLOWED_HOSTS = [&amp;quot;*&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will ensure that your website (such as &#039;domain.heliohost.us&#039;) can serve your application from any custom domains you have (such as &#039;domain.com&#039;) as well as every subdomain (such as &#039;www&#039;).&lt;br /&gt;
&lt;br /&gt;
== Upload Your Project to HelioHost ==&lt;br /&gt;
&lt;br /&gt;
Upload the entire first (outer) &#039;djangotest&#039; folder to your main domain. Make sure that your directory structure and files look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
home/&lt;br /&gt;
└── domain/&lt;br /&gt;
    └── httpdocs/&lt;br /&gt;
        ├── .htaccess&lt;br /&gt;
        ├── db.sqlite3&lt;br /&gt;
        ├── manage.py&lt;br /&gt;
        └── djangotest/&lt;br /&gt;
            └── djangotest/&lt;br /&gt;
                ├── __init__.py&lt;br /&gt;
                ├── asgi.py&lt;br /&gt;
                ├── dispatch.wsgi&lt;br /&gt;
                ├── settings.py&lt;br /&gt;
                ├── urls.py&lt;br /&gt;
                └── __pycache__/ &lt;br /&gt;
                    ├── ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Deployed Site ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Django changes can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to appear consistently on your site because WSGI uses server side caching.&lt;br /&gt;
&lt;br /&gt;
If you want site changes to take effect immediately, we offer a few options to work around caching.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In your web browser, navigate to &#039;domain.helioho.st/djangotest&#039;&lt;br /&gt;
&lt;br /&gt;
If you did everything right it should look like this: &lt;br /&gt;
&lt;br /&gt;
[[File:django-install-success.png]]&lt;br /&gt;
&lt;br /&gt;
== WSGI Uses Server Side Caching ==&lt;br /&gt;
&lt;br /&gt;
== What WSGI Server Side Caching Does ==&lt;br /&gt;
&lt;br /&gt;
Multiple Apache processes are running on the server, and each time you refresh your site you are randomly assigned to one of these processes. If that particular process has already displayed your site, it shows the cached version of your code; otherwise, it shows the new code changes. This means that during the first 2 hours after a site change, you may intermittently see old or new content, depending on which process you get assigned to. This situation will resolve when Apache is restarted, which happens every 2 hours.&lt;br /&gt;
&lt;br /&gt;
== Options to Work Around Caching ==&lt;br /&gt;
&lt;br /&gt;
== Request WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
A new feature currently in beta is the ability for users to restart their Django app themselves. &lt;br /&gt;
&lt;br /&gt;
Once you have created a Django app that has a &#039;dispatch.wsgi file&#039;, create a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and the &#039;&#039;&#039;domain name(s)&#039;&#039;&#039; for which you want WSGI Control Access. (If you have 2 Django apps on 2 different domains, you need to request WSGI Control Access for each domain.)&lt;br /&gt;
&lt;br /&gt;
Once you have been given WSGI Control Access, you can edit your &#039;dispatch.wsgi&#039; to reload your Django app so new code changes load immediately. The edits to the file can be as simple as adding or removing a space or a blank line. As long as the file&#039;s &#039;last modified date&#039; changes, it will discard the cache and reload your Django app.&lt;br /&gt;
&lt;br /&gt;
Please let us know if you experience unexpected results with this new feature.&lt;br /&gt;
&lt;br /&gt;
== Account Resets Remove WSGI Control Access ==&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
If you [[:FAQ#How_do_I_reset_my_hosting_account_to_start_fresh|request an account reset]] you will need to re-request WSGI Control Access after the reset has been completed. By default, account resets will disable WSGI Control Access.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Use Local Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Another option to see code changes reflected immediately is to develop your Django app on your home computer and then host the production copy on the server.&lt;br /&gt;
&lt;br /&gt;
== VPS ==&lt;br /&gt;
&lt;br /&gt;
You may prefer to explore one of our paid [https://heliohost.org/vps/ VPS Plan] options, depending on your requirements. We offer a range of VPS plans, and a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* This tutorial is adapted from [https://www.helionet.org/index/topic/27585-django-on-tommy/?p=126077 this post] on the HelioNet forum.&lt;br /&gt;
* A ready-made template using an older Django version (1.11) is available at [https://github.com/rahul-gj/cookiecutter-helio https://github.com/rahul-gj/cookiecutter-helio].&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Signing_Up&amp;diff=1690</id>
		<title>Signing Up</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Signing_Up&amp;diff=1690"/>
		<updated>2025-04-02T21:38:35Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Helpful Tips for Getting a Free Account on Johnny */ Added images for people who can&amp;#039;t read&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Signing Up ==&lt;br /&gt;
&lt;br /&gt;
== Before Signup ==&lt;br /&gt;
&lt;br /&gt;
== Why should I choose Morty? ==&lt;br /&gt;
&lt;br /&gt;
[[:Morty]] is our flagship production server, available only to paid subscribers. Morty is the fastest server we have ever built, running on the fastest processor we have ever purchased, using the fastest SSD raid array we have ever had, and the fastest memory our processor supports.&lt;br /&gt;
&lt;br /&gt;
== Why should I choose Tommy? ==&lt;br /&gt;
&lt;br /&gt;
[[:Tommy|Tommy]] is our exclusive donor server offering stability and speed suitable for production sites.&lt;br /&gt;
&lt;br /&gt;
Tommy is closed for free signups, but [https://heliohost.org/tommy/ Donor Signups] are always available.&lt;br /&gt;
&lt;br /&gt;
== Why should I choose Johnny? ==&lt;br /&gt;
&lt;br /&gt;
[[:Johnny|Johnny]] is our free server, offering great stability, speed, and uptime.&lt;br /&gt;
&lt;br /&gt;
== During Signup ==&lt;br /&gt;
&lt;br /&gt;
== Usernames are not private  ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
When creating your account username, please note that if you need support, you will be asked to provide this username for account identification, where it may be visible to other users. &lt;br /&gt;
&lt;br /&gt;
Please avoid using any private information in your username.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Username-is-not-private.png]]&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;That plan is already full for the day&amp;quot; message ==&lt;br /&gt;
&lt;br /&gt;
To prevent the free Johnny server from getting overloaded with masses of new accounts, we put a limit on the number of people who can sign up. This limit resets [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours], at midnight UTC and noon UTC. &lt;br /&gt;
&lt;br /&gt;
To find out when to sign up, check the &#039;Opens in&#039; text field, shown on the very bottom of the Johnny tile.  &lt;br /&gt;
&lt;br /&gt;
You can also see how long the free signups slot was open for last time by checking the &#039;Last signup open&#039; text in the last bullet point on the tile.&lt;br /&gt;
&lt;br /&gt;
[[File:johnny-signup-tile.png]]&lt;br /&gt;
&lt;br /&gt;
== Helpful Tips for Getting a Free Account on Johnny == &lt;br /&gt;
&lt;br /&gt;
1. Make sure your computer&#039;s or phone&#039;s time and time zone is set correctly, and synced up with a time server. The website [https://time.is/ time.is] is a great way to check if your device time is correct. For instance, if you see something like this you would know you need to sync your clock.&lt;br /&gt;
&lt;br /&gt;
[[File:Johnny-tips time-is.png]]&lt;br /&gt;
&lt;br /&gt;
If the [https://time.is/ time.is] website says your time isn&#039;t exact, you&#039;ll need to update it in the OS. If you&#039;re using Windows 11 you would open settings and go to &#039;&#039;&#039;Time &amp;amp; Language &amp;gt; Date &amp;amp; Time&#039;&#039;&#039;, and then click &#039;Sync now&#039;. The way to sync the time on other phones or operating systems may vary slightly.&lt;br /&gt;
&lt;br /&gt;
[[File:Johnny-tips sync-time.png]]&lt;br /&gt;
&lt;br /&gt;
Once your OS time is synced up try the [https://time.is time.is] website and you should see this.&lt;br /&gt;
&lt;br /&gt;
[[File:Johnny-tips exact-time.png]]&lt;br /&gt;
&lt;br /&gt;
2. Make sure Javascript works in your browser. The bottom of the Johnny tile should count down as you get closer to noon and midnight UTC.&lt;br /&gt;
&lt;br /&gt;
[[File:Johnny-tips countdown.png]]&lt;br /&gt;
&lt;br /&gt;
3. When the time gets down to 30 seconds or less, you can begin clicking as fast as you can on the Johnny tile:&lt;br /&gt;
* If signups aren&#039;t open yet it will just give the red &#039;That plan is already full for the day&#039; message.&lt;br /&gt;
* If signups are open it will take you to a page to enter your email address.&lt;br /&gt;
&lt;br /&gt;
4. Once it asks you for your email address you have a spot reserved for at least an hour and you don&#039;t need to rush through the rest of the signup process.  &lt;br /&gt;
&lt;br /&gt;
Free signups fill up fast, sometimes in even less than a second. If you miss the free signups timeslot, be ready to try again next time if needed. &lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
There are no exceptions to the free signup timeframes. If you cannot sign up during the 2 daily timeslots when Johnny is open for free signups, we offer various [https://heliohost.org/tommy/ Donor Plans], so for a one-time donation of as little as $1 USD, you can open an account on Tommy any time of day without needing to wait.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== What is HelioNet? ==&lt;br /&gt;
&lt;br /&gt;
HelioNet is located at [http://helionet.org helionet.org] and is a discussion board where users like yourself can request support. The friendly staff and the community will attempt to answer your questions as best as they can.&lt;br /&gt;
&lt;br /&gt;
{{Info|When you create your hosting account, a HelioNet forum account with the same username and password is created for you.}}&lt;br /&gt;
&lt;br /&gt;
If you need assistance, you can post on the HelioNet [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum] and the administrators can easily identify you by username.&lt;br /&gt;
&lt;br /&gt;
Learn more about [[:HelioNet|the history of HelioNet]].&lt;br /&gt;
&lt;br /&gt;
== After Signup ==&lt;br /&gt;
&lt;br /&gt;
== Up to 2 hours for activation ==&lt;br /&gt;
&lt;br /&gt;
{{Info|It can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your account to be fully active.}}&lt;br /&gt;
&lt;br /&gt;
The HelioHost Dashboard will display a message advising you that your account has been created and you can login to Plesk. However, it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your domain to begin working. &lt;br /&gt;
&lt;br /&gt;
In the meantime, your website may not load or display correctly, and file changes you make may not take effect. Please be patient and wait for &#039;&#039;&#039;the full 2 hours&#039;&#039;&#039; before assuming anything is broken.  &lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard-up-to-2-hours.png]]&lt;br /&gt;
&lt;br /&gt;
== Check account activation status ==&lt;br /&gt;
&lt;br /&gt;
To check the status of your account and see an approximation of the activation completion time, go to [https://heliohost.org/status/ heliohost.org/status].  &lt;br /&gt;
&lt;br /&gt;
If after &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, you still see a message saying &#039;HelioHost Account Queued&#039; or are still seeing the Plesk default page, please [[:Clear_Your_Cache|clear your cache]].&lt;br /&gt;
&lt;br /&gt;
== Using a non-HelioHost domain ==&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
The more domains there are on the server the longer it takes to restart Apache.  &lt;br /&gt;
&lt;br /&gt;
In order to keep server uptime reasonably high, our automated process will disable domains that aren&#039;t hosted by us.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== HelioHost Nameservers ===&lt;br /&gt;
&lt;br /&gt;
You will need to add the following nameservers to your domain via your domain registrar&#039;s website:&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
=== DNS Records === &lt;br /&gt;
&lt;br /&gt;
If you prefer to add A records (IPv4) or AAAA records (IPv6) to your custom domain registrar&#039;s dashboard instead of nameservers, look up the IP addresses for your server by using the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain name] &amp;gt; and check at the bottom of the page.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Checking Custom Domain DNS === &lt;br /&gt;
&lt;br /&gt;
Full DNS propagation can take up to 24 - 48 hours globally in some cases. To check that your DNS is properly configured, go to [https://dnschecker.org/ dnschecker.org]. Select the type of record you want to check (NS record, A record, or AAAA record), and type in your custom domain.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Account failed to be created&amp;quot; email message ==&lt;br /&gt;
&lt;br /&gt;
Please create a new topic in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum] and make sure you provide your hosting account &#039;&#039;&#039;username&#039;&#039;&#039; so we can investigate this for you.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Johnny-tips_countdown.png&amp;diff=1689</id>
		<title>File:Johnny-tips countdown.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Johnny-tips_countdown.png&amp;diff=1689"/>
		<updated>2025-04-02T21:36:19Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Johnny-tips_exact-time.png&amp;diff=1688</id>
		<title>File:Johnny-tips exact-time.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Johnny-tips_exact-time.png&amp;diff=1688"/>
		<updated>2025-04-02T21:32:40Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Johnny-tips_sync-time.png&amp;diff=1687</id>
		<title>File:Johnny-tips sync-time.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Johnny-tips_sync-time.png&amp;diff=1687"/>
		<updated>2025-04-02T21:25:51Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Johnny-tips_time-is.png&amp;diff=1686</id>
		<title>File:Johnny-tips time-is.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Johnny-tips_time-is.png&amp;diff=1686"/>
		<updated>2025-04-02T21:21:03Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Refunds&amp;diff=1678</id>
		<title>Refunds</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Refunds&amp;diff=1678"/>
		<updated>2025-03-24T20:12:20Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Refund Policy */ add, some, commas,&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Refund Policy ==&lt;br /&gt;
&lt;br /&gt;
At HelioHost we strive to provide the highest quality hosting service for all your website needs. We understand that not everyone will know exactly which plan they need upfront and also may not know how long they will need it. Our goal is 100% customer satisfaction, so we can offer exchanges and pro-rated partial refunds for most services or upgrades. However, since we are a small non-profit organization powered by donations, we can&#039;t afford to lose money on fees so every donation and payment has a non-refundable transaction fee.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Exchanges&#039;&#039;&#039; - If you&#039;re dissatisfied with your plan or you realize you need a different type of plan, exchanges can be done with no transaction fees and the full value of the payment or the pro-rated remainder of the payment. For example, if you paid $19 for a Morty account, and then later realized you needed a VPS instead, we can put the pro-rated remainder toward the price of the VPS. Likewise, if you donate $5 to increase the storage space on your Johnny account, and then realize you&#039;d rather move to Morty that can be done as well.&lt;br /&gt;
* &#039;&#039;&#039;Tommy donations&#039;&#039;&#039; - Requests to return the tax-deductible gift you gave to us must be received within 14 days from the date of the donation. We acknowledge that some people have difficulty grasping the difference between a donation and a payment so we honor refunds on donations, even though it is considered bad manners to ask for a gift to be returned. Tommy donations have a non-refundable transaction fee of $0.50. For example, if you donated $1, and then less than 14 days later decide you no longer want to support our mission as a non-profit, we can delete your account for you, and provide a refund of $0.50. &lt;br /&gt;
* &#039;&#039;&#039;Morty prepay payments&#039;&#039;&#039; - Refunds for Morty prepay payments will be given for the unused portion minus the initial discount and minus a non-refundable transaction fee of $0.50. For example, if you pay $5 for a Morty prepay balance of $6, and then decide to ask for a refund after using $1 worth of credit you will be refunded $3.50.&lt;br /&gt;
* &#039;&#039;&#039;VPS subscriptions&#039;&#039;&#039; - Refunds for VPS subscriptions will be given for the unused portion of the subscription, minus the initial discount, and minus a non-refundable transaction fee of $0.50. For example, if you pay $21.60 for a 6-month subscription of a Mercury VPS, and then decide to cancel it after the first month you will be refunded $17.10.&lt;br /&gt;
&lt;br /&gt;
Refunds will not be issued for accounts that are banned for abuse. The prices listed in all of the examples above are in USD. Subscriptions cannot be scheduled for cancellation in the future. All provided services will be terminated immediately if refunded.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1675</id>
		<title>Discord Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1675"/>
		<updated>2025-03-23T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Added section on automatically restarting the bot after a crash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
The Discord app works with desktop and mobile platforms, combining the features of a chat lobby, a message board and a VoIP chatting system into one app that&#039;s not going to hog resources on your phone or PC. Discord&#039;s popularity has only multiplied in recent years, with the app now reaching over 90 million registered users.&lt;br /&gt;
&lt;br /&gt;
Bots and apps are the lifeblood of the Discord development community. They come in all shapes and sizes, from small hobby projects for your server with friends, to huge projects that live in hundreds of thousands of servers. We love seeing the unique, fun, and sometimes downright strange (in a good way) creations that come from our community.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Discord Bot ==&lt;br /&gt;
&lt;br /&gt;
First you&#039;ll need to have a Discord account, and a Discord channel that you&#039;ll add the bot to later. Here&#039;s a [https://www.howtogeek.com/364075/how-to-create-set-up-and-manage-your-discord-server/ good guide] to get started.&lt;br /&gt;
&lt;br /&gt;
== Create the Bot ==&lt;br /&gt;
&lt;br /&gt;
Once you have your Discord server all set up it&#039;s time to create the bot through Discord&#039;s site. Go to [https://discordapp.com/developers/applications discordapp.com/developers/applications] and make sure you&#039;re logged in. Then click &#039;New Application&#039; in the top right.&lt;br /&gt;
&lt;br /&gt;
[[File:New_application.png]]&lt;br /&gt;
&lt;br /&gt;
Type a name and hit create. I decided to name my bot &#039;HelioBot&#039;.&lt;br /&gt;
&lt;br /&gt;
== Add the Bot to your Discord Server ==&lt;br /&gt;
&lt;br /&gt;
Click &#039;OAuth2&#039; on the left navigation.&lt;br /&gt;
&lt;br /&gt;
[[File:oauth2.png]]&lt;br /&gt;
&lt;br /&gt;
Then check the bot box under &#039;SCOPES&#039;, and scroll down and select &#039;Administrator&#039; under &#039;BOT PERMISSIONS&#039;. You could select the exact permissions that your bot needs one by one, but for this simple example it&#039;s easier to just allow the bot permission to do everything.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Click copy next to the URL that is generated and open that URL in a new tab. Then, select your Discord server from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
[[File:add_to_server.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;Authorize&#039; and complete the reCAPTCHA to add the bot to the Discord server. If you go to your Discord now you can see the bot on the offline user list.&lt;br /&gt;
&lt;br /&gt;
[[File:offline_bot.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
[https://heliohost.org/login Log in] and continue to Plesk. Then load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliobot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:create_heliobot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliobot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import discord&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
&lt;br /&gt;
load_dotenv()&lt;br /&gt;
token = os.getenv(&#039;DISCORD_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
import certifi&lt;br /&gt;
os.environ[&amp;quot;SSL_CERT_FILE&amp;quot;] = certifi.where()&lt;br /&gt;
&lt;br /&gt;
client = discord.Client(intents=discord.Intents.default())&lt;br /&gt;
&lt;br /&gt;
class MyClient(discord.Client):&lt;br /&gt;
    async def on_ready(self):&lt;br /&gt;
        print(f&#039;Logged in as {self.user} (ID: {self.user.id})&#039;)&lt;br /&gt;
        print(&#039;------&#039;)&lt;br /&gt;
&lt;br /&gt;
    async def on_message(self, message):&lt;br /&gt;
        # we do not want the bot to reply to itself&lt;br /&gt;
        if message.author.id == self.user.id:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        if message.content.startswith(&#039;!hello&#039;):&lt;br /&gt;
            await message.reply(&#039;Hello!&#039;, mention_author=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intents = discord.Intents.default()&lt;br /&gt;
intents.message_content = True&lt;br /&gt;
&lt;br /&gt;
client = MyClient(intents=intents)&lt;br /&gt;
client.run(token)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliobot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:change_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Discord token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
Go back to the Discord bot page and click bot on the left navigation again.&lt;br /&gt;
&lt;br /&gt;
[[File:select_bot.png]]&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do on this page is enable &#039;Presence Intent&#039;, &#039;Server Members Intent&#039;, and &#039;Message Content Intent&#039;. If you&#039;re sure your bot doesn&#039;t need all three of these enable just what you need, but for simplicity of this guide we&#039;re going to enable all three, and then save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:discord_intents.png]]&lt;br /&gt;
&lt;br /&gt;
On the same page click the &#039;Reset Token&#039; button, and then copy/paste the token.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_token.png]]&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to come back to this page and reset it. Anyone who has your token can do whatever permissions you granted your bot to your server. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:paste_the_token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;DISCORD_TOKEN=&#039; like that. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Discord bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new file. Remember to use either &#039;helio&#039;&#039;&#039;ho.st&#039;&#039;&#039;&#039; or &#039;helioho&#039;&#039;&#039;st.us&#039;&#039;&#039;&#039; at the end of your domain, unless you&#039;re one of the very few users who still have a legacy heliohost.org domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit this to match your bot filename&lt;br /&gt;
bot_name=&amp;quot;heliobot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
username=`whoami`&lt;br /&gt;
pwd=`printenv|grep &#039;^PWD&#039;|cut -f2 -d&#039;=&#039;`&lt;br /&gt;
main_domain=`echo &amp;quot;$pwd&amp;quot;|cut -f3 -d&#039;/&#039;`&lt;br /&gt;
control=`echo &amp;quot;$pwd&amp;quot;|cut -f5 -d&#039;/&#039;`&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username &amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/$control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;lt;script&amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;lt;script&amp;gt;setInterval(\&amp;quot;window.location.replace(&#039;/$control/&#039;);\&amp;quot;, 2000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; $pwd/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the variable at the top of the file to match your bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliobot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to &#039;yourdomain.helioho.st/bot_control/&#039; and when you click Start it should start the bot. You can check if the bot is running by going to Discord and seeing if HelioBot is showing up as online now. If it is, test it out by typing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
!hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should respond to you.&lt;br /&gt;
&lt;br /&gt;
[[File:testing_discord_bot.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 50 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Automatically Restarting the Bot ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve had a lot of people ask us if we intentionally stop their bots after 60 minutes or so. The answer is no. The only time we kill processes automatically is if your account got suspended for high load. In our testing the bots can run for weeks or longer without needing to be restarted. Our servers are stable enough to run for months or years without a reboot as well. The issue is undoubtedly that people write bad code that crashes, but rather than admitting that their code is buggy, it&#039;s easier to just blame us.&lt;br /&gt;
&lt;br /&gt;
If your bot keeps stopping on its own, the best solution is to check the logs and fix the issue. If there is nothing shown in the logs that means you need to add more logging to your code to figure out why it&#039;s crashing. If you still can&#039;t figure it out you could enable auto-restart, but it&#039;s really just a crutch for buggy code rather than a real fix. If your bot code really is stable enough to run for weeks or months without crashing, auto-restart can also benefit you in the rare case of us rebooting the whole server, your bot will automatically start up as soon as the reboot is finished.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Enabling auto-restart could increase your chance of getting suspended. If you don&#039;t currently need your bot online we recommend shutting it down entirely rather than leaving it restarting over and over.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To set up auto-restart login to Plesk and navigate to:  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [ domain ] &amp;gt; Scheduled Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-scheduled-tasks.png]]&lt;br /&gt;
&lt;br /&gt;
Next, click &#039;Add Task&#039; and select the &#039;Fetch a URL&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:Plesk-schedule-a-task.png]]&lt;br /&gt;
&lt;br /&gt;
In the URL box put the start link from your bot_control page if you would click &#039;Start&#039;. The easiest way to get this value is to stop your bot, and then right click on the &#039;Start&#039; link, and &#039;Copy link address&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-start-link.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed this guide without changing too much it should be something like &#039;yourdomain.helioho.st/bot_control/?action=start&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-cron-job.png]]&lt;br /&gt;
&lt;br /&gt;
For those of you who want to minimize the downtime, and maximize your suspension chance you can set the schedule task up to run every minute like this with Cron Style and &#039;* * * * *&#039;. If everything is working correctly it will check if the bot is up every minute. Then if the bot is stopped it will restart it, and if the bot is already running it won&#039;t do anything.&lt;br /&gt;
&lt;br /&gt;
{{Danger|&lt;br /&gt;
Running a scheduled task every minute increases your load by quite a bit even if your bot never needs to be restarted. Simply checking if it has crashed causes some load. Worst case scenario: this scheduled tasks starts a new bot process every minute even though you already have a copy of the bot running, and you get suspended on [[:Tommy|Tommy]] or [[:Johnny|Johnny]] in record time, or reach the maximum billing on [[:Morty|Morty]] faster than anyone has ever dreamed possible.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1674</id>
		<title>Discord Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1674"/>
		<updated>2025-03-23T17:02:47Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Starting and Stopping Your Bot */ Updated the bot_control script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
The Discord app works with desktop and mobile platforms, combining the features of a chat lobby, a message board and a VoIP chatting system into one app that&#039;s not going to hog resources on your phone or PC. Discord&#039;s popularity has only multiplied in recent years, with the app now reaching over 90 million registered users.&lt;br /&gt;
&lt;br /&gt;
Bots and apps are the lifeblood of the Discord development community. They come in all shapes and sizes, from small hobby projects for your server with friends, to huge projects that live in hundreds of thousands of servers. We love seeing the unique, fun, and sometimes downright strange (in a good way) creations that come from our community.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Discord Bot ==&lt;br /&gt;
&lt;br /&gt;
First you&#039;ll need to have a Discord account, and a Discord channel that you&#039;ll add the bot to later. Here&#039;s a [https://www.howtogeek.com/364075/how-to-create-set-up-and-manage-your-discord-server/ good guide] to get started.&lt;br /&gt;
&lt;br /&gt;
== Create the Bot ==&lt;br /&gt;
&lt;br /&gt;
Once you have your Discord server all set up it&#039;s time to create the bot through Discord&#039;s site. Go to [https://discordapp.com/developers/applications discordapp.com/developers/applications] and make sure you&#039;re logged in. Then click &#039;New Application&#039; in the top right.&lt;br /&gt;
&lt;br /&gt;
[[File:New_application.png]]&lt;br /&gt;
&lt;br /&gt;
Type a name and hit create. I decided to name my bot &#039;HelioBot&#039;.&lt;br /&gt;
&lt;br /&gt;
== Add the Bot to your Discord Server ==&lt;br /&gt;
&lt;br /&gt;
Click &#039;OAuth2&#039; on the left navigation.&lt;br /&gt;
&lt;br /&gt;
[[File:oauth2.png]]&lt;br /&gt;
&lt;br /&gt;
Then check the bot box under &#039;SCOPES&#039;, and scroll down and select &#039;Administrator&#039; under &#039;BOT PERMISSIONS&#039;. You could select the exact permissions that your bot needs one by one, but for this simple example it&#039;s easier to just allow the bot permission to do everything.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Click copy next to the URL that is generated and open that URL in a new tab. Then, select your Discord server from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
[[File:add_to_server.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;Authorize&#039; and complete the reCAPTCHA to add the bot to the Discord server. If you go to your Discord now you can see the bot on the offline user list.&lt;br /&gt;
&lt;br /&gt;
[[File:offline_bot.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
[https://heliohost.org/login Log in] and continue to Plesk. Then load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliobot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:create_heliobot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliobot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import discord&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
&lt;br /&gt;
load_dotenv()&lt;br /&gt;
token = os.getenv(&#039;DISCORD_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
import certifi&lt;br /&gt;
os.environ[&amp;quot;SSL_CERT_FILE&amp;quot;] = certifi.where()&lt;br /&gt;
&lt;br /&gt;
client = discord.Client(intents=discord.Intents.default())&lt;br /&gt;
&lt;br /&gt;
class MyClient(discord.Client):&lt;br /&gt;
    async def on_ready(self):&lt;br /&gt;
        print(f&#039;Logged in as {self.user} (ID: {self.user.id})&#039;)&lt;br /&gt;
        print(&#039;------&#039;)&lt;br /&gt;
&lt;br /&gt;
    async def on_message(self, message):&lt;br /&gt;
        # we do not want the bot to reply to itself&lt;br /&gt;
        if message.author.id == self.user.id:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        if message.content.startswith(&#039;!hello&#039;):&lt;br /&gt;
            await message.reply(&#039;Hello!&#039;, mention_author=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intents = discord.Intents.default()&lt;br /&gt;
intents.message_content = True&lt;br /&gt;
&lt;br /&gt;
client = MyClient(intents=intents)&lt;br /&gt;
client.run(token)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliobot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:change_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Discord token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
Go back to the Discord bot page and click bot on the left navigation again.&lt;br /&gt;
&lt;br /&gt;
[[File:select_bot.png]]&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do on this page is enable &#039;Presence Intent&#039;, &#039;Server Members Intent&#039;, and &#039;Message Content Intent&#039;. If you&#039;re sure your bot doesn&#039;t need all three of these enable just what you need, but for simplicity of this guide we&#039;re going to enable all three, and then save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:discord_intents.png]]&lt;br /&gt;
&lt;br /&gt;
On the same page click the &#039;Reset Token&#039; button, and then copy/paste the token.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_token.png]]&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to come back to this page and reset it. Anyone who has your token can do whatever permissions you granted your bot to your server. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:paste_the_token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;DISCORD_TOKEN=&#039; like that. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Discord bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new file. Remember to use either &#039;helio&#039;&#039;&#039;ho.st&#039;&#039;&#039;&#039; or &#039;helioho&#039;&#039;&#039;st.us&#039;&#039;&#039;&#039; at the end of your domain, unless you&#039;re one of the very few users who still have a legacy heliohost.org domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit this to match your bot filename&lt;br /&gt;
bot_name=&amp;quot;heliobot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
username=`whoami`&lt;br /&gt;
pwd=`printenv|grep &#039;^PWD&#039;|cut -f2 -d&#039;=&#039;`&lt;br /&gt;
main_domain=`echo &amp;quot;$pwd&amp;quot;|cut -f3 -d&#039;/&#039;`&lt;br /&gt;
control=`echo &amp;quot;$pwd&amp;quot;|cut -f5 -d&#039;/&#039;`&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username &amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/$control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;lt;script&amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;lt;script&amp;gt;setInterval(\&amp;quot;window.location.replace(&#039;/$control/&#039;);\&amp;quot;, 2000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; $pwd/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the variable at the top of the file to match your bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliobot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to &#039;yourdomain.helioho.st/bot_control/&#039; and when you click Start it should start the bot. You can check if the bot is running by going to Discord and seeing if HelioBot is showing up as online now. If it is, test it out by typing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
!hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should respond to you.&lt;br /&gt;
&lt;br /&gt;
[[File:testing_discord_bot.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 50 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Mail_Delivery_Problems&amp;diff=1660</id>
		<title>Mail Delivery Problems</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Mail_Delivery_Problems&amp;diff=1660"/>
		<updated>2025-03-17T17:41:48Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Send a Test Email */ .top is abused TLD as well&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mail Delivery Problems ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers [[:Unlimited_Email_Accounts|unlimited email accounts]] to our users. Below is a troubleshooting guide to help resolve issues with email delivery.&lt;br /&gt;
&lt;br /&gt;
== Emails Not Delivered ==&lt;br /&gt;
&lt;br /&gt;
If you get a mail delivery report that says your email could not be delivered, the report should explain why.&lt;br /&gt;
&lt;br /&gt;
If the report says: &#039;Your email has been blocked because the sender is unauthenticated. [Email provider] requires all senders to authenticate with either SPF or DKIM&#039;, we can help you set up these records.&lt;br /&gt;
&lt;br /&gt;
== Emails Going to Spam Folder ==&lt;br /&gt;
&lt;br /&gt;
If your email recipients say that your emails are going to their spam folder, setting up SPF, DKIM, and DMARC records will help improve email delivery.&lt;br /&gt;
&lt;br /&gt;
== SPF, DKIM, and DMARC Records ==&lt;br /&gt;
&lt;br /&gt;
== Set Up SPF, DKIM, and DMARC Records ==&lt;br /&gt;
&lt;br /&gt;
To help improve the delivery of your emails, you can request that SPF, DKIM, and DMARC records be added to your account. Please create a new topic in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum] and include your hosting account &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039; so we can set this up for you.&lt;br /&gt;
&lt;br /&gt;
== Send a Test Email ==&lt;br /&gt;
&lt;br /&gt;
After the SPF, DKIM, and DMARC records are set up, we recommend sending a test email to [https://www.mail-tester.com/ mail-tester.com] to check that everything is set up correctly. Your test email should be a regular email, such as your typical newsletter or a standard message (avoid using just &amp;quot;test&amp;quot; as the email content). If your score is below 10/10, please create a new topic in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and include &#039;&#039;&#039;the full mail-tester report link&#039;&#039;&#039;, your hosting account &#039;&#039;&#039;username&#039;&#039;&#039;, and your &#039;&#039;&#039;domain name&#039;&#039;&#039; so we can help you fix any remaining issues.&lt;br /&gt;
&lt;br /&gt;
{{Info|For sites with the &#039;&#039;&#039;.xyz&#039;&#039;&#039; or &#039;&#039;&#039;.top&#039;&#039;&#039; TLD (Top-Level Domain), it is impossible to get a 10/10 mail-tester result. Since the domain is primarily associated with spam and abuse, most providers have added it to blocklists. The only solution is to purchase a domain with a more reputable TLD, such as .com or .net.}}&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If you get a different error in the mail delivery report, or if your emails are not delivered and you don&#039;t know why, please make a new post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and details about the problem, including &#039;&#039;&#039;the full mail-tester report link&#039;&#039;&#039; and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1656</id>
		<title>Discord Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1656"/>
		<updated>2025-03-16T02:41:12Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Starting and Stopping Your Bot */ Changed caution box into info box&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
The Discord app works with desktop and mobile platforms, combining the features of a chat lobby, a message board and a VoIP chatting system into one app that&#039;s not going to hog resources on your phone or PC. Discord&#039;s popularity has only multiplied in recent years, with the app now reaching over 90 million registered users.&lt;br /&gt;
&lt;br /&gt;
Bots and apps are the lifeblood of the Discord development community. They come in all shapes and sizes, from small hobby projects for your server with friends, to huge projects that live in hundreds of thousands of servers. We love seeing the unique, fun, and sometimes downright strange (in a good way) creations that come from our community.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Discord Bot ==&lt;br /&gt;
&lt;br /&gt;
First you&#039;ll need to have a Discord account, and a Discord channel that you&#039;ll add the bot to later. Here&#039;s a [https://www.howtogeek.com/364075/how-to-create-set-up-and-manage-your-discord-server/ good guide] to get started.&lt;br /&gt;
&lt;br /&gt;
== Create the Bot ==&lt;br /&gt;
&lt;br /&gt;
Once you have your Discord server all set up it&#039;s time to create the bot through Discord&#039;s site. Go to [https://discordapp.com/developers/applications discordapp.com/developers/applications] and make sure you&#039;re logged in. Then click &#039;New Application&#039; in the top right.&lt;br /&gt;
&lt;br /&gt;
[[File:New_application.png]]&lt;br /&gt;
&lt;br /&gt;
Type a name and hit create. I decided to name my bot &#039;HelioBot&#039;.&lt;br /&gt;
&lt;br /&gt;
== Add the Bot to your Discord Server ==&lt;br /&gt;
&lt;br /&gt;
Click &#039;OAuth2&#039; on the left navigation.&lt;br /&gt;
&lt;br /&gt;
[[File:oauth2.png]]&lt;br /&gt;
&lt;br /&gt;
Then check the bot box under &#039;SCOPES&#039;, and scroll down and select &#039;Administrator&#039; under &#039;BOT PERMISSIONS&#039;. You could select the exact permissions that your bot needs one by one, but for this simple example it&#039;s easier to just allow the bot permission to do everything.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Click copy next to the URL that is generated and open that URL in a new tab. Then, select your Discord server from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
[[File:add_to_server.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;Authorize&#039; and complete the reCAPTCHA to add the bot to the Discord server. If you go to your Discord now you can see the bot on the offline user list.&lt;br /&gt;
&lt;br /&gt;
[[File:offline_bot.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
[https://heliohost.org/login Log in] and continue to Plesk. Then load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliobot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:create_heliobot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliobot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import discord&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
&lt;br /&gt;
load_dotenv()&lt;br /&gt;
token = os.getenv(&#039;DISCORD_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
import certifi&lt;br /&gt;
os.environ[&amp;quot;SSL_CERT_FILE&amp;quot;] = certifi.where()&lt;br /&gt;
&lt;br /&gt;
client = discord.Client(intents=discord.Intents.default())&lt;br /&gt;
&lt;br /&gt;
class MyClient(discord.Client):&lt;br /&gt;
    async def on_ready(self):&lt;br /&gt;
        print(f&#039;Logged in as {self.user} (ID: {self.user.id})&#039;)&lt;br /&gt;
        print(&#039;------&#039;)&lt;br /&gt;
&lt;br /&gt;
    async def on_message(self, message):&lt;br /&gt;
        # we do not want the bot to reply to itself&lt;br /&gt;
        if message.author.id == self.user.id:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        if message.content.startswith(&#039;!hello&#039;):&lt;br /&gt;
            await message.reply(&#039;Hello!&#039;, mention_author=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intents = discord.Intents.default()&lt;br /&gt;
intents.message_content = True&lt;br /&gt;
&lt;br /&gt;
client = MyClient(intents=intents)&lt;br /&gt;
client.run(token)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliobot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:change_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Discord token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
Go back to the Discord bot page and click bot on the left navigation again.&lt;br /&gt;
&lt;br /&gt;
[[File:select_bot.png]]&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do on this page is enable &#039;Presence Intent&#039;, &#039;Server Members Intent&#039;, and &#039;Message Content Intent&#039;. If you&#039;re sure your bot doesn&#039;t need all three of these enable just what you need, but for simplicity of this guide we&#039;re going to enable all three, and then save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:discord_intents.png]]&lt;br /&gt;
&lt;br /&gt;
On the same page click the &#039;Reset Token&#039; button, and then copy/paste the token.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_token.png]]&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to come back to this page and reset it. Anyone who has your token can do whatever permissions you granted your bot to your server. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:paste_the_token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;DISCORD_TOKEN=&#039; like that. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Discord bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new file. Remember to use either &#039;helio&#039;&#039;&#039;ho.st&#039;&#039;&#039;&#039; or &#039;helioho&#039;&#039;&#039;st.us&#039;&#039;&#039;&#039; at the end of your domain, unless you&#039;re one of the very few users who still have a legacy heliohost.org domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit these to match your username, main domain, and bot filename&lt;br /&gt;
username=&amp;quot;krydos&amp;quot;&lt;br /&gt;
main_domain=&amp;quot;krydos.heliohost.org&amp;quot;&lt;br /&gt;
bot_name=&amp;quot;heliobot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username&amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/bot_control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;script&amp;amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the three variables at the top of the file to match your username, main domain, and bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliobot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to &#039;yourdomain.helioho.st/bot_control/&#039; and when you click Start it should start the bot. You can check if the bot is running by going to Discord and seeing if HelioBot is showing up as online now. If it is, test it out by typing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
!hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should respond to you.&lt;br /&gt;
&lt;br /&gt;
[[File:testing_discord_bot.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 50 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Telegram_Bot&amp;diff=1655</id>
		<title>Telegram Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Telegram_Bot&amp;diff=1655"/>
		<updated>2025-03-16T02:40:27Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Starting and Stopping Your Bot */ Changed caution box to info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
Telegram, also known as Telegram Messenger, is a cloud-based, cross-platform, social media and instant messaging (IM) service. It was originally launched for iOS on 14 August 2013 and Android on 20 October 2013. It allows users to exchange messages, share media and files, and hold private and group voice or video calls as well as public livestreams. It is available for Android, iOS, Windows, macOS, Linux, and web browsers. Telegram offers end-to-end encryption in voice and video calls, and in optional private chats, which Telegram calls Secret Chats.&lt;br /&gt;
&lt;br /&gt;
In June 2015, Telegram launched a platform for third-party developers to create bots. Bots are Telegram accounts operated by programs. They can respond to messages or mentions directly or can be invited into groups, and are able to perform tasks, integrate with other programs and host mini apps.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Telegram Bot ==&lt;br /&gt;
&lt;br /&gt;
The first step is to download the Telegram app and create an account, if you haven&#039;t done so already. Once you have an account you can search Telegram for the @BotFather. There are many people pretending to be the BotFather, likely to scam you, but make sure you click the one that actually says @BotFather.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-father.png]]&lt;br /&gt;
&lt;br /&gt;
His profile page also has some useful links such as [https://core.telegram.org/bots core.telegram.org/bots] and [https://core.telegram.org/bots/api core.telegram.org/bots/api]. Next click the start button at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-click-start.png]]&lt;br /&gt;
&lt;br /&gt;
A whole bunch of slash commands come up, but they&#039;re all useless until we run the first command he listed: /newbot&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-new-bot.png]]&lt;br /&gt;
&lt;br /&gt;
He&#039;ll ask you for a name for your bot. I picked HelioBot.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-name.png]]&lt;br /&gt;
&lt;br /&gt;
He&#039;ll also ask you for a username for your bot, and then give you the API token. Be sure to keep your token safe, and don&#039;t do anything dumb like uploading it to a wiki because then anyone who reads the wiki will have full control over your bot.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-api-token.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
Great! You have a bot now, and you have an API token, but it doesn&#039;t do anything without some code to run it. Let&#039;s fix that! [https://heliohost.org/login/ Login to your HelioHost account], continue to Plesk, and load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:File_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliotelebot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-heliotelebot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliotelebot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
from datetime import datetime, UTC&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
load_dotenv()&lt;br /&gt;
TOKEN = os.getenv(&#039;TELEGRAM_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
from telegram import Update&lt;br /&gt;
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes&lt;br /&gt;
&lt;br /&gt;
async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE) -&amp;gt; None:&lt;br /&gt;
    ts = datetime.now(UTC).strftime(&#039;%Y-%m-%d %H:%M:%S&#039;)&lt;br /&gt;
    print(f&amp;quot;[{ts}] Saying hello to {update.effective_user.first_name}.&amp;quot;)&lt;br /&gt;
    await update.message.reply_text(f&amp;quot;Hello {update.effective_user.first_name}, you have created a Telegram bot on HelioHost!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
app = ApplicationBuilder().token(TOKEN).build()&lt;br /&gt;
app.add_handler(CommandHandler(&amp;quot;hello&amp;quot;, hello))&lt;br /&gt;
app.run_polling()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliotelebot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-644-permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Telegram token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to talk to the BotFather and use the /token command to reset it. Anyone who has your token has full access to control your bot. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-telegram-token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;TELEGRAM_TOKEN=&#039; as shown. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Telegram bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new index.sh file. Remember to update the bot filename if you&#039;re not using heliotelebot.py like this guide says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit this to match your bot filename&lt;br /&gt;
bot_name=&amp;quot;heliotelebot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
username=`whoami`&lt;br /&gt;
pwd=`printenv|grep &#039;^PWD&#039;|cut -f2 -d&#039;=&#039;`&lt;br /&gt;
main_domain=`echo &amp;quot;$pwd&amp;quot;|cut -f3 -d&#039;/&#039;`&lt;br /&gt;
control=`echo &amp;quot;$pwd&amp;quot;|cut -f5 -d&#039;/&#039;`&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username &amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/$control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;lt;script&amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;lt;script&amp;gt;setInterval(\&amp;quot;window.location.replace(&#039;/$control/&#039;);\&amp;quot;, 2000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; $pwd/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the variable at the top of the file to match your bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliotelebot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to yourdomain.helioho.st/bot_control/ and when you click Start it should start the bot. You can check if the bot is running by going to t.me/YourBotName on Telegram. If everything is working you should be able to type /hello and it will reply to you.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-hello.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 60 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Automatically Restarting the Bot ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve had a lot of people ask us if we intentionally stop their bots after 60 minutes or so. The answer is no. The only time we kill processes automatically is if your account got suspended for high load. In our testing the bots can run for weeks or longer without needing to be restarted. Our servers are stable enough to run for months or years without a reboot as well. The issue is undoubtedly that people write bad code that crashes, but rather than admitting that their code is buggy, it&#039;s easier to just blame us.&lt;br /&gt;
&lt;br /&gt;
If your bot keeps stopping on its own, the best solution is to check the logs and fix the issue. If there is nothing shown in the logs that means you need to add more logging to your code to figure out why it&#039;s crashing. If you still can&#039;t figure it out you could enable auto-restart, but it&#039;s really just a crutch for buggy code rather than a real fix. If your bot code really is stable enough to run for weeks or months without crashing, auto-restart can also benefit you in the rare case of us rebooting the whole server, your bot will automatically start up as soon as the reboot is finished.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Enabling auto-restart could increase your chance of getting suspended. If you don&#039;t currently need your bot online we recommend shutting it down entirely rather than leaving it restarting over and over.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To set up auto-restart login to Plesk and navigate to:  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [ domain ] &amp;gt; Scheduled Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-scheduled-tasks.png]]&lt;br /&gt;
&lt;br /&gt;
Next, click &#039;Add Task&#039; and select the &#039;Fetch a URL&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:Plesk-schedule-a-task.png]]&lt;br /&gt;
&lt;br /&gt;
In the URL box put the start link from your bot_control page if you would click &#039;Start&#039;. The easiest way to get this value is to stop your bot, and then right click on the &#039;Start&#039; link, and &#039;Copy link address&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-start-link.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed this guide without changing too much it should be something like &#039;yourdomain.helioho.st/bot_control/?action=start&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-cron-job.png]]&lt;br /&gt;
&lt;br /&gt;
For those of you who want to minimize the downtime, and maximize your suspension chance you can set the schedule task up to run every minute like this with Cron Style and &#039;* * * * *&#039;. If everything is working correctly it will check if the bot is up every minute. Then if the bot is stopped it will restart it, and if the bot is already running it won&#039;t do anything.&lt;br /&gt;
&lt;br /&gt;
{{Danger|&lt;br /&gt;
Running a scheduled task every minute increases your load by quite a bit even if your bot never needs to be restarted. Simply checking if it has crashed causes some load. Worst case scenario: this scheduled tasks starts a new bot process every minute even though you already have a copy of the bot running, and you get suspended on [[:Tommy|Tommy]] or [[:Johnny|Johnny]] in record time, or reach the maximum billing on [[:Morty|Morty]] faster than anyone has ever dreamed possible.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Telegram_Bot&amp;diff=1654</id>
		<title>Telegram Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Telegram_Bot&amp;diff=1654"/>
		<updated>2025-03-16T02:39:23Z</updated>

		<summary type="html">&lt;p&gt;Krydos: Initial publication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
Telegram, also known as Telegram Messenger, is a cloud-based, cross-platform, social media and instant messaging (IM) service. It was originally launched for iOS on 14 August 2013 and Android on 20 October 2013. It allows users to exchange messages, share media and files, and hold private and group voice or video calls as well as public livestreams. It is available for Android, iOS, Windows, macOS, Linux, and web browsers. Telegram offers end-to-end encryption in voice and video calls, and in optional private chats, which Telegram calls Secret Chats.&lt;br /&gt;
&lt;br /&gt;
In June 2015, Telegram launched a platform for third-party developers to create bots. Bots are Telegram accounts operated by programs. They can respond to messages or mentions directly or can be invited into groups, and are able to perform tasks, integrate with other programs and host mini apps.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Telegram Bot ==&lt;br /&gt;
&lt;br /&gt;
The first step is to download the Telegram app and create an account, if you haven&#039;t done so already. Once you have an account you can search Telegram for the @BotFather. There are many people pretending to be the BotFather, likely to scam you, but make sure you click the one that actually says @BotFather.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-father.png]]&lt;br /&gt;
&lt;br /&gt;
His profile page also has some useful links such as [https://core.telegram.org/bots core.telegram.org/bots] and [https://core.telegram.org/bots/api core.telegram.org/bots/api]. Next click the start button at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-click-start.png]]&lt;br /&gt;
&lt;br /&gt;
A whole bunch of slash commands come up, but they&#039;re all useless until we run the first command he listed: /newbot&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-new-bot.png]]&lt;br /&gt;
&lt;br /&gt;
He&#039;ll ask you for a name for your bot. I picked HelioBot.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-name.png]]&lt;br /&gt;
&lt;br /&gt;
He&#039;ll also ask you for a username for your bot, and then give you the API token. Be sure to keep your token safe, and don&#039;t do anything dumb like uploading it to a wiki because then anyone who reads the wiki will have full control over your bot.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-api-token.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
Great! You have a bot now, and you have an API token, but it doesn&#039;t do anything without some code to run it. Let&#039;s fix that! [https://heliohost.org/login/ Login to your HelioHost account], continue to Plesk, and load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:File_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliotelebot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-heliotelebot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliotelebot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
from datetime import datetime, UTC&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
load_dotenv()&lt;br /&gt;
TOKEN = os.getenv(&#039;TELEGRAM_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
from telegram import Update&lt;br /&gt;
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes&lt;br /&gt;
&lt;br /&gt;
async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE) -&amp;gt; None:&lt;br /&gt;
    ts = datetime.now(UTC).strftime(&#039;%Y-%m-%d %H:%M:%S&#039;)&lt;br /&gt;
    print(f&amp;quot;[{ts}] Saying hello to {update.effective_user.first_name}.&amp;quot;)&lt;br /&gt;
    await update.message.reply_text(f&amp;quot;Hello {update.effective_user.first_name}, you have created a Telegram bot on HelioHost!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
app = ApplicationBuilder().token(TOKEN).build()&lt;br /&gt;
app.add_handler(CommandHandler(&amp;quot;hello&amp;quot;, hello))&lt;br /&gt;
app.run_polling()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliotelebot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-644-permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Telegram token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to talk to the BotFather and use the /token command to reset it. Anyone who has your token has full access to control your bot. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-telegram-token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;TELEGRAM_TOKEN=&#039; as shown. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Telegram bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new index.sh file. Remember to update the bot filename if you&#039;re not using heliotelebot.py like this guide says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit this to match your bot filename&lt;br /&gt;
bot_name=&amp;quot;heliotelebot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
username=`whoami`&lt;br /&gt;
pwd=`printenv|grep &#039;^PWD&#039;|cut -f2 -d&#039;=&#039;`&lt;br /&gt;
main_domain=`echo &amp;quot;$pwd&amp;quot;|cut -f3 -d&#039;/&#039;`&lt;br /&gt;
control=`echo &amp;quot;$pwd&amp;quot;|cut -f5 -d&#039;/&#039;`&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username &amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/$control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;lt;script&amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;lt;script&amp;gt;setInterval(\&amp;quot;window.location.replace(&#039;/$control/&#039;);\&amp;quot;, 2000);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; $pwd/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; $pwd/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; $pwd/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;lt;script&amp;gt;window.location.replace(&#039;/$control/&#039;);&amp;lt;/script&amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the variable at the top of the file to match your bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliotelebot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to yourdomain.helioho.st/bot_control/ and when you click Start it should start the bot. You can check if the bot is running by going to t.me/YourBotName on Telegram. If everything is working you should be able to type /hello and it will reply to you.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-hello.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-bot-dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 60 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Automatically Restarting the Bot ==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve had a lot of people ask us if we intentionally stop their bots after 60 minutes or so. The answer is no. The only time we kill processes automatically is if your account got suspended for high load. In our testing the bots can run for weeks or longer without needing to be restarted. Our servers are stable enough to run for months or years without a reboot as well. The issue is undoubtedly that people write bad code that crashes, but rather than admitting that their code is buggy, it&#039;s easier to just blame us.&lt;br /&gt;
&lt;br /&gt;
If your bot keeps stopping on its own, the best solution is to check the logs and fix the issue. If there is nothing shown in the logs that means you need to add more logging to your code to figure out why it&#039;s crashing. If you still can&#039;t figure it out you could enable auto-restart, but it&#039;s really just a crutch for buggy code rather than a real fix. If your bot code really is stable enough to run for weeks or months without crashing, auto-restart can also benefit you in the rare case of us rebooting the whole server, your bot will automatically start up as soon as the reboot is finished.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Enabling auto-restart could increase your chance of getting suspended. If you don&#039;t currently need your bot online we recommend shutting it down entirely rather than leaving it restarting over and over.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To set up auto-restart login to Plesk and navigate to:  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [ domain ] &amp;gt; Scheduled Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-scheduled-tasks.png]]&lt;br /&gt;
&lt;br /&gt;
Next, click &#039;Add Task&#039; and select the &#039;Fetch a URL&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:Plesk-schedule-a-task.png]]&lt;br /&gt;
&lt;br /&gt;
In the URL box put the start link from your bot_control page if you would click &#039;Start&#039;. The easiest way to get this value is to stop your bot, and then right click on the &#039;Start&#039; link, and &#039;Copy link address&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-start-link.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed this guide without changing too much it should be something like &#039;yourdomain.helioho.st/bot_control/?action=start&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Telegram-cron-job.png]]&lt;br /&gt;
&lt;br /&gt;
For those of you who want to minimize the downtime, and maximize your suspension chance you can set the schedule task up to run every minute like this with Cron Style and &#039;* * * * *&#039;. If everything is working correctly it will check if the bot is up every minute. Then if the bot is stopped it will restart it, and if the bot is already running it won&#039;t do anything.&lt;br /&gt;
&lt;br /&gt;
{{Danger|&lt;br /&gt;
Running a scheduled task every minute increases your load by quite a bit even if your bot never needs to be restarted. Simply checking if it has crashed causes some load. Worst case scenario: this scheduled tasks starts a new bot process every minute even though you already have a copy of the bot running, and you get suspended on [[:Tommy|Tommy]] or [[:Johnny|Johnny]] in record time, or reach the maximum billing on [[:Morty|Morty]] faster than anyone has ever dreamed possible.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Telegram-cron-job.png&amp;diff=1653</id>
		<title>File:Telegram-cron-job.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Telegram-cron-job.png&amp;diff=1653"/>
		<updated>2025-03-16T02:32:07Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Telegram-start-link.png&amp;diff=1652</id>
		<title>File:Telegram-start-link.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Telegram-start-link.png&amp;diff=1652"/>
		<updated>2025-03-16T02:25:20Z</updated>

		<summary type="html">&lt;p&gt;Krydos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1651</id>
		<title>Discord Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Discord_Bot&amp;diff=1651"/>
		<updated>2025-03-15T21:50:22Z</updated>

		<summary type="html">&lt;p&gt;Krydos: /* Starting and Stopping Your Bot */ Updated index.sh code to help prevent multiple bots running at the same time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preface ==&lt;br /&gt;
&lt;br /&gt;
This guide will work on any of the HelioHost servers.&lt;br /&gt;
&lt;br /&gt;
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python&#039;s simple, easy to learn syntax emphasizes readability and therefore reduces the cost of program maintenance. Python supports modules and packages, which encourages program modularity and code reuse.&lt;br /&gt;
&lt;br /&gt;
The Discord app works with desktop and mobile platforms, combining the features of a chat lobby, a message board and a VoIP chatting system into one app that&#039;s not going to hog resources on your phone or PC. Discord&#039;s popularity has only multiplied in recent years, with the app now reaching over 90 million registered users.&lt;br /&gt;
&lt;br /&gt;
Bots and apps are the lifeblood of the Discord development community. They come in all shapes and sizes, from small hobby projects for your server with friends, to huge projects that live in hundreds of thousands of servers. We love seeing the unique, fun, and sometimes downright strange (in a good way) creations that come from our community.&lt;br /&gt;
&lt;br /&gt;
== How to get Started with a Discord Bot ==&lt;br /&gt;
&lt;br /&gt;
First you&#039;ll need to have a Discord account, and a Discord channel that you&#039;ll add the bot to later. Here&#039;s a [https://www.howtogeek.com/364075/how-to-create-set-up-and-manage-your-discord-server/ good guide] to get started.&lt;br /&gt;
&lt;br /&gt;
== Create the Bot ==&lt;br /&gt;
&lt;br /&gt;
Once you have your Discord server all set up it&#039;s time to create the bot through Discord&#039;s site. Go to [https://discordapp.com/developers/applications discordapp.com/developers/applications] and make sure you&#039;re logged in. Then click &#039;New Application&#039; in the top right.&lt;br /&gt;
&lt;br /&gt;
[[File:New_application.png]]&lt;br /&gt;
&lt;br /&gt;
Type a name and hit create. I decided to name my bot &#039;HelioBot&#039;.&lt;br /&gt;
&lt;br /&gt;
== Add the Bot to your Discord Server ==&lt;br /&gt;
&lt;br /&gt;
Click &#039;OAuth2&#039; on the left navigation.&lt;br /&gt;
&lt;br /&gt;
[[File:oauth2.png]]&lt;br /&gt;
&lt;br /&gt;
Then check the bot box under &#039;SCOPES&#039;, and scroll down and select &#039;Administrator&#039; under &#039;BOT PERMISSIONS&#039;. You could select the exact permissions that your bot needs one by one, but for this simple example it&#039;s easier to just allow the bot permission to do everything.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Click copy next to the URL that is generated and open that URL in a new tab. Then, select your Discord server from the dropdown menu.&lt;br /&gt;
&lt;br /&gt;
[[File:add_to_server.png]]&lt;br /&gt;
&lt;br /&gt;
Click &#039;Authorize&#039; and complete the reCAPTCHA to add the bot to the Discord server. If you go to your Discord now you can see the bot on the offline user list.&lt;br /&gt;
&lt;br /&gt;
[[File:offline_bot.png]]&lt;br /&gt;
&lt;br /&gt;
== Write the Bot Script in Python ==&lt;br /&gt;
&lt;br /&gt;
[https://heliohost.org/login Log in] and continue to Plesk. Then load up the file manager.&lt;br /&gt;
&lt;br /&gt;
[[File:file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
In the top left corner click the &#039;+&#039; plus sign, and select &#039;Create File&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:plus_file.png]]&lt;br /&gt;
&lt;br /&gt;
Then type the name of your new file: &#039;heliobot.py&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:create_heliobot.png]]&lt;br /&gt;
&lt;br /&gt;
You want to create this bot in your home directory so random hackers and bots on the internet can&#039;t access it directly. Make sure it says &#039;Add a file to: /&#039; not &#039;Add a file to: /httpdocs&#039; or any other folder.&lt;br /&gt;
&lt;br /&gt;
Scroll down in the file manager and click on the new &#039;heliobot.py&#039; file to edit it. Then copy/paste this code in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import discord&lt;br /&gt;
from dotenv import load_dotenv&lt;br /&gt;
&lt;br /&gt;
load_dotenv()&lt;br /&gt;
token = os.getenv(&#039;DISCORD_TOKEN&#039;)&lt;br /&gt;
&lt;br /&gt;
import certifi&lt;br /&gt;
os.environ[&amp;quot;SSL_CERT_FILE&amp;quot;] = certifi.where()&lt;br /&gt;
&lt;br /&gt;
client = discord.Client(intents=discord.Intents.default())&lt;br /&gt;
&lt;br /&gt;
class MyClient(discord.Client):&lt;br /&gt;
    async def on_ready(self):&lt;br /&gt;
        print(f&#039;Logged in as {self.user} (ID: {self.user.id})&#039;)&lt;br /&gt;
        print(&#039;------&#039;)&lt;br /&gt;
&lt;br /&gt;
    async def on_message(self, message):&lt;br /&gt;
        # we do not want the bot to reply to itself&lt;br /&gt;
        if message.author.id == self.user.id:&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        if message.content.startswith(&#039;!hello&#039;):&lt;br /&gt;
            await message.reply(&#039;Hello!&#039;, mention_author=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intents = discord.Intents.default()&lt;br /&gt;
intents.message_content = True&lt;br /&gt;
&lt;br /&gt;
client = MyClient(intents=intents)&lt;br /&gt;
client.run(token)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line is called the shebang, and it tells the system which version of Python you want to use. Morty, Tommy, and Johnny also have Python 3.9, but we recommend using Python 3.12 like in the example.&lt;br /&gt;
&lt;br /&gt;
Once you have your code copy/pasted in click save in the bottom left corner. Now we need the bot to be executable so in the file manager click the &#039;rw- r-- r--&#039; on the heliobot.py line. &lt;br /&gt;
&lt;br /&gt;
[[File:change_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Check all three of the &#039;Execute/Search&#039; boxes so it looks like this and then click save in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
Now we need to provide our Discord token to the bot so click the &#039;+&#039; plus sign, and select &#039;Create File&#039; again and this time name the file &#039;.env&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:dot_env.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure you start the filename with a period.&#039;&#039;&#039; It&#039;s easy to miss that in the screenshot. This file needs to be in the &#039;&#039;&#039;same&#039;&#039;&#039; directory as your Python script.&lt;br /&gt;
&lt;br /&gt;
Go back to the Discord bot page and click bot on the left navigation again.&lt;br /&gt;
&lt;br /&gt;
[[File:select_bot.png]]&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do on this page is enable &#039;Presence Intent&#039;, &#039;Server Members Intent&#039;, and &#039;Message Content Intent&#039;. If you&#039;re sure your bot doesn&#039;t need all three of these enable just what you need, but for simplicity of this guide we&#039;re going to enable all three, and then save the changes.&lt;br /&gt;
&lt;br /&gt;
[[File:discord_intents.png]]&lt;br /&gt;
&lt;br /&gt;
On the same page click the &#039;Reset Token&#039; button, and then copy/paste the token.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_token.png]]&lt;br /&gt;
&lt;br /&gt;
If you ever think someone has gotten your token, for instance if you posted it on a public wiki like I just did, be sure to come back to this page and reset it. Anyone who has your token can do whatever permissions you granted your bot to your server. Now you need to paste this token into your &#039;.env&#039; file that you created. So go back to the Plesk file manager and click the &#039;.env&#039; file to edit it. Paste the token into the file like this:&lt;br /&gt;
&lt;br /&gt;
[[File:paste_the_token.png]]&lt;br /&gt;
&lt;br /&gt;
Make sure the line starts with &#039;DISCORD_TOKEN=&#039; like that. Then click &#039;Save Changes&#039; and close the tab. Saving your token separate from your Python code is good practice because this way you can share the code on GitHub or something like that without worrying about people getting access to your bot.&lt;br /&gt;
&lt;br /&gt;
== Starting and Stopping Your Bot ==&lt;br /&gt;
&lt;br /&gt;
You have a functional bot now, but you need a way to start and stop it.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Side note: Previous versions of this guide used Python scripts to start and stop the Discord bot. Unfortunately, the people who wanted to write their bot in Node.js always complained that they didn&#039;t want to use Python for anything. Likewise, if we used Node.js to start and stop the bot, the Python people would inevitably complain about not wanting to use Node.js for anything. Therefore, we wrote the start and stop scripts in Bash CGI to make absolutely sure that no one is happy.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
We&#039;ll use Bash CGI to do that so you can control your bot through your web page. With the file manager, navigate to &#039;/httpdocs&#039; and create a new directory called &#039;bot_control&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_control.png]]&lt;br /&gt;
&lt;br /&gt;
Now create a new file named &#039;.htaccess&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_htaccess.png]]&lt;br /&gt;
&lt;br /&gt;
Paste this code into the new &#039;.htaccess&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .sh&lt;br /&gt;
DirectoryIndex index.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next create a new file named &#039;index.sh&#039; in the &#039;/httpdocs/bot_control&#039; directory.&lt;br /&gt;
&lt;br /&gt;
[[File:create_indexsh.png]]&lt;br /&gt;
&lt;br /&gt;
Paste the code below into the new file. Remember to use either &#039;helio&#039;&#039;&#039;ho.st&#039;&#039;&#039;&#039; or &#039;helioho&#039;&#039;&#039;st.us&#039;&#039;&#039;&#039; at the end of your domain, unless you&#039;re one of the very few users who still have a legacy heliohost.org domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# edit these to match your username, main domain, and bot filename&lt;br /&gt;
username=&amp;quot;krydos&amp;quot;&lt;br /&gt;
main_domain=&amp;quot;krydos.heliohost.org&amp;quot;&lt;br /&gt;
bot_name=&amp;quot;heliobot.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###################################################################&lt;br /&gt;
&lt;br /&gt;
printf &#039;Content-Type: text/html\n\n&#039;&lt;br /&gt;
temp=`ps axo user:16,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,command|grep -v grep|grep &amp;quot;^$username&amp;quot;`&lt;br /&gt;
running=`echo &amp;quot;$temp&amp;quot;|grep -c &amp;quot;$bot_name&amp;quot;`&lt;br /&gt;
file_base=`echo $bot_name|tr -cd &amp;quot;a-zA-Z0-9&amp;quot;`&lt;br /&gt;
log_name=&amp;quot;$file_base.txt&amp;quot;&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        mem_kb=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|awk &#039;{print $6}&#039;`&lt;br /&gt;
        mem_mb=$( echo &amp;quot;scale=2;$mem_kb/1024&amp;quot;|bc )&lt;br /&gt;
        mem_24=$( echo &amp;quot;scale=2;$mem_kb*1440/1048576&amp;quot;|bc )&lt;br /&gt;
        echo &amp;quot;$bot_name is running. &amp;lt;a href=&#039;?action=stop&#039;&amp;gt;Stop&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Current memory usage: $mem_mb MB&amp;lt;br&amp;gt;Estimated 24 hour usage: $mem_24 GB - &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;$bot_name is not running. &amp;lt;a href=&#039;?action=start&#039;&amp;gt;Start&amp;lt;/a&amp;gt; - &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;&amp;lt;a href=&#039;https://heliohost.org/dashboard/load/&#039; target=&#039;_blank&#039;&amp;gt;Check Load&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Logs: &amp;lt;a href=&#039;?action=clear&#039;&amp;gt;Clear Logs&amp;lt;/a&amp;gt; - &amp;lt;a href=&#039;/bot_control/$log_name&#039;&amp;gt;Full Logs&amp;lt;/a&amp;gt;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    tail -30 /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    echo &amp;quot;&amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;script&amp;amp;gt;reloading = setTimeout(&#039;window.location.reload();&#039;, 10000);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
ts=`date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;`&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=stop&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;[$ts] Stopping $bot_name.&amp;quot; &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    pid=`echo &amp;quot;$temp&amp;quot;|grep &amp;quot;$bot_name&amp;quot;|tail -1|awk &#039;{print $2}&#039;`&lt;br /&gt;
    if [ ${#pid} -ne 0 ]; then&lt;br /&gt;
        kill $pid&lt;br /&gt;
    fi&lt;br /&gt;
    echo &amp;quot;Stopping $bot_name...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=start&amp;quot; ]; then&lt;br /&gt;
    if [ $running -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;$bot_name is already running...&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;[$ts] Starting $bot_name.&amp;quot; &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
        /usr/bin/python3.12 -u /home/$main_domain/$bot_name &amp;gt;&amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
        echo &amp;quot;Starting $bot_name...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
if [ &amp;quot;$QUERY_STRING&amp;quot; == &amp;quot;action=clear&amp;quot; ]; then&lt;br /&gt;
    cat /dev/null &amp;gt; /home/$main_domain/httpdocs/bot_control/$log_name&lt;br /&gt;
    echo &amp;quot;Clearing logs...&amp;amp;lt;script&amp;amp;gt;window.location.replace(&#039;/bot_control/&#039;);&amp;amp;lt;/script&amp;amp;gt;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to edit the three variables at the top of the file to match your username, main domain, and bot filename.&lt;br /&gt;
&lt;br /&gt;
Now, we need to set the permissions of this &#039;index.sh&#039; file to be executable. On the file manager click the &#039;rw- r-- r--&#039; and check all the &#039;Execute/Search&#039; boxes just like we did the heliobot.py file earlier.&lt;br /&gt;
&lt;br /&gt;
[[File:755_permissions.png]]&lt;br /&gt;
&lt;br /&gt;
== Test It Out ==&lt;br /&gt;
&lt;br /&gt;
Now everything should be ready to be tested. Open your browser and go to &#039;yourdomain.helioho.st/bot_control/&#039; and when you click Start it should start the bot. You can check if the bot is running by going to Discord and seeing if HelioBot is showing up as online now. If it is, test it out by typing the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
!hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should respond to you.&lt;br /&gt;
&lt;br /&gt;
[[File:testing_discord_bot.png]]&lt;br /&gt;
&lt;br /&gt;
If it doesn&#039;t work go back and check all the steps again to make sure you did everything correctly. You can also check out the logs in the bot_control dashboard to see if there is any errors listed. For example, if you try to import a modules that isn&#039;t already installed it will give an error like this:&lt;br /&gt;
&lt;br /&gt;
[[File:bot_error.png]]&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t figure out what is wrong let us know by opening [https://helionet.org/index/forum/45-customer-service/?do=add a customer service ticket].&lt;br /&gt;
&lt;br /&gt;
== Watch Your Account Load ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|Bots use a lot of system resources so we recommend [https://heliohost.org/dashboard/load/ keeping an eye on your account load].}}&lt;br /&gt;
&lt;br /&gt;
We enforce a memory limit of no more than {{Template:MemoryLimit}} per day and a limit of {{Template:CPULimit}} usage per day on our shared hosting servers.&lt;br /&gt;
* On the [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, if you exceed these limits, your account will be suspended.&lt;br /&gt;
* On the [[:Morty|Morty]] server, if you exceed these limits, we will charge you for overages.&lt;br /&gt;
&lt;br /&gt;
On the bot_control dashboard it shows the current memory usage, and the estimated usage over the next 24 hours if your bot continues using the same amount of memory.&lt;br /&gt;
&lt;br /&gt;
[[File:bot_dashboard.png]]&lt;br /&gt;
&lt;br /&gt;
If you followed the guide exactly your bot will use about 50 GB of memory per day, which is 1/4 of your allowed amount. If you edit your bot code, make your bot more complicated, and import more modules it will increase the memory usage though. Obviously if you have some sort of memory leak it could easily allow your bot to continue consuming more and more memory until you get [[:Suspension_Policy#High_Server_Usage|suspended]] on [[:Tommy]] and [[:Johnny]], or charged for overages on [[:Morty|Morty]].&lt;br /&gt;
&lt;br /&gt;
If everything is working you can shut your bot down by clicking the Stop button on the bot_control dashboard. It&#039;s a good idea to keep your bot offline if you don&#039;t need it so you don&#039;t cause too much load. If you&#039;re having trouble staying under the limits you could also consider [https://heliohost.org/dashboard/move/?move=morty-prepay moving to the Morty plan] where there is no load limit, or [https://heliohost.org/vps/ moving to a VPS] where you have root SSH access, dedicated memory, dedicated CPU, and no load limits. You can get a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Krydos</name></author>
	</entry>
</feed>