Intro::
AWS에서 배포한 내용 알짜배기만 정리해둔 정리본입니다.
기본적으로 프리티어를 바탕으로 정리해두었습니다.
VPC 생성 및 VPC Peering
VPC Peering을 위해서는 VPC의 CIDR이 서로 겹치면 안되기 때문에 인스턴스를 생성하기 전에 서로 다른 VPC CIDR로 구성을 해주어야 한다.
간략 구성
1.
VPC 생성
2.
서브넷 생성 및 VPC 연결
3.
인터넷 게이트웨이 생성 및 VPC 연결
4.
라우팅 테이블 인터넷 게이트 웨이 연결
5.
인스턴스 생성시 해당 VPC 사용
6.
서로 다른 VPC 끼리 Peering을 통해 통신
EC2 설정
•
amazon linux 2 사용
ssh 접속
chmod 600 newshabit.pem
ssh -i newshabit.pem ec2-user@{퍼블릭 IPv4 주소}
# 업로드
scp -i [pem파일경로] [업로드할 파일 이름] [ec2-user계정명]@[ec2 instance의 public DNS]:~/[경로]
# 다운로드
scp -i [pem파일경로] [ec2-user계정명]@[ec2 instance의 public DNS]:[다운로드 받을 곳] [파일 경로]
Bash
복사
초기설정
# 호스트네임 변경
sudo hostnamectl set-hostname {변경할 호스트 네임}
# 시간대 설정
sudo timedatectl set-timezone Asia/Seoul
timedatectl# 시간 확인
Bash
복사
도커 컨테이너 KST 적용
volumes:
- /usr/share/zoneinfo/Asia/Seoul:/etc/localtime:ro
Docker
복사
mysql 설치
# Amazon Linux2 환경
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sudo yum install mysql-community-server
# 뭔가 컴플릭트 뭐시기 에러가 난다면...
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
Bash
복사
docker 및 docker-compose 설치
sudo yum update -y
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y
sudo amazon-linux-extras install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
newgrp docker
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
Bash
복사
sudo chmod +x /usr/local/bin/docker-compose
RDS 설정
EC2 에서 RDS 접속
mysql -h {RDS 엔드 포인트} -u {user} -p
Bash
복사
mysql 유저 권한 부여
# 유저 생성
create user userid@localhost identified by '비밀번호';
create user 'userid'@'%' identified by '비밀번호';// '%' 의 의미는 외부에서의 접근을 허용
create user 'crawl_user'@'%' identified by 'crawl1234';
# 권한 부여
GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';// 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다
GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';
GRANT ALL privileges ON DB명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';
GRANT ALL privileges ON news_habit.* TO crawl_user
SQL
복사
CloudFront + ACM + Route 53 을 통한 https 구성
도메인이 제대로 실행이 안되는것 같다면??
도메인의 네임서버와 호스팅에서의 레코드중 NS의 라우팅 값이 다르면 안된다… 주의하자
Route 53
•
오리진 도메인: CloudFront가 콘텐츠를 검색할 때 접근하는 원본의 위치를 나타냅니다. 여기서는 EC2 인스턴스의 퍼블릭 DNS 이름(예: ec2-xx-xx-xx-xx.compute-1.amazonaws.com)이 오리진 도메인이 됩니다. 이 도메인은 CloudFront가 콘텐츠를 가져오기 위해 요청을 보내는 주소입니다.
•
대체 도메인(CNAME): 사용자가 CloudFront 배포에 접근할 때 사용할 수 있는 사용자 정의 도메인 이름입니다. 예를 들어, 사용자가 소유한 도메인 이름(www.yourdomain.com)을 CloudFront 배포에 연결하려면, 이 도메인을 대체 도메인으로 설정합니다. 이렇게 설정하면 사용자는 CloudFront가 제공하는 복잡한 도메인 이름(d1234.cloudfront.net) 대신, 자신의 도메인을 통해 콘텐츠에 접근할 수 있습니다.
CloudFront를 사용하여 EC2 인스턴스에서 호스팅되는 웹사이트나 애플리케이션에 접근할 때, 사용자는 www.yourdomain.com 같은 사용자 정의 도메인을 사용하여 콘텐츠에 접근하게 됩니다. 이 도메인은 CloudFront 배포 설정에서 지정한 대체 도메인(CNAME)을 통해 설정되며, CloudFront는 이 요청을 EC2 인스턴스로 라우팅하여 콘텐츠를 검색하고 사용자에게 제공합니다.
이 구성을 통해, 사용자는 AWS의 글로벌 콘텐츠 전송 네트워크의 이점을 활용하면서도 자신의 도메인을 사용하여 브랜드 일관성을 유지할 수 있습니다. CloudFront는 콘텐츠를 캐싱하여 전 세계 어디서든 빠른 콘텐츠 로딩 속도를 제공할 뿐만 아니라, HTTPS를 통한 보안 연결을 쉽게 구현할 수 있게 해줍니다.
쿼리 파라미터 사라지는 현상
클라우드 프론트의 동작에서 캐시정책중 모든 쿼리를 허용하는 정책을 선택해야한다.
하위 도메인을 설정하는 경우
•
route53 에서 하위 도메인에 대한 레코드를 생성해주면된다.
◦
하위도메인 이 메인 도메인으로 라우팅되도록 레코드 작성
◦
위의 구성에서는 cloudfront로 라우팅 되도록 설정해둠
•
acm에서도 인증서를 생성할때 메인 도메인과 하위도메인에 대해 한번에 발급받으면 된다.
nginx
harbor
생각보다 리소스를 많이 잡아먹어서 추후 배포 하던지 해야 할 듯…
1. CA 인증서 생성
먼저, 자체 CA의 개인키와 CA 인증서를 생성합니다.
# CA 개인키 생성 (4096비트)
openssl genrsa -out ca.key 4096
# CA 인증서 생성 (10년 유효, 조직 정보를 본인 환경에 맞게 수정)
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=KR/ST=Seoul/L=Seoul/O=newshabit/OU=IT/CN=NewshabitRootCA" \
-key ca.key \
-out ca.crt
Shell
복사
2. Harbor 서버 인증서 생성
2.1. Harbor용 개인키 생성
openssl genrsa -out harbor.newshabit.org.key 4096
Shell
복사
2.2. 인증서 서명 요청(CSR) 생성
openssl req -sha512 -new \
-subj "/C=KR/ST=Seoul/L=Seoul/O=newshabit/OU=IT/CN=harbor.newshabit.org" \
-key harbor.newshabit.org.key \
-out harbor.newshabit.org.csr
Shell
복사
3. x509 v3 확장 파일(v3.ext) 생성
이 파일은 SAN(Subject Alternative Name) 항목을 포함하여, 인증서가 여러 도메인을 커버할 수 있도록 합니다.
예를 들어, Harbor에 접속할 때 사용될 도메인이 harbor.newshabit.org와 newshabit.org라면 다음과 같이 구성합니다.
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = harbor.newshabit.org
Shell
복사
4. Harbor 서버 인증서 서명
생성한 CSR과 v3.ext 파일을 사용해 CA로 서명하여 Harbor 인증서를 생성합니다.
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.newshabit.org.csr \
-out harbor.newshabit.org.crt
Shell
복사
5. 인증서 파일을 Harbor 및 Docker에 제공
5.1. Harbor용 인증서 복사
Harbor 설치 시, 인증서를 사용하도록 설정할 경로(예: /data/cert/)에 복사합니다.
cp harbor.newshabit.org.crt /data/cert/
cp harbor.newshabit.org.key /data/cert/
cp ca.crt /data/cert/
Shell
복사
5.2. Docker 클라이언트용 인증서 생성 및 복사
Docker는 서버 인증서(.crt 파일)를 CA 인증서로 인식하므로, 서버 인증서를 .cert 파일로 변환합니다.
openssl x509 -inform PEM -in harbor.newshabit.org.crt -out harbor.newshabit.org.cert
Shell
복사
그리고 Docker 데몬이 인증서를 인식할 수 있도록, /etc/docker/certs.d/harbor.newshabit.org/ 디렉토리에 다음 파일들을 복사합니다.
mkdir -p /etc/docker/certs.d/harbor.newshabit.org/
cp harbor.newshabit.org.cert /etc/docker/certs.d/harbor.newshabit.org:80/
cp harbor.newshabit.org.key /etc/docker/certs.d/harbor.newshabit.org:80/
cp ca.crt /etc/docker/certs.d/harbor.newshabit.org:80/
Shell
복사
만약 Nginx의 HTTPS 포트가 443이 아닌 다른 포트로 매핑되어 있다면, 해당 포트를 포함한 디렉토리(ex: /etc/docker/certs.d/harbor.newshabit.org:port/)를 사용합니다.
6. Harbor 구성 변경 및 재배포
6.1. Harbor 설치 시 HTTPS 구성
Harbor를 처음 설치하거나 HTTP에서 HTTPS로 전환하려면, harbor.yml 파일에서 HTTPS 관련 항목을 활성화합니다.
예시:
hostname: harbor.newshabit.org
# HTTPS 설정 활성화 (내부에서는 CloudFront나 ELB를 사용하여 HTTPS 처리가 가능)
https:
port: 443
certificate: /data/cert/harbor.newshabit.org.crt
private_key: /data/cert/harbor.newshabit.org.key
# HTTP 설정은 필요에 따라 주석 처리 가능
# http:
# port: 80
harbor_admin_password: Harbor12345
data_volume: /data
# 이하 나머지 설정은 이전 예제와 동일...
YAML
복사
6.2. HTTPS 적용 준비 및 Harbor 재시작
Harbor 설치 디렉토리에서 prepare 스크립트를 실행하여 nginx 구성이 변경되도록 합니다.
./prepare
Shell
복사
그리고 Harbor가 실행 중이라면, 기존 컨테이너를 중지하고 새롭게 시작합니다.
docker-compose down -v
docker-compose up -d
Shell
복사
pem 키 옮기기
# 암호화
openssl aes-256-cbc -pbkdf2 -in newshabit.pem -out newshabit.pem.enc
# 복호화
openssl aes-256-cbc -pbkdf2 -d -in newshabit.pem.enc -out newshabit.pem
Bash
복사