change Dockerfile
This commit is contained in:
1 parent
fe3e8809fa
commit
5547e55149
1 file changed
+5
-50
+5
-50
@@ -46,54 +46,10 @@ RUN set -eux; \
|
||||
find /opt/venv -path '*/site-packages/wheel*' -print0 | xargs -0 -r rm -rf || true; \
|
||||
true
|
||||
|
||||
# Download Caddy binary for the build target (multi-arch aware)
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
RUN set -eux; \
|
||||
DARCH="${TARGETARCH:-$(dpkg --print-architecture)}"; \
|
||||
VARIANT="${TARGETVARIANT:-}"; \
|
||||
case "$DARCH" in \
|
||||
amd64) ARCH=amd64 ;; \
|
||||
arm64) ARCH=arm64 ;; \
|
||||
arm) if [ "${VARIANT}" = "v7" ]; then ARCH=armv7; else ARCH=arm; fi ;; \
|
||||
*) ARCH=amd64 ;; \
|
||||
esac; \
|
||||
echo "Downloading Caddy for arch=${ARCH}"; \
|
||||
# Try multiple candidate arch names for robustness (especially for arm variants)
|
||||
candidates="${ARCH}"; \
|
||||
if [ "${ARCH}" = "armv7" ]; then candidates="armv7 arm armv6"; fi; \
|
||||
if [ "${ARCH}" = "arm" ]; then candidates="arm armv7 armv6"; fi; \
|
||||
downloaded=0; \
|
||||
for a in $candidates; do \
|
||||
echo "Trying caddy download arch=$a"; \
|
||||
if curl -fsSL "https://caddyserver.com/api/download?os=linux&arch=$a" -o /tmp/caddy_dl; then \
|
||||
echo "Downloaded caddy for arch=$a"; downloaded=1; break; \
|
||||
else \
|
||||
echo "No binary for arch=$a"; fi; \
|
||||
done; \
|
||||
if [ "$downloaded" -ne 1 ]; then echo "Failed to download Caddy for any candidate: $candidates" >&2; exit 1; fi; \
|
||||
# If it's a tar.gz archive, extract it; otherwise treat as raw binary
|
||||
if tar -tzf /tmp/caddy_dl >/dev/null 2>&1; then \
|
||||
tar -xzf /tmp/caddy_dl -C /tmp; \
|
||||
else \
|
||||
mv /tmp/caddy_dl /tmp/caddy_raw || true; \
|
||||
fi; \
|
||||
mkdir -p /tmp/caddy_bin_dir; \
|
||||
# Preferred locations
|
||||
if [ -f /tmp/caddy ]; then mv /tmp/caddy /tmp/caddy_bin_dir/caddy; fi; \
|
||||
if [ -f /tmp/caddy_linux_${ARCH} ]; then mv /tmp/caddy_linux_${ARCH} /tmp/caddy_bin_dir/caddy; fi; \
|
||||
if [ -f /tmp/caddy_raw ]; then mv /tmp/caddy_raw /tmp/caddy_bin_dir/caddy; fi; \
|
||||
# Fallback: find any executable named 'caddy' under /tmp
|
||||
if [ ! -f /tmp/caddy_bin_dir/caddy ]; then \
|
||||
found=$(find /tmp -type f -name caddy -perm /111 -print -quit || true); \
|
||||
if [ -n "$found" ]; then mv "$found" /tmp/caddy_bin_dir/caddy; fi; \
|
||||
fi; \
|
||||
if [ ! -f /tmp/caddy_bin_dir/caddy ]; then echo "Caddy binary not found after download" >&2; exit 1; fi; \
|
||||
chmod +x /tmp/caddy_bin_dir/caddy; \
|
||||
# Strip Caddy to reduce size
|
||||
if command -v strip >/dev/null 2>&1; then strip --strip-unneeded /tmp/caddy_bin_dir/caddy || true; fi
|
||||
# Stage 2: official multi-arch Caddy image (amd64, arm64, arm/v7) used as the binary source
|
||||
FROM caddy:2 AS caddy
|
||||
|
||||
# Stage 2: Final - minimal runtime image
|
||||
# Stage 3: Final - minimal runtime image
|
||||
FROM python:3.11-slim-bookworm
|
||||
|
||||
# Install only runtime dependencies (no build tools)
|
||||
@@ -122,9 +78,8 @@ RUN mkdir -p /app/src/.ssh && chown webssh:webssh /app/src/.ssh
|
||||
# Copy entrypoint
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
|
||||
# Copy the Caddy binary prepared in the builder stage
|
||||
COPY --from=builder /tmp/caddy_bin_dir/caddy /usr/local/bin/caddy
|
||||
RUN chmod +x /usr/local/bin/caddy || true
|
||||
# Copy the Caddy binary from the official image
|
||||
COPY --from=caddy /usr/bin/caddy /usr/local/bin/caddy
|
||||
|
||||
# Copy Caddyfile and static assets after package installation to avoid dpkg conffile prompts
|
||||
COPY deployment/Caddyfile /etc/caddy/Caddyfile
|
||||
|
||||
Reference in new issue
Block a user