# Install Discourse on CloudPanel

**URL:** https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422
**Category:** Sysadmins
**Tags:** unsupported-install, install
**Created:** [May 28, 2023, 3:52am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422 "2023-05-28T03:52:28Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![denvergeeks](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/denvergeeks/32/327671_2.png) [@denvergeeks](https://meta.discourse.org/u/denvergeeks)
#### Post date: [May 28, 2023, 3:52am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/1 "2023-05-28T03:52:29Z")

</div>

> ⚠ This installation method is not officially endorsed. Use at your own risk.
> 
> The Discourse team only recommend installation using the [official install guide](https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md)

> ℹ This is an unsupported install, appropriate for those who have experience with CloudPanel, are experienced system administrators, and comfortable with docker, reverse proxies, and have successfully completed a standard installation.

### Why CloudPanel

Why might you want to install a Discourse Forum on a VPS or Dedicated Server running [CloudPanel](https://www.cloudpanel.io/)?

Here are my reasons:

I prefer to use a graphical interface for server and site administration. I’ve used most of the [web hosting control panels](https://en.wikipedia.org/wiki/Comparison_of_web_hosting_control_panels) at one time or another.

In comparison to the rest, CloudPanel is very [slim and minimal](https://www.cloudpanel.io/technology-stack/) and [uncluttered](https://demo.cloudpanel.io/). It has every feature I need, presented very simply and intuitively. And that’s it. It has nothing I don’t need.

I develop and host and manage many [Ghost](https://ghost.org/) blogs, [Wordpress](https://wordpress.org/) sites, [Drupal](https://www.drupal.org/) sites, and other types of sites in addition to [Discourse](https://www.discourse.org/) forums. I really only need one server where I can host my Discourse forums right along side my Ghost Blogs and my Wordpress and Drupal sites. (I don’t want to pay for and maintain a separate server for each instance of Discourse.)

CloudPanel includes (right out-of-the-box) built-in Nginx and a simple interface for setting up and managing Reverse Proxies which are necessary in order to run one or more instances of Discourse on the same server or with other types of websites.

The Discourse team (and the Meta forum staff here) do not provide support for alternative server environments like Cpanel or Plesk or (as in this case) CloudPanel, or others that rise up out of the command line.

So I thought I’d share my setup and my process in case there are others who might find it useful.

[If anyone tries this method, please do let me know if/how it works out for you, or if I can improve this tutorial! 😍]

### Install Docker

In Putty (or other terminal), from the root directory, run

```plaintext
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io

```

### Create a Reverse Proxy Site in CloudPanel

→ We click the + Add Site button…

 ![add-site](https://global.discourse-cdn.com/meta/original/4X/1/2/b/12b77f43d0e5447941f04bae2462c340c515d40d.jpeg)

For my Discourse instance I am using my domain name **[noobish.me](http://noobish.me)**, so from now on wherever you see that in the rest of these instructions, replace **[noobish.me](http://noobish.me)** with your actual domain name (for example, **[yoursite.com](http://yoursite.com)**)

→ We create a new “Reverse Proxy Site” in the CloudPanel for the domain where we want to host our Discourse forum (of course the DNS A record of the domain needs to be pointing to the same IP address as our CloudPanel.)

 ![create-reverse-proxy-site](https://global.discourse-cdn.com/meta/original/4X/a/6/7/a674f470ce780378939740c8d2ae5379fe8cc956.png)

### Prepare the Domain and Set up SSL

> ![cloudflare-logo](https://global.discourse-cdn.com/meta/original/4X/a/8/d/a8dd3c206db58997521d8adc8413d67c4ed8e663.png)
> 
> For my site I’m using Cloudflare’s nameservers to point the domain. In Cloudflare I set the SSL to Full or Full (strict).
> 
> I also create a Cloudflare Page Rule. Visit [this post](https://meta.discourse.org/t/using-the-cloudflare-template/158334) to learn why.
> 
> ![cloudflare-page-rule-for-discourse-sites](https://global.discourse-cdn.com/meta/original/4X/6/5/5/6553ae65b92ca4d3253b3978fd4e0462dc4cb4e3.png)
> 
> I’m also using a free Cloudflare SSL Origin Certificate for my domain, which I “Import” into CloudPanel within the “SSL/TLS” site settings for that site (by simply pasting in both the Certificate and the Private Key I had downloaded for that domain name from my Cloudflare account.)
> 
> ![cp-noobish-ssl-import](https://global.discourse-cdn.com/meta/original/4X/5/e/0/5e0f29536d479328a5b66a5ba06ab819639681dd.png)
> 
> ![cp-noobish-ssl-import-fields](https://global.discourse-cdn.com/meta/original/4X/c/2/4/c2464fc662ce2f734d1ade25d64658cff7e1af8d.png)

### Install Discourse

Back in Putty (or other terminal), from the root directory (c d Enter to get back to the root) → Install the [Discourse Standard Install](https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md#5-install-discourse) using these commands…

```plaintext
git clone https://github.com/discourse/discourse_docker.git /var/discourse

```

Enter

```plaintext
cd /var/discourse

```

Enter

```plaintext
chmod 700 containers

```

### Copy the Standalone Configuration

Now we copy the file /var/discourse/standalone.yml to /var/discourse/containers/ as app.yml before editing it according to our site settings.

```plaintext
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

```

### Edit the app.yml File

In addition to modifying the app.yml file according to our specific site settings, we need to change **3 more things** in that file before we save it…

Under the section **templates:** we need to add

```plaintext
  - "templates/web.socketed.template.yml"

```

> Because I’m using Cloudflare, under the section **templates:** I also add
> 
> ```plaintext
> - "templates/cloudflare.template.yml"
> 
> ```

Under the section **expose:** we need to comment out

```plaintext
  #- "80:80" # http
  #- "443:443" # https

```

Under the section **env:** we need to add

```plaintext
   DISCOURSE_FORCE_HTTPS: true

```

> > **For reference, you can Click Here to see the contents of my working app.yml on noobish.me where I'm using both Cloudflare and Mailgun...**
> >
> > ```plaintext
> > ## this is the all-in-one, standalone Discourse Docker container template
> > ##
> > ## After making changes to this file, you MUST rebuild
> > ## /var/discourse/launcher rebuild app
> > ##
> > ## BE *VERY* CAREFUL WHEN EDITING!
> > ## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
> > ## visit http://www.yamllint.com/ to validate this file as needed
> > 
> > templates:
> > - "templates/postgres.template.yml"
> > - "templates/redis.template.yml"
> > - "templates/web.template.yml"
> > - "templates/web.ratelimited.template.yml"
> > - "templates/web.socketed.template.yml"
> > - "templates/cloudflare.template.yml"
> > 
> > params:
> > db_default_text_search_config: "pg_catalog.english"
> > 
> > ## Set db_shared_buffers to a max of 25% of the total memory.
> > ## will be set automatically by bootstrap based on detected RAM, or you can override
> > db_shared_buffers: "4096MB"
> > 
> > ## can improve sorting performance, but adds memory usage per-connection
> > #db_work_mem: "40MB"
> > 
> > ## Which Git revision should this container use? (default: tests-passed)
> > #version: tests-passed
> > 
> > env:
> > LC_ALL: en_US.UTF-8
> > LANG: en_US.UTF-8
> > LANGUAGE: en_US.UTF-8
> > # DISCOURSE_DEFAULT_LOCALE: en
> > 
> > DISCOURSE_FORCE_HTTPS: true
> > 
> > ## How many concurrent web requests are supported? Depends on memory and CPU cores.
> > ## will be set automatically by bootstrap based on detected CPUs, or you can override
> > UNICORN_WORKERS: 8
> > 
> > ## TODO: The domain name this Discourse instance will respond to
> > ## Required. Discourse will not work with a bare IP number.
> > DISCOURSE_HOSTNAME: 'noobish.me'
> > 
> > ## Uncomment if you want the container to be started with the same
> > ## hostname (-h option) as specified above (default "$hostname-$config")
> > #DOCKER_USE_HOSTNAME: true
> > 
> > ## TODO: List of comma delimited emails that will be made admin and developer
> > ## on initial signup example 'user1@example.com,user2@example.com'
> > DISCOURSE_DEVELOPER_EMAILS: 'admin@noobish.me'
> > 
> > ## TODO: The SMTP mail server used to validate new accounts and send notifications
> > # SMTP ADDRESS, username, and password are required
> > # WARNING the char '#' in SMTP password can cause problems!
> > DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
> > DISCOURSE_SMTP_PORT: 587
> > DISCOURSE_SMTP_USER_NAME: postmaster@noobish.me
> > DISCOURSE_SMTP_PASSWORD: pYdRLyQW
> > #DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
> > #DISCOURSE_SMTP_DOMAIN: noobish.me # (required by some providers)
> > DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me # (address to send notifications from)
> > 
> > ## The http or https CDN address for this Discourse instance (configured to pull)
> > ## see https://meta.discourse.org/t/14857 for details
> > #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
> > 
> > ## The maxmind geolocation IP address key for IP address lookup
> > ## see https://meta.discourse.org/t/-/137387/23 for details
> > #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
> > 
> > ## The Docker container is stateless; all data is stored in /shared
> > volumes:
> > - volume:
> > host: /var/discourse/shared/standalone
> > guest: /shared
> > - volume:
> > host: /var/discourse/shared/standalone/log/var-log
> > guest: /var/log
> > 
> > ## Plugins go here
> > ## see https://meta.discourse.org/t/19157 for details
> > hooks:
> > after_code:
> > - exec:
> > cd: $home/plugins
> > cmd:
> > - git clone https://github.com/discourse/docker_manager.git
> > 
> > ## Any custom commands to run after building
> > run:
> > - exec: echo "Beginning of custom commands"
> > ## If you want to set the 'From' email address for your first registration, uncomment and change:
> > ## After getting the first signup email, re-comment the line. It only needs to run once.
> > #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
> > - exec: echo "End of custom commands"
> > 
> > ```

Then we save and exit the app.yml file…

CTRL-X

y

Enter

Next we set the permissions for the app.yml file…

`chmod o-rwx containers/app.yml`

then…

### Bootstrap the App

```plaintext
cd /var/discourse

```

```plaintext
./launcher bootstrap app

```

This will take a considerable amount of time. In the end of the bootstrap process, you’ll be asked to:

```plaintext
./launcher start app

```

### Edit the Vhost File

Now we go back into our CloudPanel and paste the below code into the “Vhost Editor” for our Discourse site (overwriting what is already there). Of course replace **[yoursite.com](http://yoursite.com)** with your actual domain name.

```plaintext
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name yoursite.com;
  {{root}}

  {{nginx_access_log}}
  {{nginx_error_log}}

  if ($scheme != "https") {
    rewrite ^ https://$host$uri permanent;
  }

  location ~ /.well-known {
    auth_basic off;
    allow all;
  }

  {{settings}}

  add_header Cache-Control no-transform;

  location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;

  }
}

```

### Restart Nginx

Next we need to restart Nginx, which we can do by clicking a button in the Admin Area of the CloudPanel…

 ![restart-nginx](https://global.discourse-cdn.com/meta/original/4X/e/6/5/e65c3d2d723ba4dc77efef2ad53209dc0412ffbe.png)

### Congratulations!

Now, in our browser, we can go to our site’s URL and run the Discourse Setup Wizard…

 ![setup-discourse-in-browser](https://global.discourse-cdn.com/meta/original/4X/1/6/e/16e691365c23ce4b27ccdf27b83bf315da9f4500.png)

### Cohabitate Peacefully

Now I can self-host and manage my Discourse site right along side my Ghost, Wordpress, Drupal and other types of sites using a clean and lean management panel, with minimal need going forward to use the terminal/command line.

* * *

To Install Additional Discourse Instances…

> **[Multiple Instances of Discourse on CloudPanel](https://noobish.me/t/multiple-instances-of-discourse-on-cloudpanel/574)**
>
> To Install a First Discourse Instance on CloudPanel To Install a Second Discourse Instance on the Same CloudPanel Server… 1. Create a Reverse Proxy Site in CloudPanel In CloudPanel… Click the + Add Site button… For my Discourse...

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [May 28, 2023, 11:17am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/2 "2023-05-28T11:17:23Z")

</div>

> [@denvergeeks](#):
>
> /launcher stop app

You should delete these steps and create app.yml without generating this error. It’s confusing.

> [@denvergeeks](#):
>
> We paste the following code into that file…

(If you’re going to replace the whole file, why copy the example?) The better thing to do is to say what needs to be changed from the existing sample. Looks like it’s the socket template and force https.

> [@denvergeeks](#):
>
> In our app2.yml file here we have also replaced each instance of **standalone** to **standalone2** as we did in the Vhost file for our second site.

This gives you two copies of postgres, which uses more ram than a single postgres would. It works, but it’s not a best practice.

There are a number of things that make this not a good example to follow and it will be very difficult to support. I’m happy that you figured out a solution for you, but I don’t think that this is a good path to send people down.

---

<div class="post-metadata">

### Author: ![denvergeeks](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/denvergeeks/32/327671_2.png) [@denvergeeks](https://meta.discourse.org/u/denvergeeks)
#### Post date: [May 28, 2023, 11:59am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/3 "2023-05-28T11:59:51Z")

</div>

Thank you @pfaffman –

You’re right. It gets the job done, but the procedure is too messy. It’s in the wrong order. I appreciate your suggestions and I’ll fix it up.

> [@pfaffman](#):
>
> I don’t think that this is a good path to send people down.

Could you clarify why you think this?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [May 28, 2023, 1:53pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/4 "2023-05-28T13:53:49Z")

</div>

Because it’s complicated and is a good idea only for people who can figure it out themselves. It’s pretty wasteful, and if the goal is just to run two discourses, two separate vms is a cheaper and easier solution in most cases.

---

<div class="post-metadata">

### Author: ![denvergeeks](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/denvergeeks/32/327671_2.png) [@denvergeeks](https://meta.discourse.org/u/denvergeeks)
#### Post date: [May 29, 2023, 1:33am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/5 "2023-05-29T01:33:31Z")

</div>

Thanks again @pfaffman – I’ve now simplified the procedure and removed the section about adding a second Discourse site on the same server.

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 7, 2023, 11:04am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/6 "2023-06-07T11:04:00Z")

</div>

I recieved this message

sudo apt update   
sudo apt-get install docker-ce docker-ce-cli docker-compose [containerd.io](http://containerd.io)  
usage: gpg [options] --dearmor [file]  
curl: (23) Failed writing body

Why?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [June 7, 2023, 11:59am UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/7 "2023-06-07T11:59:41Z")

</div>

Hey Antonio. Welcome.

This seems like a docker issue and not one having to do with Discourse. You’ll probably do better searching with your OS and update docker-ce than asking here.

Are you trying to use Discourse? Or CloudPanel?

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 7, 2023, 12:03pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/8 "2023-06-07T12:03:25Z")

</div>

I just followed the guide here. I ran the first command, for docker installation, and the server responded this  
the command is:

 ![Schermata del 2023-06-07 14-05-24](https://global.discourse-cdn.com/meta/original/4X/7/a/5/7a56cf9dc79cb448bd69d716be09f1083ce4a5ed.png)

---

<div class="post-metadata">

### Author: ![Simon\_Manning](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon_manning/32/198596_2.png) [@Simon\_Manning](https://meta.discourse.org/u/Simon_Manning)
#### Post date: [June 7, 2023, 1:16pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/9 "2023-06-07T13:16:15Z")

</div>

There shouldn’t be backslashes on the ends of each of those lines. The backslash escapes the newline, meaning the shell treats the next line as a continuation of the same line.

In this case, that will result in trying to run this as a single command which is where the error is coming from:  
`sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable"`

Just removing those backslashes on the ends of the lines will solve that:

```plaintext
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io

```

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 7, 2023, 1:27pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/10 "2023-06-07T13:27:15Z")

</div>

thank you, now it works fine

---

<div class="post-metadata">

### Author: ![denvergeeks](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/denvergeeks/32/327671_2.png) [@denvergeeks](https://meta.discourse.org/u/denvergeeks)
#### Post date: [June 7, 2023, 8:37pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/11 "2023-06-07T20:37:49Z")

</div>

Thank you @Simon_Manning – I removed the backslashes in the code snippet in the top post tutorial.

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 8, 2023, 1:18pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/12 "2023-06-08T13:18:21Z")

</div>

Sorry me, now i have this error: FAILED

```plaintext
Pups::ExecError: /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end' failed with return #<Process::Status: pid 112 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params "/usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'"
bootstrap failed with exit code 1
**FAILED TO BOOTSTRAP** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
214c73c4474ed59e7b6fb7f42143ce126d2b453022b08770da3af31ca2fdaaba

```

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [June 8, 2023, 1:21pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/13 "2023-06-08T13:21:38Z")

</div>

I don’t know CloudPanel, but the error messages seem to be self-explanatory:

```plaintext
'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'

```

```plaintext
'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'"

```

It looks like your email wasn’t configured during `./discourse-setup` or inside `app.yml` (you can edit it manually at any time). 🤔

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 8, 2023, 1:29pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/14 "2023-06-08T13:29:54Z")

</div>

Excuse me all, I’m a professor at the Fermi high school and I’m trying to install discourse community for our school. Since we use cloud panels I followed this guide but apparently something is missing. is it possible to get help and a more detailed guide to follow? A thousand thanks

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [June 8, 2023, 1:37pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/15 "2023-06-08T13:37:49Z")

</div>

I think using an advanced install might not be what you’re looking for if you don’t have much sysadmin knowledge. Another important point to consider is that such an installation will fall under #unsupported-install, making it less likely to get help on here if you encounter issues.

If you have the budget and depending on the size of your community, it might be better to host Discourse on another server and follow the [standard install](https://meta.discourse.org/t/142537?silent=true).

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 8, 2023, 2:03pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/16 "2023-06-08T14:03:52Z")

</div>

Sorry and what would a service like this be for? In my opinion, perhaps the guide is not very detailed, it is made for system administrators, it would be enough to simply indicate the various steps. Where I come from it is said: no one is born already educated. Thanks for your help and your time.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [June 8, 2023, 2:08pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/17 "2023-06-08T14:08:24Z")

</div>

> [@Antonio\_Cirillo](#):
>
> In my opinion, perhaps the guide is not very detailed, it is made for system administrators,

That’s exactly right. That’s why the [standard install](https://meta.discourse.org/t/142537?silent=true) was recommended.

And this, @denvergeeks is why I didn’t think that creating a guide like this was a good idea in the first place. It’s hard to write, hard to maintain, and you’re the only person who can check it.

---

<div class="post-metadata">

### Author: ![Antonio\_Cirillo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antonio_cirillo/32/310246_2.png) [@Antonio\_Cirillo](https://meta.discourse.org/u/Antonio_Cirillo)
#### Post date: [June 8, 2023, 2:17pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/18 "2023-06-08T14:17:32Z")

</div>

I’m sorry but I don’t agree. I already use cloud panel with various domains, furthermore discourse community would go on a subdomain and then the author’s premise is all too clear (the guide is for those who use Cloud Panel with different services installed on VPS). All it takes is a little effort to better detail everything. After all, sharing knowledge is the basis of communities, otherwise I would have bought software that was already installed and ready to use. Anyway I don’t want to annoy anyone, if it’s possible to get help then thank you otherwise I won’t disturb you again.

---

<div class="post-metadata">

### Author: ![Simon\_Manning](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon_manning/32/198596_2.png) [@Simon\_Manning](https://meta.discourse.org/u/Simon_Manning)
#### Post date: [June 8, 2023, 2:27pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/19 "2023-06-08T14:27:21Z")

</div>

@denvergeeks Setting up email is critical to normal operation and although there is a link to the standard install, the way the guide is currently written circumvents setting up email as well as misc other information that might be important to certain setups.

I wonder if it might be worthwhile replacing the `Install Discourse` through `Bootstrap the App` sections with something more along the lines of:

> ### Install and Configure Discourse
> 
> Follow the [standard install](https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md) through steps 1-6
> 
> \<Do the stuff currently in Edit the app.yml File\>
> 
> Rebuild Discourse:
> 
> ```plaintext
> ./launcher rebuild app
> 
> ```

Then in the `Congratulations!` section, add a line after the screenshot to say something like “Continue through the rest of the standard install documentation.” Essentially reworking the guide to provide additional steps that augment the standard install as opposed to providing alternative install instructions.

I think the information you’ve provided on CloudPanel is very useful and the instructions are clear, the Discourse side of it could just benefit from having less divergence from the standard install to make it safer as well as the #unsupported-install tag to make it clear(er) that here be dragons.

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [June 8, 2023, 2:47pm UTC](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422/20 "2023-06-08T14:47:01Z")

</div>

> [@Antonio\_Cirillo](#):
>
> After all, sharing knowledge is the basis of communities, otherwise I would have bought software that was already installed and ready to use. Anyway I don’t want to annoy anyone, if it’s possible to get help then thank you otherwise I won’t disturb you again.

The discussion kind of drifts away from the original topic, but be assured that we’re happy to help. 🙂

To sum it up:

If you have basic IT knowledge, you can follow the [standard install](https://meta.discourse.org/t/142537?silent=true). You’ll also need a domain name, and configure an email sending service such as Mailgun (tutorial here: [Configure Mailgun for email when using Digital Ocean for DNS](https://meta.discourse.org/t/configure-mailgun-for-email-when-using-digital-ocean-for-dns/40590)).

Note that we usually won’t help on matters that are outside the scope of this forum. For example, the question “How do I register a domain name?” wouldn’t fit here.

If you don’t have basic IT knowledge and depending on your budget, you can ask for paid support on #Marketplace.

Finally, you can also have a look at Discourse managed paid plans, where pretty much everything will be handled by us and you’ll have access to our team support.

> **[Discourse pricing](https://discourse.org/pricing)**
>
> Official Discourse hosting plans for communities of every size.

Also, know that we provide discounts for educational purposes, since you mention it’s for your school:

> **Are there educational or non-profit discounts?**
> 
> Yes! If you are legally recognized as an educational institution we offer an 85% discount. If you are legally recognized as a non-profit organization that is exempt from federal taxes, we offer a 50% discount. These discounts apply only to our basic, pro, and business plans, cannot be combined with other discounts, and must be paid through a debit/credit card monthly or annually. [Please contact us](https://discourse.org/contact) after starting your trial and we’ll add the discount to your account.

[Next page](https://meta.discourse.org/t/install-discourse-on-cloudpanel/266422.md?page=2)
