Eine Streamlit-App bereitstellen

Lizard (lizard.build) führt eine Streamlit-App mit demselben Befehl aus, den du lokal nutzt: streamlit run app.py. Schreib ihn in die web:-Zeile eines Procfiles, zusammen mit --server.address 0.0.0.0 und einem festen Port wie 8501, und stelle dann mit lizard up --port 8501 bereit. Ohne Procfile startet lizardpack python app.py; das gibt eine Warnung aus und beendet sich, statt die App auszuliefern.

Teststatus: Das Beispiel unten lief lokal mit Streamlit 1.65.0, die Datenbank-Variante mit psycopg 3.3.5 gegen PostgreSQL 14. Seinen Build-Plan haben wir mit lizardpack geprüft, dem Build-Planer, den Lizard ausführt. Vollständig bereitgestellt haben wir es noch nicht. Der Browser hält eine WebSocket-Verbindung zu Streamlit offen, und diese Verbindung haben wir über das Routing von Lizard noch nicht geprüft.

Bevor du beginnst

  • Python 3 auf deinem Rechner, um die App zu testen.
  • Lizard CLI, angemeldet mit lizard login, auf Pro oder in der 7-tägigen Pro-Testphase (Karte erforderlich). Siehe Preise.

Eine minimale App

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

Lokal ausführen:

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

Streamlit öffnet sich unter http://localhost:8501. Trage .venv/, .env und .streamlit/secrets.toml in .gitignore ein.

Was lizardpack baut

SchrittWas passiert
Erkennungrequirements.txt, pyproject.toml, Pipfile oder eine beliebige .py-Datei
Python-Version.python-version, dann .tool-versions, dann requires-python in pyproject.toml; nur Haupt- und Nebenversion, auf python:<x.y>-slim. Standard 3.13.
Installationpip install -r requirements.txt; uv, Poetry oder Pipenv, wenn deren Lock- oder Konfigurationsdatei vorhanden ist
StartDie web:-Zeile im Procfile
LaufzeitPYTHONUNBUFFERED=1, damit die Ausgabe von print sofort in den Logs landet

Der Service-Port kommt aus --port und muss zu --server.port im Procfile passen. Die Versionsregeln und ihre Sonderfälle stehen unter Laufzeitversionen.

Bereitstellen

Im Ordner der App:

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

lizard up lädt den Ordner hoch, baut ihn auf Lizard und gibt die URL aus. Innerhalb eines Git-Repositorys überspringt es alles, was in .gitignore steht; außerhalb von Git lädt es .env-Dateien hoch. Für git push to deploy verbinde ein GitHub-Repository und setze den Port mit lizard port 8501 --service web.

Secrets und Einstellungen

st.secrets liest .streamlit/secrets.toml, eine Datei, die du nicht hochladen solltest. Speichere Secrets auf Lizard als Service-Variablen und lies sie aus der Umgebung:

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

Eine Änderung an einer Variable startet die App ohne neuen Build neu. Siehe Variablen und Secrets.

Managed Postgres hinzufügen

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

Die einfachen Anführungszeichen verhindern, dass deine Shell ${{…}} auswertet; Lizard löst die Referenz beim Deployment auf. Füge psycopg[binary]==3.3.5 zu requirements.txt hinzu und öffne eine Verbindung pro Serverprozess:

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 behält die Verbindung über Reruns und Browser-Sessions hinweg. Speichere Daten in Managed Postgres oder Managed Object Storage: Dateien, die die App im Container schreibt, gehen beim nächsten Deployment verloren.

Prüfen, ob es funktioniert

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

Das Log zeigt You can now view your Streamlit app in your browser, und die Health-URL antwortet mit ok. Öffne die URL der App und ändere den Text im Eingabefeld: Die Begrüßung sollte sich aktualisieren.

Häufige Probleme

SymptomLösung
Das Log meldet to view this Streamlit app on a browser, run it with the following commandDas Procfile fehlt oder hat keine web:-Zeile, daher hat lizardpack python app.py ausgeführt.
Das Deployment wird nie healthyService-Port und --server.port weichen voneinander ab. Führe lizard port --service web aus. Siehe Service wird nie healthy.
ModuleNotFoundErrorFüge das Paket zu requirements.txt hinzu und stelle erneut bereit.
KeyError für ein SecretDie Variable fehlt auf dem Service web: lizard secrets list --service web.
Die Seite zeigt eine Verbindungsmeldung und lädt nieDer Browser kann seine WebSocket-Verbindung zu /_stcore/stream nicht halten. Suche diese fehlgeschlagene Anfrage in der Browser-Konsole und Fehler in lizard logs.

Siehe auch

Aktualisiert