v1.5.1: AWS와 Https 인증

김의석 ·2024년 3월 31일

Hello! Poko Ver.1

목록 보기
8/20

인스턴스 생성하기

  • 사용할 운영체제 선택
    • Linux-ubuntu

  • 현재 Product 환경과 동일한 크기를 선택 함.

  • 개발 전용으로 사용할 서버임으로 dev를 추가 작성.

가상 서버로 프로젝트 옮기기

  • git clone을 위해 주소 복사

  • github dir 생성 후 git clone

가상 서버에 Docker 설치

sudo apt-get update
sudo apt-get update remove docker docker-engine docker.io
  • apt 업데이트
  • 업데이트 후 남아있는 도커 관련 내용 삭제
sudo apt install docker.io
  • docker 설치

  • 설치 후 다음 명령어로 우분투가 시작 될 때 자동으로 docker 실행 되도록 함.
  • aws 인스턴에서 도커 설치는 아무 폴더에 해도 괜찮다.
    프로젝트폴더에 도커를 설치하는 것이 아니라 시스템에 직접 설치 하기 떄문이다.
sudo apt install docker-compose
  • docker-compose 설치

도커로 서비스 시작하기

고정 IP 만들기

  • 고정 ip를 생성할 인스턴스와 리소스 이름 작성

  • 인스턴스의 고정 IP 생성 완료

배포(개발)용 환경설정 파일

  • 현재 개발 서버에는 .env.dev가 없음
  • 터미널 명령어를 통해 .env.dev .env.dev.db를 생성
  • ls -A 는 숨겨진 파일까지 조회 가능하다.
  • .env.dev .env.dev.db 작성

컨테이너 실행하기

sudo docker-compose up -d --build
  • 명령어 정리
    • docker-compsoe up : docker-compose.yml 파일에 정의 된 서비스를 실행하는 명령어. 주로 여러개의 컨테이너를 한번에 생성할 때 사용.
    • -d : detach 옵션은 컨테이너를 백그라운드에서 실행하도록 함. 컨테이너는 전면에서 실행되지 않고 백그라운드에서 실행 됨
    • --build : docker-compose up 명령어를 실행할 때, docker-compose.yml 파일에 정의된 서비스의 Dockerfile을 사용하여 새로운 Docker 이미지를 빌드하도록 지시합니다. 이미지가 없거나 변경사항이 발생한 경우에만 빌드가 수행됩니다.
      • Dokerfile : Dockerfile은 Docker 이미지를 빌드하는 데 사용되는 스크립트입니다. 이 파일에는 Docker 이미지를 구성하는 명령어들이 순차적으로 작성되어 있습니다.
      • docker-compose.yml
        : docker-compose.yml은 여러 컨테이너와 설정을 정의하여 Docker Compose를 사용하여 멀티 컨테이너 애플리케이션을 관리하는 데 사용되는 파일입니다.
sudo docker-compose exec web python3 manage.py makemigrations

sudo docker-compose exec web python3 manage.py makemigrate
  • 새로운 데이터베이스를 만들었으므로 migration을 수행한다.

  • 개발서버의 nginx conf 가 수정 되어있지 않아 발생하는 오류이다.

  • 현재 nginx.conf에 작성되어 있는 내용. product의 nginx.conf를 그대로 가지고온터라 개발서버의 고정 ip로는 접속이 불가하다.
    고정 ip에 맞춰 수정하기는 조금 헷갈려서 개발서버 도메인을 구입하고 수정하기로 했다.
  • 개발 서버도 도메인을 구입하는가?
    • 잘 모르겠으면 GPT에게
    • 일단은 구매하기로 함. 단점은 비용과 관리, 보안에 관련된 내용이었음.

개발서버의 도메인을 구입하자

  • route53에서 다음과 같이 도메인을 조회 후 구입.

  • 구입완료

  • 호스팅 영역 생성에 접속 후 라우팅 정책 선택을 위해 레코드 생성을 클릭.

  • 표시 된 곳에 알맞은 내용을 작성하고 레코드 생성 클릭
    • 동일한 방법으로 www.poko-dev.com과 poko-dev.com 두개를 생성하였다.
    • 생성 완료!

.env.dev 와 docker-compose.yml과 nginx.conf 파일 수정

  • 개발 서버 환경에 맞춰 수정한다.(doit django 책 참고)

  • 수정 후 반드시 .gitignore에 추가

  • docker-compose.yml 수정 중 오타 발견.

    • ./data/certbot/www:/var/www/certbot 로 수정 함.
    • product에 적용된 경로인데 추후 확인 필요.

HTTPS 인증서 발급 받기

curl -L https://raw.githubusercontent.com/wmnnd/nginx-certbot/master/init-letsencrypt.sh > init-letsencrypt.sh
  • letsencrypt 인증서 가져오기

  • 인증서 내용 수정
    • domains
    • email
    • rsa는 절대 건들지 말 것 수정 시 nginx.conf 에서 아래 내용을 인식하지 못함
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

  • docker-compose.yml 443 포트를 열었음으로 인스턴스의 네트워킹에서 https 443 규칙을 생성한다.
sudo chmod +x letsencrypt.sh
sudo ./letsencrypt.sh
  • 실행 권한 부여 후 스크립트 실행하면 문제가 없는 경우 인증 완료.

stageing=1과 staging=0

Certbot 및 HTTPS 관련 문제

문제

HTTPS 인증서가 제대로 적용되지 않음

원인

Certbot이 발급한 인증서가 Nginx에 제대로 적용되지 않거나, Certbot이 스테이징 모드에서 실행되어 실제 인증서 대신 테스트용 인증서가 발급됨.

해결 방법:

  1. Certbot이 발급한 인증서 파일들이 올바르게 위치해 있는지 확인.
  2. Nginx 설정 파일(/etc/letsencrypt/live/poko-dev.com/)에서 인증서 파일 경로를 올바르게 설정.
  3. staging=1이 설정된 상태에서 인증서를 발급했기 때문에 실제 인증서를 발급받기 위해 staging=0으로 설정하고 Certbot을 다시 실행.
  4. Certbot 컨테이너와 Nginx 컨테이너가 제대로 상호작용하는지 확인.
  5. Certbot과 Nginx 컨테이너에서 로그를 확인해 문제의 원인을 파악하고 수정.
profile
널리 이롭게

0개의 댓글