Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 13.02.2020 15:26:40

выключить\включить сайт

хочу в админке сделать кнопку, которая переведет сайт в режим обслуживания, и на всех страницах будет выводиться надпись сайт обновляется
как реализовать перехват всех запросов и перенаправить на страницу с текстом?
плюс надо фильтровать запросы на админку, чтобы можно было потом выключить этот режим

Не в сети

#2 13.02.2020 15:59:44

Re: выключить\включить сайт

Про maintenance mode ты знаешь?


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 13.02.2020 16:08:28

Re: выключить\включить сайт

этим будет пользоваться человек далекий от консоли
нужно решение через веб

Не в сети

#4 13.02.2020 16:27:27

Re: выключить\включить сайт

Велосипедить плохо.
Ходить по сайту во время обслуживания плохо. Неважно по админке или где ещё.

Я вижу два неплохих варианта, оба таки будут использовать команды up/down.
1. Вызывать их извне, из веб-скрипта, который гнездится в отдельном виртуальном хосте на том же сервере.
2. Прописать нужные IP адреса как исключения для режима обслуживания и строго предупредить "того человека", что сайт трогать во время обслуживания очень нежелательно.

IP для исключения можно взять прямо тот, которым админ пользуется в момент нажатия на красную кнопку.
Вызвать консольную команду из веб-скрипта несложно.
https://www.php.net/manual/en/function.shell-exec.php
или
https://webdevetc.com/programming-trick … controller

Изменено artoodetoo (13.02.2020 16:35:27)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 13.02.2020 17:57:00

Re: выключить\включить сайт

как вариант это использовать команду
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
и указать ип вызывающего
а можно определить в каком состоянии находится сайт ? это где то сохраняется в параметрах сайта?

Не в сети

#6 13.02.2020 22:13:52

Re: выключить\включить сайт

обнаружил неприятный момент
php artisan --version
Laravel Framework version 5.3.31
в композере "laravel/framework": "5.3.*"
а в доке параметр allow ip под версию 6
получается надо обновляться? ничего не сломается?
или как тогда быть?

Изменено ru (13.02.2020 22:21:21)

Не в сети

#7 13.02.2020 22:40:10

Re: выключить\включить сайт

Ради одного этого, ИМХО, не стоит. Но 5.3 это очень старая версия, думаю пора smile


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#8 13.02.2020 22:46:35

Re: выключить\включить сайт

там наверно все сломается
я тут тестовый проект обновил 5.2 на 5.8 и то перестал запускаться

Не в сети

#9 16.02.2020 12:50:34

Re: выключить\включить сайт

Вообще, желательно, чтобы веб-сервер выдавал плашку "обслуживание", а не само приложение. С сервером нет шансов, что какие-то запросы "протекут" (потому что для них middleware не работает или еще что-нибудь подобное). В случае с nginx это делается добавлением набора allow/deny в блок server или location:

allow 1.2.3.4;
allow 5.6.7.8;
deny all;

Но есть и более интересный способ, про который мало знают. В nginx есть опция auth_request - с ней вопрос об аутентификации можно решать в контексте приложения! Когда приходит внешний запрос, nginx опрашивает этот URL и если в ответе код 401 или 403 - пользователю дается "отлуп" (который можно показать в виде красивой кастомной страницы об ошибке путем error_page). В отличии от ручного прописывания allow/deny, здесь не нужно править конфиг сервера, перезапускать его, вообще лезть в консоль, да и гибкость куда большая.

Выглядит это примерно так (подробности в документации):

server {
  ...

  error_page 403 /403.html;

  location / {
    auth_request /auth.php;
    include fastcgi.conf;
  }

  location = /auth.php {
    include fastcgi.conf;
  }
}

Не в сети

#10 16.02.2020 12:54:29

Re: выключить\включить сайт

этим будет пользоваться обычный юзер а не сисадмин
я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up
даже при "выключенном режиме" эта пхп страница будет открываться и можно будет включить основной сайт

Не в сети

#11 16.02.2020 19:57:26

Re: выключить\включить сайт

этим будет пользоваться обычный юзер а не сисадмин

Я поэтому про allow_request и написал. auth.php может проверять файл на наличие, какую-то строку в БД и пр.

я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up

Позволять выполнять shell-команды из PHP - плохая идея с точки зрения безопасности.

Не в сети

Подвал раздела