feat: imagorvideo init
This commit is contained in:
commit
2451fa1b5a
20 changed files with 2601 additions and 0 deletions
136
Dockerfile
Normal file
136
Dockerfile
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
ARG GOLANG_VERSION=1.19.0
|
||||
FROM golang:${GOLANG_VERSION}-bullseye as builder
|
||||
|
||||
ARG FFMPEG_VERSION=5.1.1
|
||||
ARG VIPS_VERSION=8.13.1
|
||||
ARG CGIF_VERSION=0.3.0
|
||||
ARG LIBSPNG_VERSION=0.7.2
|
||||
ARG TARGETARCH
|
||||
|
||||
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
ENV MAKEFLAGS="-j8"
|
||||
|
||||
# libaom3 is in Debian bullseye-backports
|
||||
RUN echo 'deb http://deb.debian.org/debian bullseye-backports main' > /etc/apt/sources.list.d/backports.list
|
||||
|
||||
# Installs libvips + required libraries
|
||||
RUN DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get update && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
ca-certificates \
|
||||
automake build-essential curl \
|
||||
python3-pip ninja-build pkg-config \
|
||||
gobject-introspection gtk-doc-tools libglib2.0-dev libjpeg62-turbo-dev libpng-dev \
|
||||
libwebp-dev libtiff5-dev libexif-dev libxml2-dev libpoppler-glib-dev \
|
||||
swig libpango1.0-dev libmatio-dev libopenslide-dev libcfitsio-dev libopenjp2-7-dev \
|
||||
libgsf-1-dev fftw3-dev liborc-0.4-dev librsvg2-dev libimagequant-dev libaom-dev/bullseye-backports libheif-dev \
|
||||
yasm libx264-dev libx265-dev libnuma-dev libvpx-dev libtheora-dev \
|
||||
librtmp-dev libvorbis-dev && \
|
||||
pip3 install meson && \
|
||||
cd /tmp && \
|
||||
curl -fsSLO https://github.com/dloebl/cgif/archive/refs/tags/V${CGIF_VERSION}.tar.gz && \
|
||||
tar xf V${CGIF_VERSION}.tar.gz && \
|
||||
cd cgif-${CGIF_VERSION} && \
|
||||
meson build --prefix=/usr/local --libdir=/usr/local/lib --buildtype=release && \
|
||||
cd build && \
|
||||
ninja && \
|
||||
ninja install && \
|
||||
cd /tmp && \
|
||||
curl -fsSLO https://github.com/randy408/libspng/archive/refs/tags/v${LIBSPNG_VERSION}.tar.gz && \
|
||||
tar xf v${LIBSPNG_VERSION}.tar.gz && \
|
||||
cd libspng-${LIBSPNG_VERSION} && \
|
||||
meson setup _build \
|
||||
--buildtype=release \
|
||||
--strip \
|
||||
--prefix=/usr/local \
|
||||
--libdir=lib && \
|
||||
ninja -C _build && \
|
||||
ninja -C _build install && \
|
||||
cd /tmp && \
|
||||
curl -fsSLO https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz && \
|
||||
tar zvxf vips-${VIPS_VERSION}.tar.gz && \
|
||||
cd /tmp/vips-${VIPS_VERSION} && \
|
||||
meson setup _build \
|
||||
--buildtype=release \
|
||||
--strip \
|
||||
--prefix=/usr/local \
|
||||
--libdir=lib \
|
||||
-Dgtk_doc=false \
|
||||
-Dmagick=disabled \
|
||||
-Dintrospection=false && \
|
||||
ninja -C _build && \
|
||||
ninja -C _build install && \
|
||||
cd /tmp && \
|
||||
curl -fsSLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
||||
tar jvxf ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
||||
cd /tmp/ffmpeg-${FFMPEG_VERSION} && \
|
||||
./configure --prefix=/usr/local \
|
||||
--disable-debug \
|
||||
--disable-doc \
|
||||
--disable-ffplay \
|
||||
--disable-static \
|
||||
--enable-shared \
|
||||
--enable-version3 \
|
||||
--enable-gpl \
|
||||
--enable-libtheora \
|
||||
--enable-libvorbis \
|
||||
--enable-librtmp \
|
||||
--enable-libwebp \
|
||||
--enable-libvpx \
|
||||
--enable-libx265 \
|
||||
--enable-libx264 && \
|
||||
make && make install && \
|
||||
ldconfig && \
|
||||
rm -rf /usr/local/lib/python* && \
|
||||
rm -rf /usr/local/lib/libvips-cpp.* && \
|
||||
rm -rf /usr/local/lib/*.a && \
|
||||
rm -rf /usr/local/lib/*.la
|
||||
|
||||
WORKDIR ${GOPATH}/src/github.com/cshum/imagorvideo
|
||||
|
||||
COPY go.mod .
|
||||
COPY go.sum .
|
||||
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN if [ "$TARGETARCH" = "amd64" ]; then go test ./...; fi
|
||||
RUN go build -o ${GOPATH}/bin/imagorvideo ./cmd/imagorvideo/main.go
|
||||
|
||||
FROM debian:bullseye-slim
|
||||
LABEL maintainer="adrian@cshum.com"
|
||||
|
||||
COPY --from=builder /usr/local/lib /usr/local/lib
|
||||
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
|
||||
COPY --from=builder /etc/apt/sources.list.d/backports.list /etc/apt/sources.list.d/backports.list
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get update && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
procps libglib2.0-0 libjpeg62-turbo libpng16-16 libopenexr25 \
|
||||
libwebp6 libwebpmux3 libwebpdemux2 libtiff5 libexif12 libxml2 libpoppler-glib8 \
|
||||
libpango1.0-0 libmatio11 libopenslide0 libopenjp2-7 libjemalloc2 \
|
||||
libgsf-1-114 fftw3 liborc-0.4-0 librsvg2-2 libcfitsio9 libimagequant0 libaom3 libheif1 \
|
||||
libx264-dev libx265-dev libnuma-dev libvpx6 libtheora0 libvorbis-dev && \
|
||||
ln -s /usr/lib/$(uname -m)-linux-gnu/libjemalloc.so.2 /usr/local/lib/libjemalloc.so && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
COPY --from=builder /go/bin/imagorvideo /usr/local/bin/imagorvideo
|
||||
|
||||
ENV VIPS_WARNING=0
|
||||
ENV MALLOC_ARENA_MAX=2
|
||||
ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so
|
||||
|
||||
ENV PORT 8000
|
||||
|
||||
# use unprivileged user
|
||||
USER nobody
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/imagorvideo"]
|
||||
|
||||
EXPOSE ${PORT}
|
||||
Loading…
Add table
Add a link
Reference in a new issue