deploy: Compose 호스트 포트 42881·42917 및 문서 동기화

Made-with: Cursor
This commit is contained in:
2026-04-13 14:05:31 +09:00
parent 3e101f50c2
commit 8ec690f698
11 changed files with 170 additions and 73 deletions

View File

@@ -2,37 +2,49 @@
## 현재 버전
- `v0.0.2`
- `v0.0.4`
NAS에 SSH로 올리는 **전체 순서**는 `docs/nas-deploy-guide.md`에 따로 정리했다.
## 로컬 개발
1. `cp .env.example .env``VITE_POCKETBASE_URL`을 실제 PocketBase 주소로 맞춘다.
1. `cp .env.example .env`아래를 실제 주소로 맞춘다.
- `VITE_PUBLIC_APP_URL`: 브라우저에서 웹앱을 여는 URL(로컬이면 `http://127.0.0.1:5173` 등).
- `VITE_POCKETBASE_URL`: PocketBase URL(로컬이면 `http://127.0.0.1:8090` 등).
2. `npm install`
3. `npm run dev`
PocketBase는 Docker로 띄우려면 `docker compose up pocketbase`만 실행해도 된다(기본 `8090`).
운영 예시는 `.env.example``https://todo.sori.studio` / `https://api.todo.sori.studio` 로 적어 두었다.
## 운영 도메인(todo.sori.studio) 요약
- 웹앱: `https://todo.sori.studio` → 리버스 프록시에서 정적 웹 컨테이너(또는 빌드 산출물)로 연결.
- API(PocketBase): `https://api.todo.sori.studio` → 같은 프록시 또는 별도 가상 호스트로 PocketBase에 연결.
- 빌드 시 `VITE_POCKETBASE_URL=https://api.todo.sori.studio`, `VITE_PUBLIC_APP_URL=https://todo.sori.studio` 를 넣는다. (`docker compose`는 프로젝트 루트의 `.env`를 읽어 `todo-web` 빌드 인자로 전달할 수 있다.)
- PocketBase **CORS** 허용 출처에 `https://todo.sori.studio` 를 추가한다.
PocketBase는 Docker로 띄우려면 `docker compose up pocketbase`만 실행해도 된다. 컨테이너 **내부**에서는 PocketBase가 `8090`을 쓰고, **호스트에 노출되는 포트**는 `docker-compose.yml``ports`를 따른다(기본값: 웹 `42881`→컨테이너 `80`, API `42917`→컨테이너 `8090`).
## Docker Compose(웹 + PocketBase)
프로젝트 루트에서:
프로젝트 루트에서(LAN IP 예시):
```bash
export VITE_POCKETBASE_URL="http://<이_기기_IP>:8090"
export VITE_PUBLIC_APP_URL="http://<이_기기_IP>:42881"
export VITE_POCKETBASE_URL="http://<이_기기_IP>:42917"
docker compose up -d --build
```
- 웹: `http://<이_기기_IP>:8080`
- PocketBase 관리자: `http://<이_기기_IP>:8090/_/`
- 웹: `http://<이_기기_IP>:42881`
- PocketBase 관리자: `http://<이_기기_IP>:42917/_/`
**중요:** `VITE_POCKETBASE_URL`은 **컨테이너가 아니라 브라우저**에서 접근한다. 같은 PC에서만 쓸 때는 `http://127.0.0.1:8090`이 가능하지만, 휴대폰 등 다른 기기에서 접속할 때는 NAS/PC의 LAN IP 또는 공인 도메인을 사용해야 한다.
**중요:** `VITE_POCKETBASE_URL`은 **컨테이너가 아니라 브라우저**에서 접근한다. 같은 PC에서만 쓸 때는 `http://127.0.0.1:42917`(compose 기본 호스트 포트)이 가능하지만, 휴대폰 등 다른 기기에서는 NAS LAN IP 또는 공인 도메인을 사용해야 한다. 외부에는 리버스 프록시 **80/443**만 열고 내부 포트는 NAS 안에서만 쓰는 구성도 가능하다.
### PocketBase 초기 설정 요약
1. 관리자 UI에서 컬렉션 `todos` 생성(`title` text, `done` bool).
2. API 규칙을 배포 방식에 맞게 설정(인증 사용 시 로그인 사용자만 생성·수정 가능 등).
3. CORS 허용 출처에 웹 앱 출처(예: `http://<IP>:8080`)를 추가한다.
3. CORS 허용 출처에 웹 앱 출처를 추가한다. (LAN이면 `http://<IP>:42881`, 도메인이면 `https://todo.sori.studio` 등 **주소창과 동일**하게.)
### 선택: 관리자 자동 생성
@@ -40,10 +52,13 @@ docker compose up -d --build
## 단일 이미지(웹만)
`Dockerfile`은 정적 빌드 결과를 nginx로 제공한다. 빌드 시점에 `VITE_POCKETBASE_URL`이 번들에 포함된다.
`Dockerfile`은 정적 빌드 결과를 nginx로 제공한다. 빌드 시점에 `VITE_POCKETBASE_URL`, `VITE_PUBLIC_APP_URL`이 번들·매니페스트에 반영된다.
```bash
docker build --build-arg VITE_POCKETBASE_URL="https://pb.example.com" -t todo-web .
docker build \
--build-arg VITE_POCKETBASE_URL="https://api.todo.sori.studio" \
--build-arg VITE_PUBLIC_APP_URL="https://todo.sori.studio" \
-t todo-web .
```
## PWA·HTTPS