다음을 통해 공유


자습서: 서비스 커넥터를 사용하여 Postgres on Azure App Service로 Django 앱 빌드

참고 항목

이 자습서에서는 웹앱을 데이터베이스 서비스에 연결하는 프로세스를 간소화하는 서비스 커넥터를 사용합니다. 이 자습서는 App Service 자습서를 수정한 것이므로 몇 가지 유사성을 볼 수 있습니다. 서비스 커넥터가 작동하여 App Service 자습서에서 제공된 연결 프로세스를 간소화하는 위치를 확인하려면 환경 변수를 구성하여 데이터베이스 연결 섹션을 살펴봅니다.

이 자습서에서는 데이터 기반 Python Django 웹앱을 Azure App Service에 배포하고 Azure Database for PostgreSQL 유연한 서버 데이터베이스에 연결하는 방법을 보여 줍니다.

이 자습서에서는 Azure CLI를 사용하여 다음 작업을 완료합니다.

  • Python 및 Azure CLI를 사용하여 초기 환경 설정
  • Azure Database for PostgreSQL 유연한 서버 데이터베이스 만들기
  • Azure App Service에 코드 배포 및 PostgreSQL 유연한 서버에 연결
  • 코드 업데이트 및 다시 배포
  • 진단 로그 보기
  • Azure Portal에서 웹앱 관리

초기 환경 설정

  1. Python 3.8 이상을 설치합니다. Python 버전이 3.8 이상인지 확인하려면 터미널 창에서 다음 코드를 실행합니다.

    python3 --version
    
  2. Azure CLI 2.30.0 이상을 설치합니다. Azure CLI 버전이 2.30.0 이상인지 확인하려면 az --version 명령을 실행합니다. 업그레이드해야 하는 경우 az upgrade를 실행합니다(버전 2.30.0 이상 필요).

  3. az login으로 CLI를 사용하여 Azure에 로그인합니다. 이 명령은 로그인 정보를 수집하는 브라우저를 엽니다. 명령이 완료되면 구독 관련 정보가 포함된 JSON 출력이 표시됩니다. 로그인하면 Azure CLI에서 Azure 명령을 실행하여 구독의 리소스를 사용할 수 있습니다.

샘플 앱 복제 또는 다운로드

샘플 리포지토리를 복제합니다.

git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django.git

다음 폴더로 이동합니다.

cd serviceconnector-webapp-postgresql-django

샘플의 유연한 서버 분기를 사용합니다. 이 분기에는 데이터베이스 서버 URL을 설정하는 방법과 Azure PostgreSQL 유연한 서버의 필요에 따라 Django 데이터베이스 구성에 'OPTIONS': {'sslmode': 'require'} 추가와 같은 몇 가지 필요한 변경 내용이 포함되어 있습니다.

git checkout flexible-server

djangoapp 샘플에는 Django 설명서의 첫 번째 Django 앱 작성에 따라 가져오는 데이터 기반 Django 설문 조사 앱이 포함되어 있습니다. 편의를 위해 완성된 앱이 여기에 제공됩니다.

또한 샘플은 App Service와 같은 프로덕션 환경에서 실행되도록 수정됩니다.

  • 프로덕션 설정은 azuresite/production.py 파일에 있습니다. 개발 설정은 azuresite/settings.py에 있습니다.
  • WEBSITE_HOSTNAME 환경 변수가 설정되면 앱에서 프로덕션 설정을 사용합니다. Azure App Service는 자동으로 이 변수를 웹앱의 URL로 설정합니다(예: msdocs-django.azurewebsites.net).

프로덕션 설정은 모든 프로덕션 환경에서 실행되도록 Django를 구성하는 것과 관련이 있으며 App Service에만 국한되지 않습니다. 자세한 내용은 Django 배포 검사 목록을 참조하세요. 또한 일부 변경 내용에 대한 자세한 내용은 Azure의 Django에 대한 프로덕션 설정을 참조하세요.

문제가 있나요? 알려주세요.

