A simple yet powerful PHP tool to catch Git webhooks from GitLab, GitHub & Bitbucket and deploy your projects to your server after pushing.


  • Catch webhooks from GitLab, GitHub & Bitbucket
  • Configure multiple repositories
  • Configure multiple branches per repository
  • Use your own deploy scripts, either PHP, shell or both
  • Sends confirmation emails

How does it work? catches and then acts on post requests sent by your git service-provider using webhooks. Currently, and are supported.
You configure your repository to send push-updates to your instance running on your server via Webhooks. Check the repository setting for the appropriate options. will check if the request comes from the right source, detects if the branch that has been updated is correct and then executes your custom PHP or shell commands. only calls your commands, it does not act on it's own since this would be way too inflexible.


Download to your server or clone using Git. Consider creating a subdomain:

Requirements: PHP, and your web host needs to allow php exec commands and mod_rewrite has to be enabled.


Open config/config.example.json and rename it to config.json. Set a secret token and maybe configure allowed IPs.
You can configure the repositoryPath to a location outside the path to use your own git repo for the deploy-configuration: "repositoriesPath": "./../my-own-deployment-repositories/"
Then, add this to the webhook settings of your Git provider:

Configure Deployments

Right now, you need to configure your deploys manually. It's pretty simple: Open the repositories/ folder, create a new folder corresponding with your Git repository name and add 3 files:

The branch. part is needed to distinguish push events only for the desired branch.

Example Structure:

Example Project Configuration

Make sure to set the "enabled" flag to enable execution

	"enabled": true,
	"project": {
		"name": "Example Music Project",
		"repository_ssh_url": "",
		"branch": "deploy/test"
	"mails": {
		"": "Michael Jackson",
		"": "Tina Turner"

It is important, that the "repository_ssh_url" matches the repository that your service provider delivers using the JSON payload. You can test this by calling /admin/ (protected by .htaccess, only works localy) and updating the example request branch.request.json:

GitLab JSON:
	"repository": {
GitHub JSON:
	"repository": {
		"ssh_url": "",
Bitbucket JSON:

Create repository_ssh_url using the full repository name found in the json:

	"repository": {
		"full_name": "music/example",
	}, + {full_name} + .git converts to

Debugging & Issues

Check logs/deeplio.log if you have any problems or open up an issue.