¿La mejor forma de (git) insert cambios en un server de desarrollo y hacer que reinicie automáticamente una aplicación Nodo?

Previamente y en mi máquina local, he estado usando nodemon que está nodemon de los cambios realizados en una aplicación Node y la vuelve a cargar en cada cambio. Pero ya no es posible ejecutar el server de desarrollo en mi propia máquina, así que configuré git para la aplicación en un server de desarrollo designado.

De antemano, prefiero Sublime Text, por lo que editar files en el server de desarrollo a través del terminal no coincide con mi flujo de trabajo, además de que me gusta tener una copy de todo en mi máquina local de manera pnetworkingeterminada. También había revisado rsync , pero me gusta el control de versión de grano fino que ofrece Git.

Entonces, ¿cómo puedo editar los files de forma local, git push en un server de desarrollo y hacer que la aplicación Node se vuelva a cargar automáticamente después de cada inserción?

Puede escribir un gancho lateral del server. En su directory .git hay un directory hook. Solo ingrese en .git / hooks. Allí puede escribir un guión en el idioma que necesite para escribirlo. Básicamente, después de presionarlo, ejecutará el guión que le indique. Aquí hay más información sobre ganchos git

https://git-scm.com/book/es/v2/Customizing-Git-Git-Hooks

Tutorial rápido para hacer que esto funcione:

  1. En el server de desarrollo, vaya a /home/dev-user/Node e inicialice el repository vacío en /home/dev-user/Node/example.git usando git init --bare example.git .

  2. Clona el repository en /home/dev-user/Node/example usando git clone example.git .

  3. Agregue files a /home/dev-user/Node/example según sea necesario, luego git add . y git commit -m "init" y finalmente git push origin master que enviará esos files a example.git .

  4. Edite o cree /home/dev-user/Node/example.git/hooks/post-receive y agregue la siguiente línea: GIT_WORK_TREE=/home/dev-user/Node/example/ git checkout -f

    Esto actualizará automáticamente los files en /home/dev-user/Node/example/ sobre cualquier cambio realizado en /home/dev-user/Node/example.git .

  5. Si aún no tiene instalado nodemon , instálelo con npm install -g nodemon . Puede que tenga que usar sudo .

  6. Asumiendo que su aplicación principal de Node se encuentra en /home/dev-user/Node/example/app.js , inicie la aplicación usando nodemon /home/dev-user/Node/example/app.js (o si ya está dentro de /home/dev-user/Node/example , solo nodemon app.js por supuesto).

  7. En su equipo local, vaya a /home/timbur/Node , y suponiendo que puede conectarse al server automáticamente a través de SSH, clone el repository desnudo usando git clone dev-user@dev.server.ip.address:Node/example.git . Ahora tendrá todo en /home/timbur/Node/example .

  8. Edite los files en su máquina local y agregue / confirme / envíe files al server de desarrollo, como de costumbre, y los cambios actualizarán automáticamente el directory de example del server, que nodemon detectará y la aplicación se reiniciará.

La mejor manera sería configurar un server de continuous integration, como Jenkins: https://jenkins-ci.org/

Y luego hay complementos para básicamente lo que quieras hacer, como este para node.js por ejemplo: https://wiki.jenkins-ci.org/display/JENKINS/NodeJS+Plugin

Pero esa no es probablemente la forma más fácil. También puede configurar un enlace posterior a la recepción en su server, que verifica el código cada vez que inserta algún cambio, y luego deja que reinicie su server. Aquí hay una esencia que encontré (pero nunca intenté) https://gist.github.com/tlrobinson/8035884