본문 바로가기
Web Development/aws

aws, 웹서비스 배포위한 세팅과 배포

by doriver 2022. 5. 23.

'서버구축 ~ 배포'의 과정

1. aws서버 만들고 접속하기
2. 프로그램 설치(java, tomcat, mysql)
3. aws에서 방화벽 설정
4. 배포할수있게 세팅(tomcat, 배포할 프로젝트)
5. 배포


aws서버 만들고 접속하기

서버 만들기

aws 가입하기

가상머신 시작( ec2 )
amazon machine image 선택 ( os선택 ) - amazon linux 2 ami 가 많이 사용되고 있음
인스턴스 선택 ( 하드웨어 선택 ) - t2.micro (프리티어 사용 가능)

default값들로 넘어감
키 페어 생성 - aws에 저장하는 퍼블릭 키, 사용자가 저장하는 프라이빗키로 구성. 이둘 모두 사용하여 ssh를 통해 인스턴스에 접속 , 키페어 유형은 RSA로

서버 접속

putty 프로그램을 통해 CLI형태로 서버에 접속해서 서버를 운용

putty.exe 다운로드
PuTTY에서 aws서버에 접속하기
( aws에서 받은키를 putty에서 사용하기위해선 변환이 필요 , sourcetree 내 SSH Key 생성 열어서 )
인스턴스(aws)의 퍼플릭 IPv4주소 필요

 


프로그램 설치

java설치

yum(프로그램을 설치하고 관리하는 명령어 기반 도구)이용

Amazon Corretto 설치 (무료로 사용할 수 있는 OpenJDK의 프로덕션용 멀티플랫폼 배포판)
$ sudo yum install java-11-amazon-corretto

tomcat설치

직접 다운로드 받아서 실행하는 형태로 설치

파일링크를 통한 다운로드 ( 명령어 wget )
$ wget https://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz
( tomcat 9 download 로 검색해서 tar.gz 파일의 링크 복사 ) 

압축풀기 ( 명령어 tar )

$ tar -xvf apache-tomcat-9.0.45.tar.gz

디렉토리 이름을 tomcat으로 변경하고 /usr/local 위치로 이동

$ mv apache-tomcat-9.0.45 tomcat
$ mv tomcat/ /usr/local/

mysql 5 설치

5.7 설치 패키지를 내려 받는다
$ sudo yum install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

GPG key 등록
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

mysql server 설치
$ sudo yum install mysql-community-server

서버 시작
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service

mysql 비밀번호 관련

최초 비밀번호 확인 - mysqld.log에서 cat 명령어를 통해
$ sudo cat /var/log/mysqld.log
$ sudo cat /var/log/mysqld.log | grep password

mysql 실행
$ mysql -u root -p

최초 접속 후에 비밀번호를 변경 - 간단한 비밀번호 사용시에 에러가 발생하므로 복잡한 비밀번호 (대문자, 숫자, 특수문자)로 만든다.
ALTER USER 'root'@'localhost' identified by 'MariA1239#';

이후 간단한 비밀 번호로 수정을 원할경우
아래 명령어를 통해서 비밀번호 검증 레벨을 낮춘다.
( 첫 비밀번호 셋팅 전까지는 아래 명령어가 사용이 안되므로 일단 복잡한 비밀번호로 셋팅후 다시 바꾸는 과정을 거쳐야 한다. )
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;
ALTER USER 'root'@'localhost' identified by '1234';  <- 가능

서버 타임존 설정(톰캣)

WAS가 UTC이므로 시간이 UTC 시간으로 노출되는 현상이 있음

setenv.sh 생성
$ vi /usr/local/tomcat/bin/setenv.sh

아래 코드 입력후 저장
#!/bin/bash
export CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+9"

톰캣 서버 stop 후 start
$ bin/catalina.sh stop
$ sudo bin/catalina.sh start


AWS에서 방화벽 설정

서버에서는 일반적으로 특정 port 만 접속 가능하도록 설정해서 보안을 관리 한다.
일반적으로 리눅스 서버 셋팅이 필요 하지만, AWS의 경우 간단하게 웹 콘솔을 통해서 셋팅 가능하다.

 

