flask-on-docker icon indicating copy to clipboard operation
flask-on-docker copied to clipboard

Gateway Timeout

Open Ro4cHii opened this issue 1 year ago • 0 comments

Hey there,

I followed the tutorial and everything seemed to work out quite well except for the part that I cannot access the site and it's simply giving me a Gateway Timeout when I try to access the configured subdomain.

Please note that I do not have local access to the mydomain.com server so testing via localhost:5001 is not possible for me. However, this kind of subdomain-to-service configuration via labels is definitely working for several other containers.

docker-compose.prod.yaml

version: '3.3'

services:
  nginx-csc:
    build: ./nginx
    container_name: prod_nginx
    volumes:
      - static_volume:/home/app/web/project/static
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nginx-csc.entrypoints=http"
      - "traefik.http.routers.nginx-csc.rule=Host(`test.mydomain.com`)"
      - "traefik.http.routers.nginx-csc-secure.entrypoints=https"
      - "traefik.http.routers.nginx-csc-secure.rule=Host(`test.mydomain.com`)"
      - "traefik.http.routers.nginx-csc-secure.tls=true"
      - "traefik.http.routers.nginx-csc-secure.tls.certresolver=http"
      - "traefik.http.routers.nginx-csc-secure.service=nginx-csc"
      - "traefik.http.routers.nginx-csc-secure.middlewares=secHeaders@file,httpsRedirect@file"
      - "traefik.http.services.nginx-csc.loadbalancer.server.port=80"
    depends_on:
      - web
  web:
    build:
      context: ./web
      dockerfile: Dockerfile.prod
    container_name: prod_web
    command: gunicorn --bind 0.0.0.0:5000 manage:app
    env_file:
      - ./.env.prod
    depends_on:
      - db
  db:
    image: postgres:13
    container_name: prod_db
    volumes:
      - postgres_data_prod:/var/lib/postgresql/data/
    env_file:
      - ./.env.prod.db

volumes:
  postgres_data_prod:
  static_volume:

nginx.conf

upstream hello_flask {
    server web:5000;
}

server {

    listen 80;

    location / {
        proxy_pass http://hello_flask;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /home/app/web/project/static/;
    }

}

I start the stack via docker-compose -f docker-compose.prod.yaml up -d --build.

According to the log files, everything is running without problem:

web service

Waiting for postgres...
PostgreSQL started
[2023-08-04 16:02:55 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-08-04 16:02:55 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-08-04 16:02:55 +0000] [1] [INFO] Using worker: sync
[2023-08-04 16:02:55 +0000] [49] [INFO] Booting worker with pid: 49

db service

2023-08-04 16:02:51.294 UTC [1] LOG:  starting PostgreSQL 13.11 (Debian 13.11-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2023-08-04 16:02:51.300 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-08-04 16:02:51.302 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2023-08-04 16:02:51.305 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-08-04 16:02:51.319 UTC [61] LOG:  database system was shut down at 2023-08-04 16:02:51 UTC
2023-08-04 16:02:51.882 UTC [1] LOG:  database system is ready to accept connections

nginx service

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/08/04 16:02:53 [notice] 1#1: using the "epoll" event method
2023/08/04 16:02:53 [notice] 1#1: nginx/1.25.1
2023/08/04 16:02:53 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2023/08/04 16:02:53 [notice] 1#1: OS: Linux 5.4.0-155-generic
2023/08/04 16:02:53 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2023/08/04 16:02:53 [notice] 1#1: start worker processes
2023/08/04 16:02:53 [notice] 1#1: start worker process 19

I don't even get a HTTP status code, just a Gateway Timeout. Does anybody have an idea why?

Ro4cHii avatar Aug 04 '23 16:08 Ro4cHii