main
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라고 표시하지 않도록 설계되어 있습니다.
Languages
Python
72.3%
HTML
27.3%
Dockerfile
0.2%
Shell
0.1%