Лучшие практики Django: миграция и контенаризация

Я работаю над Django API и хотел бы добавить в него немного CI/CD.

Он докеризует мое приложение с

FROM python:3.12

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

ENV DJANGO_SETTINGS_MODULE=vocab_dictionnary.settings

CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

Затем я добавляю docker-compose.yml

services:
  db:
    image: postgres:14
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - "POSTGRES_USER="
      - "POSTGRES_PASSWORD="
      - "POSTGRES_DB="
    ports:
      - 5438:5432
    healthcheck: 
      test: pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-${POSTGRES_USER:-postgres}}
      interval: 5s
      timeout: 5s
      retries: 120
      start_period: 30s
  web:
    build: .
    command: python3 /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      db:
        condition: service_healthy
    environment:
      - "POSTGRES_HOST_AUTH_METHOD=trust"

volumes:
  postgres_data:

Конец моего файла main.yml для github actions выглядит следующим образом

- name: Run Database Migrations
  uses: appleboy/ssh-action@master
  with:
    host: ${{ secrets.SERVER_HOST }}
    username: ${{ secrets.SERVER_USERNAME }}
    password: ${{ secrets.SERVER_PASSWORD }}
    script: |
      cd /${{ secrets.SERVER_USERNAME }}/api/vocab_dictionnary/
      docker compose exec web python manage.py migrate

Наконец, чтобы упростить рабочий процесс локальной разработки, я добавил это в Makefile:

restart:
    docker compose down
    docker compose build
    docker compose up -d
    docker compose run web python3 manage.py makemigrations
    docker compose run web python3 manage.py migrate

Моя первая проблема заключается в том, что мои миграции не применяются в локальном режиме. Я остаюсь с этим сообщением, где makemigrations вроде бы распознается, но не применяется с migrate

docker compose run web python3 manage.py makemigrations
[+] Running 1/0
 ⠿ Container vocab_dictionnary-db-1  Running                                                                                                                                                                                       0.0s
Migrations for 'dictionnary':
  dictionnary/migrations/0002_languages_is_valid.py
    - Add field is_valid to languages
docker compose run web python3 manage.py migrate
[+] Running 1/0
 ⠿ Container vocab_dictionnary-db-1  Running                                                                                                                                                                                       0.0s
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, dictionnary, sessions
Running migrations:
  No migrations to apply.

Если я правильно понял эту страницу, я могу заменить мои действия автоматической миграцией в моем docker-compose или точкой входа в моем Dockerfile, но есть ли какая-нибудь лучшая практика? Я не могу найти ничего рекомендованного самим Django о миграциях в контексте контенаризации с помощью docker compose

Вернуться на верх