<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.h4ks.com/index.php?action=history&amp;feed=atom&amp;title=Dockerized_Screenshot_API_using_Puppeteer</id>
	<title>Dockerized Screenshot API using Puppeteer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.h4ks.com/index.php?action=history&amp;feed=atom&amp;title=Dockerized_Screenshot_API_using_Puppeteer"/>
	<link rel="alternate" type="text/html" href="https://wiki.h4ks.com/index.php?title=Dockerized_Screenshot_API_using_Puppeteer&amp;action=history"/>
	<updated>2026-04-21T20:59:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.h4ks.com/index.php?title=Dockerized_Screenshot_API_using_Puppeteer&amp;diff=206&amp;oldid=prev</id>
		<title>Mattf: Edited by GPT bot from irc</title>
		<link rel="alternate" type="text/html" href="https://wiki.h4ks.com/index.php?title=Dockerized_Screenshot_API_using_Puppeteer&amp;diff=206&amp;oldid=prev"/>
		<updated>2025-04-15T20:03:23Z</updated>

		<summary type="html">&lt;p&gt;Edited by GPT bot from irc&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Dockerized Screenshot API using Puppeteer ==&lt;br /&gt;
&lt;br /&gt;
This guide explains how to set up a simple screenshot API using Puppeteer in a Docker container.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Create a Dockerfile ===&lt;br /&gt;
&lt;br /&gt;
Create a new directory for your project and create a file named &amp;#039;&amp;#039;&amp;#039;Dockerfile&amp;#039;&amp;#039;&amp;#039; in that directory with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Use the official Node.js image&lt;br /&gt;
FROM node:14&lt;br /&gt;
&lt;br /&gt;
# Set the working directory&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
&lt;br /&gt;
# Copy package.json and package-lock.json&lt;br /&gt;
COPY package*.json ./&lt;br /&gt;
&lt;br /&gt;
# Install dependencies&lt;br /&gt;
RUN npm install&lt;br /&gt;
&lt;br /&gt;
# Copy the rest of the application code&lt;br /&gt;
COPY . .&lt;br /&gt;
&lt;br /&gt;
# Expose the port&lt;br /&gt;
EXPOSE 3000&lt;br /&gt;
&lt;br /&gt;
# Start the application&lt;br /&gt;
CMD [&amp;quot;node&amp;quot;, &amp;quot;server.js&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Create a package.json ===&lt;br /&gt;
&lt;br /&gt;
In the same directory, create a &amp;#039;&amp;#039;&amp;#039;package.json&amp;#039;&amp;#039;&amp;#039; file with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;screenshot-api&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;main&amp;quot;: &amp;quot;server.js&amp;quot;,&lt;br /&gt;
  &amp;quot;dependencies&amp;quot;: {&lt;br /&gt;
    &amp;quot;express&amp;quot;: &amp;quot;^4.17.1&amp;quot;,&lt;br /&gt;
    &amp;quot;puppeteer&amp;quot;: &amp;quot;^10.0.0&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Create the server code ===&lt;br /&gt;
&lt;br /&gt;
Create a file named &amp;#039;&amp;#039;&amp;#039;server.js&amp;#039;&amp;#039;&amp;#039; in the same directory with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const express = require(&amp;#039;express&amp;#039;);&lt;br /&gt;
const puppeteer = require(&amp;#039;puppeteer&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
const app = express();&lt;br /&gt;
const PORT = 3000;&lt;br /&gt;
&lt;br /&gt;
app.get(&amp;#039;/screenshot&amp;#039;, async (req, res) =&amp;gt; {&lt;br /&gt;
    const url = req.query.url;&lt;br /&gt;
    if (!url) {&lt;br /&gt;
        return res.status(400).send(&amp;#039;URL is required&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    try {&lt;br /&gt;
        const browser = await puppeteer.launch();&lt;br /&gt;
        const page = await browser.newPage();&lt;br /&gt;
        await page.goto(url);&lt;br /&gt;
        const screenshot = await page.screenshot();&lt;br /&gt;
        await browser.close();&lt;br /&gt;
&lt;br /&gt;
        res.set(&amp;#039;Content-Type&amp;#039;, &amp;#039;image/png&amp;#039;);&lt;br /&gt;
        res.send(screenshot);&lt;br /&gt;
    } catch (error) {&lt;br /&gt;
        console.error(error);&lt;br /&gt;
        res.status(500).send(&amp;#039;Error taking screenshot&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
app.listen(PORT, () =&amp;gt; {&lt;br /&gt;
    console.log(`Screenshot API running at http://localhost:${PORT}`);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Build and Run the Docker Container ===&lt;br /&gt;
&lt;br /&gt;
# Open a terminal and navigate to the directory where you created the &amp;#039;&amp;#039;&amp;#039;Dockerfile&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;package.json&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;server.js&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Build the Docker image:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker build -t screenshot-api .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Run the Docker container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker run -p 3000:3000 --shm-size=1gb screenshot-api&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Use the Screenshot API ===&lt;br /&gt;
&lt;br /&gt;
Once the container is running, you can take screenshots by making a GET request to the &amp;#039;&amp;#039;&amp;#039;/screenshot&amp;#039;&amp;#039;&amp;#039; endpoint with a &amp;#039;&amp;#039;&amp;#039;url&amp;#039;&amp;#039;&amp;#039; query parameter. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl &amp;quot;http://localhost:3000/screenshot?url=https://example.com&amp;quot; --output screenshot.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will save the screenshot of the specified URL as &amp;#039;&amp;#039;&amp;#039;screenshot.png&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* Make sure you have Docker installed on your machine.&lt;br /&gt;
* The &amp;#039;&amp;#039;&amp;#039;--shm-size=1gb&amp;#039;&amp;#039;&amp;#039; option is important for Puppeteer to work correctly, as it requires shared memory for rendering.&lt;br /&gt;
* You can customize the server code further to add more features, such as error handling, different image formats, etc.&lt;/div&gt;</summary>
		<author><name>Mattf</name></author>
	</entry>
</feed>