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

@@ -103,8 +103,9 @@ ls
예시:
- 같은 NAS 안의 브라우저만: `http://127.0.0.1:8090`도 동작할 수 있으나, **폰이나 다른 PC**에서는 거의 항상 실패한다.
- 집 안에서 여러 기기: `http://192.168.x.x:8090` 형태의 **NAS LAN IP**를 다.
- `docker-compose.yml`에 적어 둔 **호스트 포트**(웹 `42881`, PocketBase `42917`)는 다른 스택과 겹치지 않게 잡은 값이다. 겹치면 해당 파일의 `ports`만 바꾼 뒤, 아래 `export`·`.env`의 포트도 같이 맞춘다.
- 같은 NAS 안의 브라우저만: `http://127.0.0.1:42917`처럼 **호스트에 열린 포트**로 접근한다. **폰이나 다른 PC**에서는 `127.0.0.1` 대신 **NAS LAN IP**를 써야 한다.
- 집 안에서 여러 기기: `http://192.168.x.x:42917`(API), `http://192.168.x.x:42881`(웹) 형태로 쓴다.
IP 확인은 NAS 관리 화면의 네트워크 정보를 보거나, SSH에서 NAS OS에 맞는 명령으로 확인한다. (기종별로 명령이 다를 수 있다.)
@@ -112,20 +113,43 @@ IP 확인은 NAS 관리 화면의 네트워크 정보를 보거나, SSH에서 NA
---
## 6. 환경 변수 `VITE_POCKETBASE_URL` 설정 후 Compose 실행
## 6. 환경 변수 설정 후 Compose 실행
프로젝트 루트(`docker-compose.yml`이 있는 곳)에서:
`docker compose`는 프로젝트 루트에 **`.env` 파일이 있으면 자동으로 읽는다.** (Git에 올리지 말 것. `.gitignore`에 포함됨.)
### 6-0. 운영 도메인을 쓰는 경우(예: todo.sori.studio)
`/volume1/docker/projects/apps/todo/.env` 예시:
```bash
VITE_PUBLIC_APP_URL=https://todo.sori.studio
VITE_POCKETBASE_URL=https://api.todo.sori.studio
```
그다음:
```bash
cd /volume1/docker/projects/apps/todo
export VITE_POCKETBASE_URL="http://192.168.0.50:8090"
docker compose up -d --build
```
리버스 프록시에서 **`todo.sori.studio` → 웹**, **`api.todo.sori.studio` → PocketBase** 로 각각 연결해야 한다. (경로·TLS는 사용 중인 NAS/프록시 제품 문서를 따른다.)
### 6-1. LAN IP만 쓰는 경우
프로젝트 루트에서 `export`로 한 세션에만 줄 수도 있다.
```bash
cd /volume1/docker/projects/apps/todo
export VITE_PUBLIC_APP_URL="http://192.168.0.50:42881"
export VITE_POCKETBASE_URL="http://192.168.0.50:42917"
docker compose up -d --build
```
- 첫 실행은 이미지 다운로드·빌드로 **시간이 걸릴 수 있다.**
- 백그라운드 실행은 `-d` 때문이다.
### 6-1. 잘 떴는지 확인
### 6-2. 잘 떴는지 확인
```bash
docker compose ps
@@ -133,7 +157,7 @@ docker compose ps
`pocketbase`, `todo-web`(또는 compose에 정의된 웹 서비스 이름)이 `running`에 가깝게 보이면 된다.
### 6-2. 로그가 궁금할 때
### 6-3. 로그가 궁금할 때
```bash
docker compose logs -f --tail=100
@@ -145,19 +169,19 @@ docker compose logs -f --tail=100
예시 IP 기준:
- **할 일 웹앱:** `http://192.168.0.50:8080`
- **PocketBase 관리자 UI:** `http://192.168.0.50:8090/_/`
- **할 일 웹앱:** `http://192.168.0.50:42881`
- **PocketBase 관리자 UI:** `http://192.168.0.50:42917/_/`
접속이 안 되면:
- NAS 방화벽 또는 보안 앱에서 **8080, 8090** 포트가 막혀 있지 않은지 확인한다.
- NAS 방화벽 또는 보안 앱에서 **42881, 42917** 포트가 막혀 있지 않은지 확인한다.
- `docker compose ps`로 컨테이너가 떠 있는지 다시 본다.
---
## 8. PocketBase 최초 설정(한 번)
1. 브라우저에서 `http://<NAS_IP>:8090/_/` 를 연다.
1. 브라우저에서 `http://<NAS_IP>:42917/_/` 를 연다. (호스트 포트를 바꿨다면 그 번호로 연다.)
2. 관리자 계정(이메일·비밀번호)을 만들고 마법사를 끝낸다.
3. **컬렉션 `todos` 생성**
- 필드 `title`: 타입 **Text**
@@ -165,10 +189,10 @@ docker compose logs -f --tail=100
4. **API 규칙**
처음에는 테스트로 느슨하게 두었다가, 나중에 로그인 기반으로 조이는 것을 권장한다. (운영 정책에 맞게 조정.)
5. **설정 → CORS**
웹앱 출처를 허용 목록에 넣는다. 예: `http://192.168.0.50:8080`
웹앱 출처를 허용 목록에 넣는다. 예: `http://192.168.0.50:42881` 또는 `https://todo.sori.studio`
포트·프로토콜·호스트가 **실제로 주소창에 쓰는 것과 한 글자라도 다르면** 브라우저가 차단한다.
이후 `http://<NAS_IP>:8080`에서 목록·추가·완료 토글이 동작하는지 본다.
이후 `http://<NAS_IP>:42881`에서 목록·추가·완료 토글이 동작하는지 본다.
---
@@ -179,7 +203,8 @@ NAS IP나 도메인이 바뀌면, **다시 빌드**해야 한다.
```bash
cd /volume1/docker/projects/apps/todo
export VITE_POCKETBASE_URL="http://새로운_주소:8090"
export VITE_PUBLIC_APP_URL="http://새로운_주소:42881"
export VITE_POCKETBASE_URL="http://새로운_주소:42917"
docker compose up -d --build
```
@@ -190,7 +215,8 @@ docker compose up -d --build
```bash
cd /volume1/docker/projects/apps/todo
git pull
export VITE_POCKETBASE_URL="http://192.168.0.50:8090"
export VITE_PUBLIC_APP_URL="http://192.168.0.50:42881"
export VITE_POCKETBASE_URL="http://192.168.0.50:42917"
docker compose up -d --build
```
@@ -217,7 +243,7 @@ docker compose up -d --build
| 증상 | 점검 |
| --- | --- |
| 웹은 뜨는데 데이터가 안 됨 | PocketBase `todos` 컬렉션·필드명, API 규칙, CORS에 `8080` 출처가 들어갔는지 |
| 웹은 뜨는데 데이터가 안 됨 | PocketBase `todos` 컬렉션·필드명, API 규칙, CORS에 웹 출처(`http://…:42881` 또는 `https://todo.sori.studio`)가 들어갔는지 |
| 폰에서만 안 됨 | `VITE_POCKETBASE_URL``127.0.0.1`이 아닌지, 폰이 같은 WiFi인지, NAS IP가 맞는지 |
| 빌드 후에도 주소가 이상함 | `docker compose build --no-cache` 후 다시 `up`, 또는 `export`를 잊지 않았는지 |
| ARM NAS에서 이미지 오류 | 사용 중인 이미지가 해당 CPU 아키텍처를 지원하는지 로그로 확인한다. |
@@ -230,9 +256,9 @@ docker compose up -d --build
2. `cd /volume1/docker/projects/apps`
3. `git clone … todo` **또는** `cd todo``git clone … .`
4. NAS LAN IP 확인
5. `export VITE_POCKETBASE_URL="http://<NAS_IP>:8090"`
5. LAN만 쓸 때: `export VITE_PUBLIC_APP_URL="http://<NAS_IP>:42881"` `export VITE_POCKETBASE_URL="http://<NAS_IP>:42917"` (또는 6-0과 같이 `.env`에 기록)
6. `docker compose up -d --build`
7. 브라우저: `:8080` 앱, `:8090/_/` 관리자
7. 브라우저: `:42881` 앱, `:42917/_/` 관리자
8. `todos` 컬렉션·CORS·API 규칙 설정
이후 작업은 `git pull``export``docker compose up -d --build`를 반복하면 된다.