Skip to content

nimdeploy

Push to your git host, and your server deploys itself. One static binary, signed webhooks, a log per deploy, no root needed.

Get started How it works

curl -fsSL https://nimdeploy.nimbox360.com/install.sh | sh

nimdeploy receives push webhooks from GitHub, Gitea, Forgejo, GitLab or Bitbucket, checks the signature, the repository and the branch, and runs the deploy command you configured for that repository. It is the small piece between "git push" and "the new version is live" for servers that are not Kubernetes: a VPS, an EC2 instance, a HestiaCP box.

  • Safe by default


    HMAC signature checked on every request, one secret per repository, listens on localhost behind your proxy, runs as an unprivileged user. The payload is never turned into a command.

    Security model

  • No root needed


    Installs into your home with a systemd user service, or as a system unit run by a service account that a named operator controls with a tiny sudoers rule.

    Install options

  • A log per deploy


    Every run gets its own log file, latest.log points at the newest, nimdeploy history lists them, old ones are pruned automatically.

    Logs and history

  • Queue, not chaos


    One deploy at a time per app; pushes that arrive meanwhile are queued and only the latest one runs. Exact commit, 30 min timeout, process group killed on timeout.

    How it works

  • Waits for CI


    Optionally deploy only when your GitHub Actions workflows pass for the pushed commit, and mark each commit with ✅ / ❌.

    Wait for CI

  • Tells you when it breaks


    Failure and recovery messages to Slack, Discord, Telegram or any URL, with the last lines of the log.

    Notifications

Ready-made deploy scripts

nimdeploy runs any command. The release ships tested scripts for common stacks:

Script For
deploy-nuxt.sh Nuxt SSR under pm2: atomic releases, health check, automatic rollback
deploy-laravel-fpm.sh Laravel served by the system's PHP-FPM, shared permissions, optional queue/scheduler
deploy-laravel-frankenphp.sh Laravel on a local port with FrankenPHP under pm2
deploy-laravel.sh Laravel on the host or in Docker Compose (Sail)
deploy-pm2.sh Any Node app managed by pm2

At a glance

$ nimdeploy status
DEPLOY           STATUS               STARTED              DURATION  COMMIT   BY    LOG
agency-backend   success              2026-10-06 10:12:03  48s       a41f09c  ana   20261006-101203-7f3a21.log
agency-frontend  running (+1 queued)  2026-10-06 10:15:40  -         c93a11f  marc  20261006-101540-c93a11.log

nimdeploy is open source (MIT) and maintained by Nimbox360.