mirror of
https://github.com/Balshgit/mosgortrans.git
synced 2025-09-11 13:00:40 +03:00
revert selenoid
This commit is contained in:
parent
c01a163d1c
commit
25ab0b0c31
@ -4,20 +4,16 @@ from aiogram import Bot, types
|
|||||||
from aiogram.contrib.middlewares.logging import LoggingMiddleware
|
from aiogram.contrib.middlewares.logging import LoggingMiddleware
|
||||||
from aiogram.dispatcher import Dispatcher
|
from aiogram.dispatcher import Dispatcher
|
||||||
from aiogram.utils.callback_data import CallbackData
|
from aiogram.utils.callback_data import CallbackData
|
||||||
from app.core.logger import logger
|
from app.core.parse_web import get_driver, get_driver_session, parse_site
|
||||||
from app.core.parse_web import (
|
|
||||||
configure_firefox_driver,
|
|
||||||
download_gecko_driver,
|
|
||||||
parse_site,
|
|
||||||
)
|
|
||||||
from app.settings import API_TOKEN
|
from app.settings import API_TOKEN
|
||||||
|
|
||||||
bot = Bot(token=API_TOKEN)
|
bot = Bot(token=API_TOKEN)
|
||||||
dispatcher = Dispatcher(bot)
|
dispatcher = Dispatcher(bot)
|
||||||
dispatcher.middleware.setup(LoggingMiddleware())
|
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')
|
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:
|
async def morning_bus_mailing(chat_ids: list[int]) -> None:
|
||||||
|
|
||||||
text = parse_site(
|
text = parse_site(
|
||||||
driver=driver,
|
driver=driver,
|
||||||
url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
|
url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
|
||||||
|
@ -10,7 +10,7 @@ from selenium import webdriver
|
|||||||
from selenium.common.exceptions import NoSuchElementException, WebDriverException
|
from selenium.common.exceptions import NoSuchElementException, WebDriverException
|
||||||
from selenium.webdriver.firefox import options
|
from selenium.webdriver.firefox import options
|
||||||
from selenium.webdriver.firefox.service import Service
|
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:
|
def download_gecko_driver() -> None:
|
||||||
@ -47,7 +47,7 @@ def configure_firefox_driver(private_window: bool = False) -> WebDriver | None:
|
|||||||
return 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:
|
if not driver:
|
||||||
logger.error('Driver is not configured')
|
logger.error('Driver is not configured')
|
||||||
return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.'
|
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:
|
if bus_t19 and bus_t19_arrival:
|
||||||
answer += f'Автобус {bus_t19.text} - {bus_t19_arrival.text}'
|
answer += f'Автобус {bus_t19.text} - {bus_t19_arrival.text}'
|
||||||
return answer
|
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
63
deploy/Dockerfile.bot
Normal 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/
|
4
deploy/Dockerfile.selenoid
Normal file
4
deploy/Dockerfile.selenoid
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
FROM selenoid/firefox:103.0 as builder
|
||||||
|
|
||||||
|
FROM aerokube/selenoid:latest-release
|
||||||
|
|
12
deploy/browsers.json
Normal file
12
deploy/browsers.json
Normal 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
48
docker-compose.yml
Normal 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"
|
Loading…
x
Reference in New Issue
Block a user