[AWS+배포] ubuntu, nginx, APM 서버 구축

ubuntu, nginx, APM 서버 구축

AWS에서 EC2 생성 후 nginx, Apache, php, MySql을 설치하여 서버를 구축하고 도메인과 HTTPS를 적용해보자.

서버 구축 과정

이 포스팅은 다음과 같이 구성된다.

  • EC2에 nginx 설치 후 Apache, php를 설치하여 외부에서 접속
  • FileZilla에서 SFTP 접속
  • MySql 설치 후 외부에서 접속하기 (MySQL Workbench)
  • phpMyAdmin 설치 후 확인
  • Domain 적용 (가비아 이용)
  • HTTPS 적용 (let’s encrypt 사용)

EC2에 nginx 설치 후 Apache, php를 설치하여 외부에서 접속

EC2 인스턴스 생성

서울 리전(ap-northeast-2)에서 시작한다.

1

2

AWS에 접속하여 EC2로 들어가서 새로운 인스턴스를 만든다.
인스턴스의 OS는 Ubuntu 20.04 LTS로 프리 티어에서 사용 가능한 t2.micro로 설치하였다.

3
각 단계별 설정을 default로 넘기다가 스토리지 부분에선 프리 티어는 최대 30GB를 무료로 제공해 주므로 용량을 30으로 고친다.

4
인스턴스에 접속할 땐 키 페어 파일로 접속하는데, 이 파일이 노출되면 인스턴스를 타인이 마음대로 사용할 수 있으므로 새 키 페어를 생성하고 안전한 장소에 저장해 준다.

인바운드 규칙 설정

시간이 어느 정도 지나고 인스턴스가 생성되고 실행 중이라는 표시가 되어있으면, 접속하기 전에 인바운드 규칙을 설정해야 한다.
다음과 같이 설정해 주었다.

5

SSH 프로토콜22번 포트엔 무조건 다른 사람이 접속하면 안 되므로 막아두고, 현재 생성된 인스턴스를 접속하기 위한 80번과 추후에 설치할 MySQL 접속을 위한 3306번, HTTPS 접속을 위한 443번을 IP와 무관하게 접속할 수 있도록 인바운드 규칙을 추가해 주었다.

Mac OS의 Terminal로 접속

Mac OS 기준으로 인스턴스에 접속한다.

$ cd (pem 파일이 있는 경로)

터미널을 킨 뒤 EC2를 설치할 때 저장해둔 pem 파일이 있는 위치로 이동한다.

$ sudo chmod 400 (저장한 pem 파일)

chmod 400으로 파일의 권한을 수정해 준다.

$ ssh -i (pem 파일) ubuntu@(인스턴스의 퍼블릭 IPv4 주소)

예를 들어, ssh -i vividswan.pem ubuntu@XX.XX.XXX.XXX와 같이 입력해 주고 접속을 한다.

위 명령어를 입력 후 연결을 진행하겠냐는 물음에 yes를 입력하면 접속이 진행된다.

6

위와 같이 접속이 완료되었다.

$ sudo su

sudo가 필요한 명령어들이 많이 필요하므로 미리 입력하여 권한을 변경한다.

nginx, APM 관련 패키지 설치

sudo su 명령어를 입력한 상태로 진행한다.

$ apt-get update

패키지 업데이트를 우선 실행해 준다.

$ apt-get install nginx
$ apt-get install mysql-server
$ apt-get install php-fpm php-mysql

mySql은 우선 설치해두고 추후에 설정한다.

nginx로 php 파일 띄우기

패키지만 설치한 상태로 pc에서 인스턴스의 퍼블릭 IPv4 주소로 접속해보자.

$ service nginx start

7

nginx가 성공적으로 설치되었음을 확인할 수 있다.
이제 nginx 설정을 변경하고 php 파일을 띄워보자.

$ cd /var/www/html

nginx가 페이지를 보여주는 기본 경로로 이동한다.

$ vim phpinfo.php

테스트용 php 파일을 만들기 위해 vim 편집기로 만들고 다음과 같이 입력 후 저장(!wq) 해준다.

<?php
phpinfo();
?>

$ cd /etc/nginx/sites-available

nginx의 default 설정 파일이 있는 곳으로 이동해 준다.

$ vim default

설정 파일을 vim 편집기로 열어주고 다음의 주석 처리를 해제해 준다.

8
위가 default 상태이다.

9

이렇게 해제해 주면 되고, 혹시 이 부분에서 오류가 난다면 fastcgi_pass 부분의 php-fpm 버전을 확인해 주자.

10

위처럼 index의 바로 앞에 phpinfo.php를 추가하여 첫 페이지에 접속 시 나오는 default 페이지를 기존의 index 파일이 아닌 phpinfo.php 파일이 나올 수 있게 설정해 준다.

$ service nginx restart

다시 pc에서 인스턴스의 퍼블릭 IPv4 주소로 접속해보자.

11

phpinfo() 화면이 정상적으로 출력된다.

FileZilla에서 SFTP 접속

FileZilla를 설치 후 가장 왼쪽 상단의 사이트 관리자 버튼을 클릭해 주고 다음과 같이 접속 설정을 입력해 준다.

12

호스트(H) 란에는 인스턴스의 퍼블릭 IPv4 주소를 입력해 준다.
키 파일에는 앞서 다운로드한 pem 파일을 찾아서 선택해 준다.
배경색을 제외한 나머지란 은 똑같이 입력해 주자.
배경색은 취향껏 골라주면 된다.

