|
|
@@ -0,0 +1,366 @@
|
|
|
+# Docker 构建和使用指南
|
|
|
+
|
|
|
+本文档说明如何将 License Admin 项目打包成 Linux x86_64 Docker 镜像并运行。
|
|
|
+
|
|
|
+## 📦 构建 Docker 镜像
|
|
|
+
|
|
|
+### 前置要求
|
|
|
+
|
|
|
+**重要:** Dockerfile 已简化为仅复制已构建的二进制文件,因此需要先编译好二进制文件。
|
|
|
+
|
|
|
+### 方法一:使用构建脚本(推荐)
|
|
|
+
|
|
|
+构建脚本会自动检查并编译二进制文件(如果不存在):
|
|
|
+
|
|
|
+```bash
|
|
|
+# 给脚本添加执行权限
|
|
|
+chmod +x build.sh
|
|
|
+
|
|
|
+# 构建 latest 版本(会自动编译二进制文件)
|
|
|
+./build.sh
|
|
|
+
|
|
|
+# 构建指定版本
|
|
|
+./build.sh v1.0.0
|
|
|
+
|
|
|
+# 构建并指定注册表(用于推送到 Docker Hub 或其他注册表)
|
|
|
+./build.sh v1.0.0 your-registry.com
|
|
|
+```
|
|
|
+
|
|
|
+### 方法二:手动编译后构建镜像
|
|
|
+
|
|
|
+```bash
|
|
|
+# 1. 先编译 Linux x86_64 二进制文件
|
|
|
+CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o license-admin .
|
|
|
+
|
|
|
+# 2. 构建 Docker 镜像
|
|
|
+docker build --platform linux/amd64 -t license-admin:latest .
|
|
|
+
|
|
|
+# 构建指定版本
|
|
|
+docker build --platform linux/amd64 -t license-admin:v1.0.0 .
|
|
|
+```
|
|
|
+
|
|
|
+### 方法三:使用 Docker Compose
|
|
|
+
|
|
|
+```bash
|
|
|
+# 构建并启动
|
|
|
+docker-compose up -d --build
|
|
|
+
|
|
|
+# 仅构建
|
|
|
+docker-compose build
|
|
|
+```
|
|
|
+
|
|
|
+## 🚀 运行容器
|
|
|
+
|
|
|
+### 基本运行(需要先启动 MySQL)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 方式1: 连接外部 MySQL(宿主机)
|
|
|
+docker run -d \
|
|
|
+ --name license-admin \
|
|
|
+ -p 8080:8080 \
|
|
|
+ -e DB_HOST=host.docker.internal \
|
|
|
+ -e DB_PORT=3306 \
|
|
|
+ -e DB_USER=root \
|
|
|
+ -e DB_PASSWORD=your-password \
|
|
|
+ -e DB_NAME=license_admin \
|
|
|
+ license-admin:latest
|
|
|
+```
|
|
|
+
|
|
|
+### 自定义认证 Token 和数据库配置
|
|
|
+
|
|
|
+```bash
|
|
|
+docker run -d \
|
|
|
+ --name license-admin \
|
|
|
+ -p 8080:8080 \
|
|
|
+ -e DB_HOST=mysql \
|
|
|
+ -e DB_PORT=3306 \
|
|
|
+ -e DB_USER=root \
|
|
|
+ -e DB_PASSWORD=your-password \
|
|
|
+ -e DB_NAME=license_admin \
|
|
|
+ -e AUTH_TOKEN=your-secret-token \
|
|
|
+ license-admin:latest
|
|
|
+```
|
|
|
+
|
|
|
+### 环境变量说明
|
|
|
+
|
|
|
+| 变量名 | 说明 | 默认值 | 必填 |
|
|
|
+|--------|------|--------|------|
|
|
|
+| `DB_HOST` | MySQL 主机地址 | `mysql` | 是 |
|
|
|
+| `DB_PORT` | MySQL 端口 | `3306` | 否 |
|
|
|
+| `DB_USER` | MySQL 用户名 | `root` | 否 |
|
|
|
+| `DB_PASSWORD` | MySQL 密码 | `password` | 是 |
|
|
|
+| `DB_NAME` | 数据库名称 | `license_admin` | 否 |
|
|
|
+| `AUTH_TOKEN` | 认证 Token | `admin-token-123456` | 否 |
|
|
|
+| `PORT` | 应用端口 | `8080` | 否 |
|
|
|
+
|
|
|
+### 使用 Docker Compose
|
|
|
+
|
|
|
+```bash
|
|
|
+# 创建数据目录
|
|
|
+mkdir -p ./data
|
|
|
+
|
|
|
+# 设置环境变量(可选)
|
|
|
+export AUTH_TOKEN=your-secret-token
|
|
|
+
|
|
|
+# 启动服务
|
|
|
+docker-compose up -d
|
|
|
+
|
|
|
+# 查看日志
|
|
|
+docker-compose logs -f
|
|
|
+
|
|
|
+# 停止服务
|
|
|
+docker-compose down
|
|
|
+```
|
|
|
+
|
|
|
+## 🔍 查看和管理
|
|
|
+
|
|
|
+### 查看容器状态
|
|
|
+
|
|
|
+```bash
|
|
|
+docker ps | grep license-admin
|
|
|
+```
|
|
|
+
|
|
|
+### 查看日志
|
|
|
+
|
|
|
+```bash
|
|
|
+# 实时日志
|
|
|
+docker logs -f license-admin
|
|
|
+
|
|
|
+# 最近 100 行日志
|
|
|
+docker logs --tail 100 license-admin
|
|
|
+```
|
|
|
+
|
|
|
+### 进入容器
|
|
|
+
|
|
|
+```bash
|
|
|
+docker exec -it license-admin sh
|
|
|
+```
|
|
|
+
|
|
|
+### 停止和删除容器
|
|
|
+
|
|
|
+```bash
|
|
|
+# 停止容器
|
|
|
+docker stop license-admin
|
|
|
+
|
|
|
+# 删除容器
|
|
|
+docker rm license-admin
|
|
|
+
|
|
|
+# 停止并删除
|
|
|
+docker rm -f license-admin
|
|
|
+```
|
|
|
+
|
|
|
+## 📤 推送镜像到注册表
|
|
|
+
|
|
|
+### 推送到 Docker Hub
|
|
|
+
|
|
|
+```bash
|
|
|
+# 登录 Docker Hub
|
|
|
+docker login
|
|
|
+
|
|
|
+# 标记镜像
|
|
|
+docker tag license-admin:latest your-username/license-admin:latest
|
|
|
+
|
|
|
+# 推送镜像
|
|
|
+docker push your-username/license-admin:latest
|
|
|
+```
|
|
|
+
|
|
|
+### 推送到私有注册表
|
|
|
+
|
|
|
+```bash
|
|
|
+# 标记镜像
|
|
|
+docker tag license-admin:latest registry.example.com/license-admin:latest
|
|
|
+
|
|
|
+# 推送镜像
|
|
|
+docker push registry.example.com/license-admin:latest
|
|
|
+```
|
|
|
+
|
|
|
+## 🔧 配置说明
|
|
|
+
|
|
|
+### 环境变量
|
|
|
+
|
|
|
+| 变量名 | 说明 | 默认值 |
|
|
|
+|--------|------|--------|
|
|
|
+| `AUTH_TOKEN` | 认证 Token | `admin-token-123456` |
|
|
|
+| `PORT` | 服务端口 | `8080` |
|
|
|
+
|
|
|
+### MySQL 数据库配置
|
|
|
+
|
|
|
+项目使用 MySQL 数据库,需要配置以下环境变量:
|
|
|
+
|
|
|
+```bash
|
|
|
+docker run -d \
|
|
|
+ --name license-admin \
|
|
|
+ -p 8080:8080 \
|
|
|
+ -e DB_HOST=your-mysql-host \
|
|
|
+ -e DB_PORT=3306 \
|
|
|
+ -e DB_USER=root \
|
|
|
+ -e DB_PASSWORD=your-password \
|
|
|
+ -e DB_NAME=license_admin \
|
|
|
+ license-admin:latest
|
|
|
+```
|
|
|
+
|
|
|
+### 数据持久化
|
|
|
+
|
|
|
+MySQL 数据通过 Docker volume 持久化。使用 Docker Compose 时会自动创建 `mysql_data` volume。
|
|
|
+
|
|
|
+### 端口映射
|
|
|
+
|
|
|
+默认端口为 8080,可以通过 `-p` 参数映射到其他端口:
|
|
|
+
|
|
|
+```bash
|
|
|
+-p 9000:8080 # 将容器 8080 端口映射到宿主机 9000 端口
|
|
|
+```
|
|
|
+
|
|
|
+## 🏥 健康检查
|
|
|
+
|
|
|
+镜像内置了健康检查,每 30 秒检查一次:
|
|
|
+
|
|
|
+```bash
|
|
|
+# 查看健康状态
|
|
|
+docker inspect --format='{{.State.Health.Status}}' license-admin
|
|
|
+```
|
|
|
+
|
|
|
+## 🐛 故障排查
|
|
|
+
|
|
|
+### 容器无法启动
|
|
|
+
|
|
|
+1. 查看容器日志:
|
|
|
+ ```bash
|
|
|
+ docker logs license-admin
|
|
|
+ ```
|
|
|
+
|
|
|
+2. 检查端口是否被占用:
|
|
|
+ ```bash
|
|
|
+ netstat -tuln | grep 8080
|
|
|
+ ```
|
|
|
+
|
|
|
+### 数据库连接问题
|
|
|
+
|
|
|
+如果遇到数据库连接问题:
|
|
|
+
|
|
|
+1. 检查 MySQL 服务是否运行:
|
|
|
+ ```bash
|
|
|
+ docker ps | grep mysql
|
|
|
+ ```
|
|
|
+
|
|
|
+2. 检查数据库连接配置:
|
|
|
+ ```bash
|
|
|
+ docker exec license-admin env | grep DB_
|
|
|
+ ```
|
|
|
+
|
|
|
+3. 测试 MySQL 连接:
|
|
|
+ ```bash
|
|
|
+ docker exec -it license-admin-mysql mysql -u root -p
|
|
|
+ ```
|
|
|
+
|
|
|
+4. 查看应用日志:
|
|
|
+ ```bash
|
|
|
+ docker logs license-admin
|
|
|
+ ```
|
|
|
+
|
|
|
+### 无法访问服务
|
|
|
+
|
|
|
+1. 检查容器是否运行:
|
|
|
+ ```bash
|
|
|
+ docker ps | grep license-admin
|
|
|
+ ```
|
|
|
+
|
|
|
+2. 检查端口映射:
|
|
|
+ ```bash
|
|
|
+ docker port license-admin
|
|
|
+ ```
|
|
|
+
|
|
|
+3. 检查防火墙设置
|
|
|
+
|
|
|
+## 📝 生产环境建议
|
|
|
+
|
|
|
+1. **使用强密码 Token**
|
|
|
+ ```bash
|
|
|
+ -e AUTH_TOKEN=$(openssl rand -hex 32)
|
|
|
+ ```
|
|
|
+
|
|
|
+2. **使用 HTTPS**
|
|
|
+ - 在容器前放置反向代理(如 Nginx)
|
|
|
+ - 配置 SSL 证书
|
|
|
+
|
|
|
+3. **定期备份数据库**
|
|
|
+ ```bash
|
|
|
+ # 备份 MySQL 数据库
|
|
|
+ docker exec license-admin-mysql mysqldump -u root -p license_admin > backup_$(date +%Y%m%d).sql
|
|
|
+ ```
|
|
|
+
|
|
|
+4. **资源限制**
|
|
|
+ ```bash
|
|
|
+ docker run -d \
|
|
|
+ --name license-admin \
|
|
|
+ --memory="512m" \
|
|
|
+ --cpus="1.0" \
|
|
|
+ -p 8080:8080 \
|
|
|
+ license-admin:latest
|
|
|
+ ```
|
|
|
+
|
|
|
+5. **使用 Docker Compose 管理**
|
|
|
+ - 便于配置管理
|
|
|
+ - 支持自动重启
|
|
|
+ - 便于扩展
|
|
|
+
|
|
|
+## 🔐 安全建议
|
|
|
+
|
|
|
+1. **不要使用默认 Token**
|
|
|
+ - 生产环境必须修改 `AUTH_TOKEN`
|
|
|
+ - 使用强随机密码
|
|
|
+
|
|
|
+2. **限制网络访问**
|
|
|
+ - 使用防火墙规则
|
|
|
+ - 仅暴露必要端口
|
|
|
+
|
|
|
+3. **定期更新镜像**
|
|
|
+ - 关注安全更新
|
|
|
+ - 定期重建镜像
|
|
|
+
|
|
|
+4. **数据加密**
|
|
|
+ - 考虑对数据库文件进行加密
|
|
|
+ - 使用加密的 volume
|
|
|
+
|
|
|
+## 📊 监控
|
|
|
+
|
|
|
+### 查看资源使用
|
|
|
+
|
|
|
+```bash
|
|
|
+docker stats license-admin
|
|
|
+```
|
|
|
+
|
|
|
+### 查看容器信息
|
|
|
+
|
|
|
+```bash
|
|
|
+docker inspect license-admin
|
|
|
+```
|
|
|
+
|
|
|
+## 🎯 快速开始示例
|
|
|
+
|
|
|
+```bash
|
|
|
+# 1. 构建镜像
|
|
|
+./build.sh
|
|
|
+
|
|
|
+# 2. 创建数据目录
|
|
|
+mkdir -p ./data
|
|
|
+
|
|
|
+# 3. 运行容器
|
|
|
+docker run -d \
|
|
|
+ --name license-admin \
|
|
|
+ -p 8080:8080 \
|
|
|
+ -v $(pwd)/data:/app/data \
|
|
|
+ -e AUTH_TOKEN=my-secret-token-123 \
|
|
|
+ license-admin:latest
|
|
|
+
|
|
|
+# 4. 访问服务
|
|
|
+curl http://localhost:8080/health
|
|
|
+
|
|
|
+# 5. 打开浏览器
|
|
|
+open http://localhost:8080
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+**注意:** 首次运行会自动创建数据库文件。确保挂载的数据目录有写权限。
|
|
|
+
|