Tópicos populares: Multilogin X, Multilogin 6,
Executando Multilogin em um contêiner Docker
Neste artigo, abordamos o processo de criação e inicialização do Multilogin X dentro de um contêiner Docker. O Docker permite empacotar e implantar seu aplicativo de maneira consistente e portátil, facilitando seu gerenciamento em diferentes ambientes.
Seguindo as etapas descritas aqui, você pode usar o Docker para executar o Multilogin X em sua máquina local, em um ambiente na nuvem ou em qualquer sistema que suporte Docker, fornecendo flexibilidade e escalabilidade para suas necessidades de automação web.
As instruções neste artigo se aplicam apenas às versões do agente 1.15.0 e anteriores.
Certifique-se de que está iniciando os perfis do Mimic com uma conta de usuário padrão, não com o usuário root. Os navegadores Chromium, incluindo o Mimic, não funcionam corretamente quando executados com privilégios de root.
Antes que você comece
- Instale o Docker seguindo o guia de instalação oficial do seu sistema operacional:
- Baixe, instale e conecte o agente do Multilogin X
- Instale Python e bibliotecas para automação básica
Executando o script
Para executar nosso script de exemplo, você precisará de um Dockerfile, um arquivo de ponto de entrada e um script de automação .
Dockerfile
Um Dockerfile é um conjunto de instruções para que o Docker construa uma imagem, muito parecido com uma receita para criar um ambiente pronto para uso em um aplicativo. Ele descreve qual software incluir, como configurá-lo e quais arquivos adicionar.
- Instale as dependências necessárias
Exemplo de script
FROM ubuntu:22.04 AS base
# Install basic dependencies
RUN apt-get update && \
apt-get install -y \
xvfb \
ca-certificates \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libatspi2.0-0 \
libc6 \
libcairo2 \
libcups2 \
libcurl4 \
libdbus-1-3 \
libdrm2 \
libexpat1 \
libgbm1 \
libglib2.0-0 \
libgtk-4-1 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libu2f-udev \
libvulkan1 \
libx11-6 \
libxcb1 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
wget \
xdg-utils \
openjdk-18-jre-headless \
jq \
curl \
unzip \
openssh-client \
python3 \
python3-pip \
libayatana-appindicator3-dev && \
pip install requests selenium && \
curl --location --fail --output mlxdeb.deb "https://mlxdists.s3.eu-west-3.amazonaws.com/mlx/1.15.0/multiloginx-amd64.deb" && \
dpkg -i mlxdeb.deb && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
Certifique-se de que a imagem base seja compatível e que todas as dependências necessárias estejam instaladas corretamente. Por exemplo, as distribuições Ubuntu 20.04 e Linux construídas sobre esta têm um pacote libc6 desatualizado, o que significa que não funcionarão corretamente com nosso aplicativo.
- Configurar uma exibição virtual
Muitos aplicativos precisam de uma interface gráfica para interagir. Isso também se aplica a navegadores e ao Multilogin X. Por padrão, os contêineres não possuem uma GUI, então precisamos definir uma para automação sem comando. Você não precisa instalar um ambiente de desktop convencional como GNOME ou KDE – um ambiente virtual resolverá o problema.
Para isso, você pode usar o pacote Xvfb (X Virtual Frame Buffer). O Xvfb emula uma tela que não depende de uma tela física ou sistema de janelas, o que o torna leve e ideal para configurações em headless.
Execute os comandos abaixo para configurar o display virtual:
ENV DISPLAY=:99
RUN mkdir /tmp/.X11-unix
RUN chown root:root /tmp/.X11-unix && \
chmod 1777 /tmp/.X11-unix
- Crie um usuário
RUN useradd -m mlx-user && \
chown -R mlx-user:mlx-user .
Antes de executar o arquivo de ponto de entrada, alterne para esse usuário adicionando a linha USER mlx-user
.
A criação de um usuário é necessária, pois nenhuma automação pode ser feita como root.
- Copie os arquivos complementares e configure permissões para eles
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./env.py /app/mlx-app/
COPY ./main.py /app/mlx-app/
COPY ./mlx_functions.py /app/mlx-app/
- Defina o arquivo entrypoint.sh a ser executado assim que o contêiner for iniciado
ENTRYPOINT ["/entrypoint.sh"]
Arquivo de ponto de entrada
Um arquivo de ponto de entrada é um script ou executável que informa ao Docker como iniciar o aplicativo dentro do contêiner. Eles trabalham juntos para garantir que o aplicativo seja executado de maneira correta e consistente no contêiner.
- Inicie a exibição virtual em segundo plano
- Inicie o iniciador Multilogin X em segundo plano usando o atalho “mlx“
- Aguarde alguns segundos para que o inicializador seja atualizado
- Altere o diretório onde o script de automação está localizado
- Inicie o script de automação
#!/bin/bash
# Start virtual display
Xvfb :99 -screen 0 1024x768x24 &
# Start Multilogin launcher
mlx &
# Wait for a while so the launcher is properly installed
sleep 20
# Run Python automation script
cd /app/mlx-app && python3 main.py
Script de automação
Um script de automação conduz algumas tarefas básicas de raspagem com perfis de navegador headless do Multilogin X escritos em Python, empregando o Selenium WebDriver para automação de tarefas.
O script executa as seguintes ações:
- Vá para um site específico
- Imprima o título do site
- Imprima a quantidade de artigos presentes na página
- Imprima o nome de cada artigo
- Conclua o processo de automação e encerre a sessão do driver
Exemplo de script
def automation(driver): # Automation function
try:
driver.get("https://www.scrapethissite.com/pages/") # Go to this website
print(f'The title of the webpage is: "{driver.title}"\n') # Print the title of the website
articles = driver.find_elements(By.CLASS_NAME, "page")
print(f'There are {len(articles)} different articles on this page:\n') # Print how many articles are there
for i, article in enumerate(articles): # For each article, show us what is the name of the article
article_text = article.find_element(By.TAG_NAME, "a").text
print(f"{i+1}. {article_text}")
print("\nBasic automation finished.\n") # Print that the automation is finished
except Exception as e: # Catch expection if any
print(f"Something happened: {e}") # If any exception, print its details
finally:
driver.quit() # Quit driver session
mlx.stop_profile(quick_profile_id) # Close browser profile
Executando um contêiner Docker
Para construir um contêiner Docker, certifique-se de que seu daemon Docker esteja em execução e execute o seguinte comando no diretório que contém seu Dockerfile:
docker build -t mlx-image .
Inicie o contêiner com o seguinte comando:
docker run -it --name my_mlx_container mlx-image