13
입력을 정확히 하고 연결하면 위와 같이 SFTP 프로토콜로 PC와 리눅스 서버 간의 파일을 서로 주고받을 수 있는 환경이 만들어진다.

MySql 설치 후 외부에서 접속하기 (MySQL Workbench)

보안 설정

$ apt-get install mysql-server

앞서서 위의 명령어로 mysql을 패키지 설치해 주었다.
mysql에서는 처음에 보안 설정해 주는 것을 권장하고 있으므로 그에 관한 설정을 우선해 주자

$ mysql_secure_installation

다음의 명령어를 입력하자.

14

동의를 한 뒤 비밀번호를 설정해 주자.

그 후 MySql에 접속해보자.

$ mysql -u root -p

15

명령어를 입력하면 방금 설정한 password를 입력하라고 나오고 그 뒤 접속이 된다.

외부에서 접속할 수 있도록 설정

우선 EC2의 인스턴스 입장에선 앞에서 인바운드 규칙을 미리 설정했다시피, 3306 포트로 다른 IP가 접속할 수 있도록 설정되어 있다.
MySql 입장에서 외부 IP에서 접속할 수 있도록 설정해보자.

$ cd /etc/mysql/mysql.conf.d
$ vim mysqld.cnf

mySql 데몬을 설정할 수 있도록 vim 편집기를 연다.

16

위와 같이 bind-adress를 0.0.0.0으로 수정해 준 뒤 저장(!wq) 한다.

새 계정 권한 주기

외부에서 접속할 땐 root 계정으로 접속하는 것이 보안상 좋지 않으므로 계정을 새로 만들고 권한을 주자.

mysql> CREATE USER ‘계정 아이디’@’%’ IDENTIFIED BY ‘등록할 비밀번호’;
mysql> GRANT ALL PRIVILEGES ON . TO ‘vividswan’@’%’;

외부 Ip에서 접속할 수 있는 계정을 만든 뒤 외부 Ip와 모든 Database에 대한 권한을 주는 명령어이다.

접속 확인

17

Hostname엔 인스턴스의 Ip 주소를 입력한다.
Username에 권한을 주었던 계정 Id를 입력하고 하단의 Store in Keychain ...을 클릭해 준 뒤 비밀번호를 입력 후 Test Connection을 누른다.
입력 값이 유효하다면 테스트 연결이 성공할 것이고 그대로 접속을 할 수 있다.

phpMyAdmin 설치 후 확인

패키지 설치

$ apt install phpmyadmin

위 명령어로 패키지 설치해 준다.

18

데이터베이스에 대한 password 설정도 해주고, 위의 경우엔 nginx를 위한 지원이 따로 없으므로 둘 다 공란으로 설정한 뒤 Ok를 눌러준다.

명령어 입력

설치가 완료되면 다음의 명령어들을 입력한다.

$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
$ sudo chmod 775 -R /usr/share/phpmyadmin/

심볼릭 링크를 생성하여 브라우저의 phpMyAdmin 인터페이스에 액세스할 수 있게 해주고 권한을 설정해 준다.

심볼릭 링크(symbolic link) 란?

  • 링크를 연결하여 원본 파일을 직접 사용하는 것과 같은 효과를 내는 링크 (윈도우의 바로가기처럼)

인스턴스의 Ip 뒤에 /phpmyadmin을 붙여서 접속해보자.

19

로그인

27

로그인을 하면 다음과 같은 화면이 나온다.

Domain 적용 (가비아 이용)

가비아 접속

가비아 접속 후 로그인을 하고 중앙의 url을 표시해둔 창에 원하는 도메인을 입력한다.

~.shop으로 끝나는 도메인이 가격이 저렴하므로 해당 도메인으로 진행했다.

도메인 설정

20

DNS 관리로 들어가면 해당 화면이 나오며, 여기서 레코드 수정을 클릭해 준다.

21

다음과 같은 화면이 나오며 화면과 같이 설정값을 입력해 주고, 값/위치 항목에 도메인과 연결되기 원하는 IP 주소를 입력해 준다.

22

어느 정도 시간이 지난 뒤 해당 도메인으로 접속되면 Ip 주소를 쳤을 때와 동일하게 접속된다.

HTTPS 적용 (let’s encrypt 사용)

certbot으로 let's encrypt를 자동화하여 HTTPS를 적용해보자.

저장소 설정

$ apt-get update
$ apt-get install software-properties-common
$ add-apt-repository universe
$ add-apt-repository ppa:certbot/certbot
$ apt-get update

패키지 설치

apt-get update
apt-get install software-properties-common
add-apt-repository universe
apt-get update

certbot 설치

apt-get install certbot python3-certbot-nginx

SSL 인증 획득

$ sudo certbot --nginx -d example.com -d www.example.com
이런 식으로 -d 옵션으로 추가하는 방식의 명령어를 사용한다.

vividstudy.shop 이라는 도메인을 기준으로 진행한다.

$ certbot –nginx -d vividstudy.shop

해당 명령어를 도메인에 맞게 입력한다.

23

인증이 진행되면 리다이렉션에 대한 설정을 묻는다.
클라이언트에서 http로 접속해도 https로 접속되게 하는 것을 원하므로 2번을 선택한다.

24

인증이 완료되었다.

25

$ vim /etc/nginx/sites-available/default

nginx의 설정에도 Cerbot에 관련된 내용들이 추가되었음을 확인할 수 있다.

접속

26

http로 접속하면 리다이렉션되고, https로 잘 접속된 것을 확인할 수 있다.