Self-Hosting dotCMS on a VPS: A Complete Production Guide

Install Docker and Portainer

1. Install Docker#


Follow the official Docker installation for Ubuntu:

# Remove any conflicting packages
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt-get remove $pkg
done

# Add Docker's official repository
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

# Install Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2. Add Your User to the Docker Group#


Without this, every Docker command requires sudo:

sudo usermod -aG docker <USERNAME>

Exit and reconnect for the group change to take effect:

exit
ssh cms-vps

# Verify — this should work without sudo:
docker ps

3. Install Portainer#


Portainer is a web UI for managing Docker containers. It's useful for deploying stacks, viewing logs, and managing containers without typing Docker commands each time.

Create the Portainer data volume and run the container:

docker volume create portainer_data

docker run -d \
  -p 9000:9000 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

4. Expose Portainer via Caddy#


Add an A record for portainer.dotcms.info pointing to your static IP (if you haven't already).

Update the Caddyfile:

sudo nano /etc/caddy/Caddyfile
portainer.dotcms.info {
    reverse_proxy localhost:9000
}

Reload Caddy:

caddy reload --config /etc/caddy/Caddyfile

Open https://portainer.dotcms.info. You'll be prompted to create an admin user. Do this within the first few minutes — Portainer times out the initial setup for security.

After logging in, click Get Started to use the local Docker environment. You'll see your running Portainer container and its resource usage.

Next up

Chapter 5: Deploy dotCMS

Continue →
    Self-Hosting dotCMS on a VPS · Ch. 4/8 — Install Docker and Portainer | dotCMS Dev Site