GCP VM에서 Django 프로젝트 초기 설정 및 배포 준비 과정
GCP VM에서 Django 프로젝트 초기 설정 및 배포 준비 과정
이 포스트는 Google Cloud Platform(GCP)의 Compute Engine VM 인스턴스(Ubuntu 22.04 기준)에 Django 프로젝트를 배포하기 위한 초기 설정 과정을 단계별로 기록합니다. SSH 키 생성, VM 생성, 필수 서비스 설치, 데이터베이스 설정, 프로젝트 코드 클론, 가상 환경 설정, Django 마이그레이션, 그리고 변경 사항을 GitHub에 반영하는 과정까지 다룹니다.
사용된 주요 기술:
- 클라우드: Google Cloud Platform (Compute Engine)
- OS: Ubuntu 22.04 LTS
- 웹 프레임워크: Django
- 데이터베이스: MySQL
- 메시지 브로커/백엔드: Redis
- 비동기 작업: Celery
- WSGI 서버 (예정): Gunicorn
- 웹 서버 (예정): Nginx
- SSH 클라이언트 (로컬): PuTTY, PuTTYgen (Windows 기준)
- 버전 관리: Git, GitHub
1단계: SSH 키 생성 및 GCP VM 생성
배포할 서버(VM)에 안전하게 접속하기 위해 먼저 SSH 키 쌍을 생성합니다.
- SSH 키 생성 (PuTTYgen 사용):
- 로컬 PC(Windows)에서
PuTTYgen을 실행합니다. - 키 타입(예: RSA 4096)을 선택하고 [Generate] 버튼을 클릭, 마우스를 움직여 키를 생성합니다.
- Public key (
ssh-rsa AAAA...형식)를 복사하여gcp_key.pub같은 파일로 저장합니다. - 비밀번호(passphrase)를 설정하고 [Save private key] 버튼을 클릭하여 비공개 키(
.ppk파일, 예:gcp_key.ppk)를 안전한 곳에 저장합니다.
- 로컬 PC(Windows)에서
- GCP VM 인스턴스 생성:
- Google Cloud Console에 접속하여 Compute Engine > VM 인스턴스로 이동합니다.
- [인스턴스 만들기] 클릭.
- 이름, 리전/영역, 머신 유형(프로젝트 사양 고려)을 선택합니다.
- 부팅 디스크를 Ubuntu 22.04 LTS 로 선택하고 디스크 크기를 지정합니다 (예: 30GB).
- 방화벽 설정에서 HTTP/HTTPS 트래픽 허용을 체크합니다.
- ‘보안 및 액세스’ > ‘SSH 키’ 섹션에서 [항목 추가]를 클릭하고, 이전에 저장한 공개 키 (
gcp_key.pub) 내용 전체를 붙여넣습니다. 이때 연결될 사용자 이름(예:my_gcp_user)을 확인합니다. - [만들기]를 클릭하여 VM 생성을 완료하고, 할당된 외부 IP 주소를 확인합니다.
2단계: VM 접속 및 초기 시스템 설정
생성된 VM에 SSH로 접속하여 기본적인 시스템 설정을 진행합니다.
- VM 접속 (PuTTY 사용):
- 로컬 PC에서
PuTTY를 실행합니다. - Host Name:
사용자이름@VM외부IP주소입력. - Connection > SSH > Auth (Credentials) 에서 저장한 비공개 키(
.ppk) 파일을 지정합니다. - [Open] 클릭. 최초 접속 시 호스트 키를 저장하고, 키 생성 시 설정한 비밀번호(passphrase)를 입력하여 접속합니다.
- 로컬 PC에서
- 시스템 업데이트 및 업그레이드:
- VM에 접속된 터미널에서 다음 명령어를 실행하여 패키지 목록을 업데이트하고 설치된 패키지를 최신 버전으로 업그레이드합니다.
sudo apt update && sudo apt upgrade -y
- VM에 접속된 터미널에서 다음 명령어를 실행하여 패키지 목록을 업데이트하고 설치된 패키지를 최신 버전으로 업그레이드합니다.
3단계: 필수 서비스 및 라이브러리 설치
Django 프로젝트 구동에 필요한 주요 서비스와 시스템 라이브러리를 설치합니다.
- Python 관련 도구, MySQL 서버, Redis 서버, Git, Nginx, 빌드 도구 및
mysqlclient,weasyprint등 Python 패키지 설치에 필요한 라이브러리들을 한 번에 설치합니다.sudo apt install -y python3 python3-pip python3-venv mysql-server redis-server git build-essential libmysqlclient-dev pkg-config libpangoft2-1.0-0 libcairo2 libffi-dev libxml2-dev libxslt1-dev python3-dev libjpeg-dev zlib1g-dev nginx- 참고: 설치 과정 중
pkg-config,libpangoft2-1.0-0등이 누락되어pip install시 오류가 발생할 수 있으며, 이 경우 해당 패키지를 추가로apt install해주어야 합니다.
- 참고: 설치 과정 중
4단계: 서비스 설정 (MySQL, Redis)
설치된 MySQL과 Redis 서버를 설정하고 실행합니다.
- MySQL 보안 설정 및 DB/사용자 생성:
- 기본 보안 설정을 진행합니다. (비밀번호 정책 등 설정)
sudo mysql_secure_installation - MySQL에 root로 접속하여 Django 프로젝트에서 사용할 데이터베이스와 사용자를 생성하고 권한을 부여합니다. (비밀번호는 강력하게 설정)
sudo mysql -u root -p # MySQL 프롬프트에서 실행 CREATE DATABASE cdss_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'cdss_user'@'localhost' IDENTIFIED BY 'your_secure_db_password'; GRANT ALL PRIVILEGES ON cdss_db.* TO 'cdss_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
- 기본 보안 설정을 진행합니다. (비밀번호 정책 등 설정)
- Redis 서버 상태 확인/시작: (보통
apt install시 자동 시작됨)sudo systemctl status redis-server # 만약 실행 중이 아니라면: # sudo systemctl start redis-server # sudo systemctl enable redis-server # 부팅 시 자동 시작 (선택)
5단계: Django 프로젝트 설정
VM에 프로젝트 코드를 가져와 Python 가상 환경을 설정하고 필요한 패키지를 설치합니다.
- 프로젝트 코드 클론: Git 저장소에서 코드를 복제합니다. (홈 디렉토리에
DJANGO폴더로 클론하는 예시)cd ~ git clone [https://github.com/mina64-y/Django.git](https://github.com/mina64-y/Django.git) DJANGO cd DJANGO - Python 가상 환경 생성 및 활성화:
python3 -m venv venv source venv/bin/activate- 이제 터미널 프롬프트 앞에
(venv)가 표시됩니다.
- 이제 터미널 프롬프트 앞에
- Python 의존성 패키지 설치:
requirements.txt파일을 사용하여 필요한 라이브러리를 설치합니다.pip install -r requirements.txt - .env 파일 설정: 프로젝트 루트 디렉토리에
.env파일을 생성하고 VM 환경에 맞는 설정값(특히 DB 정보)을 입력합니다.nano .env# .env 파일 내용 예시 DB_NAME=cdss_db DB_USER=cdss_user DB_PASSWORD=your_secure_db_password # 4단계에서 설정한 DB 비밀번호 DB_HOST=127.0.0.1 DB_PORT=3306 SECRET_KEY=your_django_secret_key_here # Django 시크릿 키 DEBUG=False # 프로덕션 환경 ALLOWED_HOSTS=your_vm_external_ip # VM 외부 IP 주소 # 기타 필요한 환경 변수들...- Ctrl+O, Enter (저장), Ctrl+X (종료)
- 로그 디렉토리 생성:
settings.py의 로깅 설정에 필요한logs디렉토리를 생성합니다.mkdir logs
6단계: Django 마이그레이션 및 준비
데이터베이스 스키마를 생성하고 관리자 계정 및 정적 파일을 준비합니다.
- 데이터베이스 마이그레이션: Django 모델 변경 사항을 데이터베이스에 적용합니다.
python manage.py migrate- 참고: 초기 마이그레이션 시 “Table … already exists” 또는 “Failed to open the referenced table …” 오류가 발생할 수 있습니다. 이는 마이그레이션 적용 순서나 이전 실패 기록 때문일 수 있으며,
python manage.py migrate <app_name> --fake또는python manage.py migrate <app_name>명령으로 특정 앱을 먼저 처리하거나,--fake옵션으로 기록만 업데이트하는 방식으로 해결해야 할 수 있습니다.
- 참고: 초기 마이그레이션 시 “Table … already exists” 또는 “Failed to open the referenced table …” 오류가 발생할 수 있습니다. 이는 마이그레이션 적용 순서나 이전 실패 기록 때문일 수 있으며,
- Superuser 생성: Django Admin 사이트에 접속할 관리자 계정을 생성합니다.
python manage.py createsuperuser(사용자 이름, 이메일, 비밀번호 입력)
- 정적 파일 수집: CSS, JS, 이미지 등 정적 파일들을
STATIC_ROOT로 지정된 디렉토리(예:staticfiles/)로 복사합니다.python manage.py collectstatic(‘yes’ 입력)
7단계: 변경 사항 Git에 반영
VM에서 수정한 설정 파일 등을 다시 GitHub 저장소에 반영합니다.
- .gitignore 설정:
.env,venv/,logs/등 민감하거나 불필요한 파일/디렉토리가 Git에 포함되지 않도록.gitignore파일을 설정하고 커밋합니다.echo ".env" >> .gitignore # ... (venv/, logs/, staticfiles/, media/, __pycache__/ 등 추가) git add .gitignore git commit -m "Add or update .gitignore" - Git 사용자 정보 설정: (최초 커밋 시 필요할 수 있음)
git config --global user.email "your_github_email@example.com" git config --global user.name "Your GitHub Username or Name" - 코드 변경 사항 커밋 및 푸시: 수정된 설정 파일(
config/wsgi.py,config/celery.py)과 새로 생성된 마이그레이션 파일(apps/users/migrations/등)을 스테이징하고 커밋합니다.git add config/wsgi.py config/celery.py apps/users/migrations/ # 변경된 파일 추가 git commit -m "Fix deployment configs and add necessary migrations" - GitHub에 푸시: Personal Access Token (PAT)을 사용하여 GitHub에 푸시합니다. (GitHub은 더 이상 비밀번호 인증을 지원하지 않음)
git push origin main # 'main'은 실제 사용하는 브랜치 이름(Username 입력 후, Password 프롬프트에 GitHub 비밀번호 대신 생성한 PAT 입력)
다음 단계
여기까지 완료하면 Django 프로젝트를 GCP VM에서 실행하기 위한 기본적인 환경 설정과 데이터베이스 준비가 완료된 것입니다. 다음 단계는 Gunicorn과 Celery를 systemd를 이용하여 백그라운드 서비스로 등록하고, Nginx를 리버스 프록시 및 정적/미디어 파일 서버로 설정하여 실제 웹 서비스를 시작하는 것입니다.