2주차 - 2) AWS를 활용한 서버 구축

변현섭·2023년 6월 5일
1

Ⅱ. 실습

1. AWS EC2 인스턴스 생성하기

① UMC server라는 이름으로 새로운 인스턴스를 만들어보자. OS로 Ubuntu를 선택하고 AMI는 프리티어 사용가능인 Ubuntu 20.04를 선택해주었다.

② 인스턴스 유형은 t2.micro로 설정해주었고 새 키페어 생성을 눌러 RSA와 .ppk방식으로 생성해주었다.

③ 트래픽 허용은 내 IP로 바꾸고 아래 항목들을 체크해주었다.

④ 스토리지를 30GiB로 설정하고, 고급 세부 정보 > 테넌시 설정에서 공유됨 – 공유된 하드웨어 인스턴스 실행을 선택한 후 인스턴스 생성을 완료한다.

⑤ 보안그룹 설정 - EC2화면 좌측에 네트워크 및 보안 > 보안그룹 > 작업 > 인바운드 규칙 편집으로 들어가서 launch-wizard-1에 HTTP, HTTPS, SSH 설정에 대한 3가지 규칙이 정상적으로 생성되었는지 확인한다.

※ 인바운드 규칙
인바운드규칙이란 서버에 접속할 때 적용되는 보안 규칙을 말한다. 이와 반대되는 개념으로 아웃바운드규칙도 있는데, 이는 서버에서 데이터가 나갈 때 적용되는 보안 규칙이다.

⑥ 탄력적 IP 할당 – 네트워크 및 보안 탭에서 탄력적 IP를 클릭해주자. 탄력적 IP주소할당을 클릭하고 나오는 초록색 완료창에서 이 탄력적 IP주소 연결을 클릭해준다.

※ 탄력적 IP
고정적인 공인 IP주소를 할당하여 인스턴스에 연결할 수 있는 서비스이다. 인스턴스의 퍼블릭 IP는 유동 IP주소이기 때문에 인스턴스가 중지되었다가 실행될 경우 기존에 할당받은 IP주소가 변경된다.
만약 DNS 도메인에 EC2 인스턴스의 IP주소를 연결해놓았는데, 이 IP주소가 바뀐다면 문제가 발생할 것이다. 이를 해결하고자 AWS에서는 한 번 할당받으면 절대 바뀌지 않는 Elastic IP를 제공한다.

할당받은 Elastic IP를 사용할 인스턴스를 선택하고 연결해주면 인스턴스 메뉴에서 IP가 할당받은 탄력적 IP로 변경되었음을 확인할 수 있다.

2. SSH 사용하여 Ubuntu 외부 접속하기

1) WinScp로 윈도우와 리눅스 간 파일 공유하기

리눅스에서 리눅스 또는 윈도우에서 윈도우로의 파일 이동은 쉽지만, 윈도우에서 리눅스(또는 리눅스에서 윈도우)로 파일전송은 쉽지 않다. 따라서 FTP(File Transfer Protocol)을 사용해야 하는데, 이 때 사용되는 프로그램이 바로 WinScp이다.

WinScp는 보안전송의 방법으로 SSH(secure shell)를 지원한다. 따라서 WinScp에 SSH키를 등록해주어야 한다.

① winscp를 실행하여 새로운 세션을 클릭한다.

② 파일 프로토콜을 SCP로 설정하고 호스트 이름에는 탄력적 IP주소를 입력한다.

③ 사용자 이름에는 ubuntu를 넣고 고급 설정에 들어가 SSH > 인증 > 개인키 파일에 AWS에서 인스턴스 생성 시 받은 key파일을 넣어주었다.

④ key파일이 나타나지 않는다면 key파일을 Drag & Drop으로 끌어오거나 모든 개인 키 파일을 조회로 설정을 변경해주면 된다.

⑤ 로그인 버튼을 클릭하면 아래와 같은 화면이 나오게 된다. 좌측에 보이는 것이 윈도우 파일이고 우측에 보이는 것이 호스트 IP와 연결된 ubuntu이다.

2) putty에서 원격으로 IP에 접속하기

① putty에 접속하여 hostname에 할당 받은 탄력적 IP를 입력한다.

② connection > data > auto login username을 ubuntu로 설정한다.

③ ssh > auth > credentials에 .ppk 키파일을 넣어준다.

④ 세션을 save해주면 나중에 load를 눌러 해당 환경을 사용할 수 있다. 접속하면 자동으로 로그인이 완료된다.

3. Nginx 패키지 설치 후 http 외부접속

$ sudo apt update
$ sudo apt install nginx
$ nginx -v 
$ sudo systemctl start nginx
$ sudo systemctl status nginx
$ sudo dpkg -l nginx 

명령을 수행하여 최신버전의 nginx를 패키지 설치할 수 있다. nginx -v 명령으로 설치를 확인할 수도 있다. nginx가 설치되면 sudo systemctl start nginx와 sudo systemctl status nginx 명령으로 nginx를 실행시킬 수 있다.

참고로 sudo dpkg -l nginx 명령으로도 nginx의 버전을 확인할 수 있다. 웹 브라우저 주소창에 탄력적 IP를 입력해보면 연결이 잘 되었음을 확인할 수 있을 것이다.

4. MySQL 패키지 설치 후 접속

$ sudo apt install mysql-server
$ dpkg -l | grep mysql-server
$ sudo mysql_secure_installation

sudo apt install mysql-server로 mysql를 설치할 수 있다. 설치가 정상적으로 완료되었는지 dpkg -l | grep mysql-server를 통해 확인할 수도 있다. sudo mysql_secure_installation 명령을 입력하여 비밀번호를 설정할 수 있다. 하지만 루트권한이 아니기 때문에 비밀번호 변경에 문제가 생길 것이다.

$ sudo mysql
$ ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password_by ‘변경에 실패한 비밀번호’;
 > quit
$ sudo mysql_secure_installation
$ sudo mysql -u root -p

duplicate session으로 새 터미널을 열고 sudo mysql 명령을 실행한다. mysql 실행 창에 ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password_by ‘변경에 실패한 비밀번호’; 를 입력하고 quit으로 빠져나오자. 다시 sudo mysql_secure_installation 명령을 입력한 후 비밀번호를 바꾸겠냐는 질문에 n으로 답해준다.

Disallow root login remotely?라는 질문에만 n으로 답하고 나머지는 y로 답하면 된다. sudo mysql -u root -p명령으로 방금 설정한 비밀번호를 입력해 콘솔에서 mysql에 접속할 수 있다.

5. PHP와 Nginx 연동하기

$ sudo apt update
$ sudo apt install php-fpm php-mysql 

sudo apt install php-fpm php-mysql 명령을 실행하여 PHP패키지를 설치한다. 만약 E: Unable to locate package nginx라는 에러가 뜬다면 sudo apt update 명령을 사용하면 정상 설치가 완료된다.

$ sudo vi /var/www/html/phpinfo.php

sudo vi /var/www/html/phpinfo.php를 실행한 후 아래와 같이 입력한다.

$ sudo vi sites-available/default

sudo vi sites-available/default를 입력한다.

아래와 같이 총 4줄(문장 3개와 중괄호)의 주석을 해제해주어야 한다.

이번에는 sudo vi ./nginx.conf에 들어가서 아래와 같이 server_names_hash…의 주석을 해제해주자. 위 주석을 해제하면 여러 호스트를 추가할 수 있게 된다.

마지막으로 sudo service nginx restart명령으로 설정의 변동사항을 적용시켜주자. IP주소 뒤에 /phpinfo.php를 추가하여 phpinfo페이지를 띄울 수 있다.

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글