Docker logo (source: https://www.docker.com/company/newsroom/media-resources/)

환경구성

개발 환경은 하기와 같이 진행하기로 했었습니다.

  • 서버 구성 방식
    • Docker container 사용 - Backend, Frontend, DB, Server(Nginx)를 각각의 컨테이너로 구동
    • Nginx를 프록시 방식으로 구동 (Nginx 컨테이너만 외부에 노출되도록 진행)
  • 레포 구성 방식
    • 메인 레포에서 서브모듈로 백엔드, 프론트엔드, env, docker 파일 레포 연결
    • env, docker파일 레포의 경우 private 레포로 생성해 외부에 코드 유출되지 않도록 진행

 

깃헙

협업을 위해 GitHup에 organization을 하나 생성하고, 팀원을 member로 등록했습니다.

그리고 하기와 같이 총 다섯 개의 레포지토리(메인 레포 1개, 서브모듈 4개)를 생성했습니다.

# 레포지토리 역할 공개 여부
1 matcha 메인 레포지토리
- Makefile로 Docker 실행 및 Container 빌드 자동화
public
2 frontend FE 소스코드 public
3 backend BE 소스코드 public
4 service docker compose, docker file 및 DB용 private
5 env 환경변수 저장용 private

 

서브모듈 세팅은 팀원이 한 거여서 정확히 어떻게 세팅하는 지는 모르지만,

사용해보니 환경변수 등 외부에 공개하고 싶지 않은 내용을 내부적으로 공유하기에 편하더라구요.

언젠가를 위해 배워둬야겠다고 생각했습니다.

 

메인 레포에서 make를 실행하면 하기와 같은 내용이 순차적으로 진행되도록 Makefile을 구성했습니다.

(메인 레포인 matcha 레포지토리에는 사실상 Makefile만 있는 셈입니다.)

  1. 각각의 서브모듈 레포 깃 풀
  2. service 레포에 database 저장용 폴더 생성
  3. env 레포의 환경변수 파일을 service 레포로 복사 (service 레포에는 .gitignore로 .env가 등록돼있어 올라가지 않습니다)
  4. (도커가 실행중이지 않은 경우) 도커 실행
  5. service 레포에 있는 docker-compose 파일 기반으로 빌드

 

도커 컨테이너 구성

서버(nginx), 프론트, 백, DB 총 4개의 컨테이너가 필요합니다.

각각의 컨테이너 빌드를 위해 Dockerfile을 작성하고, 컨테이너를 한 번에 빌드하기 위해 docker-compose 파일을 만들었습니다.

42과제 중 Inception에서 배웠던 도커 구성법을 되짚어보면서 volume, network까지 세팅해줍니다.

 

하기는 backend의 Dockerfile입니다.

python3, flask, uwsgi를 다운로드하고 uwsgi를 백그라운드로 실행하는 이미지입니다.

FROM	python:3.12

WORKDIR /usr/app/srcs

RUN     apt-get update \
        && apt-get -y upgrade \
        && apt-get -y install python3-pip \
        && pip install flask \
        && pip install uwsgi \
        && ln -s /usr/local/bin/uwsgi /usr/bin/uwsgi

CMD [ "uwsgi", "uwsgi.ini" ]

 

 

프론트 컨테이너는 팀원이 Dockerfile을 작성할 예정이고, DB 변경 이슈가 있어 (PostgreSQL 대신 MongoDB를 사용해보려고 합니다) 아직 docker-compose 파일은 완성본이 나오지 않았습니다만, 업데이트가 되면 이 글에도 업로드할 수 있도록 하겠습니다.

 

+ Recent posts