본문 바로가기

Snippets

Laravel + Nginx Install

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

본 문서는 Ubuntu 16.04 기준으로 작성되었습니다.


1. php fpm 설치와 composer install시 필요한 extension 설치


sudo apt-get install -y php-fpm php-zip php-xml php-mbstring


2. composer 설치시 필요한 유틸리티 설치하기


sudo apt-get install -y curl unzip git


3. composer 설치하기


먼저 composert를 다운로드 받고 /user/local/bin으로 composer 란 명령어 이름으로 설치한다.


cd ~

sudo curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer


이후 자신의 계정에 .composer 라는 폴더가 생기는데 root:root 의 소유권을 내가 사용할 수 있도록 소유권 변경을 한다.

(composer를 root 계정으로는 사용할 수 없다.)


sudo chown -R [현재 사용자 계정] .composer/


4. Laravel 설치


composer global require "laravel/installer"


laravel을 설치하고 나면 .composer/vendor/bin에 명령어를 사용해야 함으로 .bashrc에 PATH를 추가한다.


echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashrc 

source .bashrc

laravel -v


5. 버전 확인 완료 후 새로운 프로젝트를 만든다. 


여기서는 blog 라는 이름의 프로젝트를 만든다고 가정한다.


cd ~

laravel new blog


6. 프로젝트 생성 이후 storage와 bootstrap의 cache에 www-data의 그룹권한을 부여한다.


storage 폴더는 Blade template 과 파일 base 세션, cache 그리고 laravel 프레임워크에서 만들어지는 파일을 저장하는 폴더.

boostrap/cache 폴더는 performance 최적화를 위하여 프레임워크에서 만들어지는 파일을 보관하는 폴더이다.

그러므로 www-data의 사용자가 읽고 쓸 수 있도록 권한이 부여되어야 한다.


cd blog

sudo chgrp -R www-data ./storage

sudo chgrp -R www-data ./bootstrap/cache


7. PHP-fpm을 시작한다.


unix socket으로 생성하는 것을 권장한다. tcp로 시작할 경우 tcp 프로토콜의 구조상 오버해드가 발생할 수 있다.

우분투 16.04의 경우 기본 설치되는 php의 버전은 7.0 이므로 다음의 명령어로 시작한다.


sudo service php7.0-fpm start


8. Nginx 설치 및 설정


다음 명령어로 Nginx 를 설치한다.


sudo apt-get install nginx


서버 설정은 기본적으로 되어있는 default 를 수정해도 되나 virtualhost를 고려하여 blog 라는 파일을 새로 생성할 것이다.

sites-available 폴더에 있는 default를 blog 로 복사하고 sites-enabled에 링크를 걸어준다. 

( 이 작업은 생략 가능하며 그냥 default 파일로 사용해도 상관은 없다. )


sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/blog

sudo rm /etc/nginx/sites-enabled/default

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog 


9. nginx 설정을 다음과 같이 한다.


server {

    listen 80;

    listen [::]:80;


    root /home/mikelim/blog/public;

    index index.php index.html index.htm;


    server_name localhost;


    # REST API 용도로만 사용한다면 다음 설정은 주석처리

    location ~* \.(gif|jpg|png|js|css)$ {

root /home/mikelim/blog/public;

expires 1d;

    }


    location / {

        try_files $uri $uri/ /index.php?$query_string;

    }


    location ~ \.php$ {

        try_files $uri /index.php =404;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_pass unix:/run/php/php7.0-fpm.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

    }

}