To build Filestash directly from source, use this Dockerfile:
curl https://gist.githubusercontent.com/mildred/934c9ac776ed95b7864b39a6d8444ff2/raw/Dockerfile -o Dockerfile
docker build -f Dockerfile .
Extracted from mickael-kerjean/filestash#477
To build Filestash directly from source, use this Dockerfile:
curl https://gist.githubusercontent.com/mildred/934c9ac776ed95b7864b39a6d8444ff2/raw/Dockerfile -o Dockerfile
docker build -f Dockerfile .
Extracted from mickael-kerjean/filestash#477
# | |
# Stage 1: Define base image | |
# | |
FROM debian:unstable-slim AS base | |
# | |
# Stage 2: Build base image | |
# | |
FROM base AS build-image | |
ENV DEBIAN_FRONTEND noninteractive | |
RUN apt-get update && apt-get install -y \ | |
golang npm curl libglib2.0-dev libpangoft2-1.0-0 make git \ | |
curl make gcc g++ xz-utils pkg-config python3-pip autoconf libtool unzip python-setuptools cmake git \ | |
libraw-dev libjpeg-dev libgcc-11-dev libvips-dev liblcms2-dev | |
# | |
# Stage 3: Build libtranscode | |
# | |
FROM build-image AS build-libtranscode | |
COPY server/plugin/plg_image_light/deps/src/libtranscode* /deps/src/ | |
WORKDIR /deps | |
RUN gcc -shared -fPIC -Wall -o libtranscode.so src/libtranscode.c -llcms2 -lraw | |
RUN ldd /deps/libtranscode.so | |
# | |
# Stage 4: Build libresize | |
# | |
FROM build-image AS build-libresize | |
COPY server/plugin/plg_image_light/deps/src/libresize* /deps/src/ | |
WORKDIR /deps | |
RUN gcc -shared -fPIC -Wall -o libresize.so src/libresize.c -lvips $(pkg-config --cflags glib-2.0) | |
RUN ldd /deps/libresize.so | |
# | |
# Stage 5: Build filestash frontend | |
# | |
FROM build-image AS build-frontend | |
COPY package.json Makefile /src/ | |
WORKDIR /src | |
# <https://stackoverflow.com/questions/67241196/error-no-template-named-remove-cv-t-in-namespace-std-did-you-mean-remove> | |
RUN CXXFLAGS="--std=c++17" npm install --include=dev --force | |
COPY client/ ./client/ | |
COPY config/ ./config/ | |
COPY *.js .babelrc .eslintrc.json . | |
RUN make build_frontend | |
RUN \ | |
mkdir -p ./dist/data/state/config && \ | |
cp config/config.json ./dist/data/state/config/ && \ | |
mkdir -p ./filestash/data/state/config && \ | |
cp config/config.json ./filestash/data/state/config/ | |
RUN chmod -R o+r+w+x ./dist/data | |
# | |
# Stage 6: Build filestash backend | |
# | |
FROM build-image AS build-backend | |
COPY --from=build-libtranscode /deps/libtranscode.so /usr/local/lib/libtranscode.so | |
COPY --from=build-libresize /deps/libresize.so /usr/local/lib/libresize.so | |
WORKDIR /src | |
COPY Makefile go.* ./ | |
COPY config/ ./config/ | |
COPY server/ ./server/ | |
COPY vendor/ ./vendor/ | |
COPY .git/ ./.git/ | |
# | |
# Build backend | |
# | |
RUN go generate -x ./server/... | |
# When the GNU linker sees a library (-l), it discards all symbols that it | |
# doesn't need. In case a .o or .a file is after a -l flag, the symbols from | |
# the library are discarded before the object file is considered. | |
RUN mkdir /deps && ar r /deps/libresize_linux_amd64.a && ar r /deps/libtranscode_linux_amd64.a | |
RUN make CGO_LDFLAGS="-L/deps -lresize -ltranscode" build_backend | |
ENV LD_LIBRARY_PATH /usr/local/lib | |
RUN ldd dist/filestash | |
# | |
# Stage 7: Build final Docker Image | |
# | |
FROM base | |
MAINTAINER [email protected] | |
ENV DEBIAN_FRONTEND noninteractive | |
ENV LD_LIBRARY_PATH /usr/local/lib | |
RUN mkdir -p /app | |
WORKDIR /app | |
# org-mode: html export | |
COPY server/.assets/emacs/htmlize.el /usr/share/emacs/site-lisp/htmlize.el | |
# org-mode: markdown export | |
COPY server/.assets/emacs/ox-gfm.el /usr/share/emacs/site-lisp/ox-gfm.el | |
RUN apt-get update > /dev/null && \ | |
################# | |
# Optional dependencies | |
apt-get install -y curl tor emacs-nox ffmpeg zip poppler-utils > /dev/null && \ | |
# org-mode: pdf export (with a light latex distribution) | |
cd && apt-get install -y wget perl > /dev/null && \ | |
export CTAN_REPO="http://mirror.las.iastate.edu/tex-archive/systems/texlive/tlnet" && \ | |
curl -sL "https://yihui.name/gh/tinytex/tools/install-unx.sh" | sh && \ | |
mv ~/.TinyTeX /usr/share/tinytex && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install wasy && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install ulem && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install marvosym && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install wasysym && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install xcolor && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install listings && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install parskip && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install float && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install wrapfig && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install sectsty && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install capt-of && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install epstopdf-pkg && \ | |
/usr/share/tinytex/bin/x86_64-linux/tlmgr install cm-super && \ | |
ln -s /usr/share/tinytex/bin/x86_64-linux/pdflatex /usr/local/bin/pdflatex && \ | |
apt-get purge -y --auto-remove perl wget && \ | |
# Cleanup | |
find /usr/share/ -name 'doc' | xargs rm -rf && \ | |
find /usr/share/emacs -name '*.pbm' | xargs rm -f && \ | |
find /usr/share/emacs -name '*.png' | xargs rm -f && \ | |
find /usr/share/emacs -name '*.xpm' | xargs rm -f && \ | |
################# | |
# Finalise the image | |
useradd filestash && \ | |
chown -R filestash:filestash /app/ && \ | |
rm -rf /var/lib/apt/lists/* && \ | |
rm -rf /tmp/* | |
RUN apt-get update && \ | |
apt-get install -y libvips libraw20 libglib2.0-0 && \ | |
apt-get purge -y --auto-remove && \ | |
rm -rf /var/lib/apt/lists/* && \ | |
rm -rf /tmp/* | |
COPY --from=build-libtranscode /deps/libtranscode.so /usr/local/lib/libtranscode.so | |
COPY --from=build-libresize /deps/libresize.so /usr/local/lib/libresize.so | |
COPY --from=build-frontend /src/dist/data /app/data | |
COPY --from=build-backend /src/dist/filestash /app/filestash | |
RUN \ | |
ldd /app/filestash && \ | |
mkdir -p /app/data/state/log && \ | |
ln -s /app/filestash /bin/filestash | |
USER filestash | |
EXPOSE 8334 | |
VOLUME ["/app/data/state/"] | |
CMD ["/app/filestash"] |