Azure에서 Postgres 데이터베이스 만들기

  1. 모든 명령에 해당 매개 변수를 제공할 필요가 없도록 Azure CLI에서 매개 변수 캐싱을 사용하도록 설정합니다. (캐시된 값은 .azure 폴더에 저장됩니다.)

    az config param-persist on 
    
  2. 리소스 그룹을 만듭니다(원하는 경우 이름을 변경할 수 있음). 리소스 그룹 이름은 캐시되고 후속 명령에 자동으로 적용됩니다.

    az group create --name ServiceConnector-tutorial-rg --location eastus
    
  3. 데이터베이스 서버를 만듭니다(이 프로세스는 몇 분 정도 소요됨).

    az postgres flexible-server create --sku-name Standard_B1ms --public-access all
    

    az 명령이 인식되지 않는 경우 초기 환경 설정에서 설명한 대로 Azure CLI가 설치되어 있는지 확인합니다.

    az postgres flexible-server create 명령은 다음 작업을 수행합니다. 이 작업은 몇 분 정도 걸립니다.

    • 캐시된 이름이 아직 없는 경우 기본 리소스 그룹을 만듭니다.
    • PostgreSQL 유연한 서버를 만듭니다.
      • 기본적으로 이 명령은 server383813186과 같은 생성된 이름을 사용합니다. --name 매개 변수를 통해 고유한 이름을 지정할 수 있습니다. Azure의 모든 이름은 고유해야 합니다.
      • 이 명령은 가장 저렴한 Standard_B1ms 가격 책정 계층을 사용합니다. 기본 Standard_D2s_v3 계층을 사용하려면 --sku-name 인수를 생략합니다.
      • 이 명령은 이전 az group create 명령에서 캐시된 리소스 그룹 및 위치를 사용합니다. 이 예제에서는 eastus 지역의 리소스 그룹 ServiceConnector-tutorial-rg입니다.
    • 사용자 이름 및 암호를 사용하여 관리자 계정을 만듭니다. --admin-user--admin-password 매개 변수를 통해 이러한 값을 직접 지정할 수 있습니다.
    • 기본적으로 flexibleserverdb라는 데이터베이스를 만듭니다. --database-name 매개 변수를 사용하여 데이터베이스 이름을 지정할 수 있습니다.
    • --public-access 매개 변수를 사용하여 제어할 수 있는 완전한 퍼블릭 액세스 권한을 사용하도록 설정합니다.
  4. 이 명령이 완료되면 이 자습서의 뒷부분에서 나오는 출력 값, 특히 호스트, 사용자 이름 및 암호와 데이터베이스 이름이 필요하므로 명령의 JSON 출력을 파일에 복사합니다.

문제가 있나요? 알려주세요.

Azure App Service에 코드 배포

이 섹션에서는 App Service 앱에서 앱 호스트를 만들고, 이 앱을 Postgres 데이터베이스에 연결한 다음, 코드를 해당 호스트에 배포합니다.

App Service 앱 만들기

  1. 터미널에서 앱 코드가 포함된 djangoapp 리포지토리 폴더에 있는지 확인합니다.

  2. 샘플 앱의 flexible-server 분기로 전환합니다. 이 분기에는 PostgreSQL 유연한 서버에 필요한 특정 구성이 포함되어 있습니다.

    git checkout flexible-server
    
  3. 다음 az webapp up 명령을 실행하여 앱에 대한 App Service 호스트를 만듭니다.

    az webapp up --name <app-name> --sku B1 
    

    이 명령은 이전 az group create 명령에서 캐시된 리소스 그룹 및 위치(이 예제에서는 eastus 지역에 있는 그룹 Python-Django-PGFlex-rg)를 사용하여 다음 작업을 수행합니다. 이 작업에는 몇 분 정도 걸릴 수 있습니다.

    • 기본 가격 책정 계층(B1)에서 App Service 플랜을 만듭니다. --sku를 생략하여 기본값을 사용할 수 있습니다.
    • App Service 앱을 만듭니다.
    • 앱에 대해 기본 로깅을 사용하도록 설정합니다.
    • 빌드 자동화를 사용하도록 설정된 ZIP 배포를 사용하여 리포지토리를 업로드합니다.

성공적으로 배포되면 명령에서 다음 예제와 같은 JSON 출력을 생성합니다.

az webapp up 명령에 대한 출력 예를 보여 주는 터미널 스크린샷.

문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 그렇지 않으면 알려주세요.

데이터베이스를 연결하도록 환경 변수 구성

이제 코드가 App Service에 배포되면 다음 단계는 Azure에서 앱을 Postgres 데이터베이스에 연결하는 것입니다.

앱 코드는 AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME, AZURE_POSTGRESQL_USERAZURE_POSTGRESQL_PASS라는 네 가지 환경 변수에서 데이터베이스 정보를 찾을 수 있어야 합니다.

App Service에서 환경 변수를 설정하려면 다음 az connection create 명령을 사용하여 "앱 설정"을 만듭니다.

az webapp connection create postgres-flexible --client-type django

리소스 그룹, 앱 이름, db 이름은 캐시된 값에서 그려집니다. 이 명령을 실행하는 동안 postgres 데이터베이스의 관리자 암호를 제공해야 합니다.

  • 이 명령은 앱 코드에서 예상한 대로 "AZURE_POSTGRESQL_HOST", "AZURE_POSTGRESQL_NAME", "AZURE_POSTGRESQL_USER", "AZURE_POSTGRESQL_PASS"라는 설정을 만듭니다.
  • 관리자 자격 증명을 잊어버린 경우 이 명령은 다시 설정하도록 안내합니다.

