{"id":25508965,"url":"https://github.com/iamsad5566/member_service_frame","last_synced_at":"2026-04-09T08:10:16.868Z","repository":{"id":228932149,"uuid":"770415696","full_name":"iamsad5566/member_service_frame","owner":"iamsad5566","description":"A microservice for member management system developed by Go (under developing)","archived":false,"fork":false,"pushed_at":"2024-05-17T08:33:40.000Z","size":126,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-16T15:38:37.586Z","etag":null,"topics":["bcrypt","cicd","gin-gonic","go","grpc","jwt","microservice","oauth2","redis","spf13-viper","zap"],"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/iamsad5566.png","metadata":{"files":{"readme":"README-zh.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security/encrypt.go","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-11T14:11:15.000Z","updated_at":"2024-05-04T15:35:36.000Z","dependencies_parsed_at":"2024-05-17T09:52:13.587Z","dependency_job_id":null,"html_url":"https://github.com/iamsad5566/member_service_frame","commit_stats":null,"previous_names":["iamsad5566/member_service_frame"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamsad5566%2Fmember_service_frame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamsad5566%2Fmember_service_frame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamsad5566%2Fmember_service_frame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamsad5566%2Fmember_service_frame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iamsad5566","download_url":"https://codeload.github.com/iamsad5566/member_service_frame/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239625174,"owners_count":19670639,"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":["bcrypt","cicd","gin-gonic","go","grpc","jwt","microservice","oauth2","redis","spf13-viper","zap"],"created_at":"2025-02-19T08:31:34.143Z","updated_at":"2026-04-09T08:10:16.837Z","avatar_url":"https://github.com/iamsad5566.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Member Service\n[![auto test](https://github.com/iamsad5566/member_service_frame/actions/workflows/test.yml/badge.svg)](https://github.com/iamsad5566/member_service_frame/actions/workflows/test.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/iamsad5566/member_service_frame)](https://goreportcard.com/report/github.com/iamsad5566/member_service_frame)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![codecov](https://codecov.io/gh/iamsad5566/member_service_frame/graph/badge.svg?token=NTFKVYJH4K)](https://codecov.io/gh/iamsad5566/member_service_frame)\n\n\n[中文版](/README-zh.md) , [English](/README.md)\n\n會員服務是一個使用Go語言開發的開源微服務，處理使用者驗證、註冊和登入等功能,整合了各種與使用者管理相關的使用案例和情況。\n\n## 功能\n- 使用者註冊\n- 使用者登入\n- 使用者驗證\n- 密碼更新\n- OAuth2.0整合(Google)\n- 基於gRPC的授權服務\n- 自動建立資料庫\n- 容器化部署\n\n## 開始使用\n### 先決條件\n- Go (版本1.16或更新)\n- PostgreSQL\n- Redis\n\n## 安裝\n1. 複製 Repo：\n```\nhttps://github.com/iamsad5566/member_service_frame.git\n```\n2. 切換到專案目錄：\n```\ncd member_service_frame\n```\n3. 建置專案：\n```\ngo build\n```\n\n## 設定\n應用程式使用配置檔(`example_config.yml`)來存儲各種設定，以下是設定選項詳細說明：\n- **valid_login:** 使用者登入有效天數 (預設：14)。\n- **member_service:**\n    - **host:** 會員服務主機(範例中已隱藏)。\n    - **port:** 會員服務埠號 (預設：888)。\n    - **RESTfulPort:**  RESTful API 埠號 (預設：8112)。\n    - **gRPCPort:**  gRPC 服務埠號 (預設：8113)。\n\n- **jwt:**\n    - **secret_key:** JSON Web Token 密鑰 (範例中已隱藏)。\n    - **token_expire:** Token 過期時間(秒) (預設：86400, 即24小時)。\n- **db:**\n    - **psql:**\n        - **account:** PostgreSQL 資料庫帳號 (範例中已隱藏)。\n        - **password:** PostgreSQL 資料庫密碼 (範例中已隱藏)。\n        - **host:** PostgreSQL 資料庫主機 (範例中已隱藏)。\n        - **port:** PostgreSQL 資料庫埠號 (預設：5433)。\n        - **maxIdleConns:** PostgreSQL 連線池最大空閒連線數 (預設：20)。\n        - **maxOpenConns:** PostgreSQL 連線池最大開啟連線數 (預設：20)。\n        - **maxLifeMinute:** PostgreSQL 連線池連線最長存活時間(分鐘) (預設：10)。\n    - **redis:**\n        - **password:** Redis 密碼 (範例中已隱藏)。\n        - **host:** Redis 主機 (範例中已隱藏)。\n        - **port:** Redis 埠號 (預設：6379)。\n- **logConfig:**\n    - **level:** 日誌級別 (預設：info)。\n    - **filename:** 日誌檔案名稱 (預設：logs/viper_zap_gin.log)。\n    - **maxsize:**  日誌檔案大小上限(MB) (預設：1)。\n    - **max_age:**  日誌檔案最長保存天數 (預設：30)。\n    - **max_backups:** 最多保留的舊日誌檔案數量 (預設：5)。\n- **oauth2**\n    - **google:** \n        - **client_id:** Google OAuth2.0 客戶端ID (範例中已隱藏)。\n        - **client_secret:** Google OAuth2.0 客戶端秘鑰 (範例中已隱藏)。\n\n\u003e [!NOTE]\n\u003e 請注意，出於安全考慮，範例中的敏感值(如密碼、秘鑰)已被隱藏。\n\n#### 使用開源版設定實作\n如果您偏好使用開源版本的設定實作，可以遵循以下步驟:\n1. 將`example_config.yml`重新命名為`config.yml`。\n2. 根據您的環境更新配置值。\n\n### 使用私有設定實作(setconf)\n或者，您可以使用私有的 `setconf` 存放庫（setconf 是一個 private repo，只有作者本人可以使用）來管理設定，在這種情況下，您需要用自己的實現替換`config.Setting`對象。\n\n### 運行應用程式\n配置好設定後，可以用以下指令運行應用程式:\n```\n./member_service_frame\n```\n這將啟動會員服務，包括RESTful API、gRPC服務，並自動創建資料庫(如果資料庫不存在)。\n\n### API文件\n會員服務提供Swagger UI的API文件，您可以在`http://localhost:8080/swagger/index.html`訪問(如果配置的埠號不是8080，請替換為對應值)。\n\n### 部署\n可以使用Docker容器部署會員服務，此專案提供了一個Dockerfile：\n1. **Dockerfile:** 用於建置和運行應用程式。\n\n### 建置Docker映像檔\n若要建置Docker映像檔,請運行以下指令：\n```\ndocker build --build-arg GITHUB_TOKEN=\u003cyour_github_token\u003e --build-arg LATEST_SETCONF_VERSION=\u003csetconf_version\u003e -t member_service .\n```\n\n將\u003cyour_github_token\u003e替換為您的GitHub個人訪問令牌,\u003csetconf_version\u003e替換為setconf存放庫的最新版本。順帶一提，若你決定使用開源版設定實作，請將 `Dockerfile`、`./github/workflows/ci-cd.yml`，和 `./github/workflows/test.yml` 中所有與 `setconf` 和 `GOPRIVATE` 有關的內容刪除。\n\n### 運行Docker容器\n建置好映像檔後,可以用以下指令運行容器:\n```\ndocker run -d --name member_service -p 8080:8080 member_service\n```\n這將啟動會員服務容器並將主機的8080埠號對映到容器。\n\n\n### CI/CD\n會員服務包含用於持續整合(CI)和持續部署(CD)的GitHub Actions工作流程。\n\n#### CI工作流程\nCI工作流程(`auto test`)在每次推送到main分支時觸發,執行以下步驟:\n1. 檢測原始碼\n2. 設置`GOPRIVATE`環境變數\n3. 登錄GitHub套件庫\n4. 建置測試Docker映像檔(傳入GitHub Token和`setconf`版本作為建置參數)\n5. 在Docker容器中運行測試\n\n#### CD工作流程\nCD工作流程(`CI/CD`)在發佈新版本時觸發,執行以下步驟:\n1. 檢測原始碼\n2. 設置`GOPRIVATE`環境變數\n3. 登錄GitHub套件庫\n4. 建置測試Docker映像檔(傳入GitHub Token和`setconf`版本作為建置參數)\n5. 為映像檔添加標籤並推送到Docker Hub\n6. 通過SSH將Docker映像檔部署到遠端伺服器\n\n\u003e [!NOTE]\n\u003e 請注意,您需要配置所需的GitHub Secrets(TOKEN、LATEST_SETCONF_VERSION、REMOTE_HOST、SSH_PRIVATE_KEY、DOCKER_USERNAME和DOCKER_PASSWORD),以使工作流程正常運行。\n\n### 貢獻\n歡迎為會員服務做出貢獻!如果您發現任何問題或想要添加新功能,請開啟issue或提交pull request。\n\n### 授權\n會員服務是根據MIT授權發佈的開源軟體。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamsad5566%2Fmember_service_frame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiamsad5566%2Fmember_service_frame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamsad5566%2Fmember_service_frame/lists"}