Want to deploy Puppeter or chrome-browser

RMAG news

Dockerfile

# Use the official Node.js image as the base
FROM node:22
# Set the working directory
WORKDIR /app

# Copy package.json and pnpm-lock.yaml to the container
COPY package.json pnpm-lock.yaml ./

# Install Google Chrome or Chromium
# Install Google Chrome
RUN apt-get update
&& apt-get install -y wget gnupg
&& wget -q -O – https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add –
&& echo “deb 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-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf
–no-install-recommends
&& rm -rf /var/lib/apt/lists/*

# Install pnpm globally and install dependencies
RUN npm install -g pnpm && pnpm install

# Copy the rest of the application code
COPY . .

# Set environment variable for the port
ENV PORT=3000
ENV CHROME_PATH=/usr/bin/google-chrome

# Build the application
RUN pnpm build

# Expose the port the app runs on
EXPOSE 3000

# Command to start the application
CMD [“pnpm”, “start”]

Example function for your chrome-browser

utils.ts

import lighthouse, { Flags } from “lighthouse”;
import * as ChromeLauncher from “chrome-launcher”;

export const detail = async (isHtml: boolean, webURL: string) => {
const chrome = await ChromeLauncher.launch({
chromeFlags: [“–headless”, “–no-sandbox”, “–disable-setuid-sandbox”],
chromePath: “/usr/bin/google-chrome”,
logLevel: “info”,
});

const options: Flags = {
logLevel: “verbose”,
output: isHtml ? “html” : “json”,
onlyCategories: [“performance”],
port: chrome.port,
};
const runnerResult = await lighthouse(webURL, options);
if (chrome) {
chrome.kill();
}

if (runnerResult) {
const report = runnerResult.report;
if (typeof report === `string`) return isHtml ? report : JSON.parse(report);
else return isHtml ? report : JSON.parse(report[0]);
}
return null;
};

it’s lighthouse setup also