웹사이트 검색

Ubuntu 22.04에서 Django 애플리케이션과 함께 PostgreSQL을 사용하는 방법


소개

Django는 Python 애플리케이션을 빠르게 만들기 위한 유연한 프레임워크입니다. 기본적으로 Django 애플리케이션은 경량 SQLite 데이터베이스 파일에 데이터를 저장하도록 구성됩니다. 이것은 일부 부하에서 잘 작동하지만 보다 전통적인 데이터베이스 관리 시스템은 프로덕션에서 성능을 향상시킬 수 있습니다.

이 가이드에서는 Django 애플리케이션과 함께 PostgreSQL(Postgres라고도 함)을 설치하고 구성합니다. 또한 일부 소프트웨어 패키지를 설치하고 애플리케이션에 대한 데이터베이스 자격 증명을 생성한 다음 이 백엔드로 새 Django 프로젝트를 시작 및 구성합니다.

전제 조건

시작하려면 sudo 권한으로 구성된 비루트 사용자 설정이 포함된 Ubuntu 22.04 서버가 필요합니다. 초기 서버 설정 가이드에 따라 이를 설정하는 방법을 알아보세요.

계속할 준비가 되면 sudo 사용자로 로그인하십시오.

1단계 – Ubuntu 리포지토리에서 구성 요소 설치

먼저 apt를 사용하여 패키지 관리자 캐시를 업데이트합니다.

  1. sudo apt update

그런 다음 Django 프로젝트의 필수 구성 요소를 설치합니다. 여기에는 Python 구성 요소를 설치하고 관리하는 Python 패키지 관리자인 pip가 포함됩니다. 또한 프로젝트를 지원하기 위해 추가 라이브러리와 함께 Postgres를 설치합니다.

  1. sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

Python, Postgres 및 추가 라이브러리를 설치한 후 계속해서 데이터베이스를 생성할 수 있습니다.

2단계 – 데이터베이스 및 데이터베이스 사용자 생성

기본적으로 Postgres는 로컬 연결에 피어 인증이라는 인증 체계를 사용합니다. 즉, 사용자의 운영 체제 사용자 이름이 유효한 Postgres 사용자 이름과 일치하면 해당 사용자는 추가 인증 없이 로그인할 수 있습니다.

Postgres 설치 중에 postgres라는 운영 체제 사용자가 postgres PostgreSQL 관리 사용자에 해당하도록 생성되었습니다. 관리 작업을 수행하려면 이 사용자 postgres를 사용해야 합니다. sudo를 사용하여 명령을 루트 대신 사용자로 실행하는 -u 옵션과 함께 사용자 이름 postgres를 전달합니다. 다음을 작성하여 대화형 Postgres 세션에 로그인합니다.

  1. sudo -u postgres psql

이제 postgres 사용자의 셸 세션에 액세스할 수 있습니다.

다음으로 Django 프로젝트용 데이터베이스를 생성합니다. 각 프로젝트에는 보안상의 이유로 자체 격리된 데이터베이스가 있어야 합니다. 이 가이드에서는 데이터베이스를 myproject라고 하지만 좀 더 설명적인 이름을 지정하는 것이 좋습니다. 또한 Postgres 명령을 입력할 때 SQL 프롬프트에서 세미콜론 ;를 사용하여 명령을 종료해야 합니다.

  1. CREATE DATABASE myproject;

이제 데이터베이스에 연결하고 상호 작용할 데이터베이스 사용자를 만듭니다. 비밀번호를 강력하고 안전한 것으로 설정하십시오.

  1. CREATE USER myproject_user WITH PASSWORD 'myproject_database_password';

그런 다음 생성한 사용자에 대한 몇 가지 연결 매개변수를 수정합니다. 이렇게 하면 연결이 설정될 때마다 올바른 값을 쿼리하고 설정할 필요가 없도록 데이터베이스 작업 속도가 빨라집니다. 먼저 기본 인코딩을 UTF-8로 설정합니다.

  1. ALTER ROLE myproject_user SET client_encoding TO 'utf8';

