2021 08 26
2021-08-26¶
조엘스 웹 호스팅 도커 이전기¶
- nginx 로드 밸런싱 설정
- 참고: https://kamang-it.tistory.com/entry/WebServernginxnginx%EB%A1%9C-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-%ED%95%98%EA%B8%B0
- 아래와 같이 app에 두대의 서버를 설치해두자
- 라운드 로빈으로 두 개의 서버에 왔다갔다 요청보내줌
http { upstream app { server 172.17.0.1:10000; server 172.17.0.1:12000; } # Redirect all traffic to HTTPS server { listen 80; return 301 https://joel-web-hosting.o-r.kr; } server { listen 443 ssl; client_max_body_size 10M; ssl_certificate /etc/letsencrypt/live/joel-web-hosting.o-r.kr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/joel-web-hosting.o-r.kr/privkey.pem; # Disable SSL ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 통신과정에서 사용할 암호화 알고리즘 ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; # Enable HSTS # client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다. # 이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다. add_header Strict-Transport-Security "max-age=31536000" always; # SSL sessions ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_pass http://app; } } }- 이제 해당 엔진엑스는 "172.17.0.1:10000" 이랑 "172.17.0.1:12000" 에 요청 번갈아가면서 보냄
- Jar 파일 돌릴 도커 이미지 만들기
- 톰캣 포트변경 관련 참고: https://www.baeldung.com/spring-boot-change-port
- 우선 jdk 이미지 다운받고
- 필요한 파일들 복사하고
- 쉘 스크립트 돌릴 수 있도록 엔트리포인트 지정하기
FROM openjdk:8 COPY application-oauth.yml application-oauth.yml COPY application-real-db.yml application-real-db.yml COPY app.jar app.jar COPY run1.sh run.sh RUN chmod +x run.sh ENTRYPOINT ["./run.sh"]- 해당 run.sh에는 port 10000번으로 jar 돌리게 설정함 ```shell script #!/bin/sh
exec java -jar -Dspring.config.location=classpath:/application.yml,application-oauth.yml -Dspring.profiles.active=prod -Dserver.port=10000 app.jar ```
- 해당 도커파일을 통해
webhosting-first-was latest aa2363a96ca3 2 hours ago 566MB이미지 생성 - 비슷한 방식으로webhosting-second-was latest 9481c0c6a12e 2 hours ago 566MB이미지 생성 - 이건 12000번 포트에서 듣도록 - DB와의 연결이 까다로워 해당 이미지 컨테이너 run 돌릴떈--net host옵션 줘서 돌림 - 다행히도 로드 밸런싱 적용 잘됨!!!
- 발견한 문제점 - 아맞다! 나 세션으로 관리했지? - 두대의 서버가 돌아가는데, 세션발급받은 서버에서는 유효한 로그인 인가과정이, 다른 서버에서는 파토 - 로그인이 풀리는 사태 발생! - 아 그래서 토큰을 쓰는게 좋구나 - 아 그래서 세션을 공유할 수 있는 장치가 필요한 거구나! - 아맞다! 나 hostingfile들 ubuntu host에 직접 넣어뒀지? - 코드레벨에서 해당 파일에 접근하여 반환하도록 해둠 - 도커 컨테이너에서는 외부의 호스트 파일에 접근을 못함 - 볼륨 마운팅 하면 해결될 수도? - 도커로 이전할 때 고려할 것들이 생각보다 많았음 -> 놀토는 좀 덜할 것 같긴함!