gpt4 book ai didi

带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件

转载 作者:行者123 更新时间:2023-12-03 14:54:35 29 4
gpt4 key购买 nike

我是 Kubernetes 的新手,这是我使用它的第一个项目。

我想要做的基本上就是这个。
我有一个 Django 应用程序和一个 React 应用程序。我想使用 kubernetes 自己的 ingress nginx 库 (kubernetes/ingress-nginx) 使用单个 ingress-nginx 为它们提供服务
React 应用程序在 root 中提供,Django 在“/api” root 中提供。
我在 Django 设置中定义了 FORCE_SCRIPT_NAME。

同样对于静态文件,我创建了一个单独的持久卷声明并将其安装在 Django 部署文件中。但是当我点击 Django 的管理页面时,不提供静态文件。
并且媒体文件也在 api/api/media... 路径中提供,该路径具有额外的 api。
在 Kubernetes 中提供静态文件的正确方法是什么?我不想使用像 S3 这样的在线静态根。
这是我的 Django 部署 yaml。

apiVersion: apps/v1
kind: Deployment
metadata:
name: django
labels:
deployment: django
spec:
replicas: 1
selector:
matchLabels:
pod: django
template:
metadata:
labels:
pod: django
spec:
volumes:
- name: django-configmap-volume
configMap:
name: django-configmap
- name: static-volume
persistentVolumeClaim:
claimName: static-volume
- name: media-volume
persistentVolumeClaim:
claimName: media-volume
containers:
- name: django
image: my_image:v1.0
ports:
- containerPort: 8182
envFrom:
- configMapRef:
name: django-configmap
env:
- name: DB_HOST
value: postgres-service
- name: DB_NAME
value: kubernetes_django
- name: DB_USER
valueFrom:
secretKeyRef:
name: postgres-credentials
key: user
- name: DB_PASS
valueFrom:
secretKeyRef:
name: postgres-credentials
key: password
- name: DB_PORT
value: "5432"
volumeMounts:
- name: django-configmap-volume
mountPath: /etc/config
- name: static-volume
mountPath: /app/static
- name: media-volume
mountPath: /app/media

Django设置.py
...
FORCE_SCRIPT_NAME = '/api/'
STATIC_ROOT = '/app/static'
MEDIA_ROOT = '/app/media'
STATIC_URL = '/api/static/'
MEDIA_URL = '/api/media/'
...

我已经在入口中为静态文件和媒体文件位置定义了一个配置片段,但我认为它不起作用。
入口.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hoosthere-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/proxy-connect-timeout: '30'
nginx.ingress.kubernetes.io/proxy-send-timeout: '500'
nginx.ingress.kubernetes.io/configuration-snippet: |
location ~* "^/api/static?(.*)" {
alias /app/static/;
}
location ~* "^/api/media?(.*)" {
alias /app/media/;
}
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: react-service
servicePort: 1220
- path: /api/?(.*)
backend:
serviceName: django-service
servicePort: 8000

如果您能提供一个很好的例子,我将不胜感激。

最佳答案

它在上面的评论中提到,但看看白噪声http://whitenoise.evans.io/en/stable/在这里提供解决方案。
这是一个简单的建议,但我花了很多时间四处搜索,然后才发现这里的评论中引用了它。

关于带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com