서비스 포트 충돌 해소

This commit is contained in:
2026-06-22 14:33:13 +09:00
parent 6279a046a9
commit db1030bfcd
8 changed files with 41 additions and 36 deletions

View File

@@ -4,7 +4,7 @@ DATABASE_NAME=sori_studio
POSTGRES_DB=sori_studio
POSTGRES_USER=sori_studio
POSTGRES_PASSWORD=replace-with-random-password
DB_PORT=43082
DB_PORT=43085
# Auth
ADMIN_EMAIL=admin@example.com
@@ -35,5 +35,5 @@ NUXT_PUBLIC_SITE_TITLE=sori.studio
# EMAIL_OTP_PEPPER= ← 선택. OTP를 DB에 해시해 저장할 때 섞는 서버 전용 비밀(긴 난문자열 권장, 예: openssl rand -hex 32). 비우면 MEMBER_SESSION_SECRET을 대신 사용.
# Server
APP_PORT=43081
APP_PORT=43084
DOCKER_SUBNET=10.250.50.0/24

View File

@@ -7,7 +7,7 @@ services:
env_file:
- ${ENV_FILE:-.env.production}
ports:
- "${APP_PORT:-43081}:3000"
- "${APP_PORT:-43084}:3000"
volumes:
- ./public/uploads:/app/public/uploads
depends_on:
@@ -26,7 +26,7 @@ services:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${DB_PORT:-43082}:5432"
- "${DB_PORT:-43085}:5432"
volumes:
- sori-studio-postgres:/var/lib/postgresql/data
# NAS 등: 호스트 db/migrations 가 다른 UID만 읽을 수 있으면 컨테이너에서 Permission denied → DB 재시작 루프. 프로젝트 루트에서 chmod -R a+rX db/migrations 및 상위 경로 통과 권한 확인.

View File

