Webhook Troubleshooting
Webhook Returns 404
Section titled “Webhook Returns 404”Cause: The project ID in the webhook URL doesn’t match any project.
Fix:
- Go to your project details page in VPS Deployer
- Copy the webhook URL from there
- Update the Payload URL in GitHub webhook settings
Webhook Returns 401
Section titled “Webhook Returns 401”Cause: The HMAC signature doesn’t match. This means either:
- The webhook secret in GitHub doesn’t match VPS Deployer’s
- The request was tampered with
Fix:
- Copy the webhook secret from your project details page
- Go to GitHub → Settings → Webhooks
- Update the Secret field with the correct value
- Save and re-deliver the last webhook
Webhook Returns 200 But No Deployment
Section titled “Webhook Returns 200 But No Deployment”Cause: The push was to a branch that doesn’t match your configured branch.
Fix:
- Check the branch name in your project settings
- Make sure it matches the branch you’re pushing to
- Pushes to other branches are silently ignored (this is by design)
GitHub Shows “Delivery Failed”
Section titled “GitHub Shows “Delivery Failed””Cause: VPS Deployer is unreachable from GitHub’s servers.
Fix:
- Make sure your VPS is accessible from the internet on the configured port
- Check firewall rules:
sudo ufw status - If behind a reverse proxy, verify the proxy is forwarding
/webhook/*correctly - Check server logs:
journalctl --user -u vps-deployer -f
Multiple Deployments on Single Push
Section titled “Multiple Deployments on Single Push”Cause: GitHub may send multiple webhook deliveries for a single push event (retries).
Fix:
- This is handled by the deployment queue — duplicate webhooks queue up and run sequentially
- If you want to prevent this, ensure your VPS responds quickly (within 10 seconds) so GitHub doesn’t retry
Webhook Works Locally But Not from GitHub
Section titled “Webhook Works Locally But Not from GitHub”Cause: Your VPS is not publicly accessible.
Fix:
- Use a reverse proxy with a public domain
- Configure port forwarding on your router (if applicable)
- Use a tunnel like Cloudflare Tunnel or ngrok for testing