Django Application CI 구현 실습

최병훈·2024년 10월 21일
post-thumbnail

1)애플리케이션 생성 및 테스트

  • 가상환경 생성 패키지 설치

    sudo apt install python3.12-venv
  • 가상환경 생성

    python3 -m venv myvenv
  • 가상환경 활성화: 맨 앞에 (가상환경이름) 이 보이는지 확인

    source myvenv/bin/activate

    이 소스 코드를 실행할 때는 가상환경 안에서 실행을 하던가 아니면 이 가상환경에 설치된 외부 라이브러리를 다시 설치한 후 실행해야 합니다.

  • Django API Server를 만들기 위한 패키지를 설치

    pip install django
    pip install djangorestframework
  • 프로젝트 생성
    django-admin startproject apiserver
  • 실행

    cd apiserver
    python manage.py runserver
  • 브라우저에서 확인
    http://localhost:8000

  • settings.py 파일을 수정

    #어떤 컴퓨터에서 실행될 것인지를 설정
    #*이면 아무 컴퓨터에서나 실행이되고 아이피를 직접 설정하면 그 아이피에서만 실행이 됩니다.
    
    ALLOWED_HOSTS = ['*']
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'apiserver',
        'rest_framework'
    ]
    
    TIME_ZONE = 'Asia/Seoul'

  • 사용자의 요청을 처리할 views.py 파일을 apiserver 디렉토리 내부에 생성하고 작성

    from rest_framework.response import Response
    from rest_framework.decorators import api_view
    from rest_framework import status
    
    @api_view(['GET'])
    def index(request):
        data = {"result":"success", "data":[{"id":"itstudy", "name":"adam"}]}
        return Response(data, status=status.HTTP_200_OK)
  • urls.py 파일을 수정해서 요청 과 요청 처리 함수를 연결

    from django.contrib import admin
    from django.urls import path
    from .views import index
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', index)
    ]
  • 실행 후 브라우저에서 확인 localhost:8000

    python manage.py runserver 0.0.0.0:8000

2)Dockerfile을 이용해서 이미지를 만들고 컨테이너로 테스트

  • 의존성을 requirements.txt 파일에 출력
    pip freeze > requirements.txt
  • Dockerfile 작성, 이번 도커 파일은 마지막 CMD 부분을 제외하고 모든 파이썬 파일에 적용 가능

    FROM --platform=linux/amd64 python:3.12.7-slim as build
    
    RUN apt-get update && apt-get install -y --no-install-recommends && rm -rf /var/lib/apt//lists/*
    
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    
    RUN pip install -r requirements.txt
    
    COPY . .
    
    EXPOSE 80
    
    CMD ["python", "manage.py", "runserver", "0.0.0.0:80"]
  • 빌드를 해서 도커 이미지로 생성
    docker build -t apiserver .
  • 컨테이너로 실행
    docker run -d -p 80:80 --name apiserver apiserver
  • 브라우저에서 확인 : localhost:80

3)코드를 git hub에 주기적으로 업로드 - CI

  • git hub에 접속해서 repository를 생성하고 token을 발급
    • repository 이름: djangocicd
  • apiserver 디렉토리에서 수행

    # git 초기화
    git init
    # git에 변경 내용을 적용하기 위한 파일 등록
    git add .
    # 로컬 git에 변경 내용 반영
    git commit -m 'cicd'
    # 브랜치 변경
    git branch -m main
  • 원격 저장소 등록

    git remote add origin ‘저장소 URL’
  • 원격 저장소에 업로드

    git push origin main
  • 원격 저장소에 push 되었는지 확인

4)git hub에 업로드 될 때 docker hub에 배포

  • docker hub에 로그인을 해서 repositoy 와 token을 생성
    • repository: djangocicd
  • git이 업로드된 디렉토리에 .github/workflows 디렉토리를 생성하고 yml 파일을 생성해서 작성

    name: djangocicd
    
    on:
      push:
        branches: ["main"]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - name: CheckOut
            uses: actions/checkout@v3
    
          - name: Set up Python 3.12.7
            uses: actions/setup-python@v4
            with:
              python-version: '3.12.7'
    
          - name: Upgrade pip
            run:
              python -m pip install --upgrade pip
    
          - name: Install Dependencies
            run:
              pip install -r requirements.txt
    
          - name: Login to DockerHub
            uses: docker/login-action@v1
            with:
              username: ${{ secrets.DOCKERHUB_USERNAME }}
              password: ${{ secrets.DOCKERHUB_TOKEN }}
    
          - name: build and release to DockerHub
            env:
              NAME: ${{ secrets.DOCKERHUB_USERNAME }}
              REPO: djangocicd
  • github의 repository 에 2개의 변수 등록

    • DOCKERHUB_USERNAME
    • DOCKERHUB_TOKEN
  • 코드를 수정한 경우

    git add .
    git commit -m ‘메시지’
    git push origin main
  • docker hub에 image push가 되었는지 확인

  • docker hub에서 image를 pull 받아서 컨테이너로 실행

    docker pull yachae1101/djangocicd

    docker run -d -p 80:80 --name apiserver yachae1101/djangocicd

0개의 댓글