NAS 운영 네이밍을 uniare-*로 통일
docker-compose 서비스/컨테이너/볼륨 이름을 uniare 기준으로 맞추고, nginx 프록시 대상 및 배포 문서 예시를 함께 갱신했습니다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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. 트러블슈팅
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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` 인라인 스크립트 모듈 분리
|
||||
|
||||
@@ -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 — 덱 썸네일 미리보기·저장 크기 통일
|
||||
|
||||
### 수행 작업
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user