Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

foxiswho/echo-go

Repository files navigation

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

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /