인프런 커뮤니티 질문&답변

CDG님의 프로필 이미지
CDG

작성한 질문수

PHP 개발자의 최종 테크트리, 라라벨 강의

기존의 프로젝트 내의 storage 폴더에서 아마존 계정을 만들고 S3로 변경하는 방법을 소개해 드립니다.

aws 설정 문의 드립니다.

해결된 질문

작성

·

1.2K

1

 aws 연결하기 따라하고 있는데 업로드가 안되네요

6분58초에 업로드 코드를 바꾸고 적용해 보면 s3버킷에

public폴더가 생긴다고 하셨는데 이게 어떤 작업을 하라는건지 모르겠습니다.

제가 설정한 라라벨 셋팅과 aws 권한설정한 내용 첨부 합니다

1.PNG2.PNG

답변 8

1

CDG님의 프로필 이미지
CDG
질문자

친절하게 답변 주셔서 수강 완료 하였습니다!감사합니다!

0

CDG님의 프로필 이미지
CDG
질문자

작성해주신 내용보고 여기도 잘 넘어갔습니다 감사합니다..! 근데 또 문제가 생겼네요..이거 php코딩할때는 큰 문제 없이 잘됐는데 서버 연동 하는 부분에서 계속 문제가 생기네요 ㅠㅠ

첨부파일처럼 sail php vendor/bin/vapor login 라고 입력하면 Could not open input file: vendor/bin/vapor 라고 뜨고 로그인이 안뜨네요.....무엇을 놓친걸까요..ㅠaa.PNG

백승철님의 프로필 이미지
백승철
지식공유자

음.... 현 vapor 설치 지침대로 진행을 해보시면 좋을 것 같습니다.

1. sail php vendor/bin/vapor list 명령어를 입력해 제대로 작동하는지 확인해 주세요. CLI 명령어 리스트가 나오면 설치까지는 제대로 된 것 으로 보고 있습니다.

  1. login 에는 vendor/bin/ 을 빼고 한번 시도해 보세요. 자세한 사항은 공식 홈페이지의 "Installing The Vapor CLI" 문서를 참조하시면 좋을 것 같습니다.

Vapor 사이트가 영상을 제작할 당시와는 가이드 및 UI가 좀 바뀌어서 실행하시기 어려우셨을 것으로 예상됩니다.

https://docs.vapor.build/1.0/introduction.html#installing-the-vapor-cli

CDG님의 프로필 이미지
CDG
질문자

친절하게 답변 주셔서 수강 완료 했습니다 감사합니다!

0

CDG님의 프로필 이미지
CDG
질문자

새로 올려주신 강의를 보고 aws s3 연결하고 파일 업로드 까지 성공 하였습니다. 감사합니다!

이제 마지막 강의를 들으면서...vapor에 가입하고 AWS link를 연결을 해보려고 하는데 이게 또 안되네요..;;

Account Name에 aws 계정 ID 라고 뜨는 숫자 12자리로 되어 있는걸 입력하고 새로 만든 버킷의 엑세스 키와 시크릿 키를 넣었는데 The given cloud provider credentials are invalid. 라고 에러 메시지가 뜹니다 ㅠ 혹시 제가 입력을 잘못한 것일까요?

백승철님의 프로필 이미지
백승철
지식공유자

AWS 와 링크하는 팝업에 보시면 AdministratorAccess 권한이 필요하다고 안내하고 있습니다.

해당 부분은 강의 포트폴리오에서 언급을 하지 않고 있군요. 죄송합니다. 강의 대시보드에 내용을 업로드 해놓도록 하겠습니다.

그렇지만 어렵지 않습니다.

1. IAM 으로 접속 하셔서 S3와 연결할 때 사용하였던 사용자로 들어가주세요.

  1.  권한 추가에서 이번에는 첫번째를 선택해 주세요.

  2. image직접 연결 정책으로 전환 후, AdministratorAccess 를 추가해 주세요.

  3. image다시 돌아와서 새로고침을 한 뒤 vapor를 통해 다시 한번 연결을 시도해 보시길 바라겠습니다.

image

라라벨과 같은 오픈소스와 연결된 프레임워크는 연결 방법이나 UI 가 자주 바뀌기 때문에 공식 홈페이지 영어 설명서를 참고하시는 것도 좋습니다!

 

0

CDG님의 프로필 이미지
CDG
질문자

삭제하고 하라는대로 해서 처음부터 다시하니까 다시 구동은 됩니다..! 그리고 그 다음에 s3연동 하는 작업을 해보고 있는데..연동이 안되네요..ㅠ

