hero-core (latest)
Published 2026-04-05 01:06:18 +00:00 by MRLokop
Installation
docker pull git.mrlokop.dev/images/hero-core:latestsha256:15e091907ca2bdd7ac71ac307ffb2641d85ffa49d442e37986617f3aef484144
Image Layers
| # debian.sh --arch 'amd64' out/ 'stable' '@1773619200' |
| RUN /bin/sh -c apt-get update && apt-get install -qy ca-certificates curl wget unzip fonts-freefont-ttf socat libxss1 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libasound2t64 libxfixes3 libx11-xcb1 libxcb1 --no-install-recommends && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt-get install -y nodejs && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit |
| RUN /bin/sh -c useradd headless --shell /bin/bash --create-home && usermod -a -G sudo headless && echo 'ALL ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers && echo 'headless:nopassword' | chpasswd # buildkit |
| RUN /bin/sh -c mkdir -p /browsers /data && chown -R headless:headless /browsers /data # buildkit |
| WORKDIR /app |
| COPY /app/node_modules ./node_modules # buildkit |
| COPY /app/package.json ./package.json # buildkit |
| COPY /emulator-data ./node_modules/@ulixee/default-browser-emulator/data # buildkit |
| RUN /bin/sh -c chown -R headless:headless /app # buildkit |
| USER headless |
| EXPOSE [1337/tcp] |
| ENTRYPOINT [] |
| CMD ["node" "-e" "const Core = require('@ulixee/hero-core').default;const { WsTransportToClient } = require('@ulixee/net');const WebSocket = require('ws');const port = parseInt(process.env.HERO_PORT || '1337');const proxyUrl = process.env.HERO_UPSTREAM_PROXY || '';if (proxyUrl) console.log('Upstream proxy: ' + proxyUrl.replace(/:[^:@]+@/, ':***@'));Core.start().then(core => { const origAdd = core.addConnection.bind(core); core.addConnection = function(t) { const c = origAdd(t); if (proxyUrl) { const oc = c.createSession.bind(c); c.createSession = async function(o) { o=o||{}; if(!o.upstreamProxyUrl) o.upstreamProxyUrl=proxyUrl; return oc(o); }; } return c; }; const wss = new WebSocket.Server({ port }, () => console.log('Hero Core listening on port ' + port)); wss.on('connection', (ws, req) => { console.log('Connection from ' + req.socket.remoteAddress); const t = new WsTransportToClient(ws, req); core.addConnection(t); }); process.on('SIGTERM', () => { wss.close(); Core.shutdown(); });}).catch(e => { console.error(e); process.exit(1); });"] |