Я пытаюсь обслуживать простое приложение Flask
с помощью NGINX
, используя Docker Compose
.Но NGINX не будет обслуживать мои статические файлы.
Я использую Ubuntu 18.04
коробку.Вот моя файловая структура:
.
├── docker-compose.yml
├── nginx
│ └── sites-enabled
│ └── nginx.conf
├── README.md
├── uwsgi.ini
└── web
├── app
│ ├── __init__.py
│ ├── static
│ │ ├── pics
│ │ │ ├── headshot1.jpg
│ │ │ └── headshot2.jpg
│ │ ├── scripts.js
│ │ └── styles.css
│ └── templates
│ ├── index.html
│ └── layout.html
└── run.py
Вот мой nginx.conf
:
http {
server {
listen 80;
server_name example.com www.example.com;
location /static {
alias /usr/src/app/app/static;
}
location / {
include uwsgi_params;
uwsgi_pass web:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
И мой docker-compose.yml
:
version: "2"
services:
web:
restart: always
build: ./web
expose:
- "5000"
volumes:
- ./web:/usr/src/app
command: >
bash -c "uwsgi --socket :5000 \
--chdir /usr/src/app \
--wsgi-file run.py \
--callable app \
--master \
--processes 4 \
--threads 2"
nginx:
restart: always
image: nginx:1.15
ports:
- "80:80"
volumes:
- /www/static
- ./nginx/sites-enabled/nginx.conf:/etc/nginx/nginx.conf
volumes_from:
- web
links:
- web:web
Когда я запускаюконтейнеры, я могу получить доступ к своему сайту из Интернета, но ни один из статических файлов (CSS, изображений) не обслуживается.Когда я захожу в контейнер NGINX, я могу найти статические файлы:
$ docker exec -it my_container_1_39dbd8b7e8dc ls -l /usr/src/app/app/static/pics
drwxr-xr-x 2 root root 4096 Feb 8 18:39 pics
-rw-r--r-- 1 root root 0 Feb 8 18:39 scripts.js
-rw-r--r-- 1 root root 3793 Feb 8 18:39 styles.css
Я не уверен, что я делаю здесь неправильно.Может быть, это проблема с правами доступа к файлу?
РЕДАКТИРОВАТЬ: добавление ссылок в каталог static/
:
HTML
:
<link rel="stylesheet" href="/static/styles.css"/>
CSS
:
#right {
float: right;
background:
linear-gradient(to bottom, rgba(0,55,164, 0.75), rgba(0, 55, 164, 0.9)),
url(pics/headshot1.jpg) no-repeat center center;
}