AWS nginx, mariadb, php7 설정
쉬는 날은 삽질을 하고 싶을까? 날씨가 추워서 밖에 나가기 싫으니까 아침부터 이상한 삽질을 하느라.. 아이폰 건들다가 자료 모두 날리고 나니까.. 오늘은 왠지 사고치기 좋은 날인 듯한 착각에 전부터 해보고 싶던 AWS 계정을 신청하고 설정을 시도했다. 처음하는 거라 가상머신을 세팅하고 지우고 여러 번 반복을 했다. AWS EC2에 nginx, mariadb, php7을 사용할 수 있도록 설정하는 게 목표였는데.. 어떻게 하다보니까 결국은 원하는 바를 성취할 수 있었다. 그리고 목표했던 바를 이뤘으니 나중에 잊지 않도록 기록으로 남겨야 한다.
EC2 가상머신에 아래 AMI를 설치했다. 이것을 기준으로 설정 과정이 진행된다.
타임존 변경
$ sudo mv /etc/localtime /etc/localtime_old
$ sudo cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
위와 같이 타임존을 변경한다.
준비
$ wget http://mirrors.mediatemple.net/remi/enterprise/remi-release-6.rpm
$ sudo rpm -ivh remi-release-6.rpm
$ sudo vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list - created 2016-03-01 06:35 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
php7 설치 때 추가로 설치될 패키지를 위해 epel 레포지토리를 사용할 수 있도록 설정한다. enabled=0 을 enabled=1 로 변경했다.
패키지 설치
$ sudo yum install nginx
$ sudo yum install MariaDB-server MariaDB-client
$ sudo yum install php70 php70-php-fpm php70-php-gd php70-php-imap php70-php-ldap php70-php-mbstring php70-php-mcrypt php70-php-mysqlnd php70-php-opcache php70-php-pdo php70-php-dba php70-php-bcmath php70-php-soap php70-php-xml php70-php-xmlrpc
nginx 기본설정 변경
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
Server 블럭의 위와 같은 Document Root 설정을 아래와 같이 변경한다.
root /usr/share/nginx/html;
index index.php index.html, index.htm;
Document Root 설정을 변경하지 않고 사용할 경우는 아래 location ~ .php$ { } 블럭 안에 root /usr/share/nginx/html; 와 같이 PHP 파일이 있는 경로를 직접 설정해줘야 한다.
php-fpm 연동을 위한 nginx 설정
location ~ \.php$ {
try_files $uri =404;
fastcgi_cache off;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm.sock;
include mime.types;
}
nginx 의 다른 설정을 생략하고 php-fpm 연동을 위한 설정이다. php-fpm 연동 후 php 파일이 실행되지 않고 빈 화면으로 표시되는 경우는 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 설정을 추가해주면 해결되는 경우가 많다.
php-fpm pool 설정
[default]
user = nobody
group = nobody
listen = /var/run/php-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
;listen.allowed_clients = 127.0.0.1
;process.priority = -19
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500
;request_terminate_timeout = 0
;rlimit_files = 1024
;rlimit_core = 0
;security.limit_extensions = .php .php3 .php4 .php5
nginx의 socket 파일과 php-fpm 의 socket 파일의 위치가 동일해야 nginx 에서 php 파일을 처리할 수 있다. 각 서비스 데몬의 설정을 끝나면 각 데몬을 실행한다.
서비스 데몬 실행
$ sudo service nginx start
$ sudo service php70-php-fpm start
$ sudo service mysql start
MariaDB 기본설정
# mysqladmin -u root password 'root-passwod'
# mysql -u root -p
MariaDB [(none)]> use mysql;
MariaDB [mysql]> create user 'user'@'localhost' identified by 'user-password';
DB 서버의 root 비번을 변경하고 user 라는 사용자 아이디도 추가를 했다. user 아이디 추가는 꼭 필요한 과정은 아니며 root 비밀번호 변경은 필수 과정이다.
전체적으로 DigitalOcean 서비스에 CentOS7 환경으로 서버를 설정하는 https://chicpro.dev/12605 과 유사하다. 다만 AWS EC2에 사용한 AMI 는 CentOS6 기반인 것으로 보이며 그래서 MariaDB 설치 때 CentOS6 패키지를 설치해야 정상적으로 설치가 됐다. 마찬가지로 PHP7 역시 CentOS6 기반 패캐지를 설치해야만 했다.
AWS 프리 티어 : http://aws.amazon.com/ko/free/