GoWind 开源生态GoWind 开源生态
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind Toolkit
GitHub
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind Toolkit
GitHub
  • 介绍

    • GoWind Admin 产品介绍
    • GoWind Admin 安装指南
  • 后端文档

    • 后端架构总览
    • 后端核心模块详解
    • 后端 API 与 Protobuf 定义
    • 后端配置与部署
    • 后端扩展开发
  • 前端文档

    • 前端架构总览
    • 前端核心功能详解
  • 二开教程

    • 后端新增业务模块实战教程
    • 前端新增业务页面实战教程
    • 前后端联调完整实战教程
  • 高级教程

    • Lua 脚本扩展实战教程
    • 权限系统深度解析教程
    • 多租户架构实战教程
    • 任务调度与异步处理教程
    • 文件上传与对象存储教程
    • 事件总线与解耦架构教程
    • 前端主题定制与国际化教程
    • 性能优化与监控教程
    • SSE 实时推送
    • 登录策略与安全加固
    • 加密工具实战

后端配置与部署

本文档详细说明 GoWind Admin 后端的所有配置项以及开发/生产环境的部署方式。

一、配置文件体系

后端配置文件位于 app/admin/service/configs/ 目录,采用 YAML 格式,按功能域划分:

configs/
├── server.yaml     # 服务器配置(REST、Asynq、SSE)
├── data.yaml       # 数据源配置(数据库、Redis)
├── auth.yaml       # 认证与授权配置
├── client.yaml     # 客户端配置
├── oss.yaml        # 对象存储配置
└── logger.yaml     # 日志配置

1. 服务器配置(server.yaml)

server:
  rest:
    addr: ":7788"               # REST API 监听地址
    timeout: 10s                # 请求超时时间
    enable_swagger: true        # 是否启用 Swagger UI
    enable_pprof: true          # 是否启用 pprof 性能分析
    cors:                       # 跨域配置
      headers:
        - "X-Requested-With"
        - "X-Request-ID"
        - "Content-Type"
        - "Authorization"
      methods:
        - "GET"
        - "POST"
        - "PUT"
        - "DELETE"
      origins:
        - "*"
    middleware:                  # 中间件开关
      enable_logging: true      # 请求日志
      enable_recovery: true     # 异常恢复
      enable_tracing: true      # 链路追踪
      enable_validate: true     # 参数校验
      enable_circuit_breaker: true  # 熔断器
      enable_metadata: true     # 元数据传递

  asynq:                        # Asynq 异步任务配置
    uri: "redis://:*Abcd123456@redis:6379/1"
    codec: "json"
    concurrency: 10             # 并发worker数量
    shutdown_timeout: 10s
    queues:                     # 队列优先级配置
      critical: 10
      default: 5
      low: 1

  sse:                          # SSE 推送服务配置
    addr: ":7789"
    codec: "json"
    path: "/events"
    auto_stream: true
    auto_reply: false

2. 数据源配置(data.yaml)

data:
  database:
    driver: "postgres"          # 数据库驱动:postgres / mysql
    source: "host=postgres port=5432 user=postgres password=*Abcd123456 dbname=gwa sslmode=disable"
    # MySQL 配置示例:
    # driver: "mysql"
    # source: "root:*Abcd123456@tcp(localhost:3306)/gwa?parseTime=true&charset=utf8mb4&loc=Asia%2FShanghai"
    migrate: true               # 是否自动执行数据库迁移
    debug: false                # 是否启用 SQL 调试日志
    enable_trace: false         # 是否启用数据库链路追踪
    max_idle_connections: 25    # 最大空闲连接数
    max_open_connections: 25    # 最大打开连接数
    connection_max_lifetime: 300s  # 连接最大生命周期

  redis:
    addr: "redis:6379"
    password: "*Abcd123456"
    dial_timeout: 10s
    read_timeout: 0.4s
    write_timeout: 0.6s

3. 认证与授权配置(auth.yaml)

authn:
  type: "jwt"                  # 认证方式:jwt / oidc / preshared_key
  jwt:
    method: "HS256"             # JWT 签名算法
    key: "some_api_key"         # JWT 签名密钥

authz:
  type: "noop"                  # 授权引擎:casbin / opa / zanzibar / noop
  casbin:                       # Casbin 配置(当 type=casbin 时生效)
  opa:                          # OPA 配置(当 type=opa 时生效)
  zanzibar:                     # Zanzibar 配置(当 type=zanzibar 时生效)
    type: "keto"                # keto / open_fga
    keto:
      write_url: "http://keto:4466"
      read_url: "http://keto:4466"
      use_grpc: true

4. 对象存储配置(oss.yaml)

oss:
  minio:
    endpoint: "minio:9000"
    upload_host: "minio:9000"
    download_host: "minio:9000"
    access_key: "root"
    secret_key: "*Abcd123456"
    token: ""
    use_ssl: false

5. 日志配置(logger.yaml)

logger:
  type: std                     # 日志类型:std / file / fluent / zap / logrus / aliyun / tencent
  zap:
    level: "debug"
    filename: "./logs/info.log"
    max_size: 1                 # 单个日志文件最大 MB
    max_age: 30                 # 日志保留天数
    max_backups: 5              # 最多保留文件数

二、启动流程

后端服务基于 kratos-bootstrap 框架启动,遵循标准化的生命周期:

1. 启动入口

// cmd/server/main.go
func runApp() error {
    ctx := bootstrap.NewContext(
        context.Background(),
        &conf.AppInfo{
            Project: service.Project,
            AppId:   service.AdminService,
            Version: version,
        },
    )
    return bootstrap.RunApp(ctx, initApp)
}

2. 命令行参数

通过命令行参数覆盖配置,方便在不同环境切换:

参数名缩写默认值说明
--conf-c../../configs配置文件目录
--env-edev运行环境(dev/test/prod)
--chost-s127.0.0.1:8500远程配置中心地址
--ctype-tconsul配置中心类型(etcd/nacos/consul)
--daemon-dfalse是否以守护进程运行
# 生产环境启动,使用 Etcd 配置中心
go run main.go -e prod -c ./configs/prod -t etcd -s 192.168.1.100:2379

3. 配置优先级

配置按以下优先级加载(高优先级覆盖低优先级):

远程配置中心 > 命令行参数 > 环境变量 > 本地配置文件

4. 远程配置中心

支持 Etcd / Nacos / Consul / Apollo / Polaris 等配置中心,通过「导入即启用」方式激活:

import (
    _ "github.com/tx7do/kratos-bootstrap/config/etcd"  // 启用 Etcd
)

配置示例:

config:
  type: "etcd"
  etcd:
    endpoints: ["127.0.0.1:2379"]
    path: "/go-wind-admin/configs"

三、环境变量

项目根目录的 .env 文件用于配置 Makefile 和脚本使用的环境变量。

四、Docker 部署

1. Docker Compose 编排

项目提供两个 Docker Compose 文件:

文件说明
docker-compose.yaml完整部署(中间件 + 应用服务)
docker-compose.libs.yaml仅部署中间件依赖

2. 中间件服务

服务镜像端口说明
PostgreSQLbitnami/postgresql:latest5432主数据库
MySQL(可选)mariadb:latest3306备选数据库
Redisbitnami/redis:latest6379缓存/队列
MinIOminio/minio:latest9000/9001对象存储
Jaeger(可选)jaegertracing/all-in-one:latest16686链路追踪

3. 部署脚本

所有部署脚本位于 scripts/ 目录:

环境初始化脚本

脚本说明
scripts/env/install_unix_dev.shLinux/macOS 开发环境安装
scripts/env/install_unix_prod.shLinux/macOS 生产环境安装
scripts/env/install_windows_dev.ps1Windows 开发环境安装

Docker 部署脚本

脚本说明
scripts/docker/full_deploy.sh完整 Docker 部署(中间件 + 应用)
scripts/docker/full_deploy.ps1完整 Docker 部署(Windows)
scripts/docker/libs_only.sh仅启动中间件依赖(推荐开发使用)
scripts/docker/libs_only.ps1仅启动中间件依赖(Windows)

生产部署脚本

脚本说明
scripts/deploy/pm2_service.shPM2 进程管理部署

