본문 바로가기

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

[89일차] Amazon AWS 웹서버 구축 / 호스팅/ 배포 설정 비용

반응형

 

우리는 서버를 2대 사용 예정 (리액트, express)

리액트 : html 파일 1개, JS 파일 1개, CSS 파일 1개, 이미지들  (기본적으로)  => 웹팩으로 1개로 만들어줌 

webpack !== server 

리액트 : Single page application (페이지의 이동이 없다.) -> 페이지 여러개 있는 것처럼 보이는 것 뿐

 

프록시 서버 : 브라우저들이 프록시 서버에 요청하면 응답을 줌 

: 프록시 서버(영어: proxy server 프록시 서버)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 또한 외부와의 트래픽을 줄이게 됨으로써 네트워크 병목 현상을 방지하는 효과도 얻을 수 있게 된다. 

 

리액트 -> 정적인 파일들만 던져줌 / 프록시 서버가 리액트한테 툭툭 던져줄 것 

리눅스 사용 예정 

 

Front server : 리액트 

Back server : express(node.js, DB) -----실제는 원래 DB도 하나의 server 하지만 우리는 이번에 프론트,백만 나눌것 ! 

 

브라우저 ----------요청-------> Front server -----------요청이래~----------> Back end ------> DB

브라우저 <-------여기 응답-----Front server <--------ㅇㅇ요기 응답---------  Backend <------ DB

 

TCP 22번 80, 443port  이해하기 

22번 : SSH 관련 -  내 컴퓨터에서 server로 접속하는 아이  / 터미널로 상대방의 컴퓨터를 조작할 수 있게 함 

80번 : 우리가 늘 쓰던 3000번 포트를 이제 80번 포트로 사용 예정 -> 다른 컴퓨터에서 이 서버에 입장 가능 

          http와 관련된 포트 번호 (브라우저에서 쓰는 인터넷 통신 포트) 

443번 : https <- s 추가됨 


AMAZON AWS 배포 & KEY PAIR 생성 

 

1. amazon ec2 들어가서 회원가입 

회원가입할 때 무료 버전으로 들어가기 

12개월 무료 선택 

 

 

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=Cj0KCQjwub-HBhCyARIsAPctr7y9NRG-Jz6SNMzrv-y06xCLfyGjwI_xH8jwmISvp0043x0QK6rfjfEaAq7JEALw_wcB: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.  가상 머신 시작 click! 

 

 

 

 

 

 

 

 

3. Ubuntu server 20.02 LTS 선택 

 

 

 

 

 

 

 

4. 검토 및 시작 클릭 ! (디폴트 값으로 파란 버튼1) 

 

 

 

 

 

 

 

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

다른 사람들이 요 포트로 들어오면 허용하겠다. 의미 

0.0.0.0/0 의 의미 -> 어떤 IP 든 오게이~ 

규칙 기본(http, https)  추가    -> 검토 및 시작 클릭 

 

 

 

 

 

 

6. '시작하기' CLICK ! 

 

 

 

 

 

 

7. 새 키페어 생성 

키 페어 : IP / 비번 + 키 페어(암호키) 가 있어야 접속할 수 있게끔 허용 (열쇠같은 존재)

키 페어 없으면 접속이 안됨 ! 

키 페어 생성 + 이름 생성 

키 페어가 있다면 기존꺼 써도 됨 

 

 

visual studio 에 저장하고 gitignore 해놓기 ! 

(사진에 나온 front 가 아닌 back 에 저장해야함 )

다른 사람이 악용 가능 ** 하므로 꼭 gitignore 

 

터미널 명령어 파워셀도 front, back 으로 나누기 

↓↓ 요렇게 

 

 

 

 

-> 인스턴트 시작 

 

 

 

 

 

 

8.인스턴스 보기 

 

 

 

 

 

 

9. 이름 설정

 

 

 

 

 

 

10. 인스턴스 접속해보기 

