DOM
SWT
HTML
Integração
Registro de logs
Chromium features
Implantação de aplicativos JxBrowser com o Docker
Este tutorial demonstra como implantar um aplicativo JxBrowser no ambiente headless usando o Docker.
Pré-requisitos
Para este tutorial, você precisará do seguinte:
- Um Docker Engine instalado e executando .
- Uma licença válida do JxBrowser. Pode ser de avaliação ou comercial. Para mais informações sobre o licenciamento, consulte o guia Licenciamento.
Obtendo o código
Você pode encontrar um Dockerfile
completo e uma aplicação de amostra na nossa coleção de exemplos:
$ git clone https://github.com/TeamDev-IP/JxBrowser-Examples
$ cd JxBrowser-Examples/tutorials/docker
Aplicação JxBrowser
Criando uma aplicação
Crie uma nova aplicação JxBrowser utilizando o Gradle ou utilize uma do repositório de exemplos. Em seguida, crie um novo diretório e copie o projeto criado para o sub-diretório project
.
Adicionando a licença
Para avançar, coloque a chave de licença na aplicação.
Configurando o Chromium para o Docker
Se tiver um problema e se você quiser inspecionar o estado do navegador Web com o DevTools, é possível acessar as ferramentas de desenvolvimento através da porta de depuração remota. As instruções sobre como conectar-se à ele estão na seção de resolução de problemas.
// Ativar a porta de depuração remota.
options.remoteDebuggingPort(9222);
Criando um Dockerfile
Seleção de uma imagem de base e configuração básica do ambiente
Crie um novo Dockerfile
no diretório que criamos no passo anterior. Iniciamos o nosso Dockerfile selecionando o Ubuntu 20.04 (LTS) como a nossa imagem de base. Em seguida, efetuamos a configuração básica para o nosso ambiente e atualizamos as listas de pacotes.
- Selecione uma imagem de base:
FROM ubuntu:20.04
- Configure o fuso horário e defina um frontend não-interativo para o debconf, para que não espere uma interação do usuário e selecione escolhas padrões:
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
- Atualize a lista de pacotes:
RUN apt update
Instalando o OpenJDK e o Gradle
Usamos o OpenJDK 8 neste tutorial. Mas você é livre para utilizar qualquer outro Java suportado.
RUN apt install -y openjdk-8-jdk
Instalando as dependências do Chromium
Instale as bibliotecas dinâmicas que o Chromium requer.
Se deseja utilizar uma versão diferente do Ubuntu ou outra distribuição Linux como imagem de base, instale as dependências exigidas pelo pacote Chromium fornecido para esse sistema. Você pode encontrar a lista de pacotes Chromium para várias distribuições Linux aqui. A sua lista de dependências também deve ser quase a mesma para o JxBrowser.
RUN apt install -y \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libatspi2.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libexpat1 \
libfontconfig1 \
libgbm1 \
libgcc-s1 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libpulse0 \
libx11-6 \
libxcb1 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
libxshmfence1 \
libxtst6 \
xdg-utils
O Chromium necessita de um servidor X11 para funcionar. Usamos o Xvfb que é uma implementação leve do servidor X11.
RUN apt install -y xvfb
Copiando e construindo o projeto
Na parte final do nosso Dockerfile, temos que copiar todos os arquivos necessários para a imagem e construir o nosso projeto.
- Copie o script de início e torne-o executável. Iremos rever o seu conteúdo em breve.
- Copie a aplicação Java e construa-a com o Gradle.
- Defina o ponto de entrada para a imagem.
COPY startup.sh .
RUN chmod +x startup.sh
COPY project/ project
RUN cd project && ./gradlew build
WORKDIR /
ENTRYPOINT ["sh", "-c", "/startup.sh"]
No script de início, lançamos o servidor X11 e iniciamos a nossa aplicação com o Gradle.
#!/bin/sh
Xvfb :0 -screen 0 1920x1080x24+32 &
cd project
DISPLAY=:0 ./gradlew run
Criação e lançamento de um container Docker
Construa uma imagem Docker e nomeie-a jxbrowser
:
docker build -t jxbrowser .
Inicie um container com esta imagem:
docker run --shm-size=1gb -t jxbrowser
O --shm-size=1gb
estende a quantidade de memória compartilhada para 1 GB. Por padrão, a memória compartilhada nos containers Docker está limitada a 64 MB, o que não é suficiente para o Chromium funcionar.
Você deverá ver o título da página carregada na saída do console. Na nossa aplicação de exemplo, carregamos o Google e ele é impresso:
Títle: Google
Resolução de problemas
Acessando o DevTools através da porta de depuração remota
Não existe uma maneira fácil de se conectar ao DevTools do Chromium através da Porta de Depuração Remota porque o Chromium só permite conexões a partir do localhost
. Para contornar, utilizamos o reencaminhamento de portas SSH.
Temos de iniciar o container Docker com a porta SSH exposta ao sistema anfitrião. Para isso, passamos o parâmetro -p 2222:22
.
docker run -p 2222:22 --shm-size=1gb -t jxbrowser
Quando o nosso container estiver rodando, podemos acessar a shell do container para instalar um servidor SSH e iniciá-lo.
docker exec -it <container_id> /bin/bash
apt install -y openssh-server
service ssh start
Também temos que adicionar um novo usuário que possamos utilizar para nos ligarmos ao nosso container.
useradd --create-home --shell /bin/bash jxbrowser
passwd jxbrowser
Com ele, está tudo pronto para encaminhar a porta de depuração remota do container para a nossa máquina anfitriã.
ssh -L 9222:localhost:9222 -p 2222 jxbrowser@localhost
Agora você pode abrir o URL http://127.0.0.1:9222/
com o Chrome ou Chromium para acessar o DevTools.
Kubernetes
É impossível passar a flag --shm-size=1gb
necessária para o Kubernetes e, em vez disso, é necessário criar um volume para /dev/shm
manualmente:
spec:
volumes:
- name: chromium_shm
emptyDir:
sizeLimit: "1Gi"
medium: Memory
containers:
- image: jxbrowser
volumeMounts:
- mountPath: /dev/shm
name: chromium_shm
Resumo
Neste tutorial, demonstramos como você pode:
- Criar uma imagem Docker para ser executada com uma aplicação JxBrowser.
- Configurar a sua aplicação para o ambiente Docker.