Self-hosted Docker deployment & domain management — simple alternative to Kubernetes/PaaS.
1.4K
All-in-one self-hosted platform to deploy and manage Docker containers on your own server — a lightweight alternative to Kubernetes/PaaS for teams who want simple, predictable domain and deployment management without the operational overhead.
One image ships the full stack: frontend (Vite), backend API (Go), and nginx — all on a single exposed port.
curl -fsSL https://beway.io/install.sh | bash
Open http://your_ip:8081.
There's no admin bootstrapped through environment variables. On first start, as soon as no admin account exists yet in the database, the app automatically enables /install — a one-time setup wizard where you create the first admin (email + password) and confirm the Docker host's reachable IP address (used by containers to reach back to the host). Once that admin is created, /install locks itself out (409 already installed) and you're redirected to /login.
To protect this setup step on a publicly reachable host, set INSTALL_TOKEN — /install will then require that same value before creating the admin.
| Service | Port | Description |
|---|---|---|
| nginx | FRONTEND_PORT (8081) | Serves the built frontend and proxies /api/ to the backend |
| API | BACKEND_PORT (8082) | Go backend, bound to 127.0.0.1 only — not exposed directly |
Required — database (the image does not bundle a database):
| Variable | Description |
|---|---|
MYSQL_DSN | Full DSN (recommended if the password has special characters) |
or MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE | Individual fields to build the DSN |
Required — object storage (avatars and deploy artifacts):
| Variable | Description |
|---|---|
MINIO_ENDPOINT | host:port of a MinIO or S3-compatible endpoint |
MINIO_ROOT_USER / MINIO_ACCESS_KEY | Access key |
MINIO_ROOT_PASSWORD / MINIO_SECRET_KEY | Secret key |
MINIO_USE_SSL | true/false, defaults to false |
Recommended for production:
| Variable | Description |
|---|---|
JWT_SECRET | Signing secret for session tokens |
CREDENTIALS_ENCRYPTION_KEY | Base64, 32 bytes (openssl rand -base64 32) |
SERVER_KEY_SALT | Per-installation salt |
Ports and networking:
| Variable | Default | Description |
|---|---|---|
FRONTEND_PORT | 8081 | nginx (UI) |
BACKEND_PORT | 8082 | Go API, loopback only |
APP_URL | (empty) | Public hostname when running behind Traefik |
Other common options: INSTALL_TOKEN (require a token on the first-run /install setup, see below), DOCKER_HOST (mount the Docker socket to enable deploys), CORS_ORIGIN, TRAEFIK_ACME_CERT_RESOLVER / ACME_EMAIL (for automatic Let's Encrypt on a remote Traefik).
GET http://localhost:8081/health
| Tag | Source |
|---|---|
latest / X.Y.Z | Latest tagged release from main |
X.Y.Z-develop | Latest build from develop |
https://beway.io/docs[email protected]Content type
Image
Digest
sha256:3897c76e3…
Size
66.2 MB
Last updated
about 1 month ago
docker pull bewayio/hostcontrol