Files
2026-09-14 23:22:10 +09:00

2.5 KiB

NEXPA SourceHub 3.8 · Production Candidate

실제 sourcehub.nexpa-ai.com 교체를 목표로 3.7을 Production Hardening한 버전입니다.

3.8 핵심 변경

1. 로그인 Gate

OIDC 모드에서는 미인증 사용자가 /에 접근해도 내부 대시보드를 제공하지 않습니다. 로그인 화면만 표시하며 /static/index.html 직접 접근 경로도 제거했습니다.

2. 파일 악성코드 검사

업로드 파일을 임시 영역에 먼저 저장 → SHA-256 계산 → ClamAV 검사 → 정상 파일만 Local/MinIO 저장소에 반영합니다.

3. 만료형 다운로드

고정 다운로드 URL 대신 로그인 사용자가 짧게 유효한 HMAC 서명 링크를 발급받습니다. 기본 TTL: 300초.

4. CSRF / Session / Security Headers

  • OIDC 모드 CSRF 기본 활성화
  • Secure Cookie 환경 설정
  • Trusted Host 제한
  • CSP / X-Frame-Options / nosniff / Referrer Policy / Permissions Policy
  • HSTS 옵션

5. 통제된 배포 실행

임의 shell 명령 실행을 허용하지 않습니다. 서버 환경변수에 사전 등록한 배포 Webhook Target만 배포 담당자가 실행할 수 있습니다. 모든 배포 Gate가 완료되어야 실행 가능합니다.

6. DB Migration

Alembic 포함.

alembic upgrade head

7. Backup / Restore

python scripts/backup.py --out backups
python scripts/restore.py --db <db-backup> --storage <storage-backup> --yes-really-restore

SQLite/Local 저장소는 실제 복구 테스트를 포함했습니다. PostgreSQL은 pg_dump/pg_restore를 사용합니다.

8. 운영 인프라

  • SQLite ↔ PostgreSQL
  • Local ↔ MinIO
  • Mock ↔ NEXPA Core OIDC
  • Gitea Connector
  • ClamAV

로컬 실행

python -m pip install -r requirements.txt
scripts/start.sh

Windows:

scripts\start_windows.bat

Production Candidate 실행

.env.production.example을 복사해 실제 비밀값을 입력한 후:

docker compose -f docker-compose.production.yml up -d --build

상세 전환 절차: PRODUCTION_DEPLOYMENT.md

테스트

pytest -q

현재 남은 실제 배포 의존성

코드가 아니라 서버 측 값이 필요합니다.

  • NEXPA Core 실제 OIDC Metadata/Client ID/Secret
  • 실제 PostgreSQL 비밀번호
  • MinIO Credentials
  • Gitea URL/Token/Repo Binding
  • 실제 CI/CD Webhook Target/Secret
  • TLS 인증서 및 서버 접근 권한

이 값이 없는 상태에서는 Production Ready라고 표시하지 않도록 설계되어 있습니다.