Loading...

Bluehost Self-Managed VPS: Reimage Your Server for Cloudron Installation

Cloudron is a turnkey platform that allows you to self-host web applications on your Bluehost Self-Managed VPS. This guide walks you through reimaging your server for Cloudron installation using the Bluehost Portal and shows you how to access your Cloudron dashboard, so you can start deploying apps efficiently and securely.

Reimage Your Server for Cloudron Installation Using Bluehost Portal

To reimage your server and install Cloudron:

  1. Log in to your Bluehost Portal.
  2. In the left-hand menu, click Hosting.

    Self Managed VPS
     

  1. Click the Manage button on the Self-Managed VPS package.

    BH AM - Select Server - Manage
     

  2. Click the Reimage button.

    BH AM - Manage Server - Overview - Reimage button
     

  3. Select the Applications tab.

    BH AM - Manage Server - Overview - Install Application
     

  4. From the list, find Cloudron and click Select.

    BH AM - Manage Server - Select Application Cloudron
     

  5. To confirm, please type "reimage" and then click Proceed to start the process.

    BH AM - Manage Server - Reimage
     

  6. Wait a few moments while the installation completes.

    BH AM - Install - Cloudron
     

    • Once completed, you will see Cloudron listed in the Server Image section.

      BH AM - Install - Cloudron
       

How to Setup your Cloudron Server

  1. Server and Network Configuration
    cat /var/log/onboot.log
    Example Output:
    
    Last login: Sat Jun 20 20:54:21 2026 from 123.45.678.910
    root@server-123456:~# cat /var/log/onboot.log
    [2026-06-20 20:41:18] Starting onboot script
    [2026-06-20 20:41:18] Disabled Cloudron MOTD: 92-cloudron
    [2026-06-20 20:41:18] Onboot script completed successfully
    root@server-123456:~#
        
  2. Open Firewalls (Cloud Provider Specific)

    Do NOT enable UFW (ufw enable). Cloudron manages its own internal firewall using iptables. Enabling UFW will break its container networking.

    • If you are on AWS EC2: Go to your AWS Console → Security Groups, and ensure Ports 80 (HTTP) and 443 (HTTPS) are open to the world (0.0.0.0/0).
    • If you are on Oracle Cloud: The script should handle this. If you can't reach the setup page shortly, force-open the OS firewall by running:
    
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -I INPUT -p tcp --dport 443 -j ACCEPT
    netfilter-persistent save
        
    
    root@server-123456:~# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -I INPUT -p tcp --dport 443 -j ACCEPT
    netfilter-persistent save
    run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
    run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
    root@server-123456:~#
        
  3. Configure Your DNS Records
    • Log into your DNS provider's dashboard and add two A Records pointing to your server's public IP:
      Type Name Value / Points to TTL
      A @ your-server-public-ip Auto / 14400
      A * your-server-public-ip Auto / 14400

Access your Cloudron Dashboard

After the configuration completes:

  1. Log In via Your Browser:
    https://your-server-ip
    

  2. Bypass the Browser Security Warning.

    BH AM - aaPanel log in  click advanced
     

  3. Link Your Domain & DNS API

    On the setup screen, fill out the configuration form:

    BH - Cloudron - Domain Setup
     

    • Domain: Enter your root domain (e.g., yourdomain.com).
    • DNS Provider: Select your provider from the dropdown.
    • API Token: Paste the API key/token you generated during Phase 1.
    • Certificate Provider: Leave it on Let's Encrypt Prod - Wildcard.
    • IPv4 Configuration: Select Public IP.

    Once done, Cloudron will now automatically communicate with your DNS provider, create the necessary management subdomains, and provision an SSL certificate. This takes about 2–3 minutes.

    BH - Cloudron - Setting Up Dashboard
     

  4. Create the Admin Account

    Once the DNS validation succeeds, your browser will automatically redirect to a secure URL:

    https://my.yourdomain.com

    Fill out the final form to create your master admin account:

    • Enter your Name, Username, and a strong Password.
    • Enter a valid Email Address (Let’s Encrypt will send SSL expiration warnings here if anything ever fails to auto-renew).

    Click Create admin.

  5. Verification

    You are now logged into your Cloudron Dashboard!

    • To Install Apps: Go to the built-in App Store, click an app (like WordPress or Nextcloud), and give it a subdomain. Cloudron handles the rest.
    • Future Dashboard Access: You will always access your server administration portal at: https://my.yourdomain.com
  6. If you ever need to check if the background system services are running happily via SSH, you can run:
    
    
    Last login: Sat Jun 20 21:15:21 2026 from 123.456.789.101
    root@server-123456:~# systemctl status box
    ● box.service - Box
         Loaded: loaded (/etc/systemd/system/box.service; enabled; preset: enabled)
         Active: active (running) since Sat 2026-06-20 20:41:16 UTC; 2h 13min ago
        Process: 2388 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
       Main PID: 1251 (MainThread)
          Tasks: 11 (limit: 2332)
         Memory: 196.1M (max: 400.0M available: 203.8M peak: 200.6M)
            CPU: 5.683s
         CGroup: /system.slice/box.service
                 └─1251 node /home/yellowtent/box/box.js
    
    Jun 20 20:41:20 server-123456.testingdomain.com sudo[1533]: pam_unix(sudo:session): session opened for user root(uid=0)>
    Jun 20 20:41:20 server-123456.testingdomain.com sudo[1533]: pam_unix(sudo:session): session closed for user root
    Jun 20 22:17:04 server-123456.testingdomain.com sudo[2380]: pam_unix(sudo:session): session opened for user root(uid=0)>
    Jun 20 22:17:04 server-123456.testingdomain.com sudo[2380]: pam_unix(sudo:session): session closed for user root
    Jun 20 22:17:04 server-123456.testingdomain.com sudo[2385]: pam_unix(sudo:session): session opened for user root(uid=0)>
    Jun 20 22:17:04 server-123456.testingdomain.com systemd[1]: Reloading box.service - Box...
    Jun 20 22:17:04 server-123456.testingdomain.com sudo[2385]: pam_unix(sudo:session): session closed for user root
    Jun 20 22:17:09 server-123456.testingdomain.com systemd[1]: Reloaded box.service - Box.
    Jun 20 22:31:21 server-123456.testingdomain.com sudo[2471]: pam_unix(sudo:session): session opened for user root(uid=0)>
    Jun 20 22:31:21 server-123456.testingdomain.com sudo[2471]: pam_unix(sudo:session): session closed for user root
    

