패키지 설치

패키지 관련 작업은 모두 루트로 실행해야 하므로 이 절의 명령어 실행은 sudo 를 사용하지 말고 root 로 로그인한 후에 작업을 진행하는게 좋습니다.


먼저 우분투의 패키지 목록과 패키지를 업데이트하고 git 을 설치합니다.

# apt-get update
# apt-get -y upgrade
# apt-get install -y git 
CODE


최신 버전의 패키지는 우분투에 포함되어 있지 않으므로 외부 저장소를 통해 설치해야 합니다. 개인들이 제공하는 PPA(Personal Package Archives)  저장소를 추가하며 이 작업은 루트 권한이 필요합니다.

# apt-get install -y software-properties-common curl
# apt-add-repository ppa:nginx/stable -y
# apt-add-repository ppa:rwky/redis -y
# apt-add-repository ppa:ondrej/php -y
CODE


MySQL 을 설치하기 위해 공개키를 임포트하고 저장소 정보를 등록합니다.

# apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 5072E1F5
# sh -c 'echo "deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-5.7" >> /etc/apt/sources.list.d/mysql.list'
CODE


추가한 PPA 의 패키지 정보를 업데이트합니다.

# apt-get update
CODE


PHP7 설치

이제 패키지를 설치할 순서입니다. 제일 먼저 PHP 7.1 을 설치합니다.

# apt-get install -y php7.1-cli \
php7.1-sqlite3 php7.1-gd php7.1-json \
php7.1-curl php7.1-mysql php7.1-readline \
php7.1-mbstring php7.1-xml php7.1-zip php7.1-intl
CODE

별도 서버로 구동되어 속도가 빠른 PHP-FPM 을 설치합니다.

# apt-get install php7.1-fpm 
CODE


php.ini 의 설정을 운영 환경에 맞게 수정하며 대상 파일은 php-fpm 이 사용하는 /etc/php/7.0/fpm/php.ini 과 명령행에서 구동할 경우 사용하는 /etc/php/7.0/cli/php.ini 2개입니다.

; 기본은 128M 인데 서버의 용량에 맞게 넉넉하게 설정합니다.
memory_limit = 512M;
 
; 해당 지역에 맞게 타임존을 지정하며 한국일 경우 아래와 같이 설정하면 됩니다.
date.timezone = 'Asia/Seoul';
CODE


MySQL 설치

이제 MySQL 을 설치합니다.

# apt-get --force-yes install -y mysql-server
CODE

MySQL 루트 암호를 물어보는 화면이며 사용할 암호를 설정합니다.


nginx와 redis 설치

이제 nginx 서버와 redis 를 설치할 순서입니다.

# apt-get install -y nginx redis-server
CODE

nginx 가 설치됐으면 /etc/nginx/sites-available/todolog 파일에 다음과 같이 가상 호스트 설정을 추가합니다.

server {
    listen 80;

    server_name todolog.app;	## 1
    
    root "/var/www/laravel/todolog/public/";	## 2

    index index.php index.html index.htm;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    ## edit this
    access_log  /var/log/nginx/todolog-access.log combined;
    error_log  /var/log/nginx/todolog-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;	// 3
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }
    
    location ~ /\.ht {
        deny all;
    }

    ## TLS settings
    #listen 443 ssl;
    #ssl_certificate     /etc/nginx/ssl/myhost.crt;
    #ssl_certificate_key /etc/nginx/ssl/myhost.key;
    
    ## force https redirect
    #if ($scheme = http) {
    #    return 301 https://$server_name$request_uri;
    #}   
}
CODE
  • 1 : 가상 호스트의 도메인 이름으로 실제 서비스할 도메인 이름으로 설정합니다. 
  • 2 : todolog 애플리케이션이 있는 절대 경로를 설정하며 라라벨은 보안때문에 public 폴더만 노출시키므로 루트 디렉토리를 public 으로 설정해야 합니다.
  • 3: nginx 가 FastCGI 방식으로 php-fpm 에 요청을 전달할 수 있도록 소켓의 유형과 절대 경로를 설정합니다.


nginx 는 /etc/nginx/sites-enabled/ 에 있는 설정을 읽으므로 설정한 파일을 심볼릭 링크를 해줍니다.

# ln -s /etc/nginx/sites-available/todolog /etc/nginx/sites-enabled/todolog
CODE

nginx 설정이 변경되었으므로 반영되도록 재구동해줍니다.

# service nginx restart
CODE

애플리케이션을 변경 및 배포하는 todolog 계정을 생성합니다.

# adduser todolog
CODE

생성된 todolog 계정을 웹 서버의 계정 그룹인 www-data 그룹에 추가 합니다.

# usermod -a -G www-data todolog
CODE

이제 애플리케이션을 배포할 디렉토리를 생성합니다.

# mkdir /var/www/laravel
CODE

이제 todolog 계정이 생성한 폴더에 애플리케이션을 배포할 수 있도록 소유자를 변경합니다.

# chown -R todolog:todolog /var/www/laravel/
CODE

이제 루트로 실행할 작업은 완료되었고 애플리케이션을 배포하기 위해 todolog 계정으로 로그인합니다.