본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[89일차 복습] 아마존 웹서버 구축 / 호스팅 / 배포 / 비용 / 방법

반응형

🧸 복잡하고 복잡스런 아마존 aws 웹서버 구축 환경설정 방법 

 

 

[ CONTENTS ]

1. Amazon ec2 가상 리눅스 인스턴스 생성

2. Node.js, mySQL 설치 / 다운 

3. Node.js, express에서 작성한 코드 리눅스에 연결 

4. 포트 변경 

 

 

1) Amazon ec2 사이트 회원가입 및 인스턴스 생성   

 

 

 

1. AWS 홈페이지에서 회원가입하기 

* 반드시 해외결제 가능 신용카드가 있어야 한다.

* 무료 / 유료 여러개의 옵션이 있으므로 원하는 목적에 맞게 선택! 

개발 테스트 용의 목적이므로 -> 무료 계정 생성 클릭 -> 회원가입 진행 -> AWS 관리 콘솔까지 들어가기 

 

 

AWS 회원가입 url

https://aws.amazon.com/ko/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Categories=categories%23compute&trk=ps_a134p000006gGh2AAE&trkCampaign=acq_paid_search_brand&sc_channel=PS&sc_campaign=acquisition_KR&sc_publisher=Google&sc_category=Cloud%20Computing&sc_country=KR&sc_geo=APAC&sc_outcome=acq&sc_detail=amazon%20ec2&sc_content=EC2_e&sc_matchtype=e&sc_segment=477203497843&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Cloud%20Computing|EC2|KR|EN|Text&s_kwcid=AL!4422!3!477203497843!e!!g!!amazon%20ec2&ef_id=CjwKCAjw3MSHBhB3EiwAxcaEu6-e2J28G0nPQM4YWzNQdB3F0euW-UQz4rOcyJ9VZleuWWzCa02nFhoCFUsQAvD_BwE:G:s&s_kwcid=AL!4422!3!477203497843!e!!g!!amazon%20ec2&awsf.Free%20Tier%20Types=*all 

 

AWS 프리 티어

12개월 무료: 이 프리 티어 오퍼는 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과

aws.amazon.com

 

 

 

 

 

2. AWS 관리 콘솔 -> 가상 머신 시작 클릭

 

 

 

3. AMI 선택 - Ubuntu Server 20.04 LTS  선택

 

4. 인스턴스 유형 선택 --> 디폴트값 그대로 '검토 및 시작' 클릭 

 

 

 

5.  보안 그룹 구성 클릭 (6단계)

4번 스토리지 추가, 5번 태그 추가는 자동으로 건너 뛰어 졌다.

아래 사용자 지정에 0.0.0.0/0 의 의미는 어떤 사용자 IP도 나의 웹사이트에 접속 가능하다 ~ 의 의미 

단계 6에서 두 가지 추가  - http, https 설정 이유
다른 외부 PC 가 80 으로 들어올 때 허용하겠다 의미 
http 80이 디폴트 값  -  웹서버, 다른 pc 들어오면 미리 허용해놓기  
https - 보안이 강화된 프로토골
만약 DB server를 사용하게되면 3306 port도 또 추가해주어야함 

규칙 추가 클릭 -> http, https 두 가지 추가 -> 검토 및 시작 클릭 

 

* http - port : 80  = 다른 외부 pc 가 port 80으로 들어올 때 허용하겠다. 

https - port : 443  = 보안 강화 프로토콜 

만약 DB server를 사용하게 되면 port : 3306 추가해 주어야함. 

 

 

 

 

 

6. 검토 후 '시작하기'를 클릭 

 

 

 

 

7. KEY PAIR 키 페어 선택 및 생성하기

* 없으면 생성, 있다면 기존 것으로 사용 가능 

* key pair는 이중 보안 가능하게 하는 아마존 판 공인인증서 

요 key pair 는 다른 사람이 악용할 수 있으니 꼭 어디에 숨겨서 저장하기 ! Visual studio에 넣는다면 .gitignore 하기!!  

-> 생성 후 여러 줄의 한 문단으로 이뤄진 키가 나온다. visual studio 새 폴더를 열어서 back 폴더에 옮겨 담았다 

 

vs에 새 폴더를 연 김에 세팅까지 해주기 

 

  Visual studio 세팅    

1) back, front 폴더 생성 (back폴더 - key pair 파일이 들어가져있음) 

2) 파워셀에 back, front, local-back  세 가지로 만들기 

local-back = express로 만드는 로컬 서버  (localhost:3000)

 

 

 

 

 

 

