개요

공통 프로젝트로 진행했던 SPOPARTY 서비스가 SSAFY에서 제공해주는 서버 기간 만료로 인해 다운되었었는데, 중간중간 서비스를 개발하면서 팀원들과 함께 게시판을 잘 이용했었다.

그래서 도메인 구매하여 서비스를 다시 올려놨었는데…

장애 발생

파일 업로드가 불가능한 현상 + 파일 삭제가 불가능한 현상 두가지가 함께 터져서 로그를 보면서 추적 해봤다.

파일 업로드 불가능 현상

파일 업로드의 경우 제보자가 보내준 내용 그대로였다.

nginx는 client_max_body_size가 1MB가 기본으로 설정되어 있었는데, 기존 서버에는 openvidu 컨테이너 내부 nginx에서 설정되어 있었던 것으로 보인다.

따라서 현재 서버의 nginx 설정에 아래의 옵션을 추가한 후 정상적으로 업로드가 가능해졌다.

client_max_body_size 10M;

파일 삭제 불가능 현상

 

파일 삭제의 경우 로그 확인 결과 S3 권한 문제였다.

레포지토리 내의 키값이 노출되면서 AWS 측에서 메일이 왔었는데, 확인을 못했다.

노출로 인한 피해를 막고자 aws 측에서 일부 기능을 막았다고 한다.

이 부분은 새로운 Spring Application에서 s3로 접근하는 access key와 secret key를 새로 발급받아서 해결했다.

장애 대응 완료

약 한시간 30분의 장애 대응을 해보면서 또 지식을 얻어갈 수 있었다.

 

늦은 시간까지 테스트를 함께 해준 팀원들 모두 감사합니다!!

 

AWS 에서 이런 메일도 왔다.. ㅋㅋㅋㅋ

 

개요

Jenkins Container 환경 설정 시 웹 페이지의 경로를 변경하고, nginx 프록시 할 수 있도록 구성하는 방법을 알아보자.

Host OS 내에 jenkins container를 이미 구성한 상태에서 접속할 수 있는 경로만 변경하는 작업을 포스팅 한다.

환경

필자의 경우 Host OS(Ubuntu Linux) 위에 Jenkins Container를 구성했고, Host OS에 Nginx를 설치하여 리버스 프록시를 활용하여 Jenkins 관리 웹 페이지로 이동시키게끔 구성했다.

Jenkins Container 설정

StackOverflow의 글에서 경로를 변경하기 위해서 환경변수를 설정할 수 있다는 글을 확인했다.

Change jenkins container deployment root path

Jenkins Container 생성 당시 입력했던 환경 변수를 확인해보자.

Host OS에서 아래의 명령어로 컨테이너 생성 당시 입력했던 환경변수를 확인 가능하다.

docker exec jenkins(컨테이너 이름) /usr/bin/env
PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=6719f87953bd
JENKINS_OPTS=--httpPort=8080
TZ=Asia/Seoul
LANG=C.UTF-8
JENKINS_HOME=/var/jenkins_home
JENKINS_SLAVE_AGENT_PORT=50000
REF=/usr/share/jenkins/ref
JENKINS_VERSION=2.447
JENKINS_UC=https://updates.jenkins.io
JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental
JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log
JAVA_HOME=/opt/java/openjdk
HOME=/root

위의 글에서 확인한 접속 prefix를 추가하기 위해서는 아래의 환경변수를 추가하면 된다.

JENKINS_OPTS="--prefix=/jenkins"

나는 아래의 문서 일부를 읽은 후 지원하지 않는 기능인 줄 알았는데, 최근 댓글을 보면 실행중인 컨테이너 위에 환경변수를 추가할 수 있는 방법이 있는 것 같다.

How to set an environment variable in a running docker container

필자의 경우 컨테이너에 환경변수를 추가하여 다시 올리는 방식으로 작업했다.

docker run -d --env JENKINS_OPTS="--httpPort=8080 --prefix=/build" --prefix=/build -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Seoul -p 8080:8080 -v /jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose --name jenkins -u root jenkins/jenkins:jdk17

또한 path/build 경로로 들어오는 요청을 nginx에서 8080 포트로 redirect 하도록 설정해줬다.

sudo vim /etc/nginx/sites-enabmed/default

...

location /build/ {
                proxy_pass <http://localhost:8080/build/>;
        }
...

이후 nginx를 재시작 해줬다.

sudo service nginx restart

+ Recent posts