AWS 설정
IAM User 등록 - group 설정 - MFA 적용
VPC 설정
- subnet 2개 생성
- 인터넷 게이트웨이 생성 (서브넷 2개 연결)
EC2 생성 및 설정
- t2.medium (linux, cpu 4, 메모리8g 인스턴스, gp2 용량) 인스턴스 생성
- 보안 그룹 설정
- 탄력적 IP 주소 연결
- ec2 인스턴스 원격 접속
- ssh-keygen -t ed25519 -b 4096 으로 pub key 생성
- cat ~/.ssh/id_ed25519.pub 해서 키 복사
- github의 settings 페이지 안 deploy keys에 키 붙여넣기
EC2에 git 설치 및 레포지토리 클론
- git 설치 sudo yum install git
- git clone 우리의 레포지토리
- git pull origin
EC2에 docker-compose 설치
- docker 설치 sudo amazon-linux-extras install docker -y
- docker 시스템 허가 sudo systemctl enable docker.service
- docker 시스템 실행 sudo systemctl start docker.service
- ec2-user가 docker를 실행할 수 있도록 권한 설정 sudo usermod -aG docker ec2-user
- docker-compose 시스템 설치 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- docker-compose 권한 설정 sudo chmod +x /usr/local/bin/docker-compose
EC2에 docker 설치 다른 방법
# 1. 루트 사용자 전환
sudo su
# 2. Docker를 설치하기 위해 필요한 패키지들을 설치
yum install -y docker
# 3. Docker 서비스 시작
sudo service docker start
# 4. Docker 명령어를 sudo 없이 사용할 수 있도록 docker 그룹에 현재 사용자 추가
sudo usermod -a -G docker ec2-user
# 5. 변경사항 적용을 위해 인스턴스 재부팅
sudo reboot
# 6. docker가 올바르게 설치되었는지 확인
docker info
docker-compose 실행
- cp .env.sample .env
- vi .env 혹은 nano .env로 수정
- cat .env 확인
- docker-compose -f docker-compose-deploy.yml up -d (데몬 옵션 백그라운드에서 실행)
- docker-compose -f docker-compose-deploy.yml —run <서비스명> sh -c “python manage.py 명령”
- docker-compose -f docker-compose-deploy.yml logs 로 실행 기록 확인
NginX 설정
location /api {
...
}
location /.well-known/acme-challenge {
root /var/lib/letsencrypt/;
}
location / {
...
}
도메인 구매 후 ssl 인증서 발급
docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot \
certonly \
--webroot \
-w /var/lib/letsencrypt \
-d 도메인명 \
--agree-tos
domain 설정 router 53 설정
Nginx ssl 설정
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=60m use_temp_path=off;
upstream nextjs_upstream {
server nextjs:3000;
}
upstream backend_upstream {
server backend:8000;
}
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 도메인명;
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
add_header Access-Control-Allow-Credentials "true";
add_header Access-Control-Max-Age 7200;
# SSL 인증서와 개인 키 파일 경로 설정
ssl_certificate /etc/letsencrypt/archive/도메인명/fullchain1.pem;
ssl_certificate_key /etc/letsencrypt/archive/도메인명/privkey1.pem;
}
.env 수정
docker-compose up으로 백엔드, 프론트엔드 실행
'Experience > - KT AIVLE School' 카테고리의 다른 글
KT AIVLE School 빅프로젝트 - 웹캠 녹화 구현 (0) | 2023.07.19 |
---|---|
KT AIVLE School 빅프로젝트 - 웹캠 영상 녹화 시 에러 경험 (0) | 2023.07.19 |
KT AIVLE School 빅프로젝트 - 프론트에서 S3의 GET요청을 대기하는 로직 (0) | 2023.07.19 |
KT AIVLE School 빅프로젝트 - 프로필 수정 로직에 대한 고민 (0) | 2023.07.19 |
KT AIVLE School 빅프로젝트 - 개발 환경 설정 (0) | 2023.07.19 |
KT AIVLE School 빅프로젝트 - Django와 React 소통하기 (0) | 2023.07.19 |
댓글