Dico

Vagrant 설정(PHP7.2 + mysql + nginx)

  • Lovefield

안녕하세요 Lovefield 입니다.

오늘은 블로그를 개편하기 위해 사용했던 vagrant 설정 방법을 정리해 보았습니다.

---

vagrant 버전 : 2.0.2

Oracle VM VirtualBox 버전 : 5.2.6 r120293 (Qt 5.6.2)

사용한 box : ubuntu/trusty64

---

그리고 리눅스 내부에서는 모두 관리자 모드로 사용했기에 기본적으로 su를 실행해주시기 바랍니다.

관리자의 기본 비밀번호는 vagrant입니다.

1. box 다운로드

먼저 box를 기반으로 설정을 시작했기 때문에 vagrant box를 다운로드 받아줍니다.

vagrant box add ubuntu/trusty64

설치 후에는 vagrant box list로 확인이 가능합니다.

2. box 설치 및 vagrant init

box가 있으니 이제 설치를 시작합니다.

원하는 폴더에서 혹은 폴더를 생성하신 후, PowerShell을 사용합니다.

해당 경로로 이동 후 vagrant init를 실행해줍니다.

자 그러면 Vagrantfile 이 생성되는데요.

이 녀석을 열어서 아랫부분과 같이 설정해줍니다.

config.vm.box = "ubuntu/trusty64"

사용할 box를 저희가 다운로드한 box로 변경한 겁니다.

그다음 다음 명령어를 입력해줍니다.

vagrant up --provider virtualbox

이 명령어는 vagrant 실행이 처음일 경우(설치가 안되어있으면) 설치를 진행하고 구동이 되며, 설치되어있다면 구동만 합니다.

설치 후에는 vagrant ssh로 접근이 가능하며 기본 비밀번호는 vagrant 입니다.

버전에 따라서 비밀번호 없이 접근할 수 있기도 합니다.

3. 개인 패키지 어카이브 설치

php 는 ubuntu에서 공식적으로 지원하는 버전이 있습니다.

7.2는 아직 미지원이라 개인 패키지 어카이브를 끌어다 설치할 수 있습니다.

add-apt-repository ppa:ondrej/php

개인 저장소를 추가했으니 이제 업데이트와 업그레이드가 필요합니다.

apt-get update
apt-get upgrade

만약 위의 두 가지를 실행하는 데 오류가 낫다면 처음부터 다시 해주셔야 합니다.

오류가 조금이라도 나면 나중에 실행이 안되더라고요.

4. php, mysql, nginx 다운로드

저는 한 번에 설치해놓고 각각 설정 후에 화면을 확인했던 터라, 이렇게 적었습니다.

하나만 설치하고 설정하셔도 무방합니다. ㅎㅎ

apt-get install nginx                                              //nginx 설치
apt-get install mysql-server mysql-client                          //mysql 설치
apt-get install php7.2 php7.2-common php7.2-cli php7.2-fpm         //php7.2 설치

mysql은 설치할 때 비밀번호를 물어보는데요. 저는 편의상 vagrant로 했습니다.

모두 설치가 되었다면 Vagrantfile을 열어 다음과 같이 수정해줍니다.

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder "./index", "/usr/share/nginx/html"

포워딩 포트를 여는 것인데요 이제 localhost:8080이나 192.168.33.10으로 가상 서버에 접근할 수있습니다.

제일 하단의 줄은 가상 서버와 공유할 폴더의 주소를 적습니다.

저는 편의상 현재 폴더의 index 폴더를 바라보게 했습니다.

설정 후에는 vagrant를 재시작해줍시다.

vagrant reload

5. 타임 존 설정

이제 리눅스 시스템과 php의 타임 존을 설정해줄 차례입니다.

dpkg-reconfigure tzdata

를 입력해 아시아 - 서울 을 선택해주시면 됩니다.

( 관리자 모드 빼먹으시면 안 돼요~ )

php는 2개의 파일을 수정해주셔야 하는데요.

vi /etc/php/7.2/fpm/php.ini
vi /etc/php/7.2/cli/php.ini

