NAS 운영 네이밍을 uniare-*로 통일

docker-compose 서비스/컨테이너/볼륨 이름을 uniare 기준으로 맞추고, nginx 프록시 대상 및 배포 문서 예시를 함께 갱신했습니다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-22 20:12:37 +09:00
parent 331d6c5fe9
commit 2228757ea5
8 changed files with 42 additions and 21 deletions

View File

@@ -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:

View File

@@ -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:

View File

@@ -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. 트러블슈팅

View File

@@ -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.

View File

@@ -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` 인라인 스크립트 모듈 분리

View File

@@ -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 — 덱 썸네일 미리보기·저장 크기 통일
### 수행 작업

View File

@@ -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;

View File

@@ -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;