README 운영 구조 반영
- Flask 엔드포인트/Apache 프록시/systemd env 우선순위 주의사항 정리 - Auth0 도메인/클라이언트 매칭 및 localStorage override 관련 트러블슈팅 추가 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
57
README.md
57
README.md
@@ -23,6 +23,13 @@ python3 -m http.server 8000
|
||||
|
||||
현재 백엔드는 **Python Flask(기본 포트 8023)** 로 제공합니다. (정적 HTML/JS는 그대로 사용 가능)
|
||||
|
||||
### 핵심 엔드포인트
|
||||
|
||||
- `GET /healthz`: DB 연결 헬스체크
|
||||
- `GET /api/config/auth`: Auth0 설정 조회(우선순위: `.env` → DB `ncue_app_config`)
|
||||
- `POST /api/auth/sync`: 로그인 시 `ncue_user` upsert(최초/마지막 로그인 시각, `can_manage` 갱신)
|
||||
- `POST /api/auth/logout`: 로그아웃 시각 기록
|
||||
|
||||
### 1) DB 테이블 생성(서버에서 1회)
|
||||
|
||||
```bash
|
||||
@@ -84,23 +91,21 @@ ExecStart=/bin/bash -lc 'source /opt/miniconda3/etc/profile.d/conda.sh && conda
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
|
||||
# .env 대신 systemd Environment로 주입(권장)
|
||||
Environment=DB_HOST=ncue.net
|
||||
Environment=DB_PORT=5432
|
||||
Environment=DB_NAME=ncue
|
||||
Environment=DB_USER=ncue
|
||||
Environment=DB_PASSWORD=REPLACE_ME
|
||||
Environment=TABLE=ncue_user
|
||||
Environment=AUTH0_DOMAIN=ncue.net
|
||||
Environment=AUTH0_CLIENT_ID=g5RDfax7FZkKzXYvXOgku3Ll8CxuA4IM
|
||||
Environment=AUTH0_GOOGLE_CONNECTION=google-oauth2
|
||||
Environment=ADMIN_EMAILS=dosangyoon@gmail.com,dsyoon@ncue.net
|
||||
Environment=PORT=8023
|
||||
# (권장) .env 파일을 systemd가 읽도록 설정
|
||||
EnvironmentFile=/path/to/home/.env
|
||||
|
||||
# (선택) DB 연결 옵션(문제 발생 시 조정)
|
||||
Environment=DB_SSLMODE=prefer
|
||||
Environment=DB_CONNECT_TIMEOUT=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
> 중요:
|
||||
> - `Environment=`는 반드시 `[Service]` 섹션에 있어야 합니다. `[Install]` 아래에 두면 무시됩니다.
|
||||
> - `Environment=`로 Auth0/DB 값을 적어두면 `.env`보다 우선할 수 있으니, 운영에서는 **한 군데(.env)** 로 통일하는 것을 권장합니다.
|
||||
|
||||
적용/재시작:
|
||||
|
||||
```bash
|
||||
@@ -206,8 +211,28 @@ update ncue_user set can_manage = true where email = 'me@example.com';
|
||||
- `AUTH0_GOOGLE_CONNECTION` (예: `google-oauth2`)
|
||||
- `ADMIN_EMAILS` (예: `dosangyoon@gmail.com,dsyoon@ncue.net`)
|
||||
3. Auth0 Application 설정에서 아래 URL들을 등록
|
||||
- Allowed Callback URLs: 사이트 주소 (예: `https://example.com/`)
|
||||
- Allowed Logout URLs: 사이트 주소 (예: `https://example.com/`)
|
||||
- Allowed Callback URLs: `https://ncue.net/` 와 `https://ncue.net`
|
||||
- Allowed Logout URLs: `https://ncue.net/` 와 `https://ncue.net`
|
||||
- Allowed Web Origins: `https://ncue.net`
|
||||
- Allowed Origins (CORS): `https://ncue.net`
|
||||
4. Applications → (해당 앱) → Connections 탭에서 `google-oauth2`를 Enable(ON)
|
||||
|
||||
### 자주 발생하는 오류
|
||||
|
||||
- `https://ncue.net/authorize ... Not Found`
|
||||
- 원인: `AUTH0_DOMAIN`을 사이트 도메인(`ncue.net`)로 넣은 경우. Auth0 테넌트 도메인(예: `dev-xxxx.us.auth0.com`)을 넣어야 합니다.
|
||||
- `invalid_request: Unknown client: ...`
|
||||
- 원인: `AUTH0_DOMAIN`(테넌트)와 `AUTH0_CLIENT_ID`(앱)가 서로 다른 Auth0 테넌트에 속해 매칭이 안 되는 경우.
|
||||
- 값 변경 후에도 로그인 URL이 바뀌지 않음
|
||||
- 원인: 브라우저 `localStorage`에 이전 설정 override가 남아있는 경우.
|
||||
- 해결(콘솔에서 실행):
|
||||
|
||||
```js
|
||||
localStorage.removeItem("links_home_auth_override_v1");
|
||||
localStorage.removeItem("links_home_auth_tokens_v1");
|
||||
sessionStorage.removeItem("links_home_auth_pkce_v1");
|
||||
location.reload();
|
||||
```
|
||||
|
||||
## 데이터 저장
|
||||
|
||||
@@ -215,7 +240,3 @@ update ncue_user set can_manage = true where email = 'me@example.com';
|
||||
- 사용자가 추가/편집/삭제한 내용: 브라우저 `localStorage`에 저장됩니다.
|
||||
- 내보내기: 현재 화면 기준 링크를 JSON으로 다운로드합니다.
|
||||
- 가져오기: 내보내기 JSON(배열 또는 `{links:[...]}`)을 다시 불러옵니다.
|
||||
|
||||
|
||||
|
||||
## 설치 방
|
||||
Reference in New Issue
Block a user