From 6785918bdcc0ee29c5d35d735dbc4543eef73e16 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 20:21:31 +0400 Subject: [PATCH] =?UTF-8?q?docker:=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D1=83=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B5=D1=80=D0=B5=20(Telegram-=D0=B1=D0=BE=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: python:3.12-slim, зависимости отдельным слоем - docker-compose.yml: env из .env, volume для /app/data, LOG_DIR=/dev/null - .dockerignore: .env, data, logs, кэш - fix: loguru не было в requirements.txt (бот не стартовал бы) — добавлен - logger.py: LOG_DIR переопределяется через env (в контейнере в /dev/null) --- .dockerignore | 12 ++++++++++++ Dockerfile | 19 +++++++++++++++++++ app/logger.py | 4 ++++ docker-compose.yml | 14 ++++++++++++++ requirements.txt | 3 ++- 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..166431e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +.git +.gitignore +.idea +__pycache__ +*.pyc +*.pyo +.env +.venv +venv +data +logs +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..940855e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# Python 3.12 slim +FROM python:3.12-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +# Сначала зависимости — чтобы кэшировать слой +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Код приложения +COPY . . + +# Логи пишем в stdout/stderr, а не в файл внутри контейнера +ENV LOG_DIR=/dev/null + +CMD ["python", "-m", "app.main"] diff --git a/app/logger.py b/app/logger.py index ed12545..04fe810 100644 --- a/app/logger.py +++ b/app/logger.py @@ -6,6 +6,10 @@ from loguru import logger LOG_DIR = Path(__file__).resolve().parent.parent / "logs" LOG_DIR.mkdir(exist_ok=True) +# В контейнере можно переопределить через env (например LOG_DIR=/dev/null) +LOG_DIR = Path(__import__("os").environ.get("LOG_DIR", str(LOG_DIR))) +LOG_DIR.mkdir(exist_ok=True) + # Remove default handler logger.remove() diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f0f6e1f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +# Telegram-бот: секреты из .env (см. .env.example) +services: + bot: + build: . + env_file: + - .env + environment: + - LOG_DIR=/dev/null + volumes: + - bot_data:/app/data + restart: unless-stopped + +volumes: + bot_data: diff --git a/requirements.txt b/requirements.txt index 0e6b280..1a6bbc2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ aiogram -python-dotenv \ No newline at end of file +python-dotenv +loguru