본문 바로가기
서버세션/Server

[AWS 서버구축] Linux + Nginx + PHP + MySQL

by 김긍수 2021. 4. 19.

클라우드 컴퓨팅이란?

  • 기존의 물리적인 형태의 실물 컴퓨팅 리소스를 네트워크 기반 서비스 형태로 제공하는 것이다.
    • 개인용 컴퓨터가 아닌 더 성능이 뛰어난 컴퓨터나 저장장치 등의 컴퓨터 자원을 다른 곳에서 빌려 사용할 수 있도록 처리해주는 IT기술. 클라우드 컴퓨팅 자원에 대해 언제 어디서나 인터넷을 통해 손쉽게 접근이 가능하고 최소한의 노력으로 컴퓨터 자원을 늘리고 줄일 수 있다. 

클라우드 컴퓨팅은 세 가지로 나뉜다.

1. laas (Infrastructure as a Service)

  • 인프라스트럭쳐를 제공하는 서비스
  • 위 그림에서 볼 수 있듯이 사용자는 가상컴퓨터를 임대받아 그 위에 OS를 직접 올리고 상위계층만 구성하면 된다. 물리적인 서버, Network, 스토리지 등은 직접 준비하지 않아도 가능하다.
  • 가상 서버 or 스토리지 or 가상 네트워크 등의 리소스를 서비스 형태로 제공한다.
  • ex) AWS EC2, 구글 클라우드 플랫폼, 네이버 플랫폼, Azure Virtual Machines

 

2. paas(Platform as a Service)

  • 개발자가 응용 프로그램을 작성할 수 있도록 플랫폼 및 환경을 제공한다.
  • 어플리케이션에만 집중하므로 개발자가 빠르게 어플리케이션을 개발하고 서비스할 수 있다.
  • node.js, Java와 같은 런타임을 미리 깔아놔서 소스코만 적어서 빌드하고 클라우드에서 컴파일하여 결과만 가져온다.
  • ex) Google App Engine, SalesForce

2. SaaS (Software as a Service)

  • 설치할 필요없이 클라우드를 통해 제공되는 소프트웨어이다.
  • public cloud에 있는 소프트웨어를 웹 브라우저로 불러와서 언제든지 사용할 수 있다.
  • ex) 웹 메일, 구글 클라우드, 네이버 클라우드, 드롭 박스

AWS란? 

  • Amazon Web Services
  • 아마존에서 만든 클라우드 서비스로 가상 컴퓨터, 스토리지, 네트워크 인프라 등 여러 서비스를 제공한다.

 

1. AWS - EC2 인스턴스 생성하기 (우분투)

1. AWS 계정가입을 한다.

- 처음 가입하면 특정 범위(프리티어)에 한해서 12개월동안 무료이다.

 

2. 로그인 후 지역 설정을 한다. '서울'로 설정하여 서울에 있는 서버를 임대할 수 있다. 

3. 서버 구축을 위해서 'EC2 -> 인스턴스 -> 인스턴스 시작' 에 들어간다.

단계 1: Amazon Machine Image(AMI) 선택 // 운영체제(OS)

- Ubuntu Server 18.04 LTS (HVM), SSD Volume Type 를 선택한다.

 

 

단계 2: 인스턴스 유형 선택

- 우리는 무료로 학습을 위해 인스턴스를 생성하는 것이므로 기본으로 선택된 것(프리티어)을 그대로 사용한다. 

 

 

단계 3: 인스턴스 세부 정보 구성

- 따로 수정할 옵션 없이 그대로 다음으로 넘어간다.

 

 

단계 4: 스토리지 추가

- 프리티어 사용 가능 고객은 최대 30GB를 사용할 수 있다. 최대인 30GB로 설정해주었다.

 

단계 5: 태그 추가

- 수정, 추가 없이 [다음]을 클릭한다.

 

단계 6: 보안 그룹 구성

- 여러가지를 추가할 수 있지만, 우선 기본으로 설정되어있는 SSH을 가지고 시작한다. 

 

 

단계 7: 검토 및 기존 키 페어 선택 또는 새 키 페어 생성

- '나'만 EC2에 접속을 할 수 있도록 한건데 이 키페어를 통해서 EC2에 접속할 수 있다. 

- 새 키 페어 생성을 선택한 후 키페어 이름을 작성한다.

- 키 페어 다운로드를 클릭해서 다운받는다. + 키파일을 잃어버리면 접근할 수 없으므로 반드시 보관해야하고 외부에 노출되면 안된다.

- 다운로드가 완료되면 인스턴스 시작을 클릭한다.

 

 

단계 7: 인스턴스 생성 완료

- 이 과정으로 컴퓨터를 하나 임대했다고 보면 되고 인스턴스를 보기를 누르면 정상적으로 생성된걸 볼 수 있다.

2. AWS - EC2 인스턴스 탄력적 IP (고정IP)

위에서 만든 인스턴스의 퍼블릭 IP는 고정된 IP가 아닌 유동적인 IP주소이다.

EC2 인스턴스를 중지하고 다시 시작하게 되면 IP주소가 변경된다.

그렇기 때문에 유동적인 IP주소로는 실제 서비스를 운영할 수 없다.

안정적으로 서비스를 운영하기위해서는 인스턴스를 중지하고 재시작하더라도 항상 고정된 IP가 필요하다.

 

1. AWS 콘솔 접속

 

2. 네트워크 및 보안 -> 탄력적 IP 선택

3. [탄력적 IP 주소 할당] 버튼 클릭

 

