본문 바로가기
기타

라라독을 활용한 개발 환경 세팅

2022. 1. 7.

라라독을 활용한 개발 환경 세팅

💡 도커를 활용한 개발환경 세팅 과정에서 여러가지 문제가 발생했고 결국 사용하지 않기로 했습니다. 뭐 혹시나~ 필요할 지 몰라서 참고용으로 기록 남깁니다.

전체 프로세스

1) 라라독 설치 2) 도커 설치 3) 설치한 라라독 디렉토리에 있는 docker-compose 파일을 도커로 띄우면 라라벨 개발을 위한 개발 환경 세팅이 아주 편리하게 되는 것.

사전 체크리스트

  • 프로젝트 루트 디렉토리에 .env 파일 있는지 확인
  • 프로젝트 디렉토리에서 composer install 했는지 확인 (vendor 디렉토리가 있는지 확인)

 

1. 라라독 git 으로 설치 

라라독: 라라벨 구동에 필요한 여러 패키지들을 묶어서 설치할 수 있는 docker 파일을 제공함.

내가 띄우고 싶은 라라벨 프로젝트가 nginx mariadb를 사용하는 경우, 라라독에서 이것들의 dockerfile을 제공하고 있기 때문에 그냥 가져다가 바로 컨테이너를 띄워서 프로젝트 개발환경을 세팅할 수 있는 것.

https://laradock.io/

 

Laradock

Full PHP development environment for Docker.

laradock.io

 

2. 도커 설치

로그인 후 os에 맞게 설치 (m1 은 mac with apple chip 으로 설치)

설치 가이드 따라서 설치하면 된다. (Apple 실리콘이 탑재된 Mac)

https://docs.docker.com/desktop/mac/install/

 

Install Docker Desktop on Mac

 

docs.docker.com

설치 후 도커 데스크탑을 실행해보면, 2분 가량의 간단한 튜토리얼을 해볼 수 있다.

 

나의 경우 80 포트를 쓰고 있어서 바로 오류가 났다.

 docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use.

80 포트 이미 쓰고 있으니 80 포트로는 도커 컨테이너를 띄울 수 없다는 의미인데, 뭐 이건 80포트를 죽이고 다시 띄워주면 되는 문제라 나중에 포트 정리하면서 다시 보기로 했다.

 

3. 라라독으로 도커 데몬 실행시키기

  • 라라벨 프로젝트 생성
$ composer create-project --prefer-dist laravel/laravel laravel -vvv
  • 도커파일 빌드 후 데몬 띄우기
docker-compose build --no-cache nginx mariadb workspace
docker-compose up nginx workspace mariadb

오류 메세지 없이 잘 실행되었다. 아, 443 포트는 이미 사용 중이라 nginx 는 못 띄웠다.

Error response from daemon: Ports are not available: listen tcp 0.0.0.0:443: bind: address already in use
  • 현재 컨테이너 상태 확인
docker-compose ps

  • workspace 컨테이너 접속
docker-compose exec workspace bash
#위 명령어로 workspace  컨테이너에 접속해본다.

ls 명렁어로 현재 디렉토리 상태를 확인해보면 아까 생성한 laravel 프로젝트의 디렉토리를 확인할 수 있다.

  • hosts 설정: 도커로 띄운 nginx와 로컬 hosts 설정 맞춰주기 (도메인 설정)
    • laradock/nginx/sites/app.conf 파일 수정 (디렉토리 위치는 본인 환경에 맞게 찾아야 함)
server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name #도메인 이름 넣어주기;
    root #index.php 디렉토리;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/app_error.log;
    access_log /var/log/nginx/app_access.log;
}
    • laradock/nginx/sites/app.conf 파일 수정 (디렉토리 위치는 본인 환경에 맞게 찾아야 함)
127.0.0.1 #도메인 이름 넣어주기

여기까지 하면 문제없이 잘 떠야 하는 것 같지만... 나는 500, 502 에러 등등 다양한 문제가 있었고 마지막 nginx 502 badgateway 에러 해결 못하고 포기했다. 그래서 디버깅이라도 기록.

 

디버깅 기록

암튼 여기까지 하고 해당 도메인에 접속했는데 500 에러가 떴다.

도커 php-fpm 컨테이너의 log를 확인해보니 새로고침 할 때마다 500 에러가 찍히는 것을 확인할 수 있다.

NOTICE: PHP message: PHP Stack trace:
NOTICE: PHP message: PHP   1. {main}() /var/www/exelbid2-manage-v2/public/index.php:0
NOTICE: PHP message: PHP Fatal error:  require(): Failed opening required '/var/www/exelbid2-manage-v2/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/exelbid2-manage-v2/public/index.php on line 24
NOTICE: PHP message: PHP Stack trace:
NOTICE: PHP message: PHP   1. {main}() /var/www/exelbid2-manage-v2/public/index.php:0

- composer install

유부장님이 composer? 의존성 문제라고 하셔서 composer install을 해주니, mongodb 가 적절한 버전으로 설치되어 있지 않다.. 뭐 이런 문제였던 것 같다. (덕중 팀장님의 맥 기본 세팅 매뉴얼을 먼저 따라하고 이걸 했으면 아마 이 문제는 없었을 것 같다)

