File size: 4,092 Bytes
cb442f8
1c094f3
 
 
 
 
cb442f8
cb7c9b7
 
 
 
 
 
 
 
 
 
a7d104e
 
cb7c9b7
 
a7d104e
 
cb7c9b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb442f8
1c094f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb442f8
 
1c094f3
cb442f8
 
1c094f3
 
cb442f8
 
 
1c094f3
cb442f8
 
 
 
1c094f3
 
 
cb442f8
 
 
1c094f3
cb442f8
 
 
1c094f3
 
 
 
cb7c9b7
 
 
1c094f3
 
 
 
 
 
 
cb442f8
1c094f3
 
cb442f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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"])