AWS EC2 - 서버 기본 구축

* 이 내용은 PHP, NGINX, MySQL 설치를 안내하는 글입니다. 얼마든지 다르게 서버를 구성할 수 있습니다.

 

aws 인스턴스를 할당받았으니, 이제는 서버를 구축할 차례다.

패키지 관리자를 이용해 설치할 계획이므로, 서버와 백엔드 언어, DBMS까지 모두 설치해보려고 한다.

아래 내용을 Terminal에 순서대로 입력하면서 따라오면 금방 설치를 마칠 수 있을 것이다.

 

기억해야 할 것은, SSH 접속을 기본 Terminal로 한다는 점!

만약 Windows 유저라면 PuTTY, WinSCP 등의 Tool을 이용하여 SSH 접속이 가능하다. (또는 GitBash 터미널을 이용하면 된다.)

 


 

0. 첫 SSH 접속

 

  • chmod 400 키 페어 이름.pem 명령 입력하기

: 이 명령을 입력하지 않으면 public key라는 이유로 permission denied 에러가 발생한다.

: 그러므로 이 명령을 입력해 키를 공개적으로 볼 수 없도록 해주자.

: aws 인스턴스 우클릭 - 연결 - SSH 탭에서 자신의 키가 입력된 명령을 복사할 수 있다.

: 이 명령은 키 페어가 있는 디렉토리로 이동한 후 입력해야 한다는 점을 잊지 말자.

 

  • 접속이 잘 되었다!

 

1. Nginx 설치

 

  • sudo apt-get update, sudo apt-get upgrade 명령 입력하기

: 위의 두 명령은 순서대로 '업그레이드할 수 있는 목록 불러오기', '불러온 목록대로 업그레이드하기' 이런 뜻이다.

: 진짜 하겠냐고 물어보면 Y를 입력하면 된다.

 

  • sudo apt-cache policy nginx 명령 입력하기

: 설치할 수 있는 nginx 버전을 출력하라는 뜻이고, 1.18.0-0ubuntu1 이 나왔다.

 

 

  • sudo apt-get install nginx , nginx -v 명령 입력하기

: nginx 설치 및 버전 확인 명령이다. 아래 사진처럼 아까 나왔던 1.18.0 버전이 설치됐다.

 

2. 인바운드 규칙 편집

 

  • aws 인스턴스 체크박스에 체크 - 보안 - 보안 그룹 클릭 - 인바운드 규칙 편집 - 유형 HTTP, 소스 위치 무관 선택 - 규칙 저장 클릭

 

  • 퍼블릭 IPv4 주소를 웹 브라우저에 입력하면 아래와 같은 화면이 출력된다.
  • 아래 화면은 index.nginx-debian.html 파일을 출력한 것으로, 이 파일은 /var/www/html 폴더에 있다.

3. php 설치

 

  • sudo apt-cache policy php 입력 : 7.4+75 버전이라고 나온다.

 

 

  • sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath 입력

: 아래 사진을 보면 빨간 색으로 failed가 나온다. 그 밖에도 뭔가 에러가 잔뜩 난 것 같지만 당연하다.

: 우리는 아파치가 아니라 nginx를 서버로 구축했으니까.

 

  • php --version 을 입력해보자 : php 7.4.3 (cli) 이 설치되었다고 나온다.

 

  • sudo apt-get install php7.4-cli php7.4-curl php7.4-gd php7.4-mysql php7.4-mbstring zip unzip 입력 : 모듈 설치
  • sudo service php7.4-fpm start로 php-fpm을 시작했다.

 

4. PHP 해석을 위한 Nginx 파일 설정

 

  • sudo vi /etc/nginx/sites-available/default 명령을 입력한다.

: 위 경로에 있는 default 파일을 vi 편집기로 열어 보여달라는 뜻이다.

 

 

  • default 파일을 아래와 같이 수정한다. 주석제거할 부분은 제거하고, 없는 부분은 추가한다.
server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    root /var/www/html; 
    index index.php index.html index.htm index.nginx-debian.html ; 
    server_name _;

    location / {
      try_files $uri $uri/ =404; 
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php7.2-fpm.sock;
       include fastcgi_params; 
       fastcgi_read_timeout 300;
    }

   location ~ /\.ht {
     deny all;
   }
}

 

  • 저장하고 nginx -t 명령으로 문법에 잘 맞는지 확인한다.
  • sudo service nginx restart 로 ngiinx를 재시작한다.

 

  • vi /var/www/html/index.php 명령으로 index.php 파일을 생성해 아래 내용을 입력하고 저장한다.
<?php
	phpinfo();
?>
  • 다시 웹 브라우저에서 aws 퍼블릭 IPv4 주소를 입력해보면 아래와 같은 화면이 나온다.

 

 

5. MySQL 설치

 

  • sudo apt-get install mysql-client mysql-server 명령 입력하기.

 

  • mysql —version 명령으로 버전 확인 : mysql  Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) 
  • service mysql start 명령으로 sql 서버 실행하기.

 

  • cd /usr/local
  • sudo mysql -u root -p 

: 이 명령을 입력하면 비밀번호를 입력하라는 문구가 나올텐데,

: 비밀번호를 설정하지 않았기 때문에 엔터를 누르면 mysql이 정상적으로 실행된다.

 

  • show databases;

 

  • ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘(설정할 비밀번호)’; 명령 입력하기.
  • mysql 종료를 위해서는 \q 를 입력하면 된다.

 

 

6. mysql 외부접속

 

  • cd /etc/mysql/mysql.conf.d 명령으로 디렉토리를 이동한 다음,
  • sudo vi mysqld.cnf 파일을 연다.
  • 아래 사진처럼 bind-address mysqlx-bind-address 0.0.0.0으로 변경한다.

 

  • mysql 외부접속을 위한 계정을 생성한다.
  • CREATE USER 'user1'@'%' IDENTIFIED BY '(설정할 user1 비밀번호)';
  • grant all privileges on *.* to 'user1'@'%' with grant option; = 이 명령으로 user1에게 권한을 부여해 주었다.

 

  • sudo service mysql restart 명령으로 mysql을 다시 시작했다.
  • 인바운드 규칙에서 mysql 유형을 선택해 아래와 같이 추가해 준다.

 

  • 외부 접속을 위해 DataGrip을 사용한다. (Workbench를 사용해도 된다.)

 

  • Name에는 원하는 이름을, Host에는 aws 퍼블릭 IPv4 주소를 넣고,
  • User에는 새로 만들었던 mysql 계정 id를 넣고 Password에는 비밀번호를 입력.
  • Test Connection을 눌러서 아래와 같이 초록색 체크가 나오면 성공적이다.
  • OK를 눌러 접속한다.

 

 

 

 

+ Heather Plus

 

aws EC2 인스턴스를 처음 대여하고 환경을 구축할 때에는 어렵게만 느껴질 것이다. 나도 처음에 그랬으니까.

나는 6번째로 인스턴스를 할당받아 Nginx, PHP, MySQL 설치 및 외부접속을 진행하는데도 어떤 에러가 났는지 확인해가며 진행한다.

기록해두었음에도 버전에 따라 조금씩 변경된 부분이 있기 때문이다.

 

그래도 환경을 무사히 세팅했으니 이제 서버를 구축했다고 할 수 있다!! 🎉

'Linux' 카테고리의 다른 글

AWS EC2 - 도메인 구매, 연결  (0) 2022.03.20
AWS - EC2  (0) 2022.03.20