- mongodb 설치

로컬에서도 그렇지만 도커 내에서도 같은 문제라서, 일단은 도커 안에서 해봤다

workspace 컨테이너에 접속해서 그 안에서 설치해주기로 했다.

docker-compose exec workspace bash
# 해주면 workspace 컨테이너 내부의 디렉토리에 접근할 수 있다.
# /var/www 에서 터미널이 켜진다.

이 안에서 mongodb를 설치해줄 것이다. 

#php 버전 확인
php -v

#설치된 모듈 리스트 확인 (여기에 mongodb가 있어야 하는데 없음)
php -m 

#pecl 사용 가능한지 확인
pecl 

#mongodb 설치
pecl install mongodb

설치는 완료됐지만 php.ini 파일에서 mongodb.so 익스텐션은 수동으로 추가해줘야 한다고 했다.

실제로 이 상태에서 php -m 으로 설치된 모듈을 확인해보면 mongodb가 찍히지 않았다. phpinfo(); 로 브라우저에서 띄워봐도 mongodb가 없었음.

- mongodb 가 제대로 설치되지 않는 문제

1) mongodb.so 익스텐션 수동으로 추가해주기

#php.ini 파일 경로 찾기
$ php —ini | grep php.ini
/opt/homebrew/etc/php/7.3/php.ini

$ vim /opt/homebrew/etc/php/7.3/php.ini
# 해서 '/' 로 검색.
# 'mongodb' 검색해서 "extension=mongodb.so"가 없으면 추가해줬던 것 같음...

2) pecl2? 뭐 이런 파일을 찾지 못한다는 에러 ⇒ 찾고 있는 경로에 pecl2? 암튼 해당 파일을 복사해주니 해결

- 캐시 비우기

php artisan cache:clear
php artisan config:cache

여기까지 했는데도 해결이 안 됐음. 이후로는 매니저님들이 이것저것 다양한 시도를 해주셨다. 정확히 기억은 안 나지만 일단 대략적인 디버깅 순서는 다음과 같다.

  • nginx 컨테이너를 포트 문제로 띄울 수 없었음 => apache 끄고 했음. 물론 임시 방편
  • nginx conf 파일과 hosts 도메인 설정해줌 => 접속해보면 500 에러
  • 필요한 프로그램들이 안 깔려있어서 그럴 수 있다고 했음. composer install 하니, mongodb 안 깔려있다고 떴음 => mongodb 설치
  • mongodb가 제대로 설치 되지 않는 문제 php -m, phpinfo(); 에서 떠야 하는데 둘다 뜨지 않았음.. => 수동으로 익스텐션 추가해주고, pecl2? 뭐 이런 파일을 찾지 못하는 문제였던 것 같아서 찾는 경로에 그 파일을 복사해주니 해결
  • nginx 502 bad gateway 오류 => 의심되는 거 하나 하나 해봄 (https://opennote46.tistory.com/169)
    • db 연결 제대로 됐는지 쿼리 하나 날려서 잘 뜨는지 확인 → 잘 됨.. db 문제는 아니구나..
    • 라우트 확인(?뭔지는 모르겠지만..)
    • php route:list

 

디버깅 기록: a javascript error occurred in the main process

맥은 docker-compose 가 자동으로 설치된다고 따로 설치할 필요 없다고 하던데... 뭔지 모르겠다...

암튼 명령어가 안 먹으니 터미널로는 못 할 것 같아서 docker desktop을 실행했더니,

a javascript error occurred in the main process

이런 에러가 떴고... 그냥 재설치하기로 했다.

도커 삭제

#삭제 스크립트 받기
$ curl -O https://raw.githubusercontent.com/docker/toolbox/master/osx/uninstall.sh

# 다운 받은 파일에 실행 권한 추가하고 삭제
$ chmod +x uninstall.sh
$ sudo ./uninstall.sh

# 어플리케이션 삭제
$ rm -r /Application/Docker.app

삭제하고 재설치 했는데도 이 모양... 하...ㅜ

윈도우에서 해당 에러를 해결하는 방법은 많이 나와있는데 맥은 없더라...

그래서 머리 싸매다가 그냥 재부팅 해봤는데 재부팅 하니까 또 정상적으로 돌아감...(...뭐??) (환장 포인트1)

아까는 docker compose 명령에 그런거 없다고 했는데... 재부팅하고 똑같은 명령어를 치니까 터미널에 좌르르륵 뜨면서 컨테이너를 띄우기 시작한다... (환장포인트2...)

(그래... 뭐가 이상하게 안 되면 그냥 재부팅을 해보자..)

'기타' 카테고리의 다른 글

22년 1월 1주차 TIL  (0) 2022.01.10
oh my zsh 터미널 자동완성  (0) 2022.01.10
mac 개발환경 세팅  (0) 2022.01.07
환경 변수 관련 스터디  (0) 2022.01.07
PHP 내장 웹 서버 관련 스터디  (0) 2022.01.06

댓글