일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AndroidStudio
- cos pro
- 동적계획법과최단거리역추적
- Vue
- DFS
- 안드로이드스튜디오
- 코테
- Flutter
- DFS와BFS
- cos
- 동적계획법
- cos pro 1급
- Algorithm
- 안드로이드
- 코딩테스트
- 파이썬
- 개발
- Python
- 분할정복
- android
- DART
- issue
- 백준
- 알고리즘
- 코드품앗이
- codingtest
- BAEKJOON
- vuejs
- django
- C++
- Today
- Total
Development Artist
[웹 서비스 A-Z][Deployment] #15 Architecture 본문
이번 배포를 위해 먼저 아키텍처를 설계해야합니다.
가장 중요한 작업으로 볼 수 있습니다.
인프라를 구축할 때 설계를 저는 가장 중요한 부분이라고 늘 생각하는데요, 설계에 허점이 있으면 장애 발생의 가능성을 높히고 장애 발생 시 복구에도 지장을 줄 수 있기 때문입니다.
이번 배포는 설계시 기본적인 부분들만 챙겨가보도록 하겠습니다.
아키텍처입니다.
사용자는 Internet Gateway를 통해 WAS에 접근합니다.
WAS에 Vuejs의 build 결과물인 dist/ 를 배포하구요, WAS에서 사용자에게 /dist 안의 웹 페이지(index.html, etc)를 뿌려줍니다. 사용자는 웹 페이지에서 ALB->NAT Gateway를 통해 Private Subnet에 있는 Django Server로 API 요청을 합니다. Django 서버는 DB 서버와 연동하여 데이터 조작 하게 됩니다.
사전 작업을 위해 아래 리소스들을 만들어 줍니다.
- VPC
- Public Subnet 2 / Private Subnet 2
- Routing Table for Public 1 / Routing Table for Private 2
- Internet Gateway
- NAT Gateway (과금 요소)
편리하게 Console에서 만들어주겠습니다.
자, 이제 Public 서브넷에 WS 역할을 할 EC2 한개와 Private 서브넷에 Django Server 역할의 EC2, DB Server 역할의 EC2를 만들어 보겠습니다. OS는 전부 Centos 7로 세팅하려고 합니다.
그 전에, 키페어를 만들어주셔야 합니다.
EC2 - WS
- OS : Centos 7, 220825
- 크기 : t3.micro
- 서브넷 : public 1
- 퍼블릭 IP : 활성화
- 보안그룹 : jmcunst-depl-ws-sg
- ssh : 22
EC2 - Django
- OS : Centos 7, 220825
- 크기 : t3.medium
- 서브넷 : private 1
- 퍼블릭 IP : 비활성화
- 보안그룹 : jmcunst-depl-ws-django
- ssh : 22
아래와 같이 만들어 진 것을 확인할 수 있습니다.
이제 로컬에서 jmcunst-depl-ws로 접속을 해보겠습니다.
# ssh -i test_jmcunst.pem centos@[퍼블릭 IPv4 주소]
ssh -i test_jmcunst.pem centos@3.38.169.124
원활한 세팅을 위해, root 접근 허용과 패스워드 접속 허용 및 selinux를 disabled 하도록 하겠습니다.
아래 명령어들을 차례대로 입력하시면 됩니다.
# root로 사용자 변경
sudo su
# selinux off
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# root 접속 허용과 패스워드 접속 허용
sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/#PasswordAuthentication no/' /etc/ssh/sshd_config
# ssh 데몬 재시작
systemctl restart sshd
# 패스워드 변경
passwd
# 재부팅
reboot
---
# reboot 후
ssh root@3.38.169.124
# 패스워드 입력 후
# selinux disabled 확인
getenforce
그리고 pem 키를 scp로 옮겨 오도록 하겠습니다. 로컬로 돌아갑니다.
scp test_jmcunst.pem root@3.38.169.124:~
# ws 접속 후
ls
pem키를 왜 옮겨주냐면, Django와 DB는 Private 서브넷에 있기 때문에 외부에서 접속할 수 없고 같은 VPC내 Public 서브넷의 WS에서 NAT Gateway를 통해서만 접속이 가능하기 때문입니다.
따라서 WS에 pem키를 옮겨주었습니다.
먼저 Django 서버에 접속해보겠습니다.
#chmod 600 [key_pair.pem]
chmod 600 test_jmcunst.pem
# ssh -i test_jmcunst.pem centos@[프라이빗 IPv4 주소]
ssh -i test_jmcunst.pem centos@10.0.140.203
접속 후 root 접근 허용과 패스워드 접속 허용 및 selinux를 disabled 해주세요.
여기까지 기본적인 준비를 마쳤습니다.
다음 시간에는 각각의 인스턴스에 배포를 위한 디테일한 세팅을 진행해보도록 하겠습니다.
감사합니다.
Addtional
WS(Web Server)와 Django(Backend Server)를 분리한 이유가 무엇일까요?
https://webisfree.com/2020-05-07/[서버구축]-단일-서버와-데이터베이스-서버의-분리가-왜-필요할까 해당 글을 참고해보면 좋을 것 같습니다.
'Project_Personal' 카테고리의 다른 글
[웹 서비스 A-Z][Deployment] #17 Vuejs (0) | 2023.03.24 |
---|---|
[웹 서비스 A-Z][Deployment] #16 Github (0) | 2023.03.23 |
[웹 서비스 A-Z][Vuejs] #14 API (0) | 2023.03.21 |
[웹 서비스 A-Z][Vuejs] #13 Props, Emit (0) | 2023.03.20 |
[웹 서비스 A-Z][Django] #12 ORM (0) | 2023.03.17 |