디버그 모드: Django Docker Pycharm

PHPz
풀어 주다: 2024-09-07 14:02:02
원래의
1184명이 탐색했습니다.

Debug Mode: Django Docker Pycharm

작성 중인 코드를 제대로 디버그하기 위해 로컬 설정을 얻는 데는 개발자가 인정하는 것보다 더 많은 시간이 걸립니다. 그리고 이것은 대부분 일회성 설정이므로 기록하지 않으면 기억하지 못할 것이라는 점을 잊지 마십시오. 이 게시물은 정확한 문제를 해결하기 위해 여기에 있습니다! 로컬 개발 환경을 설정하고 실행하는 방법을 서면으로 상기시켜 주세요.

전제 조건:

  • PyCharm Professional(Docker 지원용)
  • Docker와 Docker Compose
  • Django REST Framework(DRF) 애플리케이션

이 게시물에서는 디버그 모드에 필요한 업데이트 외에 Django, Docker 또는 Docker 작성기 설정에 대한 세부 정보를 다루지 않습니다. 이는 귀하가 해당 부분을 작동시키는 방법에 대한 실무 지식을 이미 가지고 있다고 가정합니다.

1단계: 디버깅을 위한 Dockerfile 설정

개발 모드에서 실행되도록 Dockerfile을 설정하고 PyCharm 디버거에서 연결을 허용하세요.

다음은 Dockerfile의 예입니다.

# Builder stage
FROM python:3.9-slim as builder

RUN chmod 1777 /tmp

# Install system dependencies
RUN apt-get update && apt-get install -y \
    libpq-dev \
    build-essential

WORKDIR /app

# Copy the requirements file into the container
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt > pip_install.log

# Copy the current directory contents into the container
COPY . /app

# Collect static files
RUN python manage.py collectstatic --noinput

# Final stage
FROM python:3.9-slim

# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=template.settings.development

# Set work directory
WORKDIR /app

# Copy files from the builder stage
COPY --from=builder /app /app

# Install pydevd-pycharm for remote debugging and gunicorn for serving
RUN pip install gunicorn pydevd-pycharm==241.17890.14 psycopg2-binary

# Expose necessary ports
EXPOSE 8000 5679  # Web app port and debug port

# Entry point for the container
ENTRYPOINT ["sh", "-c", "python manage.py runserver 0.0.0.0:8000"]

로그인 후 복사

이 코드에서 주의할 점

  • pydevd-pycharm==241.17890.14의 241.17890.14는 사용 중인 Pycharm 버전에 따라 다를 수 있습니다
  • 외부 액세스를 위해 8000(웹 서버 포트)과 5679(디버거 포트)를 모두 노출하고 있습니다.

2단계: Docker Compose 구성

데이터베이스 및 기타 서비스와 함께 웹 서비스(Django 앱)를 구성하기 위해 docker-compose.yml 파일을 가져옵니다.

샘플 docker-compose.yml은 다음과 같습니다.

version: '3'

services:
  web:
    environment:
      - DJANGO_ENVIRONMENT=development
      - DB_HOST=host.docker.internal
    build:
      context: .
    command: >
      sh -c "python manage.py migrate &&
             python manage.py collectstatic --noinput &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
    ports:
      - "8000:8000"   # Expose web port
      - "5679:5679"   # Expose debugger port
    extra_hosts:
      - "host.docker.internal:host-gateway"
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}

로그인 후 복사

코드 분석을 살펴보겠습니다

  • 웹 서버용 포트 8000과 PyCharm 디버거용 포트 5679를 매핑하고 있습니다.
  • extra_hosts는 Docker 컨테이너가 host.docker.internal을 사용하여 호스트 시스템과 통신할 수 있도록 보장합니다.

3단계: 디버깅을 위해 PyCharm 구성

  1. Python 디버그 서버 구성 생성:
  2. PyCharm에서 실행 ➡️ 구성 편집으로 이동합니다.
  3. + 버튼을 클릭하고 Python 디버그 서버를 선택하세요.
  4. 호스트를 0.0.0.0 또는 로컬 컴퓨터의 IP 주소로 설정하세요.
  5. 포트를 5679(또는 Docker 설정에 노출한 포트)로 설정하세요.
  6. 저장을 누르세요!

  7. 디버거 서버 시작:
    디버그 버튼(녹색 버그 아이콘)을 클릭하여 PyCharm 디버거를 시작합니다. 그러면 우리가 설정한 포트에서 듣기가 시작됩니다.

4단계: Django에 원격 디버깅 코드 추가

Django 프로젝트에서 PyCharm 디버거에 연결하려면 Manage.py 또는 wsgi.py에 다음 코드를 추가해야 합니다.

import pydevd_pycharm

# Connect to the PyCharm debug server
pydevd_pycharm.settrace('host.docker.internal', port=5679, stdoutToServer=True, stderrToServer=True, suspend=False)

로그인 후 복사

이 스니펫은 Django 앱이 호스트 시스템에서 실행 중인 PyCharm 디버거에 다시 연결하도록 지시합니다. host.docker.internal은 Docker의 호스트 시스템으로 확인되며 port=5679는 이전에 노출한 것과 일치합니다.

5단계: Docker 실행 및 디버그

  1. Docker 빌드 및 실행: 다음 명령어를 실행하여 컨테이너를 시작하세요.
docker-compose up --build
로그인 후 복사

이렇게 하면 Docker 이미지가 빌드되고 개발 모드에서 실행되는 Django를 포함한 서비스가 시작됩니다.

2. 중단점 설정:
PyCharm 내에서 Django 코드에 중단점을 설정하세요. 컨테이너가 포트 5679에서 실행되는 PyCharm 디버그 서버에 연결되므로 중단점이 작동해야 합니다.

3. 코드 실행:
이제 Django REST Framework API에서 HTTP 요청을 트리거하세요. 코드가 중단점에 도달하면 PyCharm이 실행을 일시 중지하여 현재 상태를 검사하고 코드를 단계별로 실행할 수 있습니다.

6단계: 문제 해결

Docker를 실행하는 동안 바인딩: 주소가 이미 사용 중이라는 오류가 발생하면 다른 프로세스가 이미 포트 5679를 사용하고 있는 것입니다. 이 경우 다음을 수행할 수 있습니다.

  • PyCharm 디버거를 중지하고 Docker를 다시 시작하세요.
  • 충돌을 방지하려면 docker-compose.yml 및 PyCharm 구성에서 포트를 변경하세요.

결론

이것은 PyCharm의 강력한 디버거를 사용하여 Docker 컨테이너 내부의 개발 모드에서 Django REST Framework 애플리케이션을 실행하는 데 사용하는 설정입니다. 이 설정은 코드를 한 줄씩 로컬에서 실행하여 백엔드 코드를 디버그하는 데 도움이 됩니다.

PyCharm과 통신하도록 Docker 컨테이너를 설정하면 Django 애플리케이션 작성, 테스트, 디버깅이 단순화되어 코드 작성이 더 쉬워집니다!

재미있게 코드를 깨보세요!

위 내용은 디버그 모드: Django Docker Pycharm의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