{"id":19778778,"url":"https://github.com/acl-dev/gin-service","last_synced_at":"2025-02-28T05:59:27.685Z","repository":{"id":57649482,"uuid":"442089672","full_name":"acl-dev/gin-service","owner":"acl-dev","description":"Run http server written by gin in the master framework","archived":false,"fork":false,"pushed_at":"2023-10-26T10:01:13.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-11T02:13:29.210Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/acl-dev.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":"2021-12-27T07:51:20.000Z","updated_at":"2023-03-02T02:14:12.000Z","dependencies_parsed_at":"2024-11-12T05:31:51.505Z","dependency_job_id":"00c7fd66-aee4-4bd4-83a5-35fa032a4ca8","html_url":"https://github.com/acl-dev/gin-service","commit_stats":{"total_commits":24,"total_committers":4,"mean_commits":6.0,"dds":"0.45833333333333337","last_synced_commit":"908cd5668757ff23e056159359d13c7f6650233c"},"previous_names":["acl-dev/master-gin"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acl-dev%2Fgin-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acl-dev%2Fgin-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acl-dev%2Fgin-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acl-dev%2Fgin-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acl-dev","download_url":"https://codeload.github.com/acl-dev/gin-service/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241108919,"owners_count":19911065,"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":[],"created_at":"2024-11-12T05:31:34.740Z","updated_at":"2025-02-28T05:59:27.645Z","avatar_url":"https://github.com/acl-dev.png","language":"Go","readme":" gin-service\n\n基于 gin 开发的服务器模板，可以与 acl_master 服务管理框架深度集成。\n\n## 一、安装\n\n```shell\ngo install github.com/acl-dev/gin-service@v1.0.1\n```\n\n## 二、使用\n\n### 2.1 简单示例\n\n下面是一个简单的使用封装了 gin 服务框架可以与 acl_master 服务管理框架融合的简单示例：\n```go\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"github.com/acl-dev/gin-service\"\n\t\"github.com/acl-dev/go-service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nvar (\n\taddresses = flag.String(\n\t\t\"listen\",\n\t\t\"127.0.0.1:8088\",\n\t\t\"listen addresses in alone mode\",\n\t)\n\tdebugMode = flag.Bool(\n\t\t\"debug\",\n\t\tfalse,\n\t\t\"If running gin server in debug mode\",\n\t)\n)\n\nfunc main()  {\n\tflag.Parse()\n\n\tif !*debugMode {\n\t\t// 设置生产环境下的运行模式。\n\t\tgin.SetMode(gin.ReleaseMode)\n\t}\n\n\t// 1. 创建服务对象，内部可以包含多个HTTP服务监听对象，在 acl_master 框架下，\n\t// 内部会忽略此处所输入的地址，而是从 acl_master 继承监听句柄。\n\tservice, err := master_gin.Init(*addresses, onStop)\n\tif err != nil {\n\t\tfmt.Println(\"Init master gin service failed:\", err)\n\t\treturn\n\t}\n\n\t// For debug: 设置客户端连接建立时的回调函数。\n\tservice.AcceptHandler = func(conn net.Conn) {\n\t\tfmt.Printf(\"Connect from %s\\r\\n\", conn.RemoteAddr())\n\t}\n\t\n\t// For debug: 设置客户端连接断开时的回调函数。\n\tservice.CloseHandler = func(conn net.Conn) {\n\t\tfmt.Printf(\"Disconnect from %s\\r\\n\", conn.RemoteAddr())\n\t}\n\n\t// For debug: 应用可以根据自身需要从配置文件中取得所设置的配置项。\n\tfmt.Printf(\"ServiceType=%s, test_src=%s, test_bool=%t\\r\\n\",\n\t\tmaster.ServiceType, master.AppConf.GetString(\"test_src\"),\n\t\tmaster.AppConf.GetBool(\"test_bool\"))\n\n\t// 2. 设置 HTTP 服务路由。\n\tsetRoute(*service)\n\tfmt.Println(\"Listen and running ...\")\n\t\n\t// 3. 启动 HTTP 服务过程\n\tservice.Run()\n}\n\nfunc ginWrap(f func(w http.ResponseWriter, r *http.Request)) gin.HandlerFunc {\n\treturn func(context *gin.Context) {\n\t\tf(context.Writer, context.Request)\n\t}\n}\n\nfunc onTest(w http.ResponseWriter, _ *http.Request) {\n\t_, _ = fmt.Fprintf(w, \"test: Hello World!\\r\\n\")\n}\n\n// setRoute 设置 HTTP 服务路由。\nfunc setRoute(service master_gin.GinService) {\n\tservice.Engine.GET(\"/\", func(context *gin.Context) {\n\t\tcontext.String(200, \"hello world!\\r\\n\")\n\t})\n\tservice.Engine.GET(\"/test\", ginWrap(onTest))\n\n\t// 也可以采用以下方法设置 HTTP 服务路由\n\t// 针对每一个 HTTP 服务监听对象设置 HTTP 服务路由。\n\t/*\n\tfor _, s := range service.Servers {\n\t\ts.Engine.GET(\"/\", func(context *gin.Context) {\n\t\t\tcontext.String(200, \"hello world!\\r\\n\")\n\t\t})\n\t\ts.Engine.GET(\"/test\", ginWrap(onTest))\n\t}\n\t*/\n}\n\n// onStop 进程退出时的回调函数。\nfunc onStop(bool) {\n\tfmt.Println(\"The process stopped!\")\n}\n```\n\n在这个例子中，首先需要导入以下三个模块：\n```go\n\"github.com/acl-dev/gin-service\"\n\"github.com/acl-dev/go-service\"\n\"github.com/gin-gonic/gin\"\n```\n其中：\n- `go-service` 模块是相对独立（没有第三方依赖）的服务模板，可以与 `acl_master` 服务管理框架无缝整合；\n- `gin-service` 封装了 `go-service` 及 `gin` 框架，可以达到既方便使用 `gin` 框架，又可以与 `acl_master` 整合的目的；\n- `gin` 为功能强大的 Web 服务框架。\n\n编译：\n```shell\ngo build -o gin-server\n```\n\n手工模式下运行：\n```shell\n./gin-server -alone\n```\n\n### 2.2、将 gin-server 服务程序部署在 acl_master 框架下\n#### 2.2.1 部署 acl_master 服务管理框架\n首先需要从 `https://github.com/acl-dev/acl` 或 `https://gitee.com/acl-dev/acl` 下载 acl 工程，然后编译安装，过程如下：\n```\n#cd acl; make\n#cd disk/master; ./setup.sh /opt/soft/acl-master\n#cd /opt/soft/acl-master/sh; ./start.sh\n```\n上面过程便完成了编译、安装及启动 acl_master 服务管理框架的过程。  \n如果您使用 CentOS 操作系统，还可以通过下面过程来完成（即：生成 acl_master RPM 包，然后安装该 RPM 包即可）：\n```\n#cd packaging; make\n#cd x86_64; rpm -ivh acl-master*.rpm\n```\n当 RPM 安装后 acl_master 服务管理程序会自动启动。\n\n#### 2.2.2 部署 gin-server 服务程序至 acl_master 框架下\n首先下载 go-service 软件包并编译其中的服务示例，然后安装这些服务程序：\n\n```\n#go install github.com/acl-dev/gin-service@v1.0.0\n#cd $GOPATH/src/github.com/acl-dev/gin-service/examples/\n#(cd gin-server; go get; go build; ./setup.sh /opt/soft/gin-server)\n#/opt/soft/gin-server/bin/start.sh\n```\n\n最后运行 **`acl_master`** 服务框架中的管理工具来查看由 **`acl_master`** 管理的服务：\n```shell\n#/opt/soft/acl-master/bin/master_ctl -a list\n```\n\n结果显示如下：\n\n```\nstatus  service                                         type    proc    owner   conf    \n200     |87, |88, |89, gin-server.sock            4       2      root    /opt/soft/gin-server/conf/gin-server.cf\n```\n\n可以使用 `curl` 工具测试一下 gin-server 服务，如下：\n```\n# curl http://127.0.0.1:8888/test\ntest: hello world!\n```\n\n在上面由 master_ctl -a list 显示的管理内容中可以看到 gin-server 的运行身份为 `root`，需要想要 gin-server 运行在 `nobody` 身份下，则需要以下修改：\n- 将 gin-server 目录修改为 nobody 属主：`chown -R nobody:nobody /opt/soft/gin-server`；\n- 修改 `/opt/soft/gin-server/conf/gin-server.cf` 配置文件，修改其中的配置项：\n  - master_args = -u\n  - master_owner = nobody\n- 重新启动 gin-server 服务\n  - /opt/soft/gin-server/bin/stop.sh \n  - /opt/soft/gin-server/bin/start.sh \n\n然后再运行\n```shell\n#/opt/soft/acl-master/bin/master_ctl -a list\n```\n结果显示如下：\n\n```\nstatus  service                                         type    proc    owner   conf    \n200     |87, |88, |89, gin-server.sock            4       2      nobody    /opt/soft/gin-server/conf/gin-server.cf\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facl-dev%2Fgin-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facl-dev%2Fgin-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facl-dev%2Fgin-service/lists"}