DevOps

    Cloudwatch에 nginx, spring boot에서 발생하는 log 남기기

    Cloudwatch로 로그 전송하기 nginx의 로그를 남기기 위한 configuration // vi nginx.conf http { access_log /var/log/nginx/access.log error_log /var/log/nginx/error.log ... } 도커 실행 sudo docker stop proxy && sudo docker rm proxy sudo docker build -t nextstep/reverse-proxy:0.0.2 . sudo docker run -d -p 80:80 -p 443:443 --name proxy -v /var/log/nginx:/var/log/nginx nextstep/reverse-proxy:0.0.2 EC2에 awslogs agent 설치하기 만..

    [AWS] S3와 Cloudfront란?

    이번에 S3 연결 작업을 담당하면서 뒤늦게 S3와 CloudFront에 대해 공부하게 되었다. 우선, S3 버킷 등록 및 CloudFront와의 연결은 CloudFront를 통해 S3 액세스하기를 참고하면 수월하게 할 수 있을 것이다. 그래서 이 글에는 S3와 Cloudfront가 그래서 무엇인지!에 대해 작성해보려 한다. S3란? 간단하게 말하자면 스토리지를 제공해주는 서비스이다. 예를 들어 USB를 사용한다고 할 때, 우리는 USB를 이용해 여러가지 데이터를 용량 제한 하에서 저장하고 이용할 수 있다. 사진, 동영상 등등 다양한 데이터를 USB에 저장하고 보관할 수 있다. S3는 마찬가지로, 웹 서비스 인터페이스를 통해 제공되는 스토리지 서비스이다. 웹 상에서 어디서나 원하는 양의 데이터를 저장하고 ..

    Nginx로 여러 대 서버를 로드밸런싱(Load-Balancing)하기

    우선 원하는 구조는 위와 같으며, 흐름은 다음과 같다. nginx는 proxy역할을 하며, 별도의 인스턴스로 구성한다. WAS는 Spring Application이며, 총 두 대로 구성한다. 두 대의 WAS는 하나의 Database를 바라본다. 클라이언트는 정해진 도메인으로 접속하면, nginx에서 ip의 해시값에 따라 적절한 WAS로 요청을 분배하며, 각 WAS는 동일한 DB를 바라보고 있기 때문에 동일한 데이터를 응답할 수 있다. 사실 너무 간단해서 글로 쓰기도 뭣하지만.. 나중을 위해! WAS 구축하기 Spring Application을 띄울 EC2 인스턴스를 하나 생성한다. 생성된 EC2에 접속한 뒤, 스프링을 띄울 수 있는 환경설정을 한다. sudo apt update sudo apt insta..

    AWS EC2에 elastic IP(탄력적 IP) 할당하기

    public ip 자동 할당을 선택하면 서버를 껐다 켜면 public ip가 변경된다. 이 때 사용할 수 있는 것이 elastic IP이다. 1. 설정할 수 있는 방법은 먼저 https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 연다. 2. 탐색 창에서 [네트워크 및 보안], [탄력적 IP]를 선택한다. 3. 탄력적 IP 주소 할당(Allocate Elastic IP address)을 선택한다. 4. 퍼블릭 IPv4 주소 풀을 선택하고, 태그를 선택적으로 추가한다. 5. 할당된 탄력적 IP 주소를 선택한 뒤, 탄력적 IP 주소 연결을 선택한다. 6. 탄력적 IP 주소 연결에서 연결할 리소스 유형을 인스턴스로 선택하고, 연결할 인스턴스를 선택한다. 7. 탄력적 IP..

    젠킨스 에러 모음

    이번에 배포를 여러번 하면서 할 때마다 삽질을 하고 있다. 몇 번을 더 해보아야 한번에 성공할 수 있을까? 😞 언젠간 도움이 되겠지.. 또는 누군가에게 도움이 되겠지하고 남겨보고자 한다. 1. 서브모듈을 최상위 디렉토리로 옮기다. 서브모듈이 원래는 src/main/resources 내부에 위치해있었는데, 프론트도 secret environment 파일을 서브모듈에 저장하게 됨으로서 서브모듈을 디렉토리 최상위로 옮기게 되었다. 그렇게 하고 나니, 젠킨스가 서브모듈을 읽어오지 못하는 경우가 발생했다. 이 때 물론 젠킨스에서 Build Now를 실행하면 빌드는 성공적으로 되지만 서버가 띄워지지 않고 로그로 에러를 남겼다. 그럴 때 해결하는 방법은 다음과 같다. 우리 팀은 우선 application-prod, ..

    Jenkins 자동 배포 2편

    1편에서 다룬 내용을 모두 수행해야 2편의 작업이 수행 가능합니다. >> Jenkins 자동 배포 1편 바로가기 settings > Webhooks > Add webhook을 선택한 뒤, 입력창을 채워준다. Payload URL - http://{Jenkins EC2 public IP}:{연결 포트}/github-webhook/ ( ex. http://123.456.78.9:8080/github-webhook/) Content type - application/json 그리고, 이제는 깃허브 내 계정의 Settings에 들어간 뒤, Developer Settings의 Personal access tokens 탭에 접속한다. 여기서 generate new token을 선택한 뒤, 다음의 값들을 선택한다. ..

    Jenkins 자동 배포 1편

    도와주신 알리, 시드, 크로플 감사합니당 >ㅁ 플러그인 관리 > 설치 가능을 누른 뒤, Publish Over SSH와 Github Integration 을 설치한다. 설치가 모두 완료되면 다시 Jenkins 관리 > 시스템 설정에 들어가서 Cmd+F로 ssh server를 검색한다. 검색 결과 다음과 같은 화면이 나올텐데, 입력창을 모두 채워준다. 입력창에 대한 설명은 사진 아래에 적어두었다. Name - 본인이 원하는 이름 아무거나 Hostname - 서비스 인스턴스 private ip Username - ubuntu (이는 EC2에 접속할 때 ssh -i KEY ubuntu@{ip}에서 ubuntu이다. 명칭이 다르다면 그 명칭을 쓰면 된다.) Remote Directory - 젠킨스에서 빌드 후 ..

    EC2 인스턴스 2개로 서버 구축하기

    이번에 백엔드 서버를 구축하면서 Web Server - Web Application Server - DB 와 같은 구조로 구축하게 되었다. 우선, 처음에 페어인 제이온과 함께 배포를 진행할 때에는 한 인스턴스에서 모든 것을 구성해 진행했다. 즉, 한 서버에서 먼저 애플리케이션 서버를 배포한 뒤, nginx를 이용하여 Proxy를 관리하고, mysql 서버를 이용하여 내부 localhost로 db를 연결하였다. 하지만 이 모든 과정 중 디비와 서버 인스턴스를 분리하는 것이 맞다고 판단하였고, 분리하는 과정을 글로 남겨보려 한다. 따라서 이 글은 한 인스턴스에 Web Server(Https로 바인딩해주는 Reverse Proxy) Web Application Server Database가 배포되어있다는 가정..

    Proxy와 Load Balancer

    Proxy가 무엇인지에 대해서 먼저 이야기해보자. 프록시는, 영어 뜻대로 네트워크에서 "대리" 역할을 수행한다 네트워크에서의 대리 역할이라함이 무엇인지 감이 잘 오지 않는데, 예를 들어보자. 인터넷과 인터넷이 통신하는데, 그 사이에 프록시가 끼어있다. 프록시는 저 사이에서 중계 역할을 통해 서버와 클라이언트가 통신을 수행할 수 있도록 돕는다. 프록시는 쓰임에 따라 네트워크 구조 어디든 배치될 수 있는데, 간단한 두 가지 예시를 들어보자면 Forward Proxy와 Reverse Proxy가 존재한다. Forward Proxy란 클라이언트와 가까운 곳에 프록시가 존재하는 것으로, 클라이언트의 요청을 대신 서버에게 전달해주는 역할을 수행한다. 클라이언트의 요청을 대리 수행해준다는 말 안에 포함된 장점을 찾아..

    Nginx와 CloudWatch 연결하기

    nginx를 이용해 서버를 띄우고, 띄운 서버의 로그를 aws cloudwatch로 남겨보자. 우선! nginx를 이용해 서버를 띄우는 부분은 고수 [알리의 블로그 🚀]를 참고하면 해결 가능! 하지만 나는 이렇게 하고 나서도 단번에 해결되지 않았는데, 그 이유는 cloudwatch logs agent를 설치할 때 나의 미스테이크때문에 발생한 것이었다. 우선 EC2의 IAM role을 설정한 뒤, 서버에 cloudwatch logs agent를 설치해야한다. $ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O $ sudo python ./awslogs-agent-setup.py --region ap..