VS로 돌아와서 터미널 back 폴더까지 들어오기 + 명령어 입력

해당 인스탄스 클릭 -> 연결 클릭 -> SSH 클라이언트 

여러개의 복사 가능한 것들이 나오는데 그 중 맨 아래의  예를 복사  (가장 마지막 것!) -> vs 터미널에 입력 , 엔터 -> 무슨 질문 나오면 yes 입력 

 

터미널 창에 초록색 글자가 나온다.  : 지금 접속이 됨

의미 : 계정 @ 주소값 

 

 

** ERROR pem 파일접속 시 접속 권한이 없었다 하면 아래 내용 참고 ! 

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

 

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

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

techsoda.net

 

 

 

 

 

 

 

리눅스 명령어

리눅스 명령어 
ls  현재 디렉토리 내용 보기 (현재 위치 기준) 
cd /  최상위 디렉토리로 
ls -al   
(-al같이 뒤에 띄어쓰기 후 붙는 건 옵션이라고 함)
디렉토리 상세하게 보기 
pwd 내 경로 보기 

나오는 명령 형식

d rewx r-x r-x  계정명 계정명 
root -> 최고 관리자만 조작할 수 있는 

앞에 알파벳의 의미 

d : 디렉토리

l : 바로가기 (symbolic link) 
아무것도 없는 경우 (-)  :  파일 이라는 뜻 
cd ~ : 우리가 사용할, 작업할 디렉토리 공간

 

 

 

 

12. Node.js, mysql 설치하기 (조금 긴 부분) 

 

Node.js 있는지 확인 명령 

node -v

mysql 있는지 확인 명령 

mysql 

없음

 

 

 

 

 

 

Node.js 다운받는 명령어

- 아래 5가지 명령어를 차례대로 입력하기 

sudo apt-get update
sudo apt-get install -y build-essetial
sudo apt-get install curl
curl -sL http://deb.nodesource.com/setup_14.x | sudo -E bash --
sudo apt-get install -y node.js

* 위의 명령어 실행 후 아래 명령어로 버전 확인 (다운 잘 되었는지 쳌) 

node -v 
npm -v

 sudo 뜻 : 최고 관리자 관련

4 번째 : 웹주소에 접근할 수 있는 node.js 14인 이유 : 우리가 설치한 node.js 도 14라서 ! 

 

 

 

 

MYSQL 설치 명령어

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

* 잘 설치되었는지 확인
mariadb --version

* DB도 server이기 때문에 server, client 설치 

 

 

 

 

계정 변경

현재 계정이 ubuntu 로 접근하고 있는데 아래 명령어 실행하면 최고 관리자로 실행하겠다 

sudo su

계정이 -> root로 바뀜 

* sudo를 입력해서 할 수 있는 건 사용자들이 접근할 수 없다. 다른 사용자가 접근할 수 있도록 아래 명령어 실행 

 

 

mysql_secure_installation
mysql_secure_installation

 

 

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

 

test용으로 하기 위한거고 설치를 좀 더 쉽게하기 위함이다 production environment 진짜 배포를 하게되면 삭제를해라 의미 같다. 일단은 y 입력 ! (일단 모두 y를 클릭하는데 내용을 읽어보면 좋을 것 같다) 

 

이것도 마찬가지로 test라는 이름의 데이터베이스로 누구나 접근할 수 있고 test를 위함이며 나중에 실제 고객들이 사용하게되면 이것을 삭제해라 

일단은 y 

 

모두 y를 클릭하고 설치 완료 ! 

 

-> mysql 잘 설치되었는지 확인

 

 

exit
mysql -uroot -p비번    //입장
use mysql   //mysql db로 입장 

방금 위에서 생성한 password 입력 

명령창이 MariaDB[(none)]> 으로 바뀌어 있다. 

 

 

 

 

ubunt계정에서도 쉽게 mysql 들어갈 수 있도록 설정 조금 더해주기

