# 使用Ubuntu 22.04最小化镜像作为基础
FROM ubuntu:22.04

# 设置元数据标签
LABEL maintainer="小蚂蚁云团队" \
      version="1.0" \
      description="基于Ubuntu 22.04的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 \
    DEBIAN_FRONTEND=noninteractive

# 设置工作目录
WORKDIR /tmp

# 安装必要的系统依赖和配置环境
RUN set -eux; \
    \
    # 更新系统并安装基础工具
    apt-get update && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        tar \
        gzip \
        git \
        make \
        gcc \
        libc6-dev \
        locales \
        && \
    \
    # 清理apt缓存以减少镜像大小
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*; \
    \
    # 配置时区
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone; \
    \
    # 设置语言环境（Ubuntu方式）
    locale-gen en_US.UTF-8 && \
    update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8;

# 添加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; \
    \
    # 检查系统locale设置
    echo "=== Locale Settings ==="; \
    locale || echo "Locale info"; \
    echo "=== Environment Locale ==="; \
    echo "LANG=$LANG"; \
    \
    # 检查Go版本
    echo "=== Go Version ==="; \
    go version && \
    \
    # 检查环境变量
    echo "=== Go Environment ==="; \
    go env && \
    \
    # 简单的Go程序编译测试
    echo 'package main; import "fmt"; func main() { fmt.Println("Go环境安装成功!") }' > /tmp/test.go && \
    go run /tmp/test.go && \
    rm -f /tmp/test.go;

# 设置工作目录（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;

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

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

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