我有一个运行django应用程序部署的minikube。直到今天,我们还在使用django启动的服务器。现在,我添加了另一个Nginx容器,这样我们就可以部署django应用程序了,因为我读到django并不是真正用于生产的。在阅读了一些文档和博客之后,我配置了deployment.yaml文件,它现在运行得非常好。问题是没有提供静态内容。这是因为静态内容在django容器中,而不是Nginx容器中。(Idk如果他们可以共享音量,请澄清这个疑问或误解)什么是最好的方式,以便我可以提供我的静态内容?这是我的部署文件的规范:
spec:
containers:
- name: user-django-app
image: my-django-app:latest
ports:
- containerPort: 8000
env:
- name: POSTGRES_HOST
value: mysql-service
- name: POSTGRES_USER
value: admin
- name: POSTGRES_PASSWORD
value: admin
- name: POSTGRES_PORT
value: "8001"
- name: POSTGRES_DB
value: userdb
- name: user-nginx
image: nginx
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-config
configMap:
name: nginx-config我相信
server {
location /static {
alias /var/www/djangoapp/static;
}
}需要改变。但是我不知道我该写些什么?另外,如何在部署完成后立即运行python manage.py migrate和python manage.py collectstatic。
请提供资源/文档/博客,它们将帮助我做到这一点。谢谢!谢谢。
在@willrof的回答之后,这是我当前的YAML文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-deployment
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
micro-service: user
template:
metadata:
name: user
labels:
app: web
micro-service: user
spec:
containers:
- name: user-django-app
image: docker.io/dev1911/drone_plus_plus_user:latest
ports:
- containerPort: 8000
env:
- name: POSTGRES_HOST
value: mysql-service
- name: POSTGRES_USER
value: admin
- name: POSTGRES_PASSWORD
value: admin
- name: POSTGRES_PORT
value: "8001"
- name: POSTGRES_DB
value: userdb
volumeMounts:
- name: shared
mountPath: /shared
command: ["/bin/sh", "-c"]
args: ["apt-get install nano"]
- name: user-nginx
image: nginx
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: shared
mountPath: /var/www/user/static
volumes:
- name: nginx-config
configMap:
name: nginx-config
- name: shared
emptyDir: {}worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096; ## Default: 1024
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format ltsv 'domain:$host\t'
'host:$remote_addr\t'
'user:$remote_user\t'
'time:$time_local\t'
'method:$request_method\t'
'path:$request_uri\t'
'protocol:$server_protocol\t'
'status:$status\t'
'size:$body_bytes_sent\t'
'referer:$http_referer\t'
'agent:$http_user_agent\t'
'response_time:$request_time\t'
'cookie:$http_cookie\t'
'set_cookie:$sent_http_set_cookie\t'
'upstream_addr:$upstream_addr\t'
'upstream_cache_status:$upstream_cache_status\t'
'upstream_response_time:$upstream_response_time';
access_log /var/log/nginx/access.log ltsv;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name example.com
;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
alias /var/www/user/static;
}
}
# include /etc/nginx/conf.d/*.conf;
}我没有写这个配置,但找到了它,并根据我的需要进行了编辑。
发布于 2020-05-27 00:08:40
在我们的评论聊天后,你告诉我你在使用cmd和args时遇到了困难。
下面是一个名为two-containers.yaml的示例
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
containers:
- name: python
image: python
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "apt-get update && apt-get install -y curl && mkdir /curl-folder && cp /usr/bin/curl /curl-folder && cp -r /curl-folder /pod-data/"]
- name: user-nginx
image: nginx
volumeMounts:
- name: shared-data
mountPath: /tmp/pod-data
volumes:
- name: shared-data
emptyDir: {}python将启动,依次运行apt-get update、apt-get install -y curl、mkdir /curl-folder,然后将usr/bin/curl复制到/curl-folder,然后将文件夹/curl-folder复制到/pod-data共享挂载卷。
几点观察:
command中提到的二进制文件(就像python中的/bin/sh )。&&在args字段中连续链接命令,这样更易于测试和部署。Reproduction:
$ kubectl apply -f two-container-volume.yaml
pod/two-containers created
$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
two-containers 2/2 Running 0 7s
two-containers 1/2 NotReady 0 30s
$ kubectl describe pod two-containers
...
Containers:
python:
Container ID: docker://911462e67d7afab9bca6cdaea154f9229c80632efbfc631ddc76c3d431333193
Image: python
Command:
/bin/sh
Args:
-c
apt-get update && apt-get install -y curl && mkdir /curl-folder && cp /usr/bin/curl /curl-folder && cp -r /curl-folder /pod-data/
State: Terminated
Reason: Completed
Exit Code: 0
user-nginx:
State: Runningpython容器已正确执行和完成,现在让我们检查nginx容器中的文件日志。$ kubectl exec -it two-containers -c user-nginx -- /bin/bash
root@two-containers:/# cd /tmp/pod-data/curl-folder/
root@two-containers:/tmp/pod-data/curl-folder# ls
curl如果您需要进一步的帮助,在您尝试运行时将yaml与command+args一起发布,我们可以帮助您解决语法问题。
发布于 2021-02-26 08:34:23
如果是django应用程序,可以考虑使用whitenoise http://whitenoise.evans.io/en/stable/来提供minikube或kubernetes的静态内容。
这是一个直截了当的建议,但在有人提到它之前,我不得不进行了相当多的搜索。
https://stackoverflow.com/questions/61953139
复制相似问题