Pulled build script out of Dockerfile to facilitate native builds, changed the base image from alpine-s6 to alpine and used tini as entrypoint

This commit is contained in:
Swarup Sengupta
2025-06-29 03:34:37 +05:30
parent 1e6b14afba
commit 02fe2a0c63
4 changed files with 177 additions and 62 deletions
+30 -29
View File
@@ -3,40 +3,41 @@ ARG GO_VERSION=1.24.1
FROM --platform=$BUILDPLATFORM golang:$GO_VERSION AS psiphon_builder
WORKDIR /go
LABEL stage=builder
ARG BUILDOS
ARG BUILDARCH
ARG TARGETS
ARG PSIPHON_VERSION
ENV DIR=/go/src/github.com/Psiphon-Labs/psiphon-tunnel-core
ENV GO111MODULE=off
ENV CGO_ENABLED=0
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ADD build.sh latest_version.sh /go/
RUN <<__SCRIPT__
TARGET_PALTFORMS=${TARGETS:-"$BUILDOS/$BUILDARCH"}
TARGET_PALTFORMS=${TARGET_PALTFORMS//,/ }
mkdir -p ${DIR}
curl -sL https://github.com/Psiphon-Labs/psiphon-tunnel-core/archive/refs/tags/v${PSIPHON_VERSION}.tar.gz | tar xz -C ${DIR} --strip-components=1
for PLATFORM in $TARGET_PALTFORMS
do
OS=${PLATFORM%%/*}
ARCH=${PLATFORM#*/}
ARCH=${ARCH%/*}
VERSION=${PLATFORM##*/}
TARGETVARIANT=${VERSION/$ARCH/}
VERSION=${TARGETVER/v/}
GOOS=${OS} GOARCH=${ARCH} go install -a -tags netgo -ldflags '-w -extldflags "-static"' github.com/Psiphon-Labs/psiphon-tunnel-core/ConsoleClient
BINARY=$(find /go/bin/* -name "ConsoleClient*")
mv ${BINARY} /go/psiphon_${OS}_${ARCH}_${TARGETVARIANT}
done
ARGS=""
if [ -n "${TARGETS}" ]; then
ARGS="${ARGS} --targets ${TARGETS}"
fi
if [ -n "${PSIPHON_VERSION}" ]; then
ARGS="${ARGS} --version ${PSIPHON_VERSION}"
fi
/go/build.sh ${ARGS}
__SCRIPT__
FROM swarupsengupta2007/alpine-s6:3.16.0
FROM alpine:3.22.0
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
COPY base/ /
COPY psiphon.config ${DEF_DEFAULTS}
COPY --from=psiphon_builder /go/psiphon_${TARGETOS}_${TARGETARCH}_${TARGETVARIANT} ${DEF_APP}/psiphon
EXPOSE 8080 1080
HEALTHCHECK --interval=30s --timeout=5s --start-period=2m --retries=3 CMD netstat -ltn|grep 1080 || exit 1
VOLUME /config
RUN --mount=type=bind,from=psiphon_builder,source=/go/dist,target=/tmp/psiphon \
--mount=type=bind,source=./assets,target=/tmp/assets \
<<__SCRIPT__
apk add --no-cache tini
cp /tmp/assets/start-psiphon /usr/local/bin/start-psiphon
cp /tmp/assets/healtcheck /usr/local/bin/healtcheck
mkdir -p /etc/psiphon
cp /tmp/assets/psiphon.config /etc/psiphon/psiphon.config
if [ -z "${TARGETVARIANT}" ]; then
cp /tmp/psiphon/psiphon_${TARGETOS}_${TARGETARCH} /usr/local/bin/psiphon
else
cp /tmp/psiphon/psiphon_${TARGETOS}_${TARGETARCH}_${TARGETVARIANT} /usr/local/bin/psiphon
fi
chmod +x /usr/local/bin/start-psiphon
chmod +x /usr/local/bin/healtcheck
chmod +x /usr/local/bin/psiphon
__SCRIPT__
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/local/bin/start-psiphon"]
HEALTHCHECK --interval=30s --timeout=5s --start-period=2m --retries=3 CMD healtcheck