diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index b93e995..704579c 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -4,9 +4,9 @@ # 정적 파일(HTML, images, datas)은 필요한 경로만 read-only 마운트 — 카드/이미지 추가 시 재빌드 불필요 services: - uadeck-api: + uniare-api: build: ./api - container_name: uadeck-api + container_name: uniare-api restart: unless-stopped expose: - "3000" @@ -23,7 +23,7 @@ services: - DB_PATH=/data/uadeck.db - DATAS_PATH=/datas volumes: - - uadeck-data:/data + - uniare-data:/data - ./datas:/datas:ro - ./api/data/previews:/data/previews - ./api/data/avatars:/data/avatars @@ -34,12 +34,12 @@ services: retries: 3 start_period: 15s - uadeck-web: + uniare-web: build: context: . dockerfile: nginx/Dockerfile - image: uadeck-web:latest - container_name: uadeck-web + image: uniare-web:latest + container_name: uniare-web restart: unless-stopped ports: - "${WEB_PORT:-44082}:80" @@ -60,8 +60,8 @@ services: - ./datas:/usr/share/nginx/html/datas:ro - ./images:/usr/share/nginx/html/images:ro depends_on: - uadeck-api: + uniare-api: condition: service_healthy volumes: - uadeck-data: + uniare-data: diff --git a/docker-compose.yml b/docker-compose.yml index efcedf9..c275912 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: - uadeck-api: + uniare-api: build: ./api - container_name: uadeck-api + container_name: uniare-api restart: unless-stopped ports: - "${API_PORT:-3000}:3000" @@ -18,7 +18,7 @@ services: - DB_PATH=/data/uadeck.db - DATAS_PATH=/datas volumes: - - uadeck-data:/data + - uniare-data:/data - ./datas:/datas:ro - ./api/data/previews:/data/previews - ./api/data/avatars:/data/avatars @@ -30,4 +30,4 @@ services: start_period: 15s volumes: - uadeck-data: + uniare-data: diff --git a/docs/deploy.md b/docs/deploy.md index 8d0aec5..a6bd0a4 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -100,7 +100,7 @@ curl http://localhost:3000/api/v1/health |---|---| | API 미실행 | `npm start` (또는 `npm run dev`) | | Live Server로 HTML만 연 경우 | POST `/api/v1/...`가 정적 서버로 가서 405 발생 → 방법 A 또는 B 사용 | -| Docker 미기동 | `docker ps`로 `uadeck-api`, `uadeck-web` 확인 | +| Docker 미기동 | `docker ps`로 `uniare-api`, `uniare-web` 확인 | ## 4. Docker 기동 (NAS / 프로덕션) @@ -123,13 +123,13 @@ curl http://localhost:44082/api/v1/health 이미 NAS에서 Nginx Proxy Manager, Traefik, Caddy 등을 쓰는 경우: -### 옵션 A — `uadeck-web` 포트만 프록시 (권장) +### 옵션 A — `uniare-web` 포트만 프록시 (권장) ``` https://uniare.sori.studio → http://NAS_IP:44082 ``` -`uadeck-web` 컨테이너가 `/api/`와 정적 파일을 모두 처리합니다. +`uniare-web` 컨테이너가 `/api/`와 정적 파일을 모두 처리합니다. `docker-compose.prod.yml`은 프로젝트 루트 전체를 웹 루트로 열지 않고, 필요한 HTML·정적 폴더만 read-only로 마운트합니다. 따라서 `.env`, `.git`, `api/`, `docs/` 같은 내부 파일은 Nginx에서 직접 노출되지 않습니다. @@ -163,13 +163,13 @@ location /api/ { ```bash # 로그 -docker compose -f docker-compose.prod.yml logs -f uadeck-api +docker compose -f docker-compose.prod.yml logs -f uniare-api # 재시작 docker compose -f docker-compose.prod.yml restart # DB 백업 (볼륨 내 SQLite) -docker cp uadeck-api:/data/uadeck.db ./backup/uadeck-$(date +%Y%m%d).db +docker cp uniare-api:/data/uadeck.db ./backup/uadeck-$(date +%Y%m%d).db ``` ## 8. 카드/이미지 업데이트 @@ -182,7 +182,7 @@ docker cp uadeck-api:/data/uadeck.db ./backup/uadeck-$(date +%Y%m%d).db API 컨테이너는 `datas/`를 read-only 마운트하므로 새 시리즈 파일 추가 후 API 재시작만 하면 됩니다: ```bash -docker compose -f docker-compose.prod.yml restart uadeck-api +docker compose -f docker-compose.prod.yml restart uniare-api ``` ## 9. 트러블슈팅 diff --git a/docs/history.md b/docs/history.md index 2cab7e7..bcf3b34 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,5 +1,14 @@ # 의사결정 이력 +## 2026-06-22 / NAS 운영 네이밍 정리 (`uniare-*`) +- 배경: NAS에 기존 `uniare-web` 컨테이너와 신규 `uadeck-web` 컨테이너가 공존하면서 포트 충돌 및 식별 혼선이 발생했다. +- 결정: +- Docker Compose 서비스/컨테이너 명칭을 프로젝트 식별자 기준 `uniare-*`로 통일한다. +- Nginx 내부 프록시 대상도 서비스명 변경에 맞춰 `uniare-api`로 함께 정렬한다. +- 이유: +- 운영 시 `docker ps`, 로그 확인, 재시작 명령에서 컨테이너 목적을 즉시 식별하기 위함. +- 기존 운영 스택(`uniare`)과 명칭 일관성을 맞춰 재배포 실수를 줄이기 위함. + ## 2026-06-19 / v4.0.0 구현 완료 - 배경: 설계 확정 후 회원·API·공유 시스템 1차 구현. - 반영: `api/` 백엔드, Docker Compose, 인증/덱/관리자 API, 프론트 신규 페이지 및 헤더 프로필 UI. diff --git a/docs/todo.md b/docs/todo.md index cde9d5f..a382535 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -17,7 +17,7 @@ - [x] `index.html` 버전 `v4.0.0` ## v4 후속 작업 -- [ ] NAS에 `docker compose -f docker-compose.prod.yml up -d` 배포 +- [ ] NAS에서 구 컨테이너(`uniare-web`) 정리 후 신규 스택(`uniare-web`, `uniare-api`) 재기동 확인 - [ ] `.env` 설정 및 기존 리버스 프록시 연동 - [ ] 옆 프로젝트에 `integrations/uadeck-deck-client.js` 적용 - [ ] `cardList.html` 인라인 스크립트 모듈 분리 diff --git a/docs/update.md b/docs/update.md index b0865eb..107f113 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,17 @@ # 업데이트 이력 +## 2026-06-22 / v4.0.0 — Docker 서비스명 `uniare-*` 통일 + +### 수행 작업 +- `docker-compose.prod.yml`: 서비스/컨테이너/이미지/볼륨 이름을 `uadeck-*`에서 `uniare-*`로 변경 +- `docker-compose.yml`: API 서비스/컨테이너/볼륨 이름을 `uniare-*`로 변경 +- `nginx/default.conf`: 내부 API 프록시 대상 `uadeck-api` → `uniare-api` 반영 +- `nginx/uadeck.conf`: API 프록시 대상 컨테이너 이름을 `uniare-api`로 갱신 +- `docs/deploy.md`: 운영 명령 및 컨테이너 확인 예시 이름을 `uniare-*` 기준으로 갱신 + +### 메모 +- API DB 파일명(`uadeck.db`)과 API 경로(`/api/v1/*`)는 호환성을 위해 유지했다. + ## 2026-06-19 / v4.0.0 — 덱 썸네일 미리보기·저장 크기 통일 ### 수행 작업 diff --git a/nginx/default.conf b/nginx/default.conf index 51f0c9a..edf5852 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -14,7 +14,7 @@ server { # API → 백엔드 컨테이너 location /api/ { - proxy_pass http://uadeck-api:3000; + proxy_pass http://uniare-api:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/nginx/uadeck.conf b/nginx/uadeck.conf index 6b7f77f..f79b4e9 100644 --- a/nginx/uadeck.conf +++ b/nginx/uadeck.conf @@ -10,7 +10,7 @@ location ~ ^/d/([A-Za-z0-9]+)$ { client_max_body_size 25m; location /api/ { - proxy_pass http://uadeck-api:3000; + proxy_pass http://uniare-api:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;