제가 사용한 방법이 문제가 된다거나 더 좋은 의견 있으신 분은 언제든지 태클 부탁드립니다.
테스트 환경.
aws ec2: amazon linux 2
php version: 8.0
AWS Cloud Formation 모든 예제파일은 amazon linux 를 기준으로 설명이 되어있다.
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 |
댓글