no-style

Поднимаем статику на Nginx при помощи docker-compose

docker-compose + linuxserver + wireguard
В предыдущем посте мы рассмотрели обратный прокси Nginx Proxy Manager как отличную альтернативу всем этим громоздким веб панелькам. Самое время рассмотреть создания docker контейнера Nginx для статики под HTML, картинки, аудио/видео/архивы и т.д.


Необходимые требования

Чтобы всё получилось нам понадобится:







Подготовка

Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём директорию под хост Nginx

sudo mkdir -p /app/hosts/img.mydomain.com/{data,log}

Сделаем нашего пользователя (не root !) владельцем этой директории

sudo chown -R $USER:$USER /app/hosts/img.mydomain.com






Конфигурация и запуск

Перейдём в директорию, которую мы создавали выше

cd /app/hosts/img.mydomain.com

Создадим фаил docker-compose.yml

nano docker-compose.yml

И заполняем его таким таким содержанием.

Если Вы хотите поднять статику Nginx не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!

После этого стартуем наш контейнер

sudo docker-compose up -d

Уделите внимание параметру ports внутри docker-compose.yml Сначала идёт тот порт который мы выставляем наружу на хостовой машине и после двоеточия порт внутри контейнера.

Во время запуска будет создано 2 папки, а именно log и data. Названия говорят сами за себя.







Посмотрим что у нас там поднялось

Если вы ничего не меняли в фаиле docker-compose.yml то порт будет 39080. Открываем в браузере

http://ip.адрес.вашего.сервера:порт

И видим там вот что

Nginx Fresh Start Error

Ошибка? Не спешим расстраиваться. Контейнер мы подняли, а внутрь ничего не положили - вот он и ругается что нечего показывать!

Сначала поправим права, потому что запустив контейнер от sudo он создал папки с у которых владелец root. Исправляем

sudo chown -R $USER:$USER /app/hosts/img.mydomain.com

А ошибку можно исправить просто создав index.html внутри папки data

echo IT WORKzZz > /app/hosts/img.mydomain.com/data/index.html

Я же предпочитаю в фаиле index.html ставить такую заглушку в виде статичного и адаптивного html фаила который проигрывает видео с youtube когда мы к нему обращаемся. Если вы хотите использовать другое видео - просто замените его на нужный id видео на youtube. В html коде он идёт в ссылке после .../embed/...

Nginx Fresh Start Fix

Эстеты ещё могут загрузить фаил favicon.ico







Лепим контейнер на свой домен/поддомен

Для полного комплекта остаётся только прилепить это всё к домену или поддомену. Самый простой вариант как это сделать был разобран в предыдущем посте Nginx Proxy Manager в Docker контейнере.







Автоматический редирект на страницу 404, если запрошенная страница не существует

Я столкнулся с этой проблемой при обновлении старого сайта - некоторых страниц на сайте уже нет, а пользователи продолжают ходить по старым ссылкам из поисковой выдачи. По большому счёту это всё нужно разруливать 301 редиректом в NPM или в обычном nginx, но на первое время этот вариант может быть полезен. То есть поставить абсолютно на все несуществующие страницы редирект на страницу 404.html

Всё достаточно просто и сводится к 1 действию, просто раскомментировать строку в конфиге NGINX. А для этого понадобится зайти внутрь контейнера

docker exec -it containername /bin/bash


Далее необходимо отредактировать фаил с дефолтным сайтом NGINX. Но есть одна проблема, в данном контейнере по дефолту у нас нету никакого редактора - установим его:

apt update && apt install nano


Теперь отредактируем сам фаил

nano /etc/nginx/conf.d/default.conf


Всё что необходимо сделать это убрать комментарий перед строчкой #error_page просто удалив символ #. Должно получиться вот так:

error_page 404 /404.html;


Вот и всё. А теперь выходим из контейнера

exit

и перезагружаем его

sudo docker restart containername

Теперь со всех несуществующих страниц будет происходить редирект на 404.html



Ну всё, все молодцы кто до сюда дочитал

Комментарии