[작성자:] sp

  • Streamlit

    아주 빠른 체크리스트

    1. venv + 패키지 설치
    2. DB 생성(회사 뉴스 샘플)
    3. 실행 플래그/설정(서브패스·비공개·성능)
    4. systemd로 데몬화
    5. Nginx 리버스 프록시

    1) 설치

    cd /opt/newsrag
    python3 -m venv .venv && source .venv/bin/activate
    pip install --upgrade pip
    pip install streamlit rank_bm25 faiss-cpu sentence-transformers \
                langchain-huggingface langchain langchain-community langchain-openai
    

    2) DB 생성

    python 11-2_make_sqlite_data.py
    ls -l company_news.db   # 같은 폴더에 있어야 함
    

    3) 실행(로컬 테스트)

    export OPENAI_API_KEY=YOUR_KEY
    streamlit run 14-2_app_rag_news_openai.py \
      --server.headless=true \
      --server.address=0.0.0.0 \
      --server.port=8501
    

    브라우저로 http://서버IP:8501 체크.

    4) 운영 옵션(유용한 플래그/설정)

    • 서브패스 운영: --server.baseUrlPath=newsrag
    • 내부 바인딩만: --server.address=127.0.0.1 (Nginx만 통해 외부 노출)
    • 메뉴/푸터 숨김: ~/.streamlit/config.toml [client] showSidebarNavigation = false

    [server]

    enableCORS = false headless = true

    [browser]

    gatherUsageStats = false

    [theme]

    base = “light”

    (선택) 아주 간단 인증: Nginx Basic Auth 권장(운영에 Streamlit 인증 플러그인보다 쉬움)

    5) systemd

    sudo tee /etc/systemd/system/newsrag.service >/dev/null <<'UNIT'
    [Unit]
    Description=News RAG Streamlit (14-2, OpenAI)
    After=network.target
    
    [Service]
    User=YOUR_USER
    WorkingDirectory=/opt/newsrag
    Environment="PATH=/opt/newsrag/.venv/bin"
    Environment="OPENAI_API_KEY=YOUR_KEY"
    ExecStart=/opt/newsrag/.venv/bin/streamlit run 14-2_app_rag_news_openai.py \
      --server.headless=true \
      --server.address=127.0.0.1 \
      --server.port=8501 \
      --server.baseUrlPath=newsrag
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    UNIT
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now newsrag
    sudo systemctl status newsrag --no-pager
    

    6) Nginx 리버스 프록시

    (서브패스 /newsrag/ 기준)

    server {
        listen 80;
        server_name your.domain.com;
    
        location /newsrag/ {
            proxy_pass http://127.0.0.1:8501/newsrag/;
            proxy_http_version 1.1;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    
    sudo nginx -t && sudo systemctl reload nginx
    

    운영 팁(진짜 핵심만)

    • DB/권한: company_news.db는 서비스 유저가 읽기 가능해야 함.
    • 모델 캐시: 첫 실행 때 문장임베딩 모델이 받아져요. 방화망이면 미리 ~/.cache/huggingface 준비.
    • 속도: 동시 사용자↑면 Nginx 앞단 keep-alive/timeout↑, Streamlit은 멀티프로세스가 아니라서 여러 포트에 여러 인스턴스 띄우고 Nginx로 라운드로빈도 고려 가능.
    • 보안: 외부 노출이면 반드시 HTTPS + Basic Auth 적용 추천.
    • 로그: journalctl -u newsrag -f / /var/log/nginx/error.log

    도메인/서브패스·인증 방식에 맞춰 완성된 systemd/Nginx 파일