From 801ae7ae891574b9ee96f8532ae5cc0fe877ad0d Mon Sep 17 00:00:00 2001 From: zenn Date: Thu, 13 Aug 2026 15:43:43 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9A=B4=EC=98=81=20DB=20=EB=B3=BC=EB=A5=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 1 + docs/deploy.md | 8 ++++++++ docs/history.md | 4 ++++ docs/update.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 16bde0f..c18ef80 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,6 +33,7 @@ services: volumes: sori-studio-postgres: + name: ${POSTGRES_VOLUME_NAME:-soristudio_sori-studio-postgres} networks: sori-studio-network: diff --git a/docs/deploy.md b/docs/deploy.md index 602f160..da3a282 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -32,6 +32,13 @@ Linux CI 이미지에서 브라우저 시스템 의존성도 함께 준비해야 ### 운영 마이그레이션과 미디어 카탈로그 전환 +운영 PostgreSQL 볼륨은 Compose 프로젝트명 변화에 영향받지 않도록 `POSTGRES_VOLUME_NAME` 또는 기본값 `soristudio_sori-studio-postgres`로 실제 이름을 고정한다. UGREEN Docker 앱에서 프로젝트 이름이 달라지면 `sori-studio_sori-studio-postgres`처럼 새 빈 볼륨이 붙고 PostgreSQL init 스크립트가 다시 실행될 수 있으므로, 배포 전후 아래 명령으로 DB 컨테이너가 기존 운영 볼륨을 물고 있는지 확인한다. + +```bash +sudo docker inspect sori-studio-db --format '{{range .Mounts}}{{println .Name .Destination}}{{end}}' +sudo docker volume ls | grep -i sori +``` + ```bash sh scripts/migrate-production-db.sh status sh scripts/migrate-production-db.sh migrate @@ -43,6 +50,7 @@ sh scripts/migrate-production-db.sh status - `070_post_import_jobs.sql`은 게시물 Import 작업/항목 상태 테이블을 만든다. - `071_users_google_oauth.sql`은 회원 Google 로그인·계정 연동용 식별자 컬럼과 고유 인덱스를 만든다. - `072_analytics_content_sessions.sql`은 콘텐츠 단위 통계 세션 원장을 만들고 실시간 세션에 현재 콘텐츠 세션 해시를 추가한다. +- `/docker-entrypoint-initdb.d` SQL 로그가 운영 DB 재기동 때 다시 보이면 기존 볼륨이 아니라 빈 새 볼륨이 붙은 것이므로 즉시 컨테이너를 중지하고 기존 볼륨명을 확인한다. - 배포 직후(또는 `filesystem`) 상태에서 관리자 인증 후 `POST /admin/api/media/reconcile`을 1회 실행한다. 이 API는 파일을 삭제하거나 이동하지 않고 발견 파일 upsert, 참조 백필, 사라진 파일 `missing` 표시만 수행한다. - `media_catalog_state`의 `ready=true`, 파일시스템/카탈로그 `count`와 `bytes` 일치, `staging`·`error` 행 0을 확인한다. - 확인이 끝나면 운영 env를 `MEDIA_CATALOG_MODE=database`로 고정하고 재기동한다. 개발 환경도 동일하게 `database`로 고정한다. 준비 미완료·불일치·DB 조회 오류가 발생하면 애플리케이션은 자동으로 파일시스템 목록으로 fallback한다. diff --git a/docs/history.md b/docs/history.md index dc03a28..b259418 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,3 +1,7 @@ +## 2026-08-13 v1.12.16 — 운영 DB 볼륨은 프로젝트명에 맡기지 않는다 + +UGREEN Docker 앱에서 Compose 프로젝트명이 `soristudio`에서 `sori-studio`로 달라지면서 PostgreSQL named volume 실제 이름도 바뀌고, 컨테이너가 기존 운영 볼륨 대신 새 빈 볼륨을 물어 init 스크립트를 다시 실행하는 상황이 확인됐다. 기존 운영 데이터는 `soristudio_sori-studio-postgres` 볼륨에 남아 있으므로, `docker-compose.yml`의 DB 볼륨 실제 이름을 `POSTGRES_VOLUME_NAME` 기본값으로 고정해 프로젝트명 변화와 무관하게 같은 운영 볼륨을 사용한다. 배포 문서에는 볼륨 확인 명령과 init 로그 재출현 시 중지해야 한다는 경고를 추가한다. + ## 2026-08-13 v1.12.15 — NAS 배포는 Buildx 설치 후 기본 Compose로 통일한다 UGREEN NAS의 Docker 빌드 문제는 프로젝트별 Compose 차이가 아니라 NAS Docker 환경에 Buildx CLI 플러그인이 없는 문제로 확인했다. Buildx는 프로젝트 파일이 아니라 Docker 환경 단위 플러그인이므로, 임시로 추가했던 `docker-compose.nas.yml` 이미지 실행 우회 경로는 제거하고 기본 `docker-compose.yml` 빌드 경로를 유지한다. 배포 문서에는 Debian 12 x86_64 NAS에서 Buildx를 수동 설치하고 `sudo docker buildx version`으로 확인하는 절차를 남긴다. diff --git a/docs/update.md b/docs/update.md index 9488ae6..2554416 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 이력 +## v1.12.16 + +- 운영 PostgreSQL 볼륨 이름을 `POSTGRES_VOLUME_NAME` 기본값 `soristudio_sori-studio-postgres`로 고정해 Compose 프로젝트명 변경 시 새 빈 DB 볼륨이 붙지 않도록 수정. +- 배포 문서에 운영 DB 볼륨 확인 명령과 init 스크립트 재실행 경고 추가. + ## v1.12.15 - Buildx 설치 후 기본 `docker-compose.yml` 배포를 사용하도록 NAS 이미지 실행 우회 Compose 제거. diff --git a/package-lock.json b/package-lock.json index bac5f5f..a69ee3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sori.studio", - "version": "1.12.15", + "version": "1.12.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sori.studio", - "version": "1.12.15", + "version": "1.12.16", "hasInstallScript": true, "dependencies": { "@nuxtjs/tailwindcss": "^6.14.0", diff --git a/package.json b/package.json index d4ef92e..a9086b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sori.studio", - "version": "1.12.15", + "version": "1.12.16", "private": true, "type": "module", "imports": {