Популярные темы: Multilogin X, Multilogin 6,
Запуск Multilogin в контейнере Docker
В этой статье мы разобрали, как создать и запустить Multilogin X в Docker-контейнере. Docker помогает упаковать и использовать приложение в удобном и переносимом формате, что упрощает работу в разных средах.
Следуя этим шагам, вы сможете использовать Docker для запуска Multilogin X на своём компьютере, в облаке или любой системе с поддержкой Docker, обеспечивая гибкость и масштабируемость.
Инструкции в этой статье применимы только для версий агента 1.15.0 и ниже.
Убедитесь, что запускаете профили под стандартной учёткой, а не как пользователь root. Браузеры на базе Chromium, включая Mimic, работают некорректно при запуске с правами root.
Начало работы
- Установите Docker, следуя официальному руководству для вашей ОС:
- Загрузите, установите и подключите агент Multilogin X.
- Установите Python и библиотеки для базовой автоматизации.
Запуск скрипта
Для запуска нашего примера скрипта вам понадобится Dockerfile, файл entrypoint и скрипт автоматизации.
Dockerfile
Dockerfile — это набор инструкций для Docker по созданию образа, очень похожий на рецепт создания готовой к использованию среды для приложения. В нём указано, какое ПО использовать, как его настроить и какие файлы добавить.
- Установите необходимые зависимости.
Пример скрипта
FROM ubuntu:22.04 AS base
# Install required 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/*
Убедитесь, что базовый образ совместим и все необходимые зависимости установлены правильно. Например, дистрибутивы Ubuntu 20.04 и Linux, построенные на его основе, имеют устаревший пакет libc6 и не будут правильно работать с нашим приложением.
- Настройте виртуальный дисплей.
Многим приложениям для взаимодействия необходим графический интерфейс. Это также относится к браузерам и, соответственно, к Multilogin. По умолчанию контейнеры не имеют графического интерфейса, поэтому нам нужно настроить его для headless автоматизации. Вам не нужно устанавливать обычную среду рабочего стола, такую как GNOME или KDE — подойдёт виртуальная.
Для этого вы можете использовать пакет Xvfb (X Virtual Frame Buffer). Xvfb эмулирует дисплей, который не зависит от физического экрана или оконной системы, что делает его идеальным для headless установок.
Запустите команды ниже, чтобы настроить виртуальный дисплей:
ENV DISPLAY=:99
RUN mkdir /tmp/.X11-unix
RUN chown root:root /tmp/.X11-unix && \
chmod 1777 /tmp/.X11-unix
- Создайте пользователя.
RUN useradd -m mlx-user && \
chown -R mlx-user:mlx-user .
Прежде чем запускать файл entrypoint, переключитесь на этого пользователя, добавив строку USER mlx-user
.
Создание пользователя необходимо, так как автоматизация с правами root невозможна.
- Скопируйте дополнительные файлы и настройте для них разрешения.
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/
- Определите файл enterpoint.sh, который будет запускаться после запуска контейнера.
ENTRYPOINT ["/entrypoint.sh"]
Файл entrypoint
Файл entrypoint — это скрипт, который сообщает Docker, как запустить приложение внутри контейнера. Вместе они обеспечивают правильную и согласованную работу приложения в контейнере.
- Запустите виртуальный дисплей в фоновом режиме.
- Запустите Multilogin X в фоновом режиме, используя ярлык «mlx».
- Подождите несколько секунд, пока приложение обновится.
- Измените директорию на ту, где находится скрипт.
- Запустите скрипт.
#!/bin/bash
# Запустите виртуальный дисплей
Xvfb :99 -screen 0 1024x768x24 &
# Запустите Multilogin
mlx &
# Подождите несколько секунд, пока приложение обновится
sleep 20
# Запустите скрипт Python
cd /app/mlx-app && python3 main.py
Скрипт автоматизации
Скрипт автоматизации выполняет основные задачи по скрейпингу, используя headless-профили Multilogin X. Он написан на Python и использует Selenium WebDriver для автоматизации действий.
Скрипт выполняет следующие действия:
- Перейти на конкретный сайт.
- Зарегистрировать название сайта.
- Зарегистрировать количество статей, представленных на странице.
- Зарегистрировать название каждой статьи.
- Завершить процесс автоматизации и сеанс драйвера.
Пример скрипта
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
Запуск Docker контейнера
Чтобы создать Docker-контейнер, убедитесь, что демон Docker запущен, затем выполните следующую команду в каталоге с вашим Dockerfile:
docker build -t mlx-image .
Запустите контейнер с помощью этой команды:
docker run -it --name my_mlx_container mlx-image