#django #postgresql #docker #nginx
Вопрос:
Я хотел бы узнать, что преследует мой докеризованный проект Django, Postgres, Gunicorn, Nginx.
`/etc/nginx/html/index.html" is not found`
nginx | 2021/10/27 15:40:34 [error] 22#22: *2 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 172.29.0.1, server: , request: "GET / HTTP/1.1", host: "0.0.0.0:8000"
nginx | 172.29.0.1 - - [27/Oct/2021:15:40:34 0000] "GET / HTTP/1.1" 404 555 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" "-
Я не могу понять, почему он жалуется на index.html когда я, по сути, перенаправляю трафик только с Django на порт 8000 и заменил файл конфигурации для nginx.
В nginx.conf
я пытался изменить listen 80;
на listen 8000;
и пытался изменить, а затем удалить запись server_name localhost;
В docker-compose я попытался изменить порты, такие как
ports:
- 8000:80
—>
ports:
- 8000:8000
Я проверил контейнер, и по умолчанию /etc/nginx/conf.d/default.conf
он удален и заменен новым nginx.conf
Возможно, это что-то очень простое, но я этого не вижу.
докер ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea9da69663eb nn_nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp nginx
fcc396bd0e56 nn_django_app "/usr/src/app/entryp…" 7 minutes ago Up 4 minutes 8000/tcp django_app
2653621d29ff postgres:14.0-alpine "docker-entrypoint.s…" 7 minutes ago Up 4 minutes 5432/tcp db1
или с измененными портами
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e15109bacc66 nn_nginx "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 80/tcp, 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp nginx
7ee41d873e3d nn_django_app "/usr/src/app/entryp…" 29 minutes ago Up 28 minutes 8000/tcp django_app
e9f14bd6e6b8 postgres:14.0-alpine "docker-entrypoint.s…" 29 minutes ago Up 28 minutes 5432/tcp
докер-сочинение
version: "3.8"
services:
# Database containers
db1:
container_name: db1
image: postgres:14.0-alpine
volumes:
- db1_volume:/var/lib/postgresql/data/
env_file:
- ./postgres/.env
networks:
- db1_network
# Web container
django_app:
container_name: django_app
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- django_static_volume:/usr/src/app/static
env_file:
- ./backend/.env
networks:
- db1_network
- nginx_network
expose:
- 8000
depends_on:
- db1
command: gunicorn server.wsgi:application -w 3 -b :8000
# Reverse proxy container (nginx)
nginx:
container_name: nginx
restart: always
build: ./nginx
volumes:
- django_static_volume:/usr/src/app/django_files/static
networks:
- nginx_network
ports:
- 8000:80
depends_on:
- django_app
networks:
db1_network:
driver: bridge
nginx_network:
driver: bridge
volumes:
db1_volume:
django_static_volume:
Nginx DOCKERFILE
FROM nginx:1.21.3-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
WORKDIR /usr/src/app
nginx.conf
upstream django_backend {
server django_app:8000;
}
server {
listen 80;
server_name localhost;
location /admin {
proxy_pass http://django_backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /api {
proxy_pass http://django_backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/admin/ {
alias /usr/src/app/django_files/static/admin/;
}
location /static/rest_framework/ {
alias /usr/src/app/django_files/static/rest_framework/;
}
}
выбрано в настройках django
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# Third-party
'corsheaders',
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
SECRET_KEY = 'secretsecretsecret'
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '0.0.0.0', 'localhost']
ROOT_URLCONF = 'server.urls'
WSGI_APPLICATION = 'server.wsgi.application'
CORS_ORIGIN_ALLOW_ALL = True
STATIC_URL = '/static/'
STATICFILES_DIRS = [str(BASE_DIR.joinpath('static'))]
STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
Ответ №1:
В вашем коде есть некоторые проблемы.
Для порта 8000:80
в вашем docker-compose
8000
-это порт, который браузер попытается подключить, 80
это порт, который порт контейнера docker. Это означает, что вам нужно установить один и тот же порт 80
для nginx config
.
В конфигурации Nginx вы задаете расположение только для /api
и /admin
и staticfiles
. Я только вижу, как ты пытаешься GET /
, Ты пытался сделать GET
api
это и admin
вместо этого ?
Комментарии:
1. вы *, спасибо!, я совсем забыл добавить местоположение /, не мог его видеть, пока вы не указали на него.