
가상 환경 생성 : python3 -m veny [가상환경 이름]

가상환경 활성화 : source [가상환경이름]/bin/activate

deactivateDjango API Server를 만들기 위한 패키지 설치
pip install djangopip install djangorestframework프로젝트 생성
django-admin startproject apiserver
setting.py 수정
# 허용 포트 설정
ALLOWED_HOSTS = ['*']
#사용할 Application 등록
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 생성
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)
]
requirements.txt 파일 생성
pip freeze > requirements.txt

Dockerfile 작성
name: django
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
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
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
Image 빌드
docker build -t apiserver .
컨테이너 실행
docker run -d -p 80:80 --name apiserver apiserver
Repository 생성

Github Token key 발급

Repository에 Push

dockerhub - repository 생성

Token 발급


.github/workflows 디렉토리를 생성
docker-image.yml 파일 작성 (파일이름 상관 없음)
# 워크플로우 이름 정의
name: django
# on : 해당 플로우가 언제 실행되는지 정의
# main branch로 push할 때, main branch로 request할 때
on:
# main 브랜치로 push할 때 트리거
push:
branches: [ "main" ]
# main 브랜치로 pull request할 때 트리거
pull_request:
branches: [ "main" ]
# 실행시킬 작업들 정의
jobs:
build:
# 최신 버전의 Ubuntu에서 작업 실행
runs-on: ubuntu-latest
# 작업의 순서 정
steps:
# 코드 체크아웃 단계
- name: Checkout
uses: actions/checkout@v3 # GitHub의 checkout 액션을 사용하여 저장소 클론
# Python 3.10 환경 설정
- name: Set up Python 3.10
uses: actions/setup-python@v4 # setup-python 액션 사용
with:
python-version: '3.10' # 사용할 Python 버전 명시
# 의존성 설치 단계
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# DockerHub 로그인 단계
- name: Login to DockerHub
uses: docker/login-action@v1 # DockerHub 로그인 액션 사용
with:
username: ${{secrets.DOCKERHUB_USERNAME}} # GitHub Secrets에 저장된 DockerHub 사용자 이름 사용
password: ${{secrets.DOCKERHUB_TOKEN}} # GitHub Secrets에 저장된 DockerHub 비밀번호(토큰) 사용
# Docker 이미지 빌드 및 DockerHub로 푸시
- name: build and release to DockerHub
env:
NAME: ${{secrets.DOCKERHUB_USERNAME}} # GitHub Secrets에서 가져온 DockerHub 사용자 이름 설정
REPO: djangocicd # Docker 이미지의 이름(리포지토리) 설정
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
Github에 Secrets and variables 등록

Git Repository에 변경된 코드 push

git add .git commit -m “커밋메세지”git pushGit Action Page 확인

지정한 Dockerhub에 image 올라갔는지 확인
