[Bug]: Running herd init cannot install minio
Platform
macOS
Operating system version
macOS 15.5 24F74
System architecture
ARM64 (M1, M2, etc)
Herd Version
1.21.2 (Build 51)
PHP Version
PHP 8.3.24 (cli) (built: Aug 1 2025 00:17:19) (NTS)
Bug description
I have created a herd.yml file with herd init:fresh. If I remove all the services and sites from the app and run herd init I get the following:
$ herd init
INFO Setting up your project…
INFO PHP 8.3 is installed.
INFO Site is secured.
INFO Redis is running on port 6379
INFO Installing service Minio
ERROR Unable to install minio.
If I run it while the Herd app is not running, I get:
herd init
INFO Setting up your project…
Warning: Undefined array key 1 in phar:///Users/ezra/Library/Application Support/Herd/bin/herd.phar/cli/Valet/Herd.php on line 185
Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in phar:///Users/ezra/Library/Application Support/Herd/bin/herd.phar/cli/Valet/Herd.php on line 187
ERROR Invalid herd.yml file…
ERROR Invalid service found. The allowed services are: .
But the Herd app starts.
Adding any permutation of -v/-vvv/--verbose does not increase the output.
The herd.yml file:
name: app
php: '8.3'
secured: true
aliases: { }
services:
redis:
version: 7.0.0
port: '${REDIS_PORT}'
minio:
version: RELEASE.2024-06-29
port: '${AWS_ENDPOINT}'
mysql:
version: 8.0.36
port: '${DB_PORT}'
reverb:
version: 1.x
port: '${REVERB_PORT}'
integrations:
forge: { }
I am able to setup the site exclusively via the Herd GUI app without issue (Minio installs and runs fine), but I want to share the config with my team, so this would ideally work. 🤞
if I remove minio from the yml file, MySQL installs, then it fails to install Reverb with the same output.
if I remove reverb, it works.
Steps to reproduce
Following a fresh install of Herd Pro, run herd init in a laravel app root with the above herd.yml file.
It looks like the herd init:fresh file is creating the minio service with the wrong env variable for the port property in the herd.yml file. I assume it should be something like '${MINIO_PORT}', not '${AWS_ENDPOINT} as the endpoint is a web address. 🐛
Hmm it also looks like the port the Reverb service suggests for the .env file within the GUI does not match the port it actually listens on when running over https. So if I copy the ENV from the Herd GUI into my .env, herd init will fail as port 443 is privileged. 🐛
The host variable in the GUI is also not the one that is actually linked when the service is created.
- ❌ reverb-1x.herd.test
- ✅ reverb-dashboard.herd.test
The GUI also shows the env REVERB_SCHEME=https even though when it is created it is not using HTTPS by default. 🐛
So to clarify, herd init:fresh is creating an invalid config.
Fresh config: ❌
name: app
php: '8.3'
secured: true
aliases: { }
services:
redis:
version: 7.0.0
port: '${REDIS_PORT}'
minio:
version: RELEASE.2024-06-29
port: '${AWS_ENDPOINT}' # this is a string, not a valid port number
mysql:
version: 8.0.36
port: '${DB_PORT}'
reverb:
version: 1.x
port: '${REVERB_PORT}' # port is correct if copied form Herd docs, not from the Herd GUI
integrations:
forge: { }
Updated config: ✅
name: app
php: '8.3'
secured: true
aliases: { }
services:
redis:
version: 7.0.0
port: '${REDIS_PORT}'
minio:
version: RELEASE.2024-06-29
port: '${MINIO_PORT}'
mysql:
version: 8.0.36
port: '${DB_PORT}'
reverb:
version: 1.x
port: '${REVERB_PORT}'
integrations:
forge: { }
with .env variables
REVERB_PORT=8080
MINIO_PORT=9000