debugging django with docker-compose in vscode

Dongwoo Kim·2024년 7월 15일
0

TIL / WIL

목록 보기
114/126
post-thumbnail

개요

vscode를 이용한 docker-compose 환경에서 django 프로젝트 debugging 가이드
작성일: 20240715
작성자: @김동우

설정 파일

  • .env

    SECRET_KEY = 
    
     DB_SCHEMA=
     DB_USER=
     DB_PASSWORD=
     DB_WRITE_HOST=db    
     DB_PORT=5432
  • docker-compose.debug.yml

       version: "3.8"
    
     	services:
           db:
             image: postgres:14.5
             container_name: db
             ports:
               - "5432:5432"
             restart: always
             volumes:
               - ./postgres:/var/lib/postgresql/data
             env_file:
               - .env
             environment:
               POSTGRES_USER: 
               POSTGRES_PASSWORD: 
               POSTGRES_DB: 
    
           api:
             restart: always
             container_name: custom
             build: .
             command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 manage.py runserver 0.0.0.0:8000 --nothreading --noreload"]
             # command: python manage.py runserver 0.0.0.0:80
             working_dir: /usr/src/app/
             ports:
               - 5678:5678
               - 8000:8000
             volumes:
               - ./:/usr/src/app/
             env_file:
               - .env
    		```
  • .vscode/launch.json
    {
      "version": "0.2.0",
      "configurations": [
          {
              "name": "Python 디버거: 원격 연결",
              "type": "debugpy",
              "request": "attach",
              "connect": {
                  "host": "localhost",
                  "port": 5678
              },
              "pathMappings": [
                  {
                      "localRoot": "${workspaceFolder}/",
                      "remoteRoot": "/usr/src/app/"
                  }
              ]
          }
      ]
    }

사용 시나리오

기본 방식

docker-compose 로 실행된 django 프로젝트를 vscode의 디버거로 실행하여 호출스택, 지역변수, 중단점 등을 확인할 수 있다.

  1. .env

    .env 파일의 host명이 docker-compose.debug.yml 파일의 container_name과 같도록 한다.

  2. docker-compose.debug.yml

    공식문서를 참고하여 기존 docker-compose command와 container_name을 변경한다.

  3. .vscode/launch.json

    1. docker-compose.debug.yml에서 정의한 volumes와 working_dir 위치를 설정한다.
    2. command에 표시한 포트(5678) 을 설정한다.

명령어

  1. docker-compose -f docker-compose.debug.yml up

    docker-compose.debug.yml 파일 기준으로 docker-compose 실행

  2. docker kill backend-debug

    container_name이 backend_debug인 컨테이너 종료

  3. docker-compose -f docker-compose.debug.yml up -d --no-deps backend-debug

    docker-compose.debug.yml 파일 기준으로 container_name이 backend_debug인 컨테이너만 실행

예시

  1. 터미널에서 docker-compose -f docker-compose.debug.yml up

  2. vscode에서 디버깅 시작 (ctrl + shift + D )

  3. 디버그 콘솔에서 django 실행 확인

  4. 중단점 표시 후 디버깅
    변수, 호출스택 확인 및 디버그 콘솔에서 코드실행 가능

  5. 코드 진행 중 에러 발생시에도 확인 가능

  6. 코드 수정 후)

    1. docker kill backend-debug
    2. docker-compose -f docker-compose.debug.yml up -d --no-deps backend-debug
    3. 2번부터 다시 반복

Document

vscode에서 django debugging

https://code.visualstudio.com/docs/python/tutorial-django

vscode에서 docker-compose debugging

https://code.visualstudio.com/docs/containers/docker-compose

profile
kimphysicsman

0개의 댓글