Streamlit에서 제작한 웹 애플리케이션을 컨테이너화 디자인(Windows 10, Python 3.9, Azure Container Registry)

개시하다
가장 가까운 버스 정류장에서 버스가 몇 분 남았다는 것만 나왔어요.
가장 가까운 버스 정류장에는 버스가 몇 분 남았다는 것만 표시되어 있는데, 가장 많이 쓰이는 것은 #구마모토#MaaS#M5Stack#GTFSpic.twitter.com/pjmSrhtCe0-천원@대사웅본(@sotongshi)December 16, 2021이다.

Streamlit에 대응하기 때문에



디버깅을 했습니다.



개발 환경


  • Windows 10
  • Python 3.9
  • Docker
  • Azure


설치


1.Azure Container Registry 새 레지스트리


2. Docker Windows 설치



3. 명령 알림을 열고 Hello-world

실행
docker run -it hello-world

4. 관리자 사용자 활성화



5. 명령 알림을 열고 관리자 사용자가 로그인


docker login xxxx.azurecr.io

6. 밀어


docker tag hello-world xxxx.azurecr.io/hello-world
docker push xxxx.azurecr.io/hello-world

7. 파일 준비





app.py

import streamlit as st
import pandas as pd 
import requests 
import json

st.markdown("# バスあと何分(くまもと)")
endpoint = st.secrets["endpoint"]
url = f"{endpoint}/stopnames"
headers = {'x-api-key': st.secrets["apikey"]}
response = requests.get(url, headers=headers, timeout=(29, 29))

if response.status_code == 200:
    stop_names = response.json()['results']
    stop_names.insert(0, '停留所を入力')
    stop_name_1 = st.selectbox('乗車停留所', stop_names)
    stop_name_2 = st.selectbox('降車停留所', stop_names)

    if st.button("検索"):
        bar = st.progress(0)
        url = f"{endpoint}/minutes?stop_name_1={stop_name_1}&stop_name_2={stop_name_2}"
        response = requests.get(url, headers=headers, stream=True, timeout=(29, 29))
        filesize = int(response.headers['content-length'])
        chunks = 0
        data = b''
        for chunk in response.iter_content():
            data += chunk
            chunks += len(chunk)
            bar.progress(chunks/filesize)
        results = json.loads(data)['results']
        for result in results:
            st.write(result)



requirements.txt

Streamlit>=1.4.0
pandas
requests


FROM python:3.9

COPY . /opt/app
WORKDIR /opt/app

RUN pip3 install -r requirements.txt
RUN mkdir ~/.streamlit
RUN cp .streamlit/config.toml ~/.streamlit/config.toml
RUN cp .streamlit/secrets.toml ~/.streamlit/secrets.toml

EXPOSE 80
USER root

ENTRYPOINT ["streamlit", "run"]
CMD ["app.py"]


config.toml

[server]
port = 80

[browser]
serverPort = 80



secrets.toml

endpoint = "https://xxxx.execute-api.ap-northeast-1.amazonaws.com/api"
apikey = "xxxx"


8. 구축


docker build . -f ./Dockerfile -t xxxx.azurecr.io/hello-world

9. 밀어


docker push xxxx.azurecr.io/hello-world

10. 웨어하우스를 선택하여 WebApp으로 설계


11. URL 액세스



12. 성공 표시!


수고하셨습니다



참고문헌




좋은 웹페이지 즐겨찾기