From bcfef292079370c86bb80ea6448b8469dcd9c1d1 Mon Sep 17 00:00:00 2001 From: deadcxap Date: Mon, 10 Mar 2025 06:22:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B4=D0=BE=D0=BA=D0=B5=D1=80=20=D0=B8=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D0=B5=D1=80-=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 28 ++++++++++++++++++++++++++++ Dockerfile | 15 +++++++++++++++ MusicBot/database/base.py | 4 +++- docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ init-mongodb.js | 3 +++ 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 init-mongodb.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fbf7a02 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,28 @@ +# Исключаем файлы Git +.git +.gitignore + +# Исключаем каталоги виртуальных окружений +venv/ +env/ +ENV/ + +# Исключаем кешированные файлы Python +__pycache__/ +*.py[cod] +*$py.class + +# Исключаем файлы сборки +build/ +dist/ + +# Исключаем конфигурационные файлы IDE +.vscode/ +.idea/ + +# Исключаем системные файлы +.DS_Store + +# Не включаем .env с чувствительными данными, +# т.к. переменные передаются через переменные окружения контейнера +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c2c331f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.13-slim + +RUN apt-get update && apt-get install -y ffmpeg && apt-get clean && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY MusicBot /app/MusicBot + +ENV PYTHONPATH=/app + +# Команда для запуска бота +CMD ["python", "./MusicBot/main.py"] diff --git a/MusicBot/database/base.py b/MusicBot/database/base.py index ea91efe..cd49b5d 100644 --- a/MusicBot/database/base.py +++ b/MusicBot/database/base.py @@ -1,3 +1,4 @@ +import os from typing import Iterable, Any, cast from pymongo import AsyncMongoClient, ReturnDocument, UpdateOne from pymongo.asynchronous.collection import AsyncCollection @@ -6,7 +7,8 @@ from pymongo.results import UpdateResult from .user import User, ExplicitUser from .guild import Guild, ExplicitGuild, MessageVotes -client: AsyncMongoClient = AsyncMongoClient("mongodb://localhost:27017/") +mongo_server = os.getenv('MONGO_URI') +client: AsyncMongoClient = AsyncMongoClient(mongo_server) db = client.YandexMusicBot users: AsyncCollection[ExplicitUser] = db.users diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c7e7092 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +services: + app: + container_name: yandex-music-discord-bot + image: deadcxap/yandexmusicdiscordbot:latest + restart: unless-stopped + depends_on: + - mongodb + env_file: + - .env + environment: + MONGO_URI: "mongodb://ymdb-mongodb:27017" + networks: + - ymdb_network + mongodb: + container_name: ymdb-mongodb + image: mongo:latest + restart: unless-stopped + volumes: + - mongodb_data:/data/db + - ./init-mongodb.js:/docker-entrypoint-initdb.d/init-mongodb.js:ro + networks: + - ymdb_network + healthcheck: + test: echo 'db.runCommand("ping").ok' | mongo localhost:27017 --quiet + interval: 30s + timeout: 10s + retries: 5 + +volumes: + mongodb_data: + +networks: + ymdb_network: \ No newline at end of file diff --git a/init-mongodb.js b/init-mongodb.js new file mode 100644 index 0000000..0b8f4bf --- /dev/null +++ b/init-mongodb.js @@ -0,0 +1,3 @@ +db = db.getSiblingDB('YandexMusicBot'); +db.createCollection('guilds'); +db.createCollection('users'); \ No newline at end of file