🧸 복잡하고 복잡스런 아마존 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
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/
리눅스 명령어 찍먹
리눅스 명령어 | |
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;
'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
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 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에서 작성한 코드가 잘 뜬다 !
끄읏
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[ 90일차 복습1 ] Amazon AWS 리눅스 백그라운드로 서버 돌리기 / Node.js 에서 pm2 사용하기 (0) | 2021.07.19 |
---|---|
[90일차]20210719 리눅스 백그라운드로 서버 돌리기 / pm2 / postman CRUD / Restful API (0) | 2021.07.19 |
[89일차] Amazon AWS 웹서버 구축 / 호스팅/ 배포 설정 비용 (0) | 2021.07.16 |
[88일차 복습] 리액트 댓글 수정 삭제 (0) | 2021.07.15 |
[88일차]20210715 리액트 댓글 수정 삭제 (0) | 2021.07.15 |