MuscleCare-FastAPI / start.py
Merry99's picture
Hugging face settting
a7d104e
raw
history blame
4.09 kB
import os, base64, zipfile, io, sys, tempfile, subprocess
from pathlib import Path
from dotenv import load_dotenv
# .env 파일 λ‘œλ“œ (둜컬 개발용)
load_dotenv()
def setup_environment():
"""
ν™˜κ²½λ³€μˆ˜ μžλ™ μ„€μ •:
- 둜컬: .env νŒŒμΌμ—μ„œ λ‘œλ“œ
- Hugging Face Space: ν™˜κ²½λ³€μˆ˜μ—μ„œ μžλ™ μ„€μ •
"""
print("πŸ”§ ν™˜κ²½λ³€μˆ˜ μ„€μ • 쀑...")
# Hugging Face Dataset μ„€μ • (κΈ°λ³Έκ°’ μ„€μ •)
if not os.getenv("HF_DATA_REPO_ID"):
os.environ["HF_DATA_REPO_ID"] = os.getenv("HF_DATA_REPO_ID")
print("πŸ“ HF_DATA_REPO_ID κΈ°λ³Έκ°’ μ„€μ •")
if not os.getenv("HF_DATA_TOKEN"):
os.environ["HF_DATA_TOKEN"] = os.getenv("HF_DATA_TOKEN")
print("πŸ“ HF_DATA_TOKEN κΈ°λ³Έκ°’ μ„€μ •")
# Oracle DB μ„€μ • 확인
required_vars = ["DB_USER", "DB_PASSWORD", "WALLET_DIR", "WALLET_PASSWORD"]
missing_vars = []
for var in required_vars:
if not os.getenv(var):
missing_vars.append(var)
if missing_vars:
print(f"⚠️ λˆ„λ½λœ ν™˜κ²½λ³€μˆ˜: {', '.join(missing_vars)}")
print("πŸ’‘ .env νŒŒμΌμ„ ν™•μΈν•˜κ±°λ‚˜ ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ£Όμ„Έμš”.")
# 둜컬 κ°œλ°œμ„ μœ„ν•œ κΈ°λ³Έκ°’ μ„€μ • (경고와 ν•¨κ»˜)
if not os.getenv("DB_USER"):
os.environ["DB_USER"] = "ADMIN"
print("πŸ“ DB_USER κΈ°λ³Έκ°’ μ„€μ •: ADMIN")
if not os.getenv("DB_PASSWORD"):
os.environ["DB_PASSWORD"] = "YourDBPassword123!"
print("πŸ“ DB_PASSWORD κΈ°λ³Έκ°’ μ„€μ •: YourDBPassword123!")
if not os.getenv("WALLET_PASSWORD"):
os.environ["WALLET_PASSWORD"] = "YourWalletPassword123!"
print("πŸ“ WALLET_PASSWORD κΈ°λ³Έκ°’ μ„€μ •: YourWalletPassword123!")
else:
print("βœ… λͺ¨λ“  ν•„μˆ˜ ν™˜κ²½λ³€μˆ˜κ°€ μ„€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€")
print("πŸ”§ ν™˜κ²½λ³€μˆ˜ μ„€μ • μ™„λ£Œ")
def prepare_wallet_dir():
"""
Wallet μ€€λΉ„:
- 배포 ν™˜κ²½: WALLET_ZIP_B64μ—μ„œ λ””μ½”λ”©
- 둜컬 ν™˜κ²½: WALLET_DIR 경둜 μ‚¬μš©
"""
# 둜컬 개발: WALLET_DIR이 이미 μ„€μ •λ˜μ–΄ μžˆλŠ” 경우
if "WALLET_DIR" in os.environ:
wallet_dir = os.environ["WALLET_DIR"]
if Path(wallet_dir).exists():
print(f"πŸ“ 둜컬 Wallet μ‚¬μš©: {wallet_dir}")
return wallet_dir
# 배포 ν™˜κ²½: WALLET_ZIP_B64μ—μ„œ λ””μ½”λ”©
if "WALLET_ZIP_B64" not in os.environ:
raise RuntimeError(
"❌ WALLET_ZIP_B64 λ˜λŠ” WALLET_DIR ν™˜κ²½ λ³€μˆ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.\n"
" 둜컬: .env νŒŒμΌμ— WALLET_DIR μ„€μ •\n"
" 배포: Hugging Face Secrets에 WALLET_ZIP_B64 μ„€μ •"
)
print("πŸ” Wallet Base64 λ””μ½”λ”© μ‹œμž‘...")
b64 = os.environ["WALLET_ZIP_B64"]
wallet_password = os.environ["WALLET_PASSWORD"]
# wallet을 λ©”λͺ¨λ¦¬->μž„μ‹œλ””λ ‰ν† λ¦¬λ‘œ 볡원
wallet_dir = tempfile.mkdtemp(prefix="wallet_")
print(f"πŸ“ μž„μ‹œ 디렉토리: {wallet_dir}")
zip_bytes = base64.b64decode(b64)
with zipfile.ZipFile(io.BytesIO(zip_bytes)) as z:
z.extractall(wallet_dir)
# μ•ˆμ „μ„ μœ„ν•΄ κΆŒν•œ μΆ•μ†Œ
for root, _, files in os.walk(wallet_dir):
for f in files:
os.chmod(os.path.join(root, f), 0o600)
print("βœ… Wallet μ••μΆ• ν•΄μ œ μ™„λ£Œ")
# μ§€κ°‘ λΉ„λ°€λ²ˆν˜ΈλŠ” oracledbμ—μ„œ μ‚¬μš©
os.environ["WALLET_DIR"] = wallet_dir
os.environ["WALLET_PASSWORD"] = wallet_password
return wallet_dir
if __name__ == "__main__":
print("=" * 60)
print("πŸš€ MuscleCare FastAPI μ„œλ²„ μ‹œμž‘")
print("=" * 60)
# ν™˜κ²½λ³€μˆ˜ μžλ™ μ„€μ •
setup_environment()
# Wallet μ€€λΉ„
try:
prepare_wallet_dir()
except Exception as e:
print(f"❌ Wallet μ€€λΉ„ μ‹€νŒ¨: {e}")
sys.exit(1)
# Uvicorn 기동
print("\n🌐 FastAPI μ„œλ²„ μ‹€ν–‰...")
print("=" * 60)
subprocess.run([sys.executable, "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"])