diff --git a/Dockerfile b/Dockerfile index 9110155..ee34116 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ -# 构建阶段 -FROM golang:1.21-alpine AS builder +# 构建阶段 - 使用多阶段构建减小镜像体积 +FROM golang:1.24-alpine AS builder # 安装构建依赖 -RUN apk add --no-cache git gcc musl-dev +RUN apk add --no-cache git gcc musl-dev sqlite-dev # 设置工作目录 WORKDIR /app -# 复制 go.mod 和 go.sum +# 复制依赖文件 COPY go.mod go.sum ./ # 下载依赖 @@ -16,34 +16,44 @@ RUN go mod download # 复制源代码 COPY . . -# 编译 -RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o sms-receiver main.go +# 编译 - 嵌入版本信息 +ARG VERSION=v2.0.0 +ARG BUILD_TIME=unknown +ARG GIT_COMMIT=unknown -# 运行阶段 -FROM alpine:latest +RUN CGO_ENABLED=1 GOOS=linux go build \ + -ldflags="-X 'main.Version=${VERSION}' -X 'main.BuildTime=${BUILD_TIME}' -X 'main.GitCommit=${GIT_COMMIT}' -X 'main.BuildEnv=docker' -w -s" \ + -a -installsuffix cgo \ + -o sms-receiver main.go -# 安装运行时依赖 -RUN apk --no-cache add ca-certificates sqlite tzdata +# 运行阶段 - 使用最小化 Alpine 镜像 +FROM alpine:3.19 -# 设置时区(可选) +# 仅安装必需的运行时依赖 +RUN apk --no-cache add \ + ca-certificates \ + tzdata \ + sqlite-libs + +# 设置时区 ENV TZ=Asia/Shanghai -# 创建非 root 用户 +# 创建非 root 用户(安全最佳实践) RUN addgroup -g 1000 appuser && \ adduser -D -u 1000 -G appuser appuser # 设置工作目录 WORKDIR /app -# 从构建阶段复制二进制文件 +# 从构建阶段复制二进制文件和配置示例 COPY --from=builder /app/sms-receiver . COPY --from=builder /app/config.example.yaml config.yaml -# 创建数据目录 -RUN mkdir -p /app/data && \ +# 创建数据目录并设置权限 +RUN mkdir -p /app/data /app/logs && \ chown -R appuser:appuser /app -# 切换用户 +# 切换到非 root 用户 USER appuser # 暴露端口 diff --git a/README.md b/README.md index 8514be2..582788c 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,24 @@ make run ### 方式 3: Docker 部署 +**使用 Docker Hub 镜像(推荐)**: + +```bash +# 拉取镜像 +docker pull ouaone/sms-receiver-go:latest + +# 运行容器 +docker run -d \ + --name sms-receiver-go \ + -p 28001:28001 \ + -v $(pwd)/config.yaml:/app/config.yaml:ro \ + -v $(pwd)/data:/app/data \ + --restart unless-stopped \ + ouaone/sms-receiver-go:latest +``` + +**从源码构建**: + ```bash # 构建镜像 make docker-build @@ -137,6 +155,8 @@ make docker-logs docker-compose up -d ``` +**Docker Hub**: https://hub.docker.com/r/ouaone/sms-receiver-go + ### 方式 4: 从源码编译 ```bash