1.Django APplication을 Docker Image 를 만들어서 EC2 배포
1)Django Application을 생성
=>가상 환경 생성
python -m venv ./myvenv
=>활성화
myvenv/Scripts/activate
=>필요한 패키지 설치
django
djangorestframework
=>프로젝트 생성
django -admin startproject apiserver
cd apiserver
=>프로젝트 실행(제대로 설치됬는지)
python manage.py runserver
=>소스 코드 수정
-settings.py 파일을 수정
#배포를 할 때 정확한 IP를 모른다면 *로 설정
ALLOWED_HOSTS = ['*']
#사용할 Application 등록
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
"apiserver"
]
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":"시모나", "name":"희정"},
{"id":"군계", "name":"아담"}
]
return Response(dat, status = status.HTTP_200_OK)
-urls.py 파일에 요청 URL과 처리 method 을 연결
from django.contrib import admin
from django.urls import path
from .views import index
urlpatterns = [
path("admin/", admin.site.urls),
path("",index),
]
-실행: 처음 실행할 때 세션 에러가 발생한 경우 아래 명령 수행
python manage.py makemigrations
python manage.py migrate
=>의존성 내보내기
pip freeze > requirements.txt
2)Dockerfile 를 이용해서 이미지를 생성
#기반 이미지
FROM python:3.8 as build
#실행할 명령어
#작업 디렉토리 설정
WORKDIR /usr/src/app
#파일을 복사
COPY requirements.txt ./
#패키지 설치
RUN pip install django
RUN pip install djangorestframework
#현재 디렉토리 모든 내용 기반 이미지 복사
COPY . .
#포트 개방
EXPOSE 80
#명령 수행
CMD ["python","manage.py","runserver","0.0.0.0:80"]
=>이미지 생성
docker build -t 이미지이름 Dockerfile 경로
=>이미지를 컨테이너로 만들어서 실행
docker run --name 컨테이너 이름 -dit -p 외부포트:내부포트 이미지이름
3)Git Action을 이용해서 DockerHub(public) 에 이미지를 배포
=>docker hub 에 접속해서 repository 생성
=>docker hub에서 access token 생성
=>폴더에 .github/workflows 폴더 생성후 docker.yml파일 생성
name: django docker
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: apiserver
run: |
docker build -t $REPO .
docker tag %REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
=>Git 에 Repository를 생성하고 환경 변수 등록
=>도커 허브에 이미지가 업로드 되었는지 확인
4)EC2 인스턴스에서 배포된 이미지를 실행
=>EC2 (linux)에 docker 다운받기
Docker 설치
패키지 업데이트: sudo apt-get update
패키지 설치: sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Docker의 공식 GPG키를 추가
경고 발생: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
경고 발생하지 않음: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
시스템 패키지 업데이트: sudo apt-get update
Docker 설치: sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker 버전 확인: sudo docker version
Docker 서비스 등록 및 실행
sudo systemctl enable docker
sudo systemctl start docker
=>이미지 다운로드
'Study > AWS' 카테고리의 다른 글
client 배포 + CI/CD (React 파일 S3에 업로드) (0) | 2024.05.24 |
---|---|
AWS Container Service(ECR,ECS) (0) | 2024.05.03 |
AWS(7)-S3 에 Spring Boot 프로젝트 업로드 (0) | 2024.04.18 |
AWS(6)-S3에 파일 upload(Django, Spring Boot, react) (2) | 2024.04.17 |
AWS(5) - DataBase (0) | 2024.04.16 |