为了在自己的VPS上发布node应用,给自己写了一个。用了一段时间貌似还挺稳定。
- 提供一个VPS上的命令行界面,用来创建/删除/启动/停止/查看服务器上的node应用
- 每一个应用都有一个git repo. 在开发机器上git push = 发布并重启应用进程。可以自定义push以后重启之前额外干些什么。
- 基于pm2。pm2有的功能都具备,比如进程挂了自动重启,日志,cluster,监视进程资源等。只需要把node_modules里面pm2的可执行文件link到/usr/local/bin里。
更多见github文档:https://github.com/yyx990803/pod
没什么人看,稍微补充两句吧。
这个玩意儿主要是嫌forever/pm2这样的进程管理工具还是太麻烦所以才写的。我理想的node发布就是每次commit以后git push就自动搞定了。这个工具可以帮我做到这一点。下面简单说说部署流程:
-
一个全新的VPS,上去以后装上nginx,git和node,(这个过程请自己google)然后
sudo npm install -g pod
-
配置一下ssh。把你的public key放到VPS上也好,把密码放在
~/.ssh/config
里也好,总之最好能做到无密码登陆。我们假设配置好以后vps的host名字叫做myvps
。 -
在服务器上第一次运行
pod
,会提示你选一个路径放文件。确保选择一个你的账号有所有权限不需要sudo的地方。 -
然后创建一个新应用:
pod create hello
。这时候会创建一个空的git仓库,以及一个从这个仓库clone出来的work copy。复制一下这个git仓库的路径,比如/srv/repos/hello.git
-
运行
pod list
,会显示当前所有应用的运行状态和监听的端口。如何用nginx reverse proxy我就不说了,自行google。 -
在你本地的项目里,
git remote add deploy ssh://myvps/srv/repos/hello.git
。默认的主文件是app.js
,你可以在package.json
里面通过main
这一项来指定用的主文件。至此,设置完成。 -
从今以后,每次写了点东西要发布的时候,只需commit然后
git push deploy master
。远端的git hook会自动让work copy pull,npm install(以防依赖有变化),然后用pm2重启应用进程。如果你想要重启前先跑个测试什么的,也可以自定义hook的内容。
更多选项请看顶楼github连接(英文)。