Nginx не обслуживает статические файлы go

Моя структура приложения выглядит следующим образом:

.
├── src
│   └── some go files
├── templates
├── static
    |── images
    |── js
    └── styles

А вот и мой Dockerfile:

FROM golang:1.18

WORKDIR /usr/src/app

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

CMD ["go", "run", "src/cmd/main.go"]  

А вот и мой docker-compose.yml:

version: "3.8"


services:
  pgsql:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - todo_pg_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=todo
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  app:
    build: .
    ports:
      - "8080"
    restart: always
    depends_on:
      - pgsql

    
  nginx:
    image: nginx
    restart: always
    ports:
      - 801:801
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf


volumes:
  todo_pg_db:

А вот и nginx.conf:

worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    access_log /var/log/nginx/access.log;
    sendfile on;

    server {
        listen 801;
        server_name 127.0.0.1;
        charset utf-8;
        keepalive_timeout 5;

        location / {
            # checks for static file, if not found proxy to app
            try_files $uri @backend;
        }

        location @backend {
            # client_max_body_size 10m;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app:8080;
        }
    }
}

Моя проблема в том, что nginx не может найти статические файлы. Вот несколько примеров журналов:

open() "/usr/src/app/static/styles/bootstrap.min.css" failed (2: No such file or directory)

Но есть такой каталог. когда я запускаю свой док-контейнер, используя эту запятую: sudo docker exec -it todo_app_1 bash. Затем я просматриваю содержимое файла, и он отлично работает!!!

cat /usr/src/app/static/styles/bootstrap.min.css
# output: file content...

Я не знаю, что здесь не так. Что мне не хватает?

nginx работает из другого образа, в него не будет включен источник вашего приложения Go. (Также не используйте аргументы имени файла для go run. Если вы хотите использовать run и чтобы он правильно работал с модулями, используйте go run ., но было бы лучше не перекомпилировать приложение каждый раз при запуске контейнера)

JimB 01.04.2022 16:59

Спасибо за Ваш ответ. Как я могу синхронизировать их файлы? Можете ли вы дать мне ключевое слово, чтобы я мог найти его?

MojixCoder 01.04.2022 21:33

Вы можете смонтировать статические файлы как том в контейнере nginx в файле docker-compose.

paltaa 01.04.2022 23:36

@paltaa Я отправил ответ, можете ли вы проверить его, пожалуйста? Теперь nginx правильно обслуживает мои статические файлы.

MojixCoder 02.04.2022 13:20

файл выглядит хорошо!

paltaa 03.04.2022 22:01
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я исправил это с помощью volumes:

nginx:
  image: nginx
  restart: always
  ports:
    - 801:801
  volumes:
    - ./static:/var/www
    - ./nginx.conf:/etc/nginx/nginx.conf

и в nginx.conf:

location /static {
    alias /var/www;
}

Другие вопросы по теме