Linux安装snail007/goproxy控制面板ProxyAdmin 项目地址:https://github.com/snail007/proxy_admin_free 安装成功后我们在浏览器里面打开http://127.0.0.1:32080 , 用默认账号 root 123 登录
让我先分析一下项目结构和内容,以便了解需要在Dockerfile中包含哪些内容。我会先列出项目中的文件,然后查看关键文件来确定项目的类型和依赖。
list_files .
我看到这是一个Go语言编写的代理服务器项目(goproxy)。让我继续查看更多文件来了解项目的具体结构和依赖。我注意到项目中已经有一个Dockerfile,让我先看看它的内容。
read_file Dockerfile
我看到现有的Dockerfile采用了多阶段构建,这是一个好的实践。不过,我们可以对它进行一些改进:
让我修改Dockerfile来实现这些改进。
write_to_file Dockerfile
FROM golang:1.22.5-alpine3.20 as builder
WORKDIR /build
COPY go.mod go.sum ./ RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o goproxy
FROM alpine:3.20
LABEL maintainer="Tencent Cloud" LABEL description="GoProxy - A high performance HTTP(S), SOCKS4/5, WebSocket proxy server" LABEL version="1.0"
RUN apk --no-cache add ca-certificates tzdata &&
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" > /etc/timezone &&
apk del tzdata
RUN adduser -D -H -s /sbin/nologin goproxy
WORKDIR /app
COPY --from=builder /build/goproxy .
RUN chown -R goproxy:goproxy /app
USER goproxy
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
CMD ["./goproxy"]
让我解释一下对Dockerfile的主要改进:
多阶段构建优化:
安全性改进:
运行时优化:
最佳实践:
让我检查一下项目中是否有go.mod文件,因为新的Dockerfile假设使用了Go modules。
read_file go.mod
我注意到项目中没有go.mod文件,这说明项目可能使用的是较旧的Go项目结构。让我修改Dockerfile以适应这种情况。我们需要:
让我修改Dockerfile来处理这种情况。
write_to_file Dockerfile
FROM golang:1.22.5-alpine3.20 as builder
ENV GOPATH /go ENV GO111MODULE=off ENV CGO_ENABLED=0 ENV GOOS=linux
RUN apk add --no-cache git
WORKDIR /go/src/goproxy
COPY . .
RUN go build -a -installsuffix cgo -o goproxy
FROM alpine:3.20
LABEL maintainer="Tencent Cloud" LABEL description="GoProxy - A high performance HTTP(S), SOCKS4/5, WebSocket proxy server" LABEL version="1.0"
RUN apk --no-cache add ca-certificates tzdata &&
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" > /etc/timezone &&
apk del tzdata
RUN adduser -D -H -s /sbin/nologin goproxy
WORKDIR /app
COPY --from=builder /go/src/goproxy/goproxy .
COPY --from=builder /go/src/goproxy/blocked /app/blocked COPY --from=builder /go/src/goproxy/direct /app/direct
RUN chown -R goproxy:goproxy /app
USER goproxy
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
CMD ["./goproxy"]
让我解释一下对Dockerfile的主要修改和改进:
构建阶段的改变:
GO111MODULE=off)配置文件处理:
blocked和direct配置文件的复制保留了之前的改进:
让我检查一下项目中是否有构建脚本或其他配置文件,以确保我们没有遗漏任何重要的构建步骤。
read_file goproxy/docker/build.sh
我看到原始项目使用了一个预编译的二进制文件(proxy-linux-amd64.tar.gz)而不是从源代码构建。让我根据这个发现修改Dockerfile,使其更接近原始项目的构建方式。
主要改变将包括:
write_to_file Dockerfile
FROM alpine:3.20 as downloader
RUN apk add --no-cache wget tar
WORKDIR /download
RUN wget https://mirrors.host900.com/snail007/goproxy/proxy-linux-amd64.tar.gz &&
tar zxf proxy-linux-amd64.tar.gz &&
chmod +x proxy
FROM alpine:3.20
LABEL maintainer="Tencent Cloud" LABEL description="GoProxy - A high performance HTTP(S), SOCKS4/5, WebSocket proxy server" LABEL version="1.0"
RUN apk --no-cache add ca-certificates tzdata &&
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" > /etc/timezone &&
apk del tzdata
RUN adduser -D -H -s /sbin/nologin goproxy
WORKDIR /app
COPY --from=downloader /download/proxy . COPY blocked /app/blocked COPY direct /app/direct
RUN chown -R goproxy:goproxy /app
USER goproxy
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
ENTRYPOINT ["./proxy"] CMD ["http"]
让我解释一下最新版本Dockerfile的主要改进:
简化的构建过程:
安全性改进:
运行时优化:
最佳实践:
要构建和运行这个Docker镜像,可以使用以下命令:
# 构建镜像
docker build -t goproxy:latest .
# 运行容器
docker run -d -p 8080:8080 --name goproxy goproxy:latest
# 如果需要使用其他代理模式,可以在运行时覆盖默认命令
# 例如启动SOCKS5代理:
docker run -d -p 1080:1080 --name goproxy goproxy:latest socks
让我使用attempt_completion来总结这个任务。