diff --git a/Dockerfile b/Dockerfile index 331c639..9221fe0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,16 @@ -# Use the official golang:1.22.12-bookworm +# Use the official golang:1.22.12-bookworm image as the build stage FROM golang:1.22.12-bookworm as build + +# Create a directory /app RUN mkdir /app + +# Set the working directory to /app WORKDIR /app + +# Copy the current directory contents into /app COPY ./ /app/ + +# Update the package list and install necessary packages RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ wget \ @@ -42,28 +50,48 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libunistring-dev \ libaom-dev \ libdav1d-dev && \ - # go version && \ + # Download Go module dependencies go mod download && \ + # Download yt-dlp wget --no-check-certificate -c https://github.com/yt-dlp/yt-dlp/releases/download/2025.01.26/yt-dlp_linux &&\ + # Download ffmpeg wget --no-check-certificate -c https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-6.0.1-amd64-static.tar.xz &&\ + # Move yt-dlp to /usr/bin and set permissions mv yt-dlp_linux /usr/bin/yt-dlp && \ chmod 755 /usr/bin/yt-dlp && \ chmod +x /usr/bin/yt-dlp && \ + # Extract ffmpeg tarball tar -xf ffmpeg-6.0.1-amd64-static.tar.xz && \ + # Remove the tarball rm -rf ffmpeg-6.0.1-amd64-static.tar.xz && \ + # Set execute permissions for ffmpeg and ffprobe chmod +x ffmpeg-6.0.1-amd64-static/ffmpeg && \ chmod +x ffmpeg-6.0.1-amd64-static/ffprobe && \ + # Copy ffmpeg and ffprobe to /usr/bin cp -R ffmpeg-6.0.1-amd64-static/ffmpeg /usr/bin/ && \ cp -R ffmpeg-6.0.1-amd64-static/ffprobe /usr/bin/ && \ + # Remove the extracted ffmpeg directory rm -rf ffmpeg-6.0.1-amd64-static && \ + # Create a new user 'papibot' useradd papibot && \ + # Build the Go application CGO_ENABLED=0 GOOS=linux go build -o /app/papibot +# Use the official golang:1.22.12-bookworm image for the final stage FROM golang:1.22.12-bookworm + +# Create a group and user 'papibot' RUN groupadd -r papibot && useradd -r -g papibot papibot + +# Switch to the 'papibot' user USER papibot + +# Copy the necessary files from the build stage COPY --from=build --chown=papibot:papibot /usr/bin/ /usr/bin COPY --from=build --chown=papibot:papibot /app/ /app/ +# Set the working directory to /app WORKDIR /app/ + +# Set the entry point to the built Go application ENTRYPOINT ["./papibot"]