1. apt로 외부 파일 설치(웹 서버 구현)
1) 향상된 패키지 관리 도구 apt - 외부 파일을 리눅스에 설치하는 방법으론 크게 3가지가 있습니다.
- wget명령어로 다운하기 (window의 브라우저와 비슷합니다.)
- FTP통신으로 tar파일을 옴기고 압축해제하고 실행하기
- apt명령문으로 파일 다운받기
- apt는 인터넷을 통해 원격에 저장된 패키지를 다운로드 받아서 설치해주는 향상된 패키지 관리 도구 입니다.
- 향상된 패키지 관리 도구 apt는 필요한 파일을 다운로드 하고 환경 설정까지 처리 해줍니다.
패키지 관리 도구 업데이트
apt-get update
패키지 찾기
apt search <패키지명>
패키지 다운로드하기
apt-get install <패키지명>
실행(자바설치)
apt설치 시 환경변수 설정은 자동으로 이루어 집니다.
sudo apt-get update sudo apt search openjdk-11 sudo apt-get install openjdk-11-jdk
자바버전 or 컴파일 버전 확인하기
java -version javac -version
자바 실행 파일 찾기
which java
2) 모놀리식 아키텍쳐 웹 서버
- 대표적인 웹서버 구현 아키텍쳐는 하나의 운영체제 위에 필요한 서비스를 모두 묶어서 구축하는 형식입니다.
- 전통적인 서버 구축 방식입니다.
- 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질 때, Monolithic 하다고 합니다.
- 데이터베이스는 같은 운영체제에 묶을 수도 있고, 다른 서버에 분리해서 구축할 수도 있습니다.
- 예제에서는 DB도 묶어서 실습합니다.
시나리오
1] 자바설치
2] mysql서버설치
3] aws인 경우 서버 보안그룹 설정
4] window환경에서 원격 mysql서버에 접속해보기
5] 개발 서버에서 프로젝트 빌드
6] FTP통신을 이용해서 빌드 된 파일을 전송
- 또는 깃으로 다운로드하고 리눅스에서 직접빌드 (서버스펙이 요구됨 , AWS 프리티어인 경우 어림도 없음)
7] 스프링부트인 경우 백그라운드로 war파일 실행
- AWS인 경우 서버 스펙이 낮기 때문에 swap으로 메모리설정
시나리오 상세
1, 2] 자바 설치(위에서 함), mysql
https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
- apt방식으로 mysql을 받고 설치한다.
sudo apt search mysql
sudo apt-get install mysql-server
- mysql설치 후 초기 비밀번호 설정
mysql접속 sudo mysql 초기 비번 설정 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '비밀번호'; 탈출 exit 루트로접속 mysql -u root -p 비밀번호 입력후 접속이 되면 정상 설치 완료(mysql 초기 비번 설정은 한번만 진행하면 됩니다)
3] 보안 그룹 설정, mysql 접속(AWS라면 보안그룹 설정으로 포트를 설정합니다. (4번이랑 연결해서 보세요)
- 수업 예시
- mysql의 포트개방 입니다.
- 설정하지 않더라도 ssh를 통해서 접속이 가능함. (보안을 강화하려면 설정하지 않음)
- 접속가능한 아이피주소 입니다.
- 0.0.0.0/0 인 경우 어디서든 접속 가능입니다. (보안에 매우 위험. 데이터베이스 해킹에 취약해짐)
- 본인의 공용 아이피를 적어서 본인 컴퓨터에서만 접속 가능하게 할 수 있습니다.
- ssh접속 포트개방 입니다.
- 반드시 열어야 함
- 접속가능한 아이피주소 입니다.
- 0.0.0.0/0 인 경우 어디서든 접속 가능입니다. (보안에 매우 위험)
- 본인의 공용 아이피를 적어서 본인 컴퓨터에서만 접속 가능하게 할 수 있습니다.
4] window 환경에서 원격 mysql 서버에 접속해보기
- 워크벤치에서 연결을 확인합니다. 2가지 방식이 있습니다.
방식 1
방식 2
- 3306포트는 개방하지 않고 리눅스에 ssh로 접속하여 mysql로 접근할 수 있습니다. (보다 안전)
- ssh key file에는 본인의 ppk 파일을 그대로 넣으면 test connection이 안됨. (db에 접근하려면 pem 파일 형식으로 변환이 필요함)
- 변환하는 법(puttygen 실행 해서 load에 ppk 파일 올려보기)
그리고 나서 workbench 파일에 .pem 파일을 올리면 test connection 완료
- 접속했으면 개발 환경의 데이터베이스를 운영을 백업하고, 동일한 환경을 구성합니다.
- MySQL 환경과 설정에 따라 대소문자를 구분하기도 하고 그렇지 않기도 한다.
- 컬럼이름은 모든 환경에서 대소문자를 구분하지 않는다.
create database spring default character set 'utf8';
create user 'spring' identified by 'spring';
grant all privileges on spring.* to 'spring';
5] 개발 서버에서 프로젝트 빌드
어플리케이션 빌드란?
- 컴퓨터가 코드를 실행 시킬 수 있도록 컴파일하며, 어플리케이션에 필요한 라이브러리를 통합하고, 합치는 과정
- 빌드 과정은 무거운 작업이기 때문에 컴퓨터 사양이 좋아야 합니다. (여유 하드디스크 용량도 필요)
- EC2에서 프리 티어로 제공하는 운영체제는 사양이 좋지 않기 때문에 윈도우에서 빌드 합니다.
프로젝트 빌드시 필수사항
- 레이아웃을 쓰는 경우 th:replace부분을 ./경로/경로 형태로 전부 수정 (리눅스의 경로 참조 문제)
- 파일업로드 경로 처리
- 개발환경의 업로드 경로 \\ 를 전부 우분투 환경의 경로에 맞추어 /로 변환한다.
- 우분투에 만들어지는 로컬 업로드 폴더는 window와 다르다.
- app-properties파일의 업로드 경로를 우분투의 경로 /home/ubuntu/upload 형태로 바꾼다.
- 우분투에 /home/ubuntu/upload폴더를 만들어준다.
- 파일을 업로드 하려면 어플리케이션이 폴더를 (읽기 쓰기 실행) 할 수 있는 권한이 있어야 한다.
- sudo chmod -R 777 /home/ubuntu/upload 으로 누구나 다 (읽기 쓰기 실행) 할 수 있는 권한을 준다.
- 운영 데이터베이스의 접속 주소가 다르다면 수정한다.
- 빌드파일 설정 build/gradle의 version명을 바꿔도 된다 (선택사항)
- 추가로 여러분 프로젝트를 운영 환경에 맞추어 설정하면 됩니다.
프로젝트 빌드
- 프로젝트 빌드시 모든 test코드를 실행한 후에 통합하게 된다.
- test코드에 실패하면 빌드는 실패한다.
- 다른 이유에서 에러가 발생하면 개발자는 에러의 이유를 탐색하고 찾아서 해결한다.
CMD빌드
- 윈도우에 자바11설치 (8버전이 있는 경우는 8버전 환경변수 삭제하고 cmd로 이동)
- 프로젝트 폴더 안에서 ./gradlew build 또는 (gradlew build)
- ./build/libs 폴더 안에 war 파일이 생성되었습니다.
통합 개발 환경에서 마우스로 빌드
1) 이클립스기준 show view에서 greadle task추가
2) gradle task탭에서 빌드
동작 시켜보기
java -jar 경로/프로젝트.jar j
ava -jar BootMyweb-0.0.1.war
6] FTP 통신을 이용해서 빌드 된 파일을 전송
- TP통신 - File transfer protocol
- 파일을 전송하는 통신방법 입니다.
- 빌드가 완료된 파일을 우분투 서버로 옴겨서 동작 시켜야 합니다.
- 파일질라 프로그램 설치
https://filezilla-project.org/
- 파일질라를 통해 서버에 접속하기
AWS라면 키페어 등록 후 접속
VM이라면 비밀번호만 입력 후 접속
7] 스프링부트인 경우 백그라운드로 war 파일 실행
jar or war파일의 실행 명령
- 이렇게 돌리게 되면 터미널을 종료하면 어플리케이션은 종료됩니다.
java -jar 경로/프로젝트.jar java -jar /home/ubuntu/BootMyweb-0.0.1.war
jar or war파일의 백그라운드 실행 명령
- 우분투 서버에서 실행파일을 백그라운드로 동작 시킵니다.
- 터미널을 종료해도 어플리케이션은 백그라운드로 동작됩니다.
- 실행로그는 hohup.out 파일에 기록 됩니다.
nohup java -jar 경로/프로젝트.jar & nohup java -jar /home/ubuntu/BootMyweb-0.0.1.war &
nohup.out파일의 실시간 로그 확인 명령
- 운영 환경에서 에러는 여기서 볼 수 있습니다.
tail -fn50 nohup.out
jar or war파일의 백그라운드 파일 종료 명령
- 백그라운드 실행되는 파일은 프로세스 번호로 종료합니다.
- 프로세스 확인 명령 ps
ps
- 프로세스 중 특정 단어가 들어간 파일을 찾는 명령
ps -ef|grep 자르명 또는 합쳐서 사용하는 pgrep pgrep –f 자르명
앞쪽에 나오는 번호가 프로세스아이디 (PID) 입니다
- 프로세스 종료(755권한 반드시 필요)
sudo kill -9 PID번호
8] 번외 스왑 설정
EC2 t2.micro의 스펙은 렘 1기가 이다. 여러분이 쓰는 개발환경 데스크톱 렘은 기본 8기가 이상이다.
실제로 AWS는 t2.micro는 테스트나 교육을 위해서 사용하라 권고 하고 있다.
t2.micro는 서버 운영으론 적합하지 않다.
또한 t2.micro 서버는 순간 확장 가능 인스턴스이다.
순간확장가능 인스턴스는 크레딧(에너지) 를 충전했다가 CPU가 필요한 상황에 크레딧(에너지)를 버스트시켜 폭발 시키고 크레딧(에너지) 이 없으면 먼지처럼 사라져버린다.
이는 서버가 다운되어 버린다는 뜻이다.
운영 서버를 선택할 때는 CPU와 렘, 하드디스크의 용량 등이 서버의 사용량에 따라 알맞게 책정될 필요가 있다.
AWS공식문서
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
그럼 어떻게 하면 되는가?
하드디스크를 렘으로 일부분 변환시켜 RAM의 성능을 올려줄 수 있는 방법이 있습니다.
SWAP설정 입니다.
스왑설정은 여기를 참고하거나
https://down-develope.tistory.com/6
여기를 참고해서 설정하면 됩니다.
https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/
이제 여러분의 어플리케이션은 전세계 어디에서든 접속할 수 있습니다.
'TIL > Linux' 카테고리의 다른 글
FTP를 이용하여 서버에 파일을 옮길 때 발생하는 Permission Denied 오류 해결 방법 (0) | 2023.05.21 |
---|---|
rinux로 data, schema.sql 생성 후 mysql_backup 하기(데이터 옮기기), .sh 파일로 한번에 실행하기 (0) | 2023.05.19 |
root 계정의 ssh 접속 허용 설정 (0) | 2023.05.15 |
day94-rinux (0) | 2023.03.22 |
day93-rinux (0) | 2023.03.21 |