@@ -256,9 +256,9 @@ npm install
# 새로 만들 때는 .env.example을 복사한 뒤 비밀번호를 랜덤 값으로 교체
cp .env.example .env.development
openssl rand -hex 32
# 로컬 DB 컨테이너를 호스트에서 접근할 때는 127.0.0.1:43082 사용
# 로컬 DB 컨테이너를 호스트에서 접근할 때는 127.0.0.1:43085 사용
# 개발 서버 실행 (127.0.0.1:43081)
# 개발 서버 실행 (127.0.0.1:43084)
npm run dev
```
@@ -414,18 +414,18 @@ docker exec sori-studio-db psql -U sori_studio -d sori_studio -c 'SELECT count(*
### 확인 주소
- 개발 서버: http://127.0.0.1:43081
- 관리자: http://127.0.0.1:43081/admin
- Tailwind Viewer: http://127.0.0.1:43081/_tailwind/
- 개발 서버: http://127.0.0.1:43084
- 관리자: http://127.0.0.1:43084/admin
- Tailwind Viewer: http://127.0.0.1:43084/_tailwind/
### 로컬 DB 확인 방법
로컬 개발 DB는 PostgreSQL이며 호스트에서는 `127.0.0.1:43082`로 접근한다. 접속 정보는 Git에 포함하지 않는 `.env.development` 값을 사용한다.
로컬 개발 DB는 PostgreSQL이며 호스트에서는 `127.0.0.1:43085`로 접근한다. 접속 정보는 Git에 포함하지 않는 `.env.development` 값을 사용한다.
| 항목 | 값 |
|------|----|
| Host | `127.0.0.1` |
| Port | `43082` |
| Port | `43085` |
| Database | `.env.development`의 `POSTGRES_DB` |
| User | `.env.development`의 `POSTGRES_USER` |
| Password | `.env.development`의 `POSTGRES_PASSWORD` |
@@ -472,7 +472,7 @@ cd sori.studio
# 운영 환경 변수 설정
# .env.production은 Git에 올리지 않는 운영 전용 파일
cp .env.example .env.production
# .env.production 파일에 운영 DB 연결 정보, 운영 전용 랜덤 비밀번호, APP_PORT=43081, DB_PORT=43082 입력
# .env.production 파일에 운영 DB 연결 정보, 운영 전용 랜덤 비밀번호, APP_PORT=43084, DB_PORT=43085 입력
# 운영 DB에 owner/admin이 없으면 /admin/login에서 ADMIN_EMAIL/ADMIN_PASSWORD로 최초 owner 계정이 생성됨
# MEMBER_SESSION_SECRET은 ADMIN_PASSWORD와 다른 긴 난수 문자열로 반드시 입력
# Docker 네트워크 대역이 NAS 기존 컨테이너와 겹치면 DOCKER_SUBNET을 다른 사설 대역으로 변경
@@ -541,10 +541,10 @@ docker compose --env-file .env.production up -d --build
### 포트
- 로컬 개발: 43081
- NAS Docker 외부: 43081
- 로컬 개발: 43084
- NAS Docker 외부: 43084
- 컨테이너 내부: 3000
- PostgreSQL 외부: 43082
- PostgreSQL 외부: 43085
- Docker 내부 네트워크 기본값: `10.250.50.0/24`
- HTTPS: 3001 (SSL 설정 시)
@@ -554,7 +554,7 @@ docker compose --env-file .env.production up -d --build
- 로컬 개발: `.env.development`의 `DATABASE_URL`
- NAS 운영: `.env.production`의 `DATABASE_URL`
- 로컬 개발 예시: `postgres://sori_studio:비밀번호@127.0.0.1:43082/sori_studio`
- 로컬 개발 예시: `postgres://sori_studio:비밀번호@127.0.0.1:43085/sori_studio`
- NAS Docker 예시: `postgres://sori_studio:비밀번호@sori-studio-db:5432/sori_studio`
- `.env.example`에는 실제 비밀번호나 개인 이메일을 기록하지 않음
- 개발/운영 DB 비밀번호와 관리자 비밀번호는 서로 다른 랜덤 값을 사용
@@ -612,7 +612,7 @@ docker compose --env-file .env.production up -d --build
1. `.env.development` 확인.
```bash
# 로컬 개발 DB는 호스트 기준 127.0.0.1:43082를 사용해야 한다.
# 로컬 개발 DB는 호스트 기준 127.0.0.1:43085를 사용해야 한다.
# DATABASE_URL 전체 값은 공유하지 않는다.
rg -n "^(DATABASE_URL|POSTGRES_DB|POSTGRES_USER|DB_PORT)=" .env.development
```
@@ -620,8 +620,8 @@ rg -n "^(DATABASE_URL|POSTGRES_DB|POSTGRES_USER|DB_PORT)=" .env.development
기준:
- `DATABASE_URL` 호스트가 `127.0.0.1`
- `DATABASE_URL` 포트가 `43082`
- `DB_PORT=43082`
- `DATABASE_URL` 포트가 `43085`
- `DB_PORT=43085`
- 운영 NAS 호스트명, 운영 IP, 운영 DB 이름이 포함되지 않음
2. `.env.production` 확인.
@@ -635,9 +635,9 @@ test -f .env.production && rg -n "^(DATABASE_URL|POSTGRES_DB|POSTGRES_USER|APP_P
기준:
- NAS Docker 내부 실행 기준이면 `DATABASE_URL` 호스트가 `sori-studio-db`
- NAS 외부 DB를 별도 인스턴스로 쓰는 경우에도 로컬 개발 DB(`127.0.0.1:43082`)를 가리키지 않음
- `APP_PORT=43081`
- `DB_PORT=43082`
- NAS 외부 DB를 별도 인스턴스로 쓰는 경우에도 로컬 개발 DB(`127.0.0.1:43085`)를 가리키지 않음
- `APP_PORT=43084`
- `DB_PORT=43085`
- `MEMBER_SESSION_SECRET`이 비어 있지 않고 `ADMIN_PASSWORD`와 다름
- `.env.development`와 DB 비밀번호, 관리자 비밀번호가 서로 다름
@@ -662,8 +662,8 @@ npm run dev
기준:
- 출력 주소가 `http://127.0.0.1:43081`
- 관리자 API 요청에서 `127.0.0.1:43082` 연결 오류가 발생하지 않음
- 출력 주소가 `http://127.0.0.1:43084`
- 관리자 API 요청에서 `127.0.0.1:43085` 연결 오류가 발생하지 않음
5. 커밋 전 민감 정보 확인.

