mirror of
https://github.com/wahyd4/aria2-ariang-docker.git
synced 2026-08-08 21:05:50 +10:00
159 lines
5.0 KiB
Docker
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"]
|