Django 2.2 서버 구축 및 연결 - Docker 이용해 API 서버 배포

Kwon, Hyojin·2021년 3월 1일
0

Django

목록 보기
5/9

Docker을 이용해 간단히 작업물 배포해보기

('배포' 라기 보다는) 단순하게 이미지를 만들고, 배포할 서버에서 컨테이너를 실행해보기

  1. 임의로 간단한 페이지 하나 만들고 실행해보기

    # velog/config/urls.py
    from django.http import HttpResponse
    
    # 임의의 API
    def sample(request):
        return HttpResponse('환영합니다!!')
    
    urlpatterns = [
        # ...
        path('', sample),
    ]
    # velog/
    python manage.py runserver

  2. velog/Dockerfile 파일 생성

    # velog/Dockerfile
    
    # python:3-slim 이미지 사용
    FROM        python:3-slim
    
    # 배포 서버 업데이트
    RUN         apt -y -qq update & apt -y -qq dist-upgrade && apt -y -qq autoremove
    # pip 업그레이드
    RUN         pip install --upgrade pip
    
    # /tmp 폴더에 requirements.txt 파일 복사
    COPY        ./requirements.txt /tmp
    # requirements.txt에 있는 라이브러리 설치
    RUN         pip install -r /tmp/requirements.txt
    
    # 현재 프로젝트를 /srv/velog 폴더에 복사
    COPY        . /srv/velog
    # Docker 이미지 실행시 경로
    WORKDIR     /srv/velog
    
    # Docker 컨테이너 생성시 default로 실행하는 명령어
    CMD         /bin/bash
  3. velog/.dockerignore 파일 생성해 이미지 생성시 제외할 파일들 추가 (.env 파일 반드시 추가!)

    # velog/.dockerignore
    
    .env
    .python-version
    .idea
  4. 배포 서버에서 pip를 이용해 라이브러리를 설치할 수 있도록 requirements.txt 파일 생성

    # velog/
    poetry export -f requirements.txt > requirements.txt
  5. velog/config/settings/prod.py 파일에서 ALLOWED_HOSTS 주소 변경

    # velog/config/settings/prod.py
    
    # ...
    ALLOWED_HOSTS = [
        '192.168.0.4'  # 배포할 서버의 호스트 주소
    ]
    # ...
  6. Docker 로그인

    docker login
    
    # username: raccoonhj33
    # ...
  7. Docker 이미지 생성

    # velog/
    docker build -t raccoonhj33/velog .  # Docker 이미지 생성
    docker push raccoonhj33/velog  # Docker Hub의 velog 레포에 이미지 push
  8. velog/.env 파일을 배포 서버 내 /tmp 폴더에 따로 복사

    scp .env hg@192.168.0.4:/tmp
  9. 배포 서버에 원격 접속하여 이미지 불러오기

    ssh hg@192.168.0.4  # ssh 접속
    docker pull raccoonhj33/velog  # Docker 이미지 pull
  10. (원격 접속) Docker 컨테이너 실행

    docker run --rm -d -p 80:80 --name velog raccoonhj33/velog  # Docker 컨테이너 실행
    docker cp /tmp/.env velog:/srv/velog  # /tmp/.env 파일을 Docker 컨테이너 내 /srv/velog 폴더에 복사
    docker exec -d velog python manage.py runserver --settings=config.settings.prod 0.0.0.0:80 # Docker 컨테이너에 명령어 전달
    • --rm: 컨테이너 종료시 삭제
    • -d: 데몬(백그라운드)으로 실행
    • -p 80:80: 호스트 컴퓨터 포트 80에 컨테이너 포트 80이 바인딩
    • --name velog: 컨테이너 이름을 'velog'로 지정
    • python manage.py runserver --settings=config.settings.prod 0.0.0.0:80: 외부 80 포트로 Django 서버 실행 명령어
  11. API 주소로 접속하여 동작 확인 (http://192.168.0.4:80)

  12. (원격 접속) Docker 컨테이너 종료

    docker stop velog

폴더 구조

.
├── .dockerignore
├── .env
├── .idea
├── .python-version
├── Dockerfile
├── config
│   ├── __init__.py
│   ├── __pycache__
│   ├── asgi.py
│   ├── settings
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   ├── _base.py
│   │   ├── dev.py
│   │   └── prod.py
│   ├── urls.py
│   └── wsgi
│       ├── __init__.py
│       ├── __pycache__
│       ├── dev.py
│       └── prod.py
├── manage.py
├── poetry.lock
├── pyproject.toml
└── requirements.txt
profile
파이썬 웹 백엔드 개발자

0개의 댓글