47181fa5cab725c7ab259d05491f7490ce6deea3
- fix(config): 로컬 실행 시 루트의 .env 파일을 자동 로드하도록 Settings.from_env 개선 (테스트 실행 시 격리) - fix(ops): 기존 8000번 포트 충돌 방지를 위해 docker-compose.ops.yml 호스트 포트를 127.0.0.1:18000:8000으로 조정 - fix(git-binding): Git 저장소 바인딩 시 projects 테이블의 branch도 함께 동기화하도록 app.py 보완 - ui(projects): 프로젝트 카드의 BRANCH 표시에 바인딩된 브랜치를 우선 표시하고, OWNER 라벨을 '담당'으로 명확화 - feat(deploy): Ubuntu Apache2 웹서버용 Gitea 및 SourceHub 역방향 프록시 설정 템플릿 추가 (deploy/apache-*.conf) - docs: 프로젝트 CRUD 및 사내 개발자 관리 기능 갭 분석 및 개발 요청서 Word 문서 추가 (docs/)
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%