diff --git a/public/images/academy/docker-environment/10.svg b/public/images/academy/docker-environment/10.svg new file mode 100644 index 00000000..4cbd4069 --- /dev/null +++ b/public/images/academy/docker-environment/10.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + Docker 명령어 치트시트 + + + + + 안전 + + 주의 + + 위험 + + + + + + 안전 + 상태 확인 + + docker ps + 실행 중인 컨테이너 목록 확인 + 포트, 상태, 이름 표시 + + + + + 안전 + 로그 확인 + + docker logs sam-api-1 + 컨테이너 출력 로그 확인 + -f 옵션으로 실시간 모니터링 + + + + + 안전 + 명령어 실행 + + docker exec sam-api-1 php artisan ... + 컨테이너 내부에서 명령 실행 + artisan, composer 등 + + + + + + 안전 + 캐시 클리어 + + docker exec sam-api-1 php artisan cache:clear + 설정/라우트/뷰 캐시 초기화 + config:clear, route:clear 도 가능 + + + + + 주의 + 재시작 + + docker compose restart + 모든 컨테이너 재시작 + 서비스 일시 중단 발생 + + + + + 주의 + 마이그레이션 + + docker exec sam-api-1 php artisan migrate + DB 스키마 변경 적용 + 반드시 API 컨테이너에서 실행! + + + + + + 주의 + 의존성 설치 + + docker exec sam-api-1 composer install + PHP 패키지 설치/업데이트 + pull 후 composer.json 변경 시 실행 + + + + + 위험 + 컨테이너 삭제 + + docker compose down -v + 컨테이너 + 볼륨 완전 삭제 + -v 옵션: DB 데이터도 삭제됨! + + + + + 금지 + 서버 빌드 + + npm run build (서버에서) + 서버 메모리 부족으로 실패 위험 + 반드시 로컬에서 빌드 후 배포! + + + + 자주 사용하는 조합: + + + docker exec sam-api-1 php artisan config:clear + 설정 변경 후 + + + docker exec sam-api-1 php artisan queue:restart + 큐 워커 갱신 + + + docker exec sam-mng-1 php artisan view:clear + + + + docker logs -f --tail=50 sam-api-1 + + + 뷰 캐시 초기화 + 최근 50줄 실시간 로그 + \ No newline at end of file diff --git a/public/images/academy/docker-environment/6.svg b/public/images/academy/docker-environment/6.svg new file mode 100644 index 00000000..d21fb1df --- /dev/null +++ b/public/images/academy/docker-environment/6.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Nginx 도메인 → 서비스 라우팅 맵 + + + + 도메인 (외부 요청) + Nginx 리버스 프록시 + 서비스 컨테이너 + + + + + Nginx + :80 / :443 + + + + + mng.sam.kr + + + + api.sam.kr + + + + app.sam.kr + + + + admin.sam.kr + + + + + + mng:8080 + + + + + api:8080 + + + + + react:3000 + + + + + admin:8080 + + + + + + + + + + + + + + + + + + 추가 서비스 + + + + phpmyadmin.sam.kr + + + + Nginx + + + + + phpmyadmin:80 + + + + + + + + 범례: + + + 도메인 (외부) + + + Nginx 라우터 + + + 서비스 컨테이너 + + + 요청 흐름 + + server_name 기반 가상 호스트 라우팅 | 모든 트래픽은 Nginx를 통해 내부 컨테이너로 전달됨 + \ No newline at end of file diff --git a/public/images/academy/docker-environment/7.svg b/public/images/academy/docker-environment/7.svg new file mode 100644 index 00000000..86b9b897 --- /dev/null +++ b/public/images/academy/docker-environment/7.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + 볼륨 마운트 구조 + + + + + + 호스트 (WSL) + + + + 소스코드 + /home/aweso/sam/mng + + + + 소스코드 + /home/aweso/sam/api + + + + + Docker 컨테이너 + + + + sam-mng-1 + /var/www/mng + + + + sam-api-1 + /var/www/api + + + + + + 바인드 마운트 + + + + + 바인드 마운트 + + + + 실시간 동기화 + + + + + Docker 볼륨 (격리) + + + + 잠금 + + + + + mng_vendor + PHP 의존성 (vendor/) + 컨테이너 재시작 시 유지 + + + + api_vendor + PHP 의존성 (vendor/) + 컨테이너 재시작 시 유지 + + + + db_data + MySQL 데이터 파일 + 데이터 영속성 보장 + + + + 바인드 마운트 vs Docker 볼륨: + 바인드 마운트: 호스트 파일 직접 연결 (소스코드 수정 즉시 반영) | 호스트에서 파일 편집 가능 + Docker 볼륨: Docker가 관리하는 격리된 스토리지 | 성능 우수 | 컨테이너 삭제해도 데이터 유지 + \ No newline at end of file diff --git a/public/images/academy/docker-environment/8.svg b/public/images/academy/docker-environment/8.svg new file mode 100644 index 00000000..a7948af1 --- /dev/null +++ b/public/images/academy/docker-environment/8.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + .env 로드 흐름 다이어그램 + + + + + + + + + + + .env + 환경 변수 정의 파일 + + + + + + + + + + config:cache + config/*.php 로 컴파일 + + + + + + + env() + 헬퍼 함수 + config() 통해 캐시된 값 반환 + + + + + + + 애플리케이션 코드 + config('app.name'), config('database.host') + + + + docker-compose.yml + environment: + APP_ENV: production + DB_HOST: mysql + + + + + override + + + + 우선순위 (높음 → 낮음) + + + + + 1 + docker environment + 컨테이너 환경변수 + + + + 2 + .env + 프로젝트 환경변수 + + + + 3 + .env.example + 기본값 (fallback) + + + + config:cache 후 .env 변경 시 cache:clear 필요! + + + + 핵심 포인트: + 1. .env 파일은 Laravel 부팅 시 로드되어 config/*.php 값에 바인딩됨 + 2. config:cache 실행 시 .env 직접 읽기 불가 → 반드시 config() 헬퍼 사용 + 3. Docker 환경에서는 docker-compose.yml의 environment 값이 .env보다 우선 적용됨 + + + + 1 + + + 2 + + + 3 + + + 4 + \ No newline at end of file diff --git a/public/images/academy/docker-environment/9.svg b/public/images/academy/docker-environment/9.svg new file mode 100644 index 00000000..d3cc3350 --- /dev/null +++ b/public/images/academy/docker-environment/9.svg @@ -0,0 +1,126 @@ + + + + + + + + + + + + + 로컬 vs 서버 환경 비교 + + + + + + 로컬 (Docker) + + + + Windows WSL2 (Ubuntu) + + + + Docker Compose + + + + sam-nginx-1 + :80, :443 + + + sam-api-1 + :8080 + + + sam-mng-1 + :8080 + + + sam-mysql-1 + :3306 + + + + 명령어 실행 방법: + docker exec sam-api-1 php artisan ... + + + 소스 경로: /home/aweso/sam/ + 컨테이너 내부: /var/www/ + 접속: mng.sam.kr (hosts 설정) + + + + + 서버 (직접 설치) + + + + Ubuntu 22.04 LTS + + + + 직접 설치 (apt, pecl 등) + + + + Nginx + :80, :443 + + + PHP 8.3-FPM + unix socket + + + MySQL 8.0 + :3306 + + + Node.js 20 + PM2 관리 + + + + 명령어 실행 방법: + php artisan ... + + + 소스 경로: /home/webservice/ + 직접 실행 (컨테이너 없음) + 접속: mng.sam.kr (DNS/공인IP) + + + + + 공통점 + + 동일한 소스 코드 (Git으로 동기화) + 동일한 DB 스키마 (마이그레이션 공유) + 동일한 .env 구조 (값만 다름) + 동일한 Laravel 11 + PHP 8.3 + 동일한 Composer 의존성 + + + + 로컬 차이점 + + docker exec 접두사 필요 + 바인드 마운트로 코드 공유 + hosts 파일로 도메인 매핑 + DB_HOST=mysql (컨테이너명) + npm run build 로컬 실행 + + + + 서버 차이점 + + 직접 명령어 실행 + 디스크에 직접 설치 + DNS로 도메인 연결 + DB_HOST=127.0.0.1 + 빌드 금지 (메모리 부족) + \ No newline at end of file