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 파일

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다