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

(Modify : 2019-09-22)

안녕하세요 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를 다운로드 받아줍니다.

1

vagrant box add ubuntu/trusty64

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

2. box 설치 및 vagrant init

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

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

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

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

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

Plain Text

1

config.vm.box = "ubuntu/trusty64"

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

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

1

vagrant up --provider virtualbox

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

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

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

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

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

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

1

add-apt-repository ppa:ondrej/php

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

1

2

apt-get update
apt-get upgrade

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

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

4. php, mysql, nginx 다운로드

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

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

1

2

3

4

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을 열어 다음과 같이 수정해줍니다.

1

2

3

4

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를 재시작해줍시다.

1

2

vagrant reload

5. 타임 존 설정

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

1

dpkg-reconfigure tzdata

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

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

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

1

2

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

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

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

1

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

6. Nginx 설정

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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로 파일을 열어서 다음과 같이 수정해줍니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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 로 파일을 열어 다음에 해당하는 부분을 수정해줍니다.

1

2

3

4

5

6

7

8

9

10

[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 계정으로 들어갑니다.

1

mysql -u root -p

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

1

2

3

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

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

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

10. Mysql 접속 포트 열기

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

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

1

2

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

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

1

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

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

11. 서버 확인

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

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

HTML, XML

1

2

3

4

5

6

7

8

9

10

11

12

<!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을 살린 뒤 다음과 같이 입력해주시면 됩니다.

1

2

3

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

Lovefield

Web Front-End developer

하고싶은게 많고, 나만의 서비스를 만들고 싶은 변태스러운 개발자입니다.

CentOS6.9 Oracle12g 소스 설치

CentOS6.9 Oracle12g 소스 설치

ETC

개발일지01. 개발 골조

Devellany의 php 개발일지

PHP

v5.0