코이팅

AWS EC2에 MySQL, PHP 설치 방법 본문

Server

AWS EC2에 MySQL, PHP 설치 방법

코이팅 2023. 2. 5. 10:22
728x90
반응형

1. AWS EC2에 MySQL 설치 방법

✅ 개발환경

    • macOS Ventura 13.1
    • Ubuntu Server 22.04 LTS
    • MySQL 8.0.32
    • PHP 8.1.2

👉🏻 AWS EC2 설치를 안했다면 아래 링크를 통해 먼저 설치를 진행하세요!

https://king-ja.tistory.com/99

 

AWS EC2에 (Linux 기반)Ubuntu 20.04LTS 인스턴스 생성하기

1. AWS란? 1) AWS란? aws는 Amazon Web Services의 약자로, 아마존닷컴에서 운영하는 Cloud Computing Platform이다. 다른 웹 사이트나 클라이언트측 응용 프로그램에 대해 온라인 서비스를 제공하고 있습니다. 2)

king-ja.tistory.com

1) AWS EC2 인스턴스에 접속합니다.

  • 인스턴스 탭에서 인스턴스 선택 후 연결버튼을 클릭하고, SSH 클라이언트 탭을 클릭합니다.
  • 1️⃣번 '예'를 복사하고 터미널을 켜서 키 페어 파일이 있는 폴더 위치에서 명령어를 붙여넣어 실행합니다.

인스턴스 선택 후 연결 버튼 클릭
SSH 클라이언트 탭 클릭
1️⃣번 명령어 복사
접속 성공 화면

2) MySQL 설치를 시작합니다.

아래 명령어를 입력하면 설치를 진행합니다.

$ sudo apt install mysql-server

중간에 'Do you want to continue?' 라고 뜨면서 멈춰있다면 대문자 'Y'나 소문자 'y'를 입력합니다.

y 입력

모두 설치 되었다면 아래 명령어를 통해 잘 설치 됐는지 확인합니다.

$ mysql --version // mysql 버전 확인

성공 화면

3) MySQL에 접속해봅니다.

아래 명령어를 입력해봅니다.

$ sudo mysql // mysql 접속
mysql> exit // mysql 접속 종료

처음에는 root에 대한 비밀번호가 설정되어 있지 않기 때문에 잘 접속이 됩니다. root에 대한 비밀번호 및 보안설정을 해주겠습니다.

접속 & 접속 종료 화면

3) MySQL에 비밀번호 및 보안을 설정합니다.

다시 MySQL 서버에 접속하여 아래 명령어를 입력합니다.

$ sudo mysql_secure_installation

해당 명령어를 입력하면 6가지 질문이 나옵니다.

- 첫 번째는 VALIDATE PASSWORD PLUGIN을 사용할지 물어봅니다.

개발용/테스트 장비에서 mysql server를 설치할때는 비밀번호가 길면 귀찮으니, 아무키나 입력해서 플러그인을 비활성화 하는 것도 좋지만, production용 라이브 장비라면 Y 또는 Yes를 입력해서 안전한 비밀번호를 사용하는게 좋습니다.

- 두 번째로 root 비밀번호를 물으면, 원하는 root 비밀번호를 동일하게 두번 입력해 줍니다.

앞서 VALIDATE PASSWORD PLUGIN을 활성화 했다면 대소문자, 숫자, 특수문자 1개 이상을 섞어서 8자 이상의 비밀번호를 만들어야합니다.

- 세 번째로 Anonymous User를 삭제할지 물으면 Y를 입력해서 삭제해 줍니다.

- 네 번째는 외부에서 root 계정으로 접근을 허용할지 묻습니다.

각자 환경에 따라 다르겠지만, 대부분 외부에서 root 계정으로 DB에 접근할 일은 많지 않을 것으로 예상되기 때문에 Y를 입력해서 접근하지 못하도록 합니다. 혹여 필요하시다면 N으로 외부 접근을 허용하시면 됩니다.

- 다섯 번째로 Test DB를 삭제할지 물으면 필요 없으니 Y를 입력해서 삭제해 줍니다.

필요 없으니 Y 입력해서 삭제합니다.

- 마지막으로 privileges table을 reload 할지 물으면 Y를 입력해서 reload 해줍니다.

Y를 입력합니다.

( 참조 : joonyon.tistory.com/96 )

 

🚨에러

: ... Failed! error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

에러 발생

