revert selenoid

This commit is contained in:
Dmitry Afanasyev 2022-08-23 00:58:22 +03:00
parent c01a163d1c
commit 25ab0b0c31
6 changed files with 147 additions and 10 deletions

View File

@ -4,20 +4,16 @@ from aiogram import Bot, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher
from aiogram.utils.callback_data import CallbackData
from app.core.logger import logger
from app.core.parse_web import (
configure_firefox_driver,
download_gecko_driver,
parse_site,
)
from app.core.parse_web import get_driver, get_driver_session, parse_site
from app.settings import API_TOKEN
bot = Bot(token=API_TOKEN)
dispatcher = Dispatcher(bot)
dispatcher.middleware.setup(LoggingMiddleware())
download_gecko_driver()
driver = configure_firefox_driver()
driver = get_driver()
session_id = get_driver_session(driver)
stations_cb = CallbackData('station', 'direction')
@ -86,6 +82,7 @@ async def echo(message: types.Message) -> types.Message:
async def morning_bus_mailing(chat_ids: list[int]) -> None:
text = parse_site(
driver=driver,
url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'

View File

@ -10,7 +10,7 @@ from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, WebDriverException
from selenium.webdriver.firefox import options
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.firefox.webdriver import RemoteWebDriver, WebDriver
def download_gecko_driver() -> None:
@ -47,7 +47,7 @@ def configure_firefox_driver(private_window: bool = False) -> WebDriver | None:
return None
def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
def parse_site(url: str, message: str, driver: RemoteWebDriver | None = None) -> str:
if not driver:
logger.error('Driver is not configured')
return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.'
@ -87,3 +87,16 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
if bus_t19 and bus_t19_arrival:
answer += f'Автобус {bus_t19.text} - {bus_t19_arrival.text}'
return answer
def get_driver() -> RemoteWebDriver:
opt = options.Options()
opt.headless = True
driver = RemoteWebDriver(
command_executor='http://selenoid_host:4444/wd/hub', options=opt
)
return driver
def get_driver_session(driver: RemoteWebDriver) -> str:
return driver.session_id # type: ignore

63
deploy/Dockerfile.bot Normal file
View File

@ -0,0 +1,63 @@
FROM python:3.10.6
ARG USER
ENV USER=${USER} \
PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=random \
PYTHONDONTWRITEBYTECODE=1 \
# pip:
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_VIRTUALENVS_CREATE=false \
POETRY_CACHE_DIR='/var/cache/pypoetry' \
PATH="$PATH:/root/.poetry/bin"
RUN printf "================\n\nStart build app. USER is: "${USER}"\n\n===============\n" \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
procps \
bash \
build-essential \
curl \
iputils-ping \
gettext \
git \
libpq-dev \
nano \
sshpass \
&& pip install --upgrade pip \
# Installing `poetry` package manager:
&& pip install poetry \
# Cleaning cache:
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN if [ "$USER" != "root" ]; then \
mkdir /home/"$USER" \
&& groupadd -r "$USER" && useradd -d /home/"$USER" -r -g "$USER" "$USER" \
&& chown "$USER":"$USER" -R /home/"$USER"; \
fi
COPY --chown="$USER":"$USER" ./poetry.lock ./pyproject.toml /app/
# Installing requirements
RUN poetry version \
&& poetry run pip install -U pip \
&& poetry install \
$(if [ "$USER" != 'root' ]; then echo '--no-dev'; fi) \
--no-interaction --no-ansi \
# Cleaning poetry installation's cache for production:
&& if [ "$USER" != 'root' ]; then rm -rf "$POETRY_CACHE_DIR"; fi
COPY --chown="$USER":"$USER" ./app /app/
USER "$USER"
# Copying actuall application
COPY --chown="$USER":"$USER" . /app/

View File

@ -0,0 +1,4 @@
FROM selenoid/firefox:103.0 as builder
FROM aerokube/selenoid:latest-release

12
deploy/browsers.json Normal file
View File

@ -0,0 +1,12 @@
{
"firefox": {
"default": "103.0",
"versions": {
"103.0": {
"image": "selenoid/firefox:103.0",
"port": "4444",
"path": "/wd/hub"
}
}
}
}

48
docker-compose.yml Normal file
View File

@ -0,0 +1,48 @@
version: '3.9'
networks:
transport_bot_network:
name:
"transport_bot_network"
ipam:
config:
- subnet: 200.20.0.0/24
services:
selenoid:
container_name: "transport_bot_selenoid"
hostname: "selenoid_host"
build:
context: .
dockerfile: ./deploy/Dockerfile.selenoid
args:
USER: web
restart: unless-stopped
networks:
transport_bot_network:
ipv4_address: 200.20.0.10
volumes:
- ./deploy/browsers.json:/etc/selenoid/browsers.json:ro
- /var/run/docker.sock:/var/run/docker.sock
environment:
- SESSION_TIMED_OUT=12h
command: ["-conf", "/etc/selenoid/browsers.json", "-limit", "10", "-container-network", "transport_bot_network"]
expose:
- "4444"
bot:
container_name: "transport_bot"
image: "transport_bot:latest"
build:
context: .
dockerfile: ./deploy/Dockerfile.bot
args:
USER: web
restart: unless-stopped
networks:
transport_bot_network:
ipv4_address: 200.20.0.11
ports:
- "8084:8084"
command: >
bash -c "python main.py"