AWS 서버 구축하기 Part 1

안대현·2022년 5월 14일
0
post-thumbnail
post-custom-banner

Part 1. AWS EC2를 생성하고, 우분투 + NPM(Nginx + PHP + MySQL) 설치하기

1. AWS 인스턴스 생성

1-1. AWS 홈페이지에 들어가서 계정을 만든 뒤 로그인을 한다.

로그인을 하고 가장 먼저 해야 될 것은 지역을 서울로 설정하는 것이다!!

처음 시작할 때는 지역이 아마 미국 동부(버지니아 북부)로 설정되어 있을 것이다.
이 상태로 인스턴스를 생성하면 해당 지역으로 인스턴스가 발급되기 때문에 나중에 RDS 연결 또는 속도면에서 문제가 될 수 있으니 꼭 서울로 설정하도록 하자 🙏

1-2. EC2 인스턴스 생성하기

AWS에는 컨테이너, 스토리지, 모바일, 컴퓨팅 등 다양한 서비스가 지원된다.
서버를 생성하기 위해서는 클라우드 컴퓨팅 서비스를 지원하는 EC2로 이동한다.

처음 EC2에 방문한 것이라면 당연히 인스턴스가 없어 대시보드가 비어있을 것이다.
이제 인스턴스 시작 버튼을 눌러 인스턴스를 생성하자.

아래부터는 인스턴스 생성에 관한 설정들이다.
우선, 애플리케이션 및 OS 이미지를 선택해야 한다. 오른쪽의 더 많은 AMI 찾아보기를 클릭한 다음 원하는 OS 이미지를 찾아 선택하면 된다. 여기서는 ubuntu 18.04 LTS를 이용하겠다.

원하는 OS를 선택하면 아래 사진과 같이 AMI가 설정된다.

AWS에 처음 가입한 회원은 1년동안 무료로 지원되는 프리 티어 서비스를 사용할 수 있다! EC2를 생성할 때 여러 설정에서 프리 티어 사용 가능한 선택지를 확인한 뒤 무료로 이용하는 편이 좋을 것 같다 😁

다음은 인스턴스 유형 설정이다.
여러 유형이 있지만 프리 티어 사용이 가능한 마이크로 버전을 선택한다.

비밀 키를 다운로드 받기 위해 키 페어를 생성해야 한다.
생성된 키 페어는 잃어버리지 않도록 안전한 장소에 보관한다.
PuTTY 연결 등에 필요하니 꼭 잘 보관해두자!

네트워크 설정에서는 보안 그룹 규칙을 추가한다.
SSH가 기본으로 설정되어 있는데, 일단은 따로 더 추가하지 않고 넘어가겠다.
나중에 필요한 인바운드 규칙을 추가할 예정

스토리지 구성에서 프리 티어 유저는 최대 30GB의 SSD 스토리지를 사용할 수 있다고 나와 있어 최대치로 입력하였다.

이렇게 하면 인스턴스 생성을 위한 기본적인 설정이 끝난다 🙌

인스턴스 생성을 하면 아래와 같이 대시보드에 인스턴스가 추가된 것을 확인할 수 있다.
첫 생성시에는 몇 분이 지나야 인스턴스 상태가 실행 중으로 변할 것이니 기다려주자 ~

2. WinSCP, PuTTY 설치하기

2-1. WinSCP 설치하기

WinSCP는 윈도우에서 GUI 환경으로 FTP, SSH, SFTP를 사용할 수 있는 클라이언트 프로그램이다. 방금 생성한 서버에 간편히 접속할 수 있도록 WinSCP 사이트에서 프로그램을 설치한다.

WinSCP를 실행하면 로그인 창이 뜨는데 입력 폼에 아래와 같이 본인에게 맞는 값을 입력한다.
호스트 이름 : EC2 인스턴스의 Public IPv4 주소
포트 번호 : 22 (SSH 포트)
사용자 이름 : ubuntu

EC2 인스턴스의 Public IPv4 주소는 EC2 대시보드에서 본인의 인스턴스를 클릭하면 확인할 수 있다.

비밀번호는 인스턴스를 생성할 때 만들었던 키 페어로 대체한다!
비밀번호 입력 폼 아래의 '고급' 버튼을 눌러 고급 사이트 설정 창에 들어가면 왼쪽에 메뉴들이 표시된다. SSH 카테고리의 인증을 클릭한 뒤 개인키 파일란에 pem 파일을 불러온다.

이 때, 개인키를 PuTTY 형식으로 변환하겠냐는 창이 뜨는데 확인을 눌러준다.
WinSCP에서는 PuTTY 형식만 지원하므로 pem 확장자의 개인키를 ppk 확장자의 개인키로 변환한다.

해당 값을 모두 입력한 뒤, 로그인을 하면 아래 사진처럼 왼쪽에는 내 로컬 디렉토리가 표시되고 오른쪽에는 AWS에서 만든 서버의 디렉토리가 표시된다 👐

2-2. PuTTY 설치하기

