For the past few weeks I’ve been experimenting with a solution called Laravel Harbor, which is an open source Laravel app that you can use with GitHub Actions to deploy new environments to a Laravel Forge.
This allows me to quickly spin up an environment containing a single new feature or bug fix for QA and UAT automatically when a pull request is created containing [preview] in the pull request title. By default it will use your Git branch name. For example, if your branch was fix-8943 and you configured Harbor to make each environment a subdomain of exmaple.com, it would be:
fix-8943.example.com
Doing this gets the isolated feature/fix to our QA team earlier, allows code review, QA and UAT to happen much faster than when we were merging branches into a qa or develop branch where the code would often get blocked by another change in that branch.
The author of the Laravel Harbor package, Mehran Rasulian, is a Laravel developer in Turkey. He’s been extremely responsive to bug reports and great to work with when I decided to contribute a few changes to the package.
Harbor is still in beta. But currently, it will:
- Create the Site
- Create the Database
- Set Environment Variables
- Enable LetsEncrypt SSL
- Run any post-deployment commands you need
- Add a Comment to the Pull Request announcing the new preview environment is live.
- Send a message to a specific Slack channel announcing the new preview environment is live.
What it won’t do yet: Because Horizon uses the Laravel Forge SDK, and that SDK does not have support for these features, you can’t:
- Enable Horizon
- Enable Inertia SSR
You’d have to manually enable these in the Forge dashboard.
I’ve also successfully used Harbor to run my Laravel Dusk tests against a preview environment, and store all the output (logs & screenshots) as assets in the GitHub PR.
Check it out!

@shooper Oh nice! Not using forge, but I've been doing something similar for years with a custom build/deploy server, doing it on all pushes to all branches instead of only on PR's, so great to be able to test everything easily through <branch>.dev.domain.tld 🙂
Remote Reply
Original Comment URL
Your Profile
Why do I need to enter my profile?
This site is part of the ⁂ open social web, a network of interconnected social platforms (like Mastodon, Pixelfed, Friendica, and others). Unlike centralized social media, your account lives on a platform of your choice, and you can interact with people across different platforms.
By entering your profile, we can send you to your account where you can complete this action.
It’s so nice to be able to flip something that’s WIP to a colleague who doesn’t have a local environment.