Files
aria2-ariang-docker/Dockerfile.optimized
2025-06-20 22:09:41 +10:00

159 lines
5.0 KiB
Docker

# Multi-stage build - Build forego with golang
FROM golang:1.21-alpine AS build-forego
RUN apk add --no-cache git
WORKDIR /app
RUN git clone https://github.com/wahyd4/forego.git \
&& cd forego \
&& git checkout fix-go-mod \
&& go mod download \
&& CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o forego \
&& chmod +x forego
# Build stage for downloading and preparing binaries
FROM alpine:3.19 AS build-deps
# Set versions - centralized for easy updates
ARG CADDY_VERSION=2.9.1
ARG FILEBROWSER_VERSION=v2.32.0
ARG RCLONE_VERSION=v1.69.1
ARG ARIANG_VERSION=1.3.10
# Install build dependencies
RUN apk add --no-cache \
wget \
unzip \
tar \
curl
WORKDIR /tmp
# Detect architecture and set platform variables
RUN case "$(arch)" in \
x86_64) \
PLATFORM=linux-amd64; \
CADDY_FILE=caddy_${CADDY_VERSION}_linux_amd64.tar.gz; \
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-amd64.zip; \
;; \
armv7l) \
PLATFORM=linux-armv7; \
CADDY_FILE=caddy_${CADDY_VERSION}_linux_armv7.tar.gz; \
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-arm-v7.zip; \
;; \
aarch64) \
PLATFORM=linux-arm64; \
CADDY_FILE=caddy_${CADDY_VERSION}_linux_arm64.tar.gz; \
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-arm64.zip; \
;; \
*) \
echo "[ERROR] unsupported arch $(arch), exit now"; \
exit 1; \
;; \
esac \
&& echo "PLATFORM=${PLATFORM}" > /tmp/platform.env \
&& echo "CADDY_FILE=${CADDY_FILE}" >> /tmp/platform.env \
&& echo "RCLONE_FILE=${RCLONE_FILE}" >> /tmp/platform.env
# Download and extract binaries
RUN . /tmp/platform.env \
&& mkdir -p /app/bin /app/www \
# Download Caddy
&& wget -O caddy.tar.gz "https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/${CADDY_FILE}" \
&& tar -xzf caddy.tar.gz -C /app/bin \
# Download Filebrowser
&& wget -O filebrowser.tar.gz "https://github.com/filebrowser/filebrowser/releases/download/${FILEBROWSER_VERSION}/${PLATFORM}-filebrowser.tar.gz" \
&& tar -xzf filebrowser.tar.gz -C /app/bin \
# Download Rclone
&& wget -O rclone.zip "https://downloads.rclone.org/${RCLONE_VERSION}/${RCLONE_FILE}" \
&& unzip rclone.zip \
&& cp rclone-*/rclone /app/bin/ \
# Download AriaNg
&& wget -O ariang.zip "https://github.com/mayswind/AriaNg/releases/download/${ARIANG_VERSION}/AriaNg-${ARIANG_VERSION}.zip" \
&& unzip ariang.zip -d /app/www/aria2 \
# Download custom browse.html
&& wget -O /app/browse.html "https://raw.githubusercontent.com/glowinthedark/caddy-file-server-browse-extension/39e997c91539d0f04fcce53a3cb6605b2ae9e50c/browse.html" \
# Clean up
&& rm -rf *.tar.gz *.zip rclone-*
# Final runtime stage - use Alpine for minimal size
FROM alpine:3.19
LABEL AUTHOR=Junv<wahyd4@gmail.com>
WORKDIR /app
# Runtime environment variables
ENV RPC_SECRET="" \
ENABLE_AUTH=false \
ENABLE_RCLONE=true \
DOMAIN=:80 \
ARIA2_USER=user \
ARIA2_PWD=password \
ARIA2_SSL=false \
ARIA2_EXTERNAL_PORT=80 \
PUID=1000 \
PGID=1000 \
CADDYPATH=/app \
RCLONE_CONFIG=/app/conf/rclone.conf \
XDG_DATA_HOME=/app/.caddy/data \
XDG_CONFIG_HOME=/app/.caddy/config \
XDG_CACHE_HOME=/app/.cache \
RCLONE_CONFIG_BASE64="" \
ENABLE_APP_CHECKER=true \
ENABLE_FILEBROWSER=true \
CADDY_LOG_LEVEL=INFO \
RCLONE_AUTO_UPLOAD_PROVIDER= \
RCLONE_AUTO_UPLOAD_REMOTE_PATH=/downloads \
RCLONE_AUTO_UPLOAD_FILE_MIN_SIZE=1K \
RCLONE_AUTO_UPLOAD_FILE_MAX_SIZE=100G \
FIX_DATA_VOLUME_PERMISSIONS=false \
CADDY_FILE_SERVER_BROWSE_HTML=/app/browse.html
# Install runtime dependencies
RUN apk add --no-cache \
aria2 \
curl \
bash \
libcap \
runit \
shadow \
&& addgroup -g 1000 junv \
&& adduser -D -u 1000 -G junv -s /bin/bash junv \
&& rm -rf /var/cache/apk/*
# Copy pre-built binaries from build stage
COPY --from=build-deps /app/bin/* /usr/local/bin/
COPY --from=build-deps /app/www /usr/local/www/
COPY --from=build-deps /app/browse.html /app/
COPY --from=build-forego /app/forego/forego /app/
# Copy application files
COPY --chmod=755 aria2c.sh caddy.sh filebrowser.sh init.sh start.sh rclone.sh new-version-checker.sh /app/
COPY Procfile APP_VERSION /app/
COPY conf /app/conf/
COPY Caddyfile SecureCaddyfile HerokuCaddyfile /usr/local/caddy/
# Set up permissions and directories
RUN chmod +x /usr/local/bin/* \
&& mkdir -p /usr/local/www/aria2/Download \
&& chmod +rw /app/conf/aria2.session \
&& chmod -R 755 /usr/local/www/aria2 \
&& mkdir -p /data /data/cloud /app/.caddy /app/.cache/aria2 \
&& chown -R junv:junv /data /app/.caddy /app/.cache \
&& ln -s /data/cloud /app/cloud \
&& setcap cap_net_bind_service=+ep /usr/local/bin/caddy
# Volumes
VOLUME ["/app/conf", "/data", "/app/.cache"]
# Expose ports
EXPOSE 80 443 6881
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ping || exit 1
CMD ["./start.sh"]