2.9 KiB
2.9 KiB
一、前言
我需要一个单机多服务部署的后台微服务架构。
执行目标:基于纯 Docker 环境构建可编译、可运行的最小化后端骨架,无宿主机依赖(无全局 Go/Protoc/Postgres/Redis 环境)
技术栈锁定:golang:1.26.1-alpine3.23、postgres:18.3-alpine3.23、redis:8.6.2-alpine、Docker/Docker Compose、nginx:1.25-alpine
二、完整目录结构
./backend/
├── gateway/
│ ├── cmd/
│ │ └── main.go
│ ├── internal/
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── ws/
│ │ │ ├── hub.go
│ │ │ ├── client.go
│ │ │ └── message.go
│ │ └── router/
│ │ └── router.go
│ ├── go.mod
│ └── Dockerfile
├── services/
│ └── user-svc/
│ ├── cmd/
│ │ └── main.go
│ ├── internal/
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── domain/
│ │ │ └── user.go
│ │ ├── repository/
│ │ │ └── repo.go
│ │ ├── service/
│ │ │ └── service.go
│ │ └── grpcserver/
│ │ └── server.go
│ ├── proto/
│ │ └── user.proto
│ ├── migrations/
│ │ └── 001_init.sql
│ ├── go.mod
│ └── Dockerfile
├── shared/
│ ├── proto/
│ │ ├── common/
│ │ │ └── common.proto
│ │ └── generate.go
│ └── pkg/
│ ├── logger/
│ │ └── logger.go
│ ├── errors/
│ │ └── errors.go
│ ├── database/
│ │ └── postgres.go
│ └── cache/
│ └── redis.go
├── scripts/
│ ├── dev-start.sh # 纯 Docker 启动脚本
│ ├── gen-proto.sh # Docker 内编译 proto
│ └── docker-proto-builder/ # Protoc 编译容器配置
│ └── Dockerfile
├── docker-compose.yml # 全服务编排(含 proto 编译、Go 构建)
├── docker-compose.dev.yml # 开发模式编排(挂载源码、热更新)
├── Makefile # 封装 Docker 命令(兼容无宿主机 Make 环境)
└── README.md # 纯 Docker 环境使用说明
三、核心说明
不允污染宿主机,任何操作都只能通过 Docker 进行,绝对不在本地执行任何命令,不依赖本地环境,纯容器运行。
以上需求明白后,先创建基础骨架:包含 nginx、gateway、services/user-svc、shared、scripts、docker-compose.yml、Makefile,只创建目录结构,不写代码,让后等待我下一步指令。