https://baekspace.tistory.com/122
AWS EC2를 이용한 서비스 배포 - 기초 1편
AWS 서버를 사용하기 위해서 회원가입부터 진행해야 한다. https://aws.amazon.com/ko/console/ AWS Management Console AWS Support 플랜은 AWS로 성공하는 데 도움이 되는 다양한 도구, 프로그램 및 전문 지식에 대한
baekspace.tistory.com

1. 인스턴스 탭에서 원하는 인스턴스를 체크하고 연결을 누른다.

2. 인스턴스 연결을 위한 정보가 적혀 있는 창이 뜬다. 뒤에 작업할 때 필요하니까 따로 창을 열어 둔다.

3. VS code를 열어 작업할 디렉토리를 연다.
작업할 디렉토리 내에 반드시 키페어 생성하면서 생긴 파일을 넣어두어야 한다.
그리고 이 파일은 외부로 공개되면 안 되기 때문에 github에 올리기 전에 gitignore에 파일을 추가해서 노출되지 않도록 하자.


4. VS Code의 터미널 창을 열고 하단에 있는 'SSH ~~~ ' 부분을 복사해서 붙여 넣어준다.
ssh -i "[키페어이름.pem]" ubuntu@[사용자정보].ap-northeast-2.compute.amazonaws.com
[] 안에 정보들은 사용자마다 다르니 2번에 있던 내용을 적어서 연결하면 된다.
** 만약 SSH 명령어 부분을 기입하고 접속하려고 했을 때 공개키라 안된다 라는 내용의 오류가 발생해서 사진과 같은 연결이 안 된다면
2번 과정에서 위에 줄에 있었던,
chmod 400 [키페어이름.pem]
를 먼저 적으면 공개적으로 키를 볼 수 없게 하여, 다시 ssh를 실행시키면 접속이 가능하다.
4-1. 인스턴스 연결 종료하기
exit
환경설정 하기
연결을 해서 나오는 터미널의 내용은 내 컴퓨터에 있는 리눅스 환경이 아닌 AWS의 서버 내에 내가 할당받은 컴퓨터의 정보이다.
여기에는 아직 Node, mysql 등이 지금 설정되어있지 않은 상태이다.
그렇기 때문에 내가 사용할 AWS의 인스턴스에도 설치해야 한다.
5. NodeJS 설치하기
5-1. 리눅스 패키지 관리 툴을 업데이트, curl 설치
sudo apt update
sudo apt upgrade -y
sudo apt install net-tools
sudo apt install curl
5-2. nvm 설치하기
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.bashrc
5-3. nvm 버전 확인하기
( 밑에서 계속 진행하겠지만, CLI환경에서 작업할 때는 눈에 바로 보이는 것이 없기 때문에 버전을 확인하면서 설치 유무를 확인할 수 있다)
nvm --version
5-4. nvm을 이용해 NodeJS LTS버전 설치하기
nvm install node --lts
5-5. 설치된 NodeJS 버전 확인하기
# Node 버전확인
node --version
#npm 버전확인
npm --version
5-6. Node 실행하고, 작동확인하기
node 명령어를 치면 node를 실행할 수 있고,
node에서는 console을 확인할 수 있기 때문에 console.log를 이용해 node 환경도 확인해 본다.

6. MySQL 설치하기
6-1. nvm을 이용하여 MySQL 설치하기
sudo apt install mysql-server -y
6-2. MySQL 버전 확인하기
mysql --version
6-3. MySQL 실행하기, 종료하기, 재실행하기
# 실행
sudo service mysql start
# 종료
sudo service mysql stop
# 재실행
sudo service mysql restart
# 실행 상태 확인하기
sudo service mysql status
6-4. MySQL 접속하기
설치한 후에 아직 계정이 없기 때문에 root계정을 이용해서 접속할 수 있다.
sudo mysql -uroot
비밀번호가 없기 때문에 -p는 없다.
접속이 되면 터미널이 mysql> 로 바뀌어서 접속상태를 알 수 있다.
-- sql 접속상태에서 종료할 때는
exit
6-5. MySQL root계정 비밀번호 설정하기
-- sql 접속 상태에서 [password] 부분에 원하는 값 넣기
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '[password]';
6-6. MySQL 계정 생성하기
-- root 계정 접속상태에서
create user '[username]'@'%' identified WITH mysql_native_password by '[password]'
6-7. 생성한 계정에 권한주기
-- root 계정
grant all privileges on *.* to '[username]'@'%' with grant option;
FLUSH PRIVILEGES;
새로운 컴퓨터에 mysql을 설치하는 과정이었다고 생각하면 되고, 이후 mysql을 켜서 작업하는 것은 기존에 하던 mysql과 동일하다.
7. MySQL 외부 접속 설정하기
# Ubuntu에서 작성
sudo netstat -ntlp | grep mysqld
명령어를 실행해서 보게 되면 127.0.0.1로 설정되어 있는 것을 외부접속을 하기 위해 0.0.0.0으로 바꿔줘야 한다.

