{"id":19657234,"url":"https://github.com/daheige/go-proj","last_synced_at":"2025-04-28T19:31:54.279Z","repository":{"id":35893074,"uuid":"196701541","full_name":"daheige/go-proj","owner":"daheige","description":"Go web/api, grpc, job layered design, can be used for go large project development.","archived":false,"fork":false,"pushed_at":"2023-05-05T02:49:25.000Z","size":9141,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-06-21T15:44:58.825Z","etag":null,"topics":["api","go-proj","golang","grpc","http","job","web"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daheige.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-13T09:08:43.000Z","updated_at":"2023-08-30T01:39:39.000Z","dependencies_parsed_at":"2024-06-21T14:22:21.571Z","dependency_job_id":"3e9f4752-e4d8-4998-a9d0-ae0832b1e8c6","html_url":"https://github.com/daheige/go-proj","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daheige%2Fgo-proj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daheige%2Fgo-proj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daheige%2Fgo-proj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daheige%2Fgo-proj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daheige","download_url":"https://codeload.github.com/daheige/go-proj/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224128544,"owners_count":17260452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","go-proj","golang","grpc","http","job","web"],"created_at":"2024-11-11T15:30:56.954Z","updated_at":"2024-11-11T15:31:27.591Z","avatar_url":"https://github.com/daheige.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-proj 项目\r\n\r\n    基于golang gin框架和grpc框架封装而成。\r\n    涉及到的包：gin,grpc,protobuf,redigo,daheige/thinkgo\r\n\r\n# go version选择\r\n    推荐使用go v1.16.15+版本\r\n# golang linux环境安装\r\n\r\ngolang下载地址:\r\nhttps://golang.google.cn/dl/\r\n\r\n以go最新版本go1.16.15版本为例\r\nhttps://golang.google.cn/dl/go1.20.2.linux-amd64.tar.gz\r\n1. linux环境(centos,ubuntu操作系统)，下载\r\n```shell\r\ncd /usr/local/\r\n    sudo wget https://golang.google.cn/dl/go1.16.15.linux-amd64.tar.gz\r\n    sudo tar zxvf go1.16.15.linux-amd64.tar.gz\r\n    # 创建golang需要的目录\r\n    sudo mkdir ~/go\r\n    sudo mkdir ~/go/bin\r\n    sudo mkdir ~/go/src\r\n    sudo mkdir ~/go/pkg\r\n```\r\n2. 设置环境变量vim ~/.bashrc 或者sudo vim /etc/profile\r\n```shell\r\n    export GOROOT=/usr/local/go\r\n    export GOOS=linux\r\n    export GOPATH=~/go\r\n    export GOSRC=$GOPATH/src\r\n    export GOBIN=$GOPATH/bin\r\n    export GOPKG=$GOPATH/pkg\r\n    \r\n    #开启go mod机制\r\n    export GO111MODULE=on\r\n\r\n    #禁用cgo模块\r\n    export CGO_ENABLED=0\r\n    export GOPROXY=https://goproxy.cn,direct\r\n\r\n    export PATH=$GOROOT/bin:$GOBIN:$PATH\r\n```\r\n:wq 保存退出\r\n3. source ~/.bashrc 生效配置\r\n\r\n# golang mac系统安装\r\n只需要下载 https://golang.google.cn/dl/go1.16.15.darwin-amd64.pkg 然后点击下一步，下一步就可以安装完毕\r\n环境变量配置：\r\nvim ~/.bash_profile\r\n```shell\r\n    export GOROOT=/usr/local/go\r\n    export GOOS=linux\r\n    export GOPATH=~/go\r\n    export GOSRC=$GOPATH/src\r\n    export GOBIN=$GOPATH/bin\r\n    export GOPKG=$GOPATH/pkg\r\n    #开启go mod机制\r\n    export GO111MODULE=on\r\n    \r\n    #禁用cgo模块\r\n    export CGO_ENABLED=0\r\n    \r\n    #配置goproxy代理\r\n    export GOPROXY=https://goproxy.cn,direct\r\n    export PATH=$GOROOT/bin:$GOBIN:$PATH\r\n```\r\n\r\n:wq 退出即可，然后执行 source ~/.bash_profile 生效\r\n\r\n# go-proj 目录结构\r\n\r\n    .\r\n    ├── app                             应用目录\r\n    │   ├── job                         job/task作业层\r\n    │   ├── logic                       公共逻辑层，上下文采用标准上下文ctx\r\n    │   ├── rpc                         grpc service层\r\n    │   │   └── service\r\n    │   └── web                         web/api\r\n    │       ├── controller\r\n    │       ├── middleware\r\n    │       └── routes\r\n    ├── bin                             存放golang生成的二进制文件和shell脚本\r\n    │   ├── go-gen                      golang生成的二进制文件\r\n    │   │   ├── rpc\r\n    │   │   └── web\r\n    │   ├── nodejs-generate.sh\r\n    │   ├── pb-generate.sh              golang pb和php pb代码生成脚本\r\n    │   ├── php7.2_install.sh\r\n    │   └── web-init.sh                 golang rpc,web,job自动化构建脚本\r\n    ├── conf                            项目配置文件目录\r\n    ├── clients                         golang,php,nodejs客户端生成的代码\r\n    │   ├── go\r\n    │   │   └── client.go\r\n    │   └── php\r\n    │       ├── App                     自动生成的php代码\r\n    │       ├── composer.json           composer文件，可以指定App命名空间自动加载\r\n    │       ├── composer.lock\r\n    │       ├── hello_client.php\r\n    │       ├── readme.md\r\n    │       └── vendor\r\n    ├── cmd                             各个应用的main.go文件和配置文件app.yaml,线上可以放在别的目录\r\n    │   ├── job\r\n    │   ├── rpc\r\n    │   │   ├── app.yaml                开发模式下的配置文件\r\n    │   │   ├── logs\r\n    │   │   └── main.go\r\n    │   └── web\r\n    │       ├── app.yaml\r\n    │       ├── logs\r\n    │       └── main.go\r\n    ├── go.mod\r\n    ├── go.sum\r\n    ├── library                         公共库主要是第三方库，logger,gin metrics监控等\r\n    │   ├── helper                      助手函数库\r\n    │   ├── ginMonitor                  gin web/api打点监控\r\n    │   └── logger                      日志服务\r\n    ├── LICENSE\r\n    ├── logs                            运行日志目录，线上可放在别的目录,开发模式goland日志放在logs中\r\n    │   ├── rpc\r\n    │   └── web\r\n    ├── pb                              根据pb协议，自动生成的golang pb代码\r\n    │   └── hello.pb.go\r\n    ├── protos                          pb协议文件\r\n    │   └── hello.proto\r\n    └── readme.md\r\n\r\n# 关于web层\r\n\r\n    基于gin1.8.2+框架封装而成\r\n    \r\n# 关于gin validate参数校验\r\n\r\n    gin1.8.2+ 基于gopkg.in/go-playground/validator.v10封装之后\r\n    将validator库的validate tag改成了binding方便gin使用\r\n    \r\n    参考手册：\r\n        https://github.com/go-playground/validator/tree/v9\r\n        https://godoc.org/github.com/go-playground/validator\r\n        https://github.com/go-playground/validator/blob/master/_examples/simple/main.go\r\n        \r\n# gin使用手册\r\n    \r\n    参考 https://github.com/gin-gonic/gin\r\n    中文翻译: https://github.com/daheige/gin-doc-cn 如果有更新，以官网为准\r\n    \r\n# go-grpc 和 php grpc 工具安装\r\n\r\n    ubuntu系统\r\n        参考 https://github.com/daheige/hg-grpc\r\n    centos系统\r\n        参考 docs/centos7-protoc-install.md\r\n\r\n# php grpc工具和拓展安装\r\n\r\n    参考 docs/centos7-protoc-install.md\r\n\r\n# grpc 运行\r\n\r\n    1、生成pb代码 （生成代码之前，请先安装好go-grpc 和 php grpc 工具）\r\n        sh bin/go-generate.sh\r\n        sh bin/php-generate.sh\r\n\r\n    2、启动服务端\r\n    $ cp app.exam.yaml app.yaml\r\n    $ sh bin/app-start.sh rpc\r\n    2019/07/14 11:25:26 server pprof run on:  51051\r\n    2019/07/14 11:25:26 go-proj grpc run on: 50051\r\n\r\n    3、运行客户端\r\n    $ go run clients/go/client.go\r\n    2019/07/14 11:26:36 name:hello,golang grpc,message:call ok\r\n\r\n    php客户端\r\n    $ php clients/php/hello_client.php\r\n    检测App\\Grpc\\GPBMetadata\\Hello\\HelloReq是否存在\r\n    bool(true)\r\n    status code: 0\r\n    name:hello,world\r\n    call ok\r\n\r\n# grpc拦截器使用\r\n\r\n    grpc拦截器用法，看go grpc源代码，里面都有对应的方法\r\n\tGo-gRPC 实践指南 https://www.bookstack.cn/read/go-grpc/chapter2-interceptor.md\r\n\r\n# grpc 中间件\r\n\r\n    go-proj/app/rpc/middleware/chain.go\r\n    定义多个中间件（拦截器）\r\n    // 注册interceptor和中间件\r\n    opts = append(opts, grpc.UnaryInterceptor(\r\n    \tmiddleware.ChainUnaryServer(\r\n    \t\tmiddleware.RequestInterceptor,\r\n    \t\tmiddleware.Limit(\u0026middleware.MockPassLimiter{}),\r\n    \t)))\r\n\r\n    server := grpc.NewServer(opts...)\r\n    具体demo参考cmd/rpc/main.go\r\n\r\n    grpc中间件参考： https://github.com/grpc-ecosystem/go-grpc-middleware\r\n\r\n# grpc 和 http gw共用一个端口进行对外服务\r\n    \r\n    实现方式参考： https://eddycjy.com/posts/go/grpc-gateway/2019-06-22-grpc-gateway-tls/\r\n\r\n    1 安装好必要的依赖\r\n        go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway\r\n        go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger\r\n        go get -u github.com/golang/protobuf/protoc-gen-go\r\n    \r\n    2 生成pb文件 \r\n        % sh bin/go-generate.sh\r\n\r\n        Generating codes...\r\n\r\n        generating golang stubs...\r\n        generating golang code success\r\n\r\n        Generate codes successfully!\r\n\r\n    3 开始运行\r\n        % cd cmd/rpc\r\n        % go run http/server.go -config_dir=./\r\n        2020/06/13 19:57:02 maxprocs: Leaving GOMAXPROCS=12: CPU quota undefined\r\n        2020/06/13 19:57:02 config path:  /Users/heige/web/go/go-proj/cmd/rpc\r\n        2020/06/13 19:57:02 server PProf run on:  2339\r\n        2020/06/13 19:57:02 go-proj grpc run on: 1339\r\n\r\n        运行客户端\r\n        % go run clients/go/client_gw.go\r\n        2020/06/13 19:58:51 name:hello,golang grpc,message:call ok\r\n\r\n        这个时候去观察server服务端\r\n        2020/06/13 19:58:51 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n        2020/06/13 19:58:51 req data:  name:\"golang grpc\"\r\n\r\n        通过http方式，访问grpc服务，浏览器中访问下面url\r\n        http://localhost:1339/v1/say/123s\r\n        返回信息\r\n        {\"name\":\"hello,123s\",\"message\":\"call ok\"}\r\n        \r\n        如果发生http 请求出错就会抛出类似下面的错误提示：\r\n        {\"error\":\"connection closed\",\"code\":14,\"message\":\"connection closed\"}\r\n\r\n# grpc-gateway 官方提供的gw 实现方式\r\n\r\n    需要先启动grpc server通过endpoint 方式实现\r\n    参考地址： https://github.com/grpc-ecosystem/grpc-gateway\r\n\r\n# grpc http gw 负载均衡和反向代理\r\n\r\n    # go grpc http层nginx配置\r\n    # 多个实例负载均衡\r\n    upstream gorpc_http {\r\n            server 127.0.0.1:1339 weight=80 max_fails=2 fail_timeout=10;\r\n            server 127.0.0.1:1340 weight=80 max_fails=2 fail_timeout=10;\r\n    }\r\n\r\n    # nginx配置\r\n    server {\r\n            listen 80;\r\n\r\n            # 根据实际情况设置\r\n            server_name myrpc.com www.myrpc.com *.myrpc.com;\r\n\r\n            # 访问日志设置\r\n            access_log /data/logs/mygrpc/go-rpc-access.log;\r\n            error_log /data/logs/mygrpc/go-rpc-error.log;\r\n\r\n            # error_page 404 /etc/nginx/html/40x.html;\r\n            # error_page 500 502 503 504 /50x.html;\r\n\r\n            location = /50x.html {\r\n                root /etc/nginx/html;\r\n            }\r\n\r\n            location @gorpc {\r\n                proxy_redirect off;\r\n                proxy_set_header Host $host;    #为反向设置原请求头\r\n                proxy_set_header X-Read-IP $remote_addr;\r\n                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n                proxy_set_header X-NginX-Proxy true;\r\n                proxy_set_header X-Request-Uri $request_uri;\r\n                proxy_set_header X-Referer $http_referer;\r\n                proxy_pass http://gorpc_http; #负载代理\r\n            }\r\n\r\n            location / {\r\n                try_files $uri @gorpc;\r\n            }\r\n    }\r\n\r\n    # nginx grpc_pass配置\r\n    # 对内服务，如果以grpc server pb格式，可以直接连接到这个ip:port上，也就是宿主机 ip:30051 就可以\r\n    server {\r\n        listen 30051 http2;\r\n        #server_name localhost;\r\n\r\n        access_log /web/wwwlogs/go-grpc-access.log;\r\n\r\n        location / {\r\n            grpc_pass grpc://gorpc_http;\r\n        }\r\n    }\r\n\r\n    配置上面的nginx后，启动cmd/rpc/http/server.go\r\n    % go run http/server.go -config_dir=./ -port=1339\r\n    2020/06/14 10:31:49 maxprocs: Leaving GOMAXPROCS=12: CPU quota undefined\r\n    2020/06/14 10:31:49 config path:  /Users/heige/web/go/go-proj/cmd/rpc\r\n    2020/06/14 10:31:49 server PProf run on:  2339\r\n    2020/06/14 10:31:49 go-proj grpc run on: 1339\r\n    以同样的方式启动1340端口\r\n    % go run http/server.go -config_dir=./ -port=1340\r\n    2020/06/14 10:31:49 maxprocs: Leaving GOMAXPROCS=12: CPU quota undefined\r\n    2020/06/14 10:31:49 config path:  /Users/heige/web/go/go-proj/cmd/rpc\r\n    2020/06/14 10:31:49 server PProf run on:  2340\r\n    2020/06/14 10:31:49 go-proj grpc run on: 1340\r\n\r\n    开始访问 \r\n        http://localhost:1339/v1/say/daheige\r\n        http://localhost:1340/v1/say/daheige\r\n    \r\n    重启nginx\r\n    % /usr/local/nginx/bin/nginx -t\r\n    nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok\r\n    nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful\r\n    % sudo /usr/local/nginx/bin/nginx -s reload\r\n\r\n    配置/etc/hosts\r\n    127.0.0.1 myrpc.com www.myrpc.com *.myrpc.com\r\n    保存退出\r\n    浏览器中访问\r\n    http://myrpc.com/v1/say/daheige\r\n    http://myrpc.com/v1/say/daheige134\r\n\r\n    通过查看日志，在1339，1340两个实例上都可以看到请求打过来\r\n    2020/06/14 10:45:43 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n    2020/06/14 10:45:43 req data:  name:\"daheige\"\r\n    2020/06/14 10:46:11 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n    2020/06/14 10:46:11 req data:  name:\"daheige134\"\r\n\r\n    2020/06/14 10:46:00 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n    2020/06/14 10:46:00 req data:  name:\"daheige123\"\r\n    2020/06/14 10:47:28 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n    2020/06/14 10:47:28 req data:  name:\"daheige123\"\r\n\r\n    如果使用pb格式调用go grpc server\r\n    运行grpc client\r\n    $ go run clients/go/client_ng_grpc.go\r\n    2020/06/20 21:01:18 name:hello,golang grpc,message:call ok\r\n\r\n    实际生产环境中，可以同时提供http格式和grpc pb格式的调用\r\n    对外可以采用http协议，用clb在nginx上游做负载\r\n    对内服务，pb格式提供grpc server服务，直接用上面的nginx grpc_pass 机制就可以\r\n\r\n# woker job/task 运行\r\n\r\n    开发环境下运行job/task\r\n    $ cp app.exam.yaml cmd/worker/app.yaml\r\n    $ go run cmd/worker/worker.go\r\n    2019/07/17 21:29:37 ===worker service start===\r\n    2019/07/17 21:29:37 server pprof run on:  30031\r\n    2019/07/17 21:29:38 hello world\r\n    2019/07/17 21:29:39 current id:  heige\r\n    2019/07/17 21:29:40 hello world\r\n    2019/07/17 21:29:42 current id:  heige\r\n\r\n# 项目工程化构建\r\n\r\n    构建web\r\n    $ sh bin/web-init.sh web\r\n    开始构建web二进制文件\r\n    构建web成功！\r\n\r\n    构建rpc\r\n    $ sh bin/web-init.sh rpc\r\n    Generating codes...\r\n\r\n    generating golang stubs...\r\n    generating golang code success\r\n    generating php stubs...\r\n    generating php stubs from: /web/go/go-proj/protos/hello.proto\r\n            [DONE]\r\n\r\n\r\n    Generate codes successfully!\r\n\r\n    开始构建web二进制文件\r\n    构建rpc成功！\r\n\r\n# 开发模式启动\r\n\r\n    可以把项目中的app.exam.yaml复制到cmd对应的应用中，然后go run main.go启动\r\n\r\n# 关于项目部署\r\n\r\n    建议将web,grpc,job分开单独部署，可采用不同的app.yaml配置文件启动\r\n\r\n# 项目上线说明\r\n\r\n    1、可将bin下面的对应cmd下面的main.go生成的二进制文件，分发到线上部署，配置文件参考cmd/web/app.yaml\r\n    2、上线二进制文件，需要指定app.yaml目录和logs目录\r\n\r\n# grpc server服务--nginx grpc_pass\r\n\r\n    这种方式对于内网其他业务调用grpc server提供的方法，建议用这个方式来控制grpc server服务的负载均衡处理\r\n    启动两个实例\r\n    $ cd cmd/rpc\r\n    $ go run main.go --port=50051\r\n    2019/11/09 18:55:00 server pprof run on:  51051\r\n    2019/11/09 18:55:00 go-proj grpc run on: 50051\r\n\r\n    新开一个终端\r\n    $ cd cmd/rpc\r\n    $ go run main.go --port=50052 --log_dir=/web/wwwlogs\r\n    2019/11/09 18:56:32 server pprof run on:  51052\r\n    2019/11/09 18:56:32 go-proj grpc run on: 50052\r\n\r\n    配置nginx grpc负载均衡\r\n    参考:\r\n    https://github.com/daheige/hg-grpc/blob/master/readme.md#%E9%85%8D%E7%BD%AEnginx-grpc%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1\r\n    为了go grpc服务高可用，需要对grpc服务做负载均衡处理，这里借助nginx grpc模块实现，配置如下:\r\n\r\n    #nginx gprc负载均衡配置，要求nginx1.13.0+以上版本\r\n    #nginx gprc负载均衡配置\r\n    # 多个ip:port实例\r\n    upstream go_grpc {\r\n        server 127.0.0.1:50051 weight=5 max_fails=3 fail_timeout=10;\r\n        server 127.0.0.1:50052 weight=1 max_fails=3 fail_timeout=10;\r\n    }\r\n\r\n    server {\r\n        listen 50050 http2;\r\n        server_name localhost;\r\n\r\n        access_log /web/wwwlogs/go-grpc-access.log;\r\n\r\n        location / {\r\n            grpc_pass grpc://go_grpc;\r\n        }\r\n    }\r\n\r\n    重启nginx\r\n    sudo service nginx restart\r\n\r\n    运行grpc client\r\n    $ go run clients/go/client_rpc.go\r\n    2019/11/09 19:01:18 name:hello,golang grpc,message:call ok\r\n    $ go run clients/go/client_rpc.go\r\n    2019/11/09 19:01:20 name:hello,golang grpc,message:call ok\r\n    $ go run clients/go/client_rpc.go\r\n    2019/11/09 19:01:23 name:hello,golang grpc,message:call ok\r\n\r\n    请求过程中可以看到两个实例，会产生响应日志\r\n    2019/11/09 19:07:46 req method:  /App.Grpc.Hello.GreeterService/SayHello\r\n    2019/11/09 19:07:46 req data:  name:\"golang grpc\"\r\n\r\n    查看请求日志\r\n    $ tail -f cmd/rpc/logs/go-grpc.log\r\n\r\n    $ tail -f /web/wwwlogs/go-grpc.log\r\n\r\n    通过查看日志，可以看到请求到50051这个实例的grpc请求相对多一点，50052这个实例相对少一点\r\n    因为nginx grpc的权重不一样\r\n\r\n# go mod 编译方式\r\n\r\n    方式1:\r\n                如果采用go mod tidy 拉取依赖，会在$GOPATH/pkg/mod缓存go.mod中的包\r\n                cd cmd/web 然后执行 go build进行编译就可以，更新go.mod包，会自动进行包依赖拉取\r\n\r\n    方式2:\r\n                如果采用vendor机制，执行  go mod vendor  后会按需把项目用到的包，放在go-proj根目录的vendor下面\r\n                cd cmd/web  然后执行  go build -mod=vendor 拉取当前目录下的vendor作为编译依赖包，进行编译\r\n\r\n    以上两种方式推荐使用方式1，这样只需要升级go.mod中的包，就不需要担心包依赖问题\r\n\r\n# docker 构建镜像\r\n\r\n    web层:\r\n        $ docker build -t go-proj-web:v1 -f web-Dockerfile .\r\n        运行：\r\n        $ docker run -itd --name=go-proj-web -v /data/logs:/data/logs -v /data/www/go-proj:/data/conf -p 1338:1338 -p 2338:2338 go-proj-web:v1\r\n\r\n    job层:\r\n        $ docker build -itd go-proj-job:v1 -f job-Dockerfile .\r\n        运行:\r\n        $ docker run -it --name=go-proj-job -v /data/logs:/data/logs -v /data/www/go-proj:/data/conf -p 30031:30031 go-proj-job:v1\r\n\r\n    rpc层:\r\n        $ docker build -t go-proj-job:v1 -f job-Dockerfile .\r\n        运行:\r\n             $ docker run -itd --name=go-proj-rpc -v /data/logs:/data/logs -v /data/www/go-proj:/data/conf -p 50051:50051 -p 51051:51051 go-proj-rpc:v1\r\n\r\n    如果要在后台运行，docker run 加一个 -d参数\r\n    \r\n    采用脚步构建镜像 sh bin/docker-build.sh web\r\n\r\n# 版权\r\n\r\n    MIT\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaheige%2Fgo-proj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaheige%2Fgo-proj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaheige%2Fgo-proj/lists"}