그런 다음 기본 트랜잭션 격리 체계를 커미트된 읽기로 설정하여 커밋되지 않은 트랜잭션의 읽기를 차단합니다.

  1. ALTER ROLE myproject_user SET default_transaction_isolation TO 'read committed';

마지막으로 시간대를 설정합니다. 기본적으로 Django 프로젝트는 UTC를 사용하도록 설정되어 있습니다. 다음은 Django 프로젝트의 권장 사항입니다.

  1. ALTER ROLE myproject_user SET timezone TO 'UTC';

이제 생성한 데이터베이스에 대한 데이터베이스 사용자 액세스 권한을 부여합니다.

  1. GRANT ALL PRIVILEGES ON DATABASE myproject TO myproject_user;

SQL 프롬프트를 종료하여 postgres 사용자의 셸 세션으로 돌아갑니다.

  1. \q

이제 데이터베이스가 설정되었으므로 Django를 설치할 수 있습니다.

3단계 – 가상 환경에 Django 설치

더 나은 유연성을 위해 Python 가상 환경 내에 Django와 모든 종속성을 설치합니다.

다음 명령을 입력하여 이러한 환경을 만들 수 있는 virtualenv 패키지를 얻을 수 있습니다.

  1. sudo pip install virtualenv

다음으로 Django 프로젝트를 보관할 디렉터리를 만듭니다.

  1. mkdir ~/myproject

그런 다음 디렉터리로 이동합니다.

  1. cd ~/myproject

이제 다음을 사용하여 Django 프로젝트의 Python 요구 사항을 저장할 가상 환경을 만들 수 있습니다.

  1. python3 -m virtualenv myprojectenv

이렇게 하면 Python의 로컬 복사본과 pip가 프로젝트 디렉토리 내의 myprojectenv라는 디렉토리에 설치됩니다.

가상 환경 내에 애플리케이션을 설치하기 전에 이를 활성화해야 합니다. 다음 명령을 입력하면 됩니다.

  1. source myprojectenv/bin/activate

이제 가상 환경 내에서 작업 중임을 나타내도록 프롬프트가 변경됩니다. 예: (myprojectenv)user@host:~/myproject$.

가상 환경이 활성화되면 pip로 Django를 설치할 수 있습니다. 구성한 데이터베이스를 사용할 수 있게 해주는 psycopg2 패키지도 설치합니다.

  1. pip install Django psycopg2

참고: 사용 중인 Python 버전에 관계없이 가상 환경이 활성화되면 pip3 대신 pip 명령을 사용해야 합니다.

이제 myproject 디렉토리 내에서 Django 프로젝트를 시작할 수 있습니다. 이렇게 하면 코드를 보관할 동일한 이름의 하위 디렉터리가 생성되고 현재 디렉터리 내에 관리 스크립트가 생성됩니다. 올바르게 설정되도록 명령 끝에 점 .를 포함해야 합니다.

  1. django-admin startproject myproject .

Django와 가상 환경이 설정되면 Django 데이터베이스 설정 구성으로 이동할 수 있습니다.

4단계 – Django 데이터베이스 설정 구성

이제 프로젝트가 있으므로 생성한 데이터베이스를 사용하도록 프로젝트를 구성해야 합니다.

원하는 텍스트 편집기를 사용하여 하위 프로젝트 디렉토리에 있는 기본 Django 프로젝트 설정 파일을 엽니다. 이 예에서는 nano가 사용됩니다.

  1. nano ~/myproject/myproject/settings.py

파일 하단에는 현재 SQLite를 사용하도록 구성된 DATABASES 섹션이 있습니다.

. . .

# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

. . .

Postgres를 사용하려면 변경해야 합니다.

먼저 sqlite3 백엔드 대신 postgresql 어댑터를 사용하도록 엔진을 변경합니다. NAME에는 데이터베이스 이름을 사용하십시오. 이 예에서 myproject는 데이터베이스의 이름입니다. 그런 다음 사용자 이름, 암호 및 연결할 호스트를 포함하는 로그인 자격 증명을 추가합니다. 마지막으로 기본값이 선택되도록 포트 옵션을 비워 둡니다.

. . .
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'myproject_user',
        'PASSWORD': 'myproject_database_password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

. . .