8. 인스턴트 보기에 들어가서 방금 만든 인스턴스의 이름 편집 

 

 

인스턴스 생성 완료 

 

 

9. 인스턴스 접속해보기 

 

AWS 사이트에서 인스턴스 보기 -> 진행 중인 해당 인스턴스 체크박스 클릭 -> '연결' 클릭

SSH 클라이언트 클릭 -> 여러 줄이 나오면 가장 아래의 것으로! 복사 가능한 버튼눌러서 복사 -> VS 터미널에 입력하기 -> 질문에 yes 입력 -> 초록색 글자가 나오면 접속 성공! 

 

* 터미널에 복사 붙여넣기 할 때, 반드시 경로 확인 !! 안그러면 아래 에러가 나옴 

ex) back까지 들어오기 

Warning: Identity file utan_first_keypair.pem not accessible

 

* 이 때 vs 터미널은 back 파워셀 ! 

초록색 글자들의 의미 : 계정 @ 주소값 

 

 

 

 

 

만약 pem 파일 접속 권한관련 에러가 나오면 아래 내용 참고 

https://techsoda.net/windows10-pem-file-permission-settings/

 

윈도우10 SSH 접속시 PEM 파일 퍼미션 에러 해결방법 - 테크소다

이 글은 윈도우10에서 BASH, WSL, 파워쉘을 통해 SSH 접속시 PEM 파일 퍼미션 에러가 날때 해결 방법에 대해서 다루고 있습니다. 윈도우10에서 OpenSSH 클라이언트를 설치하면 명령프롬프트나 윈도우 파

techsoda.net

 

 


 

 

리눅스 명령어 찍먹
리눅스 명령어
ls 현재 디렉토리 내용 보기 
(현재 위치 기준)
ls -al ls보다 더 상세하게 디렉토리 내용 확인하기
(현재 위치 기준)
cd /  최상위 디렉토리로
pwd 내 경로 보기 

root   -   최고 관리자를 뜻함 

앞의 알파벳의 의미 
d : 디렉토리
l : 바로가기 (symbolic link)
- : 파일이라는 뜻
cd ~ : 우리가 사용할, 작업할 디렉토리 공간 


 

 

 


 

 

  2) Node.js Mysql 설치하기  

 

 

0. Visual Studio - 터미널 파워셀 - back 선택 

1. Node.js / mysql 있는지 확인 해보기 

node -v
mysql

-> 없다고 뜬다. 

 

 

2. node.js 부터 설치하기  -  아래 명령어 차례대로 실행 

sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install curl
curl -sL http://deb.nodesource.com/setup_14.x | sudo -E bash --         //우리가 설치한 node.js가 버전14여서!
sudo apt-get install -y node.js

* sudo 뜻 : 최고 관리자 

다운 잘 되었는지 확인

node -v
npm -v 

 

 

3. Mysql 설치하기 

sudo apt-get install mariadb-server                      // y/n ? 나오면 y입력
sudo apt-get install mariadb-client

DB도 server이다 ! back쪽, client 쪽 설치

- 잘 설치되었는지 확인 

mariadb --version

 

 

4. ubuntu -> root 계정 변경

현재 ubuntu를 -> root로 변경하기 

sudo su 

* sudo를 입력해서 할 수 있는 건 사용자들이 접근할 수 없다.

-> 아래 명령어로 다른 유저들도 나의 사이트에 접근가능하도록 만들기 

mysql_secure_installation

그 다음 mysql 비밀번호 생성 / 변경 

여러 질문들의 의미는 나중에 진짜 배포를 하게되면 ~을 삭제/수정해라 라는 의미, 일단 모두 y를 입력 !

mysql 설치 잘 되었는지 확인

use mysql

방금 생성한 password 입력해보기 / 명령창이 MariaDB[(none)]으로 바뀌어 있다. 

현재 database - mysql 이 생성되어 있고 안에 user 를 포함한 여러 테이블들이 존재함. 

이제 ubunt 계정에서도 쉽게 mysql 들어갈 수 있도록 설정을 조금 더 해주기 -> root 비번을 한 번 더 바꾸어주어야 한다. 

 

 

5. 한 번 더 user password 수정하기 (plugin 맞추기 위함)  

아래 명령어 실행 ** 아래 명령어는 mariadb 최신 버전이고 혹시 오류가 나오면 구버전 명령어로 실행시켜보기 

set password for 'root'@'localhost' = password('root');

* 구 버전 예시 

 

plugin 확인

select user, host, plugin from user;

plugin이 'mysql_native_password' 라면 성공 !! 

