django + uwsgi在码头工人

问题描述 投票:1回答:1

在docker中部署Django应用程序的最佳方法是什么?我已经查看了几个博客,似乎在大多数示例中,每个人都试图将nginx + django + uwsgi放在一个容器中。

但容器应该只有一个进程。所以我在一个容器中尝试django和uwsgi,nginx在另一个容器或主机本身。

有些人可以建议我最好的方法。

P.S: - 我的django应用程序只是提供REST API结果。我没有使用Django模板作为我的静态内容。

我也在寻找通过https启用所有这些功能。如果有人已经实现了类似django app托管的方式,请分享博客或github链接。

django docker nginx uwsgi
1个回答
1
投票

大多数NGINX + uWSGI设置之间的桥接点是uwsgi UNIX套接字。它作为文件系统上的文件公开。 (您也可以在TCP套接字上使用WSGI)

如果要运行两个容器,则它们都需要具有包含此套接字的文件系统或网络的视图。

在普通的docker中,您可以将相同的卷或主机目录绑定到两个容器中,以完成您所说的内容。 uWSGI将在此路径中创建套接字,NGINX将通过套接字与uWSGI服务器通信:

docker run -v /app/uwsgi/:/app/uwsgi/ my-uwsgi-server-image --socket /app/uwsgi/uwsgi.sock
docker run -v /app/uwsgi/:/app/uwsgi/ nginx
  # your nginx config should set the django upstream to use "/app/uwsgi/uwsgi.sock"

在kubernetes中,您可以使用Volumes和VolumeMounts在单个Pod中使用多个容器完成相同的操作。


0
投票

看起来像旧线程,但也许有人会找到答案来解决他/她的问题。

如果您没有使用任何静态内容服务或因不同的特定原因需要它,您实际上并不需要nginx服务。

uwsgi可以作为简单的http服务器工作。

见文档:https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html

来自我的Dockerfile的CMD命令示例:

CMD ["uwsgi", "--http-socket", ":8000", "--py-autoreload", "1", "--module", "app.wsgi:application"]

更简单视图的命令:

uwsgi --http-socket :8000 --py-autoreload 1 --module app.wsgi:application

上面的配置仅用于本地开发。

在将其应用于您的项目之前,请采用它以满足您的环境要求。

© www.soinside.com 2019 - 2024. All rights reserved.