인스턴스 생성하기


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

- 개발 전용으로 사용할 서버임으로 dev를 추가 작성.
가상 서버로 프로젝트 옮기기


- 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 실행 되도록 함.
- aws 인스턴에서 도커 설치는 아무 폴더에 해도 괜찮다.
프로젝트폴더에 도커를 설치하는 것이 아니라 시스템에 직접 설치 하기 떄문이다.
sudo apt install docker-compose
도커로 서비스 시작하기
고정 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 파일 수정
HTTPS 인증서 발급 받기
curl -L https://raw.githubusercontent.com/wmnnd/nginx-certbot/master/init-letsencrypt.sh > init-letsencrypt.sh


- 인증서 내용 수정
- 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이 스테이징 모드에서 실행되어 실제 인증서 대신 테스트용 인증서가 발급됨.
해결 방법:
- Certbot이 발급한 인증서 파일들이 올바르게 위치해 있는지 확인.
- Nginx 설정 파일(/etc/letsencrypt/live/poko-dev.com/)에서 인증서 파일 경로를 올바르게 설정.
- staging=1이 설정된 상태에서 인증서를 발급했기 때문에 실제 인증서를 발급받기 위해 staging=0으로 설정하고 Certbot을 다시 실행.
- Certbot 컨테이너와 Nginx 컨테이너가 제대로 상호작용하는지 확인.
- Certbot과 Nginx 컨테이너에서 로그를 확인해 문제의 원인을 파악하고 수정.