Проект Django на AWS не обновляет код после git pull

Я разворачиваю проект Django на AWS. Я запускаю Postgres, Redis, Nginx, а также мой проект на Docker.

Все работает нормально, но когда я что-то меняю на своей локальной машине, отправляю изменения в git, а затем вытаскиваю их на экземпляр AWS, код меняется, файлы обновляются, но они не отображаются на сайте. Только статические файлы обновляются автоматически (я полагаю, из-за Nginx). Вот мой конфиг docker-compose:

version: '3.9'

services:
  redis:
    image: redis
    command: redis-server
    ports:
      - "6379:6379"
  postgres:
    image: postgres
    environment:
      - POSTGRES_USER=
      - POSTGRES_PASSWORD=
      - POSTGRES_DB=
    ports:
      - "5432:5432"
  web:
    image: image_name
    build: .
    restart: always
    command: gunicorn project.wsgi:application --bind 0.0.0.0:8000
    env_file:
      - envs/.env.prod
    ports:
      - "8000:8000"
    volumes:
      - ./staticfiles/:/tmp/project/staticfiles
    depends_on:
      - postgres
      - redis
  nginx:
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./staticfiles:/home/app/web/staticfiles
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/logs:/var/log/nginx
      - ./certbot/www:/var/www/certbot/:ro
      - ./certbot/conf/:/etc/nginx/ssl/:ro
    depends_on:
      - web

Подскажите, пожалуйста, что мне делать?

Я попробовал удалить все из docker и снова составить композицию, но ничего не произошло. Я просмотрел все здесь, но я все еще не понимаю... перезапуск экземпляра также не работает. Я попробовал очистить кэш redis, потому что у меня есть кэширование шаблонов, и все равно ничего не произошло.

После обновления кода на экземпляре EC2 необходимо собрать новый web образ docker из этого нового кода. Если вы просто перезапускаете процесс, то docker-compose будет продолжать использовать последний созданный вами образ докера

Вам необходимо выполнить следующую последовательность команд (на экземпляре EC2):

docker-compose build web
docker-compose up -d

Вы видите, что статические файлы изменяются немедленно, без пересборки образа docker, потому что вы подключаетесь к этим файлам через docker volume.

Я нашел проблему... это было потому, что у меня было кэширование шаблона. Если я удалю кэш и сделаю то, что предложил @MarkB, все обновится. Я не понимаю, почему это происходит, так как я пробовал удалять весь кэш redis после изменений, но я думаю, что это решит мои проблемы.

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