fix: PocketBase pb_data 권한(user 기본 비활성화)
Made-with: Cursor
This commit is contained in:
@@ -2,14 +2,17 @@
|
|||||||
# 웹(nginx 정적): 호스트 42881 -> 컨테이너 80
|
# 웹(nginx 정적): 호스트 42881 -> 컨테이너 80
|
||||||
# PocketBase: 호스트 42917 -> 컨테이너 8090
|
# PocketBase: 호스트 42917 -> 컨테이너 8090
|
||||||
#
|
#
|
||||||
# PocketBase 데이터는 호스트 ./pb_data 에 둔다(gitignore). NAS에서 권한 오류 시
|
# PocketBase 데이터는 호스트 ./pb_data 에 둔다(gitignore).
|
||||||
# pb_data 소유자를 user(기본 1000:10)에 맞추거나 user 값을 조정한다.
|
# 로그에 "unable to open database file (14)" 가 나오면 대부분 ./pb_data 권한 문제다.
|
||||||
|
# 해결: (1) 아래 user 줄을 비활성화한 채 한 번 기동해 pb_data 생성 후,
|
||||||
|
# (2) 호스트에서 `sudo chown -R 1000:10 pb_data` 후 user 줄을 다시 켠다.
|
||||||
|
# UGREEN에서 컨테이너를 1000:10으로 고정하려면 user 줄 주석을 해제한다.
|
||||||
services:
|
services:
|
||||||
pocketbase:
|
pocketbase:
|
||||||
image: ghcr.io/muchobien/pocketbase:latest
|
image: ghcr.io/muchobien/pocketbase:latest
|
||||||
container_name: pocketbase-todo
|
container_name: pocketbase-todo
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
user: "1000:10"
|
# user: "1000:10"
|
||||||
ports:
|
ports:
|
||||||
- "42917:8090"
|
- "42917:8090"
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 현재 버전
|
## 현재 버전
|
||||||
|
|
||||||
- `v0.0.7`
|
- `v0.0.8`
|
||||||
|
|
||||||
NAS에 SSH로 올리는 **전체 순서**는 `docs/nas-deploy-guide.md`에 따로 정리했다.
|
NAS에 SSH로 올리는 **전체 순서**는 `docs/nas-deploy-guide.md`에 따로 정리했다.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# 의사결정 이력
|
# 의사결정 이력
|
||||||
|
|
||||||
|
## 2026-04-13 · v0.0.8 — PocketBase `user`와 `pb_data` 권한
|
||||||
|
|
||||||
|
호스트 바인드 `./pb_data`에 **`user: 1000:10`으로 기동**하면, 폴더가 root 소유이거나 비어 있을 때 SQLite가 **오류 14(unable to open database file)** 로 종료되는 경우가 잦다. 기본값에서는 `user`를 두지 않고 기동한 뒤, 필요 시 `chown` 후 `user`를 켜는 절차를 `docker-compose.yaml` 주석과 문서에 정리했다.
|
||||||
|
|
||||||
## 2026-04-13 · v0.0.7 — PocketBase Compose를 NAS 운영 패턴에 맞춤
|
## 2026-04-13 · v0.0.7 — PocketBase Compose를 NAS 운영 패턴에 맞춤
|
||||||
|
|
||||||
NAS에서 이미 동작하던 PocketBase 설정(`user: 1000:10`, 호스트 `./pb_data` 바인드, `serve --dir=/pb_data` 명시, `container_name` pocketbase-todo)을 저장소 `docker-compose.yaml`에 반영했다. 기존 named volume `pocketbase_data`는 서비스가 바인드 마운트만 쓰므로 제거해 혼동을 줄였다.
|
NAS에서 이미 동작하던 PocketBase 설정(`user: 1000:10`, 호스트 `./pb_data` 바인드, `serve --dir=/pb_data` 명시, `container_name` pocketbase-todo)을 저장소 `docker-compose.yaml`에 반영했다. 기존 named volume `pocketbase_data`는 서비스가 바인드 마운트만 쓰므로 제거해 혼동을 줄였다.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 현재 버전
|
## 현재 버전
|
||||||
|
|
||||||
- `v0.0.7`
|
- `v0.0.8`
|
||||||
|
|
||||||
| 경로 | 역할 |
|
| 경로 | 역할 |
|
||||||
| ------------------------- | ----------------------------------------- |
|
| ------------------------- | ----------------------------------------- |
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
| `src/composables/useTodos.js` | 목록 로드·추가·완료 토글 |
|
| `src/composables/useTodos.js` | 목록 로드·추가·완료 토글 |
|
||||||
| `vite.config.js` | Vue 플러그인, PWA 매니페스트(`VITE_PUBLIC_APP_URL` 반영) |
|
| `vite.config.js` | Vue 플러그인, PWA 매니페스트(`VITE_PUBLIC_APP_URL` 반영) |
|
||||||
| `tailwind.config.js` | 테마 색·폰트 |
|
| `tailwind.config.js` | 테마 색·폰트 |
|
||||||
| `docker-compose.yaml` | PocketBase(`pocketbase-todo`, `./pb_data`, `user`) + 웹(`todo-web`), 호스트 포트 42881·42917 |
|
| `docker-compose.yaml` | PocketBase(`pocketbase-todo`, `./pb_data`, 선택 `user`) + 웹(`todo-web`), 호스트 포트 42881·42917 |
|
||||||
| `Dockerfile` | Vite 빌드 후 nginx 이미지 |
|
| `Dockerfile` | Vite 빌드 후 nginx 이미지 |
|
||||||
| `nginx.conf` | SPA 폴백 라우팅 |
|
| `nginx.conf` | SPA 폴백 라우팅 |
|
||||||
| `docs/nas-deploy-guide.md` | NAS SSH·Git 클론·Compose·PocketBase 설정 순서 |
|
| `docs/nas-deploy-guide.md` | NAS SSH·Git 클론·Compose·PocketBase 설정 순서 |
|
||||||
|
|||||||
@@ -322,6 +322,7 @@ PocketBase 컨테이너는 **기본적으로 HTTPS(TLS)를 제공하지 않는
|
|||||||
| `fatal: not a git repository` | `apps`가 아니라 **`cd todo`(클론한 폴더)** 안에서 실행했는지 확인한다. |
|
| `fatal: not a git repository` | `apps`가 아니라 **`cd todo`(클론한 폴더)** 안에서 실행했는지 확인한다. |
|
||||||
| `git pull`이 안 되거나 안 받아짐 | 10절 순서대로 `git status`·`fetch`·`checkout main`·`pull --ff-only`, 로컬 수정·비공개 저장소 자격 확인 |
|
| `git pull`이 안 되거나 안 받아짐 | 10절 순서대로 `git status`·`fetch`·`checkout main`·`pull --ff-only`, 로컬 수정·비공개 저장소 자격 확인 |
|
||||||
| `ERR_SSL_VERSION_OR_CIPHER_MISMATCH` (`https://api…`) | 11-1절. 프록시 443·인증서·`proxy_pass`가 PB **HTTP** 포트로 가는지 확인 |
|
| `ERR_SSL_VERSION_OR_CIPHER_MISMATCH` (`https://api…`) | 11-1절. 프록시 443·인증서·`proxy_pass`가 PB **HTTP** 포트로 가는지 확인 |
|
||||||
|
| PocketBase `unable to open database file (14)` | `./pb_data` 쓰기 권한. `docker-compose.yaml`에서 `user: "1000:10"`을 켠 상태면 호스트에서 `sudo chown -R 1000:10 pb_data`. 또는 `user` 줄을 주석으로 둔 채 기동해 DB 생성 후 `chown`하고 `user` 재적용. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 현재 버전
|
## 현재 버전
|
||||||
|
|
||||||
- `v0.0.7`
|
- `v0.0.8`
|
||||||
|
|
||||||
## 스택
|
## 스택
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
Compose에서 **`container_name`** 을 고정해 두었다: `pocketbase-todo`, `todo-web`. NAS에 같은 이름의 컨테이너가 이미 있으면 `docker-compose.yaml`에서 바꾼다.
|
Compose에서 **`container_name`** 을 고정해 두었다: `pocketbase-todo`, `todo-web`. NAS에 같은 이름의 컨테이너가 이미 있으면 `docker-compose.yaml`에서 바꾼다.
|
||||||
|
|
||||||
PocketBase 데이터는 **호스트 바인드 마운트** `./pb_data:/pb_data`를 쓴다(저장소에는 디렉터리만 두고 내용은 Git에 포함하지 않음). 컨테이너 **`user: "1000:10"`** 은 UGREEN 등 NAS에서 흔한 UID/GID 조합이다. 권한 오류가 나면 호스트의 `pb_data` 소유권을 맞추거나 `user` 값을 환경에 맞게 바꾼다.
|
PocketBase 데이터는 **호스트 바인드 마운트** `./pb_data:/pb_data`를 쓴다(저장소에는 디렉터리만 두고 내용은 Git에 포함하지 않음). 기본 Compose에서는 **`user`를 두지 않아** 이미지 기본 사용자로 기동한다(SQLite가 `pb_data`에 쓸 수 있게). UGREEN 등에서 **`user: "1000:10"`** 으로 고정하려면 `docker-compose.yaml`의 해당 줄 주석을 해제하기 **전에** 호스트에서 `mkdir -p pb_data` 후 `chown -R 1000:10 pb_data`로 소유권을 맞춘다.
|
||||||
|
|
||||||
## 버전 정책
|
## 버전 정책
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# 업데이트 로그
|
# 업데이트 로그
|
||||||
|
|
||||||
|
## v0.0.8
|
||||||
|
|
||||||
|
- ~수정. PocketBase `unable to open database file (14)` 대비: 기본 `user` 비활성화(주석), `pb_data` 권한 안내·13절 표 추가.
|
||||||
|
|
||||||
## v0.0.7
|
## v0.0.7
|
||||||
|
|
||||||
- ~수정. `docker-compose.yaml` PocketBase를 NAS 검증 설정과 정렬(`user`, `./pb_data`, `command`, `container_name` pocketbase-todo). 미사용 named volume 제거.
|
- ~수정. `docker-compose.yaml` PocketBase를 NAS 검증 설정과 정렬(`user`, `./pb_data`, `command`, `container_name` pocketbase-todo). 미사용 named volume 제거.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "todo",
|
"name": "todo",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.7",
|
"version": "0.0.8",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
Reference in New Issue
Block a user