1. 백엔드 서버 설정 및 배포
1.1 백엔드 서버 설정
먼저 AWS EC2에 배포할 백엔드 서버를 구성합니다.
1. SSH를 통해 EC2 인스턴스에 접속:
ssh -i /path/to/your-key.pem ec2-user@123.123.123.123
/path/to/your-key.pem 부분은 PEM 키 파일의 경로로 바꿔주세요.
2. 필요한 패키지 설치:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm install node
nvm install 16
node -v
npm -v
sudo yum update -y
sudo yum install git -y
Node.js와 Git을 설치합니다.
3. GitHub에서 백엔드 프로젝트 클론:
git clone https://github.com/blahblah/blahblah-backend.git
프로젝트를 클론한 후 해당 디렉토리로 이동합니다.
cd blahblah-backend
4. 필요한 npm 패키지 설치:
sudo chown -R ec2-user:ec2-user /blahblah-backend
npm install
5. 백엔드 환경 변수 설정: .env 파일을 만들어 아래와 같이 환경 변수를 설정합니다.이 정보는 데이터베이스 연결 및 JWT 토큰 발급에 사용됩니다.
touch .env
nano .env
# 서버 설정
PORT=5000
# CORS 설정
FRONTEND_URL=https://www.blahblah.com # 실제 프론트엔드 URL로 변경
# 이메일 설정
EMAIL_USER=blah.blah@gmail.com
EMAIL_PASS=blah
EMAIL_RECEIVER=blah@blah.com
# 데이터베이스 설정
DB_HOST=hostname
DB_USER=admin
DB_PASSWORD=blah
DB_NAME=blah
# JWT Secret Key
JWT_SECRET=yourGeneratedSecretKey
echo ".env" >> .gitignore
6. 백엔드 서버 실행:
node src/app.js
백엔드 서버가 정상적으로 실행되는지 확인합니다.
1.2 백엔드 서버를 항상 실행되도록 설정
일반적으로 PM2를 사용해 백엔드 서버를 관리합니다.
PM2 설치:
sudo npm install -g pm2
PM2를 통해 백엔드 서버 실행:
pm2 start src/app.js --name blahblah-backend
이렇게 하면 백엔드 서버가 항상 실행되며, EC2가 재부팅되어도 계속 실행됩니다.
PM2를 시스템 시작 시 자동 실행하도록 설정:
pm2 startup
pm2 status
위 명령어를 실행했을 때 출력된 내용을 다음과 같이 실행하여 시스템 시작 시 PM2를 자동으로 실행하도록 설정:
sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v16.20.2/bin /home/ec2-user/.nvm/versions/node/v16.20.2/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user
이 과정에서 다음 파일이 생성되고 설정되었음.
/etc/systemd/system/pm2-ec2-user.service
pm2 save
상태 저장
pm2 status
다시 확인
위 명령어를 실행했을 때 출력된 내용을 다음과 같이 실행하여 시스템 시작 시 PM2를 자동으로 실행하도록 설정:
2. Nginx로 프록시 설정
AWS EC2 인스턴스에 Nginx를 설치하고 도메인을 설정하여 트래픽을 프록시로 전달합니다.
2.1 Nginx 설치 및 설정
Nginx 설치:
sudo yum install nginx -y
Nginx 설정 파일 편집:
sudo vi /etc/nginx/nginx.conf
기본 설정 파일을 아래와 같이 수정합니다.server {
listen 80;
server_name www.blahblah.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
이 설정은 www. blahblah .com 도메인으로 들어오는 요청을 백엔드 서버(localhost:5000)로 전달합니다.
Nginx 시작 및 재시작:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl restart nginx
3. 도메인 연결
AWS S3와 Route 53을 사용하여 도메인 연결을 하는 자세한 단계
3.1 도메인 구매
- 가비아와 같은 도메인 업체에서 blahblah.com이라는 도메인을 구매합니다.
3.2 S3 버킷 생성 및 정적 웹 호스팅 설정
- S3 버킷 생성:
- AWS S3 콘솔에서 도메인 이름과 정확히 일치하는 버킷을 생성합니다: blahblah.com.
- 주의: 버킷 이름은 반드시 도메인 이름과 정확하게 일치해야 합니다.
- 정적 웹 호스팅 설정:
- 생성한 버킷의 속성(Properties) 탭에서 정적 웹 사이트 호스팅(Static website hosting)을 활성화합니다.
- 인덱스 문서(Index document)에 index.html을 입력합니다.
- 이때 제공되는 정적 웹 호스팅 엔드포인트 주소를 기억해 둡니다.
3.3 Route 53에서 호스팅 영역 생성 및 NS 레코드 설정
- Route 53에서 호스팅 영역 생성:
- Route 53 콘솔에서 호스팅 영역(Hosted zones)으로 이동하여 blahblah.com에 대한 호스팅 영역을 생성합니다.
- 네임서버(NS) 값 설정:
- 호스팅 영역 생성 후 나타나는 NS(네임서버) 값을 복사합니다.
- 가비아와 같은 도메인 업체의 네임서버 설정 페이지로 이동하여 해당 NS 레코드 값을 붙여넣습니다.
3.4 Route 53에서 레코드 설정
- Alias 레코드 연결:
- Route 53에서 호스팅 영역의 레코드 섹션으로 이동하여 A 레코드(Alias)를 생성합니다.
- 도메인 이름에는 blahblah.com을 입력하고, Alias 대상으로 생성한 S3 버킷의 정적 웹 호스팅 엔드포인트를 선택합니다.
- CNAME 레코드 연결:
- CNAME 레코드를 생성하여 www.blahblah.com을 blahblah.com으로 연결합니다.
- 이 설정으로 www 버전과 non-www 버전 모두를 도메인에 연결할 수 있습니다.
3.5 최종 레코드 확인
- 이 과정을 완료하면 Route 53에는 총 4개의 레코드가 존재해야 합니다:
- A 레코드(Alias): blahblah.com → S3 정적 웹 호스팅 엔드포인트
- NS 레코드: 가비아에 입력한 네임서버 값
- SOA 레코드: 기본적으로 Route 53에서 생성하는 레코드
1. AWS Certificate Manager(ACM)에서 SSL 인증서 발급
- ACM 콘솔 접속
- AWS Management Console에 로그인하고 "Certificate Manager" 서비스로 이동합니다.
- Cloudfront를 사용할 것이기 때문에 리전을 반드시 ㅁ
- 인증서 요청
- "Request a certificate"(인증서요청) 버튼을 클릭합니다.
- "Request a public certificate"(퍼블릭인증서요청) 선택 후 "Next" 클릭
- 도메인 이름 입력
- 도메인 이름에 blahblah.com과 www. blahblah .com을 모두 추가합니다.
- 이렇게 하면 두 도메인 모두에 대해 HTTPS를 적용할 수 있습니다.
- 인증 방법 선택
- "DNS validation"을 선택하고 "Next"를 클릭합니다.
- DNS 검증은 Route 53을 통해 자동으로 검증할 수 있습니다.
- "DNS validation"을 선택하고 "Next"를 클릭합니다.
- 검토 및 요청 제출
- 입력 내용을 확인하고 "Request" 버튼을 클릭합니다.
- DNS 검증 완료
- ACM에서 제공하는 CNAME 레코드 정보를 Route 53에 추가합니다.
- 상단의 추가작업 필요에서 next를 눌러 전부 ROUTE53에 있는 도메인의 레코드로 등록합니다(www.blahblah.com,blahblah.com 두개)
- ACM에서 검증이 완료되면 SSL 인증서가 활성화됩니다.
- ACM에서 제공하는 CNAME 레코드 정보를 Route 53에 추가합니다.
2. CloudFront 배포 생성
- CloudFront 콘솔 접속
- AWS Management Console에서 "CloudFront" 서비스로 이동합니다.
- 배포 생성
- "Create Distribution"을 클릭하고 "Web"을 선택합니다.
- CloudFront 설정
- Origin Domain Name: S3 버킷의 엔드포인트 URL을 입력합니다. (blahblah.com.s3-website.ap-northeast-2.amazonaws.com)
- Alternative domain name (CNAMEs) - optional : blahblah.com, www .blahblah.com 등록
- Origin path: 비워둡니다. (필요한 경우, 특정 경로에 대해 CloudFront를 통해 콘텐츠를 제공하고 싶다면 입력하지만 일반적으로 비워둡니다.)
- 사용자 정의 헤더 추가 (Optional) :일반적으로 이 부분은 특별한 경우가 아니면 비워둡니다. 필요한 경우에만 사용자 정의 헤더를 추가합니다.
- Enable Origin Shield : Origin Shield는 선택 사항입니다. 이 기능을 활성화하면 CloudFront의 캐싱 효율이 향상되어 원본 서버의 부하를 줄일 수 있습니다. 사용하지 않을 경우 "아니요"로 두시면 됩니다.
- Enable기본캐시동작 : 전부 기본값으로 설정
- 웹 애플리케이션 방화벽(WAF) : XSS, SQL 인젝션과 같은 흔한 공격으로부터 웹사이트를 보호하고, IP 차단 및 필터링 규칙을 적용할 수 있습니다. 월 기본요금 $8 + 100만건당 0.6$씩 추가됨
-
- Viewer Protocol Policy
- "Redirect HTTP to HTTPS" 선택 (HTTP로 접속하는 사용자를 HTTPS로 리디렉션)
- 가격 분류 (Price Class) :
- 북미 및 유럽: 데이터 전송량당 약 $0.085~$0.12/GB
아시아 및 오세아니아: 데이터 전송량당 약 $0.14~$0.20/GB
남아메리카: 데이터 전송량당 약 $0.25~$0.30/GB
- 북미 및 유럽: 데이터 전송량당 약 $0.085~$0.12/GB
- Custom SSL Certificate 설정
- "Alternate Domain Names (CNAMEs)"에 blahblah .com과 www.blahblah.com을 추가합니다.
- "SSL Certificate"에서 이전에 발급받은 ACM 인증서를 선택합니다. > 권장설정을 따릅니다.
- 기타 설정 확인 후 배포 생성
- 표준 로깅은
- 모든 설정을 검토한 후 "Create Distribution"을 클릭합니다.
- CloudFront 배포가 생성되고 배포 완료까지 시간이 다소 걸릴 수 있습니다.
- Cloud Front 도메인 ROUTE53의 blahblah.com CNAME 레코드 추가 확인
: www.blahblah.com → asdfasdg.cloudfront.net
'개인서버' 카테고리의 다른 글
AWS S3와 EC2 설명 및 S3연결 방법 (0) | 2024.09.25 |
---|---|
프로젝트 구조 정리 (2) | 2024.09.24 |
Node.js/Express + MySQL 백엔드 설정 및 AWS RDS 연동 가이드 (0) | 2024.09.19 |
전체 웹사이트 구축 프로세스 정리 (0) | 2024.09.19 |