Amazon Web Services
AWS 공식 자습서 사이트
❗️추가공부 : AWS 자습서 보고 좀 더 공부해보기
키 페어를 잃어버리면 EC2 인스턴스에 접속이 어려워지므로 안전한 위치에 저장해야 한다.
(* MI(Machine Image) : 가상 머신(VM) 인스턴스를 만드는 데 필요한 구성들을 저장해놓은 템플릿)
(* 프리 티어 : AWS 서비스 등록 후 12개월 동안 무료로 사용할 수 있는 사용자)
(* 키 페어 : 사용자가 SSH를 통해 안전하게 EC2 인스턴스에 접속할 수 있게 만드는 일종의 인증서)
EC2 인스턴스 대시보드에 생성한 인스턴스가 보인다면 성공!
처음에 EC2 인스턴스를 생성하여 서버를 구동시키면 고정 IP로 할당되지 않는다. 탄력적 IP를 이용하지 않으면 인스턴스(서버)를 중지하고 다시 실행시키면 IP가 변경되어 버린다. 이를 방지하기 위해 탄력적 IP(Elastic IP)를 이용해 고정 IP를 할당 받아서 사용한다.
AWS EC2 인스턴스를 원격으로 접근하고 서버의 파일과 폴더를 전송, 관리, 수정하기 위한 GUI 환경을 제공하는 WinSCP 프로그램을 활용해야 한다. 하지만 WinSCP가 Mac을 지원하지 않아서 본 포스팅에서는 같은 기능을 지원하는 FileZilla를 사용했다.
WincSCP와 FileZilla가 제공하는 프로토콜 기능을 FTP라고 한다.
File Transfer Protocol의 약자로, 사용자의 PC와 호스팅 서버 간 파일을 송수신해주는 프로그램이다. 서버에 있는 코드나 파일을 직접 열어서 수정할 수 있다. 기본 포트는 21로, 보안에 취약한 단점이 있다.
프로토콜 : 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 데이터를 주고받는 상호간에 정해진 규약이다.
TCP/IP : 인터넷을 사용하는 모든 통신의 기본적인 프로토콜. 응용 계층, 전송 계층, 인터넷 계층, 네트워크 접속 계층이 있다.
TCP, UDP : TCP/IP 프로토콜 중 전송 계층에 속하는 프로토콜이다. TCP는 신뢰성 있는 통신을 지원하고 UDP는 신뢰성을 보장할 수 없지만 속도가 빠르다.
HTTP, HTTPS : TCP/IP 프로토콜 중 응용 계층에 속한다. 응용 계층은 네트워크를 통한 실제 사용자 데이터를 처리하는 응용 프로그램으로 구성되는 계층이며, 사용자와의 직접적인 인터페이스를 제공한다.
FTPS(FTP-SSL) : FTP 서비스에 HTTPS와 같이 공개키 암호화 방식을 더한 프로토콜이다.
SFTP(SSH-FTP) : Secure File Transfer Protocol을 의미한다. FTP는 파일을 그냥 전송하지만 SFTP는 전송 데이터를 암호화한다. 포트 번호는 22번이다.
DNS : Domain Name Service/Server의 약자. 도메인 네임을 IP주소로 변환하여 특정 웹서버, FTP 서버등의 도메인 네임이 설정되어있는 서버에 접속할 수 있도록 도와주는 프로토콜이다.
프로토콜에 대한 더 자세한 설명 by IT's me
가장 많이 쓰이는 프로토콜 총정리 by 아찌
잘 정리된 자료가 많으므로 참고하기
리눅스 기본 명령어/자주 쓰이는 명령어 by HaejoonLee
$ sudo apt-get update
저장소 내 패키지 정보 최신으로 업데이트
$ apt list --upgradable
업그레이드 가능한 패키지 목록 확인
$ sudo apt upgrade
패키지 최신 정보를 바탕으로 패키지를 최신으로 업그레이드
$ sudo apt autoremove
패키지 업그레이드 후 불필요해진 패키지를 자동으로 삭제
패키지 설치 전 전체적으로 업데이트 및 업그레이드하는 작업을 해주는 것이 좋다.
$ cat /etc/issue
우분투의 버전을 확인한다. 본 포스팅의 버전은 Ubuntu 20.04.2 LTS였습니다. 구글에 검색하실 때 우분투의 버전과 같이 검색해주세요!
좀 더 자세한 설명은 이전 포스팅을 참고 → APM으로-웹서버-구축하기#01-기본-세팅
$ sudo su
$ apt install nginx
위의 명령어를 입력하여 설치한다.
EC2 인스턴스의 퍼블릭 IPv4 주소로 접근했을 때 Welcome to Nginx 페이지가 뜬다면 설치가 완료된 것이다.
이 때 페이지가 뜨지 않는다면, 인바운드 규칙을 설정해주지 않았기 때문이다.
이 때 22 포트만 열려있는 것을 확인할 수 있는데, 이 22(SFTP) 포트를 통해 FileZilla와 WinSCP로 서버 접근이 가능하다.
$ sudo apt install mysql-server
이 때의 root 비밀번호는 MySQL의 비밀번호 정책 요구조건에 맞춰 작성하는 것이 좋다. validate_password_policy가 LOW라면 패스워드 8자 이상, MEDIUM이라면 8자 이상 + 대문자, 소문자, 특수문자가 모두 포함, HIGH라면 특정 단어가 포함되지 않은 비밀번호를 요구한다.
처음 root 비밀번호를 설정할 때는 이러한 요구조건에 상관없이 설정할 수 있는데, 그렇다고 1234같은 간단한 번호로 설정하면 나중에 에러가 난다.
비밀번호 변경으로 해결할 수 있지만 꽤 번거롭다.
$ sudo mysql -u root -p
위 명령어로 mysql을 실행하고 exit
명령어로 종료한다.
sudo 권한 없이 MySQL 접근하기 by oyeon
$ sudo apt install php-fpm php-mysql
위 명령어로 설치한다.
php-fpm을 설치하는 이유 : Nginx는 자체적인 PHP 모듈이 없으므로 설치하여 Nginx와 PHP를 연동시켜 PHP 페이지를 출력하기 위함이다. PHP FastCGI Process Manager의 약자이다.
웹서버와 동적인 페이지 : nginx 웹서버만으로는 동적인 페이지 구현이 어렵다.
(* 동적인 페이지 : 로그인과 게시글 등록 등의 기능이 이뤄지는 접속할 때마다 변하는 페이지이다.)
웹서버는 정적인 html 웹문서 파일을 웹브라우저에 전송하는 역할만 수행하므로 동적인 페이지 구성이 어렵다.
CGI : 동적인 페이지 구현을 위해 웹서버 외부의 프로그램에서 처리한다.
웹서버에서 요청을 받아 그 요청을 외부 프로그램에 넘겨주면, 외부 프로그램은 프로그램 파일을 읽어 html로 반환하는 단계를 거치며, 이를 CGI라 한다. php-fpm이 CGI에 속한다.
FastCGI : CGI는 요청할때마다 새로운 프로세스 생성하여 구동하므로 부하가 심하고 처리가 느리다. FastCGI는 CGI의 단점을 보완해 이미 생성한 프로세스를 재활용하여 처리가 빠르다.
$ cd /var/www/html/
$ sudo vi /etc/nginx/sites-available/default
Nginx의 기본 경로로 이동한 뒤 기본 설정 파일을 vi 편집기로 수정한다.
파일의 54번째 줄을 주석을 해제하여 다음과 같이 수정한다. i
로 입력 모드로 진입하여 수정한 뒤 esc로 종료, :wq
명령어를 입력하여 파일을 저장한 뒤 명령 모드로 빠져나온다.
파일을 수정함으로써 PHP 페이지에 들어갔을 때 PHP 파일 자체가 다운로드되지 않고 PHP-FPM 모듈을 통해서 웹 페이지에 PHP 파일이 보여진다.
$ cd /var/www/html/
$ sudo vi index.php
Nginx의 기본 경로로 이동한 뒤 phpinfo를 표시할 index.php 파일을 생성한다.
<?php
phpinfo();
?>
파일에 이와 같이 입력한 뒤 :wq
명령어를 통해 저장한 뒤 명령 모드로 빠져나온다.
$ sudo service nginx restart
변경된 설정을 적용해주기 위해 Nginx를 재실행한다.
'[AWS EC2 인스턴스퍼블릭 IPv4 주소]/index.php'로 접근했을 때 phpinfo 창이 나온다면 성공!
성공적으로 AWS EC2 인스턴스에 LEMP 스택을 이용한 서버를 구축했다!