refactored docker-compose
This commit is contained in:
parent
35b6ff8546
commit
d86e95093d
17
Dockerfile
Normal file
17
Dockerfile
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
FROM python:3.11.4
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY poetry.lock pyproject.toml /app/
|
||||||
|
|
||||||
|
RUN apt-get -y update
|
||||||
|
RUN apt-get -y upgrade
|
||||||
|
RUN apt-get install -y ffmpeg
|
||||||
|
|
||||||
|
RUN pip install poetry
|
||||||
|
|
||||||
|
RUN poetry install --no-root
|
||||||
|
|
||||||
|
COPY .. /app
|
||||||
|
|
||||||
|
CMD poetry run python main.py
|
@ -1,19 +1,60 @@
|
|||||||
version: "2.1"
|
version: "2.1"
|
||||||
|
networks:
|
||||||
|
network:
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
web_service:
|
||||||
|
container_name: web_service
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: web.Dockerfile
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
depends_on:
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
rabbitmq:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
|
download_service:
|
||||||
|
container_name: download_service
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
depends_on:
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
rabbitmq:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
|
container_name: rabbitmq
|
||||||
image: rabbitmq:3.10.7-management
|
image: rabbitmq:3.10.7-management
|
||||||
hostname: rabbitmq
|
hostname: rabbitmq
|
||||||
restart: always
|
restart: always
|
||||||
|
healthcheck:
|
||||||
|
test: rabbitmq-diagnostics -q ping
|
||||||
|
interval: 30s
|
||||||
|
timeout: 30s
|
||||||
|
retries: 3
|
||||||
environment:
|
environment:
|
||||||
- RABBITMQ_DEFAULT_USER=guest
|
- RABBITMQ_DEFAULT_USER=guest
|
||||||
- RABBITMQ_DEFAULT_PASS=guest
|
- RABBITMQ_DEFAULT_PASS=guest
|
||||||
volumes:
|
volumes:
|
||||||
- ./rabbitmq:/var/lib/rabbitmq
|
- ./rabbitmq:/var/lib/rabbitmq
|
||||||
ports:
|
ports:
|
||||||
- 15672:15672
|
- "15672:15672"
|
||||||
- 5672:5672
|
- "5672:5672"
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
redis:
|
redis:
|
||||||
container_name: redis_video_downloader
|
container_name: redis_video_downloader
|
||||||
image: redis:latest
|
image: redis:latest
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6379:6379"
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
|
@ -14,7 +14,7 @@ async def on_message(message: AbstractIncomingMessage, queue) -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def get_messages(inner_queue) -> None:
|
async def get_messages(inner_queue) -> None:
|
||||||
async with await connect("amqp://guest:guest@localhost/") as connection:
|
async with await connect("amqp://guest:guest@rabbitmq/") as connection:
|
||||||
channel = await connection.channel()
|
channel = await connection.channel()
|
||||||
await channel.set_qos(prefetch_count=1)
|
await channel.set_qos(prefetch_count=1)
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ async def get_messages(inner_queue) -> None:
|
|||||||
|
|
||||||
async def publish_message_with_task_done(task: dict | list) -> None:
|
async def publish_message_with_task_done(task: dict | list) -> None:
|
||||||
queue_name = "tasks_done"
|
queue_name = "tasks_done"
|
||||||
async with await connect("amqp://guest:guest@localhost/") as connection:
|
async with await connect("amqp://guest:guest@rabbitmq/") as connection:
|
||||||
# Creating channel
|
# Creating channel
|
||||||
channel = await connection.channel()
|
channel = await connection.channel()
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ class RedisClient:
|
|||||||
TASKS_DONE_NAME = "tasks_done"
|
TASKS_DONE_NAME = "tasks_done"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.connection = redis.Redis(host="localhost", port=6379, db=0)
|
self.connection = redis.Redis(host="redis_video_downloader", port=6379, db=0)
|
||||||
|
|
||||||
async def _set_task(self, queue_name: str, link: str, task: dict | list, ) -> int:
|
async def _set_task(self, queue_name: str, link: str, task: dict | list, ) -> int:
|
||||||
async with self.connection as connection:
|
async with self.connection as connection:
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
import uvicorn
|
import uvicorn
|
||||||
import logging
|
import logging
|
||||||
@ -15,8 +16,7 @@ from src.web.schemes.submit import SubmitIn, CheckIn, DeleteFromS3, CopyToAnothe
|
|||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="video_downloader", openapi_url=f"/api/v1/openapi.json"
|
title="video_downloader", openapi_url=f"/api/v1/openapi.json"
|
||||||
)
|
)
|
||||||
|
templates = Jinja2Templates(directory=f"{os.path.dirname(os.path.dirname(os.path.abspath(__file__)))}/web/templates")
|
||||||
templates = Jinja2Templates(directory="templates")
|
|
||||||
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
@ -102,7 +102,7 @@ async def get_url_for_download_video(request: Request, data: SubmitIn = Depends(
|
|||||||
return JSONResponse({"result": links_to_download_video})
|
return JSONResponse({"result": links_to_download_video})
|
||||||
|
|
||||||
# TODO: учесть, что если делать запрос CURL\urllib3\etc, в теле может быть несколько ссылок -> должно быть создано несколько задач
|
# TODO: учесть, что если делать запрос CURL\urllib3\etc, в теле может быть несколько ссылок -> должно быть создано несколько задач
|
||||||
async with await connect("amqp://guest:guest@localhost/") as connection:
|
async with await connect("amqp://guest:guest@rabbitmq/") as connection:
|
||||||
# Creating a channel
|
# Creating a channel
|
||||||
channel = await connection.channel()
|
channel = await connection.channel()
|
||||||
body = [
|
body = [
|
||||||
@ -204,4 +204,4 @@ async def delete_video_from_s3(data: CopyToAnotherBucketS3):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
uvicorn.run("src.web.main:app", host="0.0.0.0", log_level="info")
|
uvicorn.run("src.web.main:app", host="0.0.0.0", port=8000, log_level="info")
|
||||||
|
13
web.Dockerfile
Normal file
13
web.Dockerfile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM python:3.11.4
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY poetry.lock pyproject.toml /app/
|
||||||
|
|
||||||
|
RUN pip install poetry
|
||||||
|
|
||||||
|
RUN poetry install --no-root
|
||||||
|
|
||||||
|
COPY .. /app
|
||||||
|
|
||||||
|
CMD poetry run python main_web.py
|
Loading…
Reference in New Issue
Block a user