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