Files
frps-console/Dockerfile
T

62 lines
1.8 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 多阶段构建
# ============================================================
# ---------- 构建阶段 ----------
FROM golang:alpine AS builder
WORKDIR /app
# 复制依赖文件(兼容 go.sum 可能不存在的情况)
COPY go.mod go.sum* ./
# 修复 go.mod 版本过高问题(frps 用 1.26.5,容器内 go 版本可能较低)
# 将 go 1.2x 降级为 go 1.21,确保兼容性
RUN sed -i 's/go 1.2[6-9].*/go 1.21/' go.mod && go mod tidy 2>/dev/null || true
# 设置 Go 代理(国内加速)
RUN go env -w GOPROXY=https://goproxy.cn,direct
# 下载依赖
RUN go mod download
# 复制全部源码(包含 bin/ 和 static/
COPY . .
# 静态编译 Linux 版本
# -p 1 降低并发编译内存峰值(适合低配机器)
# -s -w 去除调试信息,减小二进制体积
RUN CGO_ENABLED=0 GOOS=linux go build -p 1 -ldflags="-s -w" -o frps-console .
# ---------- 运行阶段 ----------
FROM alpine:latest
# 安装必要工具
# - ca-certificates: HTTPS 请求(frps 需要调用 Dashboard API
# - tzdata: 时区支持
# - sqlite: 用于 deploy.sh 中检查数据库状态
RUN apk --no-cache add ca-certificates tzdata sqlite
WORKDIR /app
# 从构建阶段复制编译好的二进制
COPY --from=builder /app/frps-console /app/frps-console
# 复制前端静态文件(从构建阶段)
COPY --from=builder /app/static/ /app/static/
# 创建数据目录(用于持久化 db、配置、日志、pid)
RUN mkdir -p /app/data
# 暴露端口(与 deploy.sh 中 DEFAULT_PORT 保持一致)
EXPOSE 9365
# 环境变量(可被 docker run -e 覆盖)
ENV PORT=9365
ENV TZ=Asia/Shanghai
# 数据卷(持久化数据库、配置、日志)
VOLUME ["/app/data"]
# 启动(使用 exec 确保信号正确传递)
ENTRYPOINT ["/app/frps-console"]