Additional Information and Example Documentation Output

You can run cat /root/README.md to see more information and useful commands:

Example Output:

root@server-123456:~# cat /root/README.md
# Cloudron

## Description

Cloudron is a self-hosting platform that lets you install and manage popular web applications on your server with automatic updates and backups. It handles app configuration, SSL certificates, user management, and system maintenance automatically, making it easy to run a personal or organizational app ecosystem without deep technical expertise.

## Before You Begin

You will need the following before starting setup:

1. **A registered domain name** (e.g. `mycompany.com`) -- purchase from
   Namecheap, GoDaddy, or Porkbun. Cheap `.xyz` or `.online` domains
   cost $1-2/year.
2. **Wildcard DNS configured** -- create a wildcard `A` record pointing
   `*.yourdomain.com` -> your server's public IP. This is required for
   Cloudron to create subdomains for each app automatically.
3. **A DNS provider API key** so Cloudron can automatically manage DNS
   records. Cloudflare is recommended (free). Point your domain nameservers
   to Cloudflare, then create an API token with Zone -> DNS -> Edit permissions.
4. **An admin email address** -- used for Let's Encrypt SSL certificate
   provisioning. Use a valid email you have access to.

> Cloudron requires a real domain because it automatically provisions
> wildcard SSL certificates and creates subdomains for every app you install
> (e.g. `wordpress.yourdomain.com`, `nextcloud.yourdomain.com`).
> This cannot be bypassed in production use.

---

## Minimum Resources

Cloudron requires more resources than a typical single-app image due to its
container orchestration, Docker engine, and built-in services (nginx, MySQL,
mail server, etc.).

| Resource | Minimum |
|----------|---------|
| CPU      | 2 vCPUs |
| RAM      | 3 GB    |
| Disk     | 20 GB   |

---

## How to Use

#### Step 1 -- Wait for First Boot to Complete

After launching the instance, the first-boot script runs automatically in the
background. It opens ports 80 and 443 via iptables and prepares the system for
Cloudron setup. This takes about 2 minutes. You can verify it completed:

```bash
cat /var/log/onboot.log
```

#### Step 2 -- Point Your Domain to This Server

Before opening the setup UI, add these DNS records at your DNS provider:
```
Type: A  |  Name: *  |  Value: your-server-ip  |  TTL: Auto
Type: A  |  Name: @  |  Value: your-server-ip  |  TTL: Auto
```
The wildcard record is required -- Cloudron automatically creates a subdomain
for every app you install (e.g. `wordpress.yourdomain.com`).

#### Step 3 -- Open the Cloudron Setup UI

Open your browser and go to:
```
http://your-server-ip
```

You will see the Cloudron first-time setup wizard. If the page does not load,
wait another minute and try again.

#### Step 4 -- Enter Your Domain and DNS Credentials

Fill in the setup form:
- **Domain** -- your registered domain (e.g. `mycompany.com`)
- **DNS Provider** -- select your provider (Cloudflare recommended)
- **API Token** -- your DNS provider API token
- **Certificate provider** -- leave as `Let's Encrypt Prod - Wildcard`
- **IPv4 Configuration** -- leave as `Public IP`

Click **Next**. Cloudron will create the required DNS records and provision
a wildcard SSL certificate automatically. This may take 2-3 minutes.

#### Step 5 -- Create Your Admin Account

