# UGREEN NAS 배포 가이드 ## 개요 - 운영 기본 컨테이너는 `mariadb`, `backend`, `frontend` 3개다. - `phpmyadmin`은 필요할 때만 `admin` 프로필로 추가 실행한다. - 외부 공개는 `frontend` 컨테이너 하나만 하고, `/api`, `/uploads`, `/health`는 내부적으로 `backend`로 프록시한다. - 도메인은 `https://tmaker.sori.studio` 기준으로 설정한다. ## 파일 - 프로덕션 컴포즈: [docker-compose.prod.yml](/Users/bicute/Desktop/zenn.dev/tier-cursor/docker-compose.prod.yml) - 백엔드 이미지: [backend/Dockerfile](/Users/bicute/Desktop/zenn.dev/tier-cursor/backend/Dockerfile) - 프런트 이미지: [frontend/Dockerfile](/Users/bicute/Desktop/zenn.dev/tier-cursor/frontend/Dockerfile) - 프런트 Nginx 프록시: [frontend/nginx.conf](/Users/bicute/Desktop/zenn.dev/tier-cursor/frontend/nginx.conf) - 환경변수 예시: [.env.production.example](/Users/bicute/Desktop/zenn.dev/tier-cursor/.env.production.example) ## 1. 프로젝트 업로드 - NAS 작업 폴더에 현재 프로젝트를 그대로 업로드한다. - 기존 로컬 MariaDB 내용은 무시하고 새 운영 DB로 시작해도 된다. ## 2. 환경변수 파일 준비 - 루트에서 `.env.production.example`를 복사해 `.env.production`으로 만든다. - 최소 변경값: - `MARIADB_ROOT_PASSWORD` - `MARIADB_PASSWORD` - `SESSION_SECRET` 예시: ```env MARIADB_ROOT_PASSWORD=very-strong-root-password MARIADB_DATABASE=tier_cursor MARIADB_USER=tier_cursor MARIADB_PASSWORD=very-strong-app-password SESSION_SECRET=very-strong-random-session-secret ``` ## 3. 컨테이너 실행 ```bash docker compose --env-file .env.production -f docker-compose.prod.yml up -d --build ``` - phpMyAdmin까지 같이 띄우려면: ```bash docker compose --env-file .env.production -f docker-compose.prod.yml --profile admin up -d --build ``` ## 4. NAS 리버스 프록시 - 외부 도메인: `tmaker.sori.studio` - 내부 대상 프로토콜: `http` - 내부 대상 호스트: NAS IP 또는 `localhost` - 내부 대상 포트: `8080` 즉 NAS 리버스 프록시는 `frontend` 컨테이너의 `8080`만 바라보면 된다. ## 5. HTTPS / 쿠키 - 현재 프로덕션 컴포즈는 `SESSION_COOKIE_SECURE=true`를 사용한다. - 따라서 `tmaker.sori.studio`에는 HTTPS 인증서가 연결되어 있어야 한다. - NAS 리버스 프록시가 HTTPS 종료를 하고 내부는 `http://frontend:80` 또는 `localhost:8080`으로 전달하면 된다. ## 6. 데이터 위치 - MariaDB 데이터: Docker volume `tmaker_mariadb_data` - 업로드 파일: Docker volume `tmaker_uploads` - 세션 파일: Docker volume `tmaker_sessions` ## 7. 점검 포인트 - 메인 접속: `https://tmaker.sori.studio` - 헬스체크: `https://tmaker.sori.studio/health` - 관리자 로그인 후: - 게임 생성 - 썸네일 업로드 - 티어표 저장 - 이미지 다운로드 ## 8. 참고 - 현재 업로드 이미지는 서버 저장 전에 리사이즈/압축하지 않는다. - 운영 중 원본 이미지가 많이 쌓이면 이후 `sharp` 기반 최적화 단계를 추가하는 것이 좋다.