서버 설정
패키지 설치
패키지 관련 작업은 모두 루트로 실행해야 하므로 이 절의 명령어 실행은 sudo 를 사용하지 말고 root 로 로그인한 후에 작업을 진행하는게 좋습니다.
먼저 우분투의 패키지 목록과 패키지를 업데이트하고 git 을 설치합니다.
# apt-get update
# apt-get -y upgrade
# apt-get install -y git
최신 버전의 패키지는 우분투에 포함되어 있지 않으므로 외부 저장소를 통해 설치해야 합니다. 개인들이 제공하는 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
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'
추가한 PPA 의 패키지 정보를 업데이트합니다.
# apt-get update
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
별도 서버로 구동되어 속도가 빠른 PHP-FPM 을 설치합니다.
# apt-get install php7.1-fpm
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';
MySQL 설치
이제 MySQL 을 설치합니다.
# apt-get --force-yes install -y mysql-server
MySQL 루트 암호를 물어보는 화면이며 사용할 암호를 설정합니다.
nginx와 redis 설치
이제 nginx 서버와 redis 를 설치할 순서입니다.
# apt-get install -y nginx redis-server
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;
#}
}
- 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
nginx 설정이 변경되었으므로 반영되도록 재구동해줍니다.
# service nginx restart
애플리케이션을 변경 및 배포하는 todolog 계정을 생성합니다.
# adduser todolog
생성된 todolog 계정을 웹 서버의 계정 그룹인 www-data 그룹에 추가 합니다.
# usermod -a -G www-data todolog
이제 애플리케이션을 배포할 디렉토리를 생성합니다.
# mkdir /var/www/laravel
이제 todolog 계정이 생성한 폴더에 애플리케이션을 배포할 수 있도록 소유자를 변경합니다.
# chown -R todolog:todolog /var/www/laravel/
이제 루트로 실행할 작업은 완료되었고 애플리케이션을 배포하기 위해 todolog 계정으로 로그인합니다.