minor: Улучшены комментарии nginx конфига и исправлен sed паттерн для корректной замены путей
- Уточнены комментарии про архитектуру (медиа, ошибки, sitemap через Django) - Исправлен sed паттерн: было '/home/user/app/oknardia-site' -> '/home/user/path-to-oknardia-app' - Улучшен www редирект для правильной подстановки домена - Убраны дублирующиеся комментарии про требуемую замену
This commit is contained in:
@@ -1,27 +1,20 @@
|
||||
# config/nginx/oknardia-app--external-nginx.conf
|
||||
# ==============================================================================
|
||||
# ЭТАЛОННЫЙ КОНФИГУРАЦИОННЫЙ ФАЙЛ NGINX (Reverse Proxy для Docker)
|
||||
# КОНФИГУРАЦИОННЫЙ ФАЙЛ NGINX (Reverse Proxy для Docker + Production)
|
||||
# ==============================================================================
|
||||
#
|
||||
# ВНИМАНИЕ:
|
||||
# Этот файл является шаблоном. При первом деплое он копируется
|
||||
# в `/home/user/path-to-oknardia-app/config/nginx/oknardia-app--external-nginx.conf`,
|
||||
# а затем (уже на хосте, руками) через силинк в `/etc/nginx/sites-available/` и активируется.
|
||||
# При последующих деплоях `oknardia-app--external-nginx.conf` НЕ ПЕРЕЗАПИСЫВАЕТСЯ,
|
||||
# чтобы не затереть SSL-сертификаты и ручные правки.
|
||||
# ИНФОРМАЦИЯ:
|
||||
# 1. Этот файл используется как шаблон при деплое
|
||||
# 2. При первом деплое пути `/home/user/path-to-oknardia-app` заменяются на реальный путь через sed
|
||||
# 3. Сгенерированный конфиг скопируется в `/etc/nginx/sites-available/oknardia`
|
||||
# 4. Последующие деплои ОБНОВЛЯЮТ этот файл автоматически (sed + копирование)
|
||||
#
|
||||
# Если вы изменили этот файл в репозитории и хотите применить изменения на проде:
|
||||
# вам нужно обновить файл в `/home/user/path-to-oknardia-app/config/nginx/oknardia-app--external-nginx.conf` вручную (diff + copy).
|
||||
#
|
||||
# Так же (рядом) будет создан образец этого файла `nginx_oknardia.conf.example`, который будет обновляться при деплоях
|
||||
# из репозитория, чтобы вы могли видеть, что изменилось и при необходимости перенести эти изменения на прод.
|
||||
#
|
||||
# Предполагаемая структура на сервере:
|
||||
# /home/user/path-to-oknardia-app/
|
||||
# ├── docker-compose.yml
|
||||
# ├── .env
|
||||
# ├── media/ <-- Сюда Nginx смотрит напрямую (Docker volume)
|
||||
# └── ...
|
||||
# АРХИТЕКТУРА:
|
||||
# - Nginx (порты 80/443) <-> Gunicorn контейнер (localhost:8000)
|
||||
# - Медиа файлы отдаются из `/home/user/path-to-oknardia-app/media/` напрямую
|
||||
# - Ошибки 5xx берутся из `media/_error` (копируются контейнером при старте)
|
||||
# - Sitemap.xml отдается через Django/WhiteNoise (в media/_serv_sitemap/)
|
||||
# - Static файлы (/static/) тоже отдаются через Django/WhiteNoise
|
||||
|
||||
# 1. Описываем, где живет наш Django в Docker
|
||||
upstream oknardia-django {
|
||||
@@ -70,9 +63,8 @@ server {
|
||||
|
||||
# --- МЕДИА ФАЙЛЫ (Загруженный контент) ---
|
||||
# Nginx отдает их напрямую с диска хоста, не дергая Docker.
|
||||
# Сюда входит: загруженные картинки, документы, свитмапы, ошибки 5xx
|
||||
# Путь должен совпадать с тем, где лежит volume на хост-машине.
|
||||
# ВАЖНО: Убедитесь, что пользователь nginx (www-data) имеет права на чтение этой папки!
|
||||
# ТРЕБУЕТСЯ ЗАМЕНА ПРИ ДЕПЛОЕ: /home/user/path-to-oknardia-app -> ваш реальный путь
|
||||
location /media/ {
|
||||
alias /home/user/path-to-oknardia-app/media/;
|
||||
expires 30d; # Кешируем картинки на месяц
|
||||
@@ -81,11 +73,9 @@ server {
|
||||
|
||||
# --- СТРАНИЦЫ ОШИБОК (Custom Error Pages) ---
|
||||
# Если Django упал (502) или сработал тайм-аут (504), Nginx должен отдать статический HTML.
|
||||
# Эти файлы должны лежать в папке, доступной Nginx (например, в `media/_error`).
|
||||
# Эти файлы копируются в `media/_error` при старте контейнера Docker.
|
||||
#
|
||||
# ВАЖНО:
|
||||
# 1. Файлы 50x.html (500, 502, 503, 504) копируются в `media/_error` при старте контейнера (см. docker-compose.prod.yml -> command).
|
||||
# 2. error_page директива перехватывает ошибки от апстрима (Gunicorn).
|
||||
# ВАЖНО: error_page директива перехватывает ошибки от апстрима (Gunicorn).
|
||||
error_page 500 /500.html;
|
||||
error_page 502 /502.html;
|
||||
error_page 503 /503.html;
|
||||
@@ -96,8 +86,6 @@ server {
|
||||
location = /503.html { root /home/user/path-to-oknardia-app/media/_error; internal; }
|
||||
location = /504.html { root /home/user/path-to-oknardia-app/media/_error; internal; }
|
||||
|
||||
# 404 (и другие) тоже нужно кастомизировать... обычно Django сам отдает 404.
|
||||
# Но, например, Nginx отдаст 404 при ошике доступа к media-файлам (они храняться на хосте, а не в контейнере)
|
||||
error_page 400 /400.html;
|
||||
error_page 401 /401.html;
|
||||
error_page 403 /403.html;
|
||||
@@ -112,7 +100,6 @@ server {
|
||||
location = /413.html { root /home/user/path-to-oknardia-app/media/_error; internal; }
|
||||
location = /429.html { root /home/user/path-to-oknardia-app/media/_error; internal; }
|
||||
|
||||
# Указываем единую страницу (на реконструкции) для всех прочих ошибок
|
||||
error_page 405 406 407 408 409 410 411 412 414 415 416 417 418 421 422 423 424 425 426 428 431 451 /under_reconstruction.html;
|
||||
location = /under_reconstruction.html { root /home/user/path-to-oknardia-app/media/_error; internal; }
|
||||
|
||||
@@ -141,10 +128,11 @@ server {
|
||||
}
|
||||
}
|
||||
|
||||
# 3. Редирект с www на без-www (SEO best practice)
|
||||
# 3. Редирект с www на основной домен (SEO best practice)
|
||||
server {
|
||||
server_name www.tmp.oknardia.ru;
|
||||
listen 80;
|
||||
return 301 $scheme://oknardia.ru$request_uri; # Всегда редиректим на основной домен
|
||||
listen [::]:80;
|
||||
return 301 $scheme://tmp.oknardia.ru$request_uri;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ services:
|
||||
python manage.py regenerate_seria_prerender &&
|
||||
python manage.py make_rating &&
|
||||
mkdir -p /nginx_configs_host/nginx &&
|
||||
sed \"s|/home/user/app/oknardia-site|$${HOST_PROJECT_PATH}|g\" /home/app/config/nginx/oknardia-app--external-nginx.conf > /nginx_configs_host/nginx/oknardia-app--external-nginx.conf.example &&
|
||||
sed \"s|/home/user/path-to-oknardia-app|$${HOST_PROJECT_PATH}|g\" /home/app/config/nginx/oknardia-app--external-nginx.conf > /nginx_configs_host/nginx/oknardia-app--external-nginx.conf.example &&
|
||||
if [ ! -f /nginx_configs_host/nginx/oknardia-app--external-nginx.conf ]; then
|
||||
cp /nginx_configs_host/nginx/oknardia-app--external-nginx.conf.example /nginx_configs_host/nginx/oknardia-app--external-nginx.conf;
|
||||
echo 'INIT: Created new nginx config with correct paths';
|
||||
|
||||
Reference in New Issue
Block a user