참고 항목

"구독이 Microsoft.ServiceLinker를 사용하도록 등록되어 있지 않습니다."라는 오류 메시지가 표시되면 az provider register -n Microsoft.ServiceLinker를 실행하여 Service Connector 리소스 공급자를 등록하고 연결 명령을 다시 실행합니다.

Python 코드에서 os.environ.get('AZURE_POSTGRESQL_HOST')과 같은 명령문을 사용하여 이러한 설정을 환경 변수로 액세스합니다. 자세한 내용은 환경 변수 액세스를 참조하세요.

문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 그렇지 않으면 알려주세요.

Django 데이터베이스 마이그레이션 실행

Django 데이터베이스 마이그레이션은 Azure 데이터베이스에서 PostgreSQL의 스키마가 코드와 일치하는지 확인합니다.

  1. az webapp ssh를 실행하여 브라우저에서 웹앱에 대한 SSH 세션을 엽니다.

    az webapp ssh
    
  2. SSH 세션에서 다음 명령을 실행합니다.

    # Run database migrations
    python manage.py migrate
    
    # Create the super user (follow prompts)
    python manage.py createsuperuser
    

    데이터베이스 연결과 관련된 오류가 발생하면 이전 섹션에서 만든 애플리케이션 설정 값을 확인합니다.

  3. createsuperuser 명령은 슈퍼 사용자 자격 증명을 요구하는 메시지를 표시합니다. 이 자습서에서는 기본 사용자 이름으로 root를 사용하고, Enter 키를 눌러 이메일 주소를 비워 두고, 암호로 Pollsdb1을 입력합니다.

  4. 데이터베이스가 잠겨 있다는 오류가 표시되면 이전 섹션의 az webapp settings 명령을 실행했는지 확인합니다. 이러한 설정이 없으면 마이그레이션 명령이 데이터베이스와 통신할 수 없으므로 오류가 발생합니다.

문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 그렇지 않으면 알려주세요.

앱에서 설문 조사 질문 만들기

  1. 앱 웹 사이트를 엽니다. 데이터베이스에 아직 특정 설문 조사가 없으므로 앱에서 "설문 조사 앱" 및 "설문 조사를 사용할 수 없습니다."라는 메시지가 표시됩니다.

    az webapp browse
    

    "애플리케이션 오류"가 표시되면 이전 단계인 "데이터베이스를 연결하도록 환경 변수 구성"에서 필요한 설정을 만들지 않았거나 해당 값에 오류가 포함되어 있을 수 있습니다. az webapp config appsettings list 명령을 실행하여 설정을 확인합니다.

    오류를 수정하도록 설정이 업데이트되면 앱이 다시 시작할 때까지 1분 정도 기다린 다음, 브라우저를 새로 고칩니다.

  2. URL에 /admin을 추가하여(예: http://<app-name>.azurewebsites.net/admin) 웹앱의 관리자 페이지로 이동하세요. 이전 섹션의 Django 슈퍼 사용자 자격 증명(rootPollsdb1)을 사용하여 로그인합니다. 설문 조사 아래에서 질문 옆에 있는 추가를 선택하고, 몇 가지 선택 항목이 있는 설문 조사 질문을 만듭니다.

  3. 기본 웹 사이트(http://<app-name>.azurewebsites.net)로 돌아가 이제 질문이 사용자에게 표시되는지 확인합니다. 하지만 일부 데이터를 데이터베이스에 생성하려는 질문에 대답합니다.

축하합니다! Linux용 Azure App Service에서 활성 Postgres 데이터베이스를 사용하는 Python Django 웹앱이 실행되고 있습니다.

참고 항목

App Service는 각 하위 폴더에서 기본적으로 manage.py startproject를 통해 만드는 wsgi.py 파일을 찾아서 Django 프로젝트를 검색합니다. App Service에서 해당 파일을 찾으면 Django 웹앱이 로드됩니다. 자세한 내용은 기본 제공 Python 이미지 구성을 참조하세요.

리소스 정리

앱을 유지하거나 추가 자습서를 계속하려면 다음 단계로 건너뛰세요. 그렇지 않으면 요금이 지속적으로 청구되지 않도록 이 자습서에서 만든 리소스 그룹을 삭제합니다.

az group delete --name ServiceConnector-tutorial-rg --no-wait

리소스 그룹을 삭제하면 해당 그룹에 포함된 모든 리소스도 할당 취소되고 삭제됩니다. 이 명령을 사용하기 전에 해당 그룹의 리소스가 더 이상 필요하지 않은지 확인하세요.

모든 리소스를 삭제하는 데 시간이 걸릴 수 있습니다. --no-wait 인수를 사용하면 명령이 즉시 반환됩니다.

문제가 있나요? 알려주세요.

다음 단계