Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

11.6 Docker Compose на примере Django, PostgreSQL и Memcached
3 из 7 шагов пройдено
0 из 14 баллов  получено

Memcached

Чтобы продемонстрировать наш пример, мы будем использовать локальный экземпляр Memcached в качестве сервера кэширования. Чтобы запустить локальный сервер Memcached, мы используем docker-образ Memcached, что значительно снижает наши усилия по настройке.

Давайте подготовим файл docker-compose, который выглядит следующим образом:

version: '3.8'

services:
  web:
    # Берем Dockerfile из каталога app
    build: app
    # Запускаем тестовый сервер
    command: python manage.py runserver 0.0.0.0:8000
    # куда будут помещены данные из каталога app
    volumes:
      - ./app/:/usr/src/app/
    # Открываем порт 8000 внутри и снаружи
    ports:
      - 8000:8000
    # Файл содержащий переменные для контейнера
    env_file:
      - .env
    # Дожидаемся запуска контейнера db
    depends_on:
      - db
      - memcached
  db:
      image: postgres:15
      volumes:
        - postgres_data:/var/lib/postgresql/data/
      environment:
        - POSTGRES_USER=book_django
        - POSTGRES_PASSWORD=pass_book_django
        - POSTGRES_DB=book_django
  memcached:
      image: memcached:1.6.21
      ports:
        - 11211:11211
volumes:
  postgres_data:


Также изменим наш файл с переменными .env:

DEBUG = True
SECRET_KEY = 'django-insecure-xxxxxxxxxxxx'
DJANGO_ALLOWED_HOSTS = '127.0.0.1'
CSRF_TRUSTED_ORIGINS = 'http://127.0.0.1'
CACHES_BACKEND = 'django.core.cache.backends.memcached.PyMemcacheCache'
CACHES_LOCATION = 'memcached:11211'
INTERNAL_IPS = '127.0.0.1'

SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=book_django
SQL_USER=book_django
SQL_PASSWORD=pass_book_django
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres


Выполним билд и запуск наших контейнеров еще раз:

docker-compose up -d --build


Мы видим что контейнер c memcached успешно запущен, также мы можем посмотреть это используя Docker Desktop:


Можем перейти на наш сайт по адресу http://127.0.0.1:8000/ и убедиться что он работает и нет никаких ошибок:

Таким образом мы подключили кэш-сервер Memcached в нашем проекте.

В следующем разделе мы начнем подготовку проекта к деплою, добавив сервер приложений Gunicorn и веб-сервер NGINX.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

У меня порт 11221 уже прослушивается.

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 837 memcache   22u  IPv4  26038      0t0  TCP localhost:11211 (LISTEN)

Пытаясь выполнить

docker-compose up -d --build

выводится

Creating django_htmx_memcached_1 ... error

ERROR: for django_htmx_memcached_1  Cannot start service memcached: Ports are not available: exposing port TCP 0.0.0.0:11211 -> 0.0.0.0:0: listen tcp 0.0.0.0:11211: bind: address already in use

ERROR: for memcached  Cannot start service memcached: Ports are not available: exposing port TCP 0.0.0.0:11211 -> 0.0.0.0:0: listen tcp 0.0.0.0:11211: bind: address already in use

Я поменял

memcached:
    image: memcached:1.6.21
    ports:
      - 11212:11211

И команда прошла, контейнер создался.

Я правильно сделал?

@Григорий_Кожанов, Мне кажется лучше запускать на одинаковых портах, например 11212:11212 и в конфиге джанги поправить CACHES_LOCATION = 'memcached:11212'

А порт занят у вас скорее всего потому, что установлен мемкеш в системе и запущен. Мы его ставили в разделе кеширования.

@Илья_Перминов, Не получается так, пишет Errno 111 Connection refused. Вернул как было.

@Григорий_Кожанов, Попробуйте выключить этот процесс, с мемкешем. Если не ошибаюсь, команда kill pid_процесса