View File

@@ -885,7 +885,7 @@ DATABASE_NAME=sori_studio
POSTGRES_DB=sori_studio
POSTGRES_USER=sori_studio
POSTGRES_PASSWORD=replace-with-random-password
DB_PORT=43082
DB_PORT=43085
# Auth
ADMIN_EMAIL=admin@example.com
@@ -910,7 +910,7 @@ NUXT_PUBLIC_SITE_URL=https://sori.studio
NUXT_PUBLIC_SITE_TITLE=sori.studio
# Server
APP_PORT=43081
APP_PORT=43084
```
### 환경 파일 기준
@@ -923,18 +923,18 @@ APP_PORT=43081
- `.env.example`에는 실제 이메일, 비밀번호, 토큰, 운영 서버 주소를 기록하지 않음
- `.env.development`와 `.env.production`의 DB 비밀번호와 관리자 비밀번호는 서로 다른 랜덤 값을 사용
- 로컬 개발 `DATABASE_URL`은 호스트 기준 `127.0.0.1:43082`를 사용
- 로컬 개발 `DATABASE_URL`은 호스트 기준 `127.0.0.1:43085`를 사용
- NAS Docker 내부 `DATABASE_URL`은 서비스명 기준 `sori-studio-db:5432`를 사용
- 로컬 DB 확인은 PostgreSQL 클라이언트에서 `127.0.0.1:43082`로 접속하거나 `docker exec sori-studio-db psql` 명령으로 확인한다.
- 로컬 DB 확인은 PostgreSQL 클라이언트에서 `127.0.0.1:43085`로 접속하거나 `docker exec sori-studio-db psql` 명령으로 확인한다.
### 포트 기준
| 용도 | 포트 |
|------|------|
| 로컬 개발 서버 | 43081 |
| NAS Docker 외부 포트 | 43081 |
| 로컬 개발 서버 | 43084 |
| NAS Docker 외부 포트 | 43084 |
| 컨테이너 내부 포트 | 3000 |
| PostgreSQL 외부 포트 | 43082 |
| PostgreSQL 외부 포트 | 43085 |
---

View File

@@ -1,5 +1,10 @@
# 업데이트 이력
## v1.7.4
- 다른 서비스와의 포트 충돌을 피하도록 앱 포트를 `43084`, PostgreSQL 외부 포트를 `43085`로 변경.
- 개발·운영 환경 파일, Compose 기본값, 개발 서버·미리보기 명령과 관련 문서의 포트 기준을 통일.
## v1.7.3
- 로컬 개발 앱 포트를 `43081`, PostgreSQL 포트를 `43082`로 변경.

4
package-lock.json generated
View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "sori.studio",
"version": "1.7.3",
"version": "1.7.4",
"private": true,
"type": "module",
"imports": {
@@ -15,7 +15,7 @@
"lint": "node scripts/check-js-syntax.js",
"test": "npm run build",
"verify": "npm run lint && npm run test",
"preview": "nuxt preview --dotenv .env.development --host 127.0.0.1 --port 43081",
"preview": "nuxt preview --dotenv .env.development --host 127.0.0.1 --port 43084",
"db:migrate": "node scripts/migrate-database.js migrate",
"db:migrate:dev": "MIGRATION_ENV=development ENV_FILE=.env.development node scripts/migrate-database.js migrate",
"db:migrate:dev:status": "MIGRATION_ENV=development ENV_FILE=.env.development node scripts/migrate-database.js status",

View File

@@ -1,7 +1,7 @@
import { spawn } from 'node:child_process'
const host = '127.0.0.1'
const port = '43081'
const port = '43084'
let printedLinks = false
let nitroReady = false
let collectedLines = []