我有一个 Streamlit 和 Python 多页面应用程序,它也使用 Postgres 数据库,并且登录身份验证在我的本地 Ubuntu 计算机上完美运行。现在登录应用程序正在运行,我的下一步是将其移动到云端,以便我的客户可以使用它。
我已将数据库移至 DigitalOcean Postgres 数据库,并且通过 SQLAlchemy 中的连接字符串与仍在我本地计算机上的应用程序配合得很好。接下来,为了准备将应用程序放在 DigitalOcean Ubuntu“droplet”服务器上,我创建了该应用程序的 Docker 映像,这样我就不需要处理 Droplet 上的所有环境依赖项设置。 Docker 镜像在我的 PC 上基于 DigitalOcean 数据库运行良好。因此,我将图像推送到私有 DockerHub 存储库,并在 Droplet 上设置 Docker 引擎后,从我的 Droplet 中将此图像拉入 Droplet 中。作为测试,它在 Ubuntu Droplet 中启动良好,使用
$ docker run -p 8501:8501 {imagename}:{tag}
正常的 Streamlit 提示为:
"You can now view the Streamlit App in your browser.
URL: http://localhost:8501.
然后我安装了 Nginx Web 服务器并将其配置为将端口 8501 定向到端口 80 并重新启动它。我修改后的 Nginx 默认文件位于 /etc/nginx/sites-available 中:
# file located /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8501; # Ensure this is the port Streamlit runs on
# proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
一切都已启动,并且在我的浏览器中设置为 Droplet 的 IP 地址,我开始看到带有“请稍候...”框的 Streamlit 页面。但仅此而已。它就坐在那里。
在DigitalOcean控制台的单独选项卡中,查看droplet的服务器统计图,CPU、内存、磁盘、网络带宽图均在正常范围内。所以水滴并没有负担过重。
我觉得我已经非常接近完成这个任务了,但我只是不知道在哪里寻找问题。 Nginx配置错误吗?
我使用了渐进的方法将应用程序迁移到云端,以确保每个步骤都已完成。 1) 数据库移动到云并测试应用程序,2) 在 Docker 中容器化应用程序并测试应用程序,3) 容器映像移动到云服务器并验证它是否启动,即使我看不到它。
更多的尝试和错误,我注释掉了“proxy_http_version 1.1;”在 Nginx 默认文件中,因为 ChatGPT 给我的位置版本中不存在该行。取消注释该行完全解决了问题,并且应用程序运行良好。