echo-go

command module
v0.0.0-...-b1f09d4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 22, 2018 License: MIT Imports: 4 Imported by: 0

README

ECHO GO SHOP Go (Echo Web)

Go web framework Echo example. RBAC权限,JWT、Socket,session,cookie,缓存,登录,注册,上传,db数据库操作,生成models,service演示

本案例是 对 echo-web 的增强版,是站在巨人的肩膀上

echo 主页 echo

echo 英文文档 echo doc

Echo中文文档 go-echo.org

Requires

  • go1.8+
  • Echo V3

在线演示 暂未配置,待上线中

注意:如果要案例运行全部正确,请设置域名或本地域名映射

目录

环境配置

1.源码下载
$ go get github.com/foxiswho/echo-go
2.依赖安装

glide工具安装

.glide/mirrors.yaml设置参考

# 编辑mirrors.yaml,或命令行glide mirror set [original] [replacement] --vcs [type]
$ vi ~/.glide/mirrors.yaml

# 查看glide mirror
$ glide mirror list

$ cd $GOPATH/src/github.com/hb-go
$ glide install
3.MySQL配置
# ./conf/conf.toml
[database]
name = "shop_go"
user_name = "root"
pwd  = "root"
host = "127.0.0.1"
port = "3306"

# 测试数据库SQL脚本
./res/shop_go.sql
4.Redis、Memcached配置,可选

可选需修改session、cache的store配置

  • session_store = "FILE"或"COOKIE"
  • cache_store = "IN_MEMORY"
# ./conf/conf.toml
[redis]
server = "127.0.0.1:6379"
pwd = ""

[memcached]
server = "localhost:11211"
5.子域名
# ./conf/conf.toml
[server]
addr = ":8080"
domain_api = "echo.api.localhost.com"
domain_web = "echo.www.localhost.com"
domain_socket = "echo.socket.localhost.com"

# 改host
$ vi /etc/hosts
127.0.0.1       echo.api.localhost.com
127.0.0.1       echo.www.localhost.com
127.0.0.1       echo.www.localhost.com

# Nginx配置,可选
server{
    listen       80;
    server_name  echo.www.localhost.com echo.api.localhost.com echo.socket.localhost.com;

    charset utf-8;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
6.Bindata打包工具,可选(运行可选,打包必选)

Bindata安装

用户名和密码

可以到数据库表中查看,useradmin

运行

# 首次运行必须带 -a -t,更新assets.go、template.go的资源路径为本地
$ ./run.sh [-a] [-t]        # -a -t 可选(须安装Bindata),以debug方式更新assets、template的Bindata资源包

# 浏览器访问
http://echo.www.localhost.com      # Nginx代理
http://echo.www.localhost.com:8080 # 无代理

# OpenTracing
http://localhost:8700/traces

打包

打包静态资源及模板文件须安装Bindata

# 打包
$ ./build.sh 		    # 默认本机
$ ./build.sh -l		    # 打包Linux平台

# 运行
$ ./echo-web -c conf/conf.toml      # -c指定配置文件,默认conf/conf.toml

目录结构

assets          Web服务静态资源
conf            项目配置
middleware      中间件
models           模型
module          模块封装
  ├ auth        Auth授权
  ├ auth_admin        废弃
  ├ cache       缓存
  ├ db          数据库orm 操作
  ├ file        文件上传
  ├ log         日志
  ├ model       模型相关
  ├ render      渲染
  ├ session     Session
  └ tmpl        Web模板
res             项目资源
  └ db          数据
router          路由
  ├ base        Context 基类
  ├ example        案例
      └ admin         后台管理中心
        └rbac          rbac权限管理
            ├create    创建权限,保存到数据库
            └index     权限显示,在路由中间件内验证
        └default          默认页,方便跳转到登录页面
        └index          管理中心首页
        └login          登录和登录post
        └logout         退出
      └ api         接口路由
        ├jsonp      jsonp 案例
        ├jwt_api      jwt 获取数据
        ├jwt_login      jwt 登录
        ├jwt_tester      jwt 获取数据
        └user     
      ├ socket      socket示范
      └ test            测试
        ├cache          缓存案例
        ├cookie          cookie案例
        ├jsonp          jsonp案例
        ├jwt            jwt案例
        ├jwt_login      jwt_login案例
        ├login          login案例
        ├logout          logout案例
        ├orm             orm案例
        ├register        注册案例
        ├session        session案例
        ├upload        上传案例
        ├user          user案例
        └ws             websocket案例    
  └ web            Web路由
    ├design            设计,自动生成
        └service_make     自动生成 service       
    └router     路由
service         服务
template        模板
  ├casbin       权限配置
  ├design       设计配置
    ├goxorm         数据库生成 models 模板            
    └make           设计生成控制器,service模板
  └ pongo2      pongo2模板
uploads         上传目录
util            公共工具
  ├ conv        类型转换
  ├ crypt       加/解密
  ├ datetime    时间相关操作
  ├ json        json相关操作
  └ sql         SQL
  └ str         字符串相关操作
  └ error       默认错误信息

框架功能

功能 描述
配置 toml配置文件
子域名部署 子域名区分模块
缓存 Redis、Memcached、Memory
Session Redis、File、Cookie,支持Flash
ORM Fork xorm xormplus
权限 Fork casbin
模板 支持html/template、pongo2,模板支持打包bindata
静态 静态资源,支持打包bindata
安全 CORS、CSRF、XSS、HSTS、验证码等
OpenTracing Tracer支持Jaeger、Appdash,在Request、ORM层做跟踪,可在conf配置开启)
其他 RBAC权限,JWT、Socket,session,cookie,缓存,登录,注册,上传,db数据库操作,生成models,service演示