'mysql_native_password' 확인되었으면 아래 명령어 입력

flush privileges;

완료 ! 

 

이제 mysql 세팅을 끝냈으니 ubunt로 다시 나가기  

ctrl + c 
exit 

 

ubuntu에서 접속이 가능한지 확인 --> 해야 다른 곳에서도 접속이 가능하다. 

mysql -uroot -p'root'

 

 

 

 


 

 

 

 

3) express에서 작성한 코드  

Amazon AWS의 가상 서버인 LINUX 인스턴스와 연결하기   

 

편리성을 이유로 express node.js에서 코드를 먼저 작성하고 github에 올린 후, 다시 리눅스 환경에서 clone을 하여 배포할 수 있다. 

 Local-back ------github-----> Amazon AWS

 

1. Visual Studio  - back 폴더에 기본 server.js 코드 입력 / 기본 설치 시작 

터미널의 경로가 back 폴더에 있는지 확인하기 / 파일트리 생성 

터미널 : local_back 으로 들어가서 npm 시작 / 필요한 패키지 다운받기

npm init
npm i express

server.js 기본 코드 작성

const express = require('express')
const app = express()

app.get('/', (req,res)=>{
    res.send('hi')
})

app.listen(3000,()=>{
    console.log(`server start port: 3000`)
})

node server.js -> localhost:3000 에서 잘 열리는지 test ! 

 

 

2. github 저장소에 PUSH 하기 

** key pair는 꼭 .gitignore파일에 넣기 ! 

github 사용법 

https://blckchainetc.tistory.com/69?category=861126 

 

Git & Github 사용법 / 명령어 정리 / git 사용해서 github에 파일 올리기 / clone 다운받기 / 협업 시 사

(계속 업데이트 중 🌱) 먼저 할일 : 1. git 다운받기 git-scm.com/downloads Git - Downloads Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. G..

blckchainetc.tistory.com

 

 

3. AWS 가상서버 리눅스 인스턴스에서 코드 다운받기 

VS 터미널 파워셀 back 으로 돌아가서 (방금 코드 입력한 local_back이 아님 주의)  아래 명령어 실행

 cd ~
git clone [git 저장소 주소]
pwd                               // home/ubuntu 가 나오는지 확인 

아래 명령어로 현재 디렉토리 자세히 확인해 보기 

ls -al

최근 파일에 d 붙음 -> 요 파일 안으로 cd 명령어를 통해 들어가기 

cd [해당 파일 명] // <- 파일 명은 내가 만든 amazon_aws 인스턴스 이름이다.

현재 위치 디렉토리 상태 체크해보기 (.gitignore에 담은 node_modules가 없다 ) 

lns -al

npm 모두 다운하기 ( 이후 -> node_modules 가 생긴다) ** 여기서 다운 받는 곳 back ? 

npm install

코드를 잘 가져왔고 node_modules도 잘 생성되었다.  

이제 서버를 켜보자

node server.js

그다음 IP 가져오기 

amazon aws의 ec2 대시보드에서 진행 중인 인스턴스 쳌박스 클릭 -> 퍼블릭 IP 복사  ->  브라우저에 띄워보기 ! 

 

-> 오류 !  이유 : 포트 넘버가 서로 다르다. 

localhost에서 작성한 server.js 코드에서의 포트는 늘 써왔던 3000이었고 aws 인스턴스는 80 (http) 이었다. 

 

 

 

 

 4. 포트 넘버 변경하기  

text 파일로 열기 (vi) 

vi server.js

위와 같이 뜬다. 왼쪽의 3000을 오른쪽의 80으로 수정하려면 ' i ' 를 눌러서 수정해야 한다.

 

i 클릭  (INSERT MODE가 됨 - 수정 / 삭제 가능) 

i

오른쪽 사진처럼 80으로 변경 후 esc로 빠져나오기

[ esc ] 버튼

shit + : 를 누르고 wq! 를 입력하여 vi 모드에서 빠져나오기  ( ! 느낌표는 강제실행의 의미 ) 

shift : wq! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<- 잘 안보이지만 요렇게   :wq!  작성 

 

 

다시 node server.js 를 입력하면 또 에러가 난다. 이번 에러는 Permission denied (80번 포트에 대한) 

이유 : 관리가 명령으로 서버를 on 해주어야 한다 -> 관리자 지칭하는 sudo를 꼭 적어주기 

sudo node server.js

-> 다시 인스턴트 ip를 브라우저에 입력해서 실행해보기 

-> 이제 server.js에서 작성한 코드가 잘 뜬다 ! 

 

 

 

 

끄읏

반응형