Не удается развернуть мое приложение Django на Google Cloud Run

Мне нужна помощь в развертывании докера django, поэтому я покажу вам, что у меня сейчас есть, и мне нужна ваша помощь в настройке его для работы с nginx и gunicorn, чтобы я мог в конечном итоге использовать это для развертывания моего приложения с помощью google cloud run. Я использую mac btw

Хорошо, вот мой каталог:

Dockerfile              carz                    docker-compose.yml      nginx                   static
carszambia              db.sqlite3              manage.py               requirements.txt        staticfiles

docker-compose.yml:

version: '3.8'

services:
  web:
    build:
      context: .
    command: gunicorn carszambia.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .:/usr/src/app
      - static_volume:/usr/src/app/staticfiles
    expose:
      - "8000"
    env_file:
      - ./.env.dev
    depends_on:
      - db

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - static_volume:/usr/src/app/staticfiles
    ports:
      - "8001:80"
    depends_on:
      - web

  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=xxx_hidden
      - POSTGRES_PASSWORD=xxx_hidden
      - POSTGRES_DB=xxx_hidden

volumes:
  postgres_data:
  static_volume:

Dockerfile:

# pull official base image
FROM python:3.11.4-slim-buster

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN apt-get update && apt-get install -y \
    nginx \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . .

# configure nginx
COPY ./nginx/default.conf /etc/nginx/conf.d/

# Expose port for Nginx
EXPOSE 80

# Start Gunicorn and Nginx
CMD ["/bin/bash", "-c", "gunicorn carszambia.wsgi:application --bind 0.0.0.0:8000 & nginx -g 'daemon off;'"]

nginx/default.conf:

server {
    listen 80;

    location /static/ {
        alias /usr/src/app/staticfiles/;
    }

    location / {
        proxy_pass http://web:8000;  # Use service name 'web' instead of 127.0.0.1
        proxy_set_header Host $host;
        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;
    }
}

nginx/Dockerfile:

FROM nginx:latest

COPY .defult.conf /etc/nginx/conf.d/defult.conf

DEPLOYMENT ERROR: (gcloud.run.deploy) Revision 'carszambia-00010-9zf' is not ready and cannot serve traffic. Пользовательский контейнер не смог запуститься и прослушать порт, заданный переменной окружения PORT=8080, в течение отведенного таймаута. Это может произойти, если порт контейнера неправильно настроен или если таймаут слишком короткий. Таймаут проверки работоспособности может быть увеличен. Журналы этой ревизии могут содержать дополнительную информацию.

Cloud Run использует контейнеры Docker, но не поддерживает Docker Compose. Если вы полагаетесь на этот docker compose yaml для подключения своих контейнеров, он не будет работать. Если вы хотите использовать yaml-файл для хранения конфигурации сервиса, Cloud Run использует Knative service в качестве родного формата Yaml.

Cloud Run также не поддерживает диски, поэтому, если вы не хотите, чтобы очень медленная база данных обслуживалась с ведра хранения GCS или очень дорогая база данных обслуживалась с ресурса NFS за 400 долларов в месяц, вам, вероятно, следует запустить ее в Cloud SQL и использовать встроенный коннектор для подключения базы данных к вашей службе Cloud Run.

Вернуться на верх