아래처럼 The photo must be an image 라고 나오네요 ㅠ

그외에 소스코드 바꾼부분과 AWS에 어떻게 나오는지도 캡처한 부분 파일 첨부 합니다.

0.PNG1.PNG2.PNG3.PNG4.PNG5.PNG

 

백승철님의 프로필 이미지
백승철
지식공유자

라라벨 라이브와이어에서 기본적인 에러는 영어로 출력되어 있습니다.
The photo must be an image는 폼 양식을 이미지로 validation 했고 이미지 이외의 파일을 올렸을 때 발생합니다.

image

그런데 지금 jpg를 올렸는데도 에러 문구가 뜬다고 한다면.....

  1. 라이브와이어 페이지에 enctype="multipart/form-data"를 실수로 빼먹지는 않으셨는지 확인해 주세요!

  2. S3 에서 local 로 전환한다음 같은 파일을 업로드 시도해 보세요. S3 일때만 문제가 발생한다면 이미지 파일 이름에 한글이나 특정 특수기호가 들어가져서 S3에서 인식을 못하는 버그가 있었습니다.

CDG님의 프로필 이미지
CDG
질문자

제가 작성한 코드 첨부 합니다! 문제가 있는 부분이 있을까요?

images.jpg라는 파일명으로 업로드 해도 같은 에러 메시지가 뜹니다. local에서는 잘 되고 S3 에서만 안됩니다..혹시...s3 에서 대소문자 구분을 할까요? AWS 에서 만들때 대문자로 S라고 만들었습니다...

imageimageimage

백승철님의 프로필 이미지
백승철
지식공유자

그렇다면 이미지 문제가 아닌 아마 S3와의 연결 중에 크로스 오리진 이슈로 인해서 차단된 것으로 The photo ~ 에러가 뜨는 것을 저도 확인했습니다. f12를 눌러 개발자 도구로 확인해 보시면 그림과 비슷한 내용이 나올 것으로 생각됩니다.

image

이것을 해결할 방법은 2가지가 있습니다.
1. Amazon S3 에 cors 정책을 추가하기

  • 이 방법의 경우 저장소 기본을 S3로 하더라도 작동한다는 장점이 있습니다. 그렇지만 제가 기존에 올린 연동 방법이 더이상 사용할 수 없게 될 것으로 보여 만약 규모있게 만들어 놓은 것이 아니면 2번 방법을 채용하시는 것을 추천드립니다.

2. 섹션 11 수업 3번 신규 강의를 보고 새롭게 S3 연결하기

public access 가 금지됨으로 인해 빠른 시일 내에 새로운 연동 방법을 다루는 강의를 만들어야 겠다고 생각했습니다. 그 김에 의뢰 주신 부분도 확인해 보았더니 저장소 기본을 s3로 하면 예나 지금이나 같은 CORS 문제가 발생합니다. 라라벨 라이브 와이어를 사용하신다면 store 끝에 's3' 를, 기본 블레이드 페이지로 하신다면 ::disk('s3')를 추가해 주세요.

0

CDG님의 프로필 이미지
CDG
질문자

"실전에서 라라벨 서비스 방법" 과목 전까지는 아무 문제 없이 잘따라 갔는데 강의 다 끝나가는 부분인 AWS 설정 해보다가 완전히 꼬여 버린거 같네요 ㅠ 현재 docker를 몇번을 지웠다 깔아도 제대로 뜨지가 않네요 ㅠㅠ html 연결이 보이지가 않습니다.. 그래서 AWS 설정은 커녕 라라벨 실행 자체를 못하고 있네요..그리고 예전에 XAMPP를 설치해서 이용중인게 있었고 3306포트를 그쪽 DB에서 연결을 해놓긴 헀지만 AWS 설정 하기 전에는 충돌없이 강의 따라가는데 아무 문제가없었습니다.

1.PNG2.PNG

백승철님의 프로필 이미지
백승철
지식공유자

보내주신 사진으로 보았을 때 있어야 할 이미지가 보이지 않고 컨테이너가 개별적으로 실행되어 있는 것이 복잡한 상황으로 보입니다 ㅠㅠ

만약 현재 프로젝트 데이터베이스에 저장 되어 있는 것이 많지 않다면 이미지 초기화를 한번 해보신 뒤 다시 실행해보시는 방법을 추천드립니다.

