From cc14322c12b710741a0da7b3a4c95744aebc0777 Mon Sep 17 00:00:00 2001 From: EremeevRA Date: Thu, 2 Apr 2026 18:50:50 +0300 Subject: [PATCH] Refactor Dockerfile and CI workflow for improved dependency management and cleanup - Updated Dockerfile to optimize layer caching by copying requirements.txt before application code. - Added caching for pip packages in CI workflow to speed up dependency installation. - Implemented cleanup of dangling Docker images post-deployment. --- .gitea/workflows/ci.yml | 15 ++++++++++++++- Dockerfile | 21 ++++++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index fd77fa1..84bd4cd 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -20,6 +20,12 @@ jobs: with: python-version: '3.11' + - name: Cache pip packages + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('api/requirements.txt') }} + - name: Установка зависимостей run: | cd api @@ -112,6 +118,7 @@ jobs: while [ $elapsed -lt $timeout ]; do if docker logs fastapi-container 2>&1 | grep -q "Application startup complete"; then echo "Application startup detected in logs" + echo "Deployment successful!" exit 0 fi echo "Waiting for startup log... ($elapsed/$timeout sec)" @@ -120,8 +127,14 @@ jobs: done echo "Timeout: Application startup not detected in logs" docker logs fastapi-container - echo "Deployment successful!" exit 1 + + - name: Clean up dangling images + run: | + echo "Removing old dangling images..." + docker image prune -f + echo "Current images after cleanup:" + docker images # Явный статус для PR pr-status: diff --git a/Dockerfile b/Dockerfile index c5c1515..c42dd9e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,24 +2,15 @@ FROM python:3.11-slim WORKDIR /app -# Установка системных зависимостей -# RUN apt-get update && apt-get install -y \ -# gcc \ -# && rm -rf /var/lib/apt/lists/* +# 1. Копируем только файл с зависимостями (меняется редко) +COPY api/requirements.txt requirements.txt -# Копирование кода приложения +# 2. Устанавливаем зависимости (слой кэшируется, пока не изменился requirements.txt) +RUN pip install --no-cache-dir -r requirements.txt + +# 3. Копируем весь остальной код (меняется часто) COPY api/ api/ -# Копирование зависимостей -# COPY requirements.txt . -RUN pip install --no-cache-dir -r api/requirements.txt - -# Создание непривилегированного пользователя -# RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app -# USER appuser - -# Открытие порта EXPOSE 8000 -# Команда для запуска приложения CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file