Skip to content

Instantly share code, notes, and snippets.

@maxisam
Last active May 1, 2025 17:55
Show Gist options
  • Save maxisam/aaab3c373bd63a158830230ea2a66b95 to your computer and use it in GitHub Desktop.
Save maxisam/aaab3c373bd63a158830230ea2a66b95 to your computer and use it in GitHub Desktop.
Prerender
FROM zenika/alpine-chrome:124-with-node
# user chrome is created in the base image
# and has the following UID/GID: 1000:1000
USER chrome
WORKDIR "/home/node"
COPY ./package.json .
COPY ./server.js .
# install npm packages and clear cache
RUN npm install --no-package-lock \
&& npm cache clean --force
EXPOSE 3000
EXPOSE 9222
ENTRYPOINT ["tini", "--"]
CMD ["node", "server.js"]
{
"name": "prerender-alpine",
"version": "0.0.1",
"description": "prerender server for prerendering web pages",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"prerender": "5.21.6",
"prerender-memory-cache": "1.0.2"
}
}
'use strict';
const prerender = require('prerender');
const memoryCache = require('prerender-memory-cache');
const server = prerender({
chromeFlags: ['--no-sandbox', '--headless', '--disable-gpu', '--remote-debugging-port=9222', '--remote-debugging-address=0.0.0.0', '--hide-scrollbars', '--disable-dev-shm-usage'],
forwardHeaders: true,
chromeLocation: '/usr/bin/chromium-browser'
});
const memCache = Number(process.env.MEMORY_CACHE) || 0;
if (memCache === 1) {
server.use(memoryCache);
}
server.use({
requestReceived: (req, res, next) => {
if (req.prerender.url === '/' || req.prerender.url === '') {
res.send(200, '<h1>Prerender</h1>');
} else {
next();
}
}
});
server.use(prerender.blacklist());
server.use(prerender.httpHeaders());
server.use(prerender.removeScriptTags());
server.start();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment