在docker中部署Django应用程序的最佳方法是什么?我已经查看了几个博客,似乎在大多数示例中,每个人都试图将nginx + django + uwsgi放在一个容器中。
但容器应该只有一个进程。所以我在一个容器中尝试django和uwsgi,nginx在另一个容器或主机本身。
有些人可以建议我最好的方法。
P.S: - 我的django应用程序只是提供REST API结果。我没有使用Django模板作为我的静态内容。
我也在寻找通过https启用所有这些功能。如果有人已经实现了类似django app托管的方式,请分享博客或github链接。
大多数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中使用多个容器完成相同的操作。
看起来像旧线程,但也许有人会找到答案来解决他/她的问题。
如果您没有使用任何静态内容服务或因不同的特定原因需要它,您实际上并不需要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
上面的配置仅用于本地开发。
在将其应用于您的项目之前,请采用它以满足您的环境要求。