# 使用Debian 12 (bookworm) 最小化镜像作为基础
FROM debian:bookworm-slim

# 设置元数据标签
LABEL maintainer="小蚂蚁云团队" \
      version="1.0" \
      description="基于Debian的Go语言运行环境" \
      golang.version="1.27.2"

# 设置环境变量
ENV GO_VERSION=1.27.2 \
    GOPATH=/go \
    GOROOT=/usr/local/go \
    PATH=/usr/local/go/bin:/go/bin:${PATH} \
    TZ=Asia/Shanghai \
    LANG=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8 \
    DEBIAN_FRONTEND=noninteractive

# 设置工作目录
WORKDIR /tmp

# 安装必要的系统依赖和配置环境
RUN set -eux; \
    \
    # 配置阿里云Debian镜像源
    echo "deb http://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware" > /etc/apt/sources.list; \
    echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware" >> /etc/apt/sources.list; \
    echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware" >> /etc/apt/sources.list; \
    echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main non-free non-free-firmware" >> /etc/apt/sources.list; \
    \
    # 更新系统并安装基础工具
    apt-get update && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        tar \
        gzip \
        git \
        make \
        gcc \
        libc6-dev \
        locales \
        && \
    \
    # 配置时区
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone; \
    \
    # 设置语言环境（Debian方式）
    echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
    echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen && \
    locale-gen && \
    update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8; \
    \
    # 清理apt缓存以减少镜像大小
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 添加Go安装包（确保go1.27.2.linux-amd64.tar.gz在构建上下文）
ADD go1.27.2.linux-amd64.tar.gz /usr/local/

# 创建Go工作目录和配置
RUN set -eux; \
    \
    # 创建Go工作目录
    mkdir -p /go/src /go/bin /go/pkg && \
    chmod -R 755 /go; \
    \
    # 验证Go安装
    echo "=== 验证Go安装 ==="; \
    echo "Go二进制路径: $(which go)"; \
    echo "=== Go Version ==="; \
    go version && \
    \
    # 检查环境变量
    echo "=== Go Environment ==="; \
    go env && \
    \
    # 设置GOPROXY为国内镜像加速后续的go get操作
    go env -w GOPROXY=https://goproxy.cn,direct; \
    go env -w GOSUMDB=off; \
    \
    # 简单的Go程序编译测试
    echo 'package main; import "fmt"; func main() { fmt.Println("Go环境安装成功!") }' > /tmp/test.go && \
    go run /tmp/test.go && \
    rm -f /tmp/test.go; \
    \
    # 验证locale设置
    echo "=== Locale验证 ==="; \
    echo "系统Locale: $(locale)"; \
    echo "环境变量LANG: $LANG"; \
    echo "环境变量LC_ALL: $LC_ALL"

# 设置工作目录（Go项目目录）
WORKDIR /opt/apps

# 创建非root用户用于运行Go应用（安全性考虑）
RUN set -eux; \
    \
    # 创建用户和组
    groupadd -r esxi && \
    useradd -r -g esxi -d /opt/apps -s /bin/bash esxi && \
    \
    # 设置目录权限
    chown -R esxi:esxi /opt/apps && \
    chown -R esxi:esxi /go; \
    \
    # 验证用户创建
    echo "=== 用户验证 ==="; \
    id esxi && \
    echo "家目录权限: $(ls -ld /opt/apps)"

# 设置默认用户（注释掉以便调试）
# USER esxi

# 设置健康检查（可选）
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD go version > /dev/null 2>&1 || exit 1

# 设置默认启动命令
CMD ["go", "version"]