운영 DB 볼륨 이름 고정

This commit is contained in:
2026-08-13 15:43:43 +09:00
parent 5600a20294
commit 801ae7ae89
6 changed files with 21 additions and 3 deletions

View File

@@ -33,6 +33,7 @@ services:
volumes: volumes:
sori-studio-postgres: sori-studio-postgres:
name: ${POSTGRES_VOLUME_NAME:-soristudio_sori-studio-postgres}
networks: networks:
sori-studio-network: sori-studio-network:

View File

@@ -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 ```bash
sh scripts/migrate-production-db.sh status sh scripts/migrate-production-db.sh status
sh scripts/migrate-production-db.sh migrate sh scripts/migrate-production-db.sh migrate
@@ -43,6 +50,7 @@ sh scripts/migrate-production-db.sh status
- `070_post_import_jobs.sql`은 게시물 Import 작업/항목 상태 테이블을 만든다. - `070_post_import_jobs.sql`은 게시물 Import 작업/항목 상태 테이블을 만든다.
- `071_users_google_oauth.sql`은 회원 Google 로그인·계정 연동용 식별자 컬럼과 고유 인덱스를 만든다. - `071_users_google_oauth.sql`은 회원 Google 로그인·계정 연동용 식별자 컬럼과 고유 인덱스를 만든다.
- `072_analytics_content_sessions.sql`은 콘텐츠 단위 통계 세션 원장을 만들고 실시간 세션에 현재 콘텐츠 세션 해시를 추가한다. - `072_analytics_content_sessions.sql`은 콘텐츠 단위 통계 세션 원장을 만들고 실시간 세션에 현재 콘텐츠 세션 해시를 추가한다.
- `/docker-entrypoint-initdb.d` SQL 로그가 운영 DB 재기동 때 다시 보이면 기존 볼륨이 아니라 빈 새 볼륨이 붙은 것이므로 즉시 컨테이너를 중지하고 기존 볼륨명을 확인한다.
- 배포 직후(또는 `filesystem`) 상태에서 관리자 인증 후 `POST /admin/api/media/reconcile`을 1회 실행한다. 이 API는 파일을 삭제하거나 이동하지 않고 발견 파일 upsert, 참조 백필, 사라진 파일 `missing` 표시만 수행한다. - 배포 직후(또는 `filesystem`) 상태에서 관리자 인증 후 `POST /admin/api/media/reconcile`을 1회 실행한다. 이 API는 파일을 삭제하거나 이동하지 않고 발견 파일 upsert, 참조 백필, 사라진 파일 `missing` 표시만 수행한다.
- `media_catalog_state`의 `ready=true`, 파일시스템/카탈로그 `count`와 `bytes` 일치, `staging`·`error` 행 0을 확인한다. - `media_catalog_state`의 `ready=true`, 파일시스템/카탈로그 `count`와 `bytes` 일치, `staging`·`error` 행 0을 확인한다.
- 확인이 끝나면 운영 env를 `MEDIA_CATALOG_MODE=database`로 고정하고 재기동한다. 개발 환경도 동일하게 `database`로 고정한다. 준비 미완료·불일치·DB 조회 오류가 발생하면 애플리케이션은 자동으로 파일시스템 목록으로 fallback한다. - 확인이 끝나면 운영 env를 `MEDIA_CATALOG_MODE=database`로 고정하고 재기동한다. 개발 환경도 동일하게 `database`로 고정한다. 준비 미완료·불일치·DB 조회 오류가 발생하면 애플리케이션은 자동으로 파일시스템 목록으로 fallback한다.

View File

@@ -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로 통일한다 ## 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`으로 확인하는 절차를 남긴다. 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`으로 확인하는 절차를 남긴다.

View File

@@ -1,5 +1,10 @@
# 업데이트 이력 # 업데이트 이력
## v1.12.16
- 운영 PostgreSQL 볼륨 이름을 `POSTGRES_VOLUME_NAME` 기본값 `soristudio_sori-studio-postgres`로 고정해 Compose 프로젝트명 변경 시 새 빈 DB 볼륨이 붙지 않도록 수정.
- 배포 문서에 운영 DB 볼륨 확인 명령과 init 스크립트 재실행 경고 추가.
## v1.12.15 ## v1.12.15
- Buildx 설치 후 기본 `docker-compose.yml` 배포를 사용하도록 NAS 이미지 실행 우회 Compose 제거. - Buildx 설치 후 기본 `docker-compose.yml` 배포를 사용하도록 NAS 이미지 실행 우회 Compose 제거.

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "sori.studio", "name": "sori.studio",
"version": "1.12.15", "version": "1.12.16",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "sori.studio", "name": "sori.studio",
"version": "1.12.15", "version": "1.12.16",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@nuxtjs/tailwindcss": "^6.14.0", "@nuxtjs/tailwindcss": "^6.14.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "sori.studio", "name": "sori.studio",
"version": "1.12.15", "version": "1.12.16",
"private": true, "private": true,
"type": "module", "type": "module",
"imports": { "imports": {