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

nginx php8.0 laravel amazon linux

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

제가 사용한 방법이 문제가 된다거나 더 좋은 의견 있으신 분은 언제든지 태클 부탁드립니다.

 

 

테스트 환경.

aws ec2: amazon linux 2

php version: 8.0

 

AWS Cloud Formation 모든 예제파일은 amazon linux 를 기준으로 설명이 되어있다.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html

 

Services - AWS CloudFormation

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

Network 구성까지는 별 무리없이 처리 했는데.  ec2 초기 설정시에 사용하는 코드들이 amazone linux 를 기준으로 작성돼어 있고, 다른 linux 들에 대한 설명이 부족했다.

나름의 검색을 해보고 수정도 해봤지만 amazon linux 를 사용하는게 당장은 시간적으로 더 낫다고 판단했다.

최종적인 목표는 자주쓰는 케이스들에 대응하는 cloud formation 파일을 만들어 git 버젼관리 까지이다.

 

 

 

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

 

nginx, php 설치

sudo amazon-linux-extras install -y php8.0 nginx1

sudo yum install -y php-bcmath php-mbstring php-gd php-xml php-opcache php-zip

amazon linux 는 별도의 버젼관리 프로그램이 존재한다.

amazon-linux-extras 에서 nginx 와 php를 설치한다.

vim /etc/nginx/nginx.conf

amazon linux 에서 nginx 설정파일은 nginx.conf 다. 물론 ubuntu도 같지만 include 구조가 다르다.

 

root /home/ec2-user/www/public;

관리의 편의를 위해 web root 경로를 변경해줬다.

root 를 변경하는게 맞는지 file 을 만들어 link 를 걸어주는게 맞는지 확신이 서지 않는다.

 

php-fpm 설정변경

php-fpm 실행 권한을 확인해준다.

오해 소지가 없게 apache 를 nginx로 변경해줬다. 

sudo sed -i 's|;*user = apache|user = nginx|g' /etc/php-fpm.d/www.conf
sudo sed -i 's|;*group = apache|group = nginx|g' /etc/php-fpm.d/www.conf
service php-fpm restart

 

sudo service nginx restart

nginx.conf 파일 변경후에는 항상 nginx 를 재시작 해준다.

 

web root 를 변경하기 전까지는 잘 동작했지만 변경후에는 권한문제가 발생했다.

사실 여기서 제일 많은 시간을 허비했다.

인스턴스를 수십개는 만들었다 지운것같다.

 

허무하게도 폴더 권한 문제였다.

amazon linux 는 ec2-user 계정의 홈 디렉토리인 ec2-user의 권한이 700 이다.

sudo chmod 711 /home/ec2-user

ec2-user 디렉토리의 권한을 711로 변경해준다.

 

php 정상 동작을 확인 한다.

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

기본적으로 설정을 건드리지 않아도 php 파일이 해석이 된다.

include /etc/nginx/conf.d/*.conf;

이는 nginx.con 파일의 위 구문때문이다. conf.d 디렉토리에 php-fpm부분이 포함되어 있다.

 

 

laravel 구동을 위해 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/ec2-user/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-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

php-fpm 관련 구문을 삭제해도 되는게 아닌가 라고 생각을 했지만. php-fpm 구문을 삭제하면 php 파일은 해석이 되지 않고 다운로드가 된다.

php-fpm 관련구문이 중복해서 들어갔지만 우선순위가 있는듯 하다.

 

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

 

nginx를 시작 프로그램에 등록한다.

sudo systemctl enable nginx

 

composer 설치

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

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

composer 파일 다운로드 후

 

sudo mv composer.phar /usr/local/bin/composer
sudo ln -s /usr/local/bin/composer /usr/bin/composer

bin 디렉토리로 이동.

composer -V

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

 

laravel installer 설치

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

 

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

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

 

디렉토리 권한 변경

아마존 nginx 는 nginx 권한으로 실행된다.

sudo chown -R ec2-user:nginx ~/www
sudo usermod -a -G nginx ec2-user

web root 디렉토리에 nginx 그룹권한을 부여한다

 

ec2-user 에 nginx 그룹을 추가한다.

 

laravel 정상 구동을 확인한다.

 

0. 기타 설정 변경.

시간대 변경

sudo timedatectl set-timezone Asia/Seoul

sudo timedatectl set-timezone Asia/Seoul

 

php.ini 설정 변경

sudo vim /etc/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
aws ubuntu nginx laravel  (0) 2021.06.23

댓글