forked from gotenberg/gotenberg
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
quangnhnhut123
committed
Sep 26, 2024
1 parent
0abb11b
commit 0d4f2b1
Showing
2 changed files
with
195 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
# ARG instructions do not create additional layers. Instead, next layers will | ||
# concatenate them. Also, we have to repeat ARG instructions in each build | ||
# stage that uses them. | ||
ARG GOLANG_VERSION | ||
|
||
# ---------------------------------------------- | ||
# Gotenberg binary build stage | ||
# ---------------------------------------------- | ||
FROM golang:$GOLANG_VERSION AS binary-stage | ||
|
||
ARG GOTENBERG_VERSION | ||
ENV CGO_ENABLED=0 | ||
|
||
# Define the working directory outside of $GOPATH (we're using go modules). | ||
WORKDIR /home | ||
|
||
# Install module dependencies. | ||
COPY go.mod go.sum ./ | ||
|
||
RUN go mod download &&\ | ||
go mod verify | ||
|
||
# Copy the source code. | ||
COPY cmd ./cmd | ||
COPY pkg ./pkg | ||
|
||
RUN go build -o gotenberg -ldflags "-X 'github.com/gotenberg/gotenberg/v8/cmd.Version=$GOTENBERG_VERSION'" cmd/gotenberg/main.go | ||
|
||
# ---------------------------------------------- | ||
# Final stage | ||
# ---------------------------------------------- | ||
FROM debian:12-slim | ||
|
||
ARG GOTENBERG_VERSION | ||
ARG GOTENBERG_USER_GID | ||
ARG GOTENBERG_USER_UID | ||
ARG NOTO_COLOR_EMOJI_VERSION | ||
ARG PDFTK_VERSION | ||
ARG TMP_CHOMIUM_VERSION_ARMHF="116.0.5845.180-1~deb12u1" | ||
|
||
LABEL org.opencontainers.image.title="Gotenberg" \ | ||
org.opencontainers.image.description="A Docker-powered stateless API for PDF files." \ | ||
org.opencontainers.image.version="$GOTENBERG_VERSION" \ | ||
org.opencontainers.image.authors="Julien Neuhart <[email protected]>" \ | ||
org.opencontainers.image.documentation="https://gotenberg.dev" \ | ||
org.opencontainers.image.source="https://github.com/gotenberg/gotenberg" | ||
|
||
RUN \ | ||
# Create a non-root user. | ||
# All processes in the Docker container will run with this dedicated user. | ||
groupadd --gid "$GOTENBERG_USER_GID" gotenberg &&\ | ||
useradd --uid "$GOTENBERG_USER_UID" --gid gotenberg --shell /bin/bash --home /home/gotenberg --no-create-home gotenberg &&\ | ||
mkdir /home/gotenberg &&\ | ||
chown gotenberg: /home/gotenberg | ||
|
||
RUN \ | ||
# Install system dependencies required for the next instructions or debugging. | ||
# Note: tini is a helper for reaping zombie processes. | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends curl gnupg tini python3 default-jre-headless &&\ | ||
# Cleanup. | ||
# Note: the Debian image does automatically a clean after each install thanks to a hook. | ||
# Therefore, there is no need for apt-get clean. | ||
# See https://stackoverflow.com/a/24417119/3248473. | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
# Install fonts. | ||
COPY fonts/ /usr/local/share/fonts/ | ||
|
||
RUN \ | ||
# Credits: | ||
# https://github.com/arachnys/athenapdf/blob/master/cli/Dockerfile. | ||
# https://help.accusoft.com/PrizmDoc/v12.1/HTML/Installing_Asian_Fonts_on_Ubuntu_and_Debian.html. | ||
curl -o ./ttf-mscorefonts-installer_3.8.1_all.deb http://httpredir.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.8.1_all.deb &&\ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends \ | ||
./ttf-mscorefonts-installer_3.8.1_all.deb \ | ||
fonts-crosextra-caladea \ | ||
fonts-crosextra-carlito \ | ||
fonts-dejavu \ | ||
fonts-dejavu-extra \ | ||
fonts-liberation \ | ||
fonts-liberation2 \ | ||
fonts-linuxlibertine &&\ | ||
rm -f ./ttf-mscorefonts-installer_3.8.1_all.deb &&\ | ||
# Add Color and Black-and-White Noto emoji font. | ||
# Credits: | ||
# https://github.com/gotenberg/gotenberg/pull/325. | ||
# https://github.com/googlefonts/noto-emoji. | ||
curl -Ls "https://github.com/googlefonts/noto-emoji/raw/$NOTO_COLOR_EMOJI_VERSION/fonts/NotoColorEmoji.ttf" -o /usr/local/share/fonts/NotoColorEmoji.ttf &&\ | ||
# Cleanup. | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
RUN \ | ||
# Install either Google Chrome stable on amd64 architecture or | ||
# Chromium on other architectures. | ||
# See https://github.com/gotenberg/gotenberg/issues/328. | ||
# FIXME: | ||
# armhf is currently not working with the latest version of Chromium. | ||
# See: https://github.com/gotenberg/gotenberg/issues/709. | ||
/bin/bash -c \ | ||
'set -e &&\ | ||
if [[ "$(dpkg --print-architecture)" == "amd64" ]]; then \ | ||
curl https://dl.google.com/linux/linux_signing_key.pub | apt-key add - &&\ | ||
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | tee /etc/apt/sources.list.d/google-chrome.list &&\ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends --allow-unauthenticated google-chrome-stable &&\ | ||
mv /usr/bin/google-chrome-stable /usr/bin/chromium; \ | ||
elif [[ "$(dpkg --print-architecture)" == "armhf" ]]; then \ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends devscripts &&\ | ||
debsnap chromium-common "$TMP_CHOMIUM_VERSION_ARMHF" -v --force --binary --architecture armhf &&\ | ||
debsnap chromium "$TMP_CHOMIUM_VERSION_ARMHF" -v --force --binary --architecture armhf &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install --fix-broken -y -qq --no-install-recommends "./binary-chromium-common/chromium-common_${TMP_CHOMIUM_VERSION_ARMHF}_armhf.deb" "./binary-chromium/chromium_${TMP_CHOMIUM_VERSION_ARMHF}_armhf.deb" &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get purge -y -qq devscripts &&\ | ||
rm -rf ./binary-chromium-common/* ./binary-chromium/*; \ | ||
else \ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends chromium; \ | ||
fi' &&\ | ||
# Verify installation. | ||
chromium --version &&\ | ||
# Cleanup. | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
RUN \ | ||
# Install LibreOffice & unoconverter. | ||
echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list &&\ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends -t bookworm-backports libreoffice &&\ | ||
curl -Ls https://raw.githubusercontent.com/gotenberg/unoconverter/v0.0.1/unoconv -o /usr/bin/unoconverter &&\ | ||
chmod +x /usr/bin/unoconverter &&\ | ||
# unoconverter will look for the Python binary, which has to be at version 3. | ||
ln -s /usr/bin/python3 /usr/bin/python &&\ | ||
# Verify installations. | ||
libreoffice --version &&\ | ||
unoconverter --version &&\ | ||
# Cleanup. | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
RUN \ | ||
# Install PDFtk, QPDF & ExifTool (PDF engines). | ||
# See https://github.com/gotenberg/gotenberg/pull/273. | ||
curl -o /usr/bin/pdftk-all.jar "https://gitlab.com/api/v4/projects/5024297/packages/generic/pdftk-java/$PDFTK_VERSION/pdftk-all.jar" &&\ | ||
chmod a+x /usr/bin/pdftk-all.jar &&\ | ||
echo '#!/bin/bash\n\nexec java -jar /usr/bin/pdftk-all.jar "$@"' > /usr/bin/pdftk && \ | ||
chmod +x /usr/bin/pdftk &&\ | ||
apt-get update -qq &&\ | ||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends qpdf exiftool &&\ | ||
# See https://github.com/nextcloud/docker/issues/380. | ||
mkdir -p /usr/share/man/man1 &&\ | ||
# Verify installations. | ||
pdftk --version &&\ | ||
qpdf --version &&\ | ||
exiftool --version &&\ | ||
# Cleanup. | ||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|
||
# Improve fonts subpixel hinting and smoothing. | ||
# Credits: | ||
# https://github.com/arachnys/athenapdf/issues/69. | ||
# https://github.com/arachnys/athenapdf/commit/ba25a8d80a25d08d58865519c4cd8756dc9a336d. | ||
COPY build/fonts.conf /etc/fonts/conf.d/100-gotenberg.conf | ||
|
||
# Copy the Gotenberg binary from the binary stage. | ||
COPY --from=binary-stage /home/gotenberg /usr/bin/ | ||
|
||
# Environment variables required by modules or else. | ||
ENV CHROMIUM_BIN_PATH=/usr/bin/chromium | ||
ENV LIBREOFFICE_BIN_PATH=/usr/lib/libreoffice/program/soffice.bin | ||
ENV UNOCONVERTER_BIN_PATH=/usr/bin/unoconverter | ||
ENV PDFTK_BIN_PATH=/usr/bin/pdftk | ||
ENV QPDF_BIN_PATH=/usr/bin/qpdf | ||
ENV EXIFTOOL_BIN_PATH=/usr/bin/exiftool | ||
|
||
USER gotenberg | ||
WORKDIR /home/gotenberg | ||
|
||
# Default API port. | ||
EXPOSE 3000 | ||
|
||
ENTRYPOINT [ "/usr/bin/tini", "--" ] | ||
CMD [ "gotenberg" ] |