Dockerfile 3.24 KB
Newer Older
1
FROM node:12-stretch
Fred Chasen's avatar
Fred Chasen committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

# Application parameters and variables
ENV NODE_ENV=development
ENV PORT=9090
ENV DIRECTORY /home/node/pagedjs-cli

# Configuration for Chrome
ENV CONNECTION_TIMEOUT=60000
ENV CHROME_PATH=/usr/bin/google-chrome

# Configuration for GS4JS
ENV GS4JS_HOME=/usr/lib/x86_64-linux-gnu

# Install ghostscript
RUN apt-get update && \
		apt-get install -y build-essential make gcc g++ && \
		apt-get -y install ghostscript && apt-get clean && \
		apt-get install -y libgs-dev && \
		rm -rf /var/lib/apt/lists/*

22 23 24 25 26 27 28 29
# See https://github.com/GoogleChrome/puppeteer/blob/master/.ci/node12/Dockerfile.linux
RUN apt-get update && \
		apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
			libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \
			libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
			libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \
			libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && \
		rm -rf /var/lib/apt/lists/*
Fred Chasen's avatar
Fred Chasen committed
30 31 32 33 34

# Update Freetype
COPY docker-font.conf /etc/fonts/local.conf
ENV FREETYPE_PROPERTIES="truetype:interpreter-version=35"
RUN apt-get update \
35 36 37 38 39
		&& sh -c 'echo "deb http://http.us.debian.org/debian stable main contrib non-free" >> /etc/apt/sources.list' \
		&& apt-get update \
		&& apt-get install -y ttf-mscorefonts-installer \
			--no-install-recommends \
		&& rm -rf /var/lib/apt/lists/*
Fred Chasen's avatar
Fred Chasen committed
40 41 42 43 44

# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work.
RUN apt-get update && apt-get install -y wget --no-install-recommends \
45 46 47 48 49 50 51 52
		&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
		&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome-unstable.list' \
		&& apt-get update \
		&& apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \
			--no-install-recommends \
		&& rm -rf /var/lib/apt/lists/* \
		&& apt-get purge --auto-remove -y curl \
		&& rm -rf /src/*.deb
Fred Chasen's avatar
Fred Chasen committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

# helps prevent zombie chrome processes.
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init

RUN apt-get update && \
		apt-get install -y vim && \
		rm -rf /var/lib/apt/lists/*

RUN npm install npm@latest -g
RUN npm install -g node-gyp

RUN mkdir -p $DIRECTORY

# Add user so we don't need --no-sandbox.
# RUN groupadd -r node && useradd -r -g node -G audio,video node \
RUN adduser node audio \
		&& adduser node video \
		&& mkdir -p /home/node/Downloads \
		&& chown -R node:node /home/node \
		&& chown -R node:node /usr/lib \
		&& chown -R node:node $DIRECTORY

# Run everything after as non-privileged user.
USER node

WORKDIR $DIRECTORY

COPY --chown=node:node package.json $DIRECTORY
RUN npm install
RUN npm install ghostscript4js

COPY --chown=node:node . $DIRECTORY

EXPOSE $PORT

ENTRYPOINT ["dumb-init", "--"]

CMD ["./bin/paged"]