4. Amazon의 IPv4 주소 풀이 기본적으로 선택되어져있다. 그대로 우측 하단에 [할당]버튼을 클릭한다.

5. 탄력적 IP 주소 확인

- 상단 메시지에 탄력적 IP주소가 할당되었습니다. 라고 출력된다.

- 탄력적 IP주소를 할당받았고 해당 고정 IP와 인스턴스 연결 작업을 해야한다.

- 우측 상단의 [탄력적 IP 주소 할당]을 클릭한다.

 

5. 탄력적 IP 주소 연결

 

 

 

+ 탄력적 IP 주소는 요금이 부과될 수 있다. 

요금에 대한 안내 <- 이 곳에서 확인 할 수 있다. 학습용으로 진행하는데 요금이 부과되지않도록 조심하자~!

 

 

 

3. WinSCP로 서버 접속

1. WinScp 실행

WinSCP 설치

- 위 링크에서 WinSCP 설치를 완료한 후 실행하면 해당 로그인 창이 뜰 것이다.

- 호스트 이름 : EC2 인스턴스의 퍼블릭 IP or 퍼블릭 DNS 를 입력한다.

- 사용자 이름 : AWS EC2 계정정보 : 접속할 계정 정보

- 비밀번호는 공란으로 둔다.

- EC2에는 키페어가 있어야 접속할 수 있기때문에 [고급]버튼을 클릭하여 키를 등록해야한다.

 

2. 키페어(pem파일) 업로드

- [고급] -> SSH 인증 -> 개인키 파일에 아까 인스턴스 생성 시 다운받은 pem파일을 업로드한다.

- puTTY 형식으로 변환하시겠습니까? -> [확인]

- 사용자 이름 하단 [저장] 후 [로그인]을 클릭한다.

 

 

3. 로그인 성공

로그인에 성공하면 AWS에서 임대한 서버의 디렉토리 구조를 확인할 수 있다. (ssh)

4. PuTTY (대표적인 원격 접속 프로그램)

- WinSCP 내에서 PuTTY 아이콘을 클릭하여 putty ssh 터미널을 열 수 있다. ( PuTTY 설치가 안되어 있다면 열리지않음)

- Putty ssh 터미널에서 필요한 Nginx, Mysql, php를 설치할 수 있다. 

 

3. ubuntu 18.04 - nginx php mysql 설치

패키지매니저를 통해 패키지설치 진행

설치과정

1. Nginx 웹 서버 설치

 

$ sudo apt update
$ sudo apt install nginx

+ 만약 방화벽이 실행중인 경우 포트를 열어주어야한다.

$ sudo ufw allow 'Nginx Full'		//Nginx에 대한 연결 허용
$ sudo ufw status 			// 변경사항 확인

 

설치가 완료되면 서버 주소(퍼블릭IP)로 접속해본다.

하지만 사이트에 접속하지 못한다. 왜냐하면 http에 해당하는 이 IP로 접속하고 싶다고 요청을 했지만, Http에 대한 인바운드 규칙이 없기 때문이다.

따라서 HTTP에 대한 인바운드 규칙을 추가해야한다.

(*** http 규칙 소스는 보안 상 내 ip로 해야하지만 일단 이렇게 진행***)

 

인바운드 규칙을 추가한 후 브라우저를 열어 해당 IP에 접속해보면 이 화면이 출력될 것이다. 성공!

2. Mysql 설치

1. MySQL 데이터베이스 소프트웨어 설치

- 구성이 아직 완료되지 않았다.

$ sudo apt install mysql-server	

2. MySQL 보안 설정

- 암호를 설정한다. 

$ sudo mysql_secure_installation

 

 

$ sudo mysql
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user;

# auth_socket으로 되어 있는 root plugin을 mysql_native_password로 바꿔준다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

# FLUSH PRIVEILEGS 서버가 허가 테이블을 다시 로드하고 새 변경사항을 적용하도록 지시
mysql> FLUSH PRIVILEGES;

# 각 사용자의 인증방법 확인. root가 더이상 auth_socket를 사용하지 않음을 확인
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user;
mysql> exit

 

암호로 인증하도록 root 사용자를 구성했으므로 sudo mysql로는 접근할 수 없다.

$ sudo mysql -u root -p
Enter password : 암호 입력

 

3. PHP 설치

$ sudo add-apt-repository universe

# php-fpm 모듈 및 추가 도우미 패키지 : PHP와 DB 백엔드와 통신할 수 있도록 허용
$ sudo apt install php-fpm php-mysql
# nginx 기본경로
$ cd /var/www/html

# phpinfo() 파일 생성
$ sudo vi index.php

+phpinfo() 코드 작성 후 저장

브라우저에 IP주소/index.php 로 이동해보면 index.php 다운로드가 된다. nginx와 연동이 안되었기때문에 phpinfo화면이 출력이 되지 않는 것이다. 

 

# 연동

# 기본 서버 설정파일
$ sudo vi /etc/nginx/sites-available/default

주석제거

$ sudo service nginx restart

다시 서버에 접속해보면 index.php 화면이 잘 출력되는 것을 확인할 수 있다.

 

 

 

 

 

 

 

참고

sangminlog.tistory.com/entry/compare-apache-nginx

Nginx,Apache 비교 - velog.io/@ksso730/Nginx-Apache-%EB%B9%84%EA%B5%90

클라우드 컴퓨팅 - goddaehee.tistory.com/174, wnsgml972.github.io/network/2018/08/14/network_cloud-computing/

www.manualfactory.net/10903

goddaehee.tistory.com/192

댓글