diff --git a/.github/workflows/build-docker-image.yml b/.github/workflows/build-docker-image.yml new file mode 100644 index 0000000..21a7139 --- /dev/null +++ b/.github/workflows/build-docker-image.yml @@ -0,0 +1,55 @@ +name: Docker Image CI + +on: + schedule: + - cron: 0 0 * * 6 + push: + branches: + - master + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + container: neuralegion/devops + + strategy: + matrix: + package: + - chromium + - chromium-headful + - chrome + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME }} + aws-region: ${{ vars.AWS_DEFAULT_REGION }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Get version + id: get_version + run: echo ::set-output name=result::$(make --file ${{ matrix.package }}/Makefile get-version) + + - name: Build image + run: make --file ${{ matrix.package }}/Makefile build version=${{ steps.get_version.outputs.result }} + + - name: Login into Docker + run: docker login --username=anatol1988 --password=${{ secrets.DOCKER_TOKEN }} + + - name: Push image to Docker + run: docker push neuralegion/nextools-${{ matrix.package }} + + - name: Push Docker image to AWS ECR + run: docker push 454884832027.dkr.ecr.us-east-1.amazonaws.com/nextools-${{ matrix.package }} + diff --git a/.github/workflows/on-schedule.yml b/.github/workflows/on-schedule.yml index 1b8e8f0..8453e01 100644 --- a/.github/workflows/on-schedule.yml +++ b/.github/workflows/on-schedule.yml @@ -4,8 +4,8 @@ on: repository_dispatch: types: check schedule: - # every 12 hours - - cron: '0 */12 * * *' + # every 3 days + - cron: 0 0 * * 3 jobs: check: @@ -15,7 +15,7 @@ jobs: matrix: package: - chromium - - firefox + - chromium-headful steps: - name: Checkout @@ -31,7 +31,7 @@ jobs: - name: Check status id: check_status - run: echo ::set-output name=result::$(git tag | grep --quiet ${{ matrix.package }}@${{ steps.get_version.outputs.result }} && echo 'up-to-date' || echo 'outdated') + run: echo ::set-output name=result::$(git tag | grep --quiet chromium@${{ steps.get_version.outputs.result }} && echo 'up-to-date' || echo 'outdated') - name: Print results run: | @@ -84,18 +84,10 @@ jobs: if: steps.check_status.outputs.result == 'outdated' run: git push --force --tags origin master - - name: Docker GitHub Packages login + - name: Login into Docker if: steps.check_status.outputs.result == 'outdated' - run: echo ${{ secrets.GITHUB_TOKEN }} | docker login --username ${{ github.actor }} --password-stdin docker.pkg.github.com + run: docker login --username=anatol1988 --password=${{ secrets.DOCKER_TOKEN }} - - name: Docker GitHub Packages push + - name: Push image to Docker if: steps.check_status.outputs.result == 'outdated' - run: docker push docker.pkg.github.com/nextools/images/${{ matrix.package }} - - - name: Docker Hub login - if: steps.check_status.outputs.result == 'outdated' - run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login --username nextoolsbot --password-stdin - - - name: Docker Hub push - if: steps.check_status.outputs.result == 'outdated' - run: docker push nextools/${{ matrix.package }} + run: docker push neuralegion/nextools-${{ matrix.package }} diff --git a/chrome/Dockerfile b/chrome/Dockerfile new file mode 100644 index 0000000..4b64187 --- /dev/null +++ b/chrome/Dockerfile @@ -0,0 +1,29 @@ +FROM ubuntu:bionic + +ARG VERSION +ARG DEBIAN_FRONTEND=noninteractive +ENV DBUS_SESSION_BUS_ADDRESS disabled: +ENV RD_PORT=9222 + +RUN apt-get update \ + # https://github.com/phusion/baseimage-docker/issues/319 + && apt-get install --yes apt-utils 2>&1 | grep -v "debconf: delaying package configuration, since apt-utils is not installed" \ + && apt-get install -y wget gnupg \ + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/googlechrome-linux-keyring.gpg \ + && sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrome-linux-keyring.gpg] https://dl-ssl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ + && wget --no-verbose -O /tmp/chrome.deb https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${VERSION}_amd64.deb \ + && apt-get update \ + && apt-get install -y /tmp/chrome.deb fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-khmeros fonts-kacst fonts-freefont-ttf libxss1 dumb-init socat dbus dbus-x11 \ + --no-install-recommends \ + && service dbus start \ + && rm -rf /var/lib/apt/lists/* \ + && groupadd -r chrome && useradd --create-home -rm -g chrome -G audio,video chrome + + +WORKDIR /home/chrome + +COPY --chown=chrome:chrome entrypoint.sh /home/chrome/ + +USER chrome + +ENTRYPOINT ["dumb-init", "--", "/bin/sh", "/home/chrome/entrypoint.sh"] diff --git a/chrome/Makefile b/chrome/Makefile new file mode 100644 index 0000000..a45c056 --- /dev/null +++ b/chrome/Makefile @@ -0,0 +1,32 @@ +.PHONY: get-version build test tags + +CURRENT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) +VERSION:="127.0.6533.88-1" + +# get-version: +# @docker pull ubuntu:bionic > /dev/null 2>&1 +# @docker run --rm \ +# ubuntu:bionic \ +# sh -c "apt-get update --quiet=2 && apt-cache policy chromium-browser | sed --regexp-extended --quiet 's/.*Candidate: ([0-9.]+)-.+/\1/p'" + +get-version: + @echo $(VERSION) + +build: + @docker build --tag neuralegion/nextools-chrome --tag 454884832027.dkr.ecr.us-east-1.amazonaws.com/nextools-chrome --build-arg VERSION=$(VERSION) $(CURRENT_DIR) + +test: + @docker run --detach --publish 9222:9222 --name nextools-chrome neuralegion/nextools-chrome + @timeout 20s sh -c "trap 'docker container rm --force nextools-chrome' 0; until curl http://localhost:9222/json/version; do sleep 1; done" + +tags: + @for i in 3 2 1 0 -1; do \ + if [ $$i -ge 0 ]; then \ + tag=`echo $(version) | sed --regexp-extended "s/(\.[0-9]+){$$i}$$//"`; \ + else \ + tag=latest; \ + fi; \ + echo $$tag; \ + docker tag nextools-chrome neuralegion/nextools-chrome:$$tag; \ + git tag --force nextools-chrome@$$tag; \ + done diff --git a/chrome/entrypoint.sh b/chrome/entrypoint.sh new file mode 100644 index 0000000..6496969 --- /dev/null +++ b/chrome/entrypoint.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +if [ "$(ls -A /home/chrome/.fonts/)" ]; then + fc-cache -f -v +fi + +RD_PORT="${RD_PORT:=9222}" + +ip=$(hostname --ip-address) +socat tcp-listen:$RD_PORT,bind="$ip",fork tcp:127.0.0.1:$RD_PORT & + +(ulimit -n 65000 || true) && (ulimit -p 65000 || true) && exec google-chrome-stable \ + --enable-automation \ + --silent-debugger-extension-api \ + --allow-pre-commit-input \ + --ash-no-nudges \ + --disable-gpu-process-crash-limit \ + --disable-background-networking \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-breakpad \ + --disable-client-side-phishing-detection \ + --disable-setuid-sandbox \ + --disable-default-apps \ + --disable-speech-api \ + --disable-dev-shm-usage \ + --disable-domain-reliability \ + --disable-notifications \ + --disable-extensions \ + --disable-field-trial-config \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-search-engine-choice-screen \ + --disable-offer-store-unmasked-wallet-cards \ + --disable-sync \ + --disable-component-extensions-with-background-pages \ + --deny-permission-prompts \ + --disable-print-preview \ + --noerrdialogs \ + --disable-hang-monitor \ + --disable-ipc-flooding-protection \ + --disable-component-update \ + --headless=old \ + --export-tagged-pdf \ + --force-color-profile=srgb \ + --no-zygote \ + --start-maximized \ + --password-store=basic \ + --use-mock-keychain \ + --disable-features=Translate,AcceptCHFrame,MediaRouter,OptimizationHints,ProcessPerSiteUpToMainFrameThreshold,ImprovedCookieControls \ + --enable-features=NetworkServiceInProcess2 \ + --hide-scrollbars \ + --ignore-certificate-errors \ + --ignore-certificate-errors-spki-list \ + --ignore-ssl-errors \ + --ignore-unknown-auth-factors \ + --metrics-recording-only \ + --mute-audio \ + --no-first-run \ + --no-sandbox \ + --no-default-browser-check \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port="$RD_PORT" \ + --user-data-dir=/home/chrome/ \ + --window-size=1920,1080 \ + --window-position=0,0 \ + "$@" diff --git a/chrome/license.md b/chrome/license.md new file mode 100644 index 0000000..c5ac205 --- /dev/null +++ b/chrome/license.md @@ -0,0 +1,22 @@ +# The MIT License (MIT) + +* Copyright (c) 2018–2020 Kir Belevich +* Copyright (c) 2020–present NexTools + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/chrome/readme.md b/chrome/readme.md new file mode 100644 index 0000000..96294a0 --- /dev/null +++ b/chrome/readme.md @@ -0,0 +1,36 @@ +# chrome + +Dockerized Chrome + +## Usage + +### Docker Hub + +```sh +docker run -it --rm -p 9222:9222 neuralegion/nextools-chrome: +``` +--> + +## How to + +### specify a different port + +Container uses a `RD_PORT` [environment variable](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file), which is `9222` by default: + +``` +docker run -it --rm -p 9223:9223 -e RD_PORT=9223 neuralegion/nextools-chrome: +``` + +### pass additional Chrome arguments + +``` +docker run -it --rm -p 9222:9222 neuralegion/nextools-chrome: --some-chrome-arg +``` + +### add custom fonts + +It's possible to mount a folder with custom fonts to be used later by Chrome: + +``` +docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/chrome/.fonts neuralegion/nextools-chrome: +``` diff --git a/chromium-headful/Dockerfile b/chromium-headful/Dockerfile new file mode 100644 index 0000000..05a3a43 --- /dev/null +++ b/chromium-headful/Dockerfile @@ -0,0 +1,31 @@ +FROM ubuntu:bionic + +ARG VERSION +ARG DEBIAN_FRONTEND=noninteractive +ENV RD_PORT=9222 + +RUN apt-get update \ + # https://github.com/phusion/baseimage-docker/issues/319 + && apt-get install --yes apt-utils 2>&1 | grep -v "debconf: delaying package configuration, since apt-utils is not installed" \ + && apt-get install --no-install-recommends --yes \ + htop \ + net-tools \ + dumb-init \ + fontconfig \ + chromium-browser=${VERSION}\* \ + curl \ + xvfb \ + socat \ + && rm -rf /var/lib/apt/lists/* + +RUN groupadd chromium +RUN useradd --create-home --gid chromium chromium +RUN chown --recursive chromium:chromium /home/chromium/ + +VOLUME ["/home/chromium/.fonts"] + +COPY --chown=chromium:chromium entrypoint.sh /home/chromium/ + +USER chromium + +ENTRYPOINT ["dumb-init", "--", "/bin/sh", "/home/chromium/entrypoint.sh"] diff --git a/chromium-headful/Makefile b/chromium-headful/Makefile new file mode 100644 index 0000000..0854f25 --- /dev/null +++ b/chromium-headful/Makefile @@ -0,0 +1,28 @@ +.PHONY: get-version build test tags + +CURRENT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) + +get-version: + @docker pull ubuntu:bionic > /dev/null 2>&1 + @docker run --rm \ + ubuntu:bionic \ + sh -c "apt-get update --quiet=2 && apt-cache policy chromium-browser | sed --regexp-extended --quiet 's/.*Candidate: ([0-9.]+)-.+/\1/p'" + +build: + @docker build --tag neuralegion/nextools-chromium-headful --tag 454884832027.dkr.ecr.us-east-1.amazonaws.com/nextools-chromium-headful --build-arg VERSION=$(version) $(CURRENT_DIR) + +test: + @docker run --detach --publish 9222:9222 --name nextools-chromium-headful neuralegion/nextools-chromium-headful + @timeout 20s sh -c "trap 'docker container rm --force nextools-chromium' 0; until curl http://localhost:9222/json/version; do sleep 1; done" + +tags: + @for i in 3 2 1 0 -1; do \ + if [ $$i -ge 0 ]; then \ + tag=`echo $(version) | sed --regexp-extended "s/(\.[0-9]+){$$i}$$//"`; \ + else \ + tag=latest; \ + fi; \ + echo $$tag; \ + docker tag nextools-chromium-headful neuralegion/nextools-chromium-headful:$$tag; \ + git tag --force nextools-chromium-headful@$$tag; \ + done diff --git a/chromium-headful/entrypoint.sh b/chromium-headful/entrypoint.sh new file mode 100644 index 0000000..7ea56b4 --- /dev/null +++ b/chromium-headful/entrypoint.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +if [ "$(ls -A /home/chromium/.fonts/)" ]; then + fc-cache -f -v +fi + +ip=$(hostname --ip-address) +socat tcp-listen:"$RD_PORT",bind="$ip",fork tcp:0.0.0.0:"$RD_PORT" & +(ulimit -n 65000 || true) && (ulimit -p 65000 || true) && \ + xvfb-run -a \ + /usr/bin/chromium-browser \ + --enable-automation \ + --disable-background-networking \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-breakpad \ + --disable-client-side-phishing-detection \ + --disable-default-apps \ + --disable-dev-shm-usage \ + --disable-extensions \ + --disable-gpu \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-sync \ + --disable-translate \ + --disable-setuid-sandbox \ + --disable-ipc-flooding-protection \ + --disable-component-update \ + --hide-scrollbars \ + --ignore-certificate-errors \ + --ignore-certificate-errors-spki-list \ + --ignore-ssl-errors \ + --metrics-recording-only \ + --mute-audio \ + --no-first-run \ + --no-sandbox \ + --no-default-browser-check \ + --remote-debugging-address=0.0.0.0 \ + --remote-debugging-port="$RD_PORT" \ + --safebrowsing-disable-auto-update \ + --user-data-dir=/home/chromium/ \ + --window-size=1920,1080 \ + "$@" diff --git a/chromium-headful/license.md b/chromium-headful/license.md new file mode 100644 index 0000000..c5ac205 --- /dev/null +++ b/chromium-headful/license.md @@ -0,0 +1,22 @@ +# The MIT License (MIT) + +* Copyright (c) 2018–2020 Kir Belevich +* Copyright (c) 2020–present NexTools + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/chromium-headful/readme.md b/chromium-headful/readme.md new file mode 100644 index 0000000..0fee5c7 --- /dev/null +++ b/chromium-headful/readme.md @@ -0,0 +1,64 @@ +# chromium + +[![version](https://flat.badgen.net/badge/version/111.0.5563.64/blue)](https://www.chromestatus.com/features/schedule) [![size](https://flat.badgen.net/badge/size/20/blue)](https://hub.docker.com/repository/docker/nextools/chromium/tags) + +Dockerized Chromium in headful+remote debugging mode + +Auto-updatable every 12 hours: Chromium version is split into multiple Docker tags, for example version `80.0.3987.87` produces `80`, `80.0`, `80.0.3987`, `80.0.3987.87` and `latest` tagged images. See [list of tags available to use](https://hub.docker.com/repository/docker/nextools/chromium/tags). + + +## Usage + +### Docker Hub + +```sh +docker run -it --rm -p 9222:9222 neuralegion/nextools-chromium: +``` +--> + +### Puppeteer + +Ensure to match version of [`puppeteer-core`](https://github.com/GoogleChrome/puppeteer) to the version of Chromium you are using: + +```sh +yarn add puppeteer-core@chrome- +``` + +```js +import fetch from 'node-fetch' +import puppeteer from 'puppeteer-core' + +const response = await fetch('http://localhost:9222/json/version') +const { webSocketDebuggerUrl } = await response.json() + +const browser = await puppeteer.connect({ browserWSEndpoint: webSocketDebuggerUrl }) +const page = await browser.newPage() + +await page.goto('https://example.com') +await page.screenshot({ path: 'example.png' }) +await browser.close() +``` + +## How to + +### specify a different port + +Container uses a `RD_PORT` [environment variable](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file), which is `9222` by default: + +``` +docker run -it --rm -p 9223:9223 -e RD_PORT=9223 neuralegion/nextools-chromium: +``` + +### pass additional Chromium arguments + +``` +docker run -it --rm -p 9222:9222 neuralegion/nextools-chromium: --some-chromium-arg +``` + +### add custom fonts + +It's possible to mount a folder with custom fonts to be used later by Chromium: + +``` +docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/chromium/.fonts neuralegion/nextools-chromium: +``` diff --git a/chromium/Dockerfile b/chromium/Dockerfile index affe0db..2d6a343 100644 --- a/chromium/Dockerfile +++ b/chromium/Dockerfile @@ -8,13 +8,17 @@ RUN apt-get update \ # https://github.com/phusion/baseimage-docker/issues/319 && apt-get install --yes apt-utils 2>&1 | grep -v "debconf: delaying package configuration, since apt-utils is not installed" \ && apt-get install --no-install-recommends --yes \ + htop \ + net-tools \ dumb-init \ fontconfig \ chromium-browser=${VERSION}\* \ - && rm -rf /var/lib/apt/lists/* \ - && groupadd chromium \ - && useradd --create-home --gid chromium chromium \ - && chown --recursive chromium:chromium /home/chromium/ + curl \ + && rm -rf /var/lib/apt/lists/* + +RUN groupadd chromium +RUN useradd --create-home --gid chromium chromium +RUN chown --recursive chromium:chromium /home/chromium/ VOLUME ["/home/chromium/.fonts"] diff --git a/chromium/Makefile b/chromium/Makefile index 928d6ab..bfb3bdb 100644 --- a/chromium/Makefile +++ b/chromium/Makefile @@ -9,11 +9,11 @@ get-version: sh -c "apt-get update --quiet=2 && apt-cache policy chromium-browser | sed --regexp-extended --quiet 's/.*Candidate: ([0-9.]+)-.+/\1/p'" build: - @docker build --tag chromium --build-arg VERSION=$(version) $(CURRENT_DIR) + @docker build --tag neuralegion/nextools-chromium --tag 454884832027.dkr.ecr.us-east-1.amazonaws.com/nextools-chromium --build-arg VERSION=$(version) $(CURRENT_DIR) test: - @docker run --detach --publish 9222:9222 --name chromium chromium - @timeout 20s sh -c "trap 'docker container rm --force chromium' 0; until curl http://localhost:9222/json/version; do sleep 1; done" + @docker run --detach --publish 9222:9222 --name nextools-chromium neuralegion/nextools-chromium + @timeout 20s sh -c "trap 'docker container rm --force nextools-chromium' 0; until curl http://localhost:9222/json/version; do sleep 1; done" tags: @for i in 3 2 1 0 -1; do \ @@ -23,7 +23,6 @@ tags: tag=latest; \ fi; \ echo $$tag; \ - docker tag chromium docker.pkg.github.com/nextools/images/chromium:$$tag; \ - docker tag chromium nextools/chromium:$$tag; \ - git tag --force chromium@$$tag; \ + docker tag nextools-chromium neuralegion/nextools-chromium:$$tag; \ + git tag --force nextools-chromium@$$tag; \ done diff --git a/chromium/entrypoint.sh b/chromium/entrypoint.sh index dbac358..5895f88 100644 --- a/chromium/entrypoint.sh +++ b/chromium/entrypoint.sh @@ -4,7 +4,8 @@ if [ "$(ls -A /home/chromium/.fonts/)" ]; then fc-cache -f -v fi -/usr/bin/chromium-browser \ +(ulimit -n 65000 || true) && (ulimit -p 65000 || true) && exec /usr/bin/chromium-browser \ + --enable-automation \ --disable-background-networking \ --disable-background-timer-throttling \ --disable-backgrounding-occluded-windows \ @@ -19,6 +20,8 @@ fi --disable-prompt-on-repost \ --disable-sync \ --disable-translate \ + --disable-ipc-flooding-protection \ + --disable-component-update \ --headless \ --hide-scrollbars \ --ignore-certificate-errors \ @@ -28,8 +31,10 @@ fi --mute-audio \ --no-first-run \ --no-sandbox \ + --no-default-browser-check \ --remote-debugging-address=0.0.0.0 \ --remote-debugging-port="$RD_PORT" \ --safebrowsing-disable-auto-update \ --user-data-dir=/home/chromium/ \ + --window-size=1920,1080 \ "$@" diff --git a/chromium/readme.md b/chromium/readme.md index 1b0b0f1..9c40fa3 100644 --- a/chromium/readme.md +++ b/chromium/readme.md @@ -1,6 +1,6 @@ # chromium -[![version](https://flat.badgen.net/badge/version/99.0.4844.51/blue)](https://www.chromestatus.com/features/schedule) [![size](https://flat.badgen.net/badge/size/139M/blue)](https://hub.docker.com/repository/docker/nextools/chromium/tags) +[![version](https://flat.badgen.net/badge/version/112.0.5615.49/blue)](https://www.chromestatus.com/features/schedule) [![size](https://flat.badgen.net/badge/size/20/blue)](https://hub.docker.com/repository/docker/nextools/chromium/tags) Dockerized Chromium in [headless + remote debugging mode](https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md). @@ -12,16 +12,16 @@ Auto-updatable every 12 hours: Chromium version is split into multiple Docker ta ### Docker Hub ```sh -docker run -it --rm -p 9222:9222 nextools/chromium: +docker run -it --rm -p 9222:9222 neuralegion/nextools-chromium: ``` -### GitHub Packages + ### Puppeteer @@ -53,13 +53,13 @@ await browser.close() Container uses a `RD_PORT` [environment variable](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file), which is `9222` by default: ``` -docker run -it --rm -p 9223:9223 -e RD_PORT=9223 nextools/chromium: +docker run -it --rm -p 9223:9223 -e RD_PORT=9223 neuralegion/nextools-chromium: ``` ### pass additional Chromium arguments ``` -docker run -it --rm -p 9222:9222 nextools/chromium: --some-chromium-arg +docker run -it --rm -p 9222:9222 neuralegion/nextools-chromium: --some-chromium-arg ``` ### add custom fonts @@ -67,5 +67,5 @@ docker run -it --rm -p 9222:9222 nextools/chromium: --some-chromium-arg It's possible to mount a folder with custom fonts to be used later by Chromium: ``` -docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/chromium/.fonts nextools/chromium: +docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/chromium/.fonts neuralegion/nextools-chromium: ``` diff --git a/firefox/Dockerfile b/firefox/Dockerfile index 6a4cbfe..869e839 100644 --- a/firefox/Dockerfile +++ b/firefox/Dockerfile @@ -17,10 +17,11 @@ RUN apt-get update \ socat \ fontconfig \ firefox-trunk=${VERSION}\* \ - && rm -rf /var/lib/apt/lists/* \ - && groupadd firefox \ - && useradd --create-home --gid firefox firefox \ - && chown --recursive firefox:firefox /home/firefox/ + && rm -rf /var/lib/apt/lists/* + +RUN groupadd firefox +RUN useradd --create-home --gid firefox firefox +RUN chown --recursive firefox:firefox /home/firefox/ VOLUME ["/home/firefox/.fonts"] diff --git a/firefox/Makefile b/firefox/Makefile index 4f85620..e9d6b73 100644 --- a/firefox/Makefile +++ b/firefox/Makefile @@ -10,17 +10,23 @@ get-version: build: @_version=`echo $(version) | sed --regexp-extended s/a/~a/` - @docker build --tag firefox --build-arg VERSION=$$_version $(CURRENT_DIR) + @docker build --tag neuralegion/nextools-firefox --build-arg VERSION=$$_version $(CURRENT_DIR) test: - @docker run --detach --publish 9222:9222 --name firefox firefox - @timeout 20s sh -c "trap 'docker container rm --force firefox' 0; until curl http://localhost:9222/json/version; do sleep 1; done" + @docker run --detach --publish 9222:9222 --name nextools-firefox neuralegion/nextools-firefox + @timeout 20s sh -c "trap 'docker container rm --force nextools-firefox' 0; until curl http://localhost:9222/json/version; do sleep 1; done" + +# tags: +# @for tag in $(version) latest; do \ +# echo $$tag; \ +# docker tag nextools-firefox docker.pkg.github.com/neuralegion/images/nextools-firefox:$$tag; \ +# docker tag nextools-firefox neuralegion/nextools-firefox:$$tag; \ +# git tag --force firefox@$$tag >/dev/null 2>&1; \ +# done tags: @for tag in $(version) latest; do \ echo $$tag; \ - docker tag firefox docker.pkg.github.com/nextools/images/firefox:$$tag; \ - docker tag firefox nextools/firefox:$$tag; \ - git tag --force firefox@$$tag >/dev/null 2>&1; \ + docker tag nextools-firefox neuralegion/nextools-firefox:$$tag; \ + git tag --force nextools-firefox@$$tag >/dev/null 2>&1; \ done - diff --git a/firefox/profile/prefs.js b/firefox/profile/prefs.js index a3c110b..d358531 100644 --- a/firefox/profile/prefs.js +++ b/firefox/profile/prefs.js @@ -14,10 +14,42 @@ user_pref("browser.onboarding.enabled", false); user_pref("browser.tabs.warnOnClose", false); user_pref("browser.tabs.warnOnCloseOtherTabs", false); user_pref("browser.tabs.warnOnOpen", false); -user_pref("browser.link.open_newwindow", 3); +// optimize memory +user_pref("browser.tabs.remote.autostart", false); + +/* Prop: browser.link.open_newwindow +1 = force new window into same tab +2 = allow link to open a new window +3 = divert new window to a new tab (default) +*/ +user_pref("browser.link.open_newwindow", 1); +/* Prop: browser.link.open_newwindow.restriction +0 = apply the setting under (browser.link.open_newwindow) to ALL new windows (even script windows) +1 = override the setting under (browser.link.open_newwindow) and always use new windows +2 = apply the setting under (browser.link.open_newwindow) to normal windows, but NOT to script windows with features (default) +*/ user_pref("browser.link.open_newwindow.restriction", 0); +/* Prop: browser.link.open_newwindow.override.external +-1 = apply the setting under (browser.link.open_newwindow) to external links (default) +1 = open external links in the last active tab replacing the current page +2 = open external links in a new window +3 = open external links in a new tab in the last active window +*/ +user_pref("browser.link.open_newwindow.override.external", 1); // updates +user_pref("media.eme.enabled", false); +user_pref("media.gmp-widevinecdm.enabled", false); +user_pref("media.gmp-gmpopenh264.enabled", false); +user_pref("media.gmp-gmpopenh264.autoupdate", false); +user_pref("media.gmp-manager.cert.checkAttributes", false); +user_pref("media.gmp-gmpopenh264.visible", false); +user_pref("media.gmp-manager.cert.checkAttributes", false); +user_pref("media.gmp-manager.cert.requireBuiltIn", false); +user_pref("media.gmp-manager.url", "about:blank"); +user_pref("media.gmp-provider.enabled", false); +user_pref("media.gmp-widevinecdm.visible", false) +user_pref("media.gmp.trial-create.enabled", false); user_pref("app.update.enabled", false); user_pref("extensions.update.enabled", false); user_pref("extensions.update.autoUpdateDefault", false); @@ -29,7 +61,6 @@ user_pref("app.update.service.enabled", false); user_pref("app.update.staging.enabled", false); user_pref("lightweightThemes.update.enabled", false); user_pref("browser.search.update", false); -user_pref("browser.aboutHomeSnippets.updateUrl", "data:,"); // crash reports user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false); @@ -42,9 +73,12 @@ user_pref("browser.chrome.errorReporter.enabled", false); user_pref("browser.chrome.errorReporter.submitUrl", ""); // telemetry and data reporting +user_pref("toolkit.telemetry.unifiedIsOptIn", false); +user_pref("toolkit.telemetry.prompted", 2); +user_pref("toolkit.telemetry.rejected", true); user_pref("toolkit.telemetry.unified", false); user_pref("toolkit.telemetry.enabled", false); -user_pref("toolkit.telemetry.server", "data:,"); +user_pref("toolkit.telemetry.server", ""); user_pref("toolkit.telemetry.archive.enabled", false); user_pref("toolkit.telemetry.cachedClientID", ""); user_pref("toolkit.telemetry.newProfilePing.enabled", false); @@ -74,3 +108,55 @@ user_pref("experiments.manifest.uri", ""); user_pref("experiments.supported", false); user_pref("experiments.activeExperiment", false); user_pref("network.allow-experiments", false); + +// Marionette settings +user_pref("marionette.log.level", "debug"); + +// Enable authless screencapture +user_pref("media.getusermedia.browser.enabled", true); +user_pref("media.navigator.permission.disabled", true); + +// Don't fetch Favico +user_pref("browser.chrome.favicons", false); +user_pref("browser.chrome.site_icons", false); + +// Allow proxying of 127.0.0.1/localhost +user_pref("network.proxy.allow_hijacking_localhost", true); + +// Don't ask to save stuff to disk +user_pref("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,text/plain"); + +// Don't send silly data to Mozzila +user_pref("extensions.blocklist.enabled", false); +user_pref("browser.safebrowsing.downloads.remote.enabled", false); +user_pref("messaging-system.rsexperimentloader.enabled", false); +user_pref("browser.aboutHomeSnippets.updateUrl", ""); +user_pref("app.normandy.enabled", false); +user_pref("network.captive-portal-service.enabled", false); +user_pref("network.connectivity-service.enabled", false); +user_pref("identity.fxaccounts.enabled", false); + +// Handle SSL errors and such without popping screens +user_pref("security.insecure_field_warning.contextual.enabled", false); +user_pref("security.certerrors.permanentOverride", false); +user_pref("network.stricttransportsecurity.preloadlist", false); +user_pref("security.enterprise_roots.enabled", true); + +// Disable Cache +user_pref("browser.cache.disk.enable", false); +user_pref("browser.cache.memory.enable", false); +user_pref("browser.cache.offline.enable", false); +user_pref("network.http.use-cache", false); +user_pref("browser.cache.disk.capacity", 0); + +// Disable service workers +user_pref("dom.serviceWorkers.enabled", false); + +// For finally disable external urls requests +user_pref("app.update.url.details", "about:blank"); +user_pref("app.update.url.manual", "about:blank"); +user_pref("browser.safebrowsing.provider.google.updateURL", "about:blank"); +user_pref("browser.safebrowsing.provider.google4.updateURL", "about:blank"); +user_pref("browser.safebrowsing.provider.mozilla.updateURL", "about:blank"); +user_pref("extensions.update.background.url", "about:blank"); +user_pref("extensions.update.url", "about:blank"); diff --git a/firefox/readme.md b/firefox/readme.md index 02cac1a..3b7ffac 100644 --- a/firefox/readme.md +++ b/firefox/readme.md @@ -13,16 +13,16 @@ Auto-updatable every 12 hours (currently available only as [nightly alpha builds ### Docker Hub ```sh -docker run -it --rm -p 9222:9222 nextools/firefox: +docker run -it --rm -p 9222:9222 neuralegion/nextools-firefox: ``` -### GitHub Packages + ### Puppeteer @@ -52,19 +52,19 @@ await browser.close() Container uses a `RD_PORT` [environment variable](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file), which is `9222` by default: ``` -docker run -it --rm -p 9223:9223 -e RD_PORT=9223 nextools/firefox: +docker run -it --rm -p 9223:9223 -e RD_PORT=9223 neuralegion/nextools-firefox: ``` ### pass additional Firefox arguments ``` -docker run -it --rm -p 9222:9222 nextools/firefox: --some-firefox-arg +docker run -it --rm -p 9222:9222 neuralegion/nextools-firefox: --some-firefox-arg ``` ### add custom fonts -It's possible to mount a folder with custom fonts to be used later by Firefox: +It's possible to mount a folder with custom fonts to be used later by Firefox: ``` -docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/firefox/.fonts nextools/firefox: +docker run -it --rm -p 9222:9222 -v $(pwd)/path/to/fonts:/home/firefox/.fonts neuralegion/nextools-firefox: ``` diff --git a/readme.md b/readme.md index 99e5ccf..6a5e9af 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,11 @@ -# images +# Images -Monorepo of Docker images auto-published to [Docker Hub](https://hub.docker.com/repositories/nextools) and [GitHub Packages](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages). +Monorepo of Docker images auto-published to [Docker Hub](https://hub.docker.com/repositories/neuralegion). + -## GitHub Packages +