name: invyone # invyone (= 옛 TEST-VEX, React + Java 풀스택) 도커 컴포즈 # 사무실 우분투 호스팅용. restart unless-stopped 로 항상 떠있게. # # 외부 노출 포트: # - frontend : 9772 # - backend-spring : 8083 # # 컨테이너 내부 포트는 각 앱의 기본값 유지 (3000 / 8081) # 모드: dev (volume mount + 자동 리로드). 코드 변경은 syncthing 통해 동기화됨. # # 띄우기: # cd ~/invyone && docker compose -f docker/dev/docker-compose.invyone.yml up -d # # 끄기: # cd ~/invyone && docker compose -f docker/dev/docker-compose.invyone.yml down services: # ======================== # Spring Boot 백엔드 # ======================== backend-spring: image: invyone-backend-spring build: context: ../../backend-spring dockerfile: ../docker/dev/backend-spring.Dockerfile container_name: invyone-backend-spring ports: - "8083:8081" environment: SPRING_PROFILES_ACTIVE: dev SERVER_PORT: 8081 # DB 연결 정보는 backend-spring/src/main/resources/application.yml 사용 (단일 소스). # env 로 override 하고 싶으면 여기에 SPRING_DATASOURCE_URL/USERNAME/PASSWORD 를 다시 추가. # JWT_SECRET 은 docker/dev/.env 에서 주입 (이 파일은 git 추적, .env 는 gitignored + syncthing 동기화) JWT_SECRET: ${JWT_SECRET:?JWT_SECRET 환경변수 필요. docker/dev/.env 파일 확인} JWT_EXPIRATION: ${JWT_EXPIRATION:-86400000} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:9772,http://100.126.230.80:9772,http://*.invyone.com:[*],https://*.invyone.com:[*],http://*.invyone.com,https://*.invyone.com,http://*.nip.io:[*],http://*.sslip.io:[*]} FILE_UPLOAD_DIR: ./uploads volumes: - ../../backend-spring:/app networks: - invyone-net restart: unless-stopped healthcheck: # actuator 미설치 + spring security 가 / 와 /health 모두 403 처리. # 컨테이너 내부에서 8081 포트로 응답이 오기만 하면 (status 무관) OK 로 간주. test: ["CMD-SHELL", "curl -sS -o /dev/null http://localhost:8081/ || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 120s # ======================== # Next.js 프론트엔드 # ======================== frontend: image: invyone-frontend build: context: ../../frontend dockerfile: ../docker/dev/frontend.Dockerfile container_name: invyone-frontend ports: - "9772:3000" environment: NODE_ENV: development # 브라우저는 상대경로로 호출 → next dev server가 rewrites 로 컨테이너 내부 backend 로 프록시 # (절대 URL 박으면 호스트/IP 가 머신마다 달라서 다른 머신에서 접속 시 깨짐) NEXT_PUBLIC_API_URL: /api # 서버사이드(SSR/rewrites)에서 backend 호출용 — 컨테이너 네트워크 내부 이름 SERVER_API_URL: http://invyone-backend-spring:8081 NODE_OPTIONS: --max-old-space-size=8192 NEXT_TELEMETRY_DISABLED: "1" WATCHPACK_POLLING: "true" volumes: - ../../frontend:/app - /app/node_modules - /app/.next depends_on: - backend-spring networks: - invyone-net restart: unless-stopped networks: invyone-net: name: invyone-net driver: bridge