AWS

23-07-02 AWS war배포 (tomcat9, nginx, war)

모건이삼촌 2023. 7. 2. 23:07

※ 사전준비

 

1. AWS계정생성

2. AWS linux 인스턴스 생성

 2-1. amazon linux 선택

 2-2. pem키 생성

 2-3. 체크박스 3개 체크

 2-4. 30설정

3. putygen 키고 pem키 ppk키로 변경

 3-1. 실행 및 load 클릭

 3-2. pem키 찾아서 집어넣음

 3-3. Save private key 클릭 후 ppk키 저장

4. PuTTY 실행

 4-1. Host Name에 aws ip 입력

 4-2. 좌측 메뉴탭에 SSH -> Auth -> Credentials 클릭 후 private key file for authentication에 ppk키 집어넣음

 4-3. 다시 좌측메뉴탭 최상단 Session 탭 클릭

 4-4. Saved Sessions 에 적당한 이름 넣고 Save 후 실행

5. ec2-user 입력

 

※ 설치

 

1. java

sudo yum install java-1.8.0-amazon-corretto-devel.x86_64

2. nginx

sudo yum install nginx

3. Tomcat9

sudo yum install tomcat9

 

※ 권한 설정

 

편의를 위해 읽기, 쓰기, 실행권한을 모두 주려고 한다.

tomcat의 server.xml / webapps, nginx의 nginx.conf를 수정해야 하니 세 디렉터리에 수정을 해야함

 

1. etc 디렉터리

sudo chmod -R 777 /etc/nginx/nginx.conf
sudo chmod -R 777 /etc/tomcat9/server.xml

 

2. usr 디렉터리

sudo chmod -R 777 /usr/share/tomcat/webapps

 

※ 실행 확인

 

1. 톰캣, nginx 실행

sudo service nginx start
sudo service tomcat9 start

aws인스턴스의 ip를 url에 입력하면 nginx 화면이 로드되어야 하고

ip:8080을 입력하면 당연히 화면이 안나와야 한다.

aws의 보안설정의 인바운드 규칙을 설정해줘야 한다.

 

2. 인바운드 규칙 설정

 2-1. aws 좌측탭 보안그룹 클릭

 2-2. 해당 인스턴스 클릭, 하단에 인바운드 규칙 클릭

 2-3. 인바운드 규칙 편집

 2-4. 포트범위 8080, 소스 Anywhere-IPv4 설정 (그 외 아무것도 건드리지 말자) 및 추가

 

이후 ip:8080 하면 톰캣의 404page가 로드된다.

 

※ 설정 변경

tomcat의 server.xml, nginx의 nginx.conf를 수정해야 한다.

 

1. tomcat의 server.xml 수정

 - 경로 : /etc/tomcat9/server.xml

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" 
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" /> -->


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
		
		<Context path="" docBase="WarFile" reloadable="true" />
      </Host>

기존 value값을 주석하고 위와같이 설정, Context의 docBase는 /usr/share/tomcat9/webapps에 집어넣은 war 파일명을 입력

 

2. nginx의 nginx.conf

 - 경로 : /etc/nginx/nginx.conf

# start
#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }
# end

    server {
		listen       80;
    	server_name  /;
			location / {
				proxy_pass http://localhost:8080;
				proxy_set_header X-Real-IP $remote_addr;	
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header Host $http_host;
		}
	}

기존 server 코드 주석처리

위 내용은 localhost:8080을 80번 port로 forward하겠다는 뜻

 

※ war파일 배포

 

1. winSCP 실행

 1-1. 호스트 이름은 인스턴스 ip 입력

 1-2. 사용자이름은 ec2-user 입력

 1-3. 비밀번호는 고급 클릭

  1-3-1. 좌측 메뉴탭에 인증 클릭

  1-3-2. 개인키 파일에 ppk파일 입력 및 확인

 1-4. 여기서도 기본정보를 저장해주자

 

2. /usr/share/tomcat9/webapp 디렉터리 이동 후 좌측 로컬에서 우측 linux로 드래그

 

※ 작업 확인

1. 톰캣, nginx 재시작

sudo service nginx restart
sudo service tomcat9 restart

 

2. 인스턴스 ip를 url에 입력해서 내 war이 정상적으로 배포되었는지 확인하자!