root의 비번을 한 번 더 바꿔줘야함 

 

show databases;

show tables;   (mysql database에 이미 tables 가 생성되어져 있다.)

 

테이블들 중 user password 수정하기 (무조건! 해야함)

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

-> mariadb 버전에 따라 해당 명령어가 달라질 수 있느니 오류나면 이 점 확인 ** 

ex)

 

 

 

Plugin 잘 되었는지 확인 

select user,host,plugin from user; 

여기서 plugin 내용이 mysql_native_password 인지 쳌 ! 

 

모두 잘 되었으면 마지막 명령어 입력하기

flush privileges;

mysql 세팅하려고 MariaDB 안으로 들어왔기 때문에 ubunt로 다시 나가기 

 

 

root 계정 접속된 상태에서 나가기 아래 명령어 차례로 입력

Ctrl-c
exit

 

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

 

mysql -uroot -proot

 

 

 

 

13. local back express 생성 -> github -> amazon AWS 

코드 구현의 불편함 때문에 local PC - > github upload -> server에서 코드를 clone해와서 사용할 예정 

 

터미널 - 새로운 파워셀 만들기 (name: local_back)  -> express용 ! 헷갈리지 말자

Visual studio 경로 : back폴더인지 확인 

Visual studio 터미널 :  local_back 로 들어가기 

아래 명령어 실행 

npm init
npm i express

back 안에 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 - local 에서 잘 열리는지 테스트 

잘 열림 ! 

 

 

-> 나의 git 저장소에 PUSH 

AMAZON AWS key pair는 꼭 gitignore 하기 *** 

 

 

-> 터미널 파워셀 back으로 돌아가서 (local_back 아님!! )  아래 세 명령어 실행 -> express 코드 가져오기 

cd ~ 
git clone [ git 주소 ]
pwd          //  --> home/ubuntu 가 나오는지 확인 
ls          // git repo 이름 잘 나오는지 확인 

 

ls -al 명령어로 현재 디렉토리 명령어 확인 -> 최근꺼에 d가 붙어있음  -> 요 파일 안에 들어갈 수 있게 되었따 

npm install을 위한 아래 명령어 실행

cd 파일 명     //해당 파일로 들어가기 
ls -al            // 다시 현재 상태 체크 ---> node_modules가 아마 없어야함. gitignore 에러로 가져와짐 
npm install     // npm 모두 다운 ------이후-----> node_modules가 생긴다.

node_modules 생김 

 

그리고 node server.js 명령어를 실행 -> 아직 외부IP가 접근할 수 있도록 설정하지 않음 

 

 

 

포트넘버 변경하기 

이제 amazon aws 의 EC2 대시보드로 들어가서 해당 진행 중인 인스턴스 체크박스 클릭 -> 퍼블릭 IP 복사한 것을 브라우저에 띄워보면 server가 나와야하나 아직 포트가 80으로 되어 있음 (express server port : 3000) 서로 다르기 때문에 server port ---> 80으로 바꿔주기 

 

 

 

포트 변경 위한 아래 명령어 실행  

vi server.js

* vi : text 파일을 열겠다.  

 

i 를 누르면 -> INSERT mode ------- 내용 수정 삭제 가능해진다. 

포트를 3000 -----> 80  으로 수정 후 esc 빠져 나오기

 

* esc - > i 를 누른 후 수정/삭제 INSERT 모드에서 빠져나오기 

* shift + : 누르고 wq! 입력 후 엔터 ----> 해당 vi 모드에서 아예 나오기 

 

! 느낌표는 강제 실행 

 

 

다시 node server.js 하면  에러 -> permission denied (80번 포트에 대한)

 

아래 명령어 실행 

sudo node server.js

관리자 명령없이 node server.js 실행이 안되기 떄문에 sudo를 꼭 적어주기 

server started 

 

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

 

 

참고용

 

 

끝.. 😇

 

반응형