ALLOWED_HOSTS 지시문도 조정해야 합니다. 이는 Django 인스턴스에 연결할 수 있는 주소 또는 도메인 이름의 화이트리스트를 정의합니다. 이 목록에 없는 Host 헤더가 있는 모든 수신 요청은 예외를 발생시킵니다. Django는 특정 클래스의 보안 취약성을 방지하기 위해 이를 설정하도록 요구합니다.

대괄호 안에 Django 서버와 연결된 IP 주소 또는 도메인 이름을 나열합니다. 각 항목은 쉼표로 구분된 항목과 함께 인용 부호 안에 나열되어야 합니다. 전체 도메인과 하위 도메인을 요청하려면 항목 시작 부분에 마침표를 추가하십시오.

다음과 같이 Django 서버의 도메인 이름과 IP 주소를 추가할 수 있습니다: ALLOWED_HOSTS = [ your_domain, 203.0.113.5]. your_domain 및 하위 도메인에 응답하려면 점 로 도메인을 시작합니다.: ALLOWED_HOSTS = [. your_domain, 203.0.113.5].

예를 들어 서버 도메인 또는 IP 주소를 입력합니다.

. . .

ALLOWED_HOSTS = ['your_server_domain_or_IP']
. . .

완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X, y, ENTER를 차례로 누릅니다.

5단계 – 데이터베이스 마이그레이션 및 프로젝트 테스트

이제 Django 설정이 구성되었으므로 데이터 구조를 데이터베이스로 마이그레이션하고 서버를 테스트할 수 있습니다.

마이그레이션을 생성하고 데이터베이스에 적용하는 것부터 시작하십시오. 아직 데이터가 없으므로 초기 데이터베이스 구조가 설정됩니다. 먼저 myproject 디렉토리에 있는지 확인합니다.

  1. cd ~/myproject

그런 다음 마이그레이션을 만들고 적용합니다.

  1. python manage.py makemigrations
  2. python manage.py migrate

데이터베이스 구조를 생성한 후 다음을 입력하여 관리 계정을 생성합니다.

  1. python manage.py createsuperuser

사용자 이름을 선택하라는 메시지가 표시됩니다. 서버와 연결된 사용자 이름을 사용하려면 이 항목을 비워둘 수 있습니다. 그런 다음 이메일 주소를 입력하고 계정의 비밀번호를 만드십시오.

Django 개발 서버에 액세스하기 전에 데이터베이스에 대한 연결을 테스트하십시오. 방화벽에서 포트를 열어 외부 연결을 허용합니다.

  1. sudo ufw allow 8000

포트가 열리면 Django 개발 서버를 시작하여 데이터베이스가 올바르게 작동하는지 테스트할 수 있습니다.

  1. python manage.py runserver 0.0.0.0:8000

웹 브라우저에서 서버의 도메인 이름 또는 IP 주소 뒤에 :8000을 입력하여 기본 Django 랜딩 페이지에 도달합니다.

http://server_domain_or_IP:8000

URL 끝에 /admin을 추가하면 관리자 인터페이스의 로그인 화면에 액세스할 수 있어야 합니다.

createsuperuser 명령을 사용하여 생성한 사용자 이름과 암호를 입력합니다. 그런 다음 관리 인터페이스로 이동합니다.

탐색을 마치면 터미널 창에서 CTRL+C를 눌러 개발 서버를 중지할 수 있습니다.

관리 인터페이스에 액세스하여 데이터베이스에 사용자 계정 정보가 저장되어 있고 적절하게 액세스할 수 있음을 확인했습니다.

결론

이 가이드에서는 Django 프로젝트의 백엔드 데이터베이스로 PostgreSQL을 설치하고 구성하는 방법을 배웠습니다. SQLite는 개발 및 가벼운 프로덕션 사용 중에 로드를 처리할 수 있지만 대부분의 프로젝트는 보다 완전한 기능을 갖춘 데이터베이스 관리 시스템을 구현하는 이점이 있습니다.

프로젝트를 더 발전시키려면 Ubuntu 22.04에서 Postgres, Nginx 및 Gunicorn으로 Django를 설정하는 방법 가이드를 읽어보세요.