Skip to content

Latest commit

 

History

History

backend

INOBUS Backend

폴더 및 파일 구조

.
├── docker                    # Docker 관련 파일들을 모아둔 폴더
├── models                    # API에 사용되는 모델들을 정의한 폴더
├── requirements              # 필요한 패키지들을 정의한 파일들을 모아둔 폴더
├── routes                    # API router 들을 정의한 폴더
├── utils                     # util 모음 폴더
├── .env.example              # 환경변수 예시 파일
├── config.py                 # 설정을 관리하는 폴더
├── database.py               # DB 연결 객체를 제공해주는 파일
├── docker-compose.dev.yaml   # 개발용 docker-compose 파일
├── docker-compose.prod.yaml  # 배포용 docker-compose 파일
├── docs.html                 # 호스팅용 API 문서 파일
├── gunicorn_conf.py          # 배포 시 사용하는 gunicorn 설정을 정의하는 파일
├── main_consumer.py          # IOT 디바이스와 DB를 연결해주는 Consumer 진입점
├── main.py                   # 애플리케이션 진입점
└── prestart.sh               # docker를 이용해서 서버 실행시 처음 실행하는 스크립트

사전준비

배포 필수 요구사항

실행

개발용 서버 실행하기

  • 파일 변경을 감지하여 자동으로 재실행해주는 기능 포함
  • 서버 URL: http://localhost
  • Flags
    • -d: daemon 모드로 실행
    • --build: docker 이미지 빌드 후 실행
docker context use default
docker compose -f docker-compose.dev.yaml --env-file=.env.example [-d] up [--build]

배포용 환경으로 개발용 서버 실행하기

  • Python WSGI HTTP Server gunicorn을 사용하여 배포
  • Awsgi worker인 uvicorn worker를 사용
  • Flags
    • -d: daemon 모드로 실행
    • --build: docker 이미지 빌드 후 실행
  1. ecs local context 생성 (ECS 환경을 로컬에서 시뮬레이션할 수 있게 도와줌)

    docker context create ecs --local-simulation ecsLocal
    docker context use ecsLocal
  2. docker-compose.prod.yaml.env.example을 참고하여 .env 파일 작성

  3. 아래 명령어로 서버를 실행

    docker compose -f docker-compose.prod.yaml --env-file=.env [-d] up [--build]

컨테이너 중지 및 제거하기

  • 현재 실행중인 서비스 컨테이너들 중지

    docker compose -f <compose file name> stop
  • 현재 실행중이지 않은 서비스 컨테이너들 제거

    docker compose -f <compose file name> rm
  • 정의된 서비스들의 컨테이너 중지 및 제거

    docker compose -f <compose file name> down

배포

  1. docker ecs context 생성 및 AWS Profile 입력

    docker context create ecs contextName
    docker context use contextName
  2. 컨테이너 레지스트리 ECR 로그인

    aws ecr get-login-password --region us-west-2 |
     docker login --username AWS --password-stdin 573620237252.dkr.ecr.us-west-2.amazonaws.com/inobus
  3. .env file 작성

    cp .env.example .env
  4. Docker image build

    docker context use default
    docker compose -f docker-compose.prod.yaml --env-file .env build
  5. Docker image를 ECR로 push

    docker context use default
    docker compose -f docker-compose.prod.yaml --env-file .env push
  6. Docker cli를 통해 AWS CloudFormation으로 배포

    docker context use contextName
    docker compose -f docker-compose.prod.yaml --env-file .env up

개발

API 문서 링크

Git hook 설정

  • lefthook 설치
  • lefthook-local.yml 파일 작성
    pre-push:
      exclude_tags:
        - app
        - iot
    pre-commit:
      exclude_tags:
        - app
        - iot