GGB(猪猪侠)通过清晰的目录结构和模块化设计,为开发者提供了一套高效、可维护的后端服务架构。无论是初学者还是经验丰富的开发者,都能通过 GGB 快速上手并构建高质量的 Web 应用。
- 发送、验证邮件
- 集成 Elasticsearch
golang版本 >= v1.22
# 克隆项目
git clone https://github.com/wangyupo/GGB.git
# 进入项目文件夹
cd GGB
# 使用生成指令,执行配置环境、安装依赖包等一系列操作
go generate
# 编译
go build main.go
# 运行编译好的包
./main (windows运行命令为 ./main.exe)
# 本地启动服务
go run main.go
# 根据指定yaml配置启动服务
go run main.go -c ./config.docker.yaml
set GOOS=linux
go build -o main
set GOOS=windos
或直接执行以下命令:
./build-linux.sh
GGB/
├── api # API 控制器
│ └── v1 # v1版本
├── config # 全局配置
├── core # 核心功能
│ ├── viper.go # viper初始化
│ └── zap.go # zap日志初始化
├── enums # 枚举
├── global # 全局变量
│ └── global.go # 全局实例
├── initialize # 项目初始化
│ ├── router.go # 路由初始化
│ ├── gorm.go # 数据库初始化
│ └── timer.go # 定时器初始化
├── log # 日志
│ ├── 2024-10-01 # 按日期分类储存
│ └── ...
├── middleware # 中间件
│ ├── jwt.go # 鉴权
│ └── operation.go # 操作日志
├── model # 数据模型
│ ├── system # 数据库实体
│ ├── request # 请求参数
│ └── response # 响应参数
├── resource # 资源
│ └── excel # Excel模板
├── router # 路由
├── service # 服务层
│ ├── log # 日志相关服务
│ └── system # 系统相关服务
├── uploads # 上传文件本地存储目录
└── utils # 工具函数
├── timer # 定时器
└── upload # oss
1)新建自定义网络
# 查看已存在的 docker 网络,确认没有重名
docker network ls
# 新建网络,IP 地址范围从 10.1.0.0 到 10.1.255.255,网络名称为 my-net
docker network create --subnet=10.1.0.0/16 my-net
# (无需执行,仅作命令展示)删除自定义网络
docker network rm my-net
2)拉取镜像,并在自定义网络上创建容器
# 拉取 mysql 镜像
docker pull mysql:8.0
# 使用 mysql 镜像创建容器(容器命名为 mysql;使用自定义网络,绑定IP为 10.1.0.2;将 docker 宿主机的 3307 端口映射到容器的 3306 端口;初始化 root 用户的密码为 123456;初始化数据库 ggb;挂载 mysql 数据和配置卷到本地,以持久化数据;设置字符集为 utf8mb4;排序规则为 utf8mb4_general_ci;)
docker run -itd --name mysql --network my-net --ip 10.1.0.2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ggb -v C:/dockerVolumes/mysql/data:/var/lib/mysql -v C:/dockerVolumes/mysql/mysql.conf.d:/etc/mysql/conf.d:ro --restart unless-stopped mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
# 拉取 redis 镜像
docker pull redis:latest
# 使用 redis 镜像创建容器(容器命名为 redis;使用自定义网络,绑定IP为 10.1.0.3;将 docker 宿主机的 6380 端口映射到容器的 6379 端口;挂载 redis 数据和配置卷到本地)
docker run -itd --name redis --network my-net --ip 10.1.0.3 -p 6380:6379 -v C:/dockerVolumes/redis/data:/data -v C:/dockerVolumes/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro --restart unless-stopped redis:latest
# 拉取 nginx 镜像
docker pull nginx:latest
# 使用 nginx 镜像创建容器(容器命名为 nginx;使用自定义网络,绑定IP为 10.1.0.4;将 docker 宿主机的 81 端口映射到容器的 80 端口;挂载 nginx 配置卷到本地)
docker run -itd --name nginx --network my-net --ip 10.1.0.4 -p 81:80 -v C:/dockerVolumes/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v C:/dockerVolumes/nginx/conf.d:/etc/nginx/conf.d:ro -v C:/dockerVolumes/nginx/html:/usr/share/nginx/html -v C:/dockerVolumes/nginx/log:/var/log/nginx --restart unless-stopped nginx:latest
3)修改 config.docker.yaml 配置
# 修改 mysql 配置
mysql:
host: 10.1.0.2 # 这里填mysql容器的IP
password: 123456 # 这里填mysql的root密码
# 修改 redis 配置
redis:
addr: 10.1.0.3:6379 # 这里填redis容器的IP:端口
# (无需执行,仅作命令展示)查看容器的 IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' containerName
4)创建本项目的 docker 镜像(docker image),并创建容器
# 创建项目的 docker 镜像(镜像名为 ggb,tag 默认为 latest,)
docker build -t ggb . # 也可指定 tag,如:docker build -t ggb:v0.0.1 .
# 创建项目容器(server 服务会在容器启动时自动运行)
docker run --name ggb_server --network my-net --ip 10.1.0.113 -p 5313:5312 --restart unless-stopped ggb
# (无需执行,仅作命令展示)启动已有容器,并附加到其控制台输出(-a),同时保持交互模式(-i)
docker start -a -i my-container
# 导出 docker 镜像
# eg:docker save -o <path_to_tar_file> <image_name>:<tag>
docker save -o ggb.tar ggb:latest
# 上传镜像文件
scp ggb.tar user@remote_host:/path/to/destination
# 加载 docker 镜像
# eg:docker load -i <path_to_tar_file>
docker load -i ggb.tar
# 确认镜像加载成功(你应该能看到 ggb:latest 镜像在列表中)
docker images
1)安装 docker-compose
# 更新包管理器和安装依赖
sudo apt update
sudo apt install -y curl
# 下载最新版本的 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建符号链接(可选,但推荐)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version # 这应该输出 Docker Compose 的版本号,表示安装成功
2)将本项目根目录下的 docker-compose.yml 复制到你的服务器上项目所处目录中去
3)在你的项目所处目录中,运行以下指令
# 启动所有服务
docker-compose up -d
# (需执行,仅作命令展示)查看运行中的服务
docker-compose ps
# (需执行,仅作命令展示)停止所有服务但不删除容器
docker-compose stop
# (需执行,仅作命令展示)停止所有服务并删除所有容器
docker-compose down
注意:如果发现 mysql 没有新建数据库 ggb,可能是因为已存在的 mysql 映射卷的缘故,请执行以下命令:
# 停止所有服务并删除所有容器
docker-compose down
# 删除 mysql 的映射卷
sudo rm -r C:/dockerVolumes/mysql/
# 重启启动所有服务
docker-compose up -d
使用 Navicat 等数据库工具,连接 docker 容器中的 mysql 即可,具体配置如下:
# 主机
localhost
# 端口
3307
# 用户名
root
# 密码
123456
# 数据库名称
ggb
# 确认 docker-compose 中 ggb_server 的 GIN_MODE=debug
ggb_server:
environment:
- GIN_MODE=debug
# 执行问题注解 3 中的步骤,导出镜像->加载镜像
# 使用 docker-compose 启动容器
docker-compose up -d
# 查看服务实时日志
docker logs -f ggb_server
# 生成/更新 API 文档
swag init
# 本地启动项目
go run main.go
# 访问本地 OpenAPI 地址
http://localhost:5312/swagger/index.html
# docker 启动项目(启动项目容器时,已经把 docker 宿主机的 5313 端口已经映射到容器的 5312 端口)
docker run -p 5313:5312 --name=ggb_server ggb
# 访问本地映射的 OpenAPI 地址
http://localhost:5313/swagger/index.html
# 下载前端项目到本地
git clone https://github.com/wangyupo/GGB_FE
# 进入项目目录
cd GGB_FE
# 安装依赖(node >= v20.16.0)
npm install
# 运行前端项目
npm run dev
1、v3s 基于 Vue3、Vite5、Vue Router、Pinia 和 Element Plus 构建的高效后台管理模板。结合 VSCode 插件 v3s snippets,助力快速开发业务应用。
2、vue3-cookbook 为您提供了一些组件化的范例和资源,以帮助您在 Vue 3 中起步。包括组合式 API (Composition API)、Pinia、Vue Router 使用示例,以及 axios 和 TailwindCSS 集成示例。
3、FE-Guide 本文档旨在为前端团队搭建一个标准化的技术栈和代码风格指南,帮助团队成员在开发过程中保持一致,提升整体开发体验。