Once DNS and SSL are configured, Cloudron redirects you to
`https://my.yourdomain.com`. Fill in your name, email, username, and
password, then click **Create admin** to access your dashboard.

> Use a real email address -- Let's Encrypt sends certificate renewal
> notices to this address.

---

### Oracle Cloud Deployment

Oracle Cloud has an additional OS-level firewall that blocks ports 80 and 443
even after opening them in the Security List. This image handles this
automatically on first boot -- no manual iptables commands are needed.

If ports are still blocked after booting, SSH in and run:

```bash
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
netfilter-persistent save
```

Then follow Steps 2-5 above.

---

### AWS EC2 Deployment

#### Step 1 -- Open Security Group Ports

Open these ports in your EC2 Security Group before accessing the setup page:

| Port | Protocol | Source    | Purpose                    |
|------|----------|-----------|----------------------------|
| 22   | TCP      | Your IP   | SSH access                 |
| 80   | TCP      | 0.0.0.0/0 | Cloudron setup UI + HTTP   |
| 443  | TCP      | 0.0.0.0/0 | HTTPS for apps + dashboard |

**Steps:**
1. Go to EC2 -> Instances -> select your instance -> Security tab
2. Click the Security Group link -> Edit inbound rules
3. Add HTTP (port 80) and HTTPS (port 443) with source Anywhere (0.0.0.0/0)
4. Save rules

## Accessing the Dashboard

Cloudron has no default username or password. Your admin credentials are
created by you during the first-boot setup wizard (Step 5 above). If you
have not completed setup yet, open `http://your-server-ip` to begin.

After setup, your Cloudron dashboard is always at:
```
https://my.yourdomain.com
```

Each app you install gets its own subdomain automatically:
- WordPress -> `https://wordpress.yourdomain.com`
- Nextcloud -> `https://nextcloud.yourdomain.com`
- Gitea -> `https://git.yourdomain.com`

Cloudron acts as an OAuth/OIDC provider -- once logged into the dashboard,
you are automatically signed into all hosted apps.

---

## DNS Provider API Keys

| Provider     | How to get credentials                               |
|--------------|------------------------------------------------------|
| Cloudflare   | My Profile -> API Tokens -> Create Token (Zone:Edit)  |
| AWS Route 53 | IAM -> Users -> Create Access Key + Secret Key         |
| GoDaddy      | developer.godaddy.com -> API Keys                    |
| Namecheap    | Profile -> Tools -> API Access                        |
| DigitalOcean | API -> Generate New Token                            |

Full list: [DNS Provider docs](https://docs.cloudron.io/domains/#dns-providers)

---

## Services

| Service  | Ports   | Purpose                                      |
|----------|---------|----------------------------------------------|
| Cloudron | 80, 443 | Setup UI, dashboard, and hosted applications |
| OpenSSH  | 22      | Remote SSH access                            |

> Do NOT enable UFW -- Cloudron manages its own firewall via iptables.
> Enabling UFW will conflict with Cloudron's internal port management.

---

## Image Contents

- Cloudron 8+ (currently 9.1.6, installed via official installer)
- Docker CE (latest stable, upgraded post-install)
- Ubuntu 24.04 with all security patches applied at build time

> Cloudron bundles and manages its own versions of nginx and Node.js
> internally. These are updated via Cloudron's own update mechanism.

---

## Known Limitations

- Remaining Trivy vulnerabilities are in Cloudron's bundled Node.js
  dependencies and Docker CE binaries compiled with Go stdlib. These are
  managed by Cloudron and Docker upstream respectively and will be resolved
  in their future releases.
- Cloudron requires a real domain name -- it cannot be accessed via IP
  address alone in production use.

---

## Validation Tests

```bash
perl /root/app_test/main.t
```

Runs 11 checks: `box.service` enabled and unit file present, first-boot script
executable, logrotate config present, log directory exists, README copied to
`/root/README.md`, MOTD executable, Docker binary and service available, port 80
listening, and Cloudron box service active.

## Useful Commands (via SSH)

```bash
# Check Cloudron status
systemctl status box

# Restart Cloudron
systemctl restart box

# View Cloudron logs
journalctl -u box -n 100 --no-pager

# View first-boot log
cat /var/log/onboot.log
```

---

## Links

**Cloudron**

* Home: [cloudron.io](https://www.cloudron.io/)
* Documentation: [docs.cloudron.io](https://docs.cloudron.io/)
* App Store: [Cloudron App Store](https://www.cloudron.io/store/)
* DNS Providers: [Supported DNS Providers](https://docs.cloudron.io/domains/#dns-providers)
* Community Forum: [forum.cloudron.io](https://forum.cloudron.io/)
root@server-123456:~#

Summary

Cloudron is a robust platform that empowers you to deploy and manage web applications directly on your Bluehost Self-Managed VPS. By following this guide, you can easily reimage your server for Cloudron installation using the Bluehost Portal and access your dashboard to start deploying apps with confidence and efficiency.

Loading...