I'm Sun

写个 Web Server(一)需求

最近又有种造轮子的冲动,于是打算写一个 Web Server,用来在服务器上管理自己的小项目们。

需求如下:

  • GitHub 自动化部署
    • 初始化及运行
    • 自动注册 Webhook
  • 进程管理
    • 守护进程
    • 数据监控
    • 多核
    • 热重启
  • 文件监听
  • Virtual Hosts
  • Automatic HTTPS
  • HTTP/2 & SPDY

具体地说,就是希望创建一份类似下面的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"root": "/var/www",
"port": 80,
"ssl": {
"port": 443,
"auto": true
},
"webhook": {
"host": "http://hk.imsun.net",
"token": "GitHubToken"
},
"apps": [
{
"name": "blog",
"domains": ["imsun.net", "www.imsun.net"],
"repository": "git@github.com:imsun/blog.git",
"port": 8000
},
{
"name": "gh-feed",
"domains": ["gh-feed.imsun.net"],
"repository": "git@github.com:imsun/gh-feed.git",
"branch": "release",
"port": 8001,
"max_memory_restart": "100M"
}
]
}

然后服务器就会

  1. 下载运行所有项目;
  2. 注册监听 GitHub Webhooks;
  3. Let’s Encrypt 注册 SSL 证书;
  4. 开启 HTTP/2 服务器,将流量按域名转发给各个项目;
  5. 监控项目运行情况,在报错或资源占用超标时重启。

目前已经基本实现现有需求,未来看情况还可能会支持 NVM 和 Travis CI。

项目地址:easy-pm