Hermes Docker VPS Setup: The Fastest Way to Launch Hermes on Bluehost
A practical deployment guide for Hermes users who want a Docker VPS, predictable RAM usage, and the shortest path to a live agent.
Hermes is easiest to deploy when you treat the VPS as a Docker host rather than a bare server. That keeps the environment predictable, makes upgrades less painful, and gives you a repeatable path from local testing to production.
If you want the shortest route to a live deployment, start with the Bluehost Hermes Docker VPS template: Hermes Docker VPS on Bluehost.
Before you start, review the official Docker docs: - Install Docker Engine on Ubuntu - Install Docker Compose - Docker Compose overview
Recommended VPS Size
- 2GB RAM for a simple Hermes install
- 4GB RAM if you plan to run browser automation, email workflows, and GitHub tasks together
- SSD storage if you want logs, browser artifacts, or downloaded files to persist cleanly
Install Docker and Docker Compose
Start by updating your package index and installing the required dependencies. These commands work on Ubuntu 22.04 and later.
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-releaseAdd the official Docker GPG key and repository, then install the engine and compose plugin.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-pluginVerify the installation.
docker --version
docker compose versionAdd your user to the docker group so you can run commands without sudo.
sudo usermod -aG docker $USER
newgrp dockerCreate the Project Directory
Create a dedicated directory for your Hermes deployment and add the compose file.
mkdir -p ~/hermes-deploy && cd ~/hermes-deployWrite the Docker Compose File
Create a compose file that defines the Hermes service, its environment, volumes, and restart policy.
```yaml services: hermes: image: hermes-agent:latest container_name: hermes restart: unless-stopped env_file: - .env environment: - NODE_ENV=production volumes: - hermes-data:/app/data - hermes-logs:/app/logs ports: - "127.0.0.1:3100:3100" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3100/health"] interval: 30s timeout: 10s retries: 3 start_period: 15s
volumes: hermes-data: hermes-logs: ```
Configure Environment Variables
Create a .env file to store your credentials. Never commit this file to version control.
GMAIL_CLIENT_ID=your-client-id
GMAIL_CLIENT_SECRET=your-client-secret
GITHUB_TOKEN=ghp_your-token
OPENAI_API_KEY=sk-your-key
HERMES_LOG_LEVEL=infoDeploy and Verify
Pull the image, start the container in detached mode, and confirm it is running.
docker compose pull
docker compose up -d
docker compose psWatch the logs during the first boot to catch any startup errors.
docker compose logs -f hermesCheck resource usage to make sure the container fits within your VPS limits.
docker stats --no-streamSet Up a Reverse Proxy with Caddy
If you want HTTPS access, install Caddy and create a Caddyfile that proxies to the Hermes container.
sudo apt-get install -y caddyhermes.yourdomain.com {
reverse_proxy 127.0.0.1:3100
}Reload Caddy to apply the configuration.
sudo systemctl reload caddyValidate First Workflows
Run these workflows one at a time to prove the stack before adding complexity.
- Triage a single mailbox and draft replies
- Summarize GitHub issues or pull requests
- Run one browser workflow against a trusted site
Troubleshooting
View recent container logs filtered by error level.
docker compose logs --since 1h hermes | grep -i errorRestart the service after changing environment variables.
docker compose down
docker compose up -dInspect the container if you need to debug from inside.
docker exec -it hermes /bin/shCheck host-level Docker logs if the daemon itself has issues.
journalctl -u docker --since todayNext Steps
Once you have the basics stable, consider adding a cron schedule for recurring Hermes tasks, a volume backup strategy using docker cp or a bind mount to a backed-up directory, and monitoring with a tool like Uptime Kuma running as a second service in the same compose file.