Streamlit ऐप डिप्लॉय करें

Lizard Streamlit ऐप को उसी कमांड से चलाता है जो आप लोकल रूप से इस्तेमाल करते हैं: streamlit run app.py। इसे --server.address 0.0.0.0 और 8501 जैसे तय पोर्ट के साथ Procfile की web: लाइन में रखें, फिर lizard up --port 8501 से डिप्लॉय करें। Procfile के बिना lizardpack python app.py शुरू करता है, जो ऐप सर्व करने के बजाय एक चेतावनी प्रिंट करके बंद हो जाता है।

टेस्ट स्टेटस: नीचे दिया गया सैंपल Streamlit 1.65.0 के साथ लोकल रूप से चलाया गया, और उसका डेटाबेस वाला वर्ज़न psycopg 3.3.5 के साथ PostgreSQL 14 पर। हमने इसका बिल्ड प्लान lizardpack से जाँचा, यानी उस बिल्ड प्लानर से जिसे Lizard चलाता है। हमने अभी तक इसे शुरू से आख़िर तक डिप्लॉय नहीं किया है। ब्राउज़र Streamlit से एक WebSocket खुला रखता है, और हमने अभी तक Lizard की रूटिंग से होकर उस कनेक्शन की जाँच नहीं की है।

शुरू करने से पहले

  • ऐप टेस्ट करने के लिए आपके कंप्यूटर पर Python 3।
  • Lizard CLI, lizard login से साइन इन किया हुआ, Pro या 7-दिन के Pro ट्रायल (कार्ड ज़रूरी) पर। प्राइसिंग देखें।

एक छोटा-सा ऐप

app.py:

import streamlit as st
 
st.title("Hello from Streamlit on Lizard")
name = st.text_input("Your name", "world")
st.write(f"Hello, {name}!")

requirements.txt:

streamlit==1.65.0

.python-version:

3.13

Procfile:

web: streamlit run app.py --server.port 8501 --server.address 0.0.0.0

इसे लोकल रूप से चलाएँ:

python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
streamlit run app.py

Streamlit http://localhost:8501 पर खुलता है। .venv/, .env और .streamlit/secrets.toml को .gitignore में जोड़ें।

lizardpack क्या बिल्ड करता है

चरणक्या होता है
डिटेक्शनrequirements.txt, pyproject.toml, Pipfile या कोई भी .py फ़ाइल
Python वर्ज़न.python-version, फिर .tool-versions, फिर pyproject.toml में requires-python; सिर्फ़ major और minor वर्ज़न, python:<x.y>-slim पर। डिफ़ॉल्ट 3.13।
इंस्टॉलpip install -r requirements.txt; uv, Poetry या Pipenv, अगर उनकी लॉक या कॉन्फ़िग फ़ाइल मौजूद हो
स्टार्टProcfile की web: लाइन
रनटाइमPYTHONUNBUFFERED=1, ताकि print का आउटपुट तुरंत लॉग में पहुँचे

--port से सर्विस पोर्ट को Procfile के --server.port के बराबर सेट करें। वर्ज़न के नियमों और उनके एज केस के लिए रनटाइम वर्ज़न देखें।

डिप्लॉय

ऐप के फ़ोल्डर से:

lizard init --name streamlit-app
lizard add --service web
lizard up --service web --port 8501

lizard up फ़ोल्डर अपलोड करता है, उसे Lizard पर बिल्ड करता है और URL प्रिंट करता है। git रिपॉज़िटरी के अंदर यह वे फ़ाइलें छोड़ देता है जो .gitignore में हैं; git के बाहर यह .env फ़ाइलें भी अपलोड कर देता है। git push to deploy के लिए GitHub रिपॉज़िटरी कनेक्ट करें और lizard port 8501 --service web से पोर्ट सेट करें।

सीक्रेट्स और सेटिंग्स

st.secrets .streamlit/secrets.toml पढ़ता है, और यह फ़ाइल आपको अपलोड नहीं करनी चाहिए। Lizard पर सीक्रेट्स को सर्विस वेरिएबल्स के रूप में स्टोर करें और उन्हें एनवायरनमेंट से पढ़ें:

lizard secrets set OPENAI_API_KEY=sk-... --service web
import os
 
api_key = os.environ["OPENAI_API_KEY"]

वेरिएबल बदलने पर ऐप बिना रीबिल्ड के रीस्टार्ट हो जाता है। वेरिएबल्स और सीक्रेट्स देखें।

Managed Postgres जोड़ें

lizard add postgres
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service web

सिंगल कोट्स ${{…}} को आपके शेल से बचाकर रखते हैं; Lizard डिप्लॉय के समय रेफ़रेंस को resolve करता है। requirements.txt में psycopg[binary]==3.3.5 जोड़ें और हर सर्वर प्रोसेस के लिए एक कनेक्शन खोलें:

import os
 
import psycopg
import streamlit as st
 
 
@st.cache_resource
def get_conn():
    return psycopg.connect(os.environ["DATABASE_URL"], autocommit=True)
 
 
with get_conn().cursor() as cur:
    cur.execute("SELECT now()")
    st.write("Database time:", cur.fetchone()[0])

st.cache_resource कनेक्शन को रीरन और ब्राउज़र सेशन के बीच बनाए रखता है। डेटा Managed Postgres या Managed Object Storage में रखें: ऐप कंटेनर के अंदर जो फ़ाइलें लिखता है, वे अगले डिप्लॉय पर मिट जाती हैं।

जाँचें कि यह काम करता है

lizard logs --service web --tail 100
lizard domain --service web
curl https://<your-domain>/_stcore/health

लॉग में You can now view your Streamlit app in your browser दिखता है, और हेल्थ URL ok लौटाता है। ऐप का URL खोलें और टेक्स्ट बॉक्स में कुछ बदलें: अभिवादन वाला टेक्स्ट अपडेट होना चाहिए।

आम समस्याएँ

लक्षणसमाधान
लॉग में to view this Streamlit app on a browser, run it with the following command दिखता हैProcfile नहीं है या उसमें web: लाइन नहीं है, इसलिए lizardpack ने python app.py चलाया।
डिप्लॉय कभी हेल्दी नहीं होतासर्विस पोर्ट और --server.port अलग-अलग हैं। lizard port --service web चलाएँ। सर्विस कभी हेल्दी नहीं होती देखें।
ModuleNotFoundErrorपैकेज को requirements.txt में जोड़ें और फिर से डिप्लॉय करें।
किसी सीक्रेट के लिए KeyErrorweb सर्विस पर वह वेरिएबल नहीं है: lizard secrets list --service web।
पेज पर कनेक्ट होने का मैसेज दिखता है और वह कभी लोड नहीं होताब्राउज़र /_stcore/stream से अपना WebSocket कनेक्शन बनाए नहीं रख पाता। ब्राउज़र कंसोल में वह फ़ेल हुई रिक्वेस्ट और lizard logs में एरर देखें।

संबंधित

अपडेट: