GoWind 开源生态GoWind 开源生态
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
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
后端扩展开发