build.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. # License Admin Docker 构建脚本
  3. # 用于构建 Linux x86_64 Docker 镜像
  4. # 注意:需要先编译好二进制文件
  5. set -e
  6. # 颜色输出
  7. RED='\033[0;31m'
  8. GREEN='\033[0;32m'
  9. YELLOW='\033[1;33m'
  10. NC='\033[0m' # No Color
  11. # 配置
  12. IMAGE_NAME="license-admin"
  13. VERSION="${1:-latest}"
  14. REGISTRY="${2:-}"
  15. echo -e "${GREEN}========================================${NC}"
  16. echo -e "${GREEN}License Admin Docker 构建脚本${NC}"
  17. echo -e "${GREEN}========================================${NC}"
  18. echo ""
  19. # 检查 Docker 是否安装
  20. if ! command -v docker &> /dev/null; then
  21. echo -e "${RED}错误: Docker 未安装,请先安装 Docker${NC}"
  22. exit 1
  23. fi
  24. # 检查二进制文件是否存在
  25. if [ ! -f "./license-admin" ]; then
  26. echo -e "${YELLOW}警告: 未找到二进制文件 license-admin${NC}"
  27. echo -e "${YELLOW}正在编译二进制文件...${NC}"
  28. # 编译 Linux x86_64 二进制文件
  29. CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o license-admin .
  30. if [ $? -ne 0 ]; then
  31. echo -e "${RED}错误: 编译失败${NC}"
  32. exit 1
  33. fi
  34. echo -e "${GREEN}✓ 编译成功${NC}"
  35. echo ""
  36. fi
  37. # 显示构建信息
  38. echo -e "${YELLOW}构建信息:${NC}"
  39. echo " 镜像名称: ${IMAGE_NAME}"
  40. echo " 版本标签: ${VERSION}"
  41. if [ -n "$REGISTRY" ]; then
  42. echo " 注册表: ${REGISTRY}"
  43. FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${VERSION}"
  44. else
  45. FULL_IMAGE_NAME="${IMAGE_NAME}:${VERSION}"
  46. fi
  47. echo " 完整镜像名: ${FULL_IMAGE_NAME}"
  48. echo ""
  49. # 构建 Docker 镜像
  50. echo -e "${YELLOW}开始构建 Docker 镜像...${NC}"
  51. docker build \
  52. --platform linux/amd64 \
  53. -t "${FULL_IMAGE_NAME}" \
  54. -t "${IMAGE_NAME}:latest" \
  55. .
  56. if [ $? -eq 0 ]; then
  57. echo ""
  58. echo -e "${GREEN}✓ 构建成功!${NC}"
  59. echo ""
  60. echo -e "${YELLOW}镜像信息:${NC}"
  61. docker images "${IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
  62. echo ""
  63. echo -e "${YELLOW}使用方法:${NC}"
  64. echo " 运行容器(需要先启动 MySQL):"
  65. echo " docker run -d -p 8080:8080 \\"
  66. echo " -e DB_HOST=mysql \\"
  67. echo " -e DB_PORT=3306 \\"
  68. echo " -e DB_USER=root \\"
  69. echo " -e DB_PASSWORD=your-password \\"
  70. echo " -e DB_NAME=license_admin \\"
  71. echo " --name license-admin ${FULL_IMAGE_NAME}"
  72. echo ""
  73. echo " 运行容器(连接外部 MySQL):"
  74. echo " docker run -d -p 8080:8080 \\"
  75. echo " -e DB_HOST=host.docker.internal \\"
  76. echo " -e DB_PORT=3306 \\"
  77. echo " -e DB_USER=root \\"
  78. echo " -e DB_PASSWORD=your-password \\"
  79. echo " -e DB_NAME=license_admin \\"
  80. echo " -e AUTH_TOKEN=your-token \\"
  81. echo " --name license-admin ${FULL_IMAGE_NAME}"
  82. echo ""
  83. echo " 使用 Docker Compose(推荐,自动启动 MySQL):"
  84. echo " docker-compose up -d"
  85. echo ""
  86. if [ -n "$REGISTRY" ]; then
  87. echo -e "${YELLOW}推送到注册表:${NC}"
  88. echo " docker push ${FULL_IMAGE_NAME}"
  89. echo ""
  90. fi
  91. else
  92. echo ""
  93. echo -e "${RED}✗ 构建失败!${NC}"
  94. exit 1
  95. fi