AWS 서버 구축(Linux + Nginx, PHP, MySQL)

oyeon·2021년 4월 19일
2

Server

목록 보기
5/16
post-custom-banner

reference
https://luminitworld.tistory.com/81?category=975147
https://sangm1n.github.io/aws-start/

1. Linux

https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2

먼저 아마존 EC2 사이트에서 회원 가입을 하자.

이제부터 AWS에서 서버를 대여할 것이다. 따라서 새 인스턴스를 생성한다. OS는 Ubuntu 20.04 AMI로 선택했다. 인스턴스 유형은 t2.micro(프리티어)로 선택한다. 12개월간 공짜.

시키는대로 Linux 설치를 진행하다 보면 아래 창이 나온다.

키 페어 다운로드를 하여 얻어지는 '키 페어 이름'.pem 파일은 잘 관리해야 한다. 없어져서도, 외부에 노출 되서도 안 된다. AWS 서버 구축이 완료되면 인스턴스가 새로 생긴 것을 확인할 수 있다.

SFTP를 사용하기 위한 WinSCP 설치. SFTP는 SSH의 파일 전송 버전이다.

[WinSCP 실행 화면]

EC2에서 우리가 생성한 서버의 퍼블릭 IPv4 주소를 복사하여 호스트 이름에 넣어준다. ubuntu AMI의 경우 사용자 이름은 ubuntu 이다.

고급 설정의 인증 부분에 개인키 파일을 클릭해 아까 받았던 spring.pem를 찾는다. 시키는대로 따라가면 pem 파일 형식을 ppk로 변환시켜준다. 생성된 spring.ppk 파일을 개인키 파일에 추가하면 된다.

마지막으로 설정 값을 저장해 놓자. 왼쪽에 해당 설정 값이 리스트에 추가되어 이후에는 클릭만으로 접속할 수 있다.

AWS에서 빌린 Ubuntu 서버의 폴더 구조를 볼 수 있게 되었다. 빨간색 부분을 클릭하면 putty 콘솔이 나온다. 이제부터 이 putty 창에서 명령어를 실행시키면 된다.

2. Nginx, PHP, MySQL

1) Nginx

설치

~$ sudo apt update
~$ sudo apt install nginx

nginx가 잘 설치되었는지 크롬에서 서버의 퍼블릭 IPv4 주소로 접속해보자. 창이 안 나온다. why?

EC2 사이트의 보안 설정을 보면 인바운드 규칙에 22번 포트만 지정되어있기 때문이다. 따라서 아까 본 SFTP는 잘 되었지만, 아직 웹으로는 볼 수 없는 상태이다.

인바운드 규칙 추가

보안그룹 링크로 들어가 HTTP 유형의 인바운드 규칙을 추가하였다.

크롬 창에서 설치된 nginx 페이지가 보인다.

2) MySQL

설치

~$ sudo apt install mysql-server
~$ sudo mysql
mysql> exit

mysql로 들어가지는 것으로 설치가 잘 된 것을 확인할 수 있다.

설정

~$ sudo mysql_secure_installation

설치 진행 중 나오는 There are three levels of password validation policy:

질문에서 0, 1, 2 의 단계 중 1을 선택하였다. 이외의 질문들은 y로 넘어가면 된다. 이후 비밀번호를 입력한다.

~$ sudo mysql -u root -p
mysql> exit

설정한 비밀번호로 root 접근을 할 수 있게 되었다. 하지만, 아직 sudo를 붙여야만 실행되어 불편하다. sudo 권한 없이 mysql에 들어가도록 변경해보자.

~$ sudo mysql -u root -p
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user;

root의 authentication_string이 비어있고, plugin이 auth_socket인 것을 확인할 수 있다.

따라서 auth_socket으로 되어 있는 root plugin을 mysql_native_password로 바꿔준다.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호';

원하는 비밀번호를 입력했는데 현재 정책 요구조건에 맞지 않는다는 오류가 발생됐다.

아까 보안 설정을 하며 비밀번호 정책을 1단계로 설정해서 그렇다. 확인해보았더니 MEDIUM으로 되어있다. 다음 명령어를 사용해 단계를 낮추었다.

mysql> SET global validate_password.policy=LOW;

정책이 LOW로 완화된 것을 확인할 수 있다. 이제 다시 비밀번호를 변경하자.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호';
mysql> FLUSH PRIVILEGES;
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user;

원하는 비밀번호로 변경이 잘 된다. 이후 FLUSH PRIVILEGES; 명령어로 수정사항을 변경하고 확인한 결과 root의 authentication_string이 생겼고, plugin이 mysql_native_password로 변경된 것을 확인할 수 있다.

따라서 이제 다음과 같이 sudo 권한 없이도 mysql에 접속할 수 있다.

~$ mysql -u root -p
mysql> exit

3) PHP

설치

~$ sudo apt install php-fpm php-mysql

nginx에서는 php-fpm을 반드시 설치해야 한다. nginx와 php를 연동시키는데 필요하기 때문.

reference
https://alkhwa-113.tistory.com/entry/AWS-EC2%EC%97%90-PHP-fpm-%EC%84%A4%EC%B9%98?category=883690

설정

~$ cd /var/www/html/
/var/www/html$ ls
index.nginx-debian.html
/var/www/html$ sudo vi index.php
<?php
phpinfo();
?>
/var/www/html$ sudo vi /etc/nginx/sites-available/default

먼저 /var/www/html 경로에 phpinfo 정보를 띄우주는 index.php 파일을 만든다.

이후 /etc/nginx/sites-available 경로의 default에서 php 부분 주석을 해제한다.

/var/www/html$ sudo service nginx restart

nginx 서버를 restart 시키면 '퍼블릭 IPv4 주소'/index.php 경로로 들어가진다. phpinfo 띄우기 까지 완료.

profile
Enjoy to study
post-custom-banner

0개의 댓글