콘텐츠로 이동

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에 직접 넣어뒀지? - 코드레벨에서 해당 파일에 접근하여 반환하도록 해둠 - 도커 컨테이너에서는 외부의 호스트 파일에 접근을 못함 - 볼륨 마운팅 하면 해결될 수도? - 도커로 이전할 때 고려할 것들이 생각보다 많았음 -> 놀토는 좀 덜할 것 같긴함!