【问题标题】:Django, nginx and gunicorn in kubernetesKubernetes 中的 Django、nginx 和 gunicorn
【发布时间】:2019-05-06 18:27:24
【问题描述】:

我正在尝试在 kubernetes 中运行我的 django 应用程序。我使用 docker-compose 构建应用程序和 nginx。我能够在 docker compose 中使用代理服务器 nginx 运行应用程序。

docker-compose 构建 - 成功

docker-compose up - 成功

http://aggre.mabh.io - 成功(可以加载应用程序)

当我尝试部署应用程序和 nginx 的映像时, 我在 kubernetes 仪表板中收到错误提示

kubernetes 中的错误

pod 有未绑定的 PersistentVolumeClaims(重复 2 次)(对于 nginx 和应用程序)

我正在使用 kompose up 来构建和部署应用程序。

如何在kubernetes中部署应用并通过nginx kubernetes外部端点访问应用?

docker-compose.yml

version: '3'
services:
  djangoapp:
    build: .
    image: sigmaaggregator/djangoapp
    labels:
      - kompose.service.type=NodePort
    volumes:
      - .:/djangoapp
      - static_volume:/djangoapp/static
    ports:
      - 4000:4000
    networks:
      - nginx_network

  nginx:
    image: nginx:1.13
    ports:
      - 80:80
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - static_volume:/djangoapp/static
    depends_on:
      - djangoapp
    networks:
      - nginx_network

networks:
  nginx_network:
    driver: bridge

volumes:
  static_volume:

Dockerfile

FROM python:3.6

RUN mkdir -p /djangoapp
WORKDIR /djangoapp
COPY . /djangoapp

RUN pip install -r requirements.txt

# copy our project code
RUN python manage.py collectstatic --no-input

CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"

# expose the port 4000
EXPOSE 4000

# define the default command to run when starting the container
CMD ["gunicorn", "--bind", ":4000", "aggre.wsgi:application"]

config/nginx/conf.d/local.conf

upstream hello_server {
   server djangoapp:4000;
}
server {
   listen 80;
   server_name aggre.mabh.io;

   location /static/ {
     alias /djangoapp/static/;
   }

   location / {
    proxy_pass http://hello_server;
    proxy_set_header Host $host;
    #proxy_ssl_server_name on;
    #proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
  }
}

【问题讨论】:

  • PersistentVolumePersistentVolumeClaim 对象怎么样,它们是否存在于您的 k8s 集群中:kubectl get pv -o widekubectl get pvc -o wide
  • 谢谢@mk_sta。 PersistentVolumeClaim 对象存在,但处于待处理状态。 PersistentVolume 不存在。
  • 你能分享PVPVC事件吗:kubectl describe pv <PV-name>kubectl describe pvc <PVC-name>

标签: django nginx kubernetes docker-compose kompose


【解决方案1】:

对于在 kubernetes 上使用 django 的静态文件,请考虑 whitenoise http://whitenoise.evans.io/en/stable/ 在此处提供解决方案。

这是一个直截了当的建议,但我花了很多时间搜索才发现它被引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2013-03-01
    • 2018-02-16
    • 2013-03-22
    • 2012-06-24
    相关资源
    最近更新 更多