Hostflow ships as a single Docker image with Laravel and Nginx packaged inside — no separate web server setup required.
Image: imperiumsoftware/hostflow:latest
You can run Hostflow with a simple docker pull + docker run, or use Docker Compose if you want to manage it alongside a database container. Both options are covered below.
Pull the image:
docker pull imperiumsoftware/hostflow:latest
Run the container:
docker run -d \
--name hostflow \
-p 80:80 \
-v hostflow_storage:/storage \
-e APP_KEY= \
-e APP_URL=https://your-domain.com \
-e DB_CONNECTION=sqlite \
imperiumsoftware/hostflow:latest
Generate an
APP_KEYbefore your first run — instructions are in the Environment Variables section below.
If you'd rather manage Hostflow alongside an external database, here's a starting docker-compose.yml:
services:
hostflow:
image: imperiumsoftware/hostflow:latest
container_name: hostflow
restart: unless-stopped
ports:
- "80:80"
volumes:
- hostflow_storage:/storage
environment:
APP_KEY: ""
APP_URL: "https://your-domain.com"
DB_CONNECTION: "mysql"
DB_HOST: "db"
DB_PORT: "3306"
DB_DATABASE: "hostflow"
DB_USERNAME: "hostflow"
DB_PASSWORD: "change-me"
depends_on:
- db
db:
image: mysql:8
container_name: hostflow-db
restart: unless-stopped
environment:
MYSQL_DATABASE: "hostflow"
MYSQL_USER: "hostflow"
MYSQL_PASSWORD: "change-me"
MYSQL_ROOT_PASSWORD: "change-me-too"
volumes:
- hostflow_db:/var/lib/mysql
volumes:
hostflow_storage:
hostflow_db:
Then bring it up:
docker compose up -d
Mount a volume at /storage — this is where Hostflow keeps uploaded files and (if using SQLite) your database file. Without this volume, your data will be lost if the container is recreated.
| Variable | Required | Notes |
|---|---|---|
APP_KEY |
Yes | Encryption key — generate one before first run |
APP_URL |
Yes | Full URL Hostflow will be accessed at |
DB_CONNECTION |
Yes | sqlite (default, no extra setup) or mysql |
DB_HOST / DB_PORT / DB_DATABASE / DB_USERNAME / DB_PASSWORD |
If using MySQL | Connection details for your external database |
STRIPE_KEY / STRIPE_SECRET / STRIPE_WEBHOOK_SECRET |
No | Not needed for initial setup — can be added later once you're ready to connect billing |
Once your container is running, open your Hostflow URL in a browser to continue with the First-Time Setup Wizard.