secure_installation에서 비밀번호를 설정하면 root 권한이 아닌 상태로 비밀번호를 설정했기 때문에 root 권한으로 비밀번호를 설정하라는 뜻입니다. root 권한으로 들어가지도 못하면서 secure_installation에서 root 비밀번호를 설정하라는 말도 안되는 설정 때문에 생기는 오류입니다. mysql을 켜서 root 비밀번호를 직접 설정합니다. 다음과 같이 해서 해결합니다.

  • 해당 터미널 창을 꺼서 mysql_secure_installation 을 꺼버립니다.(열려있으면 root로 인지 하지 않음)
  • 다시 터미널 창을 켠 후 sudo mysql을 입력해 mysql에 들어갑니다.
  • 비밀번호를 변경합니다. 비밀번호를 만들때에도 비밀번호 정책에 맞게 해주어야 합니다. 대소문자, 숫자, 특수문자를 섞어 넣어서 8자이상으로 만들어야 합니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '새로운비밀번호';
  • mysql을 나온후 다시 mysql_secure_installation을 켜서 설정을 진행합니다. 비밀번호 입력하고 들어가면 비밀번호를 바꿀지를 물어보는데 n을 눌러 다음 스텝으로 넘어가시기 바랍니다.
    ** Y를 누르면 다시 비밀번호를 설정하는 란으로 바뀌고 비밀번호를 바꾸면 다시 오류가 나와면서 무한반복이 됩니다. 위 과정을 처음부터 다시 해야합니다.

비밀번호 변경 성공 화면

4) MySQL에 비밀번호 및 보안을 설정합니다.

mysql을 exit 하고 다시 아래 명령어를 입력한 후 변경된 비밀번호를 사용하면 접속이 잘 되는 것을 확인할 수 있습니다. 성공⭕️

$ mysql -u root -p
Enter password : 변경한 암호 입력

접속 성공 화면

2. AWS EC2에 PHP 설치 방법

1) PHP 설치를 시작합니다.

  • 아래 명령어를 입력하면 설치를 진행합니다.
  • 중간에 'Do you want to continue?' 라고 뜨면서 멈춰있다면 대문자 'Y'나 소문자 'y'를 입력합니다.
$ sudo apt install php-fpm php-mysql

💊 php-fpm?

위의 명령어를 보면 php-fpm이라는 것을 설치합니다. php-fpm은 웹서버인 nginx와 php가 서로 연동시키는데 필요합니다. apache 서버와 비교하자면 apache 웹서버는 자체 내에서 php와 연동시키게 해주는 모듈을 configuration 파일로 자동으로 설정을 하도록 하고 있는 반면, nginx에서는 php와 연동할 수 있도록 하는 php-fpm을 따로 설치해주고 nginx configuration파일에서 설정을 수동으로 해줘야 합니다.

 

php-fpm의 필요성을 느끼기 위해 php 파일부터 만들어보겠습니다.

$ cd /var/www/html // 폴더 위치 이동
$ sudo vim index.php // php 파일 생성

<?php
phpinfo();
?>

:wq

php 파일 생성

주소창에 ec2인스턴스주소/index.php 로 접근해보면 phpinfo창은 안 뜨고 index.php가 다운로드 됩니다. 이는 아직 nginx와 php가 연동이 되지 않았다는 것입니다.

index.php 파일이 다운로드 받아짐

2) Nginx와 PHP를 연동합니다.

  • nginx의 기본 설정 파일은 /etc/nginx/sites-available/default 입니다.
  • 해당 디렉터리에 nginx의 루트 디렉터리 설정, 서버 설정 등 많은 중요한 내용들이 담겨 있습니다. 
  • 아래 명령어를 입력합니다.
$ sudo vi /etc/nginx/sites-available/default

php연동을 위해서 56, 57, 60번째 주석을 해제시키고 92번째 줄에 '}'를 입력 후 저장합니다.

변경 전
변경 후

아래 사진처럼 92번 줄에 '}'를 입력하고 저장합니다. 

92번째 줄에 '}' 입력 후 저장

이 과정을 하지 않으면 nginx를 restart할 때 이런 🚨오류가 뜹니다. 

'Job for nginx.service failed because the control process exited with error code.

See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.'

 

※ php 버전 확인 방법은 아래 명령어를 터미널에 입력하세요.

  • 꼭 설치한 버전으로 위의 사진처럼 변경해주셔야 합니다❗️
$ php -v // php 버전 확인

php 설치 버전 확인

nginx와 php-8.1fpm을 restart 합니다.

$ sudo service nginx restart // nginx 재시작
$ sudo service php8.1-fpm restart // php 재시작

 

⭕️ 다시 ec2인스턴스주소/index.php로 접근하면 phpinfo가 잘 나오는 것을 확인할 수 있습니다.

  • 퍼블릭 IPv4 주소를 확인 후 url에 ex) 1.23.45.67/index.php 입력합니다.

퍼블릭 IPv4 주소 확인
성공 화면!

🚨에러 : 502 Bad Gateway nginx/1.18.0 (Ubuntu)

만약 잘 나오지 않고 502 Bad Gateway nginx/1.18.0 (Ubuntu)라고 뜬다면 아래 명령어를 입력 후 아래 사진처럼 설정이 되어있는지 확인합니다. 다르다면 변경 후 저장하고 다시 ec2인스턴스주소/index.php로 접근합니다.

$ sudo vi /etc/nginx/nginx.conf

사진 처럼 설정 변경

 

728x90
반응형
Comments