nginx Ngnix未连接到Django/Gunicon容器

c86crjj0  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(64)

我在DigitalOcean上有一个后端,当连接到它时,我得到一个502

  • Ngnix错误:
2023/12/01 10:05:43 [error] 31#31: *507 upstream timed out (110: Connection timed out) while connecting to upstream, client: 141.101.98.150, server: mydomaine.com, request: "GET / HTTP/1.1", upstream: "http://172.27.0.7:5001/", host: "mydomaine.com"

字符串

  • 开发容器的Nginx配置:
server {
    listen 80;
    listen [::]:80;
    server_name mydomaine.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name mydomaine.com;

    

    access_log /var/log/nginx/dev_access.log;
    error_log /var/log/nginx/dev_error.log;

    location / {
        proxy_pass http://dev:5001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

  • Docker编写文件:
version: "3.7"

services:
  webserver:
    image: nginx:1.22.0
    container_name: webserver
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./logs/nginx/:/var/log/nginx/
      - ./nginx/ssl/:/etc/nginx/ssl/:ro
      - ./nginx/configs/:/etc/nginx/sites-enabled/:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - backend

  db_prod:
    image: postgres:15
    container_name: db_prod
    restart: always
    ports:
      - "${POSTGRES_PROD_PORT}:5432"
    volumes:
      - db_prod:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles: #TODO: fix  Unsupported config option for services.{service_name}: 'profiles'
    #   - prod
    networks:
      - backend

  db_dev:
    image: postgres:15
    container_name: db_dev
    restart: always
    ports:
      - "${POSTGRES_DEV_PORT}:5433"
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - dev
    networks:
      - backend

  prod:
    build: ./src
    command: ["./start.sh"]
    container_name: prod
    restart: always
    ports:
      - 5002:6000
    volumes:
      - env_prod:/env:delegated
      - .env:/app/.env:ro
      - ./logs/prod/gunicorn/:/var/log/gunicorn/
    depends_on:
      - db_prod
    environment:
      LOG_PATH: /var/log
      POSTGRES_HOST: db_prod
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - prod
    networks:
      - backend

  dev:
    build: ./src
    command: ["./start.sh"]
    container_name: dev
    restart: always
    ports:
      - 5001:6000
    volumes:
      - env_dev:/env:delegated
      - .env:/app/.env:ro
      - ./logs/dev/gunicorn/:/var/log/gunicorn/
    depends_on:
      - db_dev
    environment:
      LOG_PATH: /var/log
      POSTGRES_HOST: db_dev
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - dev
    networks:
      - backend

  adminer:
    image: dockette/adminer:pgsql
    container_name: adminer
    restart: always
    environment:
      UPLOAD: ${ADM_UPLOAD}
    # profiles:
    #   - dev
    #   - prod
    networks:
      - backend

volumes:
  db:
  db_prod:
  db_dev:
  env_dev:
  env_prod:

networks:
  backend:

  • Dockerfile:
FROM python:3.10.4-alpine

RUN mkdir -p $LOG_PATH/gunicorn

RUN apk add tk

WORKDIR /app

RUN set -ex \
    && apk add --no-cache --virtual \ 
    .build-deps \
    freetype-dev \
    postgresql-dev \
    build-base \
    libffi-dev \
    && python -m venv /env \
    && /env/bin/pip install --upgrade pip

RUN ln -s /usr/include/freetype2/ft2build.h /usr/include/ft2build.h \
    && ln -s /usr/include/freetype2/freetype/ /usr/include/freetype

ADD ./requirements.txt /opt/requirements.txt

RUN /env/bin/pip install --no-cache-dir -r /opt/requirements.txt

RUN runDeps="$(scanelf --needed --nobanner --recursive /env \
    | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
    | sort -u \
    | xargs -r apk info --installed \
    | sort -u)" \
    && apk add --virtual rundeps $runDeps \
    && apk del .build-deps

ADD ./api /app
COPY ./start.sh /app

EXPOSE 6000

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

CMD ["/app/start.sh"]

  • start.sh
#!/bin/sh
python3 manage.py makemigrations
python3 manage.py migrate
/env/bin/gunicorn --bind :6000 config.wsgi:application --workers 3 --access-logfile $LOG_PATH/gunicorn/access.log --error-logfile $LOG_PATH/gunicorn/error.log --capture-output --enable-stdio-inheritance --log-level debug

h9a6wy2h

h9a6wy2h1#

在@大卫迷宫的一个非常有用的评论表单之后,a删除了dev和prod服务中的端口,并为每个服务创建了一个单独的Dockerfilestart.sh
编写文件:

version: "3.7"

services:
  webserver:
    image: nginx:1.22.0
    container_name: webserver
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./logs/nginx/:/var/log/nginx/
      - ./nginx/ssl/:/etc/nginx/ssl/:ro
      - ./nginx/configs/:/etc/nginx/sites-enabled/:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    # networks:
    #   - backend

  db_prod:
    image: postgres:15
    container_name: db_prod
    restart: always
    ports:
      - "${POSTGRES_PROD_PORT}:5432"
    volumes:
      - db_prod:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles: #TODO: fix  Unsupported config option for services.{service_name}: 'profiles'
    #   - prod
    # networks:
    #   - backend

  db_dev:
    image: postgres:15
    container_name: db_dev
    restart: always
    ports:
      - "${POSTGRES_DEV_PORT}:5433"
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - dev
    # networks:
    #   - backend

  prod:
    build: 
      context: ./src
      dockerfile: ./prod/Dockerfile
    container_name: prod
    restart: always

    volumes:
      - env_prod:/env:delegated
      - .env:/app/.env:ro
      - ./logs/prod/gunicorn/:/var/log/gunicorn/
    depends_on:
      - db_prod
    environment:
      LOG_PATH: /var/log
      POSTGRES_HOST: db_prod
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - prod
    # networks:
    #   - backend

  dev:
    build: 
      context: ./src
      dockerfile: ./dev/Dockerfile
    container_name: dev
    restart: always
    volumes:
      - env_dev:/env:delegated
      - .env:/app/.env:ro
      - ./logs/dev/gunicorn/:/var/log/gunicorn/
    depends_on:
      - db_dev
    environment:
      LOG_PATH: /var/log
      POSTGRES_HOST: db_dev
      POSTGRES_ENGINE: ${POSTGRES_ENGINE}
    # profiles:
    #   - dev
    # networks:
    #   - backend

  adminer:
    image: dockette/adminer:pgsql
    container_name: adminer
    restart: always
    environment:
      UPLOAD: ${ADM_UPLOAD}
    # profiles:
    #   - dev
    #   - prod
    # networks:
    #   - backend

volumes:
  db:
  db_prod:
  db_dev:
  env_dev:
  env_prod:

# networks:
#   backend:

字符串
DockerFile for dev:

FROM python:3.10.4-alpine

RUN mkdir -p $LOG_PATH/gunicorn

RUN apk add tk

WORKDIR /app

RUN set -ex \
    && apk add --no-cache --virtual \ 
    .build-deps \
    freetype-dev \
    postgresql-dev \
    build-base \
    libffi-dev \
    && python -m venv /env \
    && /env/bin/pip install --upgrade pip

RUN ln -s /usr/include/freetype2/ft2build.h /usr/include/ft2build.h \
    && ln -s /usr/include/freetype2/freetype/ /usr/include/freetype

ADD ./requirements.txt /opt/requirements.txt

RUN /env/bin/pip install --no-cache-dir -r /opt/requirements.txt

RUN runDeps="$(scanelf --needed --nobanner --recursive /env \
    | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
    | sort -u \
    | xargs -r apk info --installed \
    | sort -u)" \
    && apk add --virtual rundeps $runDeps \
    && apk del .build-deps

ADD ./api /app
COPY ./dev/start.sh /app

EXPOSE 6000

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

CMD ["/app/start.sh"]


start.sh for dev:

#!/bin/sh
python3 manage.py makemigrations
python3 manage.py migrate
/env/bin/gunicorn --bind :6000 config.wsgi:application --workers 3 --access-logfile $LOG_PATH/gunicorn/access.log --error-logfile $LOG_PATH/gunicorn/error.log --capture-output --enable-stdio-inheritance --log-level debug


Nginx config for dev:

server {
    listen 80;
    listen [::]:80;
    server_name dev.glucoseinsights.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name dev.glucoseinsights.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    access_log /var/log/nginx/dev_access.log;
    error_log /var/log/nginx/dev_error.log debug;

    location / {
        proxy_pass http://dev:6000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

相关问题