Documentation
Get Hub running in minutes
Spin up your own instance with Docker Compose and start managing domains and deploys through the API.
Quick start
Run Hub with Docker Compose
A single docker-compose.yml with MySQL, MinIO, and the official bewayio/hostcontrol image.
Recommended
Run the installer
Automatically generate your docker-compose.yml with strong passwords and get Hostcontrol running in seconds.
curl -fsSL https://beway.io/install.sh | bash
At the end, the script prints the INSTALL_TOKEN — save it, you'll need it to finish setup at /install.
or set it up manually
docker-compose.yml
services:
mysql:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?set MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: hostcontrol
volumes:
- mysql_data:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- default
- beway_host_edge
minio:
image: minio/minio:latest
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:?set MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?set MINIO_ROOT_PASSWORD}
MINIO_API_REQUESTS_MAX: 10000
volumes:
- minio_data:/data
networks:
- default
- beway_host_edge
hostcontrol:
image: ${HUB_IMAGE:-bewayio/hostcontrol:latest}
restart: unless-stopped
ports:
- "8081:8081"
environment:
MYSQL_HOST: mysql
MYSQL_PORT: "3306"
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:?set MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: hostcontrol
MINIO_ENDPOINT: minio:9000
MINIO_USE_SSL: "false"
MINIO_ROOT_USER: ${MINIO_ROOT_USER:?set MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?set MINIO_ROOT_PASSWORD}
CREDENTIALS_ENCRYPTION_KEY: ${CREDENTIALS_ENCRYPTION_KEY:?set CREDENTIALS_ENCRYPTION_KEY}
APP_URL: ${APP_URL:?set APP_URL}
ADMIN_UPSTREAM: http://hostcontrol:8081
DOCKER_HOST: unix:///var/run/docker.sock
JWT_SECRET: ${JWT_SECRET:-}
ACME_EMAIL: ${ACME_EMAIL:-}
INSTALL_TOKEN: ${INSTALL_TOKEN:-}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- hostplatform_traefik_dynamic:/app/config/traefik-dynamic
networks:
- default
- beway_host_edge
depends_on:
- mysql
- minio
networks:
beway_host_edge:
name: beway_host_edge
volumes:
mysql_data:
minio_data:
hostplatform_traefik_dynamic:
name: hostplatform_traefik_dynamic
hostplatform_traefik_acme:
name: hostplatform_traefik_acme
-
1
Save the file above as docker-compose.yml
-
2
Fill in the environment variables marked as required (passwords, CREDENTIALS_ENCRYPTION_KEY, APP_URL)
-
3
Bring up the containers
-
4
Open the panel — since no admin exists yet, you'll be redirected to /install to create the initial admin there
docker compose up -d