五、开发环境部署

方式一:仅启动中间件(推荐)

适合日常开发调试,应用在本地 IDE 运行:

# Linux / macOS
./scripts/docker/libs_only.sh
gow run admin

# Windows(PowerShell 管理员)
.\scripts\docker\libs_only.ps1
gow run admin

方式二:完整 Docker 启动

适合快速体验或 CI 环境:

# Linux / macOS
./scripts/docker/full_deploy.sh

# Windows
.\scripts\docker\full_deploy.ps1

六、生产环境部署

方式一:全 Docker 部署

所有服务(中间件 + 应用)运行在 Docker 容器中:

./scripts/docker/full_deploy.sh

方式二:混合部署

中间件运行在 Docker,应用运行在宿主机(通过 PM2 管理):

# 启动中间件
./scripts/docker/libs_only.sh

# 使用 PM2 托管应用
./scripts/deploy/pm2_service.sh

方式三:手动构建部署

# 构建
make build

# 输出二进制文件位于 app/admin/service/ 目录下
# 将二进制文件和 configs/ 目录一起部署到服务器

七、Makefile 命令详解

GoWind Admin 采用「根目录 Makefile + app.mk + 服务目录 Makefile」的分层设计:

backend/
├── Makefile              # 全局命令(init/build/gen/docker...)
├── app.mk                # 单服务命令模板(run/api/ent/wire...)
└── app/admin/service/
    └── Makefile           # include ../../../app.mk

1. 全局命令(根目录)

命令说明适用场景
make init安装 Protobuf 插件 + CLI 工具首次拉取项目
make gen批量生成所有服务代码(Ent + Wire + API)全量更新
make build构建所有服务可执行文件打包部署
make docker为所有服务构建 Docker 镜像容器化部署
make test运行所有单元测试提交前验证
make lintgolangci-lint 代码检查代码规范
make docker-up启动所有服务+中间件全 Docker 部署
make docker-libs仅启动中间件日常开发
make docker-down停止所有 Docker 服务清理环境
make pm2-deployPM2 部署微服务混合部署

2. 服务级命令(app/admin/service/ 目录)

命令说明适用场景
make run启动当前服务(本地调试)开发调试
make api生成当前服务 Go API 代码接口变更后
make ent生成当前服务 Ent ORM 代码表结构变更后
make wire生成当前服务依赖注入代码依赖关系变更后
make openapi生成当前服务 OpenAPI 文档更新接口文档
make ts生成当前服务 TypeScript 代码前后端同步
make build构建当前服务可执行文件单服务部署

3. 实战场景

# 场景1:首次初始化并启动
make init && make docker-libs && make gen
make run

# 场景2:修改 API 后更新
cd app/admin/service
make api && make openapi && make run

# 场景3:构建 Docker 镜像并部署
cd ../..
make gen && make docker && make docker-up

八、Hosts 配置

在本地开发时,由于 Docker 容器之间通过服务名通信,需要在宿主机的 hosts 文件中添加域名映射:

# Linux/MacOS: /etc/hosts
# Windows: C:\Windows\System32\drivers\etc\hosts
127.0.0.1 postgres
127.0.0.1 redis
127.0.0.1 minio

九、Dockerfile 说明

后端 Dockerfile 支持多阶段构建:

# 通过构建参数指定服务名称
ARG SERVICE_NAME=admin
ARG APP_VERSION=1.0.0

构建镜像:

docker build --build-arg SERVICE_NAME=admin --build-arg APP_VERSION=1.0.0 -t go-wind-admin/admin-service .

十、数据库初始化

数据库初始化脚本位于 sql/ 目录。

当 data.yaml 中 migrate: true 时,Ent 会自动执行数据库迁移(创建表结构)。如需手动初始化,可执行 SQL 脚本。

十一、相关文档

  • 后端架构总览
  • 后端核心模块详解
  • 后端 API 与 Protobuf 定义
  • 后端扩展开发
Edit this page
Last Updated:: 6/5/26, 11:29 AM
Contributors: Bobo
Prev
后端 API 与 Protobuf 定义
Next
后端扩展开发