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.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/'
|
||||
|
@ -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
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