Giter VIP home page Giter VIP logo

morningo's Introduction

MorningGo : Gin WebApp Project Skeleton

Go Report Card Build Status sonarcloud

doggy

中文文档

A Web develop project skeleton base on Gin which just for reference.

More efficiency,
Faster and clear,
Easier to deploy

Suitable for simple project. kokitgo-microkite are better choice for the middle and large project.

Environment Requirements

Installation And Run

Via moroingo installer or use docker

Install

go get github.com/chenhg5/morningo-installer
cd $GOPATH/src
$GOPATH/bin/morningo-installer --project-name web

Load Dependency

cd web
make deps

Test

make test

Graceful Restart

make restart

Run It

make

visit by browser: http://localhost:4000/api/index

Deploy

First build the executable file

make build # for Linux
make cross # for mac/windows

Then put files of the build in your server and set the path of log and static file(html/css/js),and run the executable file.If 80 port is not allowed to use,consider the nginx proxy,or use the gin middleware gin-reverseproxy instead, which has some example in routers.go. When the project start running, it will generate the pidfile in the root path of the project. Excute the following command to update your project.

kill -INT $(cat pid) && ./morningo # graceful stop the process and restart

Project Structure


.
├── Makefile
├── README.md
├── cli                     
│   └── cli.go
├── config                      global config
│   ├── connections.go
│   ├── cookie.go
│   ├── jwt.go
│   └── env.go
├── connections                 store connection
│   ├── database
│   │   ├── mongodb
│   │   └── mysql
│   └── redis
│       └── redis.go
├── controllers                 controller
│   └── MainController.go
├── filters                     middleware
│   ├── auth                    auth middleware
│   │   ├── drivers             auth engine
│   │   └── auth.go   
│   └── filter.go               middleware initer                  
├── frontend                    frontend resource
│   ├── assets
│   │   ├── css
│   │   ├── images
│   │   └── js
│   ├── dist
│   └── templates
│       └── index.tpl
├── handle.go                   global error handler
├── main.go                     
├── models                      model
│   └── User.go
├── module                      module of project
│   │── schedule
│   │   └── schedule.go   
│   │── logger
│   │   └── logger.go 
│   └── server
│       └── server.go 
├── routers                     routers
│   └── api_routers.go       
├── routers.go                  router initer
├── routers_test.go             unit test for api
├── storage                     
│   ├── cache                   cache file
│   └── logs                    log file
│       ├── access.log 
│       ├── info.log          
│       └── error.log
└── vendor                      govendor vendor


What`s in the box

HTTP (based on Gin)

  • Router
  • Middleware
  • Controller
  • Request
  • Response
  • View
  • Session

Frontend

  • Go template

Security

  • Authentication
  • Authorization
  • Encryption
  • Hash

Digging Deeper

  • Dancer Command
  • Cache System
  • Error and Log
  • Schedule

Database

  • Mysql
  • Mongodb
  • Redis

ORM(based on gorm)

test

  • Api test

Example

https://github.com/chenhg5/morningo/blob/master/controllers/MainController.go

Project Dependency

  • web framework:github.com/gin-gonic/gin
  • orm:github.com/jinzhu/gorm
  • redis:github.com/go-redis/redis
  • mysql:github.com/go-sql-driver/mysql
  • wechat:github.com/silenceper/wechat
  • schedule:github.com/robfig/cron

Benchmark

wrk -c100 -d30s -t4 http://localhost:4000/api/index

Running 30s test @ http://localhost:4000/api/index
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.03ms    4.17ms  72.72ms   89.95%
    Req/Sec     7.40k     1.67k   11.20k    67.75%
  884816 requests in 30.03s, 107.17MB read
  Non-2xx or 3xx responses: 884816
Requests/sec:  29462.96
Transfer/sec:  3.57MB

TODO

  • Logger
  • Test
  • Cache/Session
  • Queue of task
  • Read & Write Connections
  • Redis cluster
  • Profiling(Laravel/Swoole;beego)
  • Command tool
  • Interaction command env
  • Fast CRUD Generator

ChangeLog

  • Add Reverse Proxy
  • Fixed the path
  • Add session/cache and Auth middleware
  • Add test
  • Add graceful restart
  • Add schedule module
  • Add installer of project
  • Add access.log and error.log
  • Add database transcation

morningo's People

Contributors

chenhg5 avatar muxueqz avatar

Watchers

 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.