django - 使用 docker 部署
问题描述
我是使用 docker 部署的新手。实际上,我在 docker 容器内的计算机上运行我的 django 应用程序,它在端口 localhost:8080 上成功运行。然后我将代码拉到远程服务器并启动 docker-compose up,应用程序也在那里成功运行。我想问的是,如何借助服务器的ip地址查看应用程序?例如,如果 ip 地址是 123.45.67.89,我认为应用程序应该在 123.45.67.89:8080 中运行,但它不会在那里运行。如何访问在远程服务器的容器中运行的应用程序?
PS我没用过nginx,应该用吗?
解决方案
这个问题的答案很大程度上取决于您在哪里托管生产应用程序,以及它为您提供的开箱即用服务类型。
一般来说,生产服务器通常在容器化应用程序前面有一些反向代理或应用程序负载均衡器。
由于您是从 docker 开始的,并且我假设这是一个个人或小型应用程序,因此我可以推荐以下内容:
- 如果您在托管服务提供商方面很灵活,请尝试Digital Ocean。它们对开发人员非常友好,并且具有成本效益,至少在某个规模点之前是这样。
- 使用自动泊坞窗 nginx-proxy。这个工具可以让你在你的文件中添加几行
docker-compose.yml
代码,然后神奇地得到一个配置好的 nginx 代理,而不需要对 nginx 有任何了解。
我正在使用这种方法将多个个人网站部署到单个低成本服务器上。
一个示例docker-compose.yml
可能如下所示:
services:
nginx:
image: nginxproxy/nginx-proxy
ports: ["${PORT:-80}:80"]
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
DEFAULT_HOST: www.yoursite.com
app:
depends_on: [nginx]
restart: always
image: your/image
environment:
VIRTUAL_HOST: myapp.localhost,www.yoursite.com
这基本上告诉 nginx-proxy 在http://myapp.localhost和http://www.yoursite.com上为您的应用程序提供服务。
当然,您需要将您的域 DNS 指向您的数字海洋 IP。
推荐阅读
- reactjs - React 本机元素类型无效。需要一个字符串或类/函数,但未定义
- android - Flutter Signed APK build 中无法打开 zipalign 失败错误
- sql-server - 寻找编写代码逻辑的更好方法
- mysql - MySQL:生成列的表达式包含不允许的函数?康卡特?
- javascript - 打开一个新的后关闭 FeatherLight
- python - 我想知道如何在文件中写入“结果”
- layout - Anychart 多个图例和标签
- reactjs - React Redux 确认操作框错误:应用程序状态或操作有效负载太大
- excel - 更改 Excel 中特定列的行分隔符
- c# - 有没有办法从 C# mysql 中的 db.Execute(sql) 返回 bool 值?