本项目是根据个人的喜好做的一个 Golang Web DevOps的项目目录结构, 包含一些示例
- 面向接口编程
- 后端使用 gin
- 鉴权使用 JWT
- 前端使用 React + Electron + Vite
- 数据库使用 GORM + Postgres/Mysql + Redis
- 运维部署使用 Kubectl + Kubernetes 与 Dockerfile + docker-compose 或 gitlab + gitlab-Runner方式
- 命名:
- 目录名全部小写
- 文件名遵循蛇形命名法
- 导出的函数遵循大驼峰命名法, 包内部私有字段以及不对外暴露的函数,方法,变量使用小驼峰命名法
- assets 共享的静态资产(静态文件, 图像, 音视频...)
- build 打包目录
- ci 存放
gitlab-ci.yml
等CI
脚本 - package 存放云,操作系统, Dockerfile, docker-compose 等
- ci 存放
- client 存放客户端文件
- config 与CI/CD Dockerfile 等工具结合的配置
- cmd 存放可执行文件, 非 sh,bat 脚本的指令文件
- docs 设计文档, 说明文件
- examples 存储应用程序示例目录
- internal 私有文件夹, 不对外共享
- api 存放
JSON
等文件数据 - handler 处理 HTTP 请求
- middleware 中间件, 例如 CORS, 拦截器
- repository 数据库
- router 路由服务
- schema/model/dao 存放与数据库映射的类型与方法
- Kubernetes 存放 k8s 部署的文件
- api 存放
- pkg 存储公共方法
- config 对外开放的 config 配置, 例如数据库配置
- ssl 存储 HTTPS证书
- helper 工具函数
- config 对外开放的 config 配置, 例如数据库配置
- scripts 存放脚本
- migrations sql迁移文件
- test 测试文件夹
- React
- Electron
- Typescript
- Vite
- vite-plugin-electron
- husky
- commitlint
- ESLint
- lint-staged
- eslint-config-alloy
- eslint-import-resolver-typescript
- eslint-plugin-import
- eslint-plugin-react
- eslint-plugin-react-hooks
- eslint-plugin-react-hooks-addons
- eslint-plugin-react-refresh
- eslint-plugin-simple-import-sort
- eslint-plugin-typescript-enum
- Stylelint+
- stylelint-config-recess-order
- stylelint-config-standard
- stylelint-config-standard-scss
-
安装依赖
p i -D lint-staged husky @commitlint/cli @commitlint/config-conventional eslint eslint-config-alloy @typescript-eslint/parser eslint-plugin-import eslint-import-resolver-typescript eslint-import-resolver-typescript eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-hooks-addons eslint-plugin-simple-import-sort eslint-plugin-typescript-enum lint-staged typescript
-
先创建
.git
仓库git init
-
package.json
添加prepare
指令{ "scripts": { "prepare": "husky install" } }
-
prepare脚本会在执行npm install之后自动执行。执行npm install安装完项目依赖后会执行 husky install命令。
pnpm i
(可选)命令行
npm set-script prepare "husky install" && npm run prepare
-
添加
git hooks
, 创建一条pre-commit hook
npx husky add .husky/pre-commit "pnpm lint"
执行该命令后,会看到.husky/目录下新增了一个名为
pre-commit
的shell
脚本。之后执行git commit
命令时会先触发pre-commit
这个脚本。 脚本内容:#!/bin/sh . "$(dirname "$0")/_/husky.sh" pnpm lint
-
修改
pre-commit
脚本, 改成项目所需的指令, 例如ESLint
,Stylelint
,commitlint
检查#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" tsc --noEmit && pnpm stylelint:fix && pnpm dlx lint-staged
-
添加
commitlint
规范npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
- kubernetes
- Dockerfile
- docker-compose
- gitlab-runner
-
进入根目录的
kubernetes
的deployment
目录下 -
部署 Golang 应用 在
kubernetes
集群运行:kubectl apply -f golang-app-deployment.yaml
-
部署 Web 应用 在
kubernetes
集群运行:kubectl apply -f golang-app-deployment.yaml
-
部署 Golang 应用 在
kubernetes
集群运行:kubectl apply -f web-app-deployment.yaml
-
部署 Postgres 数据库 在
kubernetes
集群运行:kubectl apply -f postgres-deployment.yaml
- 可根据此篇文章安装Gitlab
- 可根据此篇文章安装gitlab-runner
- 在根目录创建
.gitlab-ci.yml
文件,参考examples/ci/backend/.gitlab-ci.yml
后端部署文件或examples/ci/frontend/.gitlab-ci.yml
前端部署文件针对你的需求个性化
Node.js
14+ 版本以上运行环境Golang
1.16+ 版本以上运行环境Postgres
PG 数据库环境. 项目自带Postgres
部署环境,Kubernetes
部署方式在根目录的Kubernetes
/deplotment
/postgres-deployment.yaml
, Docker 部署方式在根目录的cmd
/Dockerfile
- (可选)
Kubernetes
(K8S) 版本推荐 1.20 以上, 使用Containerd
容器运行时(CRI) - (可选) 至少 3台Linux服务器, 1个
master
主控节点, 2 个Node
/Worker
节点. 推荐 2个master
主控节点, 4个Node
/Worker
节点
- 数据库配置: 填写在根目录的
pkg
->config
->db.development.yaml
开发配置与db.production.yaml
生产模式配置文件 - (可选) 将
HTTPS
服务器的crt
与key
证书的文件复制至pkg
->config
->ssl
目录即可运行TLS
服务 - (可选) 修改
pkg
->config
->jwt.yaml
JWT 秘钥
air
开发热重启go install github.com/cosmtrek/air@latest
-
进入到项目的前端目录
Client
.cd client
-
任选你喜欢的一个
包管理器
安装依赖, 例如npm
,pnpm
,yarn
, 只要你安装了它.- npm:
npm install
- pnpm:
pnpm i
- yarn:
yarn
-
普通运行
go run .
-
air
方式运行mode
: 运行模式, 项目内置dev
开发与prod
生产模式, 不同模式使用不同的配置文件运行程序的方式, 默认为dev
开发模式port
: 运行端口, 项目运行的端口,默认端口为4000
.
-
示例1: 使用
8080
端口的开发
模式.air -- -mode=dev -port=8080
-
示例2: 使用
443
端口的生产
模式.air -- -mode=prod -port=443
-
-
(推荐)
Markfile
方式运行Golang
程序与Swagger
make all
- (推荐)
Markfile
方式运行
make build
- go 自带
go build -o .
- npm:
```shell
npm run dev
```
- pnpm:
```shell
pnpm dev
```
- yarn
yarn dev
-
运行所有测试用例
go test
-
单个测试
go test ./test/file_test.go
-
HTTP 测试 (仅适用于 jetbrains系列的 IDEA, WebStorm, Goland IDE)
- 参考
<project>/examples/http/test/api.http
文件 - 修改
<project>/test/http-client.env.json
为你的项目URI地址 - 打开
<project>/test/api.http
, 修改这些示例为你项目真实的接口地址, 点击左侧运行图标即可运行HTTP
请求
- sql迁移测试
- 打开
test
目录 - 运行
init_pg_data_test.go
go test init_pg_data_test.go
- 到
Postgres
的tests
数据库查看sql 文件数据迁移是否成功