아주 빠른 체크리스트
- venv + 패키지 설치
- DB 생성(회사 뉴스 샘플)
- 실행 플래그/설정(서브패스·비공개·성능)
- systemd로 데몬화
- 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 파일