RayWangQvQ / naiveproxy-docker

naiveproxy in docker
162 stars 56 forks source link

一些可能有用的建议 #6

Closed chenkx-cd closed 9 months ago

chenkx-cd commented 1 year ago

Dockerfile

我注意到你的 Dockerfile 代码似乎走了一些弯路,以至于后面的 docker-compose.yml 也多了一些不必要的配置。下面是我使用的 Dockerfile

FROM golang:alpine AS build

RUN go version \
    && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

WORKDIR /go

RUN xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive

# Get caddy alpine image to keep the container as small as possible
FROM caddy:alpine AS final

# Copy caddy executable from builder step
COPY --from=build /go/caddy /usr/bin/caddy

最后构建出来的 image 的大小也小一些

Web capture_28-3-2023_194133_hub docker com

docker-compose.yml

关于 docker-compose.yml 可以参考 caddy 官方的 Docker Compose example

建议在 docker-compose.yml 中添加 443/udp 端口,NaïveProxy 已经支持 quic 协议,我测试了比 https 速度会快一些。

Web capture_30-3-2023_121034_github com

RayWangQvQ commented 1 year ago

感谢建议!

镜像大小是基础镜像造成的,你上面是基于alphine,我的是基于debian,它们因为系统和预装的差别,debian会稍微大一些,但功能也更齐全些。

我看到你这边没有装ca-certificates,是不是使用的是已有证书模式?我之前自己的测试结果是,不安装会导致Caddy自动颁发证书失败(https://github.com/abiosoft/caddy-docker/issues/173),你可以测试下看看。

还有区别就是,打镜像时有没有update包源,上面这样不update也是ok的,那就是当用户进入容器后需要捣鼓时,自己再手动update。

我目前这样写的原因,主要基于一个假设:用户可能会想进入到容器内去自己捣鼓一些东西。 基于这个假设,所以想选功能更齐全一些的debian,然后包尽量也都预先处理好。

chenkx-cd commented 1 year ago

我的测试结果是 Caddy 可以成功自动颁发证书,不知道你失败的原因是什么。

关于 ca-certificates,我看了 caddy 官方的 Dockerfile,在第4行有添加 ca-certificates。

update 包源有什么原因?如果只是安装 ca-certificates,这个问题在上面已经解决。

RayWangQvQ commented 1 year ago

好的,稍后我会对ca-certificates再次进行测试

willisworley commented 11 months ago

@RayWangQvQ 哈哈,老哥,能不能一时兴起把xray reality docker也写了。

chenkx-cd commented 9 months ago

最近使用的基于 Debian 的 Dockerfile,能自动申请证书

# 进行多平台构建时,在构建阶段的 `FROM` 中指明 `--platform=$BUILDPLATFORM`,利用交叉编译加速构建,见 https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/
FROM --platform=$BUILDPLATFORM golang:1.20-bookworm AS build

WORKDIR /go

RUN set -eux \
    && go version \
    && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest \
    && /go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \
    && wget "https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile" \
    && wget "https://raw.githubusercontent.com/caddyserver/dist/master/welcome/index.html"

# `FROM` 中未指明 `--platform` 时,默认自动添加 `--platform=$TARGETPLATFORM`,因此运行时阶段不需要特别指明
FROM debian:bookworm-slim

RUN set -eux \
    && mkdir -p \
    /config/caddy \
    /data/caddy \
    /etc/caddy \
    /usr/share/caddy

# 从构建阶段中复制 caddy 可执行文件等
COPY --from=build /go/caddy /usr/bin/caddy
COPY --from=build /go/Caddyfile /etc/caddy/Caddyfile
COPY --from=build /go/index.html /usr/share/caddy/index.html

RUN set -eux \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates libcap2-bin mailcap \
    && setcap cap_net_bind_service=+ep /usr/bin/caddy \
    && chmod +x /usr/bin/caddy \
    && caddy version \
    && apt-get remove --purge --auto-remove -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 见 https://caddyserver.com/docs/conventions#file-locations
ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data

EXPOSE 80
EXPOSE 443
EXPOSE 443/udp
EXPOSE 2019

WORKDIR /srv

CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
mewtwotwo commented 9 months ago

最近使用的基于 Debian 的 Dockerfile,能自动申请证书

# 进行多平台构建时,在构建阶段的 `FROM` 中指明 `--platform=$BUILDPLATFORM`,利用交叉编译加速构建,见 https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/
FROM --platform=$BUILDPLATFORM golang:1.20-bookworm AS build

WORKDIR /go

RUN set -eux \
    && go version \
    && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest \
    && /go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \
    && wget "https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile" \
    && wget "https://raw.githubusercontent.com/caddyserver/dist/master/welcome/index.html"

# `FROM` 中未指明 `--platform` 时,默认自动添加 `--platform=$TARGETPLATFORM`,因此运行时阶段不需要特别指明
FROM debian:bookworm-slim

RUN set -eux \
    && mkdir -p \
    /config/caddy \
    /data/caddy \
    /etc/caddy \
    /usr/share/caddy

# 从构建阶段中复制 caddy 可执行文件等
COPY --from=build /go/caddy /usr/bin/caddy
COPY --from=build /go/Caddyfile /etc/caddy/Caddyfile
COPY --from=build /go/index.html /usr/share/caddy/index.html

RUN set -eux \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates libcap2-bin mailcap \
    && setcap cap_net_bind_service=+ep /usr/bin/caddy \
    && chmod +x /usr/bin/caddy \
    && caddy version \
    && apt-get remove --purge --auto-remove -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 见 https://caddyserver.com/docs/conventions#file-locations
ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data

EXPOSE 80
EXPOSE 443
EXPOSE 443/udp
EXPOSE 2019

WORKDIR /srv

CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]

你这个证书到期能自动续吗