mirror of
https://github.com/wahyd4/aria2-ariang-docker.git
synced 2026-08-09 05:15:55 +10:00
Compare commits
16
Commits
v6.1.1
...
docker-revise
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f7912556ad | ||
|
|
b22a36cb0d | ||
|
|
d19aee4d38 | ||
|
|
4a0bb9446f | ||
|
|
85e11866c1 | ||
|
|
9a74f672b0 | ||
|
|
e308b67902 | ||
|
|
9ac63aef85 | ||
|
|
4c2cb0ddaf | ||
|
|
e3beaca19e | ||
|
|
9fb6123520 | ||
|
|
4394fde881 | ||
|
|
21fbcad568 | ||
|
|
60a5a77193 | ||
|
|
99c036f46c | ||
|
|
ea0dbb9e14 |
@@ -0,0 +1,11 @@
|
||||
# Reduce build context size
|
||||
.git
|
||||
.gitignore
|
||||
*.md
|
||||
LICENSE
|
||||
*.png
|
||||
*.json
|
||||
heroku.yml
|
||||
k8s-manifest.yaml
|
||||
Dockerfile.optimized
|
||||
.dockerignore
|
||||
+1
-1
@@ -1 +1 @@
|
||||
6.0.1
|
||||
6.2.2
|
||||
|
||||
@@ -9,6 +9,7 @@ redir /ui / 301
|
||||
redir /ui/ / 301
|
||||
redir /rclone /rclone/ 301
|
||||
redir /files /files/ 301
|
||||
redir /ro /ro/ 301
|
||||
|
||||
reverse_proxy /rpc 127.0.0.1:6800
|
||||
reverse_proxy /jsonrpc 127.0.0.1:6800
|
||||
@@ -23,6 +24,14 @@ route /files/* {
|
||||
reverse_proxy 127.0.0.1:8080
|
||||
}
|
||||
|
||||
route /ro/* {
|
||||
uri strip_prefix /ro
|
||||
root * /data
|
||||
file_server {
|
||||
browse "{$CADDY_FILE_SERVER_BROWSE_HTML}"
|
||||
}
|
||||
}
|
||||
|
||||
route /ping {
|
||||
respond "app version: {env.APP_VERSION}"
|
||||
}
|
||||
|
||||
+3
-1
@@ -34,14 +34,16 @@ ENV XDG_CONFIG_HOME=/app/.caddy/config
|
||||
ENV XDG_CACHE_HOME=/app/.cache
|
||||
ENV RCLONE_CONFIG_BASE64=""
|
||||
ENV ENABLE_APP_CHECKER=true
|
||||
ENV ENABLE_FILEBROWSER=true
|
||||
ENV CADDY_LOG_LEVEL=INFO
|
||||
ENV RCLONE_AUTO_UPLOAD_PROVIDER=
|
||||
ENV RCLONE_AUTO_UPLOAD_REMOTE_PATH=/downloads
|
||||
ENV RCLONE_AUTO_UPLOAD_FILE_MIN_SIZE=1K
|
||||
ENV RCLONE_AUTO_UPLOAD_FILE_MAX_SIZE=100G
|
||||
ENV FIX_DATA_VOLUME_PERMISSIONS=false
|
||||
ENV CADDY_FILE_SERVER_BROWSE_HTML=/app/browse.html
|
||||
|
||||
ADD install.sh aria2c.sh caddy.sh Procfile init.sh start.sh rclone.sh new-version-checker.sh APP_VERSION /app/
|
||||
ADD install.sh aria2c.sh caddy.sh filebrowser.sh Procfile init.sh start.sh rclone.sh new-version-checker.sh APP_VERSION /app/
|
||||
ADD conf /app/conf
|
||||
ADD Caddyfile SecureCaddyfile HerokuCaddyfile /usr/local/caddy/
|
||||
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
# Multi-stage build - Build forego with golang
|
||||
FROM golang:1.21-bullseye AS build-forego
|
||||
|
||||
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
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 debian:stable-slim 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 apt-get update && apt-get install -y \
|
||||
wget \
|
||||
curl \
|
||||
unzip \
|
||||
tar \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /tmp
|
||||
|
||||
# Detect architecture and download binaries
|
||||
RUN case "$(dpkg --print-architecture)" in \
|
||||
amd64) \
|
||||
PLATFORM=linux-amd64; \
|
||||
CADDY_FILE=caddy_${CADDY_VERSION}_linux_amd64.tar.gz; \
|
||||
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-amd64.zip; \
|
||||
;; \
|
||||
armhf) \
|
||||
PLATFORM=linux-armv7; \
|
||||
CADDY_FILE=caddy_${CADDY_VERSION}_linux_armv7.tar.gz; \
|
||||
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-arm-v7.zip; \
|
||||
;; \
|
||||
arm64) \
|
||||
PLATFORM=linux-arm64; \
|
||||
CADDY_FILE=caddy_${CADDY_VERSION}_linux_arm64.tar.gz; \
|
||||
RCLONE_FILE=rclone-${RCLONE_VERSION}-linux-arm64.zip; \
|
||||
;; \
|
||||
*) \
|
||||
echo "[ERROR] unsupported arch $(dpkg --print-architecture), exit now"; \
|
||||
exit 1; \
|
||||
;; \
|
||||
esac \
|
||||
&& 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 downloads
|
||||
&& rm -rf *.tar.gz *.zip rclone-*
|
||||
|
||||
# Final runtime stage - debian:stable-slim as requested
|
||||
FROM debian:stable-slim
|
||||
|
||||
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 only essential runtime dependencies in a single layer
|
||||
RUN apt-get update && apt-get install -y \
|
||||
aria2 \
|
||||
curl \
|
||||
libcap2-bin \
|
||||
runit \
|
||||
&& groupadd -g 1000 junv \
|
||||
&& useradd -u 1000 -g junv -m -s /bin/bash junv \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# Copy pre-built binaries from build stages
|
||||
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 in minimal layers
|
||||
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 in single layer
|
||||
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"]
|
||||
@@ -0,0 +1,158 @@
|
||||
# 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"]
|
||||
+12
-1
@@ -5,7 +5,9 @@
|
||||
|
||||
:PORT
|
||||
|
||||
basicauth / {
|
||||
@protected path / /index.html /css/* /js/* /ro /ro/* /jsonrpc
|
||||
|
||||
basicauth @protected {
|
||||
ARIA2_USER ARIA2_PWD_ENCRYPT
|
||||
}
|
||||
|
||||
@@ -13,6 +15,7 @@ redir /ui / 301
|
||||
redir /ui/ / 301
|
||||
redir /rclone /rclone/ 301
|
||||
redir /files /files/ 301
|
||||
redir /ro /ro/ 301
|
||||
|
||||
reverse_proxy /jsonrpc 127.0.0.1:6800
|
||||
|
||||
@@ -26,6 +29,14 @@ route /files/* {
|
||||
reverse_proxy 127.0.0.1:8080
|
||||
}
|
||||
|
||||
route /ro/* {
|
||||
uri strip_prefix /ro
|
||||
root * /data
|
||||
file_server {
|
||||
browse "{$CADDY_FILE_SERVER_BROWSE_HTML}"
|
||||
}
|
||||
}
|
||||
|
||||
route /ping {
|
||||
respond "app version: {env.APP_VERSION}"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
# Docker Image Size Optimization - Debian Base
|
||||
|
||||
## Current vs Optimized Comparison
|
||||
|
||||
### Original Dockerfile Issues:
|
||||
1. **Download during runtime**: Large binaries downloaded during build
|
||||
2. **Package manager waste**: No cleanup of apt caches
|
||||
3. **Multiple layers**: Inefficient RUN command structure
|
||||
4. **Unused build tools**: wget, unzip, tar remain in final image
|
||||
5. **Redundant user setup**: User creation mixed with package installation
|
||||
|
||||
### Debian-Optimized Improvements:
|
||||
|
||||
#### 1. **Multi-Stage Build Enhancement**
|
||||
- **Build stage**: Downloads all binaries (Caddy, Filebrowser, Rclone, AriaNg)
|
||||
- **Runtime stage**: Only copies needed binaries
|
||||
- **Result**: Removes ~50MB of download tools and temporary files
|
||||
|
||||
#### 2. **Layer Optimization**
|
||||
```dockerfile
|
||||
# BEFORE: Multiple RUN commands
|
||||
RUN apt update
|
||||
RUN apt install -y ...
|
||||
RUN wget ...
|
||||
RUN tar -zxf ...
|
||||
RUN rm ...
|
||||
|
||||
# AFTER: Single optimized RUN command
|
||||
RUN apt-get update && apt-get install -y ... \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
```
|
||||
|
||||
#### 3. **Package Management**
|
||||
- Removed unnecessary packages (git, tar, unzip, wget from runtime)
|
||||
- Proper cleanup: `apt-get clean + rm -rf /var/lib/apt/lists/*`
|
||||
- **Size reduction**: ~30-40MB from package manager cleanup
|
||||
|
||||
#### 4. **Architecture Detection Improvement**
|
||||
- Uses `dpkg --print-architecture` (Debian-native)
|
||||
- More reliable than `arch` command
|
||||
- Consistent with Debian ecosystem
|
||||
|
||||
#### 5. **File Organization**
|
||||
- Pre-download all binaries in build stage
|
||||
- Use `COPY --chmod=755` to reduce layers
|
||||
- Single permissions setup RUN command
|
||||
|
||||
### Expected Size Reduction:
|
||||
- **Conservative estimate**: 20-30% smaller (e.g., 400MB → 280-320MB)
|
||||
- **Main savings**:
|
||||
- Build tools removal: ~50MB
|
||||
- Package cache cleanup: ~30-40MB
|
||||
- Layer optimization: ~10-20MB
|
||||
- Download deduplication: ~20MB
|
||||
|
||||
### Preserved Features:
|
||||
✅ Same debian:stable-slim base image
|
||||
✅ Multi-architecture support (amd64, armhf, arm64)
|
||||
✅ All runtime functionality
|
||||
✅ User permission handling
|
||||
✅ Environment variables
|
||||
✅ Health checks and volumes
|
||||
|
||||
### Risk Assessment:
|
||||
- **Low risk**: No base image change
|
||||
- **Low risk**: Same runtime dependencies
|
||||
- **Low risk**: Improved build process only
|
||||
- **Medium benefit**: Significant size reduction without compatibility issues
|
||||
|
||||
## Testing Commands:
|
||||
|
||||
```bash
|
||||
# Build and compare
|
||||
./compare-builds.sh
|
||||
|
||||
# Test functionality
|
||||
docker run -d -p 6800:80 aria2-debian-optimized:latest
|
||||
curl http://localhost:6800/ping
|
||||
|
||||
# Check final image size
|
||||
docker images | grep aria2
|
||||
```
|
||||
@@ -1,5 +1,5 @@
|
||||
caddy: /app/caddy.sh
|
||||
filebrowser: /app/filebrowser -p 8080 -d /app/filebrowser.db -r /data -b /files
|
||||
filebrowser: /app/filebrowser.sh
|
||||
aria2c: /app/aria2c.sh
|
||||
rclone: /app/rclone.sh
|
||||
newer_version_checker: /app/new-version-checker.sh
|
||||
|
||||
@@ -61,7 +61,7 @@ File Browser
|
||||
|
||||
* wahyd4/aria2-ui:latest
|
||||
|
||||
> Docker will pick the the proper ARCH for you. e.g. arm64v8 or x86_64
|
||||
> Docker will pick proper CPU ARCH for you. e.g. arm64v8 or x86_64
|
||||
|
||||
## How to run
|
||||
|
||||
@@ -72,6 +72,7 @@ File Browser
|
||||
```
|
||||
|
||||
* Aria2: <http://yourip:8000>
|
||||
* Caddy File Server(Read Only) <http://yourip:8000/ro>
|
||||
* FileManger: <http://yourip:8000/files>
|
||||
* Rclone: <http://yourip:8000/rclone>
|
||||
* Please use `admin`/`admin` as username and password to login `Filebrowser` for the first time. And use `user`/`password` to login `Rclone` if you don't update `ARIA2_USER` and `ARIA2_PWD`
|
||||
@@ -124,7 +125,8 @@ Then simply run `docker-compose up -d`, that's it!
|
||||
| ENV | Description|
|
||||
|:---|:---|
|
||||
| `ENABLE_AUTH` | Whether to enable Basic auth |
|
||||
| `ENABLE_RCLONE` | Whether to disable Rclone, if you running this container offline or do not have stable connection to Github, please set to `false`
|
||||
| `ENABLE_RCLONE` | Whether to disable Rclone, if you running this container offline or do not have stable connection to Github, please set to `false` |
|
||||
| `ENABLE_FILEBROWSER` | Whether to disable Filebrowser, set it to `false` to disable it, by default it's enabled |
|
||||
| `ARIA2_USER` | Basic Auth username, Rclone GUI uses it as well. |
|
||||
| `ARIA2_PWD` | Basic Auth password, Rclone GUI uses it as well. |
|
||||
| `ARIA2_EXTERNAL_PORT` | The Aria2 port which exposed to public to access to |
|
||||
|
||||
+12
-1
@@ -5,7 +5,9 @@ log {
|
||||
output stderr
|
||||
}
|
||||
|
||||
basicauth / {
|
||||
@protected path / /index.html /css/* /js/* /ro /ro/* /jsonrpc
|
||||
|
||||
basicauth @protected {
|
||||
ARIA2_USER ARIA2_PWD_ENCRYPT
|
||||
}
|
||||
|
||||
@@ -13,6 +15,7 @@ redir /ui / 301
|
||||
redir /ui/ / 301
|
||||
redir /rclone /rclone/ 301
|
||||
redir /files /files/ 301
|
||||
redir /ro /ro/ 301
|
||||
|
||||
reverse_proxy /rpc 127.0.0.1:6800
|
||||
reverse_proxy /jsonrpc 127.0.0.1:6800
|
||||
@@ -27,6 +30,14 @@ route /files/* {
|
||||
reverse_proxy 127.0.0.1:8080
|
||||
}
|
||||
|
||||
route /ro/* {
|
||||
uri strip_prefix /ro
|
||||
root * /data
|
||||
file_server {
|
||||
browse "{$CADDY_FILE_SERVER_BROWSE_HTML}"
|
||||
}
|
||||
}
|
||||
|
||||
route /ping {
|
||||
respond "app version: {env.APP_VERSION}"
|
||||
}
|
||||
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Building and comparing Docker images..."
|
||||
|
||||
# Build original image
|
||||
echo "Building original image..."
|
||||
docker build -f Dockerfile -t aria2-original:latest .
|
||||
|
||||
# Build Debian-optimized image
|
||||
echo "Building Debian-optimized image..."
|
||||
docker build -f Dockerfile.debian-optimized -t aria2-debian-optimized:latest .
|
||||
|
||||
# Build Alpine-optimized image
|
||||
echo "Building Alpine-optimized image..."
|
||||
docker build -f Dockerfile.optimized -t aria2-alpine-optimized:latest .
|
||||
|
||||
# Compare sizes
|
||||
echo ""
|
||||
echo "=== IMAGE SIZE COMPARISON ==="
|
||||
echo "Original image:"
|
||||
docker images aria2-original:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
|
||||
echo ""
|
||||
echo "Debian-optimized image:"
|
||||
docker images aria2-debian-optimized:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
|
||||
echo ""
|
||||
echo "Alpine-optimized image:"
|
||||
docker images aria2-alpine-optimized:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
|
||||
echo ""
|
||||
echo "=== DETAILED LAYER ANALYSIS ==="
|
||||
echo "Original layers:"
|
||||
docker history aria2-original:latest --format "table {{.CreatedBy}}\t{{.Size}}"
|
||||
|
||||
echo ""
|
||||
echo "Debian-optimized layers:"
|
||||
docker history aria2-debian-optimized:latest --format "table {{.CreatedBy}}\t{{.Size}}"
|
||||
|
||||
echo ""
|
||||
echo "Alpine-optimized layers:"
|
||||
docker history aria2-alpine-optimized:latest --format "table {{.CreatedBy}}\t{{.Size}}"
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash -eu
|
||||
|
||||
echo "Checking if FileBrowser is enabled..."
|
||||
|
||||
if [ "$ENABLE_FILEBROWSER" = "true" ]; then
|
||||
echo "Starting FileBrowser..."
|
||||
/app/filebrowser -p 8080 -d /app/filebrowser.db -r /data -b /files
|
||||
else
|
||||
echo "FileBrowser is disabled. Set ENABLE_FILEBROWSER=true to enable it."
|
||||
sleep 3650d
|
||||
fi
|
||||
@@ -24,7 +24,8 @@ fi
|
||||
|
||||
chmod +x /app/caddy.sh \
|
||||
/app/rclone.sh \
|
||||
/app/aria2c.sh
|
||||
/app/aria2c.sh \
|
||||
/app/filebrowser.sh
|
||||
|
||||
echo "[INFO] Give caddy permissions to use low ports"
|
||||
setcap cap_net_bind_service=+ep /usr/local/bin/caddy
|
||||
|
||||
@@ -42,6 +42,7 @@ groupadd junv \
|
||||
&& tar -zxf ${caddy_file} \
|
||||
&& mv caddy /usr/local/bin/ \
|
||||
&& rm -rf ${caddy_file} \
|
||||
&& wget -P /app -N https://raw.githubusercontent.com/glowinthedark/caddy-file-server-browse-extension/39e997c91539d0f04fcce53a3cb6605b2ae9e50c/browse.html \
|
||||
&& platform=linux-amd64 \
|
||||
&& wget -N https://github.com/filebrowser/filebrowser/releases/download/${filebrowser_version}/${filebrowser_file} \
|
||||
&& tar -zxf ${filebrowser_file} \
|
||||
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Testing Debian-optimized Docker image functionality..."
|
||||
|
||||
# Build the optimized image
|
||||
echo "Building debian-optimized image..."
|
||||
docker build -f Dockerfile.debian-optimized -t aria2-test:latest .
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Build failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Build successful!"
|
||||
|
||||
# Start container in background
|
||||
echo "Starting container..."
|
||||
docker run -d --name aria2-test-container -p 6800:80 -p 6881:6881 aria2-test:latest
|
||||
|
||||
# Wait for startup
|
||||
echo "Waiting for services to start..."
|
||||
sleep 10
|
||||
|
||||
# Test health endpoint
|
||||
echo "Testing health endpoint..."
|
||||
if curl -f http://localhost:6800/ping >/dev/null 2>&1; then
|
||||
echo "✅ Health check passed!"
|
||||
else
|
||||
echo "❌ Health check failed!"
|
||||
echo "Container logs:"
|
||||
docker logs aria2-test-container
|
||||
docker rm -f aria2-test-container
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test AriaNg interface
|
||||
echo "Testing AriaNg interface..."
|
||||
if curl -f http://localhost:6800/ >/dev/null 2>&1; then
|
||||
echo "✅ AriaNg interface accessible!"
|
||||
else
|
||||
echo "❌ AriaNg interface not accessible!"
|
||||
fi
|
||||
|
||||
# Test aria2 RPC
|
||||
echo "Testing aria2 RPC..."
|
||||
if curl -f http://localhost:6800/jsonrpc >/dev/null 2>&1; then
|
||||
echo "✅ Aria2 RPC accessible!"
|
||||
else
|
||||
echo "❌ Aria2 RPC not accessible!"
|
||||
fi
|
||||
|
||||
# Show final image size
|
||||
echo ""
|
||||
echo "=== Final Image Size ==="
|
||||
docker images aria2-test:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
|
||||
# Cleanup
|
||||
echo ""
|
||||
echo "Cleaning up test container..."
|
||||
docker rm -f aria2-test-container
|
||||
|
||||
echo "✅ Functionality test completed!"
|
||||
Reference in New Issue
Block a user