![](/img/trans.png)
[英]serving Django static files with nginx and gunicorn on kubernetes
[英]Django in kubernetes with ingress-nginx is not serving static files
我是 Kubernetes 的新手,這是我使用它的第一個項目。
我想要做的基本上就是這個。 我有一個 Django 應用程序和一個 React 應用程序。 我想使用 kubernetes 自己的入口 nginx 庫 (kubernetes/ingress-nginx) 使用單個 ingress-nginx 為它們提供服務,React 應用程序在 root 中提供服務,而 Django 在“/api”根中提供服務。 我在 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
如果您能提供一個很好的例子,我將不勝感激。
上面的評論中提到了這一點,但請查看 whitenoise http://whitenoise.evans.io/en/stable/以在此處提供解決方案。
這是一個簡單的建議,但我花了很多時間四處搜索,然后才發現這里的評論中引用了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.