가정 : aws의 계정이 존재하고 로그인이 되어있음을 전제하였다.
1. 콘솔에 ec2를 입력 후 EC2 클라우드의 가상 서버라고 되어 있는 것을 클릭한다.
2. 지역은 서울(ap-northeast-2)로 한 후, 왼쪽의 카테고리 목록에서 인스턴스-인스턴스를 클릭한다.
// 지역은 달라져도 큰 상관없다. 하지만 해당 서버가 실제 이용되는 지역으로 설정하는 것이 좋다.
3. 우측 상단의 인스턴스 시작을 클릭한다.
4. 이름에는 해당 인스턴스 구분명을 적고 애플리케이션 및 OS 이미지에서는 Ubuntu를 선택하고, 나머지는 기본값을 그대로 둔 후 인스턴스 시작을 클릭한다.
5. 아래와 같은 창이 나오면 해당 키페어 이름을 적고, 나머지는 기본값 그대로 한 후 키 페어 생성을 클릭한다.
6. 이와 같이 되면 인스턴스가 생성된 것이다.
7. 해당 인스턴스 창에 들어간 후 우측 상단의 연결을 클릭한다.
8. ssh 클라이언트라고 되어 있는 부분을 클릭하고 예 ssh -i "azit ~~~" 부분을 복사한다.
9. 아까 5.에서 생서된 .pem으로 된 키페어 파일을 인스턴스를 이용하려고 하는 곳의 동일 경로에 둔후, 8.에서 복사한 명령어를 터미널에 입력한다. 해당 명령어를 터미널에 입력하면 아래와 같이 접근이 거부되는 것을 확인할 수 있는데, 이는 키페어파일에 대한 권한을 수정하여 주면 된다.
아래의 명령어를 본인의 pem 파일명으로만 바꿔서 터미널에 입력한다.
> chmod 400 [key_name].pem
// 나의 경우 chmod 400 [azit-pem].pem
아래와 같이 나오면 접속이 완료된 것이다.
기본 세팅 + node.js + mysql 설치
10. 위와 같이 접속된 하면에서 아래의 명령어들을 차례로 입력한다.
> 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 --
> sudo apt-get install -y nodejs
> node -v. → node.js 가 제대로 설치되었는지 확인
> sudo apt-get install mariadb-server
> sudo apt-get install mariadb-client
// 질문이 나오면 무조건 y 누른다.
> mariadb --version → mysql이 제대로 설치되었는지 확인
mariadb 관련 설정
> sudo su → 관리자로 전환
> mysql_secure_installation
위의 명령어까지 입력시 아래와 같은 질문들이 나오는데
enter
y
y
mysql 비밀번호 설정하려는 것으로 입력한다.
y
y
y
y
> mysql -uroot -p[password]
// mysql 비밀번호로 설정하는 것을 입력한다.
아래와 같이 나오면 성공적으로 비밀번호가 변경된 것이다.
> use mysql
> SELECT user, host, plugin FROM user;
위의 명령어 입력시 아래와 같이 나오면 된다.
위와 같이 나오지 않는 경우
> UPDATE user SET plugin='mysql_native_password' WHERE user='root';
// 바꾸어 준 후 다시 확인
> SELECT user, host, plugin FROM user;
> FLUSH PRIVILEGES;
> ctrl + c
> exit
// 다시 초록 글씨가 되도록 돌아온다.
프로젝트 클론
> git clone [배포하려는 프로젝트 git 주소]
해당 프로젝트에 .env로 관리하는 환경변수가 있다면 vi.env로 파일을 만들어 추가해준다.
해당 프로젝트 실행시키는 포트 번호를 80으로 바꾸어 준다.
11. 포트 열어주기
인스턴스 - 보안 - 보안 그룹을 클릭한다.
12. 인바운드 규칙 편집 클릭
아래와 같이 추가해준 후 규칙 저장 클릭한다.
13. 해당 프로젝트 sudo npm run start 를 통해 실행시킨 후 해당 인스턴스의 ip를 통해 들어가면 완료
** 무중단 서버 실행
> sudo npm run start&
위와 같이 한 경우 해당 인스턴스를 나오면 서버가 꺼지게 된다.
pm2를 활용한 무중단 서버 실행
> sudo npm install -g pm2
> sudo npx pm2 start server.js
pm2 명령어
> sudo npx pm2 start server.js
> sudo npx pm2 stop server.js
> sudo npx pm2 monit
> sudo npx pm2 kill
> sudo npx pm2 list
> sudo npx pm2 status
======================ERROR ======================
1. typescript에서 styled-component 에 props에 따른 값 적용한 경우 발생하는 에러
// 아래와 같이 props 값에 대해 type을 명시해줌
const SellTab = Styled.div<{flag:boolean}>`
cursor:pointer;
font-size: 23px;
color: ${props => (props.flag == true ? '#000000b3' : '#a0a0a0b3')};
font-weight: ${props => (props.flag == true ? 'bold' : 'none')};
`
2. ssh 접속 시 connection timed out 나오면서 접속되지 않는 경우
1 ) 볼륨교체
참고 블로그https://yvvyoon.github.io/ubuntu/ufw-enable-ssh-timeout/
aws 참고
https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-linux-resource-over-utilization/
3. npm run build 중 멈추는 현상
// 메모리 부족으로 인한 문제
1) package.json파일 수정
아래와 같은 package.json파일의 scripts 부분의 내용을 수정
"scripts": {
"dev": "next",
"build": " GENERATE_SOURCEMAP=false next build",
"start": "next start",
"link-contracts": "cd lib && ln -s ../../build/contracts contracts"
},
// GENERATE_SOURCEMAP=false --> 이부분이 추가된 내용
2) 가상메모리 공간 만들어주기
1. sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
2. sudo mkswap /mnt/swapfile
3. sudo swapon /mnt/swapfile
출처: https://dundung.tistory.com/284 [DunDung] `
4. build후 npm run start까지 완료된 후에 해당 주소로 들어가도 화면이 나오는 않는 현상
// 포트 문제 추정
아래의 명령어 입력
> sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
-- 80번 포트를 3000번 포트로 리다이렉트 해주겠다는 의미인 듯...
5. ssh 접속시 에러
someone could be eavesdropping on you right now (man-in-the-middle attack)!
해결
// ssh 접속 전 터미널에 아래의 명령어 입력
// ip에는 접속하려는 ip를 넣어줌
>ssh-keygen -R [ IP or DomainName]
6. Error: listen EACCES: permission denied 0.0.0.0:80
npm run start 할때 sudo 를 붙이면 해결된다.
---------------
'AWS' 카테고리의 다른 글
[ AWS ] - CI/CD pipeline 구축해서 배포 자동화하기 (0) | 2022.06.03 |
---|---|
[ AWS ] - s3에 정적 웹사이트 호스팅하기 (0) | 2022.06.03 |
[ AWS ] - s3 버킷 생성하기 (0) | 2022.06.03 |
[ AWS ] - s3 사용하여 node.js 환경에서 이미지 저장하기 (0) | 2022.05.21 |
[ AWS ] - Apprunner 사용하여 배포하기 (0) | 2022.05.21 |