image

  • 작업한 프로젝트 파일들이 사라지지는 않습니다. 대신 sql에 저장된 데이터, 캐시 등이 초기화 됩니다.

  • 1. 도커 프로그램에서 containers 및 images 안에 모든 내용 삭제 (이미지 및 실행중인 컨테이너만 지워집니다.)

  • 2. wsl 라라벨 프로젝트 폴더에서 docker system prune -a 명령어 실행

  • 3. 어느정도 기다리고 나면 도커 설정 파일들이 전부 삭제됩니다. 그런다음 다시 폴더에서 sail up 명령어를 실행해 보세요.

  • 이미지들을 다시 다운로드 받기 때문에 시간이 걸립니다.-d 를 붙이지 않고 우선 실행을 시켜 보시고 에러가 발생한다면 그 내용을 캡처해서 보여 주시면 다음으로 진행해 보겠습니다.

 

사실 라라벨이 초보자가 하기 힘든 이유 중 하나가 에러가 발생하면 그것을 해결할 방법을 찾는 것이 어렵다는 점 입니다. 다만 강의를 따라가던 도중에 어째서 이미지가 삭제 되었고 컨테이너는 개별 작동 되는지를 저 또한 알기는 어려운 게 죄송할 따름입니다.

CDG님의 프로필 이미지
CDG
질문자

이렇게 나오네요 ㅠ

imageimageimage

백승철님의 프로필 이미지
백승철
지식공유자

image

이제 문제는 하나가 남았네요! default not found 라는 문제를 해결하는 방법 중에 제일 많은 사람들이 됬다고 하는 방법은 아래와 같다고 합니다.

  1. 실행중인 docker 윈도우 계정에서 C:\사용자(Users)\계정명\.docker\contexts\meta 폴더 안에 있는 폴더들을 전부 삭제합니다.

  2. 백그라운드에서 실행되고 있는 도커를 재시작 해주세요.

저 또한 "default not found" 라는 문제는 처음봐서 이것 저것 찾아보았더니 도커 프로그램 자체 버그일 확률이 높다고 합니다. 시도해 보신 뒤, 그래도 안된다면 다시 답글을 남겨주세요.

0

CDG님의 프로필 이미지
CDG
질문자

현재는 아래와 같은 메시지가 뜨면서 안되네요 ㅠ 연결이 뭐가 제대로 안된거 같은데..혹시 .env 라던가 다른에데서 연결하기 위해 어 작업해야 하는 부분이 있을까요?

2.PNGa.PNGubuntu@DESKTOP-M687OU3:/var/www/html$ sail up -d

[+] Running 5/6

⠿ Container html-redis-1 Started 1.5s

⠿ Container html-selenium-1 Started 1.5s

⠿ Container html-meilisearch-1 Started 1.2s

⠿ Container html-mailhog-1 Started 1.4s

⠿ Container html-mysql-1 Starting 1.5s

⠿ Container html-laravel.test-1 Created 0.0s

Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

ubuntu@DESKTOP-M687OU3:/var/www/html$ sail composer require league/flysystem-aws-s3-v3 "^3.0"

service "laravel.test" is not running container #1

ubuntu@DESKTOP-M687OU3:/var/www/html$ sail artisan livewire:publish --config

service "laravel.test" is not running container #1

ubuntu@DESKTOP-M687OU3:/var/www/html$ ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000

link/ether 66:ad:d6:8a:2f:a0 brd ff:ff:ff:ff:ff:ff

3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000

link/ether 9a:a7:32:bd:27:cb brd ff:ff:ff:ff:ff:ff

4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000

link/ipip 0.0.0.0 brd 0.0.0.0

5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000

link/sit 0.0.0.0 brd 0.0.0.0

6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 00:15:5d:f0:08:7c brd ff:ff:ff:ff:ff:ff

inet 172.17.156.185/20 brd 172.17.159.255 scope global eth0

valid_lft forever preferred_lft forever

inet6 fe80::215:5dff:fef0:87c/64 scope link

valid_lft forever preferred_lft forever

백승철님의 프로필 이미지
백승철
지식공유자

우선.. .예상했던 것 보다 상황이 많이 꼬인 것으로 확인 됩니다.

 

하나씩 풀어나가 보도록 하겠습니다.
Ports are not available: 은 말 그대로 지금 DB 포트 3306 번을 다른 프로그램에서 쓰고 있을 때 주로 발행하는 현상인데, 혹시 실행 중인 도커를 켜서 어떤 상태인지를 확인해 보셔야 할 것 같습니다.
image
sail up -d 로 컨테이너에 In use 가 6~7개 정도 작동한다면 정상적이며 이외에 컨테이너가 10개 넘어 간다 싶으면 중복된 컨테이너 오류일 것 같습니다.

