Blog

Blog

블로그사진

개요

Elixir Umbrella로 프로젝트를 만들어 Core, Domain, JSON API, Web Application을 구분하여 구현했습니다.

  • core : Phoenix PubSub과 JWT와 같은 application 전역에 사용될 모듈이 있습니다.
  • domain : Ecto를 사용한 스키마와 context 모듈이 있습니다.
  • api : Phoenix를 사용하여 REST API를 구현한 JSON API입니다. ( 배포에는 포함되어 있지 않습니다. )
  • web : Phoenix Live View를 사용하여 구현된 server side web application입니다.

blog는 하나의 엔드포인트로 Single page application으로 구현했습니다.

Elixir Ecto를 사용하여 Elixir로 작성된 Application으로 PostgreSQL를 제어 접근하도록 구현했습니다.

배포

Blog 배포된 사이트입니다.

Google Cloud Flatform

Docker를 사용하여 Blog umbrella project아래의 Application을 모두 하나의 이미지로 만들어지도록 Dockerfile을 작성하였고

Google CloudBuild에 트리거를 만들어 github에 main 소스코드가 업데이트 될 시 도커 이미지가 자동으로 빌드가 되도록 설정하였습니다.

VPC 네트워크를 만들고 방화벽을 설정하여서 Google Cloud Flatform 상의 서비스들이 내부망으로 접근 가능하게끔 하였고

인스턴스 템플릿을 작성한다음 해당 템플릿으로 Web application 인스턴스를 생성했습니다. 그리고 Cloud SQL로 PostgreSQL 데이터 베이스 인스턴스를 생성하여 내부망을 통해 연동했습니다.

이후에 외부 IP주소를 예약하고 로드 밸런서를 통해서만 application에 접근할 수 있도록 설정하여 배포를 마쳤습니다.

마지막으로 Cloud flare를 사용하여 DNS를 설정해주었습니다.

Fly.io

위의 Google Cloud Flatform 마찬가지로 Docker를 사용하여 Blog umbrella project아래의 Application을 모두 하나의 이미지로 만들어지도록 Dockerfile을 작성하였고

fly launch 명령어를 사용하여 배포에 사용될 fly.toml 파일을 만들었고 web application 인스턴스와 PostgreSQL 데이터베이스 인스턴스를 생성하였고

fly deploy 명령어를 통해 배포를 진행했습니다.

이후에 Cloud Flare에서 구매한 도메인을 fly.io에 등록하여 인증서를 생성하여 커스텀 DNS를 설정해주었습니다.