본문 바로가기

Infra/[AWS]

(28)
[AWS] MongoDB EC2 직접 설치 및 관리 Docker 로 하니까. 디비는 아무래도 백업이나 등등이 귀찮다.개발용으로는 상관없지만, 실제 서비스 용도이다 보니까 리눅스 직접 설치가 좀 더 맞아보인다. 도커라는 컨테이너 개념은 좋지만, 아무래도 컨테이너가 삭제되기 쉬운 단점이 있어 좀 아쉽다  일단 직접 설치해보도록 하자 1) MongoDB 설치curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo tee /usr/share/keyrings/mongodb-server-key.ascecho "deb [signed-by=/usr/share/keyrings/mongodb-server-key.asc] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 mul..
AWS route53 + let's encrypt 도메인 https 세팅 1. Route 53 도메인 * Aws Route53 접속 > 호스팅 영역 생성하기 > 네임서버 생성* 도메인 구매처 > Route53에서 발급받은 NS레코드(네임서버) 정보 입력* Route53 A레코드 생성 (값에 ec2 ip 값 입력하기) -> (앞에 별칭 www와 빈값으로 2개해야 군말이 없음) 2.nginx 설치 sudo touch /etc/apt/sources.list.d/nginx.listecho "deb http://nginx.org/packages/ubuntu/ bionic nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.listecho "deb-src http://nginx.org/packages/ubuntu/ bionic nginx"| su..
[AWS] RDS 관련 한글 인코딩 1) 테이블을 이미 만들어 버렸을경우이때는 사실 방법이 없다. 하나씩 인코딩 설정을 해주는 쿼리를 날려야한다. ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8;  2) 테이블을 만들기 전인 경우RDS의 파라미터 그룹을 설정해주면된다.1) RDS > 파라미터 그룹 > 파라미터 그룹 생성을 한다.2) 생성한 파라미터의 기본값들을 수정해준다.* character 검색 > 아래 항목들을 UTF-8로 지정해준다. utf8 또는 utf8mb4로 해준다. 차이는 이모지 가능여부이다. * collation 검색 > 아래 값들을 utf8_general_ci로 설정한다.-collation_server-collation_connection
[AWS] Github Actions로 NextJs,EC2,Docker CI/CD 구축 github action을 통해 브랜치에 푸시가 되면 자동으로 배포가 되도록 구축해보자  1. Git hub access-token 발급Settings > Developer Setting을 통해, 아래 Classic Token을 생성하고, 잘 보관해 둔다. 2. 자동화 원하는 Repo의 secret key 연동 원하는 Repo > Setting > Secrets and variables> Actions 진입, 아까 만든 access token을 바탕으로2번째 이미지처럼 키를 생성    3. Runner 설정  New self-hosted runner 클릭 해당 하위에 나오는 명령어를 ec2에 입력 * shaSum 오류 발생시 패키지 업데이트sudo yum install perl-Digest-SHA -y ..
[AWS] Nginx + LetsEncrypt(https) + NestJs + Flutter web 개인적으로 사용하고 싶어서 만든 채팅 서비스가 있다.아키텍처에 대한 구조는 아래와 같다.  그렇게 복잡하지 않다.NestJs가 소켓처리와 MongoDb와의 통신을 통해 데이터 API 역할을 3000, 8080 포트로 나눠서 지원하고Flutter web 은 80포트로 왔을때 처리되는 static Resource로 서버에 위치에 있다. 물론, 여러개의 서버를 나눠서 두는 방법도 있지만, 이건 사용자 트래픽이 몰리는 경우 고려하도록 하자   1) nginx 세팅EC2 제일 앞단에서 Nginx 를 둔다.80,443에 대한 인증서 처리 및 리버스 프록시 설정에 대한 내용들을 다룬다 1-1) /etc/nginx/site-avavilbles/defaultserver { listen 80 default_server; ..
[Flutter + Socket] Flutter + NestJs + Socket 서비스 개발하기 채팅 관련 웹 서비스를 개발했다. 다뤄보지 않은 프레임워크를 선택해서 극단으로 몰았던게 조금 후회되지만 무튼 관련 개발 내용을 정리해서 포스팅한다. 우선 개발한 서비스의 아키텍처는 아래와 같다. 그림은 귀찮으니 대충 1. Flutter web : 사용자가 사용하는 화면이다. 2. nestJs 포트 두개 (3000,8080) 을 기반으로 채팅과 기초정보를 제공하는 백엔드 프레임워크이다. 3. mongo : 비정형디비로 RDB를 쓰려다가 채팅에 특화된 디비를 쓰기로 했다. 4. mongo express : mongo디비를 볼수있는 콘솔이다. 5. fcm : 사용자가 백그라운드, 포그라운드 일때 메시지 알림을 웹푸시로 주거나 미수신 메시지를 카운트를 증가시킨다. 아래의 로직으로 간단하게 구현했다. 더 심도있는..
[Aws] Https 인증서 세팅하기 알람을 보내야하는 기능이 있는데, http로는 사용자 요청을 얻을 수 없다. 따라서, Https 세팅한다. 1. certbot 설치 sudo snap install certbot --classic 2. 인증서 발급 sudo certbot --nginx -d {도메인} 발급이 끝나면 아래와 같은 문구로 인증서 위치를 알려준다. Certificate is saved at: /etc/letsencrypt/live/rabbithole.gotdns.ch/fullchain.pem Key is saved at: /etc/letsencrypt/live/rabbithole.gotdns.ch/privkey.pem This certificate expires on 2024-07-04. These files will be u..
[AWS] RDS too many Connection 오류 MySQL said: Too many connections 갑자기 잘 사용하던 RDS가 연결이 안됬다. 커넥션 풀에서 관리되는 커넥션에 대한 부족일 수도있고, 이미 닫힌 커넥션에 대한 유지로 인해 연결이 실패할 수도있고 미사용 커넥션이 너무 오래 살아있는 경우 일 수도 있다. 무튼 커넥션에 대한 max connection 수와 wait-timeout 에 대한 조정이 필요해 보인다. 1) 파라미터 그룹 생성 max_connections는 최소로 잡혀있지만, 이값을 300으로 변경한다. wait_timeout 도 180초로 변경한다. 이는 3분 정도이고, 이 기간동안 커넥션을 얻기 위해 대기한다. 이후 디비의 파라미터 그룹을 변경해서 재부팅해준다. 신규로 생성한 파라미터 그룹으로, 디비가 적용되고 재부팅 되..