본문 바로가기
Server

AWS 서버 구축하기(1) / Nginx, MySQL, php 설치 및 외부 접속

by 멍진 2022. 4. 21.

AWS란?

사용자들에게는 노출 되지 않고 개발자들이 자신의 어플리케이션에 사용가능한 서비스들을 제공하는 아마존 닷컴의 온라인 서비스이다.

AWS 서버 구축하기

aws

AWS 가입 시 주의할 점은 지역을 대한민국 서울로 하지 않으면 속도가 매우 느려진다는 점이다. 

가입 후 내 콘솔로 로그인을 하고, EC2 서비스에 서버를 구축할 것이다. 

AMI는 사용할 OS를 뜻한다. Ubuntu 20.04 LTS 를 선택하였다.

Arm 버전은 사용가능한 프리티어가 없으므로 x86 선택

프리티어 사용가능이라고 되어 있는 것을 선택해야 무료로 사용할 수 있다.

스토리지는 기본 8GB로 되어 있는데, 30GB까지 무료라고 하니, 일단 최대로 해주었다.

옆에 <종료시 삭제>를 꼭 체크해야, 인스턴스 종료시 무료인 30GB가 다시 풀린다.

보안 그룹 구성 단계는 누가 어떤 방식으로 이 인스턴스에 접근할 수 있도록 허용 할 것인지 규칙을 정하는 단계이다.

기본 세팅되어 있는 22번 포트 SSH 도 확인하고, 웹서버를 구축하는 것이기 때문에, HTTP가 이용하는 80번 포트를 규칙 추가 해준다. 

SSH란? 

원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다. 뜻 그대로 보안 셸이다. 기존의 유닉스 환경에서 사용되던 텔넷에서 암호화 기능을 추가해서 나온 프로토콜 이라고 한다. 기본 포트 번호는 22번이다.

인스턴스 생성시 다운 가능한 키페어는 절대 잃어버리면 안된다!

ssh 원격 접속을 시도할 때 해당 pem키 파일이 있는 디렉토리에서만 가능하다. 따라서 작업을 실행할 디렉토리에 잘 넣어두도록 하자.


다음으로는, 탄력적 IP를 생성해서, 만든 인스턴스에 연결해 줄 것이다.

탄력적 IP란?

우리가 설정한 인스턴스의 IPv4의 주소는 주기적으로 바뀌는데 탄력적 IP는 고정 퍼블릭 IPv4의 주소를 제공한다. 따라서 한번 생성하면 서버를 실행할 때 주기적으로 IP주소를 바꿔 주지 않아도 된다.

AWS에서 탄력적 IP 생성은 딱 한개 까지만 무료이기 때문에 유의 하도록 하자.

탄력적 IP를 생성했으면, 만든 인스턴스에 주소를 할당해 주면 된다.

인스턴스 생성 완료!

 

맥북 터미널을 켜고, 좀 전에 다운받은 pem키가 있는 디렉토리에서 ssh 명령어를 입력해 접속을 시도했다.

Permission denied

ERROR : Permissions 0644 for 'rc_web_server.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.

해결 : pem키의 권한이 너무 오픈 되어 있어서 발생한 오류. .pem파일의 권한을 owner만 가지도록 변경해주었다.

chmod 400 rc_web_server.pem

ssh 접속 성공

aws에서 만든 서버에 ssh 원격 접속을 성공했다.

서버와 내 컴퓨터 간의 파일 교환 등을 편리하게 도와줄 FTP 프로그램으로 FileZilla 를 다운받았다.

FTP(File Transfer Protocol) 란?

원격에 있는 서버에 파일을 주고 받을 때 사용하는 인터넷 통신 규약이다. 내 컴퓨터에 있는 파일과 계정을 제공하는 서버의 파일을 서로 이동시킬 수 있다. 여기에 보안이 추가된 것을 SFTP(Secure File transfer protocol) 라고 한다.

프로토콜을 SFTP로 선택하고, AWS계정에 생성한 인스턴스의 탄력적 IP 주소를 호스트로 넣었다.

로그온 유형은 키 파일로 다운받은 pem키를 선택해 주면 된다.

FileZilla 연결 화면

FileZilla 연결에 성공했다.


이제 내가 만든 서버에 NginX, MySQL, PHP 를 설치할 것이다.

Nginx 설치

$ sudo apt update
$ sudo apt install nginx

apt를 먼저 업데이트 하고, HTTP 웹 서버인 Nginx를 설치 해준다.

nginx 설치 완료

인스턴스 생성 할때, 보안 규칙으로 HTTP를 추가해주었기 때문에, 외부에서도 접속이 가능하다.

이제 검색창에 내 인스턴스의 탄력적 IP주소를 입력하면 어떤 위치에서도 80번 포트로 접근을 허용했기 때문에 접속이 가능한 것을 볼 수 있다. 내 컴퓨터, 핸드폰 등으로 해당 IP로 접속 했을 떄 Nginx 페이지가 뜨는 것을 확인 했다.

탄력적 IP로 접속


MySQL 설치

$ sudo apt install mysql-server
$ sudo mysql_secure_installation
$ sudo mysql

mysql 서버를 설치해 준 다음, 비밀번호와 보안 설정을 해준다.

보안설정 명령어를 입력하면 총 5가지의 질문이 나온다. 

  • VALIDATE PASSWORD PLUGIN을 사용할 것인가? : Y
    • 사용한다고 설정하면 설정하고 싶은 보안등급의 강도가 나온다. 0,1,2 중 난 1을 선택했고, 선택한 보안등급에 따른 비밀번호를 설정해준다. 
  • Anoymous User을 remove 할 것인가? : Y
  • 외부에서 root계정으로 접근 할 것인가? : Y
  • TestDB를 remove 할 것인가? : Y
  • privileges table을 reload 할 것인가? : Y

MySQL 접속 성공


PHP 설치

$ sudo apt install php-fpm php-mysql

여기서 php-fpm은 php와 nginx를 서로 연동시킬 때 필요한 것이라고 한다.

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

<?php
phpinfo();
?>
$ sudo service nginx restart

phpinfo.php 파일을 생성한 후 nginx를 재시작하고, 검색창에 인스턴스 IP주소/phpinfo.php를 입력했더니, 페이지가 뜨는 것이 아니라 phpinfo파일이 다운로드 되는 현상이 발생했다.

찾아보니 nginx와 php는 연동시킬 때 nginx의 기본 설정파일에 들어가서 수동으로 설정해주어야 한다고 한다.

$ cd /etc/nginx/sites-available
$ sudo vi default

location ~ \.php 부분을 사진과 같이 주석 해제 해 주었다.

다시 nginx를 재시작하고 내 인스턴스 ip/phpinfo.php 에 접속 해 보았더니, phpinfo 페이지가 잘 접속 되었다.

ip/phpinfo.php 내PC 접속

내 컴퓨터 이외에 핸드폰으로 외부 접속을 시도해도 잘 접속 된다!

phpinfo 핸드폰 접속

외부에서 서버에 접근해 phpinfo를 띄우는 것에 성공했다.

다음 글에서는 DataGrip을 이용해 MySQL 외부 접속을 해 볼 것이다.

댓글