# mysqld.cnf 파일 찾기
cd /etc/mysql/mysql.conf.d
ls
# mysqld.cnf 파일 열기
sudo vi mysqld.cnf
bind-address = 127.0.0.1을 0.0.0.0으로 바꿔준다.
vi모드에서 수정할 때는 `i`를 눌러 insert 모드로 들어가고 수정이 끝나면 esc키로 insert 모드를 종료하고, `:wq!` 로 저장 후 종료를 하면 된다.

수정 완료 후 MySQL 재 실행해서 변경사항 확인하기

포트 포워딩 (Port forwarding)
포트 포워딩 또는 포트 매핑은 컴퓨터 네트워크에서 패킷이 라우터나 방화벽과 같은 네트워크 게이트웨이를 가로지르는 동안 하나의 IP주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환의 응용이다. - 위키백과
간단하게 말하면 어떤 포트로 들어오는 데이터를 다른 포트로 바꿔서 다시 전송해 주는 작업이라고 생각하면 된다. 이를 이용한 장점은 포트를 숨길 수 있다는 장점이 있다.
포트 포워딩 세팅하기
# 현재 실행되고 있는 해당 포트에 대한 정보를 볼 수 있다.
sudo lsof -i :[port]
해당 포트에 대한 프로그램이 실행되고 있지 않으면 아무 내용이 없다.
mysql은 3306 포트를 쓰고 있기 때문에 mysql 실행 후 다시 위에 코드를 3306으로 확인해 보면 내용이 뜬다.
# 80번 포트로 들어오는 것을 3000번으로 돌리겠다는 의미
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-
port 3000
1편에서 보안그룹에서 80번 포트로 만들었기 때문에 80을 사용한 것이다. 그리고 내가 작성한 코드가 3000번 포트를 이용한 것이기 때문에 3000을 적은 것이다.
내가 서버를 열어서 사용자가 공개된 IP를 이용하면 80번 포트로 내 프로그램으로 데이터를 넘기는데, 내 프로그램을 3000번 포트를 이용하여 작성했기 때문에 80번 과 3000번이 맞지 않아서 원래는 데이터를 받지 못하지만, 80 포트로 들어오는 데이터를 3000 포트로 전달해 주는 포트포워딩 작업을 하면 내 프로그램을 쓸 수 있게 되는 것이다.
외부에서 서버 접속하여 확인하기
위 과정들을 다 끝내게 되면 AWS 인스턴스에서 확인할 수 있는 퍼블릭 IP를 이용하면 접속할 수 있다.

인스턴스 탭에서 원하는 인스턴스를 체크하고 하단의 정보를 보면 퍼블릭 IP를 확인할 수 있다.
이를 이용하여 브라우저에서 아래의 주소를 주소창에 적으면 내가 생성한 인스턴스로 내 프로그램을 실행시켜 배포할 수 있다.
(인터넷 주소창에 )
[public IP]/api/product
다음번엔
포그라운드 백그라운드에 대해 알아보려 한다.
'AWS' 카테고리의 다른 글
Nginx를 이용한 AWS 배포 (1) | 2023.03.21 |
---|---|
AWS-CLI를 이용한 EC2 인스턴스 만들기 (0) | 2023.03.21 |
AWS EC2를 이용한 서비스 배포 - 기초 1편 (0) | 2023.01.27 |