우선, 위 과정에서 WinSCP 설치 및 SSH 연결이 성공했으니 다음으로 PuTTY를 설치한다.

PuTTY는 리눅스를 원격 제어할 때 사용하는 프로그램으로, PuTTY 사이트에서 해당 프로그램을 다운로드 받아준다.

3. NPM 설치 및 외부 접속 테스트 (feat. phpinfo)

3-1. PuTTY 실행하기

앞선 과정에서 WinSCP와 PuTTY 설치가 완료되었다면 이제 서버 접속을 시도할 차례이다.
WinSCP 상단에 위치한 Putty에서 열기 버튼을 클릭하면 아래와 같이 PuTTY가 실행된다.

3-2. Nginx 설치하기

아래 명령어로 웹 서버 소프트웨어인 Nginx 설치를 진행한다.

$ sudo apt update
$ sudo apt install nginx

Nginx 설치가 완료되면 웹 서버가 준비된 것이니, AWS EC2 인스턴스의 Public IPv4 주소를 크롬 URL 창에 입력해본다.

아마 위 과정대로 따라오고 있다면 연결이 되지 않을 것이다. 😅

인스턴스를 생성할 때, 인바운드 규칙으로 SSH 포트 번호인 22번 포트만 허용을 했기 때문에 WinSCP 연결만 허용되고 있는 것이다.

그렇다면 이제 HTTP 연결이 가능하도록 AWS 인스턴스 설정에 들어가서 HTTP에 대한 인바운드 규칙을 추가하여 준다. (인스턴스 - 보안 - 보안 그룹 - 인바운드 규칙 편집)


HTTP 인바운드 규칙을 추가한 뒤, 다시 크롬 URL에 서버 IP 주소를 입력하면 아래와 같이 Welcome to nginx! 문구가 반겨줄 것이다~

3-3. MySQL 설치하기

아래 명령어로 MySQL을 설치하고 사용자를 추가한다.

// MySQL 설치
$ sudo apt install mysql-server
// root 사용자로 mysql 로그인
$ sudo mysql -u root -p
// root 계정 비밀번호 변경
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '바꿀 비밀번호';

// 데이터베이스 추가
mysql> CREATE DATABASE mydatabase;

// 사용자 계정 추가
mysql> CREATE USER '계정이름'@'%' IDENTIFIED BY '계정 비밀번호';
mysql> flush privileges; // 변경 사항을 즉시 반영

// 사용자 계정에 권한 설정
mysql> GRANT ALL PRIVILEGES ON *.* TO '계정이름'@'%' WITH GRANT OPTION; 
mysql> flush privileges;

// 적용 결과 확인
mysql> SELECT User, Host, authentication_string FROM mysql.user;
  • flush privileges 명령어는 변경 사항을 즉시 반영하게 한다.
  • 권한 설정을 *.*로 하면 모든 DB, 모든 테이블에 대한 관리 권한이 부여된다.
    root 계정에 필적하는 권한을 갖게 되므로 실제 사용할 때는 특정 DB만 관리할 수 있도록 설정하자.
  • '계정이름'@'%'는 모든 IP 접근을 허용한다.
    이 역시 나중에 보안 상의 문제가 될 수 있으므로 실제로 사용할 때는 '%'부분에 특정 IP를 입력하도록 한다.

3-4. PHP 설치하기

아래 명령어로 PHP를 설치한다.

// PHP 설치
$ sudo apt install php-fpm php-mysql

제대로 설치되었는지 확인하기 위해 phpinfo를 띄어보자.
우선, cd 명령어를 사용하여 nginx의 디렉토리인 /var/www/html로 이동한 뒤, vi편집기를 사용하여 index.php를 아래와 같은 내용으로 추가한다. ( 저장하고 닫기 = :wq )

php와 nginx를 연동하기 위해 vi /etc/nginx/sites-available/default 명령어를 입력하여 vi 편집기로 들어간다.
아래 사진처럼 되도록 주석 처리되어 있던 줄의 #에 커서를 위치하여 x키를 눌러 제거하고, php7.0-fpm.sock 부분에서 버전을 php7.2로 수정한다.

이제 nginx와 php 연동 설정을 하였으니 sudo service nginx restart 명령어로 nginx를 재시작한 뒤, 핸드폰 데이터 사용 모드로 해당 주소에 외부 접근을 시도한다!

만일, sudo service nginx restart 명령어를 입력했을 때 오류가 발생한다면 /etc/nginx/sites-available/default를 vi 편집기로 수정할 때 오타가 발생했을 가능성이 크니 확인해보자
nginx 설정을 바꾼 뒤, sudo nginx -t 명령어를 사용하면 문법 테스트를 할 수도 있다!!

아래 사진과 같이 phpinfo 정보가 표시되면 외부 접속 성공이다 😆


다음 포스팅에서는 설치한 MySQL에 외부 접속하는 방법과 서버에 도메인을 적용하는 방법에 대해 알아보겠다!

profile
백엔드 개발자로 향하는 계단을 오르고 있습니다! 😎
post-custom-banner

0개의 댓글