3306 포트를 사용할 수 없다고 나오는 것을 보면 혹시 라라벨 프로젝트 이외에 컴퓨터에 DB를 실행중인지 체크해주시길 부탁드리겠습니다. 먼저 실행되어 있거나 다른 계정에서 사용중이라면 sail up을 하더라도 다음처럼 바로 꺼지게 됩니다.
image
그리고 위에서 언급했던 WSL 과 인터넷 통신에는 설정에는 이상이 없어 보입니다. 그렇다면 다음으로 의심되는 것은 다른 프로그램들하고의 충돌이니 sail 실행 뒤 도커 현황을 알려주시면 다음 의심 가는 부분을 확인해 드리겠습니다.

 

+추가
컨테이너 실행 뒤에도 명령을 하기위해 sail up -d 를 주로하셨지만 -d 를 빼면 컨테이너 실행 정보가 출력됩니다. 여기에서 문제가 되는 부분을 찾으실 수 있을 것 같습니다.

0

CDG님의 프로필 이미지
CDG
질문자

답변 감사합니다

다음으로 넘어가서 진행하려고 했는데 s3연결 컴포저를 설치 하려고 하는데 다음과 같은 에러메시지가 뜹니다.

무엇이 문제 일까요?

f.PNGubuntu@DESKTOP-M687OU3:/var/www/html$ sail composer require league/flysystem-aws-s3-v3 "^3.0"

https://repo.packagist.org could not be fully loaded (curl error 28 while downloading https://repo.packagist.org/packages.json: Failed to connect to repo.packagist.org port 443 after 5202 ms: Connection timed out), package information was loaded from the local cache and may be out of date

In CurlDownloader.php line 365:

curl error 28 while downloading https://repo.packagist.org/p2/league/flysystem-aws-s3-v3~dev.json: Failed to connect to repo.packagist.org port 443 after 5203 ms: Connection timed out

백승철님의 프로필 이미지
백승철
지식공유자

image

답글을 확인하고 제가 시도해 보았을 때는 composer와의 연결에 문제는 없는 것으로 확인되었습니다. 보내주신 사진으로 보았을 때는 단순히 드라이버 리포지토리와 연결을 할 수 없는 것으로 보이는데.....

다음과 같은 부분을 체크해 주세요.

  1. sail 다른 명령어는 되는지 확인해주세요. 도커가 실행중이며 컨테이너스 안에 6개의 컨테이너들이 전부 작동 되는지를 체크해 주세요.

  2. ip a 명령어를 입력해서 아마 172~ 로 시작하는 아이피가 제대로 잡히는 지를 확인해 주시길 바랍니다. WSL 이 외부와의 연결 문제로 인해 다운로드를 받지 못하는 것일 수 있을 것 같습니다.

보내주신 에러는 말 그대로 플러그인 라이브러리 저장소에 접속하지 못해서 생긴 것인데 원인을 단정 짓기는 어려울 것 같습니다. 여러가지 시도를 해보시다가 그래도 안되면 더 자세한 내역과 함께 말씀해 주셔야 할 것 같습니다.

0

백승철님의 프로필 이미지
백승철
지식공유자

해당 강의가 PPT 및 사진으로만 되어있어서 헷갈려 하실 수 있겠다는 생각이 들었습니다.

그래서 부족한 설명을 조금 더 해드리도록 해드리자면....
해당 강의에서 S3 버킷 권한 설정을 하시고, 라라벨 프로젝트의 env 에서 s3 설정 까지는 잘 따라 와주신 것 같습니다.

그 다음 public 폴더 단계란 라라벨 페이지 에서 form 안의 POST 전송으로 원하는 (예 A.jpg) 파일을 보내게 되면 이제부터 A.jpg 는 프로젝트 내의 storage -> public 이 아닌 연결한 Amazon S3 -> public (처음 파일을 POST로 받을 때 자동으로 생성됩니다.) -> 랜덤네임.jpg로 저장된다는 뜻이었습니다.

imageimage


S3 연결이 완료 되었다고 생각하시면 간단하게 블레이드 페이지를 하나 만드셔서 multipart/form-data로 파일을 전송시켜 보시는 작업을 진행해 보아 주세요. 그렇게 한 뒤에 라라벨 오류 페이지가 뜨거나 파일이 S3에서 찾을 수 없으면 메시지와 함께 알려주시면 저도 해결에 도움이 되어 드리겠습니다.

 

CDG님의 프로필 이미지
CDG

작성한 질문수

질문하기