1) 톰켓 접속을 위한 8080포트를 열어 준다.

AWS - EC2 - 인스턴스 - 보안 - 보안 그룹의 링크 클릭 - 인바운드 규칙에 있는 Edit inbound rules 버튼을 클릭 - 규칙 추가 누르고 아래 내용을 선택, 입력 - 모두 작성한 후 규칙 저장

 

유형 : 사용자 지정 TCP
포트범위 : 8080
소스 : anywhere ipv4

2) putty 를 통해서 tomcat 서버를 켠다

sudo /usr/local/tomcat/bin/catalina.sh start

 

3) 접속 ip혹은 도메인으로 페이지에 접속해서 설정이 적용 되었는지 확인한다.

http://3.123.212.211:8080

 

tomcat manager 설정 (배포 할 수 있게)

tomcat의 관리를 웹페이지를 통해서 하도록 해주는 tomcat 애플리케이션

 

http://3.123.212.211:8080/manager
접속하면 403 Access Denied가 나오므로 tomcat 추가 설정이 필요하다.

1) tomcat 설치 디렉토리로 이동한다.

$ cd /usr/local/tomcat

2) conf/tomcat-users.xml 파일을 vim을 통해서 열고 아래 내용을 추가 한다.

( user 태그의 username 과 password 부분은 실제 접속에 사용할 아이디와 비번이다. )

<role rolename="manager-gui"/>    
<role rolename="manager-script"/>  
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-status"/>

3) webapps/manager/META-INF/context.xml 파일을 vim으로 열고 아래 내용을 주석 처리 한다

( manager 페이지를 로컬환경에서만 열도록 해주는 설정으로, 이를 해지해서 어디서든 접속할 수 있도록 한다. )

<!--
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

         -->

4) tomcat 서버를 껏다 켜고 아래 주소로 접속하여 id password 를 입력하고 설정이 완료된것을 확인한다.


$ sudo bin/catalina.sh stop
$ sudo bin/catalina.sh start

접속 주소 예
http://3.123.212.211:8080/manager

 

war export (프로젝트 코드를 WAR로)

1) 프로젝트에 build.gradle에 war 빌드 속성을 추가 한다.

* plugins 항목에 id 'war` 을 추가한다.
* gradle refresh를 통해서 해당 항목을 적용한다.

plugins {
    ...

    id 'war'
}

2) 프로젝트이름Applicaton.java 에서 SpringBootServletInitializer 클래스를 extends 한다.

( spring boot 에서 tomcat sevlet 연동을 위한 설정 )

@SpringBootApplication
public class InvestSNSApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(InvestSNSApplication.class, args);
    }
}

3) 서버 환경에 맞춰서 파일 저장 경로와 데이터베이스 설정을 조정해준다.

예) 파일 이미지 경로
- AWS 에서 폴더 만들어두고 아래와 같이 자바 코드에서 경로를 변경해준다.
public final static String FILE_UPLOAD_PATH = "/home/ec2-user/upload_images/";

4) 프로젝트에서 오른클릭을 하고 export를 선택 - war을 검색하고 WAR file 선택
5) 저장할 경로와 파일이름을 지정한다. ( 파일이름은 'ROOT.war' 로 만든다. )

 

배포

1) tomcat manager page 에서 '배치할 WAR 파일'이 보이도록 스크롤을 내린다.
2) 저장한 ROOT.war 파일을 선택하고 배치 버튼을 누른다.
3) 배포 시간이 좀 걸리고 에러가 없이 배포가 완료되면 해당 페이지가 새로고침 된다.
4) 접속가능한 path를 포함하여 배포한 서비스를 확인한다.
5) logs에서 catalina.out 실시간 로그 확인
$ sudo tail -f catalina.out

'Web Development > aws' 카테고리의 다른 글

Aws Ec2 했던거 정리  (0) 2024.05.19
ec2 인스턴스 오래 켜놓으면  (0) 2022.07.18
악성코드 (aws 요금 0원이던게 12만원 나옴)  (0) 2022.06.06
linux명령어(aws)  (0) 2022.03.30
오랜만에 aws EC2에 접근하다  (0) 2022.03.28