目录
- 1 Ngrok介绍
- 2 Ngrok 的工作原理
- 3 Ngrok安装
- 4 启动Streamlit应用
- 5 Ngrok搭建外网访问
1 Ngrok介绍
Ngrok 是一个开源工具和商业服务,可以为你的本地应用创建一个安全的公共 URL,使其能够通过互联网访问,而无需复杂的网络配置(例如端口转发)。它通过在你的本地计算机和互联网之间创建一个隧道,让外部用户能够访问你的本地服务器。
2 Ngrok 的工作原理
- Ngrok 客户端会运行在你的本地计算机上。
- 它将你的本地服务(例如,运行在 localhost:8501 的 Streamlit 应用)映射到一个远程的 Ngrok 隧道服务器。
- Ngrok 隧道服务器会为你的本地服务生成一个公共 URL(例如 https://.ngrok.io)。
- 外部用户通过这个公共 URL 访问你的本地服务,Ngrok 会将请求转发到你的本地服务器。
3 Ngrok安装
首先去Ngrok官网下载适合你操作系统的版本。解压下载的文件,并将可执行文件放到系统的 PATH 中,或者直接运行解压目录中的文件。如下是macOS操作系统解压方式:
sudo unzip ~/Downloads/ngrok-v3-stable-darwin-amd64.zip -d /usr/local/bin
然后去官网注册个免费账户,得到你的 Authtoken再运行如下命令将你的authtoken配置到ngrok.yml中:
ngrok config add-authtoken 2pbxyvbX4sZ1c6qGBAds0KW2CF0_2znuhidKKsLEyBSYKfnz
4 启动Streamlit应用
接下来,我们来写一个简单的Streamlit应用,这个应用就是用户从输入一个query,后端程序将用户输入的query从axiv检索相关的论文,把论文和链接返回给用户界面。我们代码search_arxiv.py如下:
import arxiv
import streamlit as stdef fetch_papers(query, max_results=10):"""使用 arXiv API 检索相关论文"""search = arxiv.Search(query=query,max_results=max_results,sort_by=arxiv.SortCriterion.Relevance)papers = []for result in search.results():paper_info = {"title": result.title,"summary": result.summary,"authors": [author.name for author in result.authors],"published": result.published,"url": result.entry_id}papers.append(paper_info)return papers# Streamlit 应用
st.title("学术论文检索助手")
query = st.text_input("请输入学术关键词:", "")if query:with st.spinner("正在检索相关论文..."):papers = fetch_papers(query)if papers:st.success(f"检索到 {len(papers)} 篇论文!")st.subheader("相关论文")for paper in papers:st.write(f"[{paper['title']}]({paper['url']})")else:st.error("未找到相关论文,请尝试其他关键词。")
我们启动Streamlit 应用:
streamlit run your_app.py
默认监听地址是 localhost:8501。输出如下:
我们也可以去修改配置文件,修改地址,在~/.streamlit/config.toml 目录下,修改配置文件如下:
应用会监听并接受来自任何网络接口的连接请求,而不仅仅是本机,当运行streamlit,输出结果如下:
我们打开这个网址,我们可以看到我们刚才写的一个简单应用界面如下:
可以看到Streamlit是十分强大的。几行代码就可以展示一个比较好的用户界面, 而且可以实时监控用户界面,我们输入关键词“LLM in recommend"。界面得到结果如下:
5 Ngrok搭建外网访问
接下来我们启动Ngrok,将流量转发到本地的 8501 端口:
ngrok http 8501
我们可以看到如下信息:
其中 https://6de1-103-1-158-36.ngrok-free.app 就是Ngrok 生成的== 一个可以供外网访问的地址URL==。从外网我们打开这个网址也是可以访问的。我们也可以使用Ngrok的高级功能(部分需要付费计划),自定义子域名等,Ngrok免费版和付费版对比如下: