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 and Virtual Dedicated Server (VDS). 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.

System Requirements

Before deploying, ensure your server meets the following minimum hardware requirements. For a stable production deployment, we recommend using higher specifications than the minimum requirements.

Resource Minimum Recommended
RAM 3 GB 8 GB DDR5
Disk 20 GB 200 GB NVMe
CPU 2 vCPUs 4 vCPUs

How to Reimage Your Server for Cloudron Installation

This guide walks you through installing and setting up Cloudron using the Bluehost Portal.

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

    Self Managed VPS
     

  1. Click the Manage button on the hosting package you want to reimage.

    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
     

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

    BH AM - Install - Cloudron
     

How to Setup your Cloudron Server

After installation completes:

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

    Self Managed VPS
     

  3. Locate the server you want to manage, then click View Details in the bottom-left corner to expand the section and access additional server information.

    Self Managed VPS
     

  4. Click the Reset Password.

    Self Managed VPS
     

  5. In the pop-up window, type your new root password, then click Reset Password again to confirm and save the changes.

    Self Managed VPS
     

  1. Connect to your VPS via SSH.
    Use your VPS IP and credentials with an SSH client, follow the prompts, and enter your root password when asked:
    ssh root@your_server_ip
  2. 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:~#
            
  3. 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:~#
            
  4. 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:
    systemctl status box
    Example Output:
        
        ● 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 & 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 and Virtual Dedicated Server (VDS). 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.