언어 및 프레임워크 가이드
Django 컨테이너 앱을 실행하는 방법
14 분
back4app containers는 django 애플리케이션을 호스팅하기 위한 강력한 플랫폼입니다 docker화된 django 앱을 자동으로 배포할 수 있는 기능을 통해, 확장 가능하고 유연한 환경에서 프로젝트를 쉽게 시작할 수 있습니다 이 가이드에서는 back4app containers에서 django 애플리케이션을 준비하고 배포하는 과정을 안내합니다 이 포괄적인 가이드에서는 간단한 프로젝트부터 더 복잡한 설정까지 back4app containers에서 django 애플리케이션을 준비하고 배포하는 과정을 안내합니다 질문이나 의견이 있으시면, back4app community 의 #containers 채널에서 django와 관련된 논의에 참여해 주세요 언제든지 community\@back4app com으로 연락하실 수 있습니다 언제든지 back4app 컨테이너에서 작동하는 django 샘플 프로젝트를 확인하고 싶다면 다음으로 가세요 https //github com/templates back4app/containers python flask sample 1 당신의 django 애플리케이션 준비하기 django 애플리케이션이 올바르게 구조화되어 있고, 템플릿 및 정적 파일을 포함한 모든 필요한 파일이 프로젝트 디렉토리에 정리되어 있는지 확인하세요 더 복잡한 프로젝트의 경우, 적절한 앱 팩토리 설정이 되어 있는지 확인하고 django 모범 사례를 따르세요 2 requirements txt 파일 생성하기 필수 종속성과 해당 버전을 모두 나열하십시오 requirements txt 파일 이 파일은 docker 이미지를 빌드할 때 필요한 패키지를 설치하기 위해 dockerfile에서 사용됩니다 다음은 django 애플리케이션을 위한 샘플 requirements txt 파일로, 다양한 프로젝트에서 사용할 수 있는 일반적인 종속성을 포함하고 있습니다 특정 애플리케이션에 필요한 패키지를 자유롭게 추가하거나 제거하십시오 requirements txt django==3 2 10 gunicorn==20 1 0 psycopg2 binary==2 9 1 djangorestframework==3 12 4 django cors headers==3 9 0 django environ==0 4 5 django extensions==3 1 3 django filter==21 1 django rest auth==0 9 5 django allauth==0 47 0 requests==2 27 1 3 도커파일 생성하기 애플리케이션의 docker 이미지를 정의하기 위해 dockerfile을 작성하십시오 적절한 기본 이미지(예 python 3 x slim)를 사용하고, requirements txt 파일에서 종속성을 설치하고, 프로젝트 파일을 복사하고, 올바른 포트를 노출하며, django 애플리케이션을 시작하기 위한 적절한 명령을 지정해야 합니다(예 gunicorn 또는 uwsgi 사용) 예제 1 gunicorn을 사용하는 기본 django 애플리케이션 이 dockerfile은 uwsgi를 wsgi 서버로, nginx를 리버스 프록시 서버로 사용하는 더 복잡한 django 애플리케이션을 위한 것입니다 uwsgi와 nginx의 빌드 종속성을 설치한 후, pip를 사용하여 uwsgi와 함께 해당 패키지를 설치합니다 그런 다음 프로젝트 파일과 requirements txt 파일을 복사하고, uwsgi 서버를 위해 포트 8000을 노출합니다 cmd는 "myproject uwsgi ini"라는 별도의 구성 파일을 사용하여 uwsgi를 시작하는 명령을 지정합니다 dockerfile은 기본 구성 파일을 제거하고, 적절한 디렉토리에 "myproject nginx conf"라는 사용자 정의 nginx 구성 파일을 복사하며, 구성을 활성화하기 위해 심볼릭 링크를 생성하여 nginx를 구성합니다 nginx 구성 파일은 nginx가 포트 8000에서 수신하고 동일한 docker 컨테이너에서 실행 중인 uwsgi 서버로 요청을 프록시해야 한다고 지정합니다 \# base image from python 3 9 slim \# install build dependencies and curl run apt get update && apt get install y no install recommends \\ build essential \\ libssl dev \\ libpcre3 dev \\ curl \\ && rm rf /var/lib/apt/lists/ \# install uwsgi and nginx run pip install uwsgi run apt get update && apt get install y no install recommends nginx \# configure nginx run rm /etc/nginx/sites enabled/default copy myproject nginx conf /etc/nginx/sites available/ run ln s /etc/nginx/sites available/myproject nginx conf /etc/nginx/sites enabled/ \# copy requirements file and install dependencies copy requirements txt requirements txt run pip install no cache dir r requirements txt \# copy the rest of the project files copy \# expose the server port expose 8000 \# start uwsgi cmd \["uwsgi", " ini", "/app/myproject uwsgi ini"] dockerfiles에서 "myproject"를 실제 프로젝트 이름으로 바꾸는 것을 잊지 마세요 또한, uwsgi와 nginx 설정을 위해 프로젝트 디렉토리에 nginx와 uwsgi에 대한 적절한 구성을 포함하는 "myproject nginx conf" 파일과 "myproject uwsgi ini" 파일을 생성해야 합니다 4 애플리케이션을 로컬에서 테스트하세요 dockerfile을 생성한 후, back4app containers에 배포하기 전에 로컬에서 django 애플리케이션을 테스트할 수 있습니다 이는 모든 것이 예상대로 작동하는지 확인하고 배포 중에 발생할 수 있는 문제나 오류를 피하기 위한 중요한 단계입니다 로컬에서 애플리케이션을 테스트함으로써 back4app containers에 배포하기 전에 문제나 오류를 잡을 수 있습니다 문제가 발생하면 다음 단계로 진행하기 전에 반드시 해결해야 합니다 docker build t your app name docker run p 8080 8080 your app name 5 프로젝트를 git 저장소에 푸시하기 다음과 같이 gitignore 파일을 생성하여 불필요하거나 민감한 파일을 저장소에서 제외하세요 (예 pycache , env , pyc , 기타) git 저장소를 초기화하고, 프로젝트 파일을 커밋한 후 원격 저장소(예 github)에 푸시하세요 6 back4app 컨테이너에 애플리케이션 배포하기 back4app 계정을 생성한 후, docs에 나열된 단계를 따를 수 있습니다 1 github 저장소를 back4app과 연결하기 2 배포를 위한 프로젝트 준비하기 요약하자면, 컨테이너는 dockerfile에 자세히 설명된 지침을 따르며 애플리케이션을 생성하기 시작합니다 7 배포 모니터링하기 back4app containers 대시보드에서 배포 로그 및 상태를 주의 깊게 살펴보세요 배포 중 발생하는 오류나 문제를 해결하세요 더 복잡한 프로젝트의 경우, 모든 필요한 서비스(예 데이터베이스 또는 외부 api)가 올바르게 구성되고 접근 가능하도록 하세요 logs라는 섹션이 있어 앱의 모든 실행 로그를 나열하고 있으며, 앱에 문제가 있는지 확인하기 위해 이를 주의 깊게 살펴보는 것이 중요합니다 8 문제 해결 일반적인 배포 오류는 다음과 같이 나열됩니다 여기 flask 애플리케이션을 배포할 때 발생할 수 있는 다른 일반적인 오류는 다음과 같습니다 잘못된 호스트 구성 django 애플리케이션은 back4app containers에 배포할 때 호스트 0 0 0 0 에서 실행되도록 구성되어야 합니다 애플리케이션이 localhost 또는 127 0 0 1 , 사용 중이라면 외부에서 접근할 수 없을 수 있습니다 django 설정 파일( settings py )에 다음 줄이 포함되어 있는지 확인하세요 allowed hosts = \[' '] 애플리케이션이 여전히 접근할 수 없다면, dockerfile을 확인하여 올바른 포트가 노출되었는지 확인하세요 (예 expose 8000 는 포트 8000에 해당합니다) 호환되지 않거나 누락된 종속성 필요한 모든 종속성이 requirements txt 파일에 나열되어 있고, 그 버전이 서로 및 애플리케이션 코드와 호환되는지 확인하십시오 누락되거나 호환되지 않는 종속성은 런타임 오류를 초래할 수 있습니다 docker 컨테이너에 필요한 모든 종속성이 설치되어 있는지 확인하려면 docker run 명령을 it 플래그와 함께 실행하고 컨테이너 내에서 셸을 여십시오 docker run it myproject container /bin/bash 컨테이너 내부에 들어가면 pip list 를 사용하여 필요한 모든 종속성이 설치되어 있는지 확인하십시오 종속성이 누락된 경우 pip install \<dependency> 데이터베이스 연결 문제 django 애플리케이션이 데이터베이스에 의존하는 경우, 애플리케이션 구성에서 연결 문자열과 자격 증명이 올바르게 설정되어 있는지 확인하십시오 또한 back4app containers 환경에서 데이터베이스에 접근할 수 있는지 확인하십시오 데이터베이스 구성이 올바른지 확인하려면 django 설정 파일 ( settings py )를 확인하십시오 구성에 따라 데이터베이스 호스트, 포트, 이름, 사용자 및 비밀번호를 지정해야 할 수 있습니다 docker 컨테이너가 데이터베이스에 접근할 수 있는지 확인하려면 컨테이너 내부에서 데이터베이스에 접근할 수 있는지 확인하십시오 컨테이너 내부에서 셸을 열고 ( docker run it myproject container /bin/bash ) ping 또는 telnet 을 사용하여 데이터베이스에 연결할 수 있습니다 애플리케이션 충돌 또는 처리되지 않은 예외 django 애플리케이션 코드에서 처리되지 않은 예외나 충돌은 배포 실패 또는 예기치 않은 동작을 초래할 수 있습니다 애플리케이션 로그에서 오류 메시지를 확인하고 코드의 문제를 해결하십시오 컨테이너 로그를 확인하려면 docker logs myproject container 를 실행하여 오류나 예외가 발생하는지 확인하십시오 sentry와 같은 도구를 사용하여 애플리케이션의 오류를 추적하고 모니터링하십시오 잘못 구성된 wsgi 서버 wsgi 서버(예 gunicorn 또는 uwsgi)가 dockerfile에서 올바르게 구성되어 있고 django 애플리케이션을 올바른 진입점(예 myproject wsgi\ application )로 시작하는지 확인하십시오 올바른 서버가 설치되어 있고 requirements txt 파일에 종속성으로 나열되어 있는지 확인하십시오 잘못된 환경 변수 또는 구성 애플리케이션이 특정 환경 변수나 구성 파일에 의존하는지 확인하고, back4app containers 환경에서 올바르게 설정되어 있는지 확인하십시오 dockerfile에서 env 명령을 사용하여 필요한 환경 변수를 설정하십시오 애플리케이션에 필요한 구성 파일이 docker 컨테이너에서 올바르게 마운트되어 있는지 확인하십시오 back4app containers에서 django 애플리케이션을 배포하는 동안 다른 문제가 발생하면 community\@back4app com으로 문의하십시오 9 애플리케이션 확장 추가 리소스나 수평/수직 확장이 필요한 더 복잡한 프로젝트의 경우, 증가된 트래픽과 부하를 처리하기 위해 back4app containers 플랜을 업그레이드하는 것을 고려하십시오 10 샘플 애플리케이션 샘플 django 애플리케이션 프로젝트는 다음으로 이동할 수 있습니다 https //github com/templates back4app/containers python django https //github com/templates back4app/containers python django