이 두 파일을 여신후 에 page down 키를 한참 누르다 보면 나오는 date.timezone 에 Asia/Seoul 삽입해주시면 됩니다.

그다음 다음 명령어로 php를 재시작해줍니다.

/etc/init.d/php7.2-fpm restart

6. Nginx 설정

자 이제 Nginx 를 설정할 차례입니다.

vi /etc/nginx/sites-available/default로 파일을 열어서 다음과 같이 수정해 줍니다.

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm index.php;

        server_name localhost;

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

        location ~ [^/]\.php(/|$){
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi_params;
        }
}

원래는 php를 소켓으로 가져와야 하지만 제가 그 방법에 실패해서 내부 ip로 가져오게 했습니다.

vi /etc/nginx/nginx.conf로 파일을 열어서 다음과 같이 수정해줍니다.

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        gzip_disable "msie6";

        #include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*;
        include /etc/nginx/sites-available/default;
}

http 부분의 하단에 include /etc/nginx/sites-available/default; 를 추가해줍니다.

그리고 기존 include 2개는 모두 주석 처리해줍니다.

보기 좋기 위해 글에서는 주석을 지웠습니다.

완료했다면 service nginx restart로 nginx를 재시작해줍니다.

7. php 설정

vi /etc/php/7.2/fpm/pool.d/www.conf 로 파일을 열어서 다음과 같이 수정합니다.

기존의 listen = /run/php/php7.2-fpm.socklisten = 127.0.0.1:9000으로 변경해줍니다.

위에서 언급한 것처럼 소켓 방법을 실패해서 이렇게 설정한 겁니다 ㅎㅎ

설정이 끝낫다면 /etc/init.d/php7.2-fpm restart로 php를 재시작해줍니다.

8. Mysql 설정

Mysql의 인코딩과 접근 ip를 수정해줍니다.

vi /etc/mysql/my.cnf 로 파일을 열어 다음에 해당하는 부분을 수정해줍니다.

[client] 
default-character-set = utf8 
[mysql] 
default-character-set = utf8 
[mysqld] 
collation-server = utf8_unicode_ci 
init-connect = 'SET NAMES utf8' 
character-set-server = utf8

bind-address = 0.0.0.0

해당하는 부분을 수정하고 없는 부분은 생성해줍니다.

수정이 끝낫다면 /etc/init.d/mysql restart 로 mysql을 재시작해줍니다.

9. Mysql 계정 생성

Mysql 계정을 생성하기 위해 root 계정으로 들어갑니다.

mysql -u root -p

비밀번호는 설치하셨던 당시에 설정한 비밀번호로 들어가시면 됩니다.

use mysql
grant all privileges on *.* to 'id'@'%' identified by 'pw';
flush privileges;

위의 코드로 계정을 생성해 줍니다.

자 이제 혹시 모르니 mysql을 재시작해줍니다. /etc/init.d/mysql restart

10. Mysql 접속 포트 열기

로컬에서 mysql로 접속하기 위해 가상서버에서 포트를 열어줘야 합니다.

우분투에서 다음 명령어로 포트를 열어줍니다.

ufw allow in 3306/tcp
ufw allow out 3306/tcp

그리고 Vagrantfile 에서 다음 코드를 추가해줍니다.

config.vm.network "forwarded_port", guest: 3306, host: 3306, host_ip: "127.0.0.1"

이제 vagrant reload로  vagrant를 재시작하고 확인합니다.

11. 서버 확인

자 모든 설정이 끝났습니다.

이제 index 폴더에 index.php 파일을 만들고 다음과 같이 적어줍니다.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
</head>
<body>
	<?php phpinfo();?>
</body>
</html>

그리고 http://192.168.33.10/ 로 접속해서 확인하시면 phpinfo가 나오게 됩니다.

tip) 

CI의 index.php 를 없애기 위해서는 vi /etc/nginx/sites-available/default 의 주석 처리했던 location을 살린 뒤 다음과 같이 입력해주시면 됩니다.

location / {
    try_files $uri $uri/ /index.php?/$request_uri;
}