{"id":13555796,"url":"https://github.com/tableflip/guvnor","last_synced_at":"2025-04-05T09:09:56.710Z","repository":{"id":14714287,"uuid":"17434744","full_name":"tableflip/guvnor","owner":"tableflip","description":"A node process manager that isn't spanners all the way down","archived":false,"fork":false,"pushed_at":"2017-10-24T10:28:16.000Z","size":9026,"stargazers_count":427,"open_issues_count":29,"forks_count":37,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-12-21T12:36:41.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tableflip.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-05T09:25:45.000Z","updated_at":"2024-12-14T12:39:30.000Z","dependencies_parsed_at":"2022-09-04T22:32:49.858Z","dependency_job_id":null,"html_url":"https://github.com/tableflip/guvnor","commit_stats":null,"previous_names":["tableflip/boss"],"tags_count":81,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tableflip%2Fguvnor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tableflip%2Fguvnor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tableflip%2Fguvnor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tableflip%2Fguvnor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tableflip","download_url":"https://codeload.github.com/tableflip/guvnor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247312083,"owners_count":20918344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T12:03:25.225Z","updated_at":"2025-04-05T09:09:56.644Z","avatar_url":"https://github.com/tableflip.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","others"],"sub_categories":[],"readme":"\u003cimg src=\"./img/guvnor.png\" alt=\"Control your processes like a boss\" width=\"20%\"/\u003e\n\n# The Guv'nor\n\n[![Discuss](http://img.shields.io/badge/discuss-gitter-brightgreen.svg?style=flat)](https://gitter.im/tableflip/guvnor/discuss) [![Tasks](http://img.shields.io/badge/tasks-waffle-brightgreen.svg?style=flat)](https://waffle.io/tableflip/guvnor) [![Build Status](https://travis-ci.org/tableflip/guvnor.svg?branch=master)](https://travis-ci.org/tableflip/guvnor) [![Dependency Status](https://david-dm.org/tableflip/guvnor.svg)](https://david-dm.org/tableflip/guvnor) [![Coverage Status](https://img.shields.io/coveralls/tableflip/guvnor/master.svg?style=flat)](https://coveralls.io/r/tableflip/guvnor)\n\n\u003e Noun 1. guvnor - (British slang) boss\n\nA node process manager that isn't spanners all the way down.\n\n## Features\n\n* Monitoring via console or web\n* Configure user/group to run processes as\n* Auto process restart on crash\n* Log redirection to per process out/err files\n* Cluster support\n* Monitor process CPU/memory/event loop latency\n* Remotely trigger GC/heap dump\n* Debug remote processes\n* Store exception stack traces and logs for post-crash analysis\n\n## Command line interface\n\n![cli](img/cli.png)\n\nUse `guv` (or `guvnor` if you're not into the whole brevity thing).\n\n## Web interface\n\nStart the web interface with (can be run without guvnor running in the background - for example\nif you want to monitor one or more guvnor servers from a different machine that is not running guvnor):\n\n```sh\n$ guv-web\n```\n\nor run the web interface under guvnor itself (please read the [guvnor web setup](./docs/web.md#prerequisites) section first!):\n\n```sh\n$ guv web\n```\n\n![guvnor-web](img/host.png)\n\n## Install\n\n```sh\nnpm install -g guvnor --unsafe-perm\n```\n\nWhy `--unsafe-perm`? Guvnor uses a fair few native modules that require access to `/root/.npm` and `/root/.node-gyp` when building. At the moment this is the only way to allow access.\n\n## Upgrading\n\nnpm's upgrade command is [a big angry box of wasps](https://github.com/npm/npm/issues/6247#issuecomment-63022163) so to be sure, kill guvnor, remove it, reinstall and start it.\n\n```sh\nguv kill\nnpm remove -g guvnor\nnpm install -g guvnor\nguv\n```\n\nFor instructions on how to move between breaking versions, see [upgrading](UPGRADING.md)\n\n## Usage\n\nComprehensive help is available on the command line:\n\n```sh\nguv --help\n```\n\nand with more detail for each subcommand, e.g.:\n\n```\nguv start --help\n```\n\nThe first time you invoke a guvnor command, the daemon will start in the background.  Because guvnor can run processes as different users, it needs to be able to switch to those users.  Consequently you should start guvnor as root or another privileged user.\n\n## Help\n\n1. [Starting and stopping processes](docs/processes.md)\n1. [Controlling the Daemon](docs/daemon.md)\n1. [Managing clusters](docs/clusters.md)\n1. [Installing and running apps](docs/apps.md)\n1. [Remote access and monitoring (e.g. guvnor-web)](docs/remote.md)\n1. [Web interface](docs/web.md)\n1. [Web interface - configuration](docs/web-config.md)\n1. [Web interface - user management](docs/web-uesrs.md)\n1. [Programmatic access](docs/programmatic-access.md)\n1. [Programmatic access - local](docs/programmatic-access-local.md)\n1. [Programmatic access - remote](docs/programmatic-access-remote.md)\n1. [Programmatic access - events](docs/programmatic-access-events.md)\n\nConfigure\n---\n\nA configuration file if run as root can be placed at `/etc/guvnor/guvnor`. Take a look at the [default configuration file](guvnor) for details.\n\nIf you create a configuration file, it will be merged with the default configuration, so if you only want to override one property, you need only specify one property in your config file.\n\n## Starting guvnor on boot\n\nGuvnor comes with a sysv init script.  To configure it to run on system boot run the following:\n\n```sh\n$ sudo ln -s /usr/local/lib/node_modules/guvnor/scripts/init/sysv/guvnor /etc/init.d/guvnor\n$ sudo update-rc.d guvnor defaults\n```\n\nTo undo this, run:\n\n```sh\n$ sudo update-rc.d guvnor remove\n$ sudo rm /etc/init.d/guvnor\n```\n\n## apt-get\n\nIf you installed node via `apt-get install nodejs`, you should create a symlink to the `nodejs` binary:\n\n```sh\n$ sudo ln -s /usr/bin/nodejs /usr/bin/node\n```\n\nAlso, the init script is probably stored at `/usr/lib/node_modules/...` instead of `/usr/local/lib/node_modules/...` - please check your filesystem to be sure.\n\n## Docker\n\nSee the sample [Dockerfile](docker/Dockerfile) for how to run guvnor with Docker.\n\nIn the Dockerfile there are two variables - `GUVNOR_ROOT_SECRET` and `GUVNOR_USER_SECRET` - you should change these to a long random string unique to your install before building the container.\n\nOnce you'd done that, build the container and run it with the commands below.  The `-p` option forwards a port used by guv-web to connect to the instance of guvnor in the container, so forward the port as appropriate to your setup.\n\n```\n$ sudo docker build -t guvnor .\n$ sudo docker run -p 57484:57483 -d guvnor\n```\n\nTo connect guv-web to your docker container, add something like the below to your `guvnor-web-hosts` file:\n\n```\n[docker]\n  host = localhost\n  port = 57484\n  user = root\n  secret = GUVNOR_ROOT_SECRET\n```\n\n...and to your `guvnor-web-users` file:\n\n```\n[alex.docker]\n  user = guvnor\n  secret = GUVNOR_USER_SECRET\n```\n\nReplace `GUVNOR_ROOT_SECRET` and `GUVNOR_USER_SECRET` with whatever you defined in the Dockerfile.\n\n## Development\n\n### Vagrant setup\n\nIt's useful to be able to set up and tear down fresh VMs to do testing, so a Vagrant file is available. It's configured to run Debian Jessie and install the latest versions of Node and Guvnor.\n\nOnce Vagrant is installed, cd into the vagrant directory and run:\n\n```sh\n$ vagrant up\n$ vagrant ssh\n$ sudo npm install -g guvnor\n```\n\nThen when you are done, to shut the machine down exit your SSH session and run:\n\n```sh\n$ vagrant destroy\n```\n\n#### Docker\n\nInstall docker on vagrant with\n\n```\nwget -qO- https://get.docker.com/ | sh\n```\n\nThen cd to `/docker` and build \u0026 run guvnor\n\n```\nsudo docker build -t guvnor .\nsudo docker run -p 60000-60020:60000-60020 -d guvnor\n```\n\n## Changelog\n\nSee the [changelog](CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftableflip%2Fguvnor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftableflip%2Fguvnor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftableflip%2Fguvnor/lists"}