<?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=KazVee</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=KazVee"/>
	<link rel="alternate" type="text/html" href="https://wiki.helionet.org/Special:Contributions/KazVee"/>
	<updated>2026-04-08T19:47:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=PHP&amp;diff=2239</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=PHP&amp;diff=2239"/>
		<updated>2026-04-05T15:57:24Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new &amp;#039;PHP Configuration Limits&amp;#039; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PHP ==&lt;br /&gt;
&lt;br /&gt;
PHP is the most popular scripting language on the Internet for a reason. It&#039;s easy to learn and easy to implement, yet is powerful enough to suit almost every task. Unlike some other languages, PHP is not explicitly linked with any programming paradigms, allowing for more flexible development. HelioHost offers the latest versions of PHP on all its hosting accounts. We are unique in that we offer PHP without safe mode, which is the more secure but less functional alternative that you&#039;ll find on most free hosts.&lt;br /&gt;
&lt;br /&gt;
== PHP Versions Supported ==&lt;br /&gt;
&lt;br /&gt;
The PHP versions supported on each server are listed below. To see the PHP packages installed for each version, click on the &#039;phpinfo()&#039; link. To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Morty server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 || [https://php85.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Tommy server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Johnny server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lily server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Lily server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.5&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.1&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.2&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Packages Installed ==&lt;br /&gt;
&lt;br /&gt;
=== Inside Plesk === &lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to view which PHP packages are installed:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; click on the &#039; View the phpinfo() page&#039; link&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
[[File:View-phpinfo.png]]&lt;br /&gt;
&lt;br /&gt;
=== View phpinfo() page === &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a HelioHost account to access information within Plesk, you can view the installed PHP packages for the available PHP versions on our servers by checking [[#PHP_Versions_Supported|the relevant phpinfo() page links here]].&lt;br /&gt;
&lt;br /&gt;
== Request Additional PHP Packages == &lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:PHP#PHP_Packages_Installed|list of packages already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the [[:PHP#PHP_Packages_Installed|list of packages already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a package name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request packages that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:PHP#PHP_Packages_Installed|list of packages already installed]], if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:PHP#PHP_Packages_Installed|list of packages already installed]] on your server for the version of PHP you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of PHP you&#039;re using.&lt;br /&gt;
# The package(s) you need, including any specific version numbers.&lt;br /&gt;
&lt;br /&gt;
== PHP Configuration Limits == &lt;br /&gt;
&lt;br /&gt;
On the [[:Morty]], [[:Tommy]], and [[:Johnny]] shared hosting accounts, the &#039;&#039;&#039;memory_limit&#039;&#039;&#039; and &#039;&#039;&#039;max_execution_time&#039;&#039;&#039; are intentionally limited to prevent excessive load to all users on the server. If you need these values increased, it&#039;s likely you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
If you are installing something that requires larger uploads, you can request a temporary increase to the &#039;&#039;&#039;post_max_size&#039;&#039;&#039; and &#039;&#039;&#039;upload_max_filesize&#039;&#039;&#039; values. Approval is not guaranteed, and any changes will be reverted after installation.&lt;br /&gt;
&lt;br /&gt;
To request a temporary increase of the upload and post sizes, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of PHP you&#039;re using.&lt;br /&gt;
# What you&#039;re trying to install.&lt;br /&gt;
# What values your installer is requesting for the &#039;&#039;&#039;post_max_size&#039;&#039;&#039; and &#039;&#039;&#039;upload_max_filesize&#039;&#039;&#039; values.&lt;br /&gt;
&lt;br /&gt;
== Using proc_open(), exec(), popen(), etc. ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Learning PHP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&amp;lt;?php&#039; is the opening braces and &#039;?&amp;gt;&#039; is the closing braces for PHP.&lt;br /&gt;
&lt;br /&gt;
Here is a sample hello world file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  echo &amp;quot;Hello World!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good tutorial can be found here: [https://blog.udemy.com/php-tutorial/ https://blog.udemy.com/php-tutorial].&lt;br /&gt;
&lt;br /&gt;
== Change PHP Version ==&lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to change your PHP version inside Plesk:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; select PHP version from the dropdown menu&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-change-php-version.png]]&lt;br /&gt;
&lt;br /&gt;
After the PHP version is changed, you will see a confirmation message that contains the timeframe for the change to take effect:&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-php-change-120-min.png]]&lt;br /&gt;
&lt;br /&gt;
== PHP Version Changes Take Up To 2 Hours ==&lt;br /&gt;
&lt;br /&gt;
{{Info|PHP version changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=PHP&amp;diff=2238</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=PHP&amp;diff=2238"/>
		<updated>2026-04-05T15:40:32Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new &amp;#039;Request Additional PHP Packages&amp;#039; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PHP ==&lt;br /&gt;
&lt;br /&gt;
PHP is the most popular scripting language on the Internet for a reason. It&#039;s easy to learn and easy to implement, yet is powerful enough to suit almost every task. Unlike some other languages, PHP is not explicitly linked with any programming paradigms, allowing for more flexible development. HelioHost offers the latest versions of PHP on all its hosting accounts. We are unique in that we offer PHP without safe mode, which is the more secure but less functional alternative that you&#039;ll find on most free hosts.&lt;br /&gt;
&lt;br /&gt;
== PHP Versions Supported ==&lt;br /&gt;
&lt;br /&gt;
The PHP versions supported on each server are listed below. To see the PHP packages installed for each version, click on the &#039;phpinfo()&#039; link. To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Morty server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 || [https://php85.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Tommy server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Johnny server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lily server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Lily server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.5&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.1&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.2&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Packages Installed ==&lt;br /&gt;
&lt;br /&gt;
=== Inside Plesk === &lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to view which PHP packages are installed:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; click on the &#039; View the phpinfo() page&#039; link&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
[[File:View-phpinfo.png]]&lt;br /&gt;
&lt;br /&gt;
=== View phpinfo() page === &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a HelioHost account to access information within Plesk, you can view the installed PHP packages for the available PHP versions on our servers by checking [[#PHP_Versions_Supported|the relevant phpinfo() page links here]].&lt;br /&gt;
&lt;br /&gt;
== Request Additional PHP Packages == &lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:PHP#PHP_Packages_Installed|list of packages already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the [[:PHP#PHP_Packages_Installed|list of packages already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a package name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request packages that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:PHP#PHP_Packages_Installed|list of packages already installed]], if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:PHP#PHP_Packages_Installed|list of packages already installed]] on your server for the version of PHP you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of PHP you&#039;re using.&lt;br /&gt;
# The package(s) you need, including any specific version numbers.&lt;br /&gt;
 &lt;br /&gt;
== Using proc_open(), exec(), popen(), etc. ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Learning PHP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&amp;lt;?php&#039; is the opening braces and &#039;?&amp;gt;&#039; is the closing braces for PHP.&lt;br /&gt;
&lt;br /&gt;
Here is a sample hello world file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  echo &amp;quot;Hello World!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good tutorial can be found here: [https://blog.udemy.com/php-tutorial/ https://blog.udemy.com/php-tutorial].&lt;br /&gt;
&lt;br /&gt;
== Change PHP Version ==&lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to change your PHP version inside Plesk:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; select PHP version from the dropdown menu&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-change-php-version.png]]&lt;br /&gt;
&lt;br /&gt;
After the PHP version is changed, you will see a confirmation message that contains the timeframe for the change to take effect:&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-php-change-120-min.png]]&lt;br /&gt;
&lt;br /&gt;
== PHP Version Changes Take Up To 2 Hours ==&lt;br /&gt;
&lt;br /&gt;
{{Info|PHP version changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2237</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2237"/>
		<updated>2026-04-04T17:38:07Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add note that modules already installed on the server can be used right away&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of Python modules already installed]] on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2236</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2236"/>
		<updated>2026-04-04T17:28:52Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add internal link so users can find how to check the list of modules already installed&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, find use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the [[:Flask#Viewing_Installed_Python_Modules|list of Python modules already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 Flask 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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2235</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=2235"/>
		<updated>2026-04-04T17:28:12Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add internal links so users can find how to check the list of modules already installed&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of Python modules already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2234</id>
		<title>Python Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2234"/>
		<updated>2026-04-04T17:27:06Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add internal links so users can find how to check the list of modules already installed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started with Python on a server is with CGI. The only real difference between CGI and running the script on your home computer is that CGI needs to output a &#039;Content-Type&#039; header.&lt;br /&gt;
&lt;br /&gt;
{{Info|We also have tutorials for building with [[:Flask|Flask]], [[:Django_on_HelioHost|creating a new Django project]], and [[:Converting_an_Existing_Django_App|converting an existing Django app to work on HelioHost]].}}&lt;br /&gt;
&lt;br /&gt;
== Python Versions Available ==&lt;br /&gt;
&lt;br /&gt;
Below are details of the Python versions available on each server, and links to view the Python modules already installed.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Installed Python Modules ===&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&lt;br /&gt;
&lt;br /&gt;
=== Morty Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos3.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tommy Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos1.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Johnny Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos2.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Open the File Manager in Plesk&lt;br /&gt;
* Open the &#039;httpdocs&#039; webroot directory. (If you were transferred from the old cPanel, the directory will be called &#039;public_html&#039;.)&lt;br /&gt;
* Open the &#039;cgi-bin&#039; directory&lt;br /&gt;
* In the top left click the &#039;+&#039; button and select &#039;Create File&#039;&lt;br /&gt;
* Type &#039;test.py&#039; as your filename&lt;br /&gt;
* Click &#039;OK&#039; to create the file&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Change Permissions&#039;&lt;br /&gt;
* Add a checkmark to the &#039;Execute / Search&#039; column for all three rows (Owner / Group / Others)&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Make sure &#039;rwx r-x r-x&#039; (&#039;755&#039;) is displayed under the Permissions column&lt;br /&gt;
* Highlight &#039;test.py&#039; and select &#039;Edit in Text Editor&#039;&lt;br /&gt;
* Leave &#039;UTF-8&#039; as the encoding, set &#039;Line break type&#039; to &#039;Convert to Unix style&#039; and copy/paste the below into the large text field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Content-Type: text/html\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Heliohost rules!&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Open in Browser&#039; (Or manually navigate to: &#039;&amp;lt;your subdomain&amp;gt;.helioho.st/cgi-bin/test.py&#039;)&lt;br /&gt;
&lt;br /&gt;
If everything worked, you should see &#039;HelioHost rules!&#039; displayed in your browser. &lt;br /&gt;
&lt;br /&gt;
== Code Explanation ==&lt;br /&gt;
&lt;br /&gt;
In the code pasted in, the first line is called the &#039;shebang&#039;. It tells the server which version of Python to use. &lt;br /&gt;
&lt;br /&gt;
The second line of code is the &#039;Content-Type&#039; header. This is important so the server knows what to do with the output that follows. If you forget it, your script will give you an error. The &#039;Content-Type&#039; header always has to have the two end lines immediately after it. That&#039;s what the two &#039;\n&#039; are.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the module you need, your script will probably give you an error when you try to import the missing module. You can [[View_Error_Logs|view your account error logs]] for details on which module is missing and causing the error.&lt;br /&gt;
&lt;br /&gt;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&lt;br /&gt;
&lt;br /&gt;
== Running Python scripts outside cgi-bin folder ==&lt;br /&gt;
&lt;br /&gt;
Executing a CGI script outside the &#039;cgi-bin&#039; folder is possible with some modifications.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Go to &#039;/home/&amp;lt;your username&amp;gt;/httpdocs&#039;. (If you were transferred from the old cPanel, the folder will be called &#039;public_html&#039;)&lt;br /&gt;
* Create a file named &#039;.htaccess&#039; and copy/paste the below in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .py&lt;br /&gt;
DirectoryIndex index.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines make &#039;.py&#039; files executable outside &#039;cgi-bin&#039;, and the last line makes the filename &#039;index.py&#039; show up if someone goes to your domain without having to type out the filename like &#039;domain.helioho.st/index.py&#039;. This also supports other CGI file extensions.&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;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2233</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=2233"/>
		<updated>2026-04-04T17:25:04Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add internal links so users know how to check the list of modules already installed&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Converting_an_Existing_Django_App#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2232</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2232"/>
		<updated>2026-04-04T17:22:33Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add internal links so users can find the list of modules already installed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of Python modules already installed]] on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]], press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Django_on_HelioHost#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2231</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2231"/>
		<updated>2026-04-04T17:18:17Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add note that installed modules can be used right away, change header to &amp;#039;Viewing Installed Python Modules&amp;#039; from &amp;#039;Django Versions Available&amp;#039; for clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules already installed on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2230</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=2230"/>
		<updated>2026-04-04T17:15:51Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add note that installed modules can be used right away, change header to &amp;#039;Viewing Installed Python Modules&amp;#039; from &amp;#039;Django Versions Available&amp;#039; for clarity&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules already installed on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2229</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2229"/>
		<updated>2026-04-04T17:12:27Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add another internal link so users can find the list of modules already installed&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, find use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 Flask 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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2228</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2228"/>
		<updated>2026-04-04T16:54:21Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Move &amp;#039;Request Additional Python Modules&amp;#039; section to below the servers list, add internal links&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, find use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&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;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Flask#Viewing_Installed_Python_Modules|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 Flask 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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2227</id>
		<title>Python Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2227"/>
		<updated>2026-04-04T16:42:40Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Additional clarity that installed modules can be used right away&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started with Python on a server is with CGI. The only real difference between CGI and running the script on your home computer is that CGI needs to output a &#039;Content-Type&#039; header.&lt;br /&gt;
&lt;br /&gt;
{{Info|We also have tutorials for building with [[:Flask|Flask]], [[:Django_on_HelioHost|creating a new Django project]], and [[:Converting_an_Existing_Django_App|converting an existing Django app to work on HelioHost]].}}&lt;br /&gt;
&lt;br /&gt;
== Python Versions Available ==&lt;br /&gt;
&lt;br /&gt;
Below are details of the Python versions available on each server, and links to view the Python modules already installed.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Installed Python Modules ===&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&lt;br /&gt;
&lt;br /&gt;
=== Morty Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos3.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tommy Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos1.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Johnny Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos2.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Open the File Manager in Plesk&lt;br /&gt;
* Open the &#039;httpdocs&#039; webroot directory. (If you were transferred from the old cPanel, the directory will be called &#039;public_html&#039;.)&lt;br /&gt;
* Open the &#039;cgi-bin&#039; directory&lt;br /&gt;
* In the top left click the &#039;+&#039; button and select &#039;Create File&#039;&lt;br /&gt;
* Type &#039;test.py&#039; as your filename&lt;br /&gt;
* Click &#039;OK&#039; to create the file&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Change Permissions&#039;&lt;br /&gt;
* Add a checkmark to the &#039;Execute / Search&#039; column for all three rows (Owner / Group / Others)&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Make sure &#039;rwx r-x r-x&#039; (&#039;755&#039;) is displayed under the Permissions column&lt;br /&gt;
* Highlight &#039;test.py&#039; and select &#039;Edit in Text Editor&#039;&lt;br /&gt;
* Leave &#039;UTF-8&#039; as the encoding, set &#039;Line break type&#039; to &#039;Convert to Unix style&#039; and copy/paste the below into the large text field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Content-Type: text/html\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Heliohost rules!&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Open in Browser&#039; (Or manually navigate to: &#039;&amp;lt;your subdomain&amp;gt;.helioho.st/cgi-bin/test.py&#039;)&lt;br /&gt;
&lt;br /&gt;
If everything worked, you should see &#039;HelioHost rules!&#039; displayed in your browser. &lt;br /&gt;
&lt;br /&gt;
== Code Explanation ==&lt;br /&gt;
&lt;br /&gt;
In the code pasted in, the first line is called the &#039;shebang&#039;. It tells the server which version of Python to use. &lt;br /&gt;
&lt;br /&gt;
The second line of code is the &#039;Content-Type&#039; header. This is important so the server knows what to do with the output that follows. If you forget it, your script will give you an error. The &#039;Content-Type&#039; header always has to have the two end lines immediately after it. That&#039;s what the two &#039;\n&#039; are.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the module you need, your script will probably give you an error when you try to import the missing module. You can [[View_Error_Logs|view your account error logs]] for details on which module is missing and causing the error.&lt;br /&gt;
&lt;br /&gt;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&lt;br /&gt;
&lt;br /&gt;
== Running Python scripts outside cgi-bin folder ==&lt;br /&gt;
&lt;br /&gt;
Executing a CGI script outside the &#039;cgi-bin&#039; folder is possible with some modifications.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Go to &#039;/home/&amp;lt;your username&amp;gt;/httpdocs&#039;. (If you were transferred from the old cPanel, the folder will be called &#039;public_html&#039;)&lt;br /&gt;
* Create a file named &#039;.htaccess&#039; and copy/paste the below in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .py&lt;br /&gt;
DirectoryIndex index.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines make &#039;.py&#039; files executable outside &#039;cgi-bin&#039;, and the last line makes the filename &#039;index.py&#039; show up if someone goes to your domain without having to type out the filename like &#039;domain.helioho.st/index.py&#039;. This also supports other CGI file extensions.&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;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2226</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=2226"/>
		<updated>2026-04-04T16:42:12Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Additional clarity that installed modules can be used right away&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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules already installed on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2225</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2225"/>
		<updated>2026-04-04T16:40:40Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Additional clarity that installed modules can be used right away&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed on your server.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules already installed on your server, 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2224</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2224"/>
		<updated>2026-04-04T16:38:00Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new Step 1 that users should confirm they already checked the list of installed modules&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;
== Viewing Installed Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, find use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away.}}&lt;br /&gt;
&lt;br /&gt;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and can be used right away, so you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules already installed on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 Flask 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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2223</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=2223"/>
		<updated>2026-04-04T16:22:35Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new Step 1 that users should confirm they already checked the list of installed modules&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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server for the version of Python you&#039;re using.&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2222</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2222"/>
		<updated>2026-04-04T16:19:22Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new Step 1 that users should confirm they already checked the list of installed modules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules 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]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2221</id>
		<title>Python Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2221"/>
		<updated>2026-04-04T16:13:56Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Removed extra word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started with Python on a server is with CGI. The only real difference between CGI and running the script on your home computer is that CGI needs to output a &#039;Content-Type&#039; header.&lt;br /&gt;
&lt;br /&gt;
{{Info|We also have tutorials for building with [[:Flask|Flask]], [[:Django_on_HelioHost|creating a new Django project]], and [[:Converting_an_Existing_Django_App|converting an existing Django app to work on HelioHost]].}}&lt;br /&gt;
&lt;br /&gt;
== Python Versions Available ==&lt;br /&gt;
&lt;br /&gt;
Below are details of the Python versions available on each server, and links to view the Python modules already installed.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Installed Python Modules ===&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&lt;br /&gt;
&lt;br /&gt;
=== Morty Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos3.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tommy Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos1.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Johnny Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos2.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Open the File Manager in Plesk&lt;br /&gt;
* Open the &#039;httpdocs&#039; webroot directory. (If you were transferred from the old cPanel, the directory will be called &#039;public_html&#039;.)&lt;br /&gt;
* Open the &#039;cgi-bin&#039; directory&lt;br /&gt;
* In the top left click the &#039;+&#039; button and select &#039;Create File&#039;&lt;br /&gt;
* Type &#039;test.py&#039; as your filename&lt;br /&gt;
* Click &#039;OK&#039; to create the file&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Change Permissions&#039;&lt;br /&gt;
* Add a checkmark to the &#039;Execute / Search&#039; column for all three rows (Owner / Group / Others)&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Make sure &#039;rwx r-x r-x&#039; (&#039;755&#039;) is displayed under the Permissions column&lt;br /&gt;
* Highlight &#039;test.py&#039; and select &#039;Edit in Text Editor&#039;&lt;br /&gt;
* Leave &#039;UTF-8&#039; as the encoding, set &#039;Line break type&#039; to &#039;Convert to Unix style&#039; and copy/paste the below into the large text field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Content-Type: text/html\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Heliohost rules!&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Open in Browser&#039; (Or manually navigate to: &#039;&amp;lt;your subdomain&amp;gt;.helioho.st/cgi-bin/test.py&#039;)&lt;br /&gt;
&lt;br /&gt;
If everything worked, you should see &#039;HelioHost rules!&#039; displayed in your browser. &lt;br /&gt;
&lt;br /&gt;
== Code Explanation ==&lt;br /&gt;
&lt;br /&gt;
In the code pasted in, the first line is called the &#039;shebang&#039;. It tells the server which version of Python to use. &lt;br /&gt;
&lt;br /&gt;
The second line of code is the &#039;Content-Type&#039; header. This is important so the server knows what to do with the output that follows. If you forget it, your script will give you an error. The &#039;Content-Type&#039; header always has to have the two end lines immediately after it. That&#039;s what the two &#039;\n&#039; are.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the module you need, your script will probably give you an error when you try to import the missing module. You can [[View_Error_Logs|view your account error logs]] for details on which module is missing and causing the error.&lt;br /&gt;
&lt;br /&gt;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you checked the list of modules already installed on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&lt;br /&gt;
&lt;br /&gt;
== Running Python scripts outside cgi-bin folder ==&lt;br /&gt;
&lt;br /&gt;
Executing a CGI script outside the &#039;cgi-bin&#039; folder is possible with some modifications.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Go to &#039;/home/&amp;lt;your username&amp;gt;/httpdocs&#039;. (If you were transferred from the old cPanel, the folder will be called &#039;public_html&#039;)&lt;br /&gt;
* Create a file named &#039;.htaccess&#039; and copy/paste the below in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .py&lt;br /&gt;
DirectoryIndex index.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines make &#039;.py&#039; files executable outside &#039;cgi-bin&#039;, and the last line makes the filename &#039;index.py&#039; show up if someone goes to your domain without having to type out the filename like &#039;domain.helioho.st/index.py&#039;. This also supports other CGI file extensions.&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;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2220</id>
		<title>Python Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Python_Tutorial&amp;diff=2220"/>
		<updated>2026-04-04T16:13:27Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add new Step 1 that users should confirm they already checked the list of installed modules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started with Python on a server is with CGI. The only real difference between CGI and running the script on your home computer is that CGI needs to output a &#039;Content-Type&#039; header.&lt;br /&gt;
