什么';s docker模式提供静态和动态内容
我有一个简单的python/flask应用程序。在什么';s docker模式提供静态和动态内容,docker,Docker,我有一个简单的python/flask应用程序。在容器上是这样的 /var/www/app/ appl/ static/ ... app.py wsgi.py 我曾经让nginx在使用docker之前直接提供静态文件。像这样: location /static { alias /var/www/www.domain.com/appl/static; } location / { uwsgi_pass unix:///tmp/uwsgi/w
容器上是这样的
/var/www/app/
appl/
static/
...
app.py
wsgi.py
我曾经让nginx在使用docker之前直接提供静态文件。像这样:
location /static {
alias /var/www/www.domain.com/appl/static;
}
location / {
uwsgi_pass unix:///tmp/uwsgi/www.domain.com.sock;
include uwsgi_params;
}
但是现在静态文件在容器中,nginx无法访问
我可以想出两种可能的解决方案:
像以前一样在容器内启动nginx,让主机nginx使用端口8000与容器nginx通信
将(主机)/var/www/www.domain.com/static
装载到(容器)/var/www/static
并复制run.sh中的所有静态文件
docker更喜欢什么?我更喜欢第一种解决方案,因为它符合构建a的要素7:公开端口上的所有服务。通过Nginx运行两次请求肯定会有一些开销,但这可能不足以让人担心(如果是这样的话,只需向池中添加更多容器)。在容器启动后,使用自定义运行脚本执行主机端工作将很难使用Docker生态系统中的工具扩展应用程序。我不喜欢第一种解决方案,因为在一个容器上运行多个服务不是Docker方式
总的来说,我们希望将静态文件夹公开给nginx,那么卷是最佳选择。但是有一些不同的方法可以做到这一点
如您所述,将(主机)/var/www/www/www.domain.com/static
装载到(容器)/var/www/static
并复制run.sh
使用nginx缓存,让nginx为您缓存静态文件。
例如,我们可以这样编写conf,让nginx在30分钟内解决静态内容
-
信任uwsgi并使用uwsgi服务静态内容李>
我会看看uwsgi。谢谢
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:30m max_size=1G;
upstream app_upstream {
server app:5000;
}
location /static {
proxy_cache cache;
proxy_cache_valid 30m;
proxy_pass http://app_upstream;
}