본문 바로가기
개발자일상/aws & linux

aws ubuntu nginx laravel

by 여행자디노 2021. 6. 23.

테스트 환경.

aws ec2: Ubuntu Server 20.04 LTS

php version: 8.0

 

인터넷에 글들을 보고 따라하기 방법으로 해봤지만 뭔가 하나씩 환경이 달라져서 제대로 동작하지 않았고, 따라하기 방법으로는 해결이 안되는 것 같아 명령어 하나 하나 어떤 동작을 하는지 확인하면서 테스트 했다.

 

초기화된 aws ec2를 준비한다.

 

1. ubuntu 서버 최신버젼 업데이트

sudo apt update && sudo apt upgrade 

update는 소프트웨어 list 만을 업데이트 하고 실제로 소프트웨어는 변경 되지 않는다. repository 목록을 변경해야 하는 경우가 생기는데 그럴 경우 필요 한 것 같다.

초기 상태에서 꼭 해줘야 하는가에 대한 의문이 있지만 일단 하는 걸로..

 

upgrade 는 실제로 소프트웨어를 교체한다.

 

 

2. php 8.0 repository 등록

ubuntu 에서 사용하는 패키지 관리툴 apt 에는 아직 php 8.0 버젼이 정식 지원하지 않는다.

따라서 repository를 추가 하여 문제를 해결한다.

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php

외부 repository 를 등록하기 위해서는 software-properties-common 설치가 필요한듯하다.

ppa:ondrej/php 등록중 나오는 안내를 보면 nginx 사용자에게 ppa:ondrej/nginx repository 도 등록 하라는 메시지가 나온다.

 

프로그램 설치시 습관적으로 다음버튼을 누르는데. 꼼꼼하게 확인하는 습관이 필요 한 것 같다.

실제로 php 설치시 추가 설치되는 프로그램 리스트를 보지 않아 ec2 를 몇번이나 다시 셋팅한지 모른다.

 

3. nginx repository 등록

sudo add-apt-repository ppa:ondrej/nginx

repository 를 수정 했으니 추가적으로 소프트 웨어 목록 업데이트를 해준다.

sudo apt update

 

4. nginx, php, zip 설치

sudo apt install nginx zip unzip

sudo apt install php8.0-fpm php8.0-bcmath php8.0-mbstring php8.0-xml php8.0-xmlrpc php8.0-curl php8.0-gd php8.0-mysql php8.0-zip

laravel 구동중에 zip, unzip 모듈을 요구해서 같이 설치 한다.

 

단순하게 sudo apt install php 를 실행하면 의존성에 의해서 apache 관련 모듈이 설치가 된다.

nginx 를 사용하기 위해서는 php 가 아닌 fpm 을 설치한다.

 

php-fpm 설치시 추가로 설치되는 모듈 목록

php-common php8.0-cli php8.0-common php8.0-opcache php8.0-readline

 

php 모듈 설치는 최소화 하고 나중에 필요한 모듈이 확인 될때 추가 설치를 하려고 한다.

눈에 익은 몇몇 모듈과 laravel 관련 필수 모듈을 설치 한다.

 

laravel 관련 필수 php 모듈은 아래 주소에서 확인가능하다. laravel 8.0 버젼에서는 따로 내용이 없지만 추가적으로 설치했다.

https://laravel.com/docs/5.8/installation#server-requirements

 

Installation - Laravel - The PHP Framework For Web Artisans

Become a Laravel Partner Laravel Partners are elite shops providing top-notch Laravel development and consulting. Each of our partners can help you craft a beautiful, well-architected project.

laravel.com

 

5. nginx 정상 동작을 확인 한다.

nginx 설정 파일에서 webroot 경로를 확인한다

cat /etc/nginx/sites-available/default

설정파일의 경로는 nginx 와 ubuntu 버젼에 따라 바뀌는 것 같다.

따라하기 방식으로 여러 버젼을 테스트 했을때 다 다른 경로 였다.

 

root 경로에 파일을 만들어서 확인해도 되고 기본으로 제공되는 파일로 확인해도 된다.

나의 경우는 기본으로 포함 되어 있는 index.nginx-debian.html 파일로 테스트를 했다.

사실 왜 파일명에 debian 이 있는지는 모르겠지만 정상 동작 한다.

 

6. php 정상 동작을 확인 한다.

nginx 를 확인 했으면 다음은 php 파일 동작 여부이다.

인터넷 글들을 보며 따라 하기 식으로 테스트 할때 파일 다운로드, 권한, php 해석 불가 등등 여러가지 문제를 겪었다.

 

nginx 설정 파일을 수정한다. laravel 공식 사이트의 설정 부분을 복사 했다.

https://laravel.kr/docs/8.x/deployment

 

라라벨 8.x - 배포

라라벨 한글 메뉴얼 8.x - 배포

laravel.kr

 

root, fpm 부분은 각자 환경에 맞게 수정한다.

server {
    listen 80;
    server_name example.com;
    root /home/ubuntu/www/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    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; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

index.php 파일을 만들어서 정상적으로 php 구문을 해석하는지 확인한다.

 

7.composer 설치

laravel 사용을 위해서는 composer 가 필요하다.

curl -s https://getcomposer.org/installer | php

composer 파일 다운로드 후

 

sudo mv composer.phar /usr/local/bin/composer

bin 디렉토리로 이동.

composer -V

composer 가 정상적으로 설치 되었는지 확인한다.

 

8. laravel installer 설치

composer global require laravel/installer
composer create-project --prefer-dist laravel/laravel www

 

디렉토리 구조를 생각해서 www를 프로젝트명으로 지정했다. 

프로젝트명을 다르게 할 경우 nginx 설정 파일도 수정이 필요하다.

 

권한을 변경해준다.

www-data 는 nginx가 구동되는 계정이다. nginx 설정 파일에 정의 되어 있다.

ubuntu 는 aws ec2 로그인 계정이다.

sudo chown -R ubuntu:www-data /home/ubuntu/www/bootstrap/cache
sudo chown -R ubuntu:www-data /home/ubuntu/www/storage

소유권까지 nginx 구동 계정으로 변경해도 관계없다. 각자 취향에 맞게 수정한다.

 

laravel 정상 구동을 확인한다.

 

0. 기타 설정 변경.

시간대 변경

sudo timedatectl set-timezone Asia/Seoul

sudo timedatectl set-timezone Asia/Seoul

 

php.ini 설정 변경

sudo vim /etc/php/8.0/fpm/php.ini

post_max_size = 16M
upload_max_filesize = 16M

 

 

참고

https://happist.com/576760/php-8-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95

 

PHP 25년 역사의 새장을 여는 PHP 8 설치 방법 - 우분투 및 데비안 기준 | 꿈꾸는섬

마케팅 경영 사례 연구 및 트렌드 탐구

happist.com

 

'개발자일상 > aws & linux' 카테고리의 다른 글

AWS Cloud Formation 작성하기.  (0) 2021.07.07
nginx php8.0 laravel amazon linux  (0) 2021.06.30

댓글