&lt;br /&gt;
{{Info|We also have tutorials for building with [[:Flask|Flask]], [[:Django_on_HelioHost|creating a new Django project]], and [[:Converting_an_Existing_Django_App|converting an existing Django app to work on HelioHost]].}}&lt;br /&gt;
&lt;br /&gt;
== Python Versions Available ==&lt;br /&gt;
&lt;br /&gt;
Below are details of the Python versions available on each server, and links to view the Python modules already installed.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Installed Python Modules ===&lt;br /&gt;
&lt;br /&gt;
{{Info|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&lt;br /&gt;
&lt;br /&gt;
=== Morty Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos3.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos3.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tommy Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos1.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos1.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Johnny Server === &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;
! Python Version !! Python Path !! Python Modules Installed  &lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || #!/usr/bin/python3.9 || [https://krydos2.heliohost.org/pyinfo/info3.9.py View]&lt;br /&gt;
|-&lt;br /&gt;
| 3.12 || #!/usr/bin/python3.12 || [https://krydos2.heliohost.org/pyinfo/info3.12.py View]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Open the File Manager in Plesk&lt;br /&gt;
* Open the &#039;httpdocs&#039; webroot directory. (If you were transferred from the old cPanel, the directory will be called &#039;public_html&#039;.)&lt;br /&gt;
* Open the &#039;cgi-bin&#039; directory&lt;br /&gt;
* In the top left click the &#039;+&#039; button and select &#039;Create File&#039;&lt;br /&gt;
* Type &#039;test.py&#039; as your filename&lt;br /&gt;
* Click &#039;OK&#039; to create the file&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Change Permissions&#039;&lt;br /&gt;
* Add a checkmark to the &#039;Execute / Search&#039; column for all three rows (Owner / Group / Others)&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Make sure &#039;rwx r-x r-x&#039; (&#039;755&#039;) is displayed under the Permissions column&lt;br /&gt;
* Highlight &#039;test.py&#039; and select &#039;Edit in Text Editor&#039;&lt;br /&gt;
* Leave &#039;UTF-8&#039; as the encoding, set &#039;Line break type&#039; to &#039;Convert to Unix style&#039; and copy/paste the below into the large text field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3.12&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Content-Type: text/html\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Heliohost rules!&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;Save&#039; button&lt;br /&gt;
* Highlight the &#039;test.py&#039; file and select &#039;Open in Browser&#039; (Or manually navigate to: &#039;&amp;lt;your subdomain&amp;gt;.helioho.st/cgi-bin/test.py&#039;)&lt;br /&gt;
&lt;br /&gt;
If everything worked, you should see &#039;HelioHost rules!&#039; displayed in your browser. &lt;br /&gt;
&lt;br /&gt;
== Code Explanation ==&lt;br /&gt;
&lt;br /&gt;
In the code pasted in, the first line is called the &#039;shebang&#039;. It tells the server which version of Python to use. &lt;br /&gt;
&lt;br /&gt;
The second line of code is the &#039;Content-Type&#039; header. This is important so the server knows what to do with the output that follows. If you forget it, your script will give you an error. The &#039;Content-Type&#039; header always has to have the two end lines immediately after it. That&#039;s what the two &#039;\n&#039; are.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the module you need, your script will probably give you an error when you try to import the missing module. You can [[View_Error_Logs|view your account error logs]] for details on which module is missing and causing the error.&lt;br /&gt;
&lt;br /&gt;
== Request Additional Python Modules ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server. &lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
Please do not request modules that are already installed.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the [[:Python_Tutorial#Python_Versions_Available|list of modules already installed]] on your server, if there is another module you&#039;d like to request, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum]. Make sure you provide ALL the details below:&lt;br /&gt;
# Confirm that you already checked the list of modules already installed on your server for the version of Python you&#039;re using. &lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&lt;br /&gt;
&lt;br /&gt;
== Running Python scripts outside cgi-bin folder ==&lt;br /&gt;
&lt;br /&gt;
Executing a CGI script outside the &#039;cgi-bin&#039; folder is possible with some modifications.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
* Go to &#039;/home/&amp;lt;your username&amp;gt;/httpdocs&#039;. (If you were transferred from the old cPanel, the folder will be called &#039;public_html&#039;)&lt;br /&gt;
* Create a file named &#039;.htaccess&#039; and copy/paste the below in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Options +ExecCGI&lt;br /&gt;
AddHandler cgi-script .py&lt;br /&gt;
DirectoryIndex index.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines make &#039;.py&#039; files executable outside &#039;cgi-bin&#039;, and the last line makes the filename &#039;index.py&#039; show up if someone goes to your domain without having to type out the filename like &#039;domain.helioho.st/index.py&#039;. This also supports other CGI file extensions.&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;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Flask&amp;diff=2218</id>
		<title>Flask</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Flask&amp;diff=2218"/>
		<updated>2026-03-17T22:53:45Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Fix accidental reference to Django, since this is the Flask page&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 Flask 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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=WordPress&amp;diff=2185</id>
		<title>WordPress</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=WordPress&amp;diff=2185"/>
		<updated>2026-01-10T23:52:31Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add Pelican to the list of WP alternatives&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;
* &#039;&#039;&#039;Pelican&#039;&#039;&#039; is a static site generator powered by Python.&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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2184</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2184"/>
		<updated>2026-01-06T03:03:00Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add login link to the &amp;#039;How do I change the contact email address on my account?&amp;#039; FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ / Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
== ETA for New Features, Version Upgrades, and Server Repairs ==&lt;br /&gt;
&lt;br /&gt;
{{Info|For information on ETAs for new features, software version upgrades, or server fixes, please review our [[:ETA|ETA]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Where do I ask for help? == &lt;br /&gt;
&lt;br /&gt;
Wherever you prefer to ask for help, please ask your question &#039;&#039;&#039;in one place only&#039;&#039;&#039;. HelioHost is run by volunteers who contribute their free time, and some are more active on certain platforms than others. Posting the same question across multiple platforms (like Discord, the HelioNet Forum, or email) or creating duplicate requests on the same platform for the same issue can result in unnecessary duplication of volunteer effort and delay responses to you, as well as to others who need help.&lt;br /&gt;
&lt;br /&gt;
We recommend using the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] for support questions. If you later decide to ask on Discord for live help, please update your forum thread to let us know your issue has been resolved or moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How does community-powered support work? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run entirely by volunteers. All support staff are volunteers who donate their free time to help others. In many cases, other users will also step in to offer support, simply because they want to give back to our community. Every staff member started out as a regular user who appreciated the project and began helping others with their questions and issues.&lt;br /&gt;
&lt;br /&gt;
All support requests in the [https://helionet.org/ HelioNet Forum] are public, since this is the most efficient way for users to get help from the entire HelioHost community. This community-powered support model ensures that solutions are searchable and reusable by any other users who face similar issues in the future. Without public support, we wouldn’t attract new volunteers, and support would likely disappear altogether.&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, and do not consider the following items to be private information: &lt;br /&gt;
* [[:Signing_Up#Usernames_are_not_private | Usernames]]&lt;br /&gt;
* Domain names&lt;br /&gt;
* IP addresses&lt;br /&gt;
* [[#Providing_PayPal_Transaction_ID | PayPal Transaction IDs]]&lt;br /&gt;
&lt;br /&gt;
If you choose to request support, you may be asked to provide some or all of the above details to assist with the resolution of your request.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to provide this information publicly, you could instead choose to use [https://wiki.helionet.org/ this Wiki] or the [https://helionet.org/ HelioNet Forum] as a completely self-serve option to try to resolve your queries yourself, without assistance or support from our community.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from forum posts are handled at the sole discretion of staff. In some cases, staff may choose to prioritize helping users with technical issues instead. Resolving actual problems can feel more meaningful and rewarding for volunteers than editing out public information from a public post on a public forum on the internet.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from public forum posts may eventually be considered under a [[#Can_I_get_Private_Support? | paid donation-only private support model]], where in exchange for a donation a staff member will remove public information from a public support post.&lt;br /&gt;
&lt;br /&gt;
== Can I PM an administrator for help? ==&lt;br /&gt;
&lt;br /&gt;
No, do not PM the administrators expecting support unless we explicitly tell you to. Please use the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] instead. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and &#039;&#039;&#039;server name&#039;&#039;&#039; along with any requests. If you are sending your support request via email to &#039;support@heliohost.org&#039;, make sure to contact us &#039;&#039;&#039;from the same email address as your hosting account&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I get Private Support? == &lt;br /&gt;
&lt;br /&gt;
There is currently no option for private support of any kind. Some users have expressed concerns about privacy, so we’re planning to offer a private support option for donors only, but there is [[:ETA|no ETA]] on when this may be implemented.&lt;br /&gt;
&lt;br /&gt;
Eventually, for users who do not want their requests and the responses to them made public, where hundreds of community members might otherwise be able to help, private support requests will only be visible to staff. Then, if one of the handful of volunteer staff members has some spare time outside of their jobs, studies, and personal lives, they could pick up a donor-only paid support request.&lt;br /&gt;
&lt;br /&gt;
Since a private support model for donors only will tie up an admin&#039;s time and prevent everyone else within the wider user community from helping out, it will likely be even slower than the existing community-powered model, with [[:ETA|no ETAs]] for private support requests from donors.&lt;br /&gt;
&lt;br /&gt;
== Your homepage says &amp;quot;Professional-Grade Hosting&amp;quot;, but your support sucks / isn&#039;t helping me / is run by a number of volunteers, what gives?‌ ==&lt;br /&gt;
&lt;br /&gt;
There is a difference between &amp;quot;Professional-Grade Hosting&amp;quot; and &amp;quot;Professional-Grade Customer Support&amp;quot;. Most people are used to having dedicated customer support staff that will answer every little question; this comes standard with paid hosting. However, we don&#039;t do that here. Among the five of us, we have the collective knowledge and technical expertise of any other support staff, but in order for us to help you, we expect from you a certain competency. You must try to spell and use grammar correctly (to the best of your ability). You must provide necessary information (e.g. &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039;). You must be able to read instructions, and you must be able to follow instructions. We will treat you with respect and professionalism if you follow these guidelines. We will probably be very annoyed if u tyep liek dis.‌&lt;br /&gt;
&lt;br /&gt;
== Can I get a free VPS? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost does not offer free VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
What HelioHost offers for free is &#039;&#039;&#039;[[#Can_I_have_more_than_one_account?|1 account per person]]&#039;&#039;&#039; on our shared web hosting server, [[:Johnny]]. Check out our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny | list of helpful tips for getting a free account on Johnny]] if you would like to sign up.&lt;br /&gt;
&lt;br /&gt;
== I log in frequently but am still receiving inactivity emails, what gives? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], to ensure that your logins are logged, log in to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review the [[:Suspension_Policy#Inactivity_Policy|Inactivity Policy]] section of our [[:Suspension_Policy|Suspension Policy]].&lt;br /&gt;
&lt;br /&gt;
== Why must all posts on HelioNet be in English? ==&lt;br /&gt;
&lt;br /&gt;
The support staff is fluent and reliable only in English.&lt;br /&gt;
&lt;br /&gt;
== Why does HelioHost crash? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes users will abuse server resources and cause the server to crash. We try to fix this as quickly as we can. Since the servers and Plesk are handling such a high volume of users, errors are bound to come up. We also try to fix these ASAP. Also, when [[:Ashoat|djbob]] works on the server, he occasionally screws up, which also causes crashes.&lt;br /&gt;
&lt;br /&gt;
== Why was my account suspended? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Suspension_Policy|Suspension Policy]] provides comprehensive details on why we will suspend accounts.&lt;br /&gt;
&lt;br /&gt;
A few common reasons for account suspensions are: &lt;br /&gt;
&lt;br /&gt;
* [[:Terms|Terms of Service]] violation(s).&lt;br /&gt;
* [[:Suspension_Policy#Inactivity_Policy|Account Inactivity]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Renew your account [http://heliohost.org/renew/ here].&lt;br /&gt;
* [[:Suspension_Policy#Duplicate_Accounts|Duplicate Accounts]] on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers. The limit is &#039;&#039;&#039;1 account per human being&#039;&#039;&#039;.&lt;br /&gt;
** Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#Account_Storage_Limits|Account Storage limits]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We offer 1000 MB of free web space and optional one-time paid donation options for [[:Donations_for_Increased_Storage|increased account storage]] {{Template:VPSInfo}}&lt;br /&gt;
** Our [[:Morty|Morty]] server also offers 1000 MB of free web space. If you exceed this limit, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#High_Server_Usage|High Server Usage]] limits on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We enforce a memory limit of no more than {{Template:MemoryLimit}} and a limit of {{Template:CPULimit}} per day. You can monitor your load numbers on [https://heliohost.org/dashboard/load/ the load page within your dashboard].&lt;br /&gt;
** Our [[:Morty|Morty]] server also has a memory limit of no more than {{Template:MemoryLimit}} and limit of {{Template:CPULimit}} per day. If you exceed these limits, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
&lt;br /&gt;
It is also possible that this was an error in our system. If you suspect that this is the case, report the error in a new post [https://helionet.org/index/forum/81-suspended-and-queued-accounts/ here], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Why does my new subdomain show a &amp;quot;Queued&amp;quot; page? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|All domain and subdomain changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;br /&gt;
&lt;br /&gt;
During the first 2 hours, seeing the queued page is normal and only means the change hasn&#039;t taken effect yet. If it&#039;s been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, try [[:Clear_Your_Cache|clearing your browser cache]].&lt;br /&gt;
&lt;br /&gt;
== Why can&#039;t I log in? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you just registered, please wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your Plesk account to become fully active.}}&lt;br /&gt;
&lt;br /&gt;
If it has been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039; since you registered and you still see an &#039;Account Queued&#039; page, try [[:Clear_Your_Cache|clearing your browser cache]]. If you are still experiencing problems, make sure you are entering your username in all lowercase letters, i.e. &amp;quot;wizard&amp;quot;, not &amp;quot;Wizard&amp;quot; or &amp;quot;WIZARD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How do I keep my account active / prevent being suspended? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], login to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review our [[:Suspension_Policy|Inactivity Policy]].&lt;br /&gt;
&lt;br /&gt;
On our scaling hosting server, [[:Morty|Morty]], as long as there is a positive balance on your account, it will remain active without needing to log in.&lt;br /&gt;
&lt;br /&gt;
== What is a Daily Signup Limit and why is it stopping me from registering? ==&lt;br /&gt;
&lt;br /&gt;
Each server has a daily limit for sign-ups so that it doesn&#039;t crash from all the people wanting to use HelioHost. Free signups on Johnny now reset [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours] at midnight UTC and noon 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;
== What if I have at least $2 USD and don&#039;t want to wait to sign up? ==&lt;br /&gt;
&lt;br /&gt;
For a one-time donation of as little as $2 USD, you can open an account on our [[:Tommy|Tommy]] server any time of day. We offer various [https://heliohost.org/tommy/ Donor Plans], enabling you to sign up anytime with your donation via Credit card, Debit card, or PayPal.&lt;br /&gt;
&lt;br /&gt;
If you prefer to donate Crypto to get a Tommy account, visit the [https://heliohost.org/donate/ Donate] page to view our Cryptocurrency wallets. Make sure that after transaction fees/gas the donation amount is $2 USD or more. After making the donation, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] so the transaction can be verified. Make sure you let us know the currency, amount, time of the transaction, and the email address you want the Tommy invite sent to. Please be aware that crypto donations can take time to verify. In the case of XMR and AEON, these can take several days to verify and are not recommended.&lt;br /&gt;
&lt;br /&gt;
Users on our Tommy donor server and the free Johnny server are [[:Suspension_Policy#Inactivity Policy|required to log in at least once a month]] to keep their accounts active.&lt;br /&gt;
&lt;br /&gt;
== What other options are available if I want to sign up right away? == &lt;br /&gt;
&lt;br /&gt;
For users who prefer not to have to log in regularly, our [[:Morty|Morty]] scaling server has no login requirement as long as there is a positive balance on your account.&lt;br /&gt;
&lt;br /&gt;
{{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== My account was deleted. Can I get my data back? ==&lt;br /&gt;
&lt;br /&gt;
No. We do not keep backups of your data nor is it our responsibility to, as mentioned in our [[:Terms|Terms of Service]]. You must backup your own data regularly and download the backup to your local machine.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure how to backup your data, please see our [[:Account_Backups|Account Backups tutorial]] page. It contains guidance on creating manual backups to download to your local machine, and instructions for setting up scheduled automated backups within Plesk.&lt;br /&gt;
&lt;br /&gt;
== Can I have more than one account? ==&lt;br /&gt;
&lt;br /&gt;
The first line of our [[:Terms | Terms of Service]] confirms that the limit is &#039;&#039;&#039;[[:Suspension_Policy#Duplicate_Accounts  |1 account per human being]]&#039;&#039;&#039; on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, even if you use different email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Accounts Allowed on Morty ===&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== How do I reset my hosting account to start fresh? ==&lt;br /&gt;
&lt;br /&gt;
{{Danger|Before requesting an account reset, make sure that the email address on your account is not hosted on HelioHost or else &#039;&#039;&#039;you will not be able to receive the invite email to recreate your account&#039;&#039;&#039; after it is wiped.&lt;br /&gt;
&lt;br /&gt;
To check which email address is associated with your hosting account, go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== Admin Account Reset Limits ===&lt;br /&gt;
&lt;br /&gt;
{{Info|Due to certain users abusing our generosity in the past and requesting 5 or so resets in less than a week, we now limit each account to &#039;&#039;&#039;1 free reset per week&#039;&#039;&#039; done by an admin, with the option to [[#Purchasing_Additional_Account_Resets|donate for additional account resets if needed.]]}}&lt;br /&gt;
&lt;br /&gt;
=== Free Self-Serve Account Resets (with Account Delete/Account Recreate) ===&lt;br /&gt;
&lt;br /&gt;
We will eventually be adding the ability for users to reset their accounts automatically, without the need for admin assistance. However, there is [[:ETA|no estimated timeframe for this]], since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
In the meantime, users may delete their account and then recreate it, which effectively resets all account settings and contents, accomplishing the same thing as an account reset does.&lt;br /&gt;
&lt;br /&gt;
Before deleting your account, [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|make a backup]]. Then, to delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button. Please make sure to allow some time for the deletion process to complete.&lt;br /&gt;
&lt;br /&gt;
To recreate your account, try to login. You will be greeted with a &#039;Welcome back!&#039; message, and prompted to enter your email address to receive an email invite to recreate your old account. Make sure to enter the same email address that was on the account you just deleted. Follow the steps to complete account recreation. You will receive an email confirming the new account has been successfully created.&lt;br /&gt;
&lt;br /&gt;
{{Info|Account creation can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; because it requires an Apache reset. }}&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional Account Resets ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional account reset, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for account reset]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your account reset request, so the donation can be verified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Account resets must be purchased one at a time, and cannot be pre-ordered in bulk.&lt;br /&gt;
&lt;br /&gt;
=== Before Asking an Admin for an Account Reset ===&lt;br /&gt;
&lt;br /&gt;
Because wiping an account is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
Before asking for an account reset, we strongly recommend creating an [[:Account_Backups | account backup]], and &#039;&#039;&#039;downloading it to your local machine&#039;&#039;&#039; first. Any backups left inside Plesk will be wiped out during the reset.&lt;br /&gt;
&lt;br /&gt;
To request that we reset your account so you can start over, send an email &#039;&#039;&#039;from the same email address listed in Plesk as your external email address&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and wipe your account. Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your hosting account.&lt;br /&gt;
&lt;br /&gt;
Once your account has been reset, you will receive an email with a link to restart your account. &#039;&#039;&#039;You will have 7 days to use the link.&#039;&#039;&#039; If you don&#039;t use the link to restart your account within 7 days, you will need to signup for a brand new account.&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Disable Webmail ===&lt;br /&gt;
&lt;br /&gt;
If you had webmail on your account, you will need to re-enable it after the reset has been completed. You can do this by going to: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Remove WSGI Control Access ===&lt;br /&gt;
&lt;br /&gt;
If you had WSGI Control Access on your [[:Morty]] server account for [[:Flask|Flask]] or [[:Django|Django]] and you want this re-enabled after the 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;
=== Account Resets Remove Addon Domains ===&lt;br /&gt;
&lt;br /&gt;
If you had [[:Addon_Domains | additional domains]] on your account, you will need to re-request them after the reset has been completed.&lt;br /&gt;
&lt;br /&gt;
== VPS Rebuilds ==&lt;br /&gt;
&lt;br /&gt;
Due to certain users abusing our generosity in the past and requesting 50 or so rebuilds in less than a month, we now limit each VPS to &#039;&#039;&#039;1 free rebuild per month&#039;&#039;&#039; with the option to [[#Purchasing_Additional_VPS_Rebuilds | donate for additional VPS rebuilds]] if needed.&lt;br /&gt;
&lt;br /&gt;
=== How do I request a VPS rebuild? ===&lt;br /&gt;
&lt;br /&gt;
Because rebuilding a VPS is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
To request that we rebuild your VPS, send an email &#039;&#039;&#039;from the same email address as your VPS account&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and rebuild your VPS. If you would like a free dashboard (Hestia, KeyHelp, etc.) installed after the rebuild, please include this in the request.  &lt;br /&gt;
&lt;br /&gt;
Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your VPS account. If you&#039;re not sure what email address is associated with your VPS account, you can check by logging into the [https://heliohost.org/login/ VPS Dashboard] with your VPS Username and Password. The email address attached to your VPS account will be displayed at the top right of the page.&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional VPS Rebuilds ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional VPS rebuild, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for VPS Rebuild]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your VPS rebuild request, so the donation can be verified.&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;
== How do I change the contact email address on my account? ==&lt;br /&gt;
&lt;br /&gt;
We recommend using a reliable external email address for your contact address because if you lose access to your HelioHost account, the contact email is the only way you have of recovering your account. If that email is hosted by us, you likely won&#039;t be able to access it either.&lt;br /&gt;
&lt;br /&gt;
To change the email address on your account, go to: &#039;&#039;&#039;[https://heliohost.org/login/ Login] &amp;gt; Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
&lt;br /&gt;
== How do I delete my hosting account? ==&lt;br /&gt;
&lt;br /&gt;
To delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button.&lt;br /&gt;
&lt;br /&gt;
To delete your HelioNet Forum account, post a topic in the [https://helionet.org/index/forum/4-contact-helionet/?do=add Contact HelioNet forum].&lt;br /&gt;
&lt;br /&gt;
== How do I change my main domain? ==&lt;br /&gt;
&lt;br /&gt;
To change the main domain on your HelioHost Plesk account, 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 domain name&#039;&#039;&#039; you want as your main domain, &#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;
{{Caution|There is a risk of data loss when main domains are changed. We strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] and &#039;&#039;&#039;download the backup to your local machine&#039;&#039;&#039; before requesting a main domain change. 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;
As an alternative to changing your main domain, consider using [[:Parked_(Alias)_Domains|Parked (Alias)]], [[:Addon_Domains|Addon]], and/or [[:Subdomains|Subdomains]].&lt;br /&gt;
&lt;br /&gt;
== What are the nameservers for HelioHost? ==&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== What IP addresses should I add to my DNS? == &lt;br /&gt;
&lt;br /&gt;
To add A (IPv4) or AAAA (IPv6) records to your domain registrar&#039;s dashboard, follow these steps to view the IP addresses for your server:  &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;
== The server is slow / Feature XYZ doesn&#039;t work / Something&#039;s wrong with my account / etc. ==&lt;br /&gt;
&lt;br /&gt;
Please post the issue in the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] and we will try to solve the problem. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error messages&#039;&#039;&#039; you are encountering.&lt;br /&gt;
&lt;br /&gt;
== Can Feature XYZ be installed? ==&lt;br /&gt;
&lt;br /&gt;
Softaculous [https://helionet.org/index/topic/59683-softaculous-has-returned/ returned in March 2024] and is offered on our [[:Morty|Morty]], [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, making it possible to install the latest version of 459 different software packages with just a single click.&lt;br /&gt;
&lt;br /&gt;
To browse the available options, login to Plesk and select Softaculous from the menu:&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous_menu_item.png]]&lt;br /&gt;
&lt;br /&gt;
If you need a system-wide feature installed, please post a request in our [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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any applicable &#039;&#039;&#039;version numbers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I use SSH? ==&lt;br /&gt;
&lt;br /&gt;
On hosting accounts, secure shell access (SSH) is disabled for security reasons. &lt;br /&gt;
&lt;br /&gt;
However, it is possible to run jailed shell commands using Plesk&#039;s [[:Cron_Jobs|Scheduled Tasks (cron jobs)]] feature. &lt;br /&gt;
&lt;br /&gt;
In many cases, SSH is not actually necessary. Please post a request in our our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;the command you want to run&#039;&#039;&#039;, and we&#039;ll be happy to investigate other ways to accomplish the same task without SSH.&lt;br /&gt;
&lt;br /&gt;
If you absolutely require SSH access, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use proc_open(), exec(), popen(), etc.? ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use Docker / Podman / Containers, etc? == &lt;br /&gt;
Container technologies are not supported on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]), and there are no plans to support containerization on our shared hosting servers in the future.&lt;br /&gt;
&lt;br /&gt;
If you would like to use Docker or other container technologies, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Does HelioHost support sockets? Which ports are open? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers have zero inbound ports available to be opened. All ports that are currently open already have services listening, such as 80 http, 443 https, 3306 MariaDB, and 5432 PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Outbound ports are similar: ports like 80, 443, 3306, 5432, 25, 465, etc., are open to allow scripts to connect to common services on remote servers.&lt;br /&gt;
&lt;br /&gt;
If you can proxy your websocket through Apache or Nginx, it can work without opening a port:  &lt;br /&gt;
* You could use an &#039;.htaccess&#039; file to proxy the websocket connection through Apache.&lt;br /&gt;
* With the help of a root admin, you could get an Nginx proxy set up. To explore this option, please post a request in our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;details about your websocket application&#039;&#039;&#039;, and we&#039;ll be happy to help.&lt;br /&gt;
&lt;br /&gt;
If you absolutely need a port opened, you&#039;ll need to get a VPS, and you will then have all 65535 ports available to open or close as you want. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Are directory indexes enabled? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Directory indexes have been enabled by default on the shared hosting servers since late 2024. This is a feature many users have requested over the past few years, but if you don&#039;t want directory listings for a folder, simply create an empty &#039;index.html&#039; file inside it. Please check our [[:Create_Website#Directory_Index | Directory Index]] section for further information.&lt;br /&gt;
&lt;br /&gt;
== Can I change my document root directory? ==&lt;br /&gt;
&lt;br /&gt;
Typically, your domain root directory is &#039;httpdocs&#039; (or &#039;public_html&#039; if you were transferred from the old cPanel). Users cannot change the document root themselves inside Plesk. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning on using Laravel, you can set the document root yourself by using the [[:Laravel#Document_Root | Laravel Toolkit]].&lt;br /&gt;
&lt;br /&gt;
If you have a legitimate reason for needing the document root changed, please create a post in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and make sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, &#039;&#039;&#039;the new document root directory you want&#039;&#039;&#039;, and a &#039;&#039;&#039;valid reason&#039;&#039;&#039; explaining why you are unable to use your existing document root. The admins will review your request to determine if the change can be made.&lt;br /&gt;
&lt;br /&gt;
== I can login to Plesk, but can&#039;t login to SFTP, what do I do? == &lt;br /&gt;
&lt;br /&gt;
Sometimes the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How do I stop my Node.js app? ==&lt;br /&gt;
&lt;br /&gt;
Node tutorials found elsewhere on the internet probably assume you have a VPS (not shared hosting) and you&#039;ll quickly get suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]]. &lt;br /&gt;
&lt;br /&gt;
If you need to stop a Node process that is already running, deleting the Node.js files via the file manager will &#039;&#039;&#039;not&#039;&#039;&#039; stop already running processes.&lt;br /&gt;
&lt;br /&gt;
To stop an already running Node.js process, you should disable Node by following the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Get Started &amp;gt; Node.js &amp;gt; Disable Node.js&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you follow our [[:Node.js|Node.js guide]], it will use Passenger which automatically stops Node.js processes if your website isn&#039;t getting any visitors. This will help try to keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]].&lt;br /&gt;
&lt;br /&gt;
If you do not want to use Passenger, we recommend you upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use your services to mine cryptocurrency? == &lt;br /&gt;
&lt;br /&gt;
No. We do not allow mining on any of our plans (free or paid).&lt;br /&gt;
&lt;br /&gt;
== Your hosting SUCKS! So do YOU!!! ==&lt;br /&gt;
&lt;br /&gt;
Please see [http://helionet.org/index/topic/4723-suspended/page__p__46231#entry46231 this].&lt;br /&gt;
&lt;br /&gt;
== I still have a question about HelioHost. ==&lt;br /&gt;
&lt;br /&gt;
Post in the [https://helionet.org/index/forum/48-questions/ Questions forum] and we&#039;ll try to help you the best we can.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Uploading_Files&amp;diff=2183</id>
		<title>Uploading Files</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Uploading_Files&amp;diff=2183"/>
		<updated>2026-01-04T16:05:51Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add subsection about Creating an FTP User&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Uploading Files ==&lt;br /&gt;
&lt;br /&gt;
== FTP / SFTP ==&lt;br /&gt;
&lt;br /&gt;
Just one of the ways to upload and modify your website is through [http://en.wikipedia.org/wiki/FTP FTP (File Transfer Protocol)], which allows you to connect to your site and perform various file operations directly from your computer.&lt;br /&gt;
&lt;br /&gt;
Once connected, you can perform the appropriate actions just as you would with any other file/folder on your computer. Simply drag and drop or copy and paste files to upload them. Right click on a file/folder to perform a variety of actions such as Rename, Delete, and Create Directory.&lt;br /&gt;
&lt;br /&gt;
To connect to your site&#039;s FTP server, you will need to use an FTP Client, such as [http://filezilla-project.org/ FileZilla], which is completely free software used by millions across the world. The various settings you will need to connect to the servers are provided in the table below.&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting to the FTP service, then it might be a temporary failure with the service due to high server load. You can retrieve real-time statistics on server load (including FTP service) at [https://status.heliohost.org/ status.heliohost.org].&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;
! Parameter !! Morty!! Tommy !! Johnny&lt;br /&gt;
|-&lt;br /&gt;
| Host || morty.heliohost.org || tommy.heliohost.org || johnny.heliohost.org&lt;br /&gt;
|-&lt;br /&gt;
| Port || 1373 || 1373 || 1373&lt;br /&gt;
|-&lt;br /&gt;
| Protocol || SFTP - SSH File Transfer Protocol || SFTP - SSH File Transfer Protocol || SFTP - SSH File Transfer Protocol&lt;br /&gt;
|-&lt;br /&gt;
| Logon Type || Normal || Normal || Normal &lt;br /&gt;
|-&lt;br /&gt;
| User || Your Plesk username || Your Plesk username ||  Your Plesk username&lt;br /&gt;
|-&lt;br /&gt;
| Password || Your Plesk password || Your Plesk password || Your Plesk password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Creating an FTP User ===&lt;br /&gt;
&lt;br /&gt;
If you prefer to create an FTP user account instead of using your Plesk account credentials, you can do this inside Plesk.&lt;br /&gt;
&lt;br /&gt;
Navigate to: &#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; Hosting &amp;amp; DNS &amp;gt; Hosting Settings &amp;gt; Webspace settings &amp;gt; System user&#039;s credentials&#039;&#039;&#039; and set a username and password for your FTP user.&lt;br /&gt;
&lt;br /&gt;
== FileZilla ==&lt;br /&gt;
&lt;br /&gt;
== Step-by-step: Connect to your server with SFTP using FileZilla ==&lt;br /&gt;
&lt;br /&gt;
# Click &#039;File → Site Manager&#039;&lt;br /&gt;
# Click &#039;New Site&#039;&lt;br /&gt;
# Name it something like &#039;Johnny SFTP&#039; and press enter&lt;br /&gt;
# Enter settings from the table above&lt;br /&gt;
# Click &#039;Connect&#039;&lt;br /&gt;
# Approve the remote server key, and check the box to not ask you about this server again.&lt;br /&gt;
&lt;br /&gt;
{{Info|&lt;br /&gt;
You can manage your files with SFTP, or FTPS (on Port 21).  &lt;br /&gt;
We recommend not using FTP because it is insecure, but it&#039;s available too.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Plesk File Manager ==&lt;br /&gt;
&lt;br /&gt;
The Plesk online file manager is a great built-in facility available to all users as part of HelioHost. It has all the features you could need to manage the files for your website, even the invisible and hidden ones. Follow the navigation steps below to access the Plesk file manager: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [ domain ] &amp;gt; Files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|Do not bookmark your Plesk File Manager page, as it is not a supported login method and your visits will not be recorded. On the [[:Johnny|Johnny]] and [[:Tommy|Tommy]] servers, this means you risk being [[:Suspension_Policy#Inactivity_Policy|suspended for inactivity]] after 30 days.}}&lt;br /&gt;
&lt;br /&gt;
== Net2FTP ==&lt;br /&gt;
&lt;br /&gt;
Net2FTP is a popular online file manager which can be installed using [[:Softaculous|Softaculous]], the auto-installer service built right into Plesk. Follow the navigation steps below to install Net2FTP: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Softaculous &amp;gt; search for &#039;net2ftp&#039; or find it under the list of &#039;File Management&#039; options&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Pydio ==&lt;br /&gt;
&lt;br /&gt;
Pydio, formerly known as AjaXplorer, is another online file manager which includes file editors, multiple users, and more. Pydio can be installed using [[:Softaculous|Softaculous]], the auto-installer service built right into Plesk. Follow the navigation steps below to install Pydio: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Softaculous &amp;gt; search for &#039;Pydio&#039; or find it under the list of &#039;File Management&#039; options&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== WebDAV ==&lt;br /&gt;
&lt;br /&gt;
WebDAV / Web Disk / File Sharing has been [https://docs.plesk.com/release-notes/obsidian/deprecation-plan/ deprecated in Plesk], however SFTP is a much better choice anyway.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
If you can login to Plesk, but cannot login to SFTP, this can sometimes happen if the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2182</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2182"/>
		<updated>2026-01-03T01:08:26Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add FAQ about Docker/Podman/Containers support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ / Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
== ETA for New Features, Version Upgrades, and Server Repairs ==&lt;br /&gt;
&lt;br /&gt;
{{Info|For information on ETAs for new features, software version upgrades, or server fixes, please review our [[:ETA|ETA]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Where do I ask for help? == &lt;br /&gt;
&lt;br /&gt;
Wherever you prefer to ask for help, please ask your question &#039;&#039;&#039;in one place only&#039;&#039;&#039;. HelioHost is run by volunteers who contribute their free time, and some are more active on certain platforms than others. Posting the same question across multiple platforms (like Discord, the HelioNet Forum, or email) or creating duplicate requests on the same platform for the same issue can result in unnecessary duplication of volunteer effort and delay responses to you, as well as to others who need help.&lt;br /&gt;
&lt;br /&gt;
We recommend using the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] for support questions. If you later decide to ask on Discord for live help, please update your forum thread to let us know your issue has been resolved or moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How does community-powered support work? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run entirely by volunteers. All support staff are volunteers who donate their free time to help others. In many cases, other users will also step in to offer support, simply because they want to give back to our community. Every staff member started out as a regular user who appreciated the project and began helping others with their questions and issues.&lt;br /&gt;
&lt;br /&gt;
All support requests in the [https://helionet.org/ HelioNet Forum] are public, since this is the most efficient way for users to get help from the entire HelioHost community. This community-powered support model ensures that solutions are searchable and reusable by any other users who face similar issues in the future. Without public support, we wouldn’t attract new volunteers, and support would likely disappear altogether.&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, and do not consider the following items to be private information: &lt;br /&gt;
* [[:Signing_Up#Usernames_are_not_private | Usernames]]&lt;br /&gt;
* Domain names&lt;br /&gt;
* IP addresses&lt;br /&gt;
* [[#Providing_PayPal_Transaction_ID | PayPal Transaction IDs]]&lt;br /&gt;
&lt;br /&gt;
If you choose to request support, you may be asked to provide some or all of the above details to assist with the resolution of your request.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to provide this information publicly, you could instead choose to use [https://wiki.helionet.org/ this Wiki] or the [https://helionet.org/ HelioNet Forum] as a completely self-serve option to try to resolve your queries yourself, without assistance or support from our community.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from forum posts are handled at the sole discretion of staff. In some cases, staff may choose to prioritize helping users with technical issues instead. Resolving actual problems can feel more meaningful and rewarding for volunteers than editing out public information from a public post on a public forum on the internet.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from public forum posts may eventually be considered under a [[#Can_I_get_Private_Support? | paid donation-only private support model]], where in exchange for a donation a staff member will remove public information from a public support post.&lt;br /&gt;
&lt;br /&gt;
== Can I PM an administrator for help? ==&lt;br /&gt;
&lt;br /&gt;
No, do not PM the administrators expecting support unless we explicitly tell you to. Please use the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] instead. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and &#039;&#039;&#039;server name&#039;&#039;&#039; along with any requests. If you are sending your support request via email to &#039;support@heliohost.org&#039;, make sure to contact us &#039;&#039;&#039;from the same email address as your hosting account&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I get Private Support? == &lt;br /&gt;
&lt;br /&gt;
There is currently no option for private support of any kind. Some users have expressed concerns about privacy, so we’re planning to offer a private support option for donors only, but there is [[:ETA|no ETA]] on when this may be implemented.&lt;br /&gt;
&lt;br /&gt;
Eventually, for users who do not want their requests and the responses to them made public, where hundreds of community members might otherwise be able to help, private support requests will only be visible to staff. Then, if one of the handful of volunteer staff members has some spare time outside of their jobs, studies, and personal lives, they could pick up a donor-only paid support request.&lt;br /&gt;
&lt;br /&gt;
Since a private support model for donors only will tie up an admin&#039;s time and prevent everyone else within the wider user community from helping out, it will likely be even slower than the existing community-powered model, with [[:ETA|no ETAs]] for private support requests from donors.&lt;br /&gt;
&lt;br /&gt;
== Your homepage says &amp;quot;Professional-Grade Hosting&amp;quot;, but your support sucks / isn&#039;t helping me / is run by a number of volunteers, what gives?‌ ==&lt;br /&gt;
&lt;br /&gt;
There is a difference between &amp;quot;Professional-Grade Hosting&amp;quot; and &amp;quot;Professional-Grade Customer Support&amp;quot;. Most people are used to having dedicated customer support staff that will answer every little question; this comes standard with paid hosting. However, we don&#039;t do that here. Among the five of us, we have the collective knowledge and technical expertise of any other support staff, but in order for us to help you, we expect from you a certain competency. You must try to spell and use grammar correctly (to the best of your ability). You must provide necessary information (e.g. &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039;). You must be able to read instructions, and you must be able to follow instructions. We will treat you with respect and professionalism if you follow these guidelines. We will probably be very annoyed if u tyep liek dis.‌&lt;br /&gt;
&lt;br /&gt;
== Can I get a free VPS? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost does not offer free VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
What HelioHost offers for free is &#039;&#039;&#039;[[#Can_I_have_more_than_one_account?|1 account per person]]&#039;&#039;&#039; on our shared web hosting server, [[:Johnny]]. Check out our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny | list of helpful tips for getting a free account on Johnny]] if you would like to sign up.&lt;br /&gt;
&lt;br /&gt;
== I log in frequently but am still receiving inactivity emails, what gives? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], to ensure that your logins are logged, log in to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review the [[:Suspension_Policy#Inactivity_Policy|Inactivity Policy]] section of our [[:Suspension_Policy|Suspension Policy]].&lt;br /&gt;
&lt;br /&gt;
== Why must all posts on HelioNet be in English? ==&lt;br /&gt;
&lt;br /&gt;
The support staff is fluent and reliable only in English.&lt;br /&gt;
&lt;br /&gt;
== Why does HelioHost crash? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes users will abuse server resources and cause the server to crash. We try to fix this as quickly as we can. Since the servers and Plesk are handling such a high volume of users, errors are bound to come up. We also try to fix these ASAP. Also, when [[:Ashoat|djbob]] works on the server, he occasionally screws up, which also causes crashes.&lt;br /&gt;
&lt;br /&gt;
== Why was my account suspended? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Suspension_Policy|Suspension Policy]] provides comprehensive details on why we will suspend accounts.&lt;br /&gt;
&lt;br /&gt;
A few common reasons for account suspensions are: &lt;br /&gt;
&lt;br /&gt;
* [[:Terms|Terms of Service]] violation(s).&lt;br /&gt;
* [[:Suspension_Policy#Inactivity_Policy|Account Inactivity]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Renew your account [http://heliohost.org/renew/ here].&lt;br /&gt;
* [[:Suspension_Policy#Duplicate_Accounts|Duplicate Accounts]] on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers. The limit is &#039;&#039;&#039;1 account per human being&#039;&#039;&#039;.&lt;br /&gt;
** Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#Account_Storage_Limits|Account Storage limits]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We offer 1000 MB of free web space and optional one-time paid donation options for [[:Donations_for_Increased_Storage|increased account storage]] {{Template:VPSInfo}}&lt;br /&gt;
** Our [[:Morty|Morty]] server also offers 1000 MB of free web space. If you exceed this limit, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#High_Server_Usage|High Server Usage]] limits on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We enforce a memory limit of no more than {{Template:MemoryLimit}} and a limit of {{Template:CPULimit}} per day. You can monitor your load numbers on [https://heliohost.org/dashboard/load/ the load page within your dashboard].&lt;br /&gt;
** Our [[:Morty|Morty]] server also has a memory limit of no more than {{Template:MemoryLimit}} and limit of {{Template:CPULimit}} per day. If you exceed these limits, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
&lt;br /&gt;
It is also possible that this was an error in our system. If you suspect that this is the case, report the error in a new post [https://helionet.org/index/forum/81-suspended-and-queued-accounts/ here], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Why does my new subdomain show a &amp;quot;Queued&amp;quot; page? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|All domain and subdomain changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;br /&gt;
&lt;br /&gt;
During the first 2 hours, seeing the queued page is normal and only means the change hasn&#039;t taken effect yet. If it&#039;s been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, try [[:Clear_Your_Cache|clearing your browser cache]].&lt;br /&gt;
&lt;br /&gt;
== Why can&#039;t I log in? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you just registered, please wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your Plesk account to become fully active.}}&lt;br /&gt;
&lt;br /&gt;
If it has been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039; since you registered and you still see an &#039;Account Queued&#039; page, try [[:Clear_Your_Cache|clearing your browser cache]]. If you are still experiencing problems, make sure you are entering your username in all lowercase letters, i.e. &amp;quot;wizard&amp;quot;, not &amp;quot;Wizard&amp;quot; or &amp;quot;WIZARD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How do I keep my account active / prevent being suspended? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], login to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review our [[:Suspension_Policy|Inactivity Policy]].&lt;br /&gt;
&lt;br /&gt;
On our scaling hosting server, [[:Morty|Morty]], as long as there is a positive balance on your account, it will remain active without needing to log in.&lt;br /&gt;
&lt;br /&gt;
== What is a Daily Signup Limit and why is it stopping me from registering? ==&lt;br /&gt;
&lt;br /&gt;
Each server has a daily limit for sign-ups so that it doesn&#039;t crash from all the people wanting to use HelioHost. Free signups on Johnny now reset [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours] at midnight UTC and noon 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;
== What if I have at least $2 USD and don&#039;t want to wait to sign up? ==&lt;br /&gt;
&lt;br /&gt;
For a one-time donation of as little as $2 USD, you can open an account on our [[:Tommy|Tommy]] server any time of day. We offer various [https://heliohost.org/tommy/ Donor Plans], enabling you to sign up anytime with your donation via Credit card, Debit card, or PayPal.&lt;br /&gt;
&lt;br /&gt;
If you prefer to donate Crypto to get a Tommy account, visit the [https://heliohost.org/donate/ Donate] page to view our Cryptocurrency wallets. Make sure that after transaction fees/gas the donation amount is $2 USD or more. After making the donation, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] so the transaction can be verified. Make sure you let us know the currency, amount, time of the transaction, and the email address you want the Tommy invite sent to. Please be aware that crypto donations can take time to verify. In the case of XMR and AEON, these can take several days to verify and are not recommended.&lt;br /&gt;
&lt;br /&gt;
Users on our Tommy donor server and the free Johnny server are [[:Suspension_Policy#Inactivity Policy|required to log in at least once a month]] to keep their accounts active.&lt;br /&gt;
&lt;br /&gt;
== What other options are available if I want to sign up right away? == &lt;br /&gt;
&lt;br /&gt;
For users who prefer not to have to log in regularly, our [[:Morty|Morty]] scaling server has no login requirement as long as there is a positive balance on your account.&lt;br /&gt;
&lt;br /&gt;
{{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== My account was deleted. Can I get my data back? ==&lt;br /&gt;
&lt;br /&gt;
No. We do not keep backups of your data nor is it our responsibility to, as mentioned in our [[:Terms|Terms of Service]]. You must backup your own data regularly and download the backup to your local machine.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure how to backup your data, please see our [[:Account_Backups|Account Backups tutorial]] page. It contains guidance on creating manual backups to download to your local machine, and instructions for setting up scheduled automated backups within Plesk.&lt;br /&gt;
&lt;br /&gt;
== Can I have more than one account? ==&lt;br /&gt;
&lt;br /&gt;
The first line of our [[:Terms | Terms of Service]] confirms that the limit is &#039;&#039;&#039;[[:Suspension_Policy#Duplicate_Accounts  |1 account per human being]]&#039;&#039;&#039; on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, even if you use different email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Accounts Allowed on Morty ===&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== How do I reset my hosting account to start fresh? ==&lt;br /&gt;
&lt;br /&gt;
{{Danger|Before requesting an account reset, make sure that the email address on your account is not hosted on HelioHost or else &#039;&#039;&#039;you will not be able to receive the invite email to recreate your account&#039;&#039;&#039; after it is wiped.&lt;br /&gt;
&lt;br /&gt;
To check which email address is associated with your hosting account, go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== Admin Account Reset Limits ===&lt;br /&gt;
&lt;br /&gt;
{{Info|Due to certain users abusing our generosity in the past and requesting 5 or so resets in less than a week, we now limit each account to &#039;&#039;&#039;1 free reset per week&#039;&#039;&#039; done by an admin, with the option to [[#Purchasing_Additional_Account_Resets|donate for additional account resets if needed.]]}}&lt;br /&gt;
&lt;br /&gt;
=== Free Self-Serve Account Resets (with Account Delete/Account Recreate) ===&lt;br /&gt;
&lt;br /&gt;
We will eventually be adding the ability for users to reset their accounts automatically, without the need for admin assistance. However, there is [[:ETA|no estimated timeframe for this]], since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
In the meantime, users may delete their account and then recreate it, which effectively resets all account settings and contents, accomplishing the same thing as an account reset does.&lt;br /&gt;
&lt;br /&gt;
Before deleting your account, [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|make a backup]]. Then, to delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button. Please make sure to allow some time for the deletion process to complete.&lt;br /&gt;
&lt;br /&gt;
To recreate your account, try to login. You will be greeted with a &#039;Welcome back!&#039; message, and prompted to enter your email address to receive an email invite to recreate your old account. Make sure to enter the same email address that was on the account you just deleted. Follow the steps to complete account recreation. You will receive an email confirming the new account has been successfully created.&lt;br /&gt;
&lt;br /&gt;
{{Info|Account creation can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; because it requires an Apache reset. }}&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional Account Resets ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional account reset, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for account reset]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your account reset request, so the donation can be verified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Account resets must be purchased one at a time, and cannot be pre-ordered in bulk.&lt;br /&gt;
&lt;br /&gt;
=== Before Asking an Admin for an Account Reset ===&lt;br /&gt;
&lt;br /&gt;
Because wiping an account is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
Before asking for an account reset, we strongly recommend creating an [[:Account_Backups | account backup]], and &#039;&#039;&#039;downloading it to your local machine&#039;&#039;&#039; first. Any backups left inside Plesk will be wiped out during the reset.&lt;br /&gt;
&lt;br /&gt;
To request that we reset your account so you can start over, send an email &#039;&#039;&#039;from the same email address listed in Plesk as your external email address&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and wipe your account. Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your hosting account.&lt;br /&gt;
&lt;br /&gt;
Once your account has been reset, you will receive an email with a link to restart your account. &#039;&#039;&#039;You will have 7 days to use the link.&#039;&#039;&#039; If you don&#039;t use the link to restart your account within 7 days, you will need to signup for a brand new account.&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Disable Webmail ===&lt;br /&gt;
&lt;br /&gt;
If you had webmail on your account, you will need to re-enable it after the reset has been completed. You can do this by going to: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Remove WSGI Control Access ===&lt;br /&gt;
&lt;br /&gt;
If you had WSGI Control Access on your [[:Morty]] server account for [[:Flask|Flask]] or [[:Django|Django]] and you want this re-enabled after the 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;
=== Account Resets Remove Addon Domains ===&lt;br /&gt;
&lt;br /&gt;
If you had [[:Addon_Domains | additional domains]] on your account, you will need to re-request them after the reset has been completed.&lt;br /&gt;
&lt;br /&gt;
== VPS Rebuilds ==&lt;br /&gt;
&lt;br /&gt;
Due to certain users abusing our generosity in the past and requesting 50 or so rebuilds in less than a month, we now limit each VPS to &#039;&#039;&#039;1 free rebuild per month&#039;&#039;&#039; with the option to [[#Purchasing_Additional_VPS_Rebuilds | donate for additional VPS rebuilds]] if needed.&lt;br /&gt;
&lt;br /&gt;
=== How do I request a VPS rebuild? ===&lt;br /&gt;
&lt;br /&gt;
Because rebuilding a VPS is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
To request that we rebuild your VPS, send an email &#039;&#039;&#039;from the same email address as your VPS account&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and rebuild your VPS. If you would like a free dashboard (Hestia, KeyHelp, etc.) installed after the rebuild, please include this in the request.  &lt;br /&gt;
&lt;br /&gt;
Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your VPS account. If you&#039;re not sure what email address is associated with your VPS account, you can check by logging into the [https://heliohost.org/login/ VPS Dashboard] with your VPS Username and Password. The email address attached to your VPS account will be displayed at the top right of the page.&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional VPS Rebuilds ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional VPS rebuild, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for VPS Rebuild]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your VPS rebuild request, so the donation can be verified.&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;
== How do I change the contact email address on my account? ==&lt;br /&gt;
&lt;br /&gt;
We recommend using a reliable external email address for your contact address because if you lose access to your HelioHost account, the contact email is the only way you have of recovering your account. If that email is hosted by us, you likely won&#039;t be able to access it either.&lt;br /&gt;
&lt;br /&gt;
To change the email address on your account, login and go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
&lt;br /&gt;
== How do I delete my hosting account? ==&lt;br /&gt;
&lt;br /&gt;
To delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button.&lt;br /&gt;
&lt;br /&gt;
To delete your HelioNet Forum account, post a topic in the [https://helionet.org/index/forum/4-contact-helionet/?do=add Contact HelioNet forum].&lt;br /&gt;
&lt;br /&gt;
== How do I change my main domain? ==&lt;br /&gt;
&lt;br /&gt;
To change the main domain on your HelioHost Plesk account, 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 domain name&#039;&#039;&#039; you want as your main domain, &#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;
{{Caution|There is a risk of data loss when main domains are changed. We strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] and &#039;&#039;&#039;download the backup to your local machine&#039;&#039;&#039; before requesting a main domain change. 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;
As an alternative to changing your main domain, consider using [[:Parked_(Alias)_Domains|Parked (Alias)]], [[:Addon_Domains|Addon]], and/or [[:Subdomains|Subdomains]].&lt;br /&gt;
&lt;br /&gt;
== What are the nameservers for HelioHost? ==&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== What IP addresses should I add to my DNS? == &lt;br /&gt;
&lt;br /&gt;
To add A (IPv4) or AAAA (IPv6) records to your domain registrar&#039;s dashboard, follow these steps to view the IP addresses for your server:  &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;
== The server is slow / Feature XYZ doesn&#039;t work / Something&#039;s wrong with my account / etc. ==&lt;br /&gt;
&lt;br /&gt;
Please post the issue in the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] and we will try to solve the problem. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error messages&#039;&#039;&#039; you are encountering.&lt;br /&gt;
&lt;br /&gt;
== Can Feature XYZ be installed? ==&lt;br /&gt;
&lt;br /&gt;
Softaculous [https://helionet.org/index/topic/59683-softaculous-has-returned/ returned in March 2024] and is offered on our [[:Morty|Morty]], [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, making it possible to install the latest version of 459 different software packages with just a single click.&lt;br /&gt;
&lt;br /&gt;
To browse the available options, login to Plesk and select Softaculous from the menu:&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous_menu_item.png]]&lt;br /&gt;
&lt;br /&gt;
If you need a system-wide feature installed, please post a request in our [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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any applicable &#039;&#039;&#039;version numbers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I use SSH? ==&lt;br /&gt;
&lt;br /&gt;
On hosting accounts, secure shell access (SSH) is disabled for security reasons. &lt;br /&gt;
&lt;br /&gt;
However, it is possible to run jailed shell commands using Plesk&#039;s [[:Cron_Jobs|Scheduled Tasks (cron jobs)]] feature. &lt;br /&gt;
&lt;br /&gt;
In many cases, SSH is not actually necessary. Please post a request in our our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;the command you want to run&#039;&#039;&#039;, and we&#039;ll be happy to investigate other ways to accomplish the same task without SSH.&lt;br /&gt;
&lt;br /&gt;
If you absolutely require SSH access, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use proc_open(), exec(), popen(), etc.? ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use Docker / Podman / Containers, etc? == &lt;br /&gt;
Container technologies are not supported on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]), and there are no plans to support containerization on our shared hosting servers in the future.&lt;br /&gt;
&lt;br /&gt;
If you would like to use Docker or other container technologies, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Does HelioHost support sockets? Which ports are open? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers have zero inbound ports available to be opened. All ports that are currently open already have services listening, such as 80 http, 443 https, 3306 MariaDB, and 5432 PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Outbound ports are similar: ports like 80, 443, 3306, 5432, 25, 465, etc., are open to allow scripts to connect to common services on remote servers.&lt;br /&gt;
&lt;br /&gt;
If you can proxy your websocket through Apache or Nginx, it can work without opening a port:  &lt;br /&gt;
* You could use an &#039;.htaccess&#039; file to proxy the websocket connection through Apache.&lt;br /&gt;
* With the help of a root admin, you could get an Nginx proxy set up. To explore this option, please post a request in our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;details about your websocket application&#039;&#039;&#039;, and we&#039;ll be happy to help.&lt;br /&gt;
&lt;br /&gt;
If you absolutely need a port opened, you&#039;ll need to get a VPS, and you will then have all 65535 ports available to open or close as you want. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Are directory indexes enabled? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Directory indexes have been enabled by default on the shared hosting servers since late 2024. This is a feature many users have requested over the past few years, but if you don&#039;t want directory listings for a folder, simply create an empty &#039;index.html&#039; file inside it. Please check our [[:Create_Website#Directory_Index | Directory Index]] section for further information.&lt;br /&gt;
&lt;br /&gt;
== Can I change my document root directory? ==&lt;br /&gt;
&lt;br /&gt;
Typically, your domain root directory is &#039;httpdocs&#039; (or &#039;public_html&#039; if you were transferred from the old cPanel). Users cannot change the document root themselves inside Plesk. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning on using Laravel, you can set the document root yourself by using the [[:Laravel#Document_Root | Laravel Toolkit]].&lt;br /&gt;
&lt;br /&gt;
If you have a legitimate reason for needing the document root changed, please create a post in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and make sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, &#039;&#039;&#039;the new document root directory you want&#039;&#039;&#039;, and a &#039;&#039;&#039;valid reason&#039;&#039;&#039; explaining why you are unable to use your existing document root. The admins will review your request to determine if the change can be made.&lt;br /&gt;
&lt;br /&gt;
== I can login to Plesk, but can&#039;t login to SFTP, what do I do? == &lt;br /&gt;
&lt;br /&gt;
Sometimes the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How do I stop my Node.js app? ==&lt;br /&gt;
&lt;br /&gt;
Node tutorials found elsewhere on the internet probably assume you have a VPS (not shared hosting) and you&#039;ll quickly get suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]]. &lt;br /&gt;
&lt;br /&gt;
If you need to stop a Node process that is already running, deleting the Node.js files via the file manager will &#039;&#039;&#039;not&#039;&#039;&#039; stop already running processes.&lt;br /&gt;
&lt;br /&gt;
To stop an already running Node.js process, you should disable Node by following the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Get Started &amp;gt; Node.js &amp;gt; Disable Node.js&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you follow our [[:Node.js|Node.js guide]], it will use Passenger which automatically stops Node.js processes if your website isn&#039;t getting any visitors. This will help try to keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]].&lt;br /&gt;
&lt;br /&gt;
If you do not want to use Passenger, we recommend you upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use your services to mine cryptocurrency? == &lt;br /&gt;
&lt;br /&gt;
No. We do not allow mining on any of our plans (free or paid).&lt;br /&gt;
&lt;br /&gt;
== Your hosting SUCKS! So do YOU!!! ==&lt;br /&gt;
&lt;br /&gt;
Please see [http://helionet.org/index/topic/4723-suspended/page__p__46231#entry46231 this].&lt;br /&gt;
&lt;br /&gt;
== I still have a question about HelioHost. ==&lt;br /&gt;
&lt;br /&gt;
Post in the [https://helionet.org/index/forum/48-questions/ Questions forum] and we&#039;ll try to help you the best we can.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=PHP&amp;diff=2181</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=PHP&amp;diff=2181"/>
		<updated>2025-12-31T14:48:18Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add PHP 8.5 to Morty server versions available&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PHP ==&lt;br /&gt;
&lt;br /&gt;
PHP is the most popular scripting language on the Internet for a reason. It&#039;s easy to learn and easy to implement, yet is powerful enough to suit almost every task. Unlike some other languages, PHP is not explicitly linked with any programming paradigms, allowing for more flexible development. HelioHost offers the latest versions of PHP on all its hosting accounts. We are unique in that we offer PHP without safe mode, which is the more secure but less functional alternative that you&#039;ll find on most free hosts.&lt;br /&gt;
&lt;br /&gt;
== PHP Versions Supported ==&lt;br /&gt;
&lt;br /&gt;
The PHP versions supported on each server are listed below. To see the PHP packages installed for each version, click on the &#039;phpinfo()&#039; link. To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Morty server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 || [https://php85.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Tommy server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Johnny server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lily server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Lily server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.5&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.1&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.2&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Packages Installed ==&lt;br /&gt;
&lt;br /&gt;
=== Inside Plesk === &lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to view which PHP packages are installed:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; click on the &#039; View the phpinfo() page&#039; link&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
[[File:View-phpinfo.png]]&lt;br /&gt;
&lt;br /&gt;
=== View phpinfo() page === &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a HelioHost account to access information within Plesk, you can view the installed PHP packages for the available PHP versions on our servers by checking [[#PHP_Versions_Supported|the relevant phpinfo() page links here]].&lt;br /&gt;
&lt;br /&gt;
== Using proc_open(), exec(), popen(), etc. ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Learning PHP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&amp;lt;?php&#039; is the opening braces and &#039;?&amp;gt;&#039; is the closing braces for PHP.&lt;br /&gt;
&lt;br /&gt;
Here is a sample hello world file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  echo &amp;quot;Hello World!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good tutorial can be found here: [https://blog.udemy.com/php-tutorial/ https://blog.udemy.com/php-tutorial].&lt;br /&gt;
&lt;br /&gt;
== Change PHP Version ==&lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to change your PHP version inside Plesk:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; select PHP version from the dropdown menu&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-change-php-version.png]]&lt;br /&gt;
&lt;br /&gt;
After the PHP version is changed, you will see a confirmation message that contains the timeframe for the change to take effect:&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-php-change-120-min.png]]&lt;br /&gt;
&lt;br /&gt;
== PHP Version Changes Take Up To 2 Hours ==&lt;br /&gt;
&lt;br /&gt;
{{Info|PHP version changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Unlimited_Email_Accounts&amp;diff=2178</id>
		<title>Unlimited Email Accounts</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Unlimited_Email_Accounts&amp;diff=2178"/>
		<updated>2025-12-21T15:28:45Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add additional context on what the &amp;#039;i&amp;#039; button provides, which was shown in the screenshot but wasn&amp;#039;t in the guide as searchable text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unlimited Email Accounts ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers its users email accounts under their domains. This means that if your domain is &#039;example.com&#039;, you can create email accounts such as &#039;yourname@example.com&#039;. Unlike other free web hosts, HelioHost does not limit the amount of email accounts each domain can host. Since more email accounts do not burden our server, we see no good reason to restrict them.&lt;br /&gt;
&lt;br /&gt;
== Webmail ==&lt;br /&gt;
&lt;br /&gt;
=== Webmail is Disabled by Default ===&lt;br /&gt;
&lt;br /&gt;
Most users don&#039;t use webmail, so it is a waste of system resources to have it on   by default. If you regularly use Roundcube webmail, you can enable it on your account by going to:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click on the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Any email account you create on HelioHost can be used and managed through a web interface. HelioHost offers multiple webmail software options:&lt;br /&gt;
&lt;br /&gt;
== RoundCube ==&lt;br /&gt;
&lt;br /&gt;
RoundCube comes preinstalled within the [[:Plesk|Plesk]] control panel, and can be accessed by navigating to:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Mail&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== AfterLogic ==&lt;br /&gt;
&lt;br /&gt;
AfterLogic (WebMail Lite v8.6.0 and WebMail Pro v8.6.0) can be user-installed inside Plesk, by navigating to:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Applications &amp;gt; All Available Applications &amp;gt; Collaboration &amp;gt; Email&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-install-email-service.png]]&lt;br /&gt;
&lt;br /&gt;
== Mail Services Available with Softaculous ==&lt;br /&gt;
&lt;br /&gt;
Other mail services can be user-installed using [[:Softaculous]].&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous-mails.png]]&lt;br /&gt;
&lt;br /&gt;
== Supported Protocols ==&lt;br /&gt;
&lt;br /&gt;
If you would prefer to use an email application (such as Outlook or Thunderbird) or your phone to read and send email, you can do this with your HelioHost email accounts. We offer compatibility with both the POP3 and IMAP protocols for incoming mail, and employ the standard SMTP protocol for outgoing mail. &lt;br /&gt;
&lt;br /&gt;
For more information on how to set this up, navigate to:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Mail &amp;gt; Email Addresses &amp;gt; [ your email address ] &amp;gt; Click the &#039;i&#039; button&#039;&#039;&#039; to learn how to set up your email account in a mail client program, such as Microsoft Outlook, Outlook Express, Thunderbird, and Apple Mail. &lt;br /&gt;
&lt;br /&gt;
[[File:plesk-setup-email-on-device.png]]&lt;br /&gt;
&lt;br /&gt;
Click on &#039;Manual setup&#039;&lt;br /&gt;
&lt;br /&gt;
{{Info|When configuring mail clients, use your account&#039;s server name (&#039;morty.heliohost.org&#039;, &#039;tommy.heliohost.org&#039;, or &#039;johnny.heliohost.org&#039;) as the SMTP host address instead of your domain.}}&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-setup-email-on-device-2.png]]&lt;br /&gt;
&lt;br /&gt;
== Custom Mail ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use another mail server to handle your domain&#039;s email addresses, then HelioHost is the place for you. We allow users to [[:HelioHost_DNS_Records|request configuration of custom MX records]] for their domain, effectively forwarding all email load from HelioHost to a specified mail server.&lt;br /&gt;
&lt;br /&gt;
== SpamAssassin ==&lt;br /&gt;
&lt;br /&gt;
SpamAssassin is the most popular anti-spam solution for Linux systems and has won awards for its excellent performance. HelioHost offers SpamAssassin with all its accounts, allowing all users to prevent spam on their configured email accounts.&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 Support forum] and include &#039;&#039;&#039;the full 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;
== Archived Accounts Lose SPF, DKIM, and DMARC Setup == &lt;br /&gt;
&lt;br /&gt;
{{Caution|If your account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]] gets archived due to prolonged [[:Suspension_Policy#Inactivity_Policy|inactivity]], any SPF, DKIM, and DMARC settings configured on your account will be lost.&lt;br /&gt;
&lt;br /&gt;
After you have reactivated your archived account, you will need to [[#Set_Up_SPF,_DKIM,_and_DMARC_Records|request SPF, DKIM, and DMARC setup]] again.}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Express&amp;diff=2177</id>
		<title>Express</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Express&amp;diff=2177"/>
		<updated>2025-12-21T01:53:29Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add recommendation to change Application Mode to Development to enable detailed error reporting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Express.js ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|If you use Node.js, we strongly recommend that you [https://heliohost.org/dashboard/load/ monitor your site load here].  &lt;br /&gt;
&lt;br /&gt;
Node apps often require a lot of server resources, and exceeding the account load limits will cause your user account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on [[:Tommy|Tommy]] and [[:Johnny|Johnny]], or charged for overages on [[:Morty|Morty]].}}&lt;br /&gt;
&lt;br /&gt;
== About Express.js ==&lt;br /&gt;
&lt;br /&gt;
Express.js is a web application framework for [[:Node.js|Node.js]]. It provides a set of tools and features to build web applications and APIs quickly and easily. Express.js simplifies common tasks like routing, handling HTTP requests and responses, setting up middleware, and managing sessions. It is lightweight and flexible, allowing developers to structure their applications as they see fit. It is commonly used for building RESTful APIs or server-side applications.&lt;br /&gt;
&lt;br /&gt;
== Node.js on Plesk Uses Passenger ==&lt;br /&gt;
&lt;br /&gt;
== What is Passenger? ==&lt;br /&gt;
&lt;br /&gt;
Passenger is a way of running Node.js and other applications that normally require a constantly running background process. Instead of the process always running in the background just waiting for connections, Passenger shuts it down if there are no connections. When someone visits the website, Passenger fires up the Node.js (or Ruby, or whatever language you&#039;re using) process. If another person visits the website while the Node.js process is still running, page loads will be very fast. If there are no further page hits for 5 minutes or so, Passenger kills the background process.&lt;br /&gt;
&lt;br /&gt;
== Why Does HelioHost Use Passenger? ==&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t make sense to leave your car running 24/7 in front of your house just in case you need to drive somewhere so it saves you a second to start the engine. This is a massive waste of gas. Likewise, it doesn&#039;t make sense to leave Node.js sites running 24/7 just to save a second of load time in case someone needs to view the page. This is a massive waste of memory. At HelioHost, we want to ensure that the server memory is used efficiently so our servers work efficiently for the hundreds of users on our shared hosting platform.&lt;br /&gt;
&lt;br /&gt;
== Will Passenger Slow My Site Down? ==&lt;br /&gt;
&lt;br /&gt;
A recent speed test on HelioHost servers showed that our app [https://gtmetrix.com/reports/node.krydos1.heliohost.org/esvkM1p0/ only took 177ms to load from a cold start]. That&#039;s just under 1/5 of a second, roughly the amount of time it takes to blink.&lt;br /&gt;
&lt;br /&gt;
== How Can I Use Passenger? ==&lt;br /&gt;
&lt;br /&gt;
By following the steps in this tutorial, Plesk will automatically use Passenger to run your Node.js application.&lt;br /&gt;
&lt;br /&gt;
== Can I Change the Inactivity Timeout? ==&lt;br /&gt;
&lt;br /&gt;
No, the background process timeout is set to ensure fair resource usage for all our users and cannot be changed. If you need more control over memory management, we recommend you upgrade to a VPS where you can configure your settings. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I Prevent My Site from Sleeping? ==&lt;br /&gt;
&lt;br /&gt;
Passenger is designed to keep our shared hosting servers running efficiently and help keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]]. Deliberately preventing your site from sleeping is likely to get your account suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]] on our [[:Johnny|Johnny]] and [[:Tommy|Tommy]] servers, and charged for account load overages on our [[:Morty|Morty]] server.&lt;br /&gt;
&lt;br /&gt;
== What If My Users Cannot Wait For My Site To Load? ==&lt;br /&gt;
&lt;br /&gt;
If your application is highly time-sensitive and every millisecond of load time matters, you could upgrade to a VPS. {{Template:VPSInfo}} With a VPS, you won’t share your server with other users, so you can run any continuous process(es) that you want.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
If you prefer visual guidance, we have a [https://www.youtube.com/watch?v==Ak2yI8w-mew&amp;amp;ab_channel==HelioHost video tutorial] available for you to watch.  &lt;br /&gt;
To follow the written instructions, please continue reading below.&lt;br /&gt;
&lt;br /&gt;
Go into your project root. (If you don&#039;t have a project, you can use [https://github.com/HelioNetworks/Node.JS-Example this example project].)&lt;br /&gt;
&lt;br /&gt;
== How to Setup Express.js ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you created an &#039;index.html&#039; file inside your &#039;httpdocs&#039; directory, delete it or rename it to something else. &lt;br /&gt;
&lt;br /&gt;
Your Node.js files will go into your user directory (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;httpdocs&#039;):&lt;br /&gt;
&lt;br /&gt;
[[File:plesk_file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not using the above example, then create a new file &#039;app.js&#039; and put this inside:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const http = require(&#039;http&#039;);&lt;br /&gt;
const express = require(&#039;express&#039;);&lt;br /&gt;
const port = 3000;&lt;br /&gt;
&lt;br /&gt;
const app = express();&lt;br /&gt;
&lt;br /&gt;
app.get(&#039;/&#039;, (req, res) =&amp;gt; {&lt;br /&gt;
  res.status(200).send(&#039;Node.js is working with Express and http.&#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Create an HTTP server using the Express app&lt;br /&gt;
const server = http.createServer(app);&lt;br /&gt;
&lt;br /&gt;
server.listen(port, () =&amp;gt; {&lt;br /&gt;
  console.log(`Server running`);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new file &#039;package.json&#039; and put this inside:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;node-test&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;private&amp;quot;: true,&lt;br /&gt;
  &amp;quot;scripts&amp;quot;: {&lt;br /&gt;
    &amp;quot;start&amp;quot;: &amp;quot;node app.js&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;dependencies&amp;quot;: {&lt;br /&gt;
    &amp;quot;cookie-parser&amp;quot;: &amp;quot;~1.4.4&amp;quot;,&lt;br /&gt;
    &amp;quot;debug&amp;quot;: &amp;quot;~2.6.9&amp;quot;,&lt;br /&gt;
    &amp;quot;express&amp;quot;: &amp;quot;~4.16.1&amp;quot;,&lt;br /&gt;
    &amp;quot;http-errors&amp;quot;: &amp;quot;~1.6.3&amp;quot;,&lt;br /&gt;
    &amp;quot;morgan&amp;quot;: &amp;quot;~1.9.1&amp;quot;,&lt;br /&gt;
    &amp;quot;pug&amp;quot;: &amp;quot;^3.0.2&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Plesk, go to: &#039;Website &amp;amp; Domains &amp;gt; [domain]&#039; &lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-link.png]]&lt;br /&gt;
&lt;br /&gt;
== Server Setup ==&lt;br /&gt;
&lt;br /&gt;
Upload all your files to your server. Then go to the Node.js section and set the following:  &lt;br /&gt;
&lt;br /&gt;
* Node.js Version: we recommend using [[:Node.js#Supported_Versions|the latest available]].&lt;br /&gt;
* Application Root: &#039;/&#039; (This is the folder where you uploaded your project.)&lt;br /&gt;
* Application Startup File: &#039;app.js&#039; (The entry point of our app, use the file we created earlier.)&lt;br /&gt;
* Here, you&#039;re able to configure settings for your application.&lt;br /&gt;
&lt;br /&gt;
{{Info|We strongly recommend you change the &#039;&#039;&#039;Application Mode&#039;&#039;&#039; to &#039;&#039;&#039;Development&#039;&#039;&#039; as this will provide you with more detailed error reporting to help with troubleshooting and debugging any issues.}}&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-settings.png]]&lt;br /&gt;
&lt;br /&gt;
== Starting the Server ==&lt;br /&gt;
&lt;br /&gt;
Once all of the above steps are done, press the &#039;Enable Node.js&#039; button.&lt;br /&gt;
&lt;br /&gt;
[[File:enableNodeJs.png]]&lt;br /&gt;
&lt;br /&gt;
Then you need to run the &#039;NPM install&#039; command.&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-npm-install.png]]&lt;br /&gt;
&lt;br /&gt;
Finally, you will need to wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for the server to update.&lt;br /&gt;
&lt;br /&gt;
Node.js application deployment can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as it requires an Apache restart. After an entire 2 hours, if your Node app is not working for you, please [[:Clear_Your_Cache|clear your web browser cache]].&lt;br /&gt;
&lt;br /&gt;
Once the Node.js application has been deployed, you should be able to visit &#039;domain.helioho.st&#039; in your web browser and see the text &#039;Node.js is working with Express and http.&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-working-with-express.png]]&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If it&#039;s been more than 2 hours, and the Node.js application still isn&#039;t working, please go back and check all of your steps again. If it&#039;s been more than a full 2 hours since your changes, and it still isn&#039;t working even after you [[:Clear_Your_Cache|clear your web browser cache]], 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 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&#039;&#039;&#039;, and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; encountered.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Node.js&amp;diff=2176</id>
		<title>Node.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Node.js&amp;diff=2176"/>
		<updated>2025-12-21T01:51:20Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add recommendation to change Application Mode to Development to enable detailed error reporting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Node.js Tutorials == &lt;br /&gt;
&lt;br /&gt;
{{Info|This page features our Node.js tutorial. &lt;br /&gt;
&lt;br /&gt;
We also have tutorials for building [[:Express|Express]] or [[:Next.js|Next.js]] apps with Node.js.}}&lt;br /&gt;
&lt;br /&gt;
== Node.js Server Resource Usage == &lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
If you use Node.js, we strongly recommend that you [https://heliohost.org/dashboard/load/ monitor your site load here]. &lt;br /&gt;
&lt;br /&gt;
Node apps often require a lot of server resources, and exceeding the account load limits will cause your user account to be [[:Suspension_Policy#High_Server_Usage|suspended for high server usage]] on [[:Tommy|Tommy]] and [[:Johnny|Johnny]], or charged for overages on [[:Morty|Morty]].}}&lt;br /&gt;
 &lt;br /&gt;
== Node.js Versions Supported ==&lt;br /&gt;
&lt;br /&gt;
The Node.js versions currently supported on the shared hosting servers are listed below. While we aim to keep Node versions current, please make sure you review our [[:ETA|ETAs for new features]].&lt;br /&gt;
&lt;br /&gt;
{{Info|If you require a different version of Node.js than the options offered below, you&#039;ll need to get a VPS. {{Template:VPSInfo}}}}&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
* Node 16&lt;br /&gt;
* Node 18&lt;br /&gt;
* Node 20&lt;br /&gt;
* Node 21&lt;br /&gt;
* Node 22&lt;br /&gt;
* Node 23&lt;br /&gt;
&lt;br /&gt;
== Tommy server == &lt;br /&gt;
* Node 16&lt;br /&gt;
* Node 18&lt;br /&gt;
* Node 20&lt;br /&gt;
* Node 21&lt;br /&gt;
* Node 22&lt;br /&gt;
* Node 23&lt;br /&gt;
&lt;br /&gt;
== Johnny server == &lt;br /&gt;
* Node 16&lt;br /&gt;
* Node 18&lt;br /&gt;
* Node 20&lt;br /&gt;
* Node 21&lt;br /&gt;
* Node 22&lt;br /&gt;
* Node 23&lt;br /&gt;
&lt;br /&gt;
== About Node.js ==&lt;br /&gt;
&lt;br /&gt;
As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications. In Node.js applications, many connections can be handled concurrently. Upon each connection, the callback is fired, but if there is no work to be done, Node.js will sleep.&lt;br /&gt;
&lt;br /&gt;
This is in contrast to today&#039;s more common concurrency model, in which OS threads are employed. Thread-based networking is relatively inefficient and very difficult to use. Furthermore, users of Node.js are free from worries of dead-locking the process, since there are no locks. Almost no function in Node.js directly performs I/O, so the process never blocks. Because nothing blocks, scalable systems are very reasonable to develop in Node.js.&lt;br /&gt;
&lt;br /&gt;
== Node.js on Plesk Uses Passenger ==&lt;br /&gt;
&lt;br /&gt;
== What is Passenger? ==&lt;br /&gt;
&lt;br /&gt;
Passenger is a way of running Node.js and other applications that normally require a constantly running background process. Instead of the process always running in the background just waiting for connections, Passenger shuts it down if there are no connections. When someone visits the website, Passenger fires up the Node.js (or Ruby, or whatever language you&#039;re using) process. If another person visits the website while the Node.js process is still running, page loads will be very fast. If there are no further page hits for 5 minutes or so, Passenger kills the background process.&lt;br /&gt;
&lt;br /&gt;
== Why Does HelioHost Use Passenger? ==&lt;br /&gt;
&lt;br /&gt;
It doesn&#039;t make sense to leave your car running 24/7 in front of your house just in case you need to drive somewhere so it saves you a second to start the engine. This is a massive waste of gas. Likewise, it doesn&#039;t make sense to leave Node.js sites running 24/7 just to save a second of load time in case someone needs to view the page. This is a massive waste of memory. At HelioHost, we want to ensure that the server memory is used efficiently so our servers work efficiently for the hundreds of users on our shared hosting platform.&lt;br /&gt;
&lt;br /&gt;
== Will Passenger Slow My Site Down? ==&lt;br /&gt;
&lt;br /&gt;
A recent speed test on HelioHost servers showed that our app only took 177ms to load from a cold start. That&#039;s just under 1/5 of a second, roughly the amount of time it takes to blink.&lt;br /&gt;
&lt;br /&gt;
== How Can I Use Passenger? ==&lt;br /&gt;
&lt;br /&gt;
By following the steps in this tutorial, Plesk will automatically use Passenger to run your Node.js application.&lt;br /&gt;
&lt;br /&gt;
== Can I Change the Inactivity Timeout? ==&lt;br /&gt;
&lt;br /&gt;
No, the background process timeout is set to ensure fair resource usage for all our users and cannot be changed. If you need more control over memory management, HelioHost offers a range of [https://heliohost.org/vps/ VPS plans], where you can configure your settings, and a 10% discount when you pay for 6 months upfront.&lt;br /&gt;
&lt;br /&gt;
== Can I Prevent My Site from Sleeping? ==&lt;br /&gt;
&lt;br /&gt;
Passenger is designed to keep our shared hosting servers running efficiently and help keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]]. Deliberately preventing your site from sleeping is likely to get your account suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]] on our [[:Johnny|Johnny]] and [[:Tommy|Tommy]] servers, and charged for account load overages on our [[:Morty]] server.&lt;br /&gt;
&lt;br /&gt;
== What If My Users Cannot Wait For My Site To Load? ==&lt;br /&gt;
&lt;br /&gt;
If your application is highly time-sensitive and every millisecond of load time matters, you could upgrade to a VPS. {{Template:VPSInfo}} With a VPS, you won’t share your server with other users, so you can run any continuous process(es) that you want.&lt;br /&gt;
&lt;br /&gt;
== How to setup Node.js ==&lt;br /&gt;
&lt;br /&gt;
==== Delete the &#039;index.html&#039; file (if it exists) ====&lt;br /&gt;
&lt;br /&gt;
First, if you have an &#039;index.html&#039; file inside your &#039;httpdocs&#039; folder, delete it (or rename it to something else).&lt;br /&gt;
&lt;br /&gt;
Your Node.js files will go into your home directory (&#039;&#039;&#039;NOT&#039;&#039;&#039; &#039;httpdocs&#039;):&lt;br /&gt;
&lt;br /&gt;
[[File:plesk_file_manager.png]]&lt;br /&gt;
&lt;br /&gt;
==== Create an app.js file ====&lt;br /&gt;
&lt;br /&gt;
In your home directory folder, create an &#039;app.js&#039; file with these contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const http = require(&#039;http&#039;);&lt;br /&gt;
const hostname = &#039;127.0.0.1&#039;;&lt;br /&gt;
const port = 3000;&lt;br /&gt;
&lt;br /&gt;
const server = http.createServer((req, res) =&amp;gt; {&lt;br /&gt;
  res.statusCode = 200;&lt;br /&gt;
  res.setHeader(&#039;Content-Type&#039;, &#039;text/html&#039;);&lt;br /&gt;
  res.end(&#039;Node.js is working.&#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
server.listen(port, hostname, () =&amp;gt; {&lt;br /&gt;
  console.log(`Server running at http://${hostname}:${port}/`);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configure Node.js settings ==== &lt;br /&gt;
&lt;br /&gt;
In Plesk, go to: &#039;&#039;&#039;Website &amp;amp; Domains &amp;gt; [domain] click on the &#039;Get Started&#039; tab&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-link.png]]&lt;br /&gt;
&lt;br /&gt;
Here, you&#039;re able to configure settings for your application.&lt;br /&gt;
&lt;br /&gt;
{{Info|We strongly recommend you change the &#039;&#039;&#039;Application Mode&#039;&#039;&#039; to &#039;&#039;&#039;Development&#039;&#039;&#039; as this will provide you with more detailed error reporting to help with troubleshooting and debugging any issues.}}&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-settings.png]]&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to worry about environment variables on this simple example. Select &#039;app.js&#039; for your startup file. If you have any NPM packages, Plesk can install them for you.&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-npm-install.png]]&lt;br /&gt;
&lt;br /&gt;
==== Wait for the next Apache server restart ==== &lt;br /&gt;
&lt;br /&gt;
Finally, you will need to wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for the server to update.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Node.js application deployment can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as it requires an Apache restart. After an entire 2 hours, if your Node app is not working for you, please [[:Clear_Your_Cache|clear your web browser cache]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Once the Node.js application has been deployed, you should be able to visit &#039;domain.helioho.st&#039; in your web browser and see the text &#039;Node.js is working.&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:nodejs-working.png]]&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If you encounter any Phusion Passenger(R) application server errors, please review our [[:Could_Not_Spawn_Process#Troubleshooting_Node_/_Passenger_Issues|Passenger troubleshooting help page]] for guidance on switching your application environment to &#039;Development&#039; mode to see more detailed error reporting.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s been more than 2 hours, and the Node.js application still isn&#039;t working, please go back and check all of your steps again. If it&#039;s been more than a full 2 hours since your changes, and it still isn&#039;t working even after you [[:Clear_Your_Cache|cleared your web browser cache]], 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 create 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&#039;&#039;&#039;, and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; encountered.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=File:Nodejs-settings.png&amp;diff=2175</id>
		<title>File:Nodejs-settings.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=File:Nodejs-settings.png&amp;diff=2175"/>
		<updated>2025-12-21T01:45:03Z</updated>

		<summary type="html">&lt;p&gt;KazVee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2173</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2173"/>
		<updated>2025-12-11T00:40:11Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Update FAQ about exec() to reflect that it is no longer offered on Lily&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ / Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
== ETA for New Features, Version Upgrades, and Server Repairs ==&lt;br /&gt;
&lt;br /&gt;
{{Info|For information on ETAs for new features, software version upgrades, or server fixes, please review our [[:ETA|ETA]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Where do I ask for help? == &lt;br /&gt;
&lt;br /&gt;
Wherever you prefer to ask for help, please ask your question &#039;&#039;&#039;in one place only&#039;&#039;&#039;. HelioHost is run by volunteers who contribute their free time, and some are more active on certain platforms than others. Posting the same question across multiple platforms (like Discord, the HelioNet Forum, or email) or creating duplicate requests on the same platform for the same issue can result in unnecessary duplication of volunteer effort and delay responses to you, as well as to others who need help.&lt;br /&gt;
&lt;br /&gt;
We recommend using the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] for support questions. If you later decide to ask on Discord for live help, please update your forum thread to let us know your issue has been resolved or moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How does community-powered support work? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run entirely by volunteers. All support staff are volunteers who donate their free time to help others. In many cases, other users will also step in to offer support, simply because they want to give back to our community. Every staff member started out as a regular user who appreciated the project and began helping others with their questions and issues.&lt;br /&gt;
&lt;br /&gt;
All support requests in the [https://helionet.org/ HelioNet Forum] are public, since this is the most efficient way for users to get help from the entire HelioHost community. This community-powered support model ensures that solutions are searchable and reusable by any other users who face similar issues in the future. Without public support, we wouldn’t attract new volunteers, and support would likely disappear altogether.&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, and do not consider the following items to be private information: &lt;br /&gt;
* [[:Signing_Up#Usernames_are_not_private | Usernames]]&lt;br /&gt;
* Domain names&lt;br /&gt;
* IP addresses&lt;br /&gt;
* [[#Providing_PayPal_Transaction_ID | PayPal Transaction IDs]]&lt;br /&gt;
&lt;br /&gt;
If you choose to request support, you may be asked to provide some or all of the above details to assist with the resolution of your request.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to provide this information publicly, you could instead choose to use [https://wiki.helionet.org/ this Wiki] or the [https://helionet.org/ HelioNet Forum] as a completely self-serve option to try to resolve your queries yourself, without assistance or support from our community.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from forum posts are handled at the sole discretion of staff. In some cases, staff may choose to prioritize helping users with technical issues instead. Resolving actual problems can feel more meaningful and rewarding for volunteers than editing out public information from a public post on a public forum on the internet.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from public forum posts may eventually be considered under a [[#Can_I_get_Private_Support? | paid donation-only private support model]], where in exchange for a donation a staff member will remove public information from a public support post.&lt;br /&gt;
&lt;br /&gt;
== Can I PM an administrator for help? ==&lt;br /&gt;
&lt;br /&gt;
No, do not PM the administrators expecting support unless we explicitly tell you to. Please use the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] instead. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and &#039;&#039;&#039;server name&#039;&#039;&#039; along with any requests. If you are sending your support request via email to &#039;support@heliohost.org&#039;, make sure to contact us &#039;&#039;&#039;from the same email address as your hosting account&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I get Private Support? == &lt;br /&gt;
&lt;br /&gt;
There is currently no option for private support of any kind. Some users have expressed concerns about privacy, so we’re planning to offer a private support option for donors only, but there is [[:ETA|no ETA]] on when this may be implemented.&lt;br /&gt;
&lt;br /&gt;
Eventually, for users who do not want their requests and the responses to them made public, where hundreds of community members might otherwise be able to help, private support requests will only be visible to staff. Then, if one of the handful of volunteer staff members has some spare time outside of their jobs, studies, and personal lives, they could pick up a donor-only paid support request.&lt;br /&gt;
&lt;br /&gt;
Since a private support model for donors only will tie up an admin&#039;s time and prevent everyone else within the wider user community from helping out, it will likely be even slower than the existing community-powered model, with [[:ETA|no ETAs]] for private support requests from donors.&lt;br /&gt;
&lt;br /&gt;
== Your homepage says &amp;quot;Professional-Grade Hosting&amp;quot;, but your support sucks / isn&#039;t helping me / is run by a number of volunteers, what gives?‌ ==&lt;br /&gt;
&lt;br /&gt;
There is a difference between &amp;quot;Professional-Grade Hosting&amp;quot; and &amp;quot;Professional-Grade Customer Support&amp;quot;. Most people are used to having dedicated customer support staff that will answer every little question; this comes standard with paid hosting. However, we don&#039;t do that here. Among the five of us, we have the collective knowledge and technical expertise of any other support staff, but in order for us to help you, we expect from you a certain competency. You must try to spell and use grammar correctly (to the best of your ability). You must provide necessary information (e.g. &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039;). You must be able to read instructions, and you must be able to follow instructions. We will treat you with respect and professionalism if you follow these guidelines. We will probably be very annoyed if u tyep liek dis.‌&lt;br /&gt;
&lt;br /&gt;
== Can I get a free VPS? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost does not offer free VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
What HelioHost offers for free is &#039;&#039;&#039;[[#Can_I_have_more_than_one_account?|1 account per person]]&#039;&#039;&#039; on our shared web hosting server, [[:Johnny]]. Check out our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny | list of helpful tips for getting a free account on Johnny]] if you would like to sign up.&lt;br /&gt;
&lt;br /&gt;
== I log in frequently but am still receiving inactivity emails, what gives? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], to ensure that your logins are logged, log in to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review the [[:Suspension_Policy#Inactivity_Policy|Inactivity Policy]] section of our [[:Suspension_Policy|Suspension Policy]].&lt;br /&gt;
&lt;br /&gt;
== Why must all posts on HelioNet be in English? ==&lt;br /&gt;
&lt;br /&gt;
The support staff is fluent and reliable only in English.&lt;br /&gt;
&lt;br /&gt;
== Why does HelioHost crash? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes users will abuse server resources and cause the server to crash. We try to fix this as quickly as we can. Since the servers and Plesk are handling such a high volume of users, errors are bound to come up. We also try to fix these ASAP. Also, when [[:Ashoat|djbob]] works on the server, he occasionally screws up, which also causes crashes.&lt;br /&gt;
&lt;br /&gt;
== Why was my account suspended? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Suspension_Policy|Suspension Policy]] provides comprehensive details on why we will suspend accounts.&lt;br /&gt;
&lt;br /&gt;
A few common reasons for account suspensions are: &lt;br /&gt;
&lt;br /&gt;
* [[:Terms|Terms of Service]] violation(s).&lt;br /&gt;
* [[:Suspension_Policy#Inactivity_Policy|Account Inactivity]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Renew your account [http://heliohost.org/renew/ here].&lt;br /&gt;
* [[:Suspension_Policy#Duplicate_Accounts|Duplicate Accounts]] on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers. The limit is &#039;&#039;&#039;1 account per human being&#039;&#039;&#039;.&lt;br /&gt;
** Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#Account_Storage_Limits|Account Storage limits]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We offer 1000 MB of free web space and optional one-time paid donation options for [[:Donations_for_Increased_Storage|increased account storage]] {{Template:VPSInfo}}&lt;br /&gt;
** Our [[:Morty|Morty]] server also offers 1000 MB of free web space. If you exceed this limit, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#High_Server_Usage|High Server Usage]] limits on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We enforce a memory limit of no more than {{Template:MemoryLimit}} and a limit of {{Template:CPULimit}} per day. You can monitor your load numbers on [https://heliohost.org/dashboard/load/ the load page within your dashboard].&lt;br /&gt;
** Our [[:Morty|Morty]] server also has a memory limit of no more than {{Template:MemoryLimit}} and limit of {{Template:CPULimit}} per day. If you exceed these limits, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
&lt;br /&gt;
It is also possible that this was an error in our system. If you suspect that this is the case, report the error in a new post [https://helionet.org/index/forum/81-suspended-and-queued-accounts/ here], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Why does my new subdomain show a &amp;quot;Queued&amp;quot; page? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|All domain and subdomain changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;br /&gt;
&lt;br /&gt;
During the first 2 hours, seeing the queued page is normal and only means the change hasn&#039;t taken effect yet. If it&#039;s been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, try [[:Clear_Your_Cache|clearing your browser cache]].&lt;br /&gt;
&lt;br /&gt;
== Why can&#039;t I log in? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you just registered, please wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your Plesk account to become fully active.}}&lt;br /&gt;
&lt;br /&gt;
If it has been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039; since you registered and you still see an &#039;Account Queued&#039; page, try [[:Clear_Your_Cache|clearing your browser cache]]. If you are still experiencing problems, make sure you are entering your username in all lowercase letters, i.e. &amp;quot;wizard&amp;quot;, not &amp;quot;Wizard&amp;quot; or &amp;quot;WIZARD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How do I keep my account active / prevent being suspended? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], login to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review our [[:Suspension_Policy|Inactivity Policy]].&lt;br /&gt;
&lt;br /&gt;
On our scaling hosting server, [[:Morty|Morty]], as long as there is a positive balance on your account, it will remain active without needing to log in.&lt;br /&gt;
&lt;br /&gt;
== What is a Daily Signup Limit and why is it stopping me from registering? ==&lt;br /&gt;
&lt;br /&gt;
Each server has a daily limit for sign-ups so that it doesn&#039;t crash from all the people wanting to use HelioHost. Free signups on Johnny now reset [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours] at midnight UTC and noon 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;
== What if I have at least $2 USD and don&#039;t want to wait to sign up? ==&lt;br /&gt;
&lt;br /&gt;
For a one-time donation of as little as $2 USD, you can open an account on our [[:Tommy|Tommy]] server any time of day. We offer various [https://heliohost.org/tommy/ Donor Plans], enabling you to sign up anytime with your donation via Credit card, Debit card, or PayPal.&lt;br /&gt;
&lt;br /&gt;
If you prefer to donate Crypto to get a Tommy account, visit the [https://heliohost.org/donate/ Donate] page to view our Cryptocurrency wallets. Make sure that after transaction fees/gas the donation amount is $2 USD or more. After making the donation, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] so the transaction can be verified. Make sure you let us know the currency, amount, time of the transaction, and the email address you want the Tommy invite sent to. Please be aware that crypto donations can take time to verify. In the case of XMR and AEON, these can take several days to verify and are not recommended.&lt;br /&gt;
&lt;br /&gt;
Users on our Tommy donor server and the free Johnny server are [[:Suspension_Policy#Inactivity Policy|required to log in at least once a month]] to keep their accounts active.&lt;br /&gt;
&lt;br /&gt;
== What other options are available if I want to sign up right away? == &lt;br /&gt;
&lt;br /&gt;
For users who prefer not to have to log in regularly, our [[:Morty|Morty]] scaling server has no login requirement as long as there is a positive balance on your account.&lt;br /&gt;
&lt;br /&gt;
{{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== My account was deleted. Can I get my data back? ==&lt;br /&gt;
&lt;br /&gt;
No. We do not keep backups of your data nor is it our responsibility to, as mentioned in our [[:Terms|Terms of Service]]. You must backup your own data regularly and download the backup to your local machine.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure how to backup your data, please see our [[:Account_Backups|Account Backups tutorial]] page. It contains guidance on creating manual backups to download to your local machine, and instructions for setting up scheduled automated backups within Plesk.&lt;br /&gt;
&lt;br /&gt;
== Can I have more than one account? ==&lt;br /&gt;
&lt;br /&gt;
The first line of our [[:Terms | Terms of Service]] confirms that the limit is &#039;&#039;&#039;[[:Suspension_Policy#Duplicate_Accounts  |1 account per human being]]&#039;&#039;&#039; on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, even if you use different email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Accounts Allowed on Morty ===&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== How do I reset my hosting account to start fresh? ==&lt;br /&gt;
&lt;br /&gt;
{{Danger|Before requesting an account reset, make sure that the email address on your account is not hosted on HelioHost or else &#039;&#039;&#039;you will not be able to receive the invite email to recreate your account&#039;&#039;&#039; after it is wiped.&lt;br /&gt;
&lt;br /&gt;
To check which email address is associated with your hosting account, go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== Admin Account Reset Limits ===&lt;br /&gt;
&lt;br /&gt;
{{Info|Due to certain users abusing our generosity in the past and requesting 5 or so resets in less than a week, we now limit each account to &#039;&#039;&#039;1 free reset per week&#039;&#039;&#039; done by an admin, with the option to [[#Purchasing_Additional_Account_Resets|donate for additional account resets if needed.]]}}&lt;br /&gt;
&lt;br /&gt;
=== Free Self-Serve Account Resets (with Account Delete/Account Recreate) ===&lt;br /&gt;
&lt;br /&gt;
We will eventually be adding the ability for users to reset their accounts automatically, without the need for admin assistance. However, there is [[:ETA|no estimated timeframe for this]], since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
In the meantime, users may delete their account and then recreate it, which effectively resets all account settings and contents, accomplishing the same thing as an account reset does.&lt;br /&gt;
&lt;br /&gt;
Before deleting your account, [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|make a backup]]. Then, to delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button. Please make sure to allow some time for the deletion process to complete.&lt;br /&gt;
&lt;br /&gt;
To recreate your account, try to login. You will be greeted with a &#039;Welcome back!&#039; message, and prompted to enter your email address to receive an email invite to recreate your old account. Make sure to enter the same email address that was on the account you just deleted. Follow the steps to complete account recreation. You will receive an email confirming the new account has been successfully created.&lt;br /&gt;
&lt;br /&gt;
{{Info|Account creation can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; because it requires an Apache reset. }}&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional Account Resets ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional account reset, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for account reset]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your account reset request, so the donation can be verified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Account resets must be purchased one at a time, and cannot be pre-ordered in bulk.&lt;br /&gt;
&lt;br /&gt;
=== Before Asking an Admin for an Account Reset ===&lt;br /&gt;
&lt;br /&gt;
Because wiping an account is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
Before asking for an account reset, we strongly recommend creating an [[:Account_Backups | account backup]], and &#039;&#039;&#039;downloading it to your local machine&#039;&#039;&#039; first. Any backups left inside Plesk will be wiped out during the reset.&lt;br /&gt;
&lt;br /&gt;
To request that we reset your account so you can start over, send an email &#039;&#039;&#039;from the same email address listed in Plesk as your external email address&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and wipe your account. Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your hosting account.&lt;br /&gt;
&lt;br /&gt;
Once your account has been reset, you will receive an email with a link to restart your account. &#039;&#039;&#039;You will have 7 days to use the link.&#039;&#039;&#039; If you don&#039;t use the link to restart your account within 7 days, you will need to signup for a brand new account.&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Disable Webmail ===&lt;br /&gt;
&lt;br /&gt;
If you had webmail on your account, you will need to re-enable it after the reset has been completed. You can do this by going to: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Remove WSGI Control Access ===&lt;br /&gt;
&lt;br /&gt;
If you had WSGI Control Access on your [[:Morty]] server account for [[:Flask|Flask]] or [[:Django|Django]] and you want this re-enabled after the 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;
=== Account Resets Remove Addon Domains ===&lt;br /&gt;
&lt;br /&gt;
If you had [[:Addon_Domains | additional domains]] on your account, you will need to re-request them after the reset has been completed.&lt;br /&gt;
&lt;br /&gt;
== VPS Rebuilds ==&lt;br /&gt;
&lt;br /&gt;
Due to certain users abusing our generosity in the past and requesting 50 or so rebuilds in less than a month, we now limit each VPS to &#039;&#039;&#039;1 free rebuild per month&#039;&#039;&#039; with the option to [[#Purchasing_Additional_VPS_Rebuilds | donate for additional VPS rebuilds]] if needed.&lt;br /&gt;
&lt;br /&gt;
=== How do I request a VPS rebuild? ===&lt;br /&gt;
&lt;br /&gt;
Because rebuilding a VPS is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
To request that we rebuild your VPS, send an email &#039;&#039;&#039;from the same email address as your VPS account&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and rebuild your VPS. If you would like a free dashboard (Hestia, KeyHelp, etc.) installed after the rebuild, please include this in the request.  &lt;br /&gt;
&lt;br /&gt;
Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your VPS account. If you&#039;re not sure what email address is associated with your VPS account, you can check by logging into the [https://heliohost.org/login/ VPS Dashboard] with your VPS Username and Password. The email address attached to your VPS account will be displayed at the top right of the page.&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional VPS Rebuilds ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional VPS rebuild, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for VPS Rebuild]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your VPS rebuild request, so the donation can be verified.&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;
== How do I change the contact email address on my account? ==&lt;br /&gt;
&lt;br /&gt;
We recommend using a reliable external email address for your contact address because if you lose access to your HelioHost account, the contact email is the only way you have of recovering your account. If that email is hosted by us, you likely won&#039;t be able to access it either.&lt;br /&gt;
&lt;br /&gt;
To change the email address on your account, login and go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
&lt;br /&gt;
== How do I delete my hosting account? ==&lt;br /&gt;
&lt;br /&gt;
To delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button.&lt;br /&gt;
&lt;br /&gt;
To delete your HelioNet Forum account, post a topic in the [https://helionet.org/index/forum/4-contact-helionet/?do=add Contact HelioNet forum].&lt;br /&gt;
&lt;br /&gt;
== How do I change my main domain? ==&lt;br /&gt;
&lt;br /&gt;
To change the main domain on your HelioHost Plesk account, 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 domain name&#039;&#039;&#039; you want as your main domain, &#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;
{{Caution|There is a risk of data loss when main domains are changed. We strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] and &#039;&#039;&#039;download the backup to your local machine&#039;&#039;&#039; before requesting a main domain change. 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;
As an alternative to changing your main domain, consider using [[:Parked_(Alias)_Domains|Parked (Alias)]], [[:Addon_Domains|Addon]], and/or [[:Subdomains|Subdomains]].&lt;br /&gt;
&lt;br /&gt;
== What are the nameservers for HelioHost? ==&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== What IP addresses should I add to my DNS? == &lt;br /&gt;
&lt;br /&gt;
To add A (IPv4) or AAAA (IPv6) records to your domain registrar&#039;s dashboard, follow these steps to view the IP addresses for your server:  &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;
== The server is slow / Feature XYZ doesn&#039;t work / Something&#039;s wrong with my account / etc. ==&lt;br /&gt;
&lt;br /&gt;
Please post the issue in the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] and we will try to solve the problem. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error messages&#039;&#039;&#039; you are encountering.&lt;br /&gt;
&lt;br /&gt;
== Can Feature XYZ be installed? ==&lt;br /&gt;
&lt;br /&gt;
Softaculous [https://helionet.org/index/topic/59683-softaculous-has-returned/ returned in March 2024] and is offered on our [[:Morty|Morty]], [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, making it possible to install the latest version of 459 different software packages with just a single click.&lt;br /&gt;
&lt;br /&gt;
To browse the available options, login to Plesk and select Softaculous from the menu:&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous_menu_item.png]]&lt;br /&gt;
&lt;br /&gt;
If you need a system-wide feature installed, please post a request in our [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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any applicable &#039;&#039;&#039;version numbers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I use SSH? ==&lt;br /&gt;
&lt;br /&gt;
On hosting accounts, secure shell access (SSH) is disabled for security reasons. &lt;br /&gt;
&lt;br /&gt;
However, it is possible to run jailed shell commands using Plesk&#039;s [[:Cron_Jobs|Scheduled Tasks (cron jobs)]] feature. &lt;br /&gt;
&lt;br /&gt;
In many cases, SSH is not actually necessary. Please post a request in our our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;the command you want to run&#039;&#039;&#039;, and we&#039;ll be happy to investigate other ways to accomplish the same task without SSH.&lt;br /&gt;
&lt;br /&gt;
If you absolutely require SSH access, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use proc_open(), exec(), popen(), etc.? ==&lt;br /&gt;
&lt;br /&gt;
These these functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Does HelioHost support sockets? Which ports are open? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers have zero inbound ports available to be opened. All ports that are currently open already have services listening, such as 80 http, 443 https, 3306 MariaDB, and 5432 PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Outbound ports are similar: ports like 80, 443, 3306, 5432, 25, 465, etc., are open to allow scripts to connect to common services on remote servers.&lt;br /&gt;
&lt;br /&gt;
If you can proxy your websocket through Apache or Nginx, it can work without opening a port:  &lt;br /&gt;
* You could use an &#039;.htaccess&#039; file to proxy the websocket connection through Apache.&lt;br /&gt;
* With the help of a root admin, you could get an Nginx proxy set up. To explore this option, please post a request in our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;details about your websocket application&#039;&#039;&#039;, and we&#039;ll be happy to help.&lt;br /&gt;
&lt;br /&gt;
If you absolutely need a port opened, you&#039;ll need to get a VPS, and you will then have all 65535 ports available to open or close as you want. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Are directory indexes enabled? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Directory indexes have been enabled by default on the shared hosting servers since late 2024. This is a feature many users have requested over the past few years, but if you don&#039;t want directory listings for a folder, simply create an empty &#039;index.html&#039; file inside it. Please check our [[:Create_Website#Directory_Index | Directory Index]] section for further information.&lt;br /&gt;
&lt;br /&gt;
== Can I change my document root directory? ==&lt;br /&gt;
&lt;br /&gt;
Typically, your domain root directory is &#039;httpdocs&#039; (or &#039;public_html&#039; if you were transferred from the old cPanel). Users cannot change the document root themselves inside Plesk. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning on using Laravel, you can set the document root yourself by using the [[:Laravel#Document_Root | Laravel Toolkit]].&lt;br /&gt;
&lt;br /&gt;
If you have a legitimate reason for needing the document root changed, please create a post in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and make sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, &#039;&#039;&#039;the new document root directory you want&#039;&#039;&#039;, and a &#039;&#039;&#039;valid reason&#039;&#039;&#039; explaining why you are unable to use your existing document root. The admins will review your request to determine if the change can be made.&lt;br /&gt;
&lt;br /&gt;
== I can login to Plesk, but can&#039;t login to SFTP, what do I do? == &lt;br /&gt;
&lt;br /&gt;
Sometimes the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How do I stop my Node.js app? ==&lt;br /&gt;
&lt;br /&gt;
Node tutorials found elsewhere on the internet probably assume you have a VPS (not shared hosting) and you&#039;ll quickly get suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]]. &lt;br /&gt;
&lt;br /&gt;
If you need to stop a Node process that is already running, deleting the Node.js files via the file manager will &#039;&#039;&#039;not&#039;&#039;&#039; stop already running processes.&lt;br /&gt;
&lt;br /&gt;
To stop an already running Node.js process, you should disable Node by following the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Get Started &amp;gt; Node.js &amp;gt; Disable Node.js&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you follow our [[:Node.js|Node.js guide]], it will use Passenger which automatically stops Node.js processes if your website isn&#039;t getting any visitors. This will help try to keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]].&lt;br /&gt;
&lt;br /&gt;
If you do not want to use Passenger, we recommend you upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use your services to mine cryptocurrency? == &lt;br /&gt;
&lt;br /&gt;
No. We do not allow mining on any of our plans (free or paid).&lt;br /&gt;
&lt;br /&gt;
== Your hosting SUCKS! So do YOU!!! ==&lt;br /&gt;
&lt;br /&gt;
Please see [http://helionet.org/index/topic/4723-suspended/page__p__46231#entry46231 this].&lt;br /&gt;
&lt;br /&gt;
== I still have a question about HelioHost. ==&lt;br /&gt;
&lt;br /&gt;
Post in the [https://helionet.org/index/forum/48-questions/ Questions forum] and we&#039;ll try to help you the best we can.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Lily&amp;diff=2172</id>
		<title>Lily</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Lily&amp;diff=2172"/>
		<updated>2025-12-11T00:33:46Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add PHP 8.4 &amp;amp; PHP 8.5 to versions offered on Lily server&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;
* 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;
* PHP 8.4&lt;br /&gt;
* PHP 8.5&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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=NET_NET_Core_Classic_ASP&amp;diff=2171</id>
		<title>NET NET Core Classic ASP</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=NET_NET_Core_Classic_ASP&amp;diff=2171"/>
		<updated>2025-12-11T00:33:12Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add .NET 9.0 to versions offered on Lily&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== .NET / .NET Core / Classic ASP ==&lt;br /&gt;
&lt;br /&gt;
== .NET ==&lt;br /&gt;
&lt;br /&gt;
HelioHost offers the following .NET versions: &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;
To use these, you would need to request an account on [[:Lily|Lily]].&lt;br /&gt;
&lt;br /&gt;
== How to Request a Lily Account ==&lt;br /&gt;
&lt;br /&gt;
To request an account on [[:Lily|Lily]], you must already have a Plesk account on [[:Morty|Morty]], [[:Tommy|Tommy]], or [[:Johnny|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;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=PHP&amp;diff=2170</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=PHP&amp;diff=2170"/>
		<updated>2025-12-11T00:30:18Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add PHP 8.4 &amp;amp; PHP 8.5 to Lily server section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PHP ==&lt;br /&gt;
&lt;br /&gt;
PHP is the most popular scripting language on the Internet for a reason. It&#039;s easy to learn and easy to implement, yet is powerful enough to suit almost every task. Unlike some other languages, PHP is not explicitly linked with any programming paradigms, allowing for more flexible development. HelioHost offers the latest versions of PHP on all its hosting accounts. We are unique in that we offer PHP without safe mode, which is the more secure but less functional alternative that you&#039;ll find on most free hosts.&lt;br /&gt;
&lt;br /&gt;
== PHP Versions Supported ==&lt;br /&gt;
&lt;br /&gt;
The PHP versions supported on each server are listed below. To see the PHP packages installed for each version, click on the &#039;phpinfo()&#039; link. To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
== Morty server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Morty server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos3.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tommy server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Tommy server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos1.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Johnny server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Johnny server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version !! Packages Installed&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6 || [https://php56.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0 || [https://php70.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4 || [https://php74.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.0 || [https://php80.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.1 || [https://php81.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 || [https://php82.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.3 || [https://php83.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 || [https://php84.krydos2.heliohost.org phpinfo()]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lily server ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;caption-side:top; |&#039;&#039;&#039;Lily server&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! PHP Version&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.5&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.6&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.0&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.1&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.2&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.3&lt;br /&gt;
|-&lt;br /&gt;
| PHP 7.4&lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.2 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.4 &lt;br /&gt;
|-&lt;br /&gt;
| PHP 8.5 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Packages Installed ==&lt;br /&gt;
&lt;br /&gt;
=== Inside Plesk === &lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to view which PHP packages are installed:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; click on the &#039; View the phpinfo() page&#039; link&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To check if a specific package is installed, press &amp;lt;code&amp;gt;Ctrl + F&amp;lt;/code&amp;gt; and type in the package name to search the page.&lt;br /&gt;
&lt;br /&gt;
[[File:View-phpinfo.png]]&lt;br /&gt;
&lt;br /&gt;
=== View phpinfo() page === &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a HelioHost account to access information within Plesk, you can view the installed PHP packages for the available PHP versions on our servers by checking [[#PHP_Versions_Supported|the relevant phpinfo() page links here]].&lt;br /&gt;
&lt;br /&gt;
== Using proc_open(), exec(), popen(), etc. ==&lt;br /&gt;
&lt;br /&gt;
These functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Learning PHP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&amp;lt;?php&#039; is the opening braces and &#039;?&amp;gt;&#039; is the closing braces for PHP.&lt;br /&gt;
&lt;br /&gt;
Here is a sample hello world file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  echo &amp;quot;Hello World!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good tutorial can be found here: [https://blog.udemy.com/php-tutorial/ https://blog.udemy.com/php-tutorial].&lt;br /&gt;
&lt;br /&gt;
== Change PHP Version ==&lt;br /&gt;
&lt;br /&gt;
Follow the navigation steps below to change your PHP version inside Plesk:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Dev Tools &amp;gt; PHP button &amp;gt; select PHP version from the dropdown menu&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-change-php-version.png]]&lt;br /&gt;
&lt;br /&gt;
After the PHP version is changed, you will see a confirmation message that contains the timeframe for the change to take effect:&lt;br /&gt;
&lt;br /&gt;
[[File:plesk-php-change-120-min.png]]&lt;br /&gt;
&lt;br /&gt;
== PHP Version Changes Take Up To 2 Hours ==&lt;br /&gt;
&lt;br /&gt;
{{Info|PHP version changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2169</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2169"/>
		<updated>2025-12-08T15:33:07Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Update wording for clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ / Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
== ETA for New Features, Version Upgrades, and Server Repairs ==&lt;br /&gt;
&lt;br /&gt;
{{Info|For information on ETAs for new features, software version upgrades, or server fixes, please review our [[:ETA|ETA]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Where do I ask for help? == &lt;br /&gt;
&lt;br /&gt;
Wherever you prefer to ask for help, please ask your question &#039;&#039;&#039;in one place only&#039;&#039;&#039;. HelioHost is run by volunteers who contribute their free time, and some are more active on certain platforms than others. Posting the same question across multiple platforms (like Discord, the HelioNet Forum, or email) or creating duplicate requests on the same platform for the same issue can result in unnecessary duplication of volunteer effort and delay responses to you, as well as to others who need help.&lt;br /&gt;
&lt;br /&gt;
We recommend using the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] for support questions. If you later decide to ask on Discord for live help, please update your forum thread to let us know your issue has been resolved or moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How does community-powered support work? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run entirely by volunteers. All support staff are volunteers who donate their free time to help others. In many cases, other users will also step in to offer support, simply because they want to give back to our community. Every staff member started out as a regular user who appreciated the project and began helping others with their questions and issues.&lt;br /&gt;
&lt;br /&gt;
All support requests in the [https://helionet.org/ HelioNet Forum] are public, since this is the most efficient way for users to get help from the entire HelioHost community. This community-powered support model ensures that solutions are searchable and reusable by any other users who face similar issues in the future. Without public support, we wouldn’t attract new volunteers, and support would likely disappear altogether.&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, and do not consider the following items to be private information: &lt;br /&gt;
* [[:Signing_Up#Usernames_are_not_private | Usernames]]&lt;br /&gt;
* Domain names&lt;br /&gt;
* IP addresses&lt;br /&gt;
* [[#Providing_PayPal_Transaction_ID | PayPal Transaction IDs]]&lt;br /&gt;
&lt;br /&gt;
If you choose to request support, you may be asked to provide some or all of the above details to assist with the resolution of your request.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to provide this information publicly, you could instead choose to use [https://wiki.helionet.org/ this Wiki] or the [https://helionet.org/ HelioNet Forum] as a completely self-serve option to try to resolve your queries yourself, without assistance or support from our community.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from forum posts are handled at the sole discretion of staff. In some cases, staff may choose to prioritize helping users with technical issues instead. Resolving actual problems can feel more meaningful and rewarding for volunteers than editing out public information from a public post on a public forum on the internet.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from public forum posts may eventually be considered under a [[#Can_I_get_Private_Support? | paid donation-only private support model]], where in exchange for a donation a staff member will remove public information from a public support post.&lt;br /&gt;
&lt;br /&gt;
== Can I PM an administrator for help? ==&lt;br /&gt;
&lt;br /&gt;
No, do not PM the administrators expecting support unless we explicitly tell you to. Please use the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] instead. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and &#039;&#039;&#039;server name&#039;&#039;&#039; along with any requests. If you are sending your support request via email to &#039;support@heliohost.org&#039;, make sure to contact us &#039;&#039;&#039;from the same email address as your hosting account&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I get Private Support? == &lt;br /&gt;
&lt;br /&gt;
There is currently no option for private support of any kind. Some users have expressed concerns about privacy, so we’re planning to offer a private support option for donors only, but there is [[:ETA|no ETA]] on when this may be implemented.&lt;br /&gt;
&lt;br /&gt;
Eventually, for users who do not want their requests and the responses to them made public, where hundreds of community members might otherwise be able to help, private support requests will only be visible to staff. Then, if one of the handful of volunteer staff members has some spare time outside of their jobs, studies, and personal lives, they could pick up a donor-only paid support request.&lt;br /&gt;
&lt;br /&gt;
Since a private support model for donors only will tie up an admin&#039;s time and prevent everyone else within the wider user community from helping out, it will likely be even slower than the existing community-powered model, with [[:ETA|no ETAs]] for private support requests from donors.&lt;br /&gt;
&lt;br /&gt;
== Your homepage says &amp;quot;Professional-Grade Hosting&amp;quot;, but your support sucks / isn&#039;t helping me / is run by a number of volunteers, what gives?‌ ==&lt;br /&gt;
&lt;br /&gt;
There is a difference between &amp;quot;Professional-Grade Hosting&amp;quot; and &amp;quot;Professional-Grade Customer Support&amp;quot;. Most people are used to having dedicated customer support staff that will answer every little question; this comes standard with paid hosting. However, we don&#039;t do that here. Among the five of us, we have the collective knowledge and technical expertise of any other support staff, but in order for us to help you, we expect from you a certain competency. You must try to spell and use grammar correctly (to the best of your ability). You must provide necessary information (e.g. &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039;). You must be able to read instructions, and you must be able to follow instructions. We will treat you with respect and professionalism if you follow these guidelines. We will probably be very annoyed if u tyep liek dis.‌&lt;br /&gt;
&lt;br /&gt;
== Can I get a free VPS? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost does not offer free VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
What HelioHost offers for free is &#039;&#039;&#039;[[#Can_I_have_more_than_one_account?|1 account per person]]&#039;&#039;&#039; on our shared web hosting server, [[:Johnny]]. Check out our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny | list of helpful tips for getting a free account on Johnny]] if you would like to sign up.&lt;br /&gt;
&lt;br /&gt;
== I log in frequently but am still receiving inactivity emails, what gives? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], to ensure that your logins are logged, log in to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review the [[:Suspension_Policy#Inactivity_Policy|Inactivity Policy]] section of our [[:Suspension_Policy|Suspension Policy]].&lt;br /&gt;
&lt;br /&gt;
== Why must all posts on HelioNet be in English? ==&lt;br /&gt;
&lt;br /&gt;
The support staff is fluent and reliable only in English.&lt;br /&gt;
&lt;br /&gt;
== Why does HelioHost crash? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes users will abuse server resources and cause the server to crash. We try to fix this as quickly as we can. Since the servers and Plesk are handling such a high volume of users, errors are bound to come up. We also try to fix these ASAP. Also, when [[:Ashoat|djbob]] works on the server, he occasionally screws up, which also causes crashes.&lt;br /&gt;
&lt;br /&gt;
== Why was my account suspended? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Suspension_Policy|Suspension Policy]] provides comprehensive details on why we will suspend accounts.&lt;br /&gt;
&lt;br /&gt;
A few common reasons for account suspensions are: &lt;br /&gt;
&lt;br /&gt;
* [[:Terms|Terms of Service]] violation(s).&lt;br /&gt;
* [[:Suspension_Policy#Inactivity_Policy|Account Inactivity]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Renew your account [http://heliohost.org/renew/ here].&lt;br /&gt;
* [[:Suspension_Policy#Duplicate_Accounts|Duplicate Accounts]] on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers. The limit is &#039;&#039;&#039;1 account per human being&#039;&#039;&#039;.&lt;br /&gt;
** Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#Account_Storage_Limits|Account Storage limits]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We offer 1000 MB of free web space and optional one-time paid donation options for [[:Donations_for_Increased_Storage|increased account storage]] {{Template:VPSInfo}}&lt;br /&gt;
** Our [[:Morty|Morty]] server also offers 1000 MB of free web space. If you exceed this limit, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#High_Server_Usage|High Server Usage]] limits on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We enforce a memory limit of no more than {{Template:MemoryLimit}} and a limit of {{Template:CPULimit}} per day. You can monitor your load numbers on [https://heliohost.org/dashboard/load/ the load page within your dashboard].&lt;br /&gt;
** Our [[:Morty|Morty]] server also has a memory limit of no more than {{Template:MemoryLimit}} and limit of {{Template:CPULimit}} per day. If you exceed these limits, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
&lt;br /&gt;
It is also possible that this was an error in our system. If you suspect that this is the case, report the error in a new post [https://helionet.org/index/forum/81-suspended-and-queued-accounts/ here], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Why does my new subdomain show a &amp;quot;Queued&amp;quot; page? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|All domain and subdomain changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;br /&gt;
&lt;br /&gt;
During the first 2 hours, seeing the queued page is normal and only means the change hasn&#039;t taken effect yet. If it&#039;s been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, try [[:Clear_Your_Cache|clearing your browser cache]].&lt;br /&gt;
&lt;br /&gt;
== Why can&#039;t I log in? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you just registered, please wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your Plesk account to become fully active.}}&lt;br /&gt;
&lt;br /&gt;
If it has been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039; since you registered and you still see an &#039;Account Queued&#039; page, try [[:Clear_Your_Cache|clearing your browser cache]]. If you are still experiencing problems, make sure you are entering your username in all lowercase letters, i.e. &amp;quot;wizard&amp;quot;, not &amp;quot;Wizard&amp;quot; or &amp;quot;WIZARD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How do I keep my account active / prevent being suspended? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], login to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review our [[:Suspension_Policy|Inactivity Policy]].&lt;br /&gt;
&lt;br /&gt;
On our scaling hosting server, [[:Morty|Morty]], as long as there is a positive balance on your account, it will remain active without needing to log in.&lt;br /&gt;
&lt;br /&gt;
== What is a Daily Signup Limit and why is it stopping me from registering? ==&lt;br /&gt;
&lt;br /&gt;
Each server has a daily limit for sign-ups so that it doesn&#039;t crash from all the people wanting to use HelioHost. Free signups on Johnny now reset [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours] at midnight UTC and noon 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;
== What if I have at least $2 USD and don&#039;t want to wait to sign up? ==&lt;br /&gt;
&lt;br /&gt;
For a one-time donation of as little as $2 USD, you can open an account on our [[:Tommy|Tommy]] server any time of day. We offer various [https://heliohost.org/tommy/ Donor Plans], enabling you to sign up anytime with your donation via Credit card, Debit card, or PayPal.&lt;br /&gt;
&lt;br /&gt;
If you prefer to donate Crypto to get a Tommy account, visit the [https://heliohost.org/donate/ Donate] page to view our Cryptocurrency wallets. Make sure that after transaction fees/gas the donation amount is $2 USD or more. After making the donation, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] so the transaction can be verified. Make sure you let us know the currency, amount, time of the transaction, and the email address you want the Tommy invite sent to. Please be aware that crypto donations can take time to verify. In the case of XMR and AEON, these can take several days to verify and are not recommended.&lt;br /&gt;
&lt;br /&gt;
Users on our Tommy donor server and the free Johnny server are [[:Suspension_Policy#Inactivity Policy|required to log in at least once a month]] to keep their accounts active.&lt;br /&gt;
&lt;br /&gt;
== What other options are available if I want to sign up right away? == &lt;br /&gt;
&lt;br /&gt;
For users who prefer not to have to log in regularly, our [[:Morty|Morty]] scaling server has no login requirement as long as there is a positive balance on your account.&lt;br /&gt;
&lt;br /&gt;
{{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== My account was deleted. Can I get my data back? ==&lt;br /&gt;
&lt;br /&gt;
No. We do not keep backups of your data nor is it our responsibility to, as mentioned in our [[:Terms|Terms of Service]]. You must backup your own data regularly and download the backup to your local machine.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure how to backup your data, please see our [[:Account_Backups|Account Backups tutorial]] page. It contains guidance on creating manual backups to download to your local machine, and instructions for setting up scheduled automated backups within Plesk.&lt;br /&gt;
&lt;br /&gt;
== Can I have more than one account? ==&lt;br /&gt;
&lt;br /&gt;
The first line of our [[:Terms | Terms of Service]] confirms that the limit is &#039;&#039;&#039;[[:Suspension_Policy#Duplicate_Accounts  |1 account per human being]]&#039;&#039;&#039; on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, even if you use different email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Accounts Allowed on Morty ===&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== How do I reset my hosting account to start fresh? ==&lt;br /&gt;
&lt;br /&gt;
{{Danger|Before requesting an account reset, make sure that the email address on your account is not hosted on HelioHost or else &#039;&#039;&#039;you will not be able to receive the invite email to recreate your account&#039;&#039;&#039; after it is wiped.&lt;br /&gt;
&lt;br /&gt;
To check which email address is associated with your hosting account, go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== Admin Account Reset Limits ===&lt;br /&gt;
&lt;br /&gt;
{{Info|Due to certain users abusing our generosity in the past and requesting 5 or so resets in less than a week, we now limit each account to &#039;&#039;&#039;1 free reset per week&#039;&#039;&#039; done by an admin, with the option to [[#Purchasing_Additional_Account_Resets|donate for additional account resets if needed.]]}}&lt;br /&gt;
&lt;br /&gt;
=== Free Self-Serve Account Resets (with Account Delete/Account Recreate) ===&lt;br /&gt;
&lt;br /&gt;
We will eventually be adding the ability for users to reset their accounts automatically, without the need for admin assistance. However, there is [[:ETA|no estimated timeframe for this]], since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
In the meantime, users may delete their account and then recreate it, which effectively resets all account settings and contents, accomplishing the same thing as an account reset does.&lt;br /&gt;
&lt;br /&gt;
Before deleting your account, [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|make a backup]]. Then, to delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button. Please make sure to allow some time for the deletion process to complete.&lt;br /&gt;
&lt;br /&gt;
To recreate your account, try to login. You will be greeted with a &#039;Welcome back!&#039; message, and prompted to enter your email address to receive an email invite to recreate your old account. Make sure to enter the same email address that was on the account you just deleted. Follow the steps to complete account recreation. You will receive an email confirming the new account has been successfully created.&lt;br /&gt;
&lt;br /&gt;
{{Info|Account creation can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; because it requires an Apache reset. }}&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional Account Resets ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional account reset, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for account reset]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your account reset request, so the donation can be verified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Account resets must be purchased one at a time, and cannot be pre-ordered in bulk.&lt;br /&gt;
&lt;br /&gt;
=== Before Asking an Admin for an Account Reset ===&lt;br /&gt;
&lt;br /&gt;
Because wiping an account is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
Before asking for an account reset, we strongly recommend creating an [[:Account_Backups | account backup]], and &#039;&#039;&#039;downloading it to your local machine&#039;&#039;&#039; first. Any backups left inside Plesk will be wiped out during the reset.&lt;br /&gt;
&lt;br /&gt;
To request that we reset your account so you can start over, send an email &#039;&#039;&#039;from the same email address listed in Plesk as your external email address&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and wipe your account. Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your hosting account.&lt;br /&gt;
&lt;br /&gt;
Once your account has been reset, you will receive an email with a link to restart your account. &#039;&#039;&#039;You will have 7 days to use the link.&#039;&#039;&#039; If you don&#039;t use the link to restart your account within 7 days, you will need to signup for a brand new account.&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Disable Webmail ===&lt;br /&gt;
&lt;br /&gt;
If you had webmail on your account, you will need to re-enable it after the reset has been completed. You can do this by going to: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Remove WSGI Control Access ===&lt;br /&gt;
&lt;br /&gt;
If you had WSGI Control Access on your [[:Morty]] server account for [[:Flask|Flask]] or [[:Django|Django]] and you want this re-enabled after the 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;
=== Account Resets Remove Addon Domains ===&lt;br /&gt;
&lt;br /&gt;
If you had [[:Addon_Domains | additional domains]] on your account, you will need to re-request them after the reset has been completed.&lt;br /&gt;
&lt;br /&gt;
== VPS Rebuilds ==&lt;br /&gt;
&lt;br /&gt;
Due to certain users abusing our generosity in the past and requesting 50 or so rebuilds in less than a month, we now limit each VPS to &#039;&#039;&#039;1 free rebuild per month&#039;&#039;&#039; with the option to [[#Purchasing_Additional_VPS_Rebuilds | donate for additional VPS rebuilds]] if needed.&lt;br /&gt;
&lt;br /&gt;
=== How do I request a VPS rebuild? ===&lt;br /&gt;
&lt;br /&gt;
Because rebuilding a VPS is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
To request that we rebuild your VPS, send an email &#039;&#039;&#039;from the same email address as your VPS account&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and rebuild your VPS. If you would like a free dashboard (Hestia, KeyHelp, etc.) installed after the rebuild, please include this in the request.  &lt;br /&gt;
&lt;br /&gt;
Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your VPS account. If you&#039;re not sure what email address is associated with your VPS account, you can check by logging into the [https://heliohost.org/login/ VPS Dashboard] with your VPS Username and Password. The email address attached to your VPS account will be displayed at the top right of the page.&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional VPS Rebuilds ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional VPS rebuild, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for VPS Rebuild]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your VPS rebuild request, so the donation can be verified.&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;
== How do I change the contact email address on my account? ==&lt;br /&gt;
&lt;br /&gt;
We recommend using a reliable external email address for your contact address because if you lose access to your HelioHost account, the contact email is the only way you have of recovering your account. If that email is hosted by us, you likely won&#039;t be able to access it either.&lt;br /&gt;
&lt;br /&gt;
To change the email address on your account, login and go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
&lt;br /&gt;
== How do I delete my hosting account? ==&lt;br /&gt;
&lt;br /&gt;
To delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button.&lt;br /&gt;
&lt;br /&gt;
To delete your HelioNet Forum account, post a topic in the [https://helionet.org/index/forum/4-contact-helionet/?do=add Contact HelioNet forum].&lt;br /&gt;
&lt;br /&gt;
== How do I change my main domain? ==&lt;br /&gt;
&lt;br /&gt;
To change the main domain on your HelioHost Plesk account, 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 domain name&#039;&#039;&#039; you want as your main domain, &#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;
{{Caution|There is a risk of data loss when main domains are changed. We strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] and &#039;&#039;&#039;download the backup to your local machine&#039;&#039;&#039; before requesting a main domain change. 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;
As an alternative to changing your main domain, consider using [[:Parked_(Alias)_Domains|Parked (Alias)]], [[:Addon_Domains|Addon]], and/or [[:Subdomains|Subdomains]].&lt;br /&gt;
&lt;br /&gt;
== What are the nameservers for HelioHost? ==&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== What IP addresses should I add to my DNS? == &lt;br /&gt;
&lt;br /&gt;
To add A (IPv4) or AAAA (IPv6) records to your domain registrar&#039;s dashboard, follow these steps to view the IP addresses for your server:  &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;
== The server is slow / Feature XYZ doesn&#039;t work / Something&#039;s wrong with my account / etc. ==&lt;br /&gt;
&lt;br /&gt;
Please post the issue in the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] and we will try to solve the problem. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error messages&#039;&#039;&#039; you are encountering.&lt;br /&gt;
&lt;br /&gt;
== Can Feature XYZ be installed? ==&lt;br /&gt;
&lt;br /&gt;
Softaculous [https://helionet.org/index/topic/59683-softaculous-has-returned/ returned in March 2024] and is offered on our [[:Morty|Morty]], [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, making it possible to install the latest version of 459 different software packages with just a single click.&lt;br /&gt;
&lt;br /&gt;
To browse the available options, login to Plesk and select Softaculous from the menu:&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous_menu_item.png]]&lt;br /&gt;
&lt;br /&gt;
If you need a system-wide feature installed, please post a request in our [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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any applicable &#039;&#039;&#039;version numbers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I use SSH? ==&lt;br /&gt;
&lt;br /&gt;
On hosting accounts, secure shell access (SSH) is disabled for security reasons. &lt;br /&gt;
&lt;br /&gt;
However, it is possible to run jailed shell commands using Plesk&#039;s [[:Cron_Jobs|Scheduled Tasks (cron jobs)]] feature. &lt;br /&gt;
&lt;br /&gt;
In many cases, SSH is not actually necessary. Please post a request in our our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;the command you want to run&#039;&#039;&#039;, and we&#039;ll be happy to investigate other ways to accomplish the same task without SSH.&lt;br /&gt;
&lt;br /&gt;
If you absolutely require SSH access, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use proc_open(), exec(), popen(), etc.? ==&lt;br /&gt;
&lt;br /&gt;
These these functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
Our [[:Lily|Lily]] server, which runs Windows Server, has exec() enabled on all PHP versions.&lt;br /&gt;
&lt;br /&gt;
== Does HelioHost support sockets? Which ports are open? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers have zero inbound ports available to be opened. All ports that are currently open already have services listening, such as 80 http, 443 https, 3306 MariaDB, and 5432 PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Outbound ports are similar: ports like 80, 443, 3306, 5432, 25, 465, etc., are open to allow scripts to connect to common services on remote servers.&lt;br /&gt;
&lt;br /&gt;
If you can proxy your websocket through Apache or Nginx, it can work without opening a port:  &lt;br /&gt;
* You could use an &#039;.htaccess&#039; file to proxy the websocket connection through Apache.&lt;br /&gt;
* With the help of a root admin, you could get an Nginx proxy set up. To explore this option, please post a request in our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;details about your websocket application&#039;&#039;&#039;, and we&#039;ll be happy to help.&lt;br /&gt;
&lt;br /&gt;
If you absolutely need a port opened, you&#039;ll need to get a VPS, and you will then have all 65535 ports available to open or close as you want. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Are directory indexes enabled? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Directory indexes have been enabled by default on the shared hosting servers since late 2024. This is a feature many users have requested over the past few years, but if you don&#039;t want directory listings for a folder, simply create an empty &#039;index.html&#039; file inside it. Please check our [[:Create_Website#Directory_Index | Directory Index]] section for further information.&lt;br /&gt;
&lt;br /&gt;
== Can I change my document root directory? ==&lt;br /&gt;
&lt;br /&gt;
Typically, your domain root directory is &#039;httpdocs&#039; (or &#039;public_html&#039; if you were transferred from the old cPanel). Users cannot change the document root themselves inside Plesk. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning on using Laravel, you can set the document root yourself by using the [[:Laravel#Document_Root | Laravel Toolkit]].&lt;br /&gt;
&lt;br /&gt;
If you have a legitimate reason for needing the document root changed, please create a post in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and make sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, &#039;&#039;&#039;the new document root directory you want&#039;&#039;&#039;, and a &#039;&#039;&#039;valid reason&#039;&#039;&#039; explaining why you are unable to use your existing document root. The admins will review your request to determine if the change can be made.&lt;br /&gt;
&lt;br /&gt;
== I can login to Plesk, but can&#039;t login to SFTP, what do I do? == &lt;br /&gt;
&lt;br /&gt;
Sometimes the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How do I stop my Node.js app? ==&lt;br /&gt;
&lt;br /&gt;
Node tutorials found elsewhere on the internet probably assume you have a VPS (not shared hosting) and you&#039;ll quickly get suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]]. &lt;br /&gt;
&lt;br /&gt;
If you need to stop a Node process that is already running, deleting the Node.js files via the file manager will &#039;&#039;&#039;not&#039;&#039;&#039; stop already running processes.&lt;br /&gt;
&lt;br /&gt;
To stop an already running Node.js process, you should disable Node by following the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Get Started &amp;gt; Node.js &amp;gt; Disable Node.js&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you follow our [[:Node.js|Node.js guide]], it will use Passenger which automatically stops Node.js processes if your website isn&#039;t getting any visitors. This will help try to keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]].&lt;br /&gt;
&lt;br /&gt;
If you do not want to use Passenger, we recommend you upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use your services to mine cryptocurrency? == &lt;br /&gt;
&lt;br /&gt;
No. We do not allow mining on any of our plans (free or paid).&lt;br /&gt;
&lt;br /&gt;
== Your hosting SUCKS! So do YOU!!! ==&lt;br /&gt;
&lt;br /&gt;
Please see [http://helionet.org/index/topic/4723-suspended/page__p__46231#entry46231 this].&lt;br /&gt;
&lt;br /&gt;
== I still have a question about HelioHost. ==&lt;br /&gt;
&lt;br /&gt;
Post in the [https://helionet.org/index/forum/48-questions/ Questions forum] and we&#039;ll try to help you the best we can.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2168</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=FAQ&amp;diff=2168"/>
		<updated>2025-12-04T18:06:54Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add note that Laravel Toolkit enables users to change their document root&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ / Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
== ETA for New Features, Version Upgrades, and Server Repairs ==&lt;br /&gt;
&lt;br /&gt;
{{Info|For information on ETAs for new features, software version upgrades, or server fixes, please review our [[:ETA|ETA]] page.}}&lt;br /&gt;
&lt;br /&gt;
== Where do I ask for help? == &lt;br /&gt;
&lt;br /&gt;
Wherever you prefer to ask for help, please ask your question &#039;&#039;&#039;in one place only&#039;&#039;&#039;. HelioHost is run by volunteers who contribute their free time, and some are more active on certain platforms than others. Posting the same question across multiple platforms (like Discord, the HelioNet Forum, or email) or creating duplicate requests on the same platform for the same issue can result in unnecessary duplication of volunteer effort and delay responses to you, as well as to others who need help.&lt;br /&gt;
&lt;br /&gt;
We recommend using the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] for support questions. If you later decide to ask on Discord for live help, please update your forum thread to let us know your issue has been resolved or moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
== How does community-powered support work? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost is a non-profit run entirely by volunteers. All support staff are volunteers who donate their free time to help others. In many cases, other users will also step in to offer support, simply because they want to give back to our community. Every staff member started out as a regular user who appreciated the project and began helping others with their questions and issues.&lt;br /&gt;
&lt;br /&gt;
All support requests in the [https://helionet.org/ HelioNet Forum] are public, since this is the most efficient way for users to get help from the entire HelioHost community. This community-powered support model ensures that solutions are searchable and reusable by any other users who face similar issues in the future. Without public support, we wouldn’t attract new volunteers, and support would likely disappear altogether.&lt;br /&gt;
&lt;br /&gt;
We do not currently offer private support, and do not consider the following items to be private information: &lt;br /&gt;
* [[:Signing_Up#Usernames_are_not_private | Usernames]]&lt;br /&gt;
* Domain names&lt;br /&gt;
* IP addresses&lt;br /&gt;
* [[#Providing_PayPal_Transaction_ID | PayPal Transaction IDs]]&lt;br /&gt;
&lt;br /&gt;
If you choose to request support, you may be asked to provide some or all of the above details to assist with the resolution of your request.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to provide this information publicly, you could instead choose to use [https://wiki.helionet.org/ this Wiki] or the [https://helionet.org/ HelioNet Forum] as a completely self-serve option to try to resolve your queries yourself, without assistance or support from our community.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from forum posts are handled at the sole discretion of staff. In some cases, staff may choose to prioritize helping users with technical issues instead. Resolving actual problems can feel more meaningful and rewarding for volunteers than editing out public information from a public post on a public forum on the internet.&lt;br /&gt;
&lt;br /&gt;
Requests to remove non-private information from public forum posts may eventually be considered under a [[#Can_I_get_Private_Support? | paid donation-only private support model]], where in exchange for a donation a staff member will remove public information from a public support post.&lt;br /&gt;
&lt;br /&gt;
== Can I PM an administrator for help? ==&lt;br /&gt;
&lt;br /&gt;
No, do not PM the administrators expecting support unless we explicitly tell you to. Please use the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] instead. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and &#039;&#039;&#039;server name&#039;&#039;&#039; along with any requests. If you are sending your support request via email to &#039;support@heliohost.org&#039;, make sure to contact us &#039;&#039;&#039;from the same email address as your hosting account&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I get Private Support? == &lt;br /&gt;
&lt;br /&gt;
There is currently no option for private support of any kind. Some users have expressed concerns about privacy, so we’re planning to offer a private support option for donors only, but there is [[:ETA|no ETA]] on when this may be implemented.&lt;br /&gt;
&lt;br /&gt;
Eventually, for users who do not want their requests and the responses to them made public, where hundreds of community members might otherwise be able to help, private support requests will only be visible to staff. Then, if one of the handful of volunteer staff members has some spare time outside of their jobs, studies, and personal lives, they could pick up a donor-only paid support request.&lt;br /&gt;
&lt;br /&gt;
Since a private support model for donors only will tie up an admin&#039;s time and prevent everyone else within the wider user community from helping out, it will likely be even slower than the existing community-powered model, with [[:ETA|no ETAs]] for private support requests from donors.&lt;br /&gt;
&lt;br /&gt;
== Your homepage says &amp;quot;Professional-Grade Hosting&amp;quot;, but your support sucks / isn&#039;t helping me / is run by a number of volunteers, what gives?‌ ==&lt;br /&gt;
&lt;br /&gt;
There is a difference between &amp;quot;Professional-Grade Hosting&amp;quot; and &amp;quot;Professional-Grade Customer Support&amp;quot;. Most people are used to having dedicated customer support staff that will answer every little question; this comes standard with paid hosting. However, we don&#039;t do that here. Among the five of us, we have the collective knowledge and technical expertise of any other support staff, but in order for us to help you, we expect from you a certain competency. You must try to spell and use grammar correctly (to the best of your ability). You must provide necessary information (e.g. &#039;&#039;&#039;username&#039;&#039;&#039; and &#039;&#039;&#039;domain name&#039;&#039;&#039;). You must be able to read instructions, and you must be able to follow instructions. We will treat you with respect and professionalism if you follow these guidelines. We will probably be very annoyed if u tyep liek dis.‌&lt;br /&gt;
&lt;br /&gt;
== Can I get a free VPS? ==&lt;br /&gt;
&lt;br /&gt;
HelioHost does not offer free VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
What HelioHost offers for free is &#039;&#039;&#039;[[#Can_I_have_more_than_one_account?|1 account per person]]&#039;&#039;&#039; on our shared web hosting server, [[:Johnny]]. Check out our [[:Signing_Up#Helpful_Tips_for_Getting_a_Free_Account_on_Johnny | list of helpful tips for getting a free account on Johnny]] if you would like to sign up.&lt;br /&gt;
&lt;br /&gt;
== I log in frequently but am still receiving inactivity emails, what gives? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], to ensure that your logins are logged, log in to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review the [[:Suspension_Policy#Inactivity_Policy|Inactivity Policy]] section of our [[:Suspension_Policy|Suspension Policy]].&lt;br /&gt;
&lt;br /&gt;
== Why must all posts on HelioNet be in English? ==&lt;br /&gt;
&lt;br /&gt;
The support staff is fluent and reliable only in English.&lt;br /&gt;
&lt;br /&gt;
== Why does HelioHost crash? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes users will abuse server resources and cause the server to crash. We try to fix this as quickly as we can. Since the servers and Plesk are handling such a high volume of users, errors are bound to come up. We also try to fix these ASAP. Also, when [[:Ashoat|djbob]] works on the server, he occasionally screws up, which also causes crashes.&lt;br /&gt;
&lt;br /&gt;
== Why was my account suspended? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Suspension_Policy|Suspension Policy]] provides comprehensive details on why we will suspend accounts.&lt;br /&gt;
&lt;br /&gt;
A few common reasons for account suspensions are: &lt;br /&gt;
&lt;br /&gt;
* [[:Terms|Terms of Service]] violation(s).&lt;br /&gt;
* [[:Suspension_Policy#Inactivity_Policy|Account Inactivity]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. Renew your account [http://heliohost.org/renew/ here].&lt;br /&gt;
* [[:Suspension_Policy#Duplicate_Accounts|Duplicate Accounts]] on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers. The limit is &#039;&#039;&#039;1 account per human being&#039;&#039;&#039;.&lt;br /&gt;
** Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#Account_Storage_Limits|Account Storage limits]] on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We offer 1000 MB of free web space and optional one-time paid donation options for [[:Donations_for_Increased_Storage|increased account storage]] {{Template:VPSInfo}}&lt;br /&gt;
** Our [[:Morty|Morty]] server also offers 1000 MB of free web space. If you exceed this limit, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
* Exceeding the [[:Suspension_Policy#High_Server_Usage|High Server Usage]] limits on our [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers. We enforce a memory limit of no more than {{Template:MemoryLimit}} and a limit of {{Template:CPULimit}} per day. You can monitor your load numbers on [https://heliohost.org/dashboard/load/ the load page within your dashboard].&lt;br /&gt;
** Our [[:Morty|Morty]] server also has a memory limit of no more than {{Template:MemoryLimit}} and limit of {{Template:CPULimit}} per day. If you exceed these limits, instead of suspending your account, we will charge you for the overages.&lt;br /&gt;
&lt;br /&gt;
It is also possible that this was an error in our system. If you suspect that this is the case, report the error in a new post [https://helionet.org/index/forum/81-suspended-and-queued-accounts/ here], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Why does my new subdomain show a &amp;quot;Queued&amp;quot; page? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|All domain and subdomain changes take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to go into effect as they require an Apache restart.}}&lt;br /&gt;
&lt;br /&gt;
During the first 2 hours, seeing the queued page is normal and only means the change hasn&#039;t taken effect yet. If it&#039;s been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, try [[:Clear_Your_Cache|clearing your browser cache]].&lt;br /&gt;
&lt;br /&gt;
== Why can&#039;t I log in? ==&lt;br /&gt;
&lt;br /&gt;
{{Info|If you just registered, please wait &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your Plesk account to become fully active.}}&lt;br /&gt;
&lt;br /&gt;
If it has been longer than &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039; since you registered and you still see an &#039;Account Queued&#039; page, try [[:Clear_Your_Cache|clearing your browser cache]]. If you are still experiencing problems, make sure you are entering your username in all lowercase letters, i.e. &amp;quot;wizard&amp;quot;, not &amp;quot;Wizard&amp;quot; or &amp;quot;WIZARD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== How do I keep my account active / prevent being suspended? ==&lt;br /&gt;
&lt;br /&gt;
If you have an account on [[:Tommy|Tommy]] or [[:Johnny|Johnny]], login to [https://heliohost.org heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] at least once a month. Each time you do so your last login date is set to the current time. Your account will then remain active for another 30 days. For more details, review our [[:Suspension_Policy|Inactivity Policy]].&lt;br /&gt;
&lt;br /&gt;
On our scaling hosting server, [[:Morty|Morty]], as long as there is a positive balance on your account, it will remain active without needing to log in.&lt;br /&gt;
&lt;br /&gt;
== What is a Daily Signup Limit and why is it stopping me from registering? ==&lt;br /&gt;
&lt;br /&gt;
Each server has a daily limit for sign-ups so that it doesn&#039;t crash from all the people wanting to use HelioHost. Free signups on Johnny now reset [https://helionet.org/index/topic/59660-midnight-and-noon/ every 12 hours] at midnight UTC and noon 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;
== What if I have at least $2 USD and don&#039;t want to wait to sign up? ==&lt;br /&gt;
&lt;br /&gt;
For a one-time donation of as little as $2 USD, you can open an account on our [[:Tommy|Tommy]] server any time of day. We offer various [https://heliohost.org/tommy/ Donor Plans], enabling you to sign up anytime with your donation via Credit card, Debit card, or PayPal.&lt;br /&gt;
&lt;br /&gt;
If you prefer to donate Crypto to get a Tommy account, visit the [https://heliohost.org/donate/ Donate] page to view our Cryptocurrency wallets. Make sure that after transaction fees/gas the donation amount is $2 USD or more. After making the donation, please create a post in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] so the transaction can be verified. Make sure you let us know the currency, amount, time of the transaction, and the email address you want the Tommy invite sent to. Please be aware that crypto donations can take time to verify. In the case of XMR and AEON, these can take several days to verify and are not recommended.&lt;br /&gt;
&lt;br /&gt;
Users on our Tommy donor server and the free Johnny server are [[:Suspension_Policy#Inactivity Policy|required to log in at least once a month]] to keep their accounts active.&lt;br /&gt;
&lt;br /&gt;
== What other options are available if I want to sign up right away? == &lt;br /&gt;
&lt;br /&gt;
For users who prefer not to have to log in regularly, our [[:Morty|Morty]] scaling server has no login requirement as long as there is a positive balance on your account.&lt;br /&gt;
&lt;br /&gt;
{{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== My account was deleted. Can I get my data back? ==&lt;br /&gt;
&lt;br /&gt;
No. We do not keep backups of your data nor is it our responsibility to, as mentioned in our [[:Terms|Terms of Service]]. You must backup your own data regularly and download the backup to your local machine.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure how to backup your data, please see our [[:Account_Backups|Account Backups tutorial]] page. It contains guidance on creating manual backups to download to your local machine, and instructions for setting up scheduled automated backups within Plesk.&lt;br /&gt;
&lt;br /&gt;
== Can I have more than one account? ==&lt;br /&gt;
&lt;br /&gt;
The first line of our [[:Terms | Terms of Service]] confirms that the limit is &#039;&#039;&#039;[[:Suspension_Policy#Duplicate_Accounts  |1 account per human being]]&#039;&#039;&#039; on our [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, even if you use different email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Accounts Allowed on Morty ===&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== How do I reset my hosting account to start fresh? ==&lt;br /&gt;
&lt;br /&gt;
{{Danger|Before requesting an account reset, make sure that the email address on your account is not hosted on HelioHost or else &#039;&#039;&#039;you will not be able to receive the invite email to recreate your account&#039;&#039;&#039; after it is wiped.&lt;br /&gt;
&lt;br /&gt;
To check which email address is associated with your hosting account, go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== Admin Account Reset Limits ===&lt;br /&gt;
&lt;br /&gt;
{{Info|Due to certain users abusing our generosity in the past and requesting 5 or so resets in less than a week, we now limit each account to &#039;&#039;&#039;1 free reset per week&#039;&#039;&#039; done by an admin, with the option to [[#Purchasing_Additional_Account_Resets|donate for additional account resets if needed.]]}}&lt;br /&gt;
&lt;br /&gt;
=== Free Self-Serve Account Resets (with Account Delete/Account Recreate) ===&lt;br /&gt;
&lt;br /&gt;
We will eventually be adding the ability for users to reset their accounts automatically, without the need for admin assistance. However, there is [[:ETA|no estimated timeframe for this]], since there are many other higher-priority projects to be completed first.&lt;br /&gt;
&lt;br /&gt;
In the meantime, users may delete their account and then recreate it, which effectively resets all account settings and contents, accomplishing the same thing as an account reset does.&lt;br /&gt;
&lt;br /&gt;
Before deleting your account, [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|make a backup]]. Then, to delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button. Please make sure to allow some time for the deletion process to complete.&lt;br /&gt;
&lt;br /&gt;
To recreate your account, try to login. You will be greeted with a &#039;Welcome back!&#039; message, and prompted to enter your email address to receive an email invite to recreate your old account. Make sure to enter the same email address that was on the account you just deleted. Follow the steps to complete account recreation. You will receive an email confirming the new account has been successfully created.&lt;br /&gt;
&lt;br /&gt;
{{Info|Account creation can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; because it requires an Apache reset. }}&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional Account Resets ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional account reset, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for account reset]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your account reset request, so the donation can be verified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Account resets must be purchased one at a time, and cannot be pre-ordered in bulk.&lt;br /&gt;
&lt;br /&gt;
=== Before Asking an Admin for an Account Reset ===&lt;br /&gt;
&lt;br /&gt;
Because wiping an account is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
Before asking for an account reset, we strongly recommend creating an [[:Account_Backups | account backup]], and &#039;&#039;&#039;downloading it to your local machine&#039;&#039;&#039; first. Any backups left inside Plesk will be wiped out during the reset.&lt;br /&gt;
&lt;br /&gt;
To request that we reset your account so you can start over, send an email &#039;&#039;&#039;from the same email address listed in Plesk as your external email address&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and wipe your account. Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your hosting account.&lt;br /&gt;
&lt;br /&gt;
Once your account has been reset, you will receive an email with a link to restart your account. &#039;&#039;&#039;You will have 7 days to use the link.&#039;&#039;&#039; If you don&#039;t use the link to restart your account within 7 days, you will need to signup for a brand new account.&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Disable Webmail ===&lt;br /&gt;
&lt;br /&gt;
If you had webmail on your account, you will need to re-enable it after the reset has been completed. You can do this by going to: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Mail &amp;gt; Mail Settings &amp;gt; [Your Domain] &amp;gt; Webmail &amp;gt; Select Roundcube &amp;gt; click the Save button&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Webmail can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to become active after enabling it because it requires an Apache restart.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Account Resets Remove WSGI Control Access ===&lt;br /&gt;
&lt;br /&gt;
If you had WSGI Control Access on your [[:Morty]] server account for [[:Flask|Flask]] or [[:Django|Django]] and you want this re-enabled after the 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;
=== Account Resets Remove Addon Domains ===&lt;br /&gt;
&lt;br /&gt;
If you had [[:Addon_Domains | additional domains]] on your account, you will need to re-request them after the reset has been completed.&lt;br /&gt;
&lt;br /&gt;
== VPS Rebuilds ==&lt;br /&gt;
&lt;br /&gt;
Due to certain users abusing our generosity in the past and requesting 50 or so rebuilds in less than a month, we now limit each VPS to &#039;&#039;&#039;1 free rebuild per month&#039;&#039;&#039; with the option to [[#Purchasing_Additional_VPS_Rebuilds | donate for additional VPS rebuilds]] if needed.&lt;br /&gt;
&lt;br /&gt;
=== How do I request a VPS rebuild? ===&lt;br /&gt;
&lt;br /&gt;
Because rebuilding a VPS is destructive, we have to verify your identity before we do so. This is to prevent someone from pretending to be you and deleting all your data.&lt;br /&gt;
&lt;br /&gt;
To request that we rebuild your VPS, send an email &#039;&#039;&#039;from the same email address as your VPS account&#039;&#039;&#039; to &#039;support@heliohost.org&#039; so we can verify your identity and rebuild your VPS. If you would like a free dashboard (Hestia, KeyHelp, etc.) installed after the rebuild, please include this in the request.  &lt;br /&gt;
&lt;br /&gt;
Alternatively, you can make a post on the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] from a forum account with the same email address as your VPS account. If you&#039;re not sure what email address is associated with your VPS account, you can check by logging into the [https://heliohost.org/login/ VPS Dashboard] with your VPS Username and Password. The email address attached to your VPS account will be displayed at the top right of the page.&lt;br /&gt;
&lt;br /&gt;
=== Purchasing Additional VPS Rebuilds ===&lt;br /&gt;
&lt;br /&gt;
If you need to purchase an additional VPS rebuild, please use the link below to donate $1 USD:&lt;br /&gt;
&lt;br /&gt;
[https://www.paypal.com/ncp/payment/6Z88J5KJZJ3RJ Donate $1 USD for VPS Rebuild]&lt;br /&gt;
&lt;br /&gt;
After you have made the donation, please provide your [[#Providing_PayPal_Transaction_ID|PayPal Transaction ID]] as part of your VPS rebuild request, so the donation can be verified.&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;
== How do I change the contact email address on my account? ==&lt;br /&gt;
&lt;br /&gt;
We recommend using a reliable external email address for your contact address because if you lose access to your HelioHost account, the contact email is the only way you have of recovering your account. If that email is hosted by us, you likely won&#039;t be able to access it either.&lt;br /&gt;
&lt;br /&gt;
To change the email address on your account, login and go to: &#039;&#039;&#039;Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
&lt;br /&gt;
== How do I delete my hosting account? ==&lt;br /&gt;
&lt;br /&gt;
To delete your HelioHost Plesk account, go to your dashboard and click on the [https://heliohost.org/dashboard/delete/ Delete your account and remove all content] button.&lt;br /&gt;
&lt;br /&gt;
To delete your HelioNet Forum account, post a topic in the [https://helionet.org/index/forum/4-contact-helionet/?do=add Contact HelioNet forum].&lt;br /&gt;
&lt;br /&gt;
== How do I change my main domain? ==&lt;br /&gt;
&lt;br /&gt;
To change the main domain on your HelioHost Plesk account, 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 domain name&#039;&#039;&#039; you want as your main domain, &#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;
{{Caution|There is a risk of data loss when main domains are changed. We strongly recommend you [[:Account_Backups#Making_Your_Own_Manual_Account_Backup|create an account backup]] and &#039;&#039;&#039;download the backup to your local machine&#039;&#039;&#039; before requesting a main domain change. 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;
As an alternative to changing your main domain, consider using [[:Parked_(Alias)_Domains|Parked (Alias)]], [[:Addon_Domains|Addon]], and/or [[:Subdomains|Subdomains]].&lt;br /&gt;
&lt;br /&gt;
== What are the nameservers for HelioHost? ==&lt;br /&gt;
&lt;br /&gt;
* ns1.heliohost.org&lt;br /&gt;
* ns2.heliohost.org&lt;br /&gt;
&lt;br /&gt;
== What IP addresses should I add to my DNS? == &lt;br /&gt;
&lt;br /&gt;
To add A (IPv4) or AAAA (IPv6) records to your domain registrar&#039;s dashboard, follow these steps to view the IP addresses for your server:  &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;
== The server is slow / Feature XYZ doesn&#039;t work / Something&#039;s wrong with my account / etc. ==&lt;br /&gt;
&lt;br /&gt;
Please post the issue in the [https://helionet.org/index/forum/45-customer-service/ Customer Service forum] and we will try to solve the problem. Also, in order for us to provide the best and most efficient support, please provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error messages&#039;&#039;&#039; you are encountering.&lt;br /&gt;
&lt;br /&gt;
== Can Feature XYZ be installed? ==&lt;br /&gt;
&lt;br /&gt;
Softaculous [https://helionet.org/index/topic/59683-softaculous-has-returned/ returned in March 2024] and is offered on our [[:Morty|Morty]], [[:Tommy|Tommy]] and [[:Johnny|Johnny]] servers, making it possible to install the latest version of 459 different software packages with just a single click.&lt;br /&gt;
&lt;br /&gt;
To browse the available options, login to Plesk and select Softaculous from the menu:&lt;br /&gt;
&lt;br /&gt;
[[File:softaculous_menu_item.png]]&lt;br /&gt;
&lt;br /&gt;
If you need a system-wide feature installed, please post a request in our [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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any applicable &#039;&#039;&#039;version numbers&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Can I use SSH? ==&lt;br /&gt;
&lt;br /&gt;
On hosting accounts, secure shell access (SSH) is disabled for security reasons. &lt;br /&gt;
&lt;br /&gt;
However, it is possible to run jailed shell commands using Plesk&#039;s [[:Cron_Jobs|Scheduled Tasks (cron jobs)]] feature. &lt;br /&gt;
&lt;br /&gt;
In many cases, SSH is not actually necessary. Please post a request in our our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;the command you want to run&#039;&#039;&#039;, and we&#039;ll be happy to investigate other ways to accomplish the same task without SSH.&lt;br /&gt;
&lt;br /&gt;
If you absolutely require SSH access, you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use proc_open(), exec(), popen(), etc.? ==&lt;br /&gt;
&lt;br /&gt;
These these functions are disabled on our shared hosting servers ([[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]]) for security reasons. If you need to run proc_open(), exec(), popen(), etc., you will need a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
Our [[:Lily|Lily]] server, which runs Windows Server, has exec() enabled on all PHP versions.&lt;br /&gt;
&lt;br /&gt;
== Does HelioHost support sockets? Which ports are open? ==&lt;br /&gt;
&lt;br /&gt;
Our [[:Morty|Morty]], [[:Tommy|Tommy]], and [[:Johnny|Johnny]] servers have zero inbound ports available to be opened. All ports that are currently open already have services listening, such as 80 http, 443 https, 3306 MariaDB, and 5432 PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Outbound ports are similar: ports like 80, 443, 3306, 5432, 25, 465, etc., are open to allow scripts to connect to common services on remote servers.&lt;br /&gt;
&lt;br /&gt;
If you can proxy your websocket through Apache or Nginx, it can work without opening a port:  &lt;br /&gt;
* You could use an &#039;.htaccess&#039; file to proxy the websocket connection through Apache.&lt;br /&gt;
* With the help of a root admin, you could get an Nginx proxy set up. To explore this option, please post a request in our [https://helionet.org/index/forum/45-customer-service/ Customer Service forum], making sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and &#039;&#039;&#039;details about your websocket application&#039;&#039;&#039;, and we&#039;ll be happy to help.&lt;br /&gt;
&lt;br /&gt;
If you absolutely need a port opened, you&#039;ll need to get a VPS, and you will then have all 65535 ports available to open or close as you want. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Are directory indexes enabled? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Directory indexes have been enabled by default on the shared hosting servers since late 2024. This is a feature many users have requested over the past few years, but if you don&#039;t want directory listings for a folder, simply create an empty &#039;index.html&#039; file inside it. Please check our [[:Create_Website#Directory_Index | Directory Index]] section for further information.&lt;br /&gt;
&lt;br /&gt;
== Can I change my document root directory? ==&lt;br /&gt;
&lt;br /&gt;
Typically, your domain root directory is &#039;httpdocs&#039; (or &#039;public_html&#039; if you were transferred from the old cPanel). Users cannot change the document root themselves inside Plesk. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning on using Laravel, Plesk offers a way to set the document root yourself, by using the [[:Laravel#Document_Root | Laravel Toolkit]].&lt;br /&gt;
&lt;br /&gt;
If you have a legitimate reason for needing the document root changed, please create a post in our [https://helionet.org/index/forum/45-customer-service/?do=add Customer Service forum] and make sure to provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, &#039;&#039;&#039;server name&#039;&#039;&#039;, &#039;&#039;&#039;the new document root directory you want&#039;&#039;&#039;, and a &#039;&#039;&#039;valid reason&#039;&#039;&#039; explaining why you are unable to use your existing document root. The admins will review your request to determine if the change can be made.&lt;br /&gt;
&lt;br /&gt;
== I can login to Plesk, but can&#039;t login to SFTP, what do I do? == &lt;br /&gt;
&lt;br /&gt;
Sometimes the SFTP and Plesk passwords get out of sync. Please try changing the SFTP password by following these steps:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Connection Info &amp;gt; System user credentials &amp;gt; Click the &#039;edit icon&#039; next to password&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How do I stop my Node.js app? ==&lt;br /&gt;
&lt;br /&gt;
Node tutorials found elsewhere on the internet probably assume you have a VPS (not shared hosting) and you&#039;ll quickly get suspended for [[:Suspension_Policy#High_Server_Usage|high server usage]]. &lt;br /&gt;
&lt;br /&gt;
If you need to stop a Node process that is already running, deleting the Node.js files via the file manager will &#039;&#039;&#039;not&#039;&#039;&#039; stop already running processes.&lt;br /&gt;
&lt;br /&gt;
To stop an already running Node.js process, you should disable Node by following the steps below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login &amp;gt; Continue to Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Get Started &amp;gt; Node.js &amp;gt; Disable Node.js&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you follow our [[:Node.js|Node.js guide]], it will use Passenger which automatically stops Node.js processes if your website isn&#039;t getting any visitors. This will help try to keep your account within the [[:Suspension_Policy#Account_Load_Limits|account load limits]].&lt;br /&gt;
&lt;br /&gt;
If you do not want to use Passenger, we recommend you upgrade to a VPS. {{Template:VPSInfo}}&lt;br /&gt;
&lt;br /&gt;
== Can I use your services to mine cryptocurrency? == &lt;br /&gt;
&lt;br /&gt;
No. We do not allow mining on any of our plans (free or paid).&lt;br /&gt;
&lt;br /&gt;
== Your hosting SUCKS! So do YOU!!! ==&lt;br /&gt;
&lt;br /&gt;
Please see [http://helionet.org/index/topic/4723-suspended/page__p__46231#entry46231 this].&lt;br /&gt;
&lt;br /&gt;
== I still have a question about HelioHost. ==&lt;br /&gt;
&lt;br /&gt;
Post in the [https://helionet.org/index/forum/48-questions/ Questions forum] and we&#039;ll try to help you the best we can.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=SSL_Certificate_Problems&amp;diff=2167</id>
		<title>SSL Certificate Problems</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=SSL_Certificate_Problems&amp;diff=2167"/>
		<updated>2025-11-26T00:22:02Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add note about Wildcard certificates not being supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSL Certificate Problems ==&lt;br /&gt;
&lt;br /&gt;
== Installing a Let&#039;s Encrypt SSL Certificate == &lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Let&#039;s Encrypt Settings ===&lt;br /&gt;
&lt;br /&gt;
Navigate to the Let&#039;s Encrypt settings 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 ] &amp;gt; Dashboard tab &amp;gt; Security section&amp;gt; SSL/TLS Certificates button &amp;gt; Let&#039;s Encrypt settings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Install the Certificate ===&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;Install&#039; button.&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-install.png]]&lt;br /&gt;
&lt;br /&gt;
=== Select Certificate Options ===&lt;br /&gt;
&lt;br /&gt;
In addition to selecting the `Secure the domain name` option, we also recommend selecting the following options:&lt;br /&gt;
* Include a &amp;quot;www&amp;quot; subdomain for the domain and each selected alias.&lt;br /&gt;
* Secure webmail on this domain.&lt;br /&gt;
* Assign the certificate to the mail domain.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Securing webmail cannot be done during the 2 hours following domain creation, because it requires an Apache restart. Apache restarts every 2 hours, so if you&#039;re setting up SSL on a brand new account or a new domain that&#039;s just been added, you will need to return to these settings later to activate the webmail security feature.&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;Get it free&#039; button to install the certificate.&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-get-cert.png]]&lt;br /&gt;
&lt;br /&gt;
You should see that &#039;Keep websites secured&#039; is now &#039;Enabled&#039;.&lt;br /&gt;
&lt;br /&gt;
We also recommend activating the &#039;Redirect from http to https&#039; option.&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-check-settings.png]]&lt;br /&gt;
&lt;br /&gt;
==== Wildcard Certificates ====&lt;br /&gt;
&lt;br /&gt;
HelioHost does not currently support Wildcard certificates, due to a lack of integration between Plesk and our DNS. We cannot change this setting, so please disregard the message in Plesk suggesting your hosting provider can fix it. Wildcard SSL is actually less secure than installing a certificate on each domain. We recommend installing a certificate on each domain instead.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
If you have issues with the Let&#039;s Encrypt SSL certificate on your domain or subdomain, here are some things to check:&lt;br /&gt;
&lt;br /&gt;
== Check if the Certificate is Expired or Invalid  ==&lt;br /&gt;
&lt;br /&gt;
If the certificate is expired or invalid:&lt;br /&gt;
&lt;br /&gt;
* Reissue the certificate.&lt;br /&gt;
* Wait &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;.&lt;br /&gt;
* [[:Clear_Your_Cache|Clear your cache]] to ensure the changes are applied correctly.&lt;br /&gt;
&lt;br /&gt;
== If the Certificate is NOT Expired ==&lt;br /&gt;
&lt;br /&gt;
If the certificate is not expired:&lt;br /&gt;
&lt;br /&gt;
* Unassign the certificate from the domain.&lt;br /&gt;
* Reassign the certificate to the domain.&lt;br /&gt;
* Wait &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;.&lt;br /&gt;
* [[:Clear_Your_Cache|Clear your cache]] to ensure the changes are applied correctly.&lt;br /&gt;
&lt;br /&gt;
== Ensure Redirect HTTP to HTTPS is Off ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t issue a new certificate it might be because your website is redirecting to https. The verification file required to install SSL must be served over http, and if your website redirects to https the install will fail. Make sure you don&#039;t have a redirect to https in your .htaccess file, or make an exception to allow the .well-known directory to be served over http.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# redirect to https but allow http on .well-known&lt;br /&gt;
RewriteCond %{HTTPS} !=on&lt;br /&gt;
RewriteCond %{THE_REQUEST} !/.well-known/(.*)$ [NC]&lt;br /&gt;
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plesk can also redirect to https. To disable this redirect:&lt;br /&gt;
&lt;br /&gt;
* Login at [https://heliohost.org/login/ heliohost.org].&lt;br /&gt;
* Continue to Plesk.&lt;br /&gt;
* Websites &amp;amp; Domains.&lt;br /&gt;
* Hosting &amp;amp; DNS.&lt;br /&gt;
* Hosting.&lt;br /&gt;
* Uncheck the option Redirect visitors from HTTP to HTTPS.&lt;br /&gt;
&lt;br /&gt;
[[File:redirect_http_to_https.png]]&lt;br /&gt;
&lt;br /&gt;
After ensuring that neither .htaccess or Plesk redirect to https try issuing SSL again.&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If after following the above steps, waiting &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, and [[:Clear_Your_Cache|clearing your cache]], the problem is not fixed, please post a topic in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum]. Make sure you provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=SSL_Certificate_Problems&amp;diff=2166</id>
		<title>SSL Certificate Problems</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=SSL_Certificate_Problems&amp;diff=2166"/>
		<updated>2025-11-26T00:13:52Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Fix numbered headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSL Certificate Problems ==&lt;br /&gt;
&lt;br /&gt;
== Installing a Let&#039;s Encrypt SSL Certificate == &lt;br /&gt;
&lt;br /&gt;
==== Navigate to the Let&#039;s Encrypt Settings ==== &lt;br /&gt;
&lt;br /&gt;
Navigate to the Let&#039;s Encrypt settings 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 ] &amp;gt; Dashboard tab &amp;gt; Security section&amp;gt; SSL/TLS Certificates button &amp;gt; Let&#039;s Encrypt settings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Install the Certificate ====&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;Install&#039; button.&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-install.png]]&lt;br /&gt;
&lt;br /&gt;
==== Select Certificate Options ====&lt;br /&gt;
&lt;br /&gt;
In addition to selecting the `Secure the domain name` option, we also recommend selecting the following options:&lt;br /&gt;
* Include a &amp;quot;www&amp;quot; subdomain for the domain and each selected alias&lt;br /&gt;
* Secure webmail on this domain&lt;br /&gt;
* Assign the certificate to the mail domain&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Securing webmail cannot be done during the 2 hours following domain creation, because it requires an Apache restart. Apache restarts every 2 hours, so if you&#039;re setting up SSL on a brand new account or a new domain that&#039;s just been added, you will need to return to these settings later to activate the webmail security feature.&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;Get it free&#039; button to install the certificate.&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-get-cert.png]]&lt;br /&gt;
&lt;br /&gt;
You should see that &#039;Keep websites secured&#039; is now &#039;Enabled&#039;&lt;br /&gt;
&lt;br /&gt;
We also recommend activating the &#039;Redirect from http to https&#039; option&lt;br /&gt;
&lt;br /&gt;
[[File:ssl-check-settings.png]]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting == &lt;br /&gt;
&lt;br /&gt;
If you have issues with the Let&#039;s Encrypt SSL certificate on your domain or subdomain, here are some things to check:&lt;br /&gt;
&lt;br /&gt;
== Check if the Certificate is Expired or Invalid  ==&lt;br /&gt;
&lt;br /&gt;
If the certificate is expired or invalid:&lt;br /&gt;
&lt;br /&gt;
* Reissue the certificate&lt;br /&gt;
* Wait &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;&lt;br /&gt;
* [[:Clear_Your_Cache|Clear your cache]] to ensure the changes are applied correctly&lt;br /&gt;
&lt;br /&gt;
== If the Certificate is NOT Expired ==&lt;br /&gt;
&lt;br /&gt;
If the certificate is not expired:&lt;br /&gt;
&lt;br /&gt;
* Unassign the certificate from the domain&lt;br /&gt;
* Reassign the certificate to the domain&lt;br /&gt;
* Wait &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;&lt;br /&gt;
* [[:Clear_Your_Cache|Clear your cache]] to ensure the changes are applied correctly&lt;br /&gt;
&lt;br /&gt;
== Ensure Redirect HTTP to HTTPS is Off ==&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t issue a new certificate it might be because your website is redirecting to https. The verification file required to install SSL must be served over http, and if your website redirects to https the install will fail. Make sure you don&#039;t have a redirect to https in your .htaccess file, or make an exception to allow the .well-known directory to be served over http.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# redirect to https but allow http on .well-known&lt;br /&gt;
RewriteCond %{HTTPS} !=on&lt;br /&gt;
RewriteCond %{THE_REQUEST} !/.well-known/(.*)$ [NC]&lt;br /&gt;
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plesk can also redirect to https. To disable this redirect:&lt;br /&gt;
&lt;br /&gt;
* Login at [https://heliohost.org/login/ heliohost.org]&lt;br /&gt;
* Continue to Plesk&lt;br /&gt;
* Websites &amp;amp; Domains&lt;br /&gt;
* Hosting &amp;amp; DNS&lt;br /&gt;
* Hosting&lt;br /&gt;
* Uncheck the option Redirect visitors from HTTP to HTTPS&lt;br /&gt;
&lt;br /&gt;
[[File:redirect_http_to_https.png]]&lt;br /&gt;
&lt;br /&gt;
After ensuring that neither .htaccess or Plesk redirect to https try issuing SSL again.&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If after following the above steps, waiting &#039;&#039;&#039;a full 2 hours&#039;&#039;&#039;, and [[:Clear_Your_Cache|clearing your cache]], the problem is not fixed, please post a topic in the [https://helionet.org/index/forum/45-customer-service/?do=add Customer Support forum]. Make sure you provide your &#039;&#039;&#039;username&#039;&#039;&#039;, &#039;&#039;&#039;domain name&#039;&#039;&#039;, and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MediaWiki:Sidebar&amp;diff=2165</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MediaWiki:Sidebar&amp;diff=2165"/>
		<updated>2025-11-22T03:33:27Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Home&lt;br /&gt;
** Main_Page|Main Page&lt;br /&gt;
&lt;br /&gt;
* Search&lt;br /&gt;
** Special:Search|Search this Wiki&lt;br /&gt;
&lt;br /&gt;
* Hosting&lt;br /&gt;
** HelioHost|What is HelioHost?&lt;br /&gt;
** What_HelioHost_Offers|What HelioHost Offers&lt;br /&gt;
** What_HelioHost_is_Not|What HelioHost is Not&lt;br /&gt;
** HelioNet|What is HelioNet?&lt;br /&gt;
** Signing_Up|Signing Up&lt;br /&gt;
** Why_Was_My_Account_Suspended|Why Was My Account Suspended?&lt;br /&gt;
** Common_Software_Load|Common Software Load&lt;br /&gt;
** ETA|ETA for New Features and Repairs&lt;br /&gt;
** Terms|Terms of Service&lt;br /&gt;
** Refunds|Refund Policy&lt;br /&gt;
&lt;br /&gt;
* Accounts&lt;br /&gt;
** International_Countries|International Countries&lt;br /&gt;
** Education_Accounts|Education Accounts&lt;br /&gt;
** Moving_Your_Account|Moving Your Account&lt;br /&gt;
** Suspension_Policy|Suspension Policy&lt;br /&gt;
** Donations_for_Increased_Storage|Donations for Increased Storage&lt;br /&gt;
** Account_Backups|Account Backups&lt;br /&gt;
&lt;br /&gt;
* Plesk and Management&lt;br /&gt;
** Plesk|How to Access Plesk&lt;br /&gt;
** Uploading_Files|Uploading Files&lt;br /&gt;
** MariaDB|Creating MariaDB Databases via Plesk&lt;br /&gt;
** Changing_Your_Main_Domain|Changing Your Main Domain&lt;br /&gt;
** Addon_Domains|Addon Domains&lt;br /&gt;
** Subdomains|Subdomains&lt;br /&gt;
** Parked_(Alias)_Domains|Parked (Alias) Domains&lt;br /&gt;
** Using_SSL|Using SSL&lt;br /&gt;
** DNS_Record_Management|DNS Record Management&lt;br /&gt;
** View_Error_Logs|View Error Logs&lt;br /&gt;
&lt;br /&gt;
* Tutorials&lt;br /&gt;
** Tutorials|All Tutorials&lt;br /&gt;
** Tutorials#Video_Tutorials|Video Tutorials&lt;br /&gt;
** Tutorials#Written_Tutorials|Written Tutorials&lt;br /&gt;
&lt;br /&gt;
* Common Errors&lt;br /&gt;
** Open_Basedir_Restriction|open_basedir restriction&lt;br /&gt;
** SSL_Certificate_Problems|SSL Certificate Problems&lt;br /&gt;
** 500 Database Error|500 Database Error&lt;br /&gt;
** 502_Bad_Gateway|502 Bad Gateway&lt;br /&gt;
** 504_Gateway_Timeout|504 Gateway Timeout&lt;br /&gt;
** Mail_Delivery_Problems|Mail Delivery Problems&lt;br /&gt;
** PostgreSQL_Database_Creation_Error|PostgreSQL Database Creation Error&lt;br /&gt;
** PostgreSQL_Database_Remote_Connection_Error|PostgreSQL Database Remote Connection Error&lt;br /&gt;
** phpMyAdmin_MariaDB_Access_Denied_Error|phpMyAdmin / MariaDB Access Denied Error&lt;br /&gt;
** Linux_Case_Sensitivity|Linux Case Sensitivity&lt;br /&gt;
** Could_Not_Spawn_Process|Could Not Spawn Process for Application&lt;br /&gt;
** Supported_Browsers|Supported Browsers&lt;br /&gt;
&lt;br /&gt;
* Features&lt;br /&gt;
** Softaculous|Softaculous&lt;br /&gt;
** Plesk_Features|Plesk&lt;br /&gt;
** Java_JSP|Java / JSP&lt;br /&gt;
** PHP|PHP&lt;br /&gt;
** Python|Python&lt;br /&gt;
** Node.js_Features|Node.js&lt;br /&gt;
** NET_NET_Core_Classic_ASP|.NET / .NET Core / Classic ASP&lt;br /&gt;
** PostgreSQL|PostgreSQL&lt;br /&gt;
** MariaDB|MariaDB&lt;br /&gt;
** SQLite|SQLite&lt;br /&gt;
** Laravel|Laravel&lt;br /&gt;
** Storage|Storage&lt;br /&gt;
** Unlimited_Bandwidth|Unlimited Bandwidth&lt;br /&gt;
** Unlimited_Email_Accounts|Unlimited Email Accounts&lt;br /&gt;
&lt;br /&gt;
* Servers&lt;br /&gt;
** Morty|Morty&lt;br /&gt;
** Tommy|Tommy&lt;br /&gt;
** Johnny|Johnny&lt;br /&gt;
** Lily|Lily&lt;br /&gt;
** Server_Status|Server Load and Uptime&lt;br /&gt;
** Other_Servers|Other Servers&lt;br /&gt;
&lt;br /&gt;
* Miscellaneous&lt;br /&gt;
** FAQ|FAQ / Frequently Asked Questions&lt;br /&gt;
** Clear_Your_Cache|Clear Your Cache&lt;br /&gt;
** WordPress|WordPress&lt;br /&gt;
** How_You_Can_Help|How You Can Help&lt;br /&gt;
** https://heliohost.org/donate/ | Make a Donation&lt;br /&gt;
** Contributing_to_the_Wiki|Contributing to the Wiki&lt;br /&gt;
&lt;br /&gt;
* Staff&lt;br /&gt;
** Ashoat|Ashoat&lt;br /&gt;
** Krydos|Krydos&lt;br /&gt;
** Wolstech|Wolstech&lt;br /&gt;
** KazVee|KazVee&lt;br /&gt;
** MoneyBroz|MoneyBroz&lt;br /&gt;
** Unknown025|Unknown025&lt;br /&gt;
** OnEnemy|OnEnemy&lt;br /&gt;
** Flaze|Flaze&lt;br /&gt;
** Yashrs|Yashrs&lt;br /&gt;
** Sn1f3rt|Sn1f3rt&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Morty&amp;diff=2164</id>
		<title>Morty</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Morty&amp;diff=2164"/>
		<updated>2025-11-22T03:31:35Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&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;
{{Info|There is a &#039;&#039;&#039;$5 minimum&#039;&#039;&#039; for prepay balance increases.}}&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 (&#039;&#039;&#039;at least $5&#039;&#039;&#039; or more) that 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;
* [[:MariaDB|MariaDB]], the fully free, fully open source version of 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;
* [[:Django]] (with option to request WSGI Control Access)&lt;br /&gt;
* [[:Flask]] (with option to request WSGI Control Access)&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;br /&gt;
* Multiple Accounts are allowed on Morty. (Note: Each account must be registered with a different email address.)&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Plesk_Features&amp;diff=2163</id>
		<title>Plesk Features</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Plesk_Features&amp;diff=2163"/>
		<updated>2025-11-22T03:30:55Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plesk ==&lt;br /&gt;
&lt;br /&gt;
== What is Plesk? ==&lt;br /&gt;
&lt;br /&gt;
Plesk is a powerful, yet user-friendly hosting account dashboard. Plesk has a simple-to-use interface that makes editing your hosting details extremely easy.&lt;br /&gt;
&lt;br /&gt;
== What can Plesk do? ==&lt;br /&gt;
&lt;br /&gt;
With Plesk, which is included with all HelioHost hosting accounts, you can:&lt;br /&gt;
&lt;br /&gt;
* Install Blog, Forum, CMS, or other software with the [[:Softaculous|Softaculous]] auto-installer service&lt;br /&gt;
* Install software using Plesk Applications Installer (&#039;&#039;&#039;Plesk &amp;gt; Applications&#039;&#039;&#039;)&lt;br /&gt;
* Update your HelioHost account information (email address / password)&lt;br /&gt;
** &#039;&#039;&#039;[https://heliohost.org/login/ Login] &amp;gt; Plesk &amp;gt; Account &amp;gt; My Profile &amp;gt; General &amp;gt; External email address and/or Password&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;Note:&#039;&#039;&#039; When you change your email address it may take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; to sync to the main website. In the meantime, login with your username (not email) on the main [https://heliohost.org/ heliohost.org] website. After a couple hours you should be able to login with either your username or your new external email address.&lt;br /&gt;
* Create and manage FTP accounts for access using [[:Uploading_Files|external FTP clients]] (&#039;&#039;&#039;Plesk &amp;gt; Websites &amp;amp; Domains &amp;gt; [domain] &amp;gt; Dashboard tab &amp;gt; Connection Info for FTP, Database&#039;&#039;&#039;)&lt;br /&gt;
* Use the built-in Plesk File Manager (&#039;&#039;&#039;Plesk &amp;gt; Files&#039;&#039;&#039;)&lt;br /&gt;
* [[:View_Error_Logs|View error logs]] for your site&lt;br /&gt;
* [[:Password_Protect_a_Directory|Password protect directories]] on your site&lt;br /&gt;
* Create [[:MariaDB|MariaDB]]/[[:PostgreSQL|PostgreSQL]] databases/users&lt;br /&gt;
* Edit SQL tables using [[:MariaDB#Managing_the_database_with_phpMyAdmin|phpMyAdmin]] (&#039;&#039;&#039;Plesk &amp;gt; Databases&#039;&#039;&#039;)&lt;br /&gt;
* Create and manage [[:Unlimited_Email_Accounts|unlimited email accounts]] for your domain(s)&lt;br /&gt;
* Check webmail using the preinstalled [[:Unlimited_Email_Accounts#RoundCube|RoundCube web interface]], or install [[:Unlimited_Email_Accounts#SquirrelMail_and_AfterLogic|SquirrelMail]] or [[:Unlimited_Email_Accounts#SquirrelMail_and_AfterLogic|AfterLogic]]&lt;br /&gt;
* [[:Unlimited_Email_Accounts|Set-up e-mail clients]] (such as Outlook, Gmail, Thunderbird, or iOS Mail on iPhone/iPad) for use with your e-mail addresses (through POP3/SMTP)&lt;br /&gt;
&lt;br /&gt;
== How do I access Plesk? ==&lt;br /&gt;
&lt;br /&gt;
To access Plesk, log in to the HelioHost website at [https://heliohost.org/ heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] and click on the Plesk button.&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
We strongly recommend that you &#039;&#039;&#039;do not&#039;&#039;&#039; bookmark your Plesk dashboard URL. Using the Plesk URL without first logging in at [https://heliohost.org/ heliohost.org] or [https://heliohost.org/login/ heliohost.org/login] will not track your logins and risks your account being [[:Suspension_Policy#Inactivity_Policy|suspended for inactivity]] after 30 days.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Tommy&amp;diff=2162</id>
		<title>Tommy</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Tommy&amp;diff=2162"/>
		<updated>2025-11-22T03:29:40Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&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 $2 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;
* [[:MariaDB|MariaDB]], the fully free, fully open source version of 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;
* [[:Django]]&lt;br /&gt;
* [[:Flask]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Johnny&amp;diff=2161</id>
		<title>Johnny</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Johnny&amp;diff=2161"/>
		<updated>2025-11-22T03:29:20Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&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;
* [[:MariaDB|MariaDB]], the fully free, fully open source version of 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;
* [[:Django]]&lt;br /&gt;
* [[:Flask]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails]]&lt;br /&gt;
* [[:Softaculous|Softaculous]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Converting_an_Existing_Django_App&amp;diff=2160</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=2160"/>
		<updated>2025-11-22T03:28:21Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add link to new MariaDB page&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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[#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 [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules 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]. Make sure you provide:&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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. 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== 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;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2159</id>
		<title>Django on HelioHost</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Django_on_HelioHost&amp;diff=2159"/>
		<updated>2025-11-22T03:27:52Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Add link to new MariaDB page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django 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|To check if a module is already installed, use the &#039;&#039;&#039;View&#039;&#039;&#039; link for the server and Python version of your choice, and then press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server.}}&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;
=== Running Django on a Different Python Version ===&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 VPS. {{Template:VPSInfo}}}}&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 [[:Django_on_HelioHost#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;
== Complete Django ==&lt;br /&gt;
&lt;br /&gt;
We offer the complete, unadulterated Django package, including extensions to interface with [[:MariaDB|MariaDB]], MySQL, [[:PostgreSQL|PostgreSQL]], and [[:SQLite|SQLite]] database engines.&lt;br /&gt;
&lt;br /&gt;
== Additional Libraries ==&lt;br /&gt;
&lt;br /&gt;
{{Caution|&lt;br /&gt;
Before requesting additional modules, make sure you check the list of modules already installed.&lt;br /&gt;
&lt;br /&gt;
When viewing the list of Python modules already installed, press &#039;&#039;&#039;Ctrl + F&#039;&#039;&#039; to search the page for a module name. If there is a result, this means the module is already installed on the server and you do not need to request it.&lt;br /&gt;
&lt;br /&gt;
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;
&#039;&#039;&#039;After you have checked&#039;&#039;&#039; the list of modules 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]. Make sure you provide:&lt;br /&gt;
# Your account username.&lt;br /&gt;
# Your server.&lt;br /&gt;
# The version of Python you&#039;re using.&lt;br /&gt;
# The module(s) you need, including any specific version numbers.&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;
== Getting started with Django on HelioHost ==&lt;br /&gt;
&lt;br /&gt;
This brief tutorial will guide you through setting up a Django test app without using the command line on your development system.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Django app or prefer to use the command line, our tutorial on [[:Converting_an_Existing_Django_App|Converting an Existing Django App]] may better suit your needs.&lt;br /&gt;
&lt;br /&gt;
== Create a directory on your main domain called &#039;djangotest&#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;djangotest&#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 ^(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;
== Create another &#039;djangotest&#039; directory within the first &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This directory structure 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; is being used in this example.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;dispatch.wsgi&#039; file inside the second &#039;djangotest&#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;
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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import os, sys&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;
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;
== Create a &#039;__init__.py&#039; file inside the second &#039;djangotest&#039; directory ==&lt;br /&gt;
&lt;br /&gt;
This file should remain empty.&lt;br /&gt;
&lt;br /&gt;
== Create a &#039;urls.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&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;
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;
== Create a &#039;settings.py&#039; file inside the second &#039;djangotest&#039; directory with these contents: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
# Build paths inside the project like this: BASE_DIR / &#039;subdir&#039;.&lt;br /&gt;
BASE_DIR = Path(__file__).resolve().parent.parent&lt;br /&gt;
# Quick-start development settings - unsuitable for production&lt;br /&gt;
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/&lt;br /&gt;
# SECURITY WARNING: keep the secret key used in production secret!&lt;br /&gt;
SECRET_KEY = &#039;django-makeyoursecretbetterthanthis&#039;&lt;br /&gt;
# SECURITY WARNING: don&#039;t run with debug turned on in production!&lt;br /&gt;
DEBUG = True&lt;br /&gt;
ALLOWED_HOSTS = [&#039;*&#039;]&lt;br /&gt;
# Application definition&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
    &#039;django.contrib.admin&#039;,&lt;br /&gt;
    &#039;django.contrib.auth&#039;,&lt;br /&gt;
    &#039;django.contrib.contenttypes&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions&#039;,&lt;br /&gt;
    &#039;django.contrib.messages&#039;,&lt;br /&gt;
    &#039;django.contrib.staticfiles&#039;,&lt;br /&gt;
]&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    &#039;django.middleware.security.SecurityMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.sessions.middleware.SessionMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.common.CommonMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.csrf.CsrfViewMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.auth.middleware.AuthenticationMiddleware&#039;,&lt;br /&gt;
    &#039;django.contrib.messages.middleware.MessageMiddleware&#039;,&lt;br /&gt;
    &#039;django.middleware.clickjacking.XFrameOptionsMiddleware&#039;,&lt;br /&gt;
]&lt;br /&gt;
ROOT_URLCONF = &#039;djangotest.urls&#039;&lt;br /&gt;
TEMPLATES = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;BACKEND&#039;: &#039;django.template.backends.django.DjangoTemplates&#039;,&lt;br /&gt;
        &#039;DIRS&#039;: [],&lt;br /&gt;
        &#039;APP_DIRS&#039;: True,&lt;br /&gt;
        &#039;OPTIONS&#039;: {&lt;br /&gt;
            &#039;context_processors&#039;: [&lt;br /&gt;
                &#039;django.template.context_processors.debug&#039;,&lt;br /&gt;
                &#039;django.template.context_processors.request&#039;,&lt;br /&gt;
                &#039;django.contrib.auth.context_processors.auth&#039;,&lt;br /&gt;
                &#039;django.contrib.messages.context_processors.messages&#039;,&lt;br /&gt;
            ],&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
WSGI_APPLICATION = &#039;djangotest.wsgi.application&#039;&lt;br /&gt;
# Database&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.sqlite3&#039;,&lt;br /&gt;
        &#039;NAME&#039;: BASE_DIR / &#039;db.sqlite3&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
# Password validation&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators&lt;br /&gt;
AUTH_PASSWORD_VALIDATORS = [&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.MinimumLengthValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.CommonPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &#039;NAME&#039;: &#039;django.contrib.auth.password_validation.NumericPasswordValidator&#039;,&lt;br /&gt;
    },&lt;br /&gt;
]&lt;br /&gt;
# Internationalization&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/topics/i18n/&lt;br /&gt;
LANGUAGE_CODE = &#039;en-us&#039;&lt;br /&gt;
TIME_ZONE = &#039;UTC&#039;&lt;br /&gt;
USE_I18N = True&lt;br /&gt;
USE_TZ = True&lt;br /&gt;
# Static files (CSS, JavaScript, Images)&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/howto/static-files/&lt;br /&gt;
STATIC_URL = &#039;static/&#039;&lt;br /&gt;
# Default primary key field type&lt;br /&gt;
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field&lt;br /&gt;
DEFAULT_AUTO_FIELD = &#039;django.db.models.BigAutoField&#039;&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;
djangotest/&lt;br /&gt;
├── djangotest&lt;br /&gt;
│   ├── dispatch.wsgi&lt;br /&gt;
│   ├── __init__.py&lt;br /&gt;
│   ├── settings.py&lt;br /&gt;
│   └── urls.py&lt;br /&gt;
└── .htaccess&lt;br /&gt;
1 directory, 5 files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visit Your Site ==&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 on the [[:Morty]] server only is the ability for users to restart their Django 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].&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 Django 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;dispatch.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 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 confirmed your understanding of the charges involved, and been given WSGI Control Access on Morty, 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;
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;
== 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;
=== 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 upgrade to a VPS to get rid of the error. {{Template:VPSInfo}}&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;
== References ==&lt;br /&gt;
&lt;br /&gt;
This tutorial is adapted from [https://helionet.org/index/topic/53855-how-to-use-django-on-plesk/ this post].&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=Plesk&amp;diff=2158</id>
		<title>Plesk</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=Plesk&amp;diff=2158"/>
		<updated>2025-11-22T03:26:52Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to Access Plesk ==&lt;br /&gt;
&lt;br /&gt;
== What is Plesk? ==&lt;br /&gt;
&lt;br /&gt;
Plesk is a control panel that enables you to easily manage your websites, applications, and other aspects of your hosting account. &lt;br /&gt;
Plesk offers a built-in [[:Uploading_Files#Plesk_File_Manager|File Manager]], [[:Unlimited_Email_Accounts|Email]], [[:MariaDB|MariaDB Databases]], [[:Softaculous|Softaculous]] (an auto-installer service for CMS, Forum, or Blog software), and more.&lt;br /&gt;
&lt;br /&gt;
== How to Access Plesk ==&lt;br /&gt;
&lt;br /&gt;
== Access over HTTPS (Port 8443) ==&lt;br /&gt;
&lt;br /&gt;
The usual way to access your Plesk control panel is over HTTPS (Hypertext Transfer Protocol Secure). Plesk uses Port 8443 for this. &lt;br /&gt;
&lt;br /&gt;
To access your Plesk control panel, navigate to [https://www.heliohost.org/login/ heliohost.org/login] or [https://www.heliohost.org/ heliohost.org] and enter your account details. &lt;br /&gt;
&lt;br /&gt;
Using the above links will ensure that your logins are counted, removing the risk of your account being [[:Suspension_Policy#Inactivity_Policy|suspended due to inactivity]].&lt;br /&gt;
&lt;br /&gt;
== Access over HTTP (Port 8880) ==&lt;br /&gt;
&lt;br /&gt;
If your firewall blocks Port 8443, you can use Port 8880 which is the [https://docs.plesk.com/en-US/obsidian/administrator-guide/plesk-administration/ports-used-by-plesk.64950/ port Plesk uses] for HTTP access.  &lt;br /&gt;
&lt;br /&gt;
After trying to login at [https://heliohost.org/login/ heliohost.org/login], simply click the &amp;quot;insecure login&amp;quot; button at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
{{Caution|We highly recommend logging in to Plesk securely with encryption enabled. So only use Port 8880 when you absolutely have no other way of connecting.}}&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you cannot login to Plesk, there are a few common reasons:&lt;br /&gt;
&lt;br /&gt;
== New Accounts ==&lt;br /&gt;
&lt;br /&gt;
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;
If you have just created your account, it can take &#039;&#039;&#039;up to 2 hours&#039;&#039;&#039; for your account to be fully active. In the meantime, you may not be able to login to Plesk, and your website may not load or display correctly. Please be patient and wait for the full 2 hours before assuming anything is broken.&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://www.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;, please [[:Clear_Your_Cache|clear your cache]].&lt;br /&gt;
&lt;br /&gt;
== Multiple Accounts ==&lt;br /&gt;
&lt;br /&gt;
On HelioHost&#039;s [[:Tommy|Tommy]] or [[:Johnny|Johnny]] servers, each person/user is only allowed &#039;&#039;&#039;one account&#039;&#039;&#039;. Multiple accounts on Tommy or Johnny [[:Suspension_Policy#Duplicate_Accounts|will be suspended]].&lt;br /&gt;
&lt;br /&gt;
Users who want multiple accounts are welcome to create them on our [[:Morty|Morty]] server. Please note that each Morty account must be registered with a different email address.&lt;br /&gt;
&lt;br /&gt;
== Inactive Accounts ==&lt;br /&gt;
&lt;br /&gt;
If it has been 30 days or more since your last Plesk login, your [[:Tommy|Tommy]] or [[:Johnny|Johnny]] account was likely [[:Suspension_Policy#Inactivity_Policy|suspended due to inactivity]].&lt;br /&gt;
&lt;br /&gt;
To activate a suspended account which was suspended due to inactivity, go to [https://www.heliohost.org/renew/ heliohost.org/renew].&lt;br /&gt;
&lt;br /&gt;
== Further Support ==&lt;br /&gt;
&lt;br /&gt;
If none of the above reasons apply to you and you cannot access Plesk, please create a new post in the [https://helionet.org/index/forum/81-suspended-and-queued-accounts/?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;, &#039;&#039;&#039;server name&#039;&#039;&#039;, and any &#039;&#039;&#039;error message(s)&#039;&#039;&#039; received.&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=What_HelioHost_Offers&amp;diff=2157</id>
		<title>What HelioHost Offers</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=What_HelioHost_Offers&amp;diff=2157"/>
		<updated>2025-11-22T03:25:55Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Rename link from MySQL to MariaDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What HelioHost Offers ==&lt;br /&gt;
&lt;br /&gt;
== HelioHost offers free web hosting for all. ==&lt;br /&gt;
&lt;br /&gt;
== Every account includes: ==&lt;br /&gt;
&lt;br /&gt;
* Access to [[:Plesk_Tutorials|Plesk]]&lt;br /&gt;
* Users can create, download, and schedule [[:Account_Backups|Account Backups]]&lt;br /&gt;
* Ability to edit [[:Manage_HelioHost_DNS#Edit_A,_CNAME,_TXT,_and_MX_records|A, CNAME, TXT, and MX records]]&lt;br /&gt;
* [[:Storage|1000 MB of Disk Space]] (with the option to [[:Donations_for_Increased_Storage|donate for increased storage of up to 7000 MB total]])&lt;br /&gt;
* [[:Unlimited_Email_Accounts|Unlimited Email Accounts]]&lt;br /&gt;
* Ability to [[:Unlimited_Email_Accounts#SPF,_DKIM,_and_DMARC_Records|set up SPF, DKIM, and DMARC records]]&lt;br /&gt;
* Unlimited Mailing Lists&lt;br /&gt;
* [[:Unlimited_Bandwidth|Unlimited bandwidth]]&lt;br /&gt;
* Up to 10 domains ([[Addon_Domains|Addon Domains]], [[:Subdomains|Subdomains]], and [[Parked_(Alias)_Domains|Parked (Alias) Domains]]) on the [[:Tommy]] and [[:Johnny]] servers, and the option to move to the [[:Morty]] server and create multiple Morty accounts if you need more than 10 domains.&lt;br /&gt;
* Unlimited [[:Uploading_Files|FTP]]&lt;br /&gt;
* Unlimited [[:MariaDB|MariaDB]] / [[:PostgreSQL|PostgreSQL]] / [[:SQLite|SQLite]] databases&lt;br /&gt;
* Access to [[:MariaDB#Managing_the_database_with_phpMyAdmin|phpMyAdmin]]&lt;br /&gt;
* Ability to add [[:Perl|Perl]]&lt;br /&gt;
* [[:Using_SSL|Free SSL]] with &#039;SSL It!&#039;&lt;br /&gt;
* [[:Softaculous|Softaculous]] for easy installation of popular software such as blogging and forum platforms&lt;br /&gt;
&lt;br /&gt;
== HelioHost accounts can use the following scripting languages: ==&lt;br /&gt;
&lt;br /&gt;
* [[:NET_NET_Core_Classic_ASP|.NET / .NET Core / Classic ASP]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:Java_JSP|Java / JSP]]&lt;br /&gt;
* [[:Node.js|Node.js]] (including [[:Express|Express]] and [[:Next.js|Next.js]])&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:Python|Python]], [[:Django|Django]], and [[:Flask|Flask]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails (RoR)]]&lt;br /&gt;
&lt;br /&gt;
== HelioHost offers the following paid options for users who outgrow their free account ==&lt;br /&gt;
&lt;br /&gt;
* Ability to [[:Donations_for_Increased_Storage|donate for additional storage]] to a maximum of 7000 MB total.&lt;br /&gt;
* Ability to upgrade to our unlimited memory usage, and unlimited CPU usage  [https://heliohost.org/morty/ scaling hosting plan].&lt;br /&gt;
* Ability to upgrade to a VPS. {{Template:VPSInfo}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MySQL&amp;diff=2156</id>
		<title>MySQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MySQL&amp;diff=2156"/>
		<updated>2025-11-22T03:24:35Z</updated>

		<summary type="html">&lt;p&gt;KazVee: KazVee moved page MySQL to MariaDB: Renaming &amp;#039;MySQL&amp;#039; page to &amp;#039;MariaDB&amp;#039; which is the fully free, fully open source version of MySQL offered on HelioHost&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[MariaDB]]&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2155</id>
		<title>MariaDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=MariaDB&amp;diff=2155"/>
		<updated>2025-11-22T03:24:35Z</updated>

		<summary type="html">&lt;p&gt;KazVee: KazVee moved page MySQL to MariaDB: Renaming &amp;#039;MySQL&amp;#039; page to &amp;#039;MariaDB&amp;#039; which is the fully free, fully open source version of MySQL offered on HelioHost&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 to Plesk.&lt;br /&gt;
# Click on &#039;Remote MariaDB&#039;.&lt;br /&gt;
# Put a percent sign &#039;%&#039; for all IP or else enter the IP to give access to only that particular IP in the box and click &#039;Submit&#039;.&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>KazVee</name></author>
	</entry>
	<entry>
		<id>https://wiki.helionet.org/index.php?title=What_HelioHost_Offers&amp;diff=2154</id>
		<title>What HelioHost Offers</title>
		<link rel="alternate" type="text/html" href="https://wiki.helionet.org/index.php?title=What_HelioHost_Offers&amp;diff=2154"/>
		<updated>2025-11-22T01:23:42Z</updated>

		<summary type="html">&lt;p&gt;KazVee: Update domain limits to note 10 max on Tommy and Johnny, also 10 max per Morty account with the option to have multiple Morty accounts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What HelioHost Offers ==&lt;br /&gt;
&lt;br /&gt;
== HelioHost offers free web hosting for all. ==&lt;br /&gt;
&lt;br /&gt;
== Every account includes: ==&lt;br /&gt;
&lt;br /&gt;
* Access to [[:Plesk_Tutorials|Plesk]]&lt;br /&gt;
* Users can create, download, and schedule [[:Account_Backups|Account Backups]]&lt;br /&gt;
* Ability to edit [[:Manage_HelioHost_DNS#Edit_A,_CNAME,_TXT,_and_MX_records|A, CNAME, TXT, and MX records]]&lt;br /&gt;
* [[:Storage|1000 MB of Disk Space]] (with the option to [[:Donations_for_Increased_Storage|donate for increased storage of up to 7000 MB total]])&lt;br /&gt;
* [[:Unlimited_Email_Accounts|Unlimited Email Accounts]]&lt;br /&gt;
* Ability to [[:Unlimited_Email_Accounts#SPF,_DKIM,_and_DMARC_Records|set up SPF, DKIM, and DMARC records]]&lt;br /&gt;
* Unlimited Mailing Lists&lt;br /&gt;
* [[:Unlimited_Bandwidth|Unlimited bandwidth]]&lt;br /&gt;
* Up to 10 domains ([[Addon_Domains|Addon Domains]], [[:Subdomains|Subdomains]], and [[Parked_(Alias)_Domains|Parked (Alias) Domains]]) on the [[:Tommy]] and [[:Johnny]] servers, and the option to move to the [[:Morty]] server and create multiple Morty accounts if you need more than 10 domains.&lt;br /&gt;
* Unlimited [[:Uploading_Files|FTP]]&lt;br /&gt;
* Unlimited [[:MySQL|MySQL]] / [[:PostgreSQL|PostgreSQL]] / [[:SQLite|SQLite]] databases&lt;br /&gt;
* Access to [[:MySQL#Managing_the_database_with_phpMyAdmin|phpMyAdmin]]&lt;br /&gt;
* Ability to add [[:Perl|Perl]]&lt;br /&gt;
* [[:Using_SSL|Free SSL]] with &#039;SSL It!&#039;&lt;br /&gt;
* [[:Softaculous|Softaculous]] for easy installation of popular software such as blogging and forum platforms&lt;br /&gt;
&lt;br /&gt;
== HelioHost accounts can use the following scripting languages: ==&lt;br /&gt;
&lt;br /&gt;
* [[:NET_NET_Core_Classic_ASP|.NET / .NET Core / Classic ASP]]&lt;br /&gt;
* [[:Golang|Golang]]&lt;br /&gt;
* [[:Java_JSP|Java / JSP]]&lt;br /&gt;
* [[:Node.js|Node.js]] (including [[:Express|Express]] and [[:Next.js|Next.js]])&lt;br /&gt;
* [[:PHP|PHP]]&lt;br /&gt;
* [[:Python|Python]], [[:Django|Django]], and [[:Flask|Flask]]&lt;br /&gt;
* [[:Perl|Perl]]&lt;br /&gt;
* [[:Ruby_on_Rails|Ruby on Rails (RoR)]]&lt;br /&gt;
&lt;br /&gt;
== HelioHost offers the following paid options for users who outgrow their free account ==&lt;br /&gt;
&lt;br /&gt;
* Ability to [[:Donations_for_Increased_Storage|donate for additional storage]] to a maximum of 7000 MB total.&lt;br /&gt;
* Ability to upgrade to our unlimited memory usage, and unlimited CPU usage  [https://heliohost.org/morty/ scaling hosting plan].&lt;br /&gt;
* Ability to upgrade to a VPS. {{Template:VPSInfo}}&lt;/div&gt;</summary>
		<author><name>KazVee</name></author>
	</entry>
</feed>