Hosting Puppeteer in a Docker container

This is a script that Eric Bidelman gave me (or helped me create — I can quite recall).
I needed a simple way to host a custom web app that could connect to an instance of Headless Chrome over the Puppeteer API. This article is mostly a reference for the future.
The docker container is relatively straight forward:
Use node:8-slim Install all the required dependencies, including Chrome. Initialize the environment Copy my app from the current directory (the docker file and app are in the same folder) Set up the user and permissions Expose the port and start the app.


This content originally appeared on Modern Web Development with Chrome and was authored by Paul Kinlan

This is a script that Eric Bidelman gave me (or helped me create — I can quite recall).

I needed a simple way to host a custom web app that could connect to an instance of Headless Chrome over the Puppeteer API. This article is mostly a reference for the future.

The docker container is relatively straight forward:

  1. Use node:8-slim
  2. Install all the required dependencies, including Chrome.
  3. Initialize the environment
  4. Copy my app from the current directory (the docker file and app are in the same folder)
  5. Set up the user and permissions
  6. Expose the port and start the app.
FROM node:8-slim
LABEL name "puppeteraas"

# See https://crbug.com/795759
RUN apt-get update && apt-get install -yq libgconf-2-4

# 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 \
    && 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.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

# It's a good idea to use dumb-init to help 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

# Uncomment to skip the chromium download when installing puppeteer. 
# If you do, you'll need to launch puppeteer with:
#     browser.launch({executablePath: 'google-chrome-unstable'})
# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true

# Copy the app
COPY . /app/
#COPY local.conf /etc/fonts/local.conf
WORKDIR app
RUN npm i

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

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

EXPOSE 8084
ENTRYPOINT ["dumb-init", "--"]
CMD ["npm", "run", "start"]

To keep it simple, I've abstracted most of the logic into a new docker container script called kinlan:puppets which allows you to customize how you deploy your application.

FROM kinlan/puppets:latest

# Copy the app
COPY . /app/
#COPY local.conf /etc/fonts/local.conf
WORKDIR app
RUN npm i

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

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

EXPOSE 8084
ENTRYPOINT ["dumb-init", "--"]
CMD ["npm", "run", "start"]

I will be posting an extra update soon about exactly where I use this.


This content originally appeared on Modern Web Development with Chrome and was authored by Paul Kinlan


Print Share Comment Cite Upload Translate Updates
APA

Paul Kinlan | Sciencx (2018-03-13T12:20:31+00:00) Hosting Puppeteer in a Docker container. Retrieved from https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/

MLA
" » Hosting Puppeteer in a Docker container." Paul Kinlan | Sciencx - Tuesday March 13, 2018, https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/
HARVARD
Paul Kinlan | Sciencx Tuesday March 13, 2018 » Hosting Puppeteer in a Docker container., viewed ,<https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/>
VANCOUVER
Paul Kinlan | Sciencx - » Hosting Puppeteer in a Docker container. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/
CHICAGO
" » Hosting Puppeteer in a Docker container." Paul Kinlan | Sciencx - Accessed . https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/
IEEE
" » Hosting Puppeteer in a Docker container." Paul Kinlan | Sciencx [Online]. Available: https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/. [Accessed: ]
rf:citation
» Hosting Puppeteer in a Docker container | Paul Kinlan | Sciencx | https://www.scien.cx/2018/03/13/hosting-puppeteer-in-a-docker-container/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.