生成models

#进入项目根目录
cd src/github.com/foxiswho/echo-go/
#使用命令
xorm reverse mysql root:root@/shop_go?charset=utf8 template/design/goxorm

生成service

使用访问网页生成,首先你必须把数据库配置完成。

/admin/design/service

生成控制器 略

你可以根据生成service 这个修改成你想要的

Supervisord部署

$ vi /etc/supervisor/conf.d/echo-web.conf
配置参考
[program:echo-web]
directory = /{path}/echo-web                                            ; 程序的启动目录
command =  /{path}/echo-web/echo-web -c /{path}/echo-web/conf/conf.toml ; 启动命令,与手动在命令行启动的命令是一样的
process_name=%(program_name)s                                           ; process_name expr (default %(program_name)s)
numprocs=1           ; number of processes copies to start (def 1)
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = root          ; 用哪个用户启动
redirect_stderr = true          ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 7      ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/echo-web/stdout.log
; 这一配置项的作用是:如果supervisord管理的进程px又产生了若干子进程,使用supervisorctl停止px进程,停止信号会传播给px产生的所有子进程,确保子进程也一起停止。这一配置项对希望停止所有进程的需求是非常有用的。
stopasgroup=false
killasgroup=false

Confd管理配置

# 安装confd
$ go get github.com/kelseyhightower/confd
# 将配置写入etcd,统一前缀echo-web
$ etcdctl ls --recursive --sort /echo-web
/echo-web/app
/echo-web/app/name
......
/echo-web/tmpl/suffix
/echo-web/tmpl/type

$ cd {pwd}/echo-web
$ confd -onetime -confdir conf  -backend etcd -node http://127.0.0.1:4001 -prefix echo-web

OpenTracing

可在conf.toml开启或禁用

[opentracing]
disable = false

# jaeger or appdash
type = "jaeger"

# jaeger serviceName
service_name = "echo-web"

# jaeger-agent 127.0.0.1:6831
# appdash http://localhost:8700
address = "127.0.0.1:6831"

Docker部署

Dockerfile含两种方式,源码方式镜像包偏大

# 创建镜像,注意修改配置
$ docker build -t hbchen/echo-web:v0.0.1 .

# 运行容器
$ docker run  \
     -p 8080:8080 \
     --name=echo-web \
     hbchen/echo-web:v0.0.1
*MySQL、Redis、Memcached等服务配置问题
# 如果是服务在宿主机需要配置服务IP为主机IP,127.0.0.1/localhost网络不通

# hbchen/echo-web使用的配置,在宿主机host上做个映射(192.168.1.8为主机IP)
# 192.168.1.8 mysql.localhost.com
# 192.168.1.8 redis.localhost.com
# 192.168.1.8 memcached.localhost.com
[database]
host = "mysql.localhost.com"

[redis]
server = "redis.localhost.com:6379"

[memcached]
server = "memcached.localhost.com:11211"
自动修改/etc/hosts,映射自定义域名到主机IP
$ vi ~/.profile

# 添加
grep -v "etcd.localhost.com\|consul.localhost.com\|mysql.localhost.com\|redis.localhost.com\|memcached.localhost.com" /etc/hosts > ~/hosts_temp
cat ~/hosts_temp > /etc/hosts
LC_ALL=C ifconfig en0 | grep 'inet ' | cut -d ' ' -f2 | awk '{print $1 " etcd.localhost.com\n" $1 " consul.localhost.com\n" $1 " mysql.localhost.com\n"$1     " redis.localhost.com\n" $1 " memcached.localhost.com"}' >> /etc/hosts

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
consts
dao
middleware
binder
Based on https://github.com/labstack/echo/blob/v1/binder.go
Based on https://github.com/labstack/echo/blob/v1/binder.go
multitemplate
Base on github.com/gin-gonic/contrib/renders/multitemplate
Base on github.com/gin-gonic/contrib/renders/multitemplate
pongo2echo
Base on github.com/robvdl/pongo2gin
Base on github.com/robvdl/pongo2gin
session
Session implements middleware for easily using github.com/gorilla/sessions within echo.
Session implements middleware for easily using github.com/gorilla/sessions within echo.
staticbin
Based on https://github.com/olebedev/staticbin
Based on https://github.com/olebedev/staticbin
module
auth
Base on https://github.com/martini-contrib/sessionauth
Base on https://github.com/martini-contrib/sessionauth
auth_admin
Base on https://github.com/martini-contrib/sessionauth 这里不能随便自定义,否则,需要改的好多地方,如 模板
Base on https://github.com/martini-contrib/sessionauth 这里不能随便自定义,否则,需要改的好多地方,如 模板
db
log
sn
web
service
json
Package json implements encoding and decoding of JSON as defined in RFC 4627.
Package json implements encoding and decoding of JSON as defined in RFC 4627.
sql
str

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL