From 1d78c644a4278869873c41e1bade02c8e1e0d7e9 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Fri, 9 Jun 2017 20:11:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=9B=AE=E5=BD=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- server.go => echo.go | 4 +- echo/echo.go | 173 ----------------------------------- glide.lock.bak | 107 ---------------------- glide.yaml.bak | 37 -------- {db => res/db}/structure.sql | 0 router/router.go | 84 +++++++++++++++++ router/socket/router.go | 2 +- run.sh | 2 +- 9 files changed, 89 insertions(+), 322 deletions(-) rename server.go => echo.go (59%) delete mode 100644 echo/echo.go delete mode 100644 glide.lock.bak delete mode 100644 glide.yaml.bak rename {db => res/db}/structure.sql (100%) diff --git a/LICENSE b/LICENSE index 0771afc..7130519 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 Hobo86 +Copyright (c) 2016 Hobo Chen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/server.go b/echo.go similarity index 59% rename from server.go rename to echo.go index 258d1b8..f219dda 100644 --- a/server.go +++ b/echo.go @@ -1,10 +1,10 @@ package main import ( - "echo-web/echo" + "echo-web/router" ) func main() { // 子域名部署 - echo.RunSubdomains() + router.RunSubdomains() } diff --git a/echo/echo.go b/echo/echo.go deleted file mode 100644 index befb9c5..0000000 --- a/echo/echo.go +++ /dev/null @@ -1,173 +0,0 @@ -package echo - -import ( - "context" - "net/url" - "os" - "os/signal" - "time" - - "github.com/labstack/echo" - mw "github.com/labstack/echo/middleware" - "github.com/labstack/gommon/log" - - . "echo-web/conf" - "echo-web/middleware/opentracing" - "echo-web/router" -) - -// 子域名部署 -func RunSubdomains() { - // 配置初始化 - if err := InitConfig(""); err != nil { - log.Panic(err) - } - - // 全局日志级别 - log.SetLevel(GetLogLvl()) - - // Server - e := echo.New() - e.Pre(mw.RemoveTrailingSlash()) - - // OpenTracing - opentracing.InitGlobalTracer() - - // 日志级别 - e.Logger.SetLevel(GetLogLvl()) - - // Secure, XSS/CSS HSTS - e.Use(mw.SecureWithConfig(mw.DefaultSecureConfig)) - mw.MethodOverride() - - // CORS - e.Use(mw.CORSWithConfig(mw.CORSConfig{ - AllowOrigins: []string{"http://" + Conf.Server.DomainWeb, "http://" + Conf.Server.DomainApi}, - AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAcceptEncoding, echo.HeaderAuthorization}, - })) - - hosts := router.InitRoutes() - e.Any("/*", func(c echo.Context) (err error) { - req := c.Request() - res := c.Response() - - u, _err := url.Parse(c.Scheme() + "://" + req.Host) - if _err != nil { - e.Logger.Errorf("Request URL parse error:%v", _err) - } - - host := hosts[u.Hostname()] - if host == nil { - e.Logger.Info("Host not found") - err = echo.ErrNotFound - } else { - host.Echo.ServeHTTP(res, req) - } - - return - }) - - if !Conf.Server.Graceful { - e.Logger.Fatal(e.Start(Conf.Server.Addr)) - } else { - // Graceful Shutdown - // Start server - go func() { - if err := e.Start(Conf.Server.Addr); err != nil { - e.Logger.Errorf("Shutting down the server with error:%v", err) - } - }() - - // Wait for interrupt signal to gracefully shutdown the server with - // a timeout of 10 seconds. - quit := make(chan os.Signal) - signal.Notify(quit, os.Interrupt) - <-quit - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - if err := e.Shutdown(ctx); err != nil { - e.Logger.Fatal(err) - } - } -} - -/** -func Run() { - // Echo instance - e := echo.New() - - // Customization - e.Logger.SetPrefix("Echo") - e.Logger.SetLevel(log.DEBUG) - if conf.RELEASE_MODE { - // e.SetDebug(false) - } - - // Middleware - e.Use(mw.Logger()) - e.Use(mw.Recover()) - - // 静态资源 - switch conf.STATIC_TYPE { - case conf.BINDATA: - e.Use(staticbin.Static(assets.Asset, staticbin.Options{ - Dir: "/", - })) - default: - e.Static("/assets", "./assets") - } - - // Bind - e.Binder = binder.New() - - // 模板 - e.Renderer = render.LoadTemplates() - e.Use(render.Render()) - - // Session - e.Use(session.Session()) - - // Cache - e.Use(cache.Cache()) - - // Auth - e.Use(auth.Auth(model.GenerateAnonymousUser)) - - // Routers - e.GET("/", www.HomeHandler) - e.GET("/login", www.LoginHandler) - e.GET("/register", www.RegisterHandler) - e.GET("/logout", www.LogoutHandler) - e.POST("/login", www.LoginPostHandler) - e.POST("/register", www.RegisterPostHandler) - - demo := e.Group("/demo") - { - demo.GET("", www.DemoHandler) - } - - user := e.Group("/user") - user.Use(auth.LoginRequired()) - { - user.GET("/:id", www.UserHandler) - } - - about := e.Group("/about") - { - about.GET("", www.AboutHandler) - } - - gApi := e.Group("/api") - { - gApi.GET("/user/:id", api.UserHandler) - gApi.GET("/login", api.UserLoginHandler) - gApi.GET("/register", api.UserRegisterHandler) - - gApi.GET("/post/save", api.PostSaveHandler) - gApi.GET("/post/id/:id", api.PostHandler) - gApi.GET("/posts/:userId/p/:p/s/:s", api.PostsHandler) - } - - e.Start(":8080") -} -*/ diff --git a/glide.lock.bak b/glide.lock.bak deleted file mode 100644 index e5da788..0000000 --- a/glide.lock.bak +++ /dev/null @@ -1,107 +0,0 @@ -hash: 8f63bb2e80aac7f5af10168c41116617551e467e1bfb5c695aa29f248d7aaa41 -updated: 2017-06-02T22:14:07.737900829+08:00 -imports: -- name: github.com/boj/redistore - version: fc113767cd6b051980f260d6dbe84b2740c46ab0 -- name: github.com/bradfitz/gomemcache - version: 2fafb84a66c4911e11a8f50955b01e74fe3ab9c5 - subpackages: - - memcache -- name: github.com/BurntSushi/toml - version: b26d9c308763d68093482582cea63d69be07a0f0 -- name: github.com/dchest/captcha - version: 9e952142169c3cd6268c6482a3a61c121536aca2 -- name: github.com/facebookgo/grace - version: 5729e484473f52048578af1b80d0008c7024089b - subpackages: - - gracehttp -- name: github.com/flosch/pongo2 - version: 22499f94d3d56c7238591344a6902715d0b8fbbf -- name: github.com/garyburd/redigo - version: 908534c8b97586a4597e3fa195875d2d26502b97 - subpackages: - - redis - - internal -- name: github.com/go-sql-driver/mysql - version: 2e00b5cd70399450106cec6431c2e2ce3cae5034 -- name: github.com/gogo/protobuf - version: b79ae77db468f92c7ef48e12c9c5d70e6a20c3b8 - subpackages: - - io - - proto -- name: github.com/gorilla/context - version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42 -- name: github.com/gorilla/mux - version: 043ee6597c29786140136a5747b6a886364f5282 -- name: github.com/gorilla/securecookie - version: fa5329f913702981df43dcb2a380bac429c810b5 -- name: github.com/gorilla/sessions - version: 83c8db3bdc9be789e57e3756ffbcffd2d7d40176 -- name: github.com/hobo-go/echo-mw - version: a3c62f25136a12c6a6f4d596ba5029fb103d49ff - subpackages: - - binder - - cache - - multitemplate - - pongo2echo - - session - - staticbin - - captcha -- name: github.com/hobo-go/gorm - version: df05d3ea3401cd038f943cad0af832034be16cdb -- name: github.com/jinzhu/inflection - version: 1c35d901db3da928c72a72d8458480cc9ade058f -- name: github.com/labstack/gommon - version: f72d3c883f8ea180da8f085dd320804c41332ad1 - subpackages: - - log - - color - - bytes - - random -- name: github.com/mattn/go-colorable - version: d228849504861217f796da67fae4f6e347643f15 -- name: github.com/mattn/go-isatty - version: 30a891c33c7cde7b02a981314b4228ec99380cca -- name: github.com/opentracing/basictracer-go - version: 1b32af207119a14b1b231d451df3ed04a72efebf - subpackages: - - wire -- name: github.com/opentracing/opentracing-go - version: eaaf4e1eeb7a5373b38e70901270c83577dc6fb9 - subpackages: - - ext - - log -- name: github.com/robfig/go-cache - version: 9fc39e0dbf62c034ec4e45e6120fc69433a3ec51 -- name: github.com/valyala/bytebufferpool - version: e746df99fe4a3986f4d4f79e13c1e0117ce9c2f7 -- name: github.com/valyala/fasttemplate - version: d090d65668a286d9a180d43a19dfdc5dcad8fe88 -- name: golang.org/x/crypto - version: c367d6eeb7c6158125f2f47e049f7eb7e251c09a - subpackages: - - ocsp - - acme/autocert - - acme -- name: golang.org/x/net - version: c4c3ea71919de159c9e246d7be66deb7f0a39a58 - subpackages: - - websocket - - context - - context/ctxhttp -- name: golang.org/x/sys - version: 076b546753157f758b316e59bcb51e6807c04057 - subpackages: - - unix -- name: sourcegraph.com/sourcegraph/appdash - version: 5b9b70908c0e32b53e17215ee6e9515b02ad08b2 - subpackages: - - opentracing - - traceapp - - internal/wire - - httptrace - - sqltrace - - traceapp/tmpl -- name: sourcegraph.com/sourcegraph/appdash-data - version: 73f23eafcf67cad684fba328dd545a116ac273ff -devImports: [] diff --git a/glide.yaml.bak b/glide.yaml.bak deleted file mode 100644 index ccff1c6..0000000 --- a/glide.yaml.bak +++ /dev/null @@ -1,37 +0,0 @@ -package: echo-web -import: -- package: github.com/dgrijalva/jwt-go -- package: github.com/facebookgo/grace - subpackages: - - gracehttp -- package: github.com/go-sql-driver/mysql -- package: github.com/hobo-go/echo-mw - subpackages: - - binder - - cache - - multitemplate - - pongo2echo - - session - - staticbin -- package: github.com/labstack/echo - subpackages: - - middleware -- package: github.com/labstack/gommon - subpackages: - - log -- package: golang.org/x/net - subpackages: - - websocket -- package: golang.org/x/crypto - subpackages: - - ocsp -- package: github.com/dchest/captcha -- package: github.com/hobo-go/gorm -- package: github.com/BurntSushi/toml -- package: github.com/opentracing/opentracing-go - subpackages: - - ext -- package: sourcegraph.com/sourcegraph/appdash -- package: github.com/gogo/protobuf - subpackages: - - io diff --git a/db/structure.sql b/res/db/structure.sql similarity index 100% rename from db/structure.sql rename to res/db/structure.sql diff --git a/router/router.go b/router/router.go index 6816ce1..67d5ff7 100644 --- a/router/router.go +++ b/router/router.go @@ -1,9 +1,18 @@ package router import ( + "context" + "net/url" + "os" + "os/signal" + "time" + "github.com/labstack/echo" + mw "github.com/labstack/echo/middleware" + "github.com/labstack/gommon/log" . "echo-web/conf" + "echo-web/middleware/opentracing" "echo-web/router/api" "echo-web/router/socket" "echo-web/router/web" @@ -25,3 +34,78 @@ func InitRoutes() map[string]*Host { return hosts } + +// 子域名部署 +func RunSubdomains() { + // 配置初始化 + if err := InitConfig(""); err != nil { + log.Panic(err) + } + + // 全局日志级别 + log.SetLevel(GetLogLvl()) + + // Server + e := echo.New() + e.Pre(mw.RemoveTrailingSlash()) + + // OpenTracing + opentracing.InitGlobalTracer() + + // 日志级别 + e.Logger.SetLevel(GetLogLvl()) + + // Secure, XSS/CSS HSTS + e.Use(mw.SecureWithConfig(mw.DefaultSecureConfig)) + mw.MethodOverride() + + // CORS + e.Use(mw.CORSWithConfig(mw.CORSConfig{ + AllowOrigins: []string{"http://" + Conf.Server.DomainWeb, "http://" + Conf.Server.DomainApi}, + AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAcceptEncoding, echo.HeaderAuthorization}, + })) + + hosts := InitRoutes() + e.Any("/*", func(c echo.Context) (err error) { + req := c.Request() + res := c.Response() + + u, _err := url.Parse(c.Scheme() + "://" + req.Host) + if _err != nil { + e.Logger.Errorf("Request URL parse error:%v", _err) + } + + host := hosts[u.Hostname()] + if host == nil { + e.Logger.Info("Host not found") + err = echo.ErrNotFound + } else { + host.Echo.ServeHTTP(res, req) + } + + return + }) + + if !Conf.Server.Graceful { + e.Logger.Fatal(e.Start(Conf.Server.Addr)) + } else { + // Graceful Shutdown + // Start server + go func() { + if err := e.Start(Conf.Server.Addr); err != nil { + e.Logger.Errorf("Shutting down the server with error:%v", err) + } + }() + + // Wait for interrupt signal to gracefully shutdown the server with + // a timeout of 10 seconds. + quit := make(chan os.Signal) + signal.Notify(quit, os.Interrupt) + <-quit + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := e.Shutdown(ctx); err != nil { + e.Logger.Fatal(err) + } + } +} diff --git a/router/socket/router.go b/router/socket/router.go index d5017d1..83f1e2d 100644 --- a/router/socket/router.go +++ b/router/socket/router.go @@ -31,7 +31,7 @@ func Routers() *echo.Echo { e.Use(auth.New(model.GenerateAnonymousUser)) e.GET("/", indexHandler) - e.GET("/ws", socketHandler()) + e.GET("/ws", socketHandler) return e } diff --git a/run.sh b/run.sh index d98fa55..5677b59 100755 --- a/run.sh +++ b/run.sh @@ -39,4 +39,4 @@ echo -e "$LogPrefix `date +"%H:%M:%S"` rmove pkg" rm -rf pkg/* echo -e "$LogPrefix `date +"%H:%M:%S"` [\033[42;37m run \033[0m] server" -go run server.go \ No newline at end of file +go run echo.go \ No newline at end of file