Coder Social home page Coder Social logo

webx-top / tower Goto Github PK

View Code? Open in Web Editor NEW
22.0 4.0 5.0 14.35 MB

基于反向代理的Golang即时编译工具,可在生产环境下无缝切换到新版本

Go 98.71% Batchfile 1.03% Shell 0.26%
golang live-reload file-watcher tower auto-compile

tower's Introduction

Tower

Tower 是一个为golang的web开发者提供的工具。它会动态监控文件更改并自动重新编译运行您的golang源码。 它采用了反向代理的方式,自动将用户的访问代理到新的程序,然后关闭并删除旧程序,这样就可以最大限度的做到零下线升级您的golang应用。

如果编译失败或出现异常,Tower会通过一个整洁的页面显示这些信息:

安装

go get github.com/webx-top/tower

使用方法

cd your/project
tower # 现在访问 localhost:8080

Tower 在默认情况下假设你golang应用的端口为 5001-5050。你可以按如下方式更改它:

tower -p 3000-4000

当需要编译单个go文件时,您可以通过-m来指定:

tower -m app.go -p 3000-4000

或把它们放入配置文件:

tower init
vim tower.yml
tower

常见问题

'Too many open files'

运行下面的命令提高进程可打开的文件数量:

ulimit -S -n 2048 # OSX

工作原理

浏览器访问: http://localhost:8080
      \/
tower (监听 8080 端口)
      \/ (反向代理)
你的golang应用 (监听 5001 至 5050 中的任意一个端口)

所有来自localhost:8080的提交Tower都会转发给你的应用。 转发使用的是 httputil.ReverseProxy。 在转发之前,如果您的应用没有运行或文件被更改,Tower将在其它进程中自动编译并运行你的应用; Tower 使用了 howeyc/fsnotify 来监控文件更改。

管理接口

通过管理接口您可以临时关闭自动编译功能。

  默认情况下,只有本地可以访问管理接口,您可以通过在配置文件中设置`admin_pwd`(指定访问密码,通过在网址中增加“?pwd=<你的密码>”来访问)或`admin_ip`(指定允许访问的IP地址,多个用半角逗号隔开)来灵活设置。

要临时关闭自动编译功能只需要访问:http://localhost:8080/tower-proxy/watch/pause

重新开启自动编译:http://localhost:8080/tower-proxy/watch/begin

查看是否开启自动编译:http://localhost:8080/tower-proxy/watch

Tower在生产环境中的应用

在生产环境中,我们一般都是放一个编译好的可执行文件上去,并执行此文件来启动web服务。

当需要更新此程序时,我们就需要停止服务,这样就会导致web服务中断,体验不佳。

而这时,使用Tower就可以避免这个问题,只要可执行文件名称符合这样的格式tower-app-<纯数字版本编号>.exetower-app-<纯数字版本编号>, 并且将该文件放到被监控的目录中,Tower就会自动发现它,并自动提取出<纯数字版本编号>来和已经运行的版本编号进行比较, 当前者大于后者时,Tower会自动启动大版本程序,并将所有访问转发给它, 然后关闭并删除小版本程序,在此过程中服务不会中断。

License

Tower is released under the MIT License.

tower's People

Contributors

admpub avatar dependabot[bot] avatar shaoshing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.