한번에 끝내는 AWS Amazon Linux 웹서버세팅 (아마존리눅스 서버세팅)

HYEONG HWAN, MUN/ 12월 17, 2017/ 미분류/ 6 comments

리눅스라는 컴퓨터 운영체제가 있습니다.

GPLv2 를 따르며 오픈소스이며, 매우 오래된 역사를 가지고 있습니다. 오랜 시간을 통해 검증이 된 운영체제이죠.

리눅스의 파생 운영체제로는 Ubuntu, Debian, CentOS, Fedora, Amazon Linux, Android, AIX, Redhat 등이 있습니다.

Ubuntu, Debian 는 데비안 계열의 운영체제이며 최신기술의 빠른 적용과 자동화가 특징인 운영체제입니다.

CentOS, Fedora, Amazon Linux, Android, AIX, Redhat 은 CentOS 계열이라고 하는데, 이 운영체제들 끼리는 명령어 및 폴더의 구조가 비슷합니다.

CentOS 및 Fedora 는 무료 오픈소스인데, 최신기술 적용이 심각하게 느립니다.

Redhat 은 유료 운영체제입니다. 1년에 120만원쯤 사용료가 있습니다.

Android 는 모바일 운영체제입니다.

AIX 는 IBM 서버에서만 쓸 수 있는 운영체제입니다.

Amazon Linux 는 Amazon Web Service 에서만 쓸 수 있는 운영체제입니다.

 

패키지 업데이트가 엄청나게 느린 CentOS 와는 다르게, Amazon Linux 가  최신 소프트웨어 설치를 제공하므로, 좋은 운영체제로 판단하고 이것의 설치법을 여기에 적어봅니다.

 

매우 자세히 적지만, 중간중간 과정생략이 있습니다.

 

* 서버 세팅방법

먼저 AWS 에 가입이 되어 있어야 합니다.

https://ec2.amazonaws.com

 

1. 운영체제 선택

Amazon Linux AMI(Amazon Machine Image) 를 선택합니다. 서버 생성 첫페이지 목록에서 고르세요.

Amazon Linux 2 라는 것이 생겨서 살펴봤는데, 아직 실사용하기엔 문제가 있어보이더군요. Amazon Linux AMI 를 선택합니다.

 

2. 기타 설정은 생략합니다. 사양만 잘 고르고 다음다음 누르시면 됩니다.

아무튼 쉘에 로그인

 

3. 현재 운영체제에 설치되어 있는 프로그램 최신버전 패치

# yum update

Amazon Linux 는 CentOS 계열이며 패키지 관리자 프로그램으로 yum 을 사용합니다.

 

4. 시스템 시간 설정 - Linux Timezone Setting

# vi /etc/sysconfig/clock

UTC 를 찾아서 Asia/Seoul 로 변경

이 부분을 찾아서

이렇게 변경.

 

다음의 명령어도 실행합니다.

# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

시간 확인

# date

 

5. Nginx 웹서버 설치

어떤 버전이 설치되는지 확인하기

# yum info nginx

1.12.1 버전이 설치되겠네요. 충분히 최신버전입니다.

 

# yum install nginx nginx-mod-http-geoip
# service nginx start

 

http://당신의서버아이피/ 로 접속해서

이 화면이 나오면 됩니다.

 

+ 추가 설정 : 방문자의 위치 정보를 알려주는 모듈을 설치합니다.

# cd /usr/share/GeoIP
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gzip -d GeoLiteCity.dat.gz
# rm GeoLiteCity.dat.gz

 

6. PHP-FPM 설치

php 패키지 검색

# yum search php

 

많이 나올텐데

php56 또는 php70 또는 php71 을 설치하세요.

php 7.2 는 호환성 이슈가 있어서 설치하는 것을 추천하지 않습니다.

 

이 블로그 글에서는 php 7.1 을 설치하겠습니다.

# yum install php71-fpm

패키지 설치시에 어떤 것들이 추가로 설치되는지 한번쯤을 봐보세요.

 

* 널리 쓰이는 PHP 모듈 설치

# yum install php71-curl php71-mbstring php71-mcrypt php71-gd

추가로 설치하고 싶은 모듈이 있으면 yum search 명령어로 패키지명 확인 후 설치해보세요.

 

# service php-fpm-7.1 start

연동작업은 나중에 합니다.

 

 

7. MYSQL 설치

DB 서버 설치는 다루지 않겠습니다. 아마도 RDS 를 쓰겠죠.

여기서는 MYSQL 클라이언트 프로그램만 설치합니다.

# yum install mysql56
# mysql

이렇게 에러 메세지가 나오면 정상입니다.

 

* PHP MYSQL native driver 설치

# yum install php71-mysqlnd

php 에서 mysqli 및 pdo 함수를 사용할 수 있게 됩니다.

 

8. PHP Default timezone 설정하기

php 의 date 함수가 참조하는 timezone 을 설정합니다.

어느 파일을 수정해야 하는지 탐색
# cat /etc/php-7.1.d/php.ini
# ll /etc/php.ini
# ll /etc/alternatives/php.ini

 

결과적으로 php 콘솔에서 참조하는 파일은 /etc/php-7.1.ini 이고, php-fpm 에서 참조하는 파일은 /etc/php-fpm-7.1.conf 입니다.

# vi /etc/php-7.1.ini
# vi /etc/php-fpm-7.1.conf

 

date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.

k21

이 값을 찾아서

 

k22

이렇게 변경.

 

9. 부팅시 자동실행 설정

자동으로 실행되는 서비스목록 확인하기

# chkconfig --list

저 2개의 서비스의 자동실행을 켜야 합니다.

 

# chkconfig nginx on
# chkconfig php-fpm-7.1 on

# chkconfig --list

 

* 테스트를 위해서 재부팅
# reboot

 

재부팅 후 다음 명령어로 확인

# service nginx status
# service php-fpm-7.1 status

 

10. 연동 설정

nginx 에서 php-fpm 으로 변수를 전달하는 파일(fastcgi_params) 수정
# vi /etc/nginx/fastcgi_params

https://blog.lael.be/demo-generator/ami-nginx/fastcgi_params.php 이 링크 문서에 쓰여진 내용대로 수정합니다.

 

일치하지 않는 도메인 요청 연결 사이트 (기본사이트) 수정
# vi /etc/nginx/conf.d/default.conf

https://blog.lael.be/demo-generator/ami-nginx/default.conf.php 의 문서를 참조합니다.

이 글에서는 첫번째 옵션일치하지 않는 도메인 모두 차단을 사용하겠습니다.

 

nginx 환경설정 수정

nginx.conf 의 기본값이 조금 이상하므로 다음과 같이 수정합니다. 왜 이렇게 바꾸는지 설명은 생략합니다. 적당히 이해해보세요.

# vi /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;    다음 위치에   } 괄호를 입력하여 구문을 종료하고, 그 다음 내용을 모두 삭제한다.

그 후 그림과 같이 다음 구문 추가

    gzip on;
    gzip_min_length  10240;
    gzip_buffers  32 32k;
    gzip_comp_level 9;
    gzip_types    text/plain application/x-javascript text/xml text/css;
    gzip_vary on;

    server_tokens off;

    geoip_country  /usr/share/GeoIP/GeoIP.dat;
    geoip_city     /usr/share/GeoIP/GeoLiteCity.dat;

최종적으로 이런 모습이어야 합니다.

 

제대로 작업했는지 확인 후 서비스 재시작

# service nginx configtest
# service nginx restart

 

 

11. 웹 사용자 추가

사용자 추가

# adduser myuser1

사용자 비밀번호 설정

# passwd myuser1

웹서버 사용을 위해서 권한 설정

# chmod 701 /home/myuser1

사용자 전환 후 웹 디렉토리 생성

# su -l myuser1
# mkdir www
# exit

 

12. 사용자 php-fpm 추가

https://blog.lael.be/demo-generator/ami-nginx/php-fpm-user.php 을 보고 추가합니다.

사용자당 1개의 파일을 작성해야 합니다.

# vi /etc/php-fpm-7.1.d/myuser1.conf

/etc/php-fpm-7.1.d/ 위치에 기본 파일 (www.conf) 이 있는데 그대로 내버려둡니다.

 

13. 사용자 nginx 파일 추가

https://blog.lael.be/demo-generator/ami-nginx/my-example-site.com.php 을 보고 설정합니다.

사이트 주소, 웹루트 디렉토리, 사용자 아이디를 입력합니다.

# vi /etc/nginx/conf.d/samplesite.com.conf

 

14. 설정파일 적용 및 테스트

# service nginx restart
# service php-fpm-7.1 restart

 

/home/myuser1/www 웹루트 위치에 적절한 파일을 업로드한 후에 웹브라우저로 접속해보세요.

세팅 완료!!

이제 원하는 서비스를 구동하시면 됩니다.

6 Comments

  1. 라엘님
    mariaDB를 사용하지 않고
    Mysql을 사용하신 특별한 이유가 있는지 궁금해요~

    1. 사실 둘다 똑같아요. 아무거나 선택한 겁니다.
      서버는 1년 무료 체험이 가능하면 EC2 t2.micro + RDS 사용하시고 (무료니까),
      무료 체험이 안되면 아마존 콘솔에서 lightsail 검색하셔서, 10달러짜리나 20달러짜리 사용하세요.

  2. 안녕하세요 가장 먼저 좋은 자료 공유해주셔서 감사합니다.
    다름이 아니라 html 안에 php 소스를 넣어 웹브라우저에 접속하려하는데
    에러 없이 php 소스 동작만 생략되어 출력됩니다.
    예를 들어
    startfinish
    처럼 구성되어 있다면 startfinish 이렇게 출력되는데
    해결 방안을 얻을 수 있을까요?

    1. 예가 “ ” 입니다.

      1. 안녕하세요.
        html 에서 php 동작하게 하는 방법은 알지만, 매우매우 권장하지 않는 방법이므로 알려드리지는 않습니다.
        php 코드를 동작하게 하려면 php 파일에 작성해주세요.

        1. 무슨 말씀이신지 잘 이해되었습니다. 조언 감사합니다!

Leave a Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*