Verification: a143cc29221c9be0

Php artisan serve как остановить

Php artisan serve как остановить

Содержание

Архитектура

codeАрхитектура расположения каталогов программного комплекса подразумевает под собой чёткое разделение двух различных типов данных: изменяемых данных пользователя (настройки, временные файлы, логи т.д.) и неизменяемых данных (модули, программы, служебные файлы).

Если говорить простым языком, то в папке modules никакие файлы никогда не изменяются, не создаются и не удаляются, а в папках domains и userdata напротив, данные постоянно меняются. Такая архитектура создана специально для упрощения синхронизации данных между различными копиями комплекса и экономии места при резервном копировании.

Установка и запуск

Open Server Panel является портативным программным комплексом, однако для удобства пользователей устанавливается через инсталлятор.

Сборку можно разместить на внешнем жёстком диске, это позволит использовать Open Server Panel на любом компьютере, который отвечает системным требованиям. Однако не стоит размещать сборку на USB-флеш накопителе из-за крайне медленной работы флеш-памяти при параллельных запросах на чтение/запись и её быстрого износа.

Желательно установить Open Server Panel на SSD-накопитель, при его наличии. Это позволит значительно повысить скорость работы всех модулей и компонентов программного комплекса.

Внимание!

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

Системные требования

  • Поддерживаемые версии ОС: Windows 7 SP1 x64 / Windows Server 2008 R2 SP1 или новее (32-битные системы не поддерживаются);
  • Минимальные аппаратные требования: 500 МБ свободной RAM и 4 ГБ свободного места на HDD;
  • Требуется наличие Microsoft Visual C++ 2005-2008-2010-2012-2013-2015-2019 Redistributable Package;

Установка

В процессе установки Open Server Panel отметьте галочками пункт по установке Microsoft Visual C++ 2005-2008-2010-2012-2013-2015-2019 Redistributable Package, пункт по установке RuntimePack Lite, пункт по настройке Windows и пункт по оптимизации системы для работы с SSD (при его наличии). Без выполнения этих действий работа Open Server Panel на вашем компьютере не гарантируется.

Установку/переустановку библиотек от Microsoft и применение настроек Windows необходимо выполнять c каждой новой версией Open Server Panel даже в том случае, если вы уже делали это ранее.

Запуск

Для запуска Open Server Panel используйте файл Open Server.exe. После старта программы вы увидите красный флажок в области уведомлений Windows (область возле системных часов). Чтобы включить непосредственно сам веб-сервер и сопутствующие модули нажмите на флажок, далее выполните [Меню → Запустить].

Если сервер не запускается перейдите к разделу Решение проблем данного справочного руководства.

Настройка Windows 10

Перед установкой Open Server Panel в системах семейства Windows 10 необходимо обязательно предварительно снять галочку, показанную на картинке, и перезагрузить систему.

Без выполнения данного условия запуск Open Server Panel в системах семейства Windows 10 будет невозможен. В случае попытки запуска до выполнения данного условия произойдёт порча файлов конфигурации программы, что приведёт к невозможности её дальнейшего использования и запуска.

Установка обновлений

Open Server Panel это достаточно сложный программный комплекс с постоянно совершенствующейся архитектурой. Как таковой процедуры обновления не предусмотрено. При выходе новой версии Open Server Panel необходимо заново выполнить все настройки, скопировать папки ваших сайтов и выполнить перенос баз данных.

Не распаковывайте файлы дистрибутива поверх существующей версии, а так же не пытайтесь скопировать файлы конфигурации и профилей из старой версии программы в новую!

Если есть возможность обновиться простым копированием файлов (довольно редкое явление), то ссылка на патч всегда публикуется в новостях на сайте вместе с аннотацией к новой версии.

Подключение

По умолчанию все дополнительные модули выключены. Перед началом работы с Open Server Panel убедитесь в том, что вы включили нужные вам модули в настройках программы.

Ниже представлены установленные в Open Server Panel начальные настройки (значения по умолчанию) для подключения к различным модулям. Вы всегда можете самостоятельно изменить эти настройки по своему усмотрению.

Подключение к MySQL

  • Адрес: домен вашего сайта*
  • Порт: 3306
  • Пользователь: mysql
  • Пароль: (пусто)

ROOT подключение к MySQL

  • Пользователь: root
  • Пароль: (пусто)

Информация

Кодировка, установленная по умолчанию в настройках MySQL сервера, не действует на пользователя ROOT. Кодировку нужно будет явно указывать в скриптах подключения к БД, потому использовать пользователя ROOT не рекомендуется.

Предупреждение

В целях безопасности доступ с удалённых хостов (%) по умолчанию отключён и возможен только с локальной машины 127.0.0.1 (localhost). Выполните настройку удалённого доступа до того, как вы запустите Open Server на публичном IP (если планируете).

Подключение к PostgreSQL

  • Адрес: домен вашего сайта*
  • Порт: 5432
  • Пользователь: postgres
  • Пароль: postgres

Подключение к MongoDB

  • Адрес: домен вашего сайта*
  • Порт: 27017
  • Пользователь: (пусто)
  • Пароль: (пусто)

Подключение к Memcached

  • Адрес: домен вашего сайта*
  • Порт: 11211

Макс. размер памяти используемой сервером Memcache по умолчанию равен 64 Мб. Данный параметр можно изменить выполнив [Меню → Настройки → Разное].

Подключение к Redis

  • Адрес: домен вашего сайта*
  • Порт: 6379

Подключение к DNS

  • Адрес: домен вашего сайта*
  • Порт: 53

Подключение к FTP

  • Адрес: домен вашего сайта*
  • Порт: 21 (990 для FTPS)
  • Пользователь: ftp
  • Пароль: ftp

Внимание!

Модуль FTP-сервера экспериментальный. Он имеет известные уязвимости и проблемы с быстродействием. Используйте его только в целях локальной разработки. Не активируйте модуль в условиях, когда доступ к серверу открыт во внешнюю сеть!

Домен localhost

Если вы хотите использовать привычный адрес localhost для подключения к MySQL, PostgreSQL, FTP или Memcache серверу, то достаточно не удалять стандартный домен localhost или создать одноимённый алиас.

Автоматизация подключения

При работе с локальными копиями действующих веб-проектов часто возникают трудности с постоянным редактированием файлов конфигурации, в основном это касается настроек подключения к базе данных. Чтобы этого избежать рекомендуется:

  1. Локально создать пользователя базы данных с теми же именем, паролем и привилегиями, что используются на удалённом сервере.
  2. Создать алиас с тем же именем, что используется в качестве хоста базы данных на удалённом сервере.

---
* Например, если ваш скрипт размещен по адресу testserver.loc/mysql.php, то хостом (адресом) для подключения к MySQL, Redis и другим модулям будет домен: testserver.loc

Домены и алиасы

Режимы управления доменами

В Open Server Panel существует три режима управления списком доменов: автопоиск, ручное управление и ручное+автопоиск. По умолчанию используется первый режим автоматического подключения папок из корневой директории указанной в настройках.

Как работает автопоиск

Программа сканирует заданную веб-директорию на наличие папок с доменами, после чего в каждой найденной папке производится поиск подпапок (корневой папки домена) которые указаны в настройках для автосканирования. Если ни одна из предполагаемых корневых подпапок не найдена, то корнем домена становится сама папка с доменом.

Как работает совмещённое управление (ручное + автопоиск)

При использовании совмещенного режима управления доменами программа сначала подключает домены созданные вручную, после чего производится автоматическое сканирование по процедуре описанной выше.

Создание домена в автоматическом режиме

Чтобы создать домен или поддомен откройте [Меню → Папка с сайтами] и создайте папку с именем будущего домена. После создания домена перезапустите сервер.

Создание домена в ручном режиме

Чтобы создать домен или поддомен перейдите в раздел [Меню → Настройки → Домены] и создайте запись вида: домен => папка. В качестве папки домена можно выбрать уже существующую папку на диске или создать её непосредственно в окне выбора каталога. После создания домена сохраните настройки.

Создание кириллического домена

Open Server Panel поддерживает кириллические домены, однако будьте внимательны, папку с доменом нужно называть его реальным именем, а не псевдо названием на кириллице. Для пиво.рф реальным названием (punycode формат) будет xn--b1altb.xn--p1ai и создав такой домен вы получите доступ к http://пиво.рф. Для конвертации доменных имён в punycode формат и обратно используйте [Меню → Дополнительно → IDN конвертер].

Создание поддомена

Процесс создания поддомена аналогичен процедуре создания обычного домена. При создании только поддомена доступность основного домена существующего в сети Интернет не теряется, т.е. вы сможете работать с локальным поддоменом имея при этом доступ к рабочему домену в сети Интернет.

Создание алиаса

Чтобы создать алиас перейдите в раздел [Меню → Настройки → Алиасы] и создайте запись вида: исходный домен => конечный домен. После создания алиаса сохраните настройки.

Обратите внимание - создание алиаса вида *.xxx.xx не имеет смысла в Windows и не означает то, что вам станут доступны любые поддомены вида test.xxx.xx, mail.xxx.xx и т.д. Необходимо создать конкретный алиас или домен чтобы он стал доступен, это особенность операционной системы Windows.

Иконка сайта в меню доменов

При наличии корректного файла favicon.ico в корневой папке домена иконка сайта будет отображаться в меню программы.

Ограниченный режим работы

В некоторых случаях управление доменами и алиасами недоступно (см. Ограниченный режим).

Работа с MySQL

Перед началом работы с MySQL убедитесь в том, что вы включили нужный вам модуль в настройках программы.

Создание пользователя MySQL

  1. Откройте [Меню → Дополнительно → PHPMyAdmin]
  2. Введите имя пользователя root (без пароля)
  3. В PHPMyAdmin откройте раздел [Привилегии]
  4. Нажмите ссылку [Добавить нового пользователя]
  5. Заполните форму и нажмите кнопку [Создать пользователя]

Информация

В том случае, если помимо прочих привилегий для пользователя будет отмечена привилегия SUPER, то кодировка, установленная по умолчанию в настройках MySQL сервера, не будет на него действовать. Кодировку нужно будет указывать в ваших скриптах персонально для каждого подключения к MySQL, потому отмечать привилегию SUPER не рекомендуется.

Информация

Для входа в Adminer используйте логин и пароль пользователя БД. Если ваш пользователь БД не имеет пароля, то для авторизации в Adminer необходимо использовать пароль заданный в плагине авторизации самого Adminer, по умолчанию это admin.

Пароль указывается в файле index.php находящимся в modules\system\html\openserver\adminer

Рекомендуется сменить этот пароль перед началом использования программы.

Создание базы данных MySQL

  1. Откройте [Меню → Дополнительно → PHPMyAdmin]
  2. Введите имя пользователя root (без пароля)
  3. В PHPMyAdmin откройте раздел [Базы данных]
  4. Введите название новой базы данных и выберите её кодировку
  5. Нажмите кнопку [Создать]

Переключение модулей баз данных

Будьте внимательны при смене активного модуля базы данных. Каждый модуль имеет свое отдельное хранилище баз и настроек, они никак не связаны друг с другом, поэтому вы не увидите созданные вами базы данных при переключении на другой модуль.

Предупреждение

Во время установки Open Server Panel выполняется настройка Windows, во время которой IPv4 трафик получает приоритет над IPv6 при разрешении доменных имён. Если не выполнять данную процедуру, то процесс подключения в MySQL серверу может выполняться очень долго (более 1 сек).

Чтобы проверить корректность настройки приоритетов откройте консоль и введите ping localhost. Если в ответе вы получаете адрес ::1 вместо 127.0.0.1, значит приоритеты настроены неверно.

Переменная Path

Для добавления собственных путей в переменную окружения PATH можно использовать файл ./userdata/config/path.txt

Пути необходимо добавлять по одному вписывая каждый с новой строки, например:

C:\Windows
D:\My Programs
%realprogdir%\data\dll
C:\Windows\System32

Информация

По умолчанию файл path.txt не подключается. См. [Меню → Настройки → Сервер].

Использование переменных в качестве подстановок

Переменная Описание переменной
%realprogdir% Реальный путь до папки с Open Server Panel (обратный слеш "\")
%progdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (обратный слеш "\")
%sprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (слеш "/")
%dprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной обратный слеш "\\")
%dsprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной слеш "//")
%realsitedir% Реальный путь до корневой папки доменов (обратный слеш "\")
%sitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (обратный слеш "\")
%ssitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (слеш "/")
%httpport% Порт HTTP сервера
%httpsport% Порт HTTPS сервера
%postgresqlport% Порт PostgreSQL сервера
%mysqlport% Порт MySQL сервера
%mongodbport% Порт MongoDB сервера
%memcacheport% Порт Memcache сервера
%ftpport% Порт FTP сервера
%httpdriver% Название модуля HTTP
%phpdriver% Название модуля PHP
%mysql_driver% Название модуля MySQL/MariaDB
%pg_driver% Название модуля PostgreSQL
%mongo_driver% Название модуля MongoDB
%memcachedriver% Название модуля Memchached
%redisdriver% Название модуля Redis
%dnsdriver% Название модуля DNS
%ip% IP адрес сервера
%disk% Буква диска из генерируемого пути до папки с Open Server Panel с учетом виртуального диска (только буква)
%osdisk% Буква диска из реального пути до папки с Open Server Panel (только буква)
%sysdisk% Системный диск Windows (только буква)

Настройка DNS

Встроенный DNS сервер предназначен для использования в локальных сетях или для отладки веб-приложений. Для детальной настройки доступна общая конфигурация сервера, а так же конфигурация доменов.

Для использования встроенного DNS сервера необходимо выполнить настройку сетевого интерфейса на каждом компьютере ДО запуска самого сервера. Выполнить настройку необходимо как на локальной машине, так и на других компьютерах в локальной сети, которые хотят получить доступ к вашим доменам. Без указания локального DNS сервера в настройках сетевого подключения запуск сервера будет невозможен (если модуль DNS активирован в настройках Open Server Panel).

По умолчанию параметр TTL установлен в значение 60 (секунд), вы можете изменить это значение в файле ./userdata/init.ini однако следует иметь ввиду, что бездумное изменения TTL может спровоцировать кэширование неактуальных записей другими компьютерами в вашей сети. Изменяйте этот параметр только в том случае, если вы действительно понимаете его предназначение.

Предупреждение

Перед началом использования DNS-модуля убедитесь в том, что у вас отсутствуют домены без точки в своём названии. Если таковые имеются, то переименуйте их добавив .virtual или .loc к имени домена.

Внимание!

Если ваш браузер производит разрешение доменных имён через прокси-сервер или использует функцию DNS over HTTPS от стороннего DNS-провайдера (например Google или CloudFlare), то локальные домены, созданные вами в Open Server, не будут доступны в этом браузере.

Рекомендации по настройке

  1. В качестве IP адреса сервера выберите в настройках Open Server Panel IP адрес вашего компьютера в локальной сети или сети Интернет (не выбирайте параметр Все доступные IP).
  2. Откройте свойства нужного сетевого подключения:

    Центр управления сетями → Подключение xxx → Свойства → Протокол Интернета версии 4 → Свойства → Общие → Использовать следующие адреса DNS-серверов.

    Пропишите следующие адреса NS серверов:

    xxx.xxx.xxx.xxx
    8.8.8.8 (или любой другой реальный резервный DNS)

    Вместо xxx.xxx.xxx.xxx впишите IP адрес вашего компьютера в локальной сети или сети Интернет.
     

  3. Повторите процедуру настройки на других компьютерах в локальной сети.
  4. Не выполняйте настройку алиасов из инструкции раздела Внешний доступ данного руководства. Подобная настройка не требуется, поскольку удалённые компьютеры будут напрямую работать с вашим DNS сервером и получат доступ ко всем доменам.
  5. Сохраните настройки и выполните запуск сервера Open Server Panel.

После правильной настройки все компьютеры в вашей локальной сети смогут получить доступ к доменам Open Server Panel.

Совпадение имён локальных и реальных доменов

Если включён DNS-модуль, то при каждом запуске сервера и при каждой его остановке Open Server Panel выполняет очистку DNS-кэша Windows

Таким образом, если имя локального и реального домена совпадают и если ваш браузер не имеет собственного DNS-кэша, то браузер будет получать контент с реального домена пока сервер не запущен и с локального домена когда сервер запущен. Если ваш браузер имеет встроенный DNS-кэш, то вам необходимо установить расширение для возможности его ручной очистки чтобы иметь удобный доступ к двум доменам попеременно.

Так же вы можете просто иметь второй браузер, который настроен на использование стороннего DNS-провайдера (например Google или CloudFlare) и потому он будет видеть только реальный домен независимо от того, запущен локальный сервер или нет.

Планировщик заданий

Использование планировщика заданий (Сron)

Значения времени вводятся в виде цифр, комбинации цифр или *.

Вы можете задать моменты времени, используя запятые как разделители:

Например: 1,2,3
Результат: задание выполняется 3 раза, в 1-ю,2-ю и 3-ю минуты часа.

Вы можете указать диапазон, используя дефис:

Например: 5-7
Результат: задание выполняется 3 раза, в 5-ю,6-ю и 7-ю минуты часа.

Вы можете задать периодичность выполнения используя звездочку (*) и слэш (/):

Например: */2
Результат: задание выполняется каждые 2 минуты.

Вы можете комбинировать способы для создания точного расписания:

Например: 1,5,11-15,30-59/2
Результат: задание выполняется в 1,5, с 11 по 15 и каждые 2 минуты с 30 по 59.

Вышеприведённая схема указания времени актуальная для всех временных периодов (минута, час, число, месяц, день недели). Для запроса URL в планировщике нужно использовать вспомогательную утилиту Wget (см. примеры). В строке команд можно использовать подстановки.

Использование переменных в качестве подстановок

Переменная Описание переменной
%realprogdir% Реальный путь до папки с Open Server Panel (обратный слеш "\")
%progdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (обратный слеш "\")
%sprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (слеш "/")
%dprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной обратный слеш "\\")
%dsprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной слеш "//")
%realsitedir% Реальный путь до корневой папки доменов (обратный слеш "\")
%sitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (обратный слеш "\")
%ssitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (слеш "/")
%httpport% Порт HTTP сервера
%httpsport% Порт HTTPS сервера
%postgresqlport% Порт PostgreSQL сервера
%mysqlport% Порт MySQL сервера
%mongodbport% Порт MongoDB сервера
%memcacheport% Порт Memcache сервера
%ftpport% Порт FTP сервера
%httpdriver% Название модуля HTTP
%phpdriver% Название модуля PHP
%mysql_driver% Название модуля MySQL / MariaDB
%pg_driver% Название модуля PostgreSQL
%mongo_driver% Название модуля MongoDB
%memcachedriver% Название модуля Memchache
%redisdriver% Название модуля Redis
%dnsdriver% Название модуля DNS
%ip% IP адрес сервера
%disk% Буква диска из генерируемого пути до папки с Open Server Panel с учетом виртуального диска (только буква)
%osdisk% Буква диска из реального пути до папки с Open Server Panel (только буква)
%sysdisk% Системный диск Windows (только буква)

Примеры заданий планировщика

Запрос по протоколу HTTP каждые 30 минут:

*/30 * * * *
"%progdir%\modules\wget\bin\wget.exe" -q --no-cache http://xxx.ru/cron.php -O nul

Запрос по протоколу HTTPS каждый час в 10 минут, в 20 минут и в 40 минут:

10,20,40 * * * *
"%progdir%\modules\wget\bin\wget.exe" --secure-protocol=TLSv1_2 --no-check-certificate -q --no-cache https://xxx.ru/cron.php -O nul

Выполнение файла cron.php интерпретатором PHP ежеминутно:

*/1 * * * *
"%progdir%\modules\php\%phpdriver%\php-win.exe" -c "%progdir%\modules\php\%phpdriver%\php.ini" -q -f "%sitedir%\xxx.ru\cron.php"

Информация

Конструкция -O nul в аналогична -O /dev/null в Linux и используется в примере для того, чтобы ответ, полученный wget от сервера, не сохранялся на диске.

Исполняемый файл php-win.exe используется вместо обычной CLI-версии PHP потому, что он ничего не выводит и, соответственно, не открывает консоль (окошко dos не появляется на экране).

Предупреждение

При составлении заданий для планировщика заключайте любые указания путей файловой системы в кавычки. В противном случае задание не сможет выполняться при наличии пробела(ов) в пути к исполняемому файлу или в его аргументах (при указании папок и файлов).

Предопределенные переменные планировщика

Переменная Описание переменной
%hh% Текущий час (00-23)
%mm% Текущая минута (00-59)
%ss% Текущая секунда (00-59)
%MM% Текущий месяц (01-12)
%MMM% Текущий месяц (Янв-Дек)
%DD% Текущий день (01-31)
%WW% Текущий день недели (Пн-Вс)
%WD% Текущий день недели (1-7, 1-понедельник, 7-воскресенье)
%YYYY% Текущий год (4 цифры)
%YY% Текущий год (последние 2 цифры)
%QUOTE% Знак кавычек
%PERCENT% Знак процента

В таблице показаны не все переменные. Полный список смотрите здесь.

При составлении заданий вы можете использовать как переменные для подстановки значений из Open Server Panel, так и предопределённые переменные самого планировщика. Кроме того, в качестве переменных планировщика можно использовать любые переменные среды окружения (environment variables), например %COMSPEC%.

Примеры заданий c использованием переменных

Очистка папки c:\temp\:

%COMSPEC% /c del /S /Q c:\temp\*

Задание будет развёрнуто планировщиком так:

C:\Windows\system32\cmd.exe /c del /S /Q c:\temp\*

А теперь пример создания резервной копии баз данных:

"%realprogdir%\modules\database\%mysql_driver%\bin\mysqldump.exe" -A --add-drop-database -E -i -Q -R --opt --user=root --password=root --result-file="%realprogdir%\%DD%_%MM%_%YYYY%_%hh%_%mm%_dump.sql"

Задание будет развёрнуто планировщиком так:

"C:\OSPanel\modules\database\MariaDB-10.3\bin\mysqldump.exe" -A --add-drop-database -E -i -Q -R --opt --user=root --password=root --result-file="C:\OSPanel\09_01_2020_14_25_dump.sql"

Информация

Следует принимать во внимание тот факт, что выполнение заданий происходит без переключения в рабочую папку той программы или скрипта, которые указаны в задании. Некоторые программы и PHP скрипты могут работать неправильно, если определение корневой папки реализовано в них некорректно.

Меню закладок

Для быстрого доступа к нужным страницам на сайтах и рабочим папкам, для запуска и выполнения любых программ и команд в Open Server Panel существует возможность создавать закладки.

Виды закладок

  • Ссылка
  • Папка
  • Программа (возможен запуск с параметрами)
  • Команда в формате командной строки Windows

Использование переменных в качестве подстановок

Переменная Описание переменной
%realprogdir% Реальный путь до папки с Open Server Panel (обратный слеш "\")
%progdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (обратный слеш "\")
%sprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (слеш "/")
%dprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной обратный слеш "\\")
%dsprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной слеш "//")
%realsitedir% Реальный путь до корневой папки доменов (обратный слеш "\")
%sitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (обратный слеш "\")
%ssitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (слеш "/")
%httpport% Порт HTTP сервера
%httpsport% Порт HTTPS сервера
%postgresqlport% Порт PostgreSQL сервера
%mysqlport% Порт MySQL сервера
%mongodbport% Порт MongoDB сервера
%memcacheport% Порт Memcache сервера
%ftpport% Порт FTP сервера
%httpdriver% Название модуля HTTP
%phpdriver% Название модуля PHP
%mysql_driver% Название модуля MySQL / MariaDB
%pg_driver% Название модуля PostgreSQL
%mongo_driver% Название модуля MongoDB
%memcachedriver% Название модуля Memchache
%redisdriver% Название модуля Redis
%dnsdriver% Название модуля DNS
%ip% IP адрес сервера
%disk% Буква диска из генерируемого пути до папки с Open Server Panel с учетом виртуального диска (только буква)
%osdisk% Буква диска из реального пути до папки с Open Server Panel (только буква)
%sysdisk% Системный диск Windows (только буква)

Предупреждение

При создании закладок на запуск программ с параметрами разделителем пути до программы и параметрами запуска является знак #, иначе закладка будет выполнена через командную строку как обычная команда!

Примеры создания закладки на запуск программы с параметрами:

%realprogdir%\modules\heidisql\heidisql.exe#-h=127.0.0.1 -u=root -p=root -P=%mysqlport%

Меню программ

Добавление портативной программы

В Open Server Panel существует возможность добавить в меню свою портативную программу. Для этого необходимо выполнить следующие действия:

  1. Откройте папку ./progs/ в каталоге с Open Server Panel или создайте такую папку если её не существует;
  2. Создайте в папке ./progs/ подпапку с именем категории программ, например ./progs/Офисные программы, или используйте имя Default (программы из подпапки Default отображаются в корне меню, без категории);
  3. Скопируйте каталог с вашей портативной программой (например CintaNotes) в созданную вами папку ./progs/Офисные программы, в итоге у вас должен получиться такой путь: ./progs/Офисные программы/CintaNotes;
  4. Создайте в папке с портативной программой файл osinit.txt содержащий единственную строку с текстом, которая будет использована в меню Open Server Panel вместо отображения оригинального названия EXE файла программы;
  5. Перезапустите управляющую программу Open Server Panel;

Предупреждение

Имя портативной программы (без расширения) и имя папки, в которой она находится, должны быть идентичны! Например, если главный файл портативной программы называется CintaNotes.exe, то путь к нему должен выглядеть так: ./progs/Офисные программы/CintaNotes/CintaNotes.exe

Добавление категории программ

Чтобы добавить собственную категорию в меню программ следует создать одноимённую папку в директории ./progs/. Программы добавленные в папку Default отображаются в корне меню программ, без категории.

Добавление ярлыка программы

Помимо портативного софта в меню программ можно добавить ярлыки на локально установленные программы. Такой указатель на программу будет отображаться в меню вместе с другими программами и будет работать как самый обычный ярлычок. Чтобы добавить ярлык на локально установленную программу просто скопируйте его в папку ./progs/нужная_вам_категория_программ/ или ./progs/Default/.

Информация

Не пытайтесь cкопировать в папку портативных программ ярлыки на папки, сайты и другие объекты не являющиеся программами. Такие ярлыки не будут отображаться в меню и соответственно не будут работать. Для создания ярлыков к сайтам, папкам и т.д. используйте [Меню → Настройки → Закладки] (см. Меню закладок).

Старт/стоп скрипты

Дополнение сценариев запуска и остановки сервера

В Open Server Panel существует возможность дополнять сценарии запуска и остановки сервера своими .bat файлами (батниками).

Чтобы дополнить какой-либо сценарий необходимо создать файл-шаблон .tpl.bat в папке ./userdata/ с определённым именем (см. список ниже). Вы можете записать в такой файл произвольные последовательности команд, предназначенных для исполнения командным интерпретатором Windows.

Нужно понимать, что файлы с расширением .tpl.bat являются только шаблонами для итоговых .bat файлов. В процессе запуска или остановки сервера файлы-шаблоны будут преобразованы в исполняемые .bat файлы в той же папке с заменой переменных-подстановок и уже эти временные .bat файлы будут отправлены на выполнение.

Перед запуском

Используйте шаблон с именем /userdata/pre_start.tpl.bat для указания команд выполняемых ДО запуска всех модулей.

После запуска

Используйте шаблон с именем /userdata/start.tpl.bat для указания команд выполняемых ПОСЛЕ запуска всех модулей, но до того, как флаг состояния (в области уведомлений Windows) станет зеленым.

Перед остановкой

Используйте шаблон с именем /userdata/stop.tpl.bat для указания команд выполняемых ДО остановки модулей.

После остановки

Используйте шаблон с именем /userdata/post_stop.tpl.bat для указания команд выполняемых ПОСЛЕ остановки модулей, но до того, как флаг состояния (в области уведомлений Windows) станет красным.

Предупреждение

После начала процедуры завершения работы Windows запуск любых новых процессов невозможен, поэтому СТОП-скрипты (stop.bat и post_stop.bat) не выполняются. Если вам требуется обязательное выполнение скриптов остановки, то необходимо выключать Open Server Panel вручную непосредственно перед тем, как вы хотите выключить компьютер.

Внимание!

Каждый созданный вами батник (для любого сценария из перечисленных выше) должен корректно отработать и завершиться, иначе сервер будет ожидать окончания его выполнения бесконечно.

Использование переменных в качестве подстановок

В файлах-шаблонах с расширением .tpl.bat можно использовать подстановки. Доступные варианты подстановки программных переменных:

Переменная Описание переменной
%realprogdir% Реальный путь до папки с Open Server Panel (обратный слеш "\")
%progdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (обратный слеш "\")
%sprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (слеш "/")
%dprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной обратный слеш "\\")
%dsprogdir% Генерируемый путь до папки с Open Server Panel с учетом виртуального диска (двойной слеш "//")
%realsitedir% Реальный путь до корневой папки доменов (обратный слеш "\")
%sitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (обратный слеш "\")
%ssitedir% Генерируемый путь до корневой папки доменов с учетом виртуального диска (слеш "/")
%httpport% Порт HTTP сервера
%httpsport% Порт HTTPS сервера
%postgresqlport% Порт PostgreSQL сервера
%mysqlport% Порт MySQL сервера
%mongodbport% Порт MongoDB сервера
%memcacheport% Порт Memcache сервера
%ftpport% Порт FTP сервера
%httpdriver% Название модуля HTTP
%phpdriver% Название модуля PHP
%mysql_driver% Название модуля MySQL / MariaDB
%pg_driver% Название модуля PostgreSQL
%mongo_driver% Название модуля MongoDB
%memcachedriver% Название модуля Memchache
%redisdriver% Название модуля Redis
%dnsdriver% Название модуля DNS
%ip% IP адрес сервера
%disk% Буква диска из генерируемого пути до папки с Open Server Panel с учетом виртуального диска (только буква)
%osdisk% Буква диска из реального пути до папки с Open Server Panel (только буква)
%sysdisk% Системный диск Windows (только буква)

Кроме написания команд перечисленные выше переменные можно использовать для указания реальных переменных окружения, например:

setx DIR_PHP "%realprogdir%\modules\php\%phpdriver%"

Ограниченный режим

При недоступном на запись HOSTS файле программа переходит в ограниченный режим работы с урезанной функциональностью.

В ограниченном режиме вам будет недоступна следующая функциональность:

  • Использование своих алиасов и доменов (кроме домена localhost);
  • Указание IP адреса сервера (кроме адресов 127.0.0.1 и *);

Таким образом в ограниченном режиме вам будет доступен один из двух IP адресов: 127.0.0.1 или *, и только один домен localhost. Другие созданные вами алиасы и домены не будут обработаны программой.

Работать в ограниченном режиме уместно только при полном отсутствии прав администратора, например в условиях организации. В любом другом случае крайне рекомендуется правильно настроить права доступа к HOST файлу для возможности полноценной работы с разными доменами. Разрешить запись в HOSTS файл для всех пользователей можно выполнив через консоль (запускать от имени Администратора) следующую команду:

attrib -s -r -h -a C:\Windows\system32\drivers\etc\hosts

Если в логах запуска вы видите сообщение о том, что Hosts файл недоступен для записи, то возможно что доступ к этому файлу блокируется антивирусом/файрволом, либо действуют ограничения прав доступа Windows.

Добавьте Open Server Panel, а так же все остальные компоненты, о которых будет спрашивать антивирус/файрвол, в доверенные программы. Отключите защиту HOSTS файла (или системных файлов) в настройках вашего антивируса/файрвола, если такая защита присутствует. Попробуйте вручную удалить файл C:\Windows\System32\Drivers\etc\hosts и заново создать со следующим содержимым:

127.0.0.1 localhost

В случае работы без прав администратора, но с доступным на запись HOSTS файлом, программа работает в нормальном режиме без каких-либо ограничений.

Предупреждение

При включённой службе контроля учётных записей пользователей (UAC) и запуске без прав администратора Open Server Panel не будет иметь доступа к HOSTS файлу и автоматически перейдёт в ограниченный режим работы.

Запуск без внесения записей в HOSTS файл

В Open Server Panel реализована возможность полноценного запуска без внесения записей в HOSTS файл. Эта возможность будет полезна пользователям офисных сетей и терминалов, где доступ к HOSTS файлу имеет только старший администратор. Если опция [Не вносить изменения в HOSTS файл] включена, то запуск сервера происходит без редактирования HOSTS файла будто все домены в нём уже прописаны, т.е. доступ к этому файлу не требуется вовсе.

Следует не забывать обращаться к администратору вашей сети после каждого создания домена, администратор должен внести нужные записи в HOSTS файл, иначе вы не сможете их использовать.

Формат внесения записей в HOSTS файл стандартный - ip пробел домен, например:

192.168.5.10  rhino.acme.com
192.168.5.10  x.acme.com

Отправка почты через SMTP

Яндекс почта

Ниже показаны типичные настройки для отправки почты через SMTP сервер выбранного почтового провайдера.

Mail.ru почта

Ниже показаны типичные настройки для отправки почты через SMTP сервер выбранного почтового провайдера.

Gmail почта

Ниже показаны типичные настройки для отправки почты через SMTP сервер выбранного почтового провайдера.

По умолчанию Gmail не даёт возможности использовать SMTP, поэтому доступ нужно активировать отдельно. Вам необходимо выполнить следующие шаги по активации:

1. Авторизуйтесь в своём аккаунте Gmail
2. В той же вкладке браузера перейдите сюда
3. Активируйте доступ к аккаунту для "непроверенных приложений" (см. картинку ниже)
4. Выполните тестовую отправку письма через ваш скрипт на сервере Open Server Panel
5. Обновите страницу (F5) и снова активируйте доступ к аккаунту для "непроверенных приложений" если он не активировался (пришедшее письмо о попытке доступа к аккаунту можно проигнорировать)

Теперь попробуйте отправить письмо еще раз, на этот раз отправка должна заработать.

Информация

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

Внешний доступ

Работа с внешними сетями

Open Server Panel может работать в локальных сетях и сети Интернет как веб-сервер. Для работы в сети Интернет необходим статический(белый) IP адрес. Чтобы открыть доступ к серверу извне необходимо указать * в качестве IP адреса в настройках Open Server Panel, в этом случае доступ откроется сразу для всех сетей, к которым подключён ваш компьютер. Если вы хотите открыть доступ только для одной конкретной сети (например локальной), то укажите в настройках программы IP адрес выданный вашему компьютеру в этой сети.

Информация

При работе через роутер или другой шлюз может потребоваться их дополнительная настройка. См. документацию к используемому оборудованию, обратитесь к администратору сети.

Доступ извне к локальными доменам

После того, как вы настроите удалённый доступ к своему серверу, все локальные домены станут доступны удалённо. Но как их открыть? Чтобы открыть нужный сайт с удалённой машины потребуется внести в HOSTS файл такого компьютера запись с адресом вашего локального домена, например: 64.55.96.24 supersite (где 64.55.96.24 это адрес вашего компьютера, а supersite это имя локального домена). После внесения такой записи в HOSTS файл на удалённом компьютере домен supersite будет доступен при обычном наборе в строке браузера.

Обратите внимание - при простом наборе IP адреса вашего компьютера http://64.55.96.24/ или при попытке доступа к несуществующему локальному домену будет открываться пустая страница.

Для того, чтобы при наборе IP адреса вашего компьютера открывался определённый локальный сайт, необходимо создать алиас вида ваш_внешний_ip => ваш_локальный_домен. После этих действий указанный вами локальный домен, для которого вы создали алиас, станет доступен через локальную сеть или сеть Интернет по адресу http://ваш_внешний_ip/ (например http://64.55.96.24/). Если ваш компьютер подключен к нескольким сетям и в настройках сервера установлен IP=*, то такой алиас необходимо создать для каждого IP адреса выданного вашему компьютеру в каждой из сетей.

Внимание!

При работе с внешними сетями нет никакой гарантии безопасности вашего компьютера. Сервер часто запускается с правами Администратора, а значит, скрипты, запущенные под его управлением, могут делать на компьютере всё, что угодно. Дыры в безопасности скриптов могут открыть хакерам и вирусам доступ к вашему компьютеру.

Мы не рекомендуем такое использование Open Server Panel! Перед настройкой удалённого доступа к серверу обязательно ознакомьтесь с разделом Защита сервера данного справочного руководства.

Внешнее управление

Open Server Panel может принимать некоторые команды через сеть Интернет, для этого имеется встроенная панель управления которая работает на выделенном порту. Так же программой можно управлять через командную строку.

Управление через Интернет

Чтобы получить доступ к панели управления необходимо набрать адрес http://localhost:1515/ (по умолчанию). Порт, логин и пароль к контрольной панели можно указать непосредственно в настройках Open Server Panel [Меню → Настройки → Разное].

Панель управления доступна на любом IP адресе с которого доступен ваш компьютер, а так же на любом локальном домене из созданных на сервере. Для управления программой через Интернет ваш внешний IP адрес должен быть "белым", т.е. доступным из сети Интернет.

Команды для использования в командной строке

"C:\openserver\Open Server Panel.exe"              # запуск программы
"C:\openserver\Open Server Panel.exe" /start       # запуск сервера
"C:\openserver\Open Server Panel.exe" /restart     # перезапуск сервера
"C:\openserver\Open Server Panel.exe" /stop        # остановка сервера
"C:\openserver\Open Server Panel.exe" /exit        # выход из программы

Защита сервера

Настройка защиты

Cервер становится крайне уязвимым, когда он открыт для доступа из сети Интернет, особенно с настройками установленными по умолчанию. Множество ботов и вирусов постоянно сканируют ip адреса в сети Интернет на предмет открытых портов и, как правило, незащищенный сервер оказывается взломанным уже через несколько часов после появления в сети.

Несколько шагов по защите веб-сервера от несанкционированного доступа:

  1. Отключите FTP сервер [Меню → Настройки → FTP сервер];
  2. Установите собственные пароли для root (и других) пользователей всех модулей СУБД;
  3. Включите защиту от внешнего доступа в настройках программы [Меню → Настройки → Сервер];
  4. Теперь перезапустите саму управляющую программу (не сервер);
  5. Выполните настройку файрвола закрыв на доступ извне все порты кроме тех, которые планируется использовать (например: 80,443,21,990,53);

Предупреждение

Не допускайте использования уязвимых скриптов, некорректной конфигурации модулей, простых паролей.

Встроенная защита от внешнего доступа

Выбор опции [Меню → Настройки → Сервер → Защитить сервер от внешнего доступа] отключит часть опасных функций PHP, доступ к веб-инструментам извне будет заблокирован, а доступ к диску для PHP скриптов будет ограничен корневой папкой доменов. Данная опция снижает производительность php-скриптов в 2-10 раз (зависит от интенсивности работы с файловой системой)!

Работа с Composer

Composer совместим со всеми версиями PHP начиная с 5.3 и в Open Server Panel он доступен во всех совместимых модулях "из коробки".

Установка пакетов Composer

  1. Выполните [Меню → Дополнительно → Консоль];
  2. Перейдите в папку с тем сайтом, куда планируется установка;
  3. Выполните установку любого нужного вам пакета, например:
# Переход в папку с проектом
cd C:\openserver\domains\localhost

# Установка Symfony
composer create-project symfony/framework-standard-edition symfony

# Установка PHPUnit
composer create-project phpunit/phpunit phpunit & echo @php -d output_buffering=0 phpunit\phpunit %*>phpunit.bat

# Установка Laravel
composer create-project laravel/laravel laravel --prefer-dist

# Установка phpDocumentor
composer create-project phpdocumentor/phpdocumentor phpdocumentor

В будущем, чтобы обновить установленный таким образом проект, достаточно перейти в папку с нужным проектом и выполнить команду composer update:

cd C:\openserver\domains\localhost\phpunit & composer update

Работа в консоли

Для запуска встроенной консоли необходимо запустить сервер и выполнить [Меню → Дополнительно → Консоль]. Среда окружения (англ. Environment) формируется в момент запуска сервера и передаётся всем запускаемым модулям. Любые другие программы, будь то консоль или IDE, так же могут получить правильное окружение, достаточно запускать эти программы из меню Open Server Panel. Для этого можно либо сделать закладку, либо добавить ярлык в меню программ (см. разделы Меню закладок и Меню программ).

Необходимо знать, что если вы запускаете консоль или любую другую программу из стандартного меню Пуск или используя ярлык на рабочем столе Windows, а не из меню Open Server Panel, то они не смогут работать с виртуальным окружением сформированным в Open Server Panel.

Встроенную консоль можно запустить даже если сервер выключен, в Full версии выполните [Меню → Программы → Консоль]. Однако при выключенном сервере среда окружения не сформирована и поэтому работать из консоли с PHP и другими модулями или программами (wget, composer, скриптами и т.д.) будет невозможно.

Внимание!

Если вы запустили консоль ДО запуска сервера, то среда окружения НЕ станет доступна в консоли.

Чтобы начать полноценную работу с модулями после запуска сервера нужно закрыть и заново открыть встроенную консоль (саму программу ConEmu, а не только вкладку), поскольку только при запущенном сервере консоль получает правильно сформированное окружение в момент запуска из меню.

Точно так же среда окружения не будет обновлена в консоли если вы переключились на другой модуль PHP или MySQL и перезапустили сервер, но при этом не перезапустили консоль!

Внимание!

При запуске стороннего ПО (консоли, программы, IDE, скрипты и проч.) строго придерживайтесь правила: сначала запустить сервер - потом программу.

Если вы изменили настройки Open Server Panel или конфиги модулей: выключить программу - потом запустиь её заново.

Не пытайтесь запускать софт в обход меню Open Server, т.к. в этом случае рабочее окружение не будет доступно в вашей программе.

Вопросы и ответы

Ничего не запускается?

Не стоит отчаиваться, загляните в общий лог программы и другие логи компонентов [Меню → Просмотр логов]. В подавляющем большинстве случаев там вы найдете причину неудачного старта. В более сложных случаях включите опцию [Запускать сервер в отладочном режиме], это позволит увидеть отладочную информацию при запуске. Так же добавьте Open Server Panel в доверенные программы вашего файрвола или антивируса, если таковой имеется.

Пишет что порт 80, 3306 и т.д. уже занят!

Включите в настройках Open Server Panel опцию [Запускать сервер в агрессивном режиме], в этом режиме все программы занимающие нужные порты будут принудительно закрыты. Добавьте Open Server Panel в доверенные программы вашего антивируса/файрвола/прокси-сервера или отключите слежение за портами 80/443/21/90xx/3306 если оно есть. В отдельных антивирусах/файрволах возможны свои доп. настройки связанные с перехватом подключений программ к сети.

Пишет что нет прав доступа для работы в этой папке!

Вы пытаетесь запустить Open Server Panel из папки, которая принадлежит другому пользователю, или же файлы Open Server Panel были записаны на компьютер другим пользователем. Если Open Server Panel будет запускаться пользователем Pavel (например), то войдите в систему под учётной записью Pavel и скопируйте Open Server Panel в такую папку, которая принадлежит пользователю Pavel (имеются права на запись), после чего запуск сервера для этого пользователя станет возможным. Вместо копирования можно установить особые права доступа к папке с Open Server Panel, обратитесь к администратору вашего компьютера.

Почему кнопки серые и не нажимаются?!

В любой момент времени активны только те кнопки и разделы меню, которые могут выполнить возложенное на них действие. Например: если сервер не запущен, то пункт меню PHPMyAdmin будет неактивен; если сервер запущен, то кнопки очистки логов будут недоступны и т.д.

Я не могу открыть меню когда флаг желтого цвета!

Желтый флажок говорит о том, что происходит выполнение команды (например запуск, остановка или сохранение настроек). Во время выполнения команд меню программы недоступно.

Создал 3000 доменов и теперь сервер не запускается!

Увеличьте кол-во проверок состояния сервера до 20-30 или выше в настройках программы [Меню → Настройки → Разное]. Переключитесь на использование HTTP модуля Apache если вы используете модуль Nginx.

Хочу протестировать сайт с учётом разных скоростей интернета (мобильные устройства к примеру)!

В Open Server Panel существует возможность ограничения скорости передачи данных для симуляции медленной загрузки сайта. Для ограничения скорости воспользуйтесь меню Open Server Panel: [Меню → Настройки → Разное]. Скорость можно ограничить в пределах 1-40 КБайт в секунду, установка значения в 0 или более 40 отменяет ограничение. Скоростной лимит устанавливается на каждый запрос, поэтому, если клиент одновременно откроет 4 картинки на сайте (4 соединения), то каждая из них будет загружаться с заданной скоростью.

Где редактировать настройки модулей?

Для редактирования настроек модулей пользуйтесь меню Open Server Panel: [Меню → Дополнительно → Конфигурация].

Куда сохраняются мои письма?

По умолчанию все письма сохраняются во временную папку userdata/tmp/email/, во время остановки сервера эта папка не очищается. Можно настроить отправку писем через удалённый SMTP сервер: [Меню → Настройки → Почта].

Я нажимаю в меню программы на нужный сайт, но ничего не открывается!

Для работы многих пунктов меню требуется наличие корректно установленного и работающего браузера по умолчанию. Так же вы можете напрямую указать свой браузер в настройках программы: [Меню → Настройки → Меню].

Я создал домен local_site.loc, но он не работает!

Символа подчеркивания не может быть в имени домена, поэтому такой домен не подключается. Разрешенные символы: [a-z0-9.-].

Сервер не стартует с ip 192.168.0.1 и говорит что localhost работает только на ip 127.0.0.1!

Действительно, домен localhost можно использовать только с ip адресом 127.0.0.1, поэтому либо переименуйте этот домен, либо удалите его, если он вам не нужен.

Я хочу работать без виртуального диска!

Выберите в настройках Open Server Panel работу без виртуального диска и скопируйте папку с сервером в такую директорию, путь до которой содержит только латиницу или цифры, в противном случае работа без вирт. диска будет невозможна.

Я не вижу виртуального диска!

Если вы работаете не под учётной записью администратора, но Open Server Panel запущен с правами администратора, то виртуальный диск (если он используется) будет для вас недоступен. Open Server Panel при этом будет работать нормально. Вы можете отключить использование виртуального диска в настройках, при этом учитывайте требования к абсолютному пути описанные в предыдущем ответе.

Сервер запускается, но браузер говорит что домен не найден!

Если в вашем браузере настроена работа через прокси сервер, то локальные сайты будут ему недоступны. Чтобы исправить ситуацию откажитесь от использования прокси в вашем браузере или добавьте локальные домены и IP адрес сервера в список исключений для прокси в настройках обозревателя. В ряде случаев нужно пересоздать файл HOSTS (см. Решение проблем).

Для чего нужна настройка вывода закладок вместо сайтов?

В таком режиме созданные закладки отображаются вместо списка доменов, это будет полезно при создании демо-сборок с установленными скриптами (см. Создание сборок).

Мне трудно пересоздавать закладки, пользователей FTP и т.д, нужно их просто отредактировать!

Не нужно пересоздавать записи заново, просто сделайте двойной клик на интересующей вас записи в таблице после чего эта запись сразу же удалится из списка и будет вынесена обратно в поля редактирования. Не забудьте добавить отредактированную запись обратно в таблицу!

Подключение к базе данных длится более 1 сек!

Отключите использование протокола IPv6 используя инструкцию из раздела Решение проблем данного руководства.

Я скопировал в папку с доменом свой скрипт, после перезапуска сервер не видит файлов и показывает ошибку!

Скорее всего вы скопировали или создали такую подпапку в папке с доменом, имя которой подпадает под условия автоматического поиска корневой папки домена (см. Домены и алиасы).

Сервер постепенно занял всё место на диске!

Постепенное исчезновение свободного места говорит о том, что вы отключили автоочистку логов при запуске сервера. В результате при активном использовании сервера лог-файлы вырастают до огромных размеров и занимают всё свободное место на диске. Очистите лог-записи в окне просмотра логов и включите автоочистку логов при старте в настройках Open Server Panel. Очистите папку .\userdata\tmp от временных файлов.

Как мне создать собственную конфигурацию хоста для домена?

Используйте шаблон конфигурации виртуального хоста в папке с нужным доменом для создания особой конфигурации домена. При создании/изменении файла требуется перезапуск сервера. Шаблон конфигурации для нужного модуля можно найти в папке ./userdata/config/.

Например, если вы хотите создать собственную конфигурацию домена xxx.ru для модуля Apache-2.4.2, то скопируйте файл ./userdata/config/Apache-2.4.3_vhost.conf в папку с нужным доменом, отредактируйте этот файл под свои нужды и перезапустите сервер.

Или другой пример, при использовании модуля Apache+Nginx можно скопировать в папку домена оба файла конфигурации для каждого сервера: Apache-2.2.23+Nginx-1.2.4_vhosta.conf и Apache-2.2.23+Nginx-1.2.4_vhostn.conf.

Обратите внимание - при редактировании конфигурации хоста нельзя удалять или заменять системные переменные %...%, вы можете вносить только новые записи дополняющие конфигурацию.

Как и где редактируются конфиги компонентов?

В Open Server Panel используются файлы-шаблоны конфигурации, которые доступны через общее меню программы. Не пытайтесь редактировать временные файлы конфигов, которые создаются в момент запуска сервера, это не имеет смысла. Шаблоны конфигурации индивидуальны для каждого модуля, т.е. если вы выберите какой-либо из модулей в качестве активного, то будут активированы и шаблоны настроек именно этого модуля. Например: вы сконфигурировали шаблон файла php.ini при активном модуле PHP 5.2, после чего выбрали модуль PHP 5.3 в качестве активного. В этом случае вам необходимо еще раз сконфигурировать шаблон файла php.ini уже для модуля PHP 5.3.

Сами шаблоны настроек для всех модулей и инструментов хранятся в папке ./userdata/config/, их нельзя использовать как реальные конфиги и указывать при запуске модулей, консолей и скриптов. В процессе запуска шаблоны конфигурации проходят через парсер, который заменяет все переменные-подстановки на реальные данные и сохраняет уже готовые файлы конфигурации в папку ./userdata/temp/config/.

Как указать особые настройки подключения к SMTP серверу для выбранного домена?

В Open Server Panel существует возможность отправки почты через сторонний SMTP сервер, при этом все домены используют те параметры подключения, которые были указаны пользователем в окне настроек Open Server Panel. Для того чтобы определённый домен мог использовать собственные настройки подключения к SMTP серверу нужно указать их в шаблоне конфигурации этого хоста. Откройте шаблон конфигурации виртуального хоста (как его создать описано в предыдущем ответе) в папке с нужным доменом и добавьте в описание хоста следующее содержимое (одной строкой):

php_admin_value sendmail_path "%mailway% -t --smtp-ssl=none --smtp-server=smtp.xxx.xx --smtp-port=xx --smtp-from=xxx@xxx.xx --smtp-user=xxx@xxx.xx --smtp-pass=xxxxxx --pop3-server=pop3.xxx.xx --pop3-user=xxx@xxx.xx --pop3-pass=xxxxxx"

Например:


  %limit%
  DocumentRoot "%hostdir%"
  ...
  php_admin_value sendmail_path "%mailway% -t --smtp-ssl=none --smtp-server=smtp.xxx.xx --smtp-port=xx --smtp-from=xxx@xxx.xx --smtp-user=xxx@xxx.xx --smtp-pass=xxxxxx --pop3-server=pop3.xxx.xx --pop3-user=xxx@xxx.xx --pop3-pass=xxxxxx"
  ...

Последнюю часть строки --pop3-server=pop3.xxx.xx --pop3-user=xxx@xxx.xx --pop3-pass=xxxxxx добавляйте только в том случае, если требуется авторизация POP3 перед SMTP. Возможные значения для параметра --smtp-ssl= это none,auto,ssl или tls.

Необходимо помнить, что при указании собственных настроек подключения к SMTP серверу отправка почты для выбранного домена будет работать не зависимо от основных настроек Open Server Panel. Так же обратите внимание на то, что все данные SMTP сервера включая логин и пароль будут доступны в php скриптах и видны в информации phpinfo(), поэтому в целях безопасности не рекомендуется пользоваться описанной возможностью указания настроек отправки почты в конфиге хоста.

Решение проблем

Ниже представлен порядок действий необходимых для решения проблем с запуском сервера. После выполнения каждого действия необходимо повторить пробный запуск сервера, а в случае сбоя запуска можно переходить к выполнению следующего пункта.

  1. Запустите установщик Open Server Panel и не выбирая никакие компоненты к установке перейдите к окну выбора доп. задач и выполните установку DLL библиотек, настройку системы и прав доступа к файлам.
  2. Убедитесь что IP адрес, заданный в настройках, существует (кроме [*]). Так же убедитесь что все другие настройки программы корректны.
  3. Добавьте Open Server Panel в доверенные программы вашего файрвола/антивируса или настройте их должным образом, если таковые имеются.
  4. Запустите [Меню → Просмотр логов], попробуйте найти причину проблемы и устранить её (если это возможно).
  5. Включите в настройках Open Server Panel опцию [Запускать сервер в отладочном режиме] и попробуйте найти причину проблемы и устранить её (если это возможно).
  6. Выполните через консоль (запускать от имени Администратора) следующую команду: attrib -s -r -h -a C:\Windows\system32\drivers\etc\hosts
  7. Активируйте службу DNS если она отключена и запустите её, отключите все службы в имени которых присутствует IIS.
  8. Отключите глобальные прокси и проксификаторы если они установлены на вашем компьютере.

Информация

Очень распространённая проблема это занятый порт 80, занимает его обычно программа Skype. Для устранения проблемы перейдите в [Настройки Skype → Дополнительно → Соединение] и снимите галочку с пункта [Использовать порты 80 и 443 в качестве альтернативных].

Контроль учётных записей пользователей (UAC)

При включённой службе контроля учётных записей пользователей (UAC) и запуске без прав администратора Open Server Panel не будет иметь доступа к HOSTS файлу и автоматически перейдёт в ограниченный режим работы. Как правило, об ограниченном режиме сигнализирует наличие только одного домена localhost в меню программы, в то время как ранее были созданы и другие домены. Чтобы исправить ситуацию включите опцию [Требовать учётную запись Администратора] в настройках Open Server Panel и перезапустите программу, либо отключите контроль учётный записей (UAC).

Если у вас отсутствует возможность отключения UAC или запуска программы с правами администратора, то существует несколько вариантов решения данной проблемы:

  1. Использование встроенного DNS сервера (настройка согласно Руководства);
  2. Активация опции [Не вносить изменения в HOSTS файл] + ручное редактирование этого файла;
  3. Установить разрешающие права записи в HOSTS файл для всех пользователей Windows;
  4. Отказ от возможности управления доменами и работа с единственным доменом localhost;

Введение

Laravel Octane повышает производительность вашего приложения, обслуживая с использованием мощных серверов приложений, включая Swoole и RoadRunner. Octane загружает ваше приложение один раз, сохраняет его в памяти, а затем отправляет ему запросы на "сверхзвуковой скорости".

Установка

Octane можно установить через диспетчер пакетов Composer:

composer require laravel/octane

После установки Octane вы можете выполнить Artisan-команду octane: install, которая установит файл конфигурации Octane в ваше приложение:

php artisan octane:install

Требования к серверу

Laravel Octane требует PHP 8.0+.

RoadRunner

RoadRunner работает на двоичном файле RoadRunner, который создается с использованием Go. При первом запуске сервера Octane на базе RoadRunner Octane предложит загрузить и установить для вас двоичный файл RoadRunner.

RoadRunner через Laravel Sail

Если вы планируете разрабатывать свое приложение с использованием Laravel Sail, вам следует выполнить следующие команды для установки Octane и RoadRunner:

./vendor/bin/sail up

./vendor/bin/sail composer require laravel/octane spiral/roadrunner

Затем вы должны запустить оболочку Sail и использовать исполняемый файл rr для получения последней сборки двоичного файла RoadRunner на основе Linux:

./vendor/bin/sail shell


./vendor/bin/rr get-binary

После установки двоичного файла RoadRunner вы можете выйти из сеанса оболочки Sail. Теперь вам нужно настроить файл supervisor.conf, используемый Sail, чтобы ваше приложение работало. Для начала выполните Artisan-команду sail:publish:

./vendor/bin/sail artisan sail:publish

Затем обновите директиву command в файле docker/supervisord.conf вашего приложения, чтобы Sail обслуживал приложение, используя Octane вместо сервера разработки PHP:

command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port=8000

Наконец, убедитесь, что двоичный файл rr исполняется, и создайте свои образы Sail:

chmod +x ./rr

./vendor/bin/sail build --no-cache

Swoole

Если вы планируете использовать сервер приложений Swoole для обслуживания приложения Laravel Octane, вы должны установить расширение Swoole PHP. Обычно это можно сделать через PECL:

pecl install swoole

Swoole через Laravel Sail

Перед обслуживанием приложения Octane через Sail убедитесь, что у вас установлена последняя версия Laravel Sail, и выполните ./vendor/bin/sail build --no-cache в корневом каталоге вашего приложения.

В качестве альтернативы вы можете разработать приложение Octane на основе Swoole, используя Laravel Sail, официальную среду разработки на основе Docker для Laravel. Laravel Sail по умолчанию включает расширение Swoole. Однако вам все равно нужно будет настроить файл supervisor.conf, используемый Sail, чтобы ваше приложение работало. Для начала выполните Artisan-команду sail:publish:

./vendor/bin/sail artisan sail:publish

Затем обновите директиву command в файле docker/supervisord.conf вашего приложения, чтобы Sail обслуживал ваше приложение, используя Octane вместо сервера разработки PHP:

command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000

Наконец, создайте свои образы Sail:

./vendor/bin/sail build --no-cache

Запуск приложения

Сервер Octane можно запустить с помощью Artisan-команды octane:start. По умолчанию эта команда будет использовать сервер, указанный в параметре конфигурации server в файле конфигурации octane вашего приложения:

php artisan octane:start

По умолчанию Octane запускает сервер на порту 8000, поэтому вы можете получить доступ к своему приложению в веб-браузере через http://localhost:8000.

Запуск приложения с HTTPS

По умолчанию приложения, работающие через Octane, генерируют ссылки с префиксом http://. Переменная окружения OCTANE_HTTPS, используемая в файле конфигурации приложения config/octane.php, имеет значение true при обслуживании приложения через HTTPS. Если значение конфигурации установлено в значение true, Octane укажет Laravel добавлять префикс https:// ко всем сгенерированным ссылкам:

'https' => env('OCTANE_HTTPS', false),

Запуск приложения с Nginx

Если вы не совсем готовы управлять конфигурацией своего сервера или вам неудобно настраивать все различные службы, необходимые для запуска надежного приложения Laravel Octane, ознакомьтесь с Laravel Forge.

В производственных средах вы должны обслуживать приложение Octane на традиционном веб-сервере, таком как Nginx или Apache. Это позволит веб-серверу обслуживать ваши статические ресурсы, такие как изображения и таблицы стилей, а также управлять прекращением действия вашего сертификата SSL.

В приведенном ниже примере конфигурации, Nginx будет обслуживать статические ресурсы сайта и запросы прокси к серверу Octane, который работает на порту 8000:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    listen [::]:80;
    server_name domain.com;
    server_tokens off;
    root /home/forge/domain.com/public;

    index index.php;

    charset utf-8;

    location /index.php {
        try_files /not_exists @octane;
    }

    location / {
        try_files $uri $uri/ @octane;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/domain.com-error.log error;

    error_page 404 /index.php;

    location @octane {
        set $suffix "";

        if ($uri = /index.php) {
            set $suffix ?$query_string;
        }

        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        proxy_pass http://127.0.0.1:8000$suffix;
    }
}

Наблюдение за изменениями файлов

Поскольку ваше приложение загружается в память один раз при запуске сервера Octane, любые изменения в файлах вашего приложения не будут отражены при обновлении браузера. Например, определения маршрутов, добавленные в ваш файл routes/web.php, не будут отображаться до перезапуска сервера. Для удобства вы можете использовать флаг --watch, чтобы дать Octane команду автоматически перезапускать сервер при любых изменениях файла в вашем приложении:

php artisan octane:start --watch

Перед использованием этой функции вы должны убедиться, что Node установлен в вашей локальной среде разработки. Кроме того, вы должны установить библиотеку просмотра файлов Chokidar в свой project:library:

npm install --save-dev chokidar

Вы можете настроить каталоги и файлы, за которыми следует наблюдать, используя параметр конфигурации watch в файле конфигурации вашего приложения config/octane.php.

Указание количества Worker

По умолчанию Octane запускает обработчика запросов приложений для каждого ядра ЦП (Центрального Процессора), предоставленного вашим компьютером. Затем эти воркеры (workers) будут использоваться для обслуживания входящих HTTP-запросов, когда они входят в ваше приложение. Вы можете вручную указать, сколько воркеров вы хотите запустить, используя опцию --workers при вызове команды octane:start:

php artisan octane:start --workers=4

Если вы используете сервер приложений Swoole, вы также можете указать, сколько "task workers" вы хотите запустить:

php artisan octane:start --workers=4 --task-workers=6

Указание максимального количества запросов

Чтобы предотвратить случайные утечки памяти, Octane может корректно перезапустить воркер (worker) после обработки заданного количества запросов. Чтобы указать Octane об этом, вы можете использовать параметр --max-requests:

php artisan octane:start --max-requests=250

Перезагрузка Workers

Вы можете корректно перезапустить рабочие приложения сервера Octane, используя команду octane:reload. Как правило, это следует делать после развертывания, чтобы вновь развернутый код загружался в память и использовался для обслуживания последующих запросов:

php artisan octane:reload

Остановка сервера

Вы можете остановить сервер Octane, используя Artisan-команду octane: stop:

php artisan octane:stop

Проверка статуса сервера Octane

Вы можете проверить текущий статус сервера Octane, используя Artisan-команду octane: status:

php artisan octane:status

Внедрение зависимости и Octane

Поскольку Octane загружает ваше приложение один раз и сохраняет его в памяти при обслуживании запросов, есть несколько предостережений, которые следует учитывать при создании приложения. Например, методы register и boot поставщиков услуг вашего приложения будут выполняться только один раз при первоначальной загрузке обработчика запросов. При последующих запросах тот же экземпляр приложения будет использоваться повторно.

В свете этого следует проявлять особую осторожность при внедрении контейнера службы приложения или запроса в конструктор любого объекта. Таким образом, этот объект может иметь устаревшую версию контейнера или запроса при последующих запросах.

Octane будет автоматически обрабатывать сброс любого состояния между запросами. Однако Octane не всегда знает, как сбросить глобальное состояние, созданное вашим приложением. Таким образом, вы должны знать, как создать свое приложение, удобное для Octane. Ниже мы обсудим наиболее распространенные ситуации, которые могут вызвать проблемы при использовании Octane.

Контейнер для внедрений

В общем случае, следует избегать внедрения контейнера службы приложения или экземпляра HTTP-запроса в конструкторы других объектов. Например, следующая привязка внедряет весь контейнер службы приложения в объект, связанный как синглтон (singleton):

use App\Service;


public function register()
{
    $this->app->singleton(Service::class, function ($app) {
        return new Service($app);
    });
}

В этом примере, если экземпляр Service предоставляется во время процесса загрузки приложения, контейнер будет внедрен в службу, и этот же контейнер будет удерживаться экземпляром Service при последующих запросах. Это может не быть проблемой для вашего конкретного приложения; однако это может привести к тому, что в контейнере неожиданно будут отсутствовать привязки, которые были добавлены позже в цикле загрузки или по последующему запросу.

В качестве обходного решения вы можете либо отказаться от регистрации экземпляра как синглтона, либо добавить в инициализацию экземпляра замыкание (closure), которое всегда предоставляет текущий экземпляр своего контейнера:

use App\Service;
use Illuminate\Container\Container;

$this->app->bind(Service::class, function ($app) {
    return new Service($app);
});

$this->app->singleton(Service::class, function () {
    return new Service(fn () => Container::getInstance());
});

Глобальный помощник app и метод Container::getInstance() всегда будут возвращать последнюю версию контейнера приложения.

Запрос на внедрение

В общем случае, следует избегать внедрения контейнера службы приложения или экземпляра HTTP-запроса в конструкторы других объектов. Например, следующая привязка внедряет весь экземпляр запроса в объект, который привязан как синглтон (singleton):

use App\Service;


public function register()
{
    $this->app->singleton(Service::class, function ($app) {
        return new Service($app['request']);
    });
}

В этом примере, если экземпляр Service предоставляется во время процесса загрузки приложения, HTTP-запрос будет внедрен в службу, и тот же самый запрос будет удерживаться экземпляром Service при последующих запросах. Следовательно, все заголовки, входные данные и данные строки запроса будут неверными, как и все другие данные запроса.

В качестве обходного решения вы можете либо отказаться от регистрации экземпляра как синглтона, либо добавить в инициализацию экземпляра замыкание (closure), которое всегда предоставляет текущий экземпляр запроса. Или наиболее рекомендуемый подход — просто передать конкретную информацию запроса, необходимую вашему объекту, одному из методов объекта во время выполнения:

use App\Service;

$this->app->bind(Service::class, function ($app) {
    return new Service($app['request']);
});

$this->app->singleton(Service::class, function ($app) {
    return new Service(fn () => $app['request']);
});



$service->method($request->input('name'));

Глобальный помощник request всегда будет возвращать запрос, который приложение в настоящее время обрабатывает, и поэтому его можно безопасно использовать в вашем приложении.

Допускается вводить подсказку типа Illuminate\Http\Request по методам вашего контроллера и замыканиям маршрутов.

Настройка репозитория внедрения

В общем случае, следует избегать внедрения экземпляра репозитория конфигурации в конструкторы других объектов. Например, следующая привязка вводит репозиторий конфигурации в объект, связанный как синглтон:

use App\Service;


public function register()
{
    $this->app->singleton(Service::class, function ($app) {
        return new Service($app->make('config'));
    });
}

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

В качестве обходного решения вы можете либо отказаться от регистрации экземпляра как синглтона, либо добавить в инициализацию экземпляра замыкание (closure):

use App\Service;
use Illuminate\Container\Container;

$this->app->bind(Service::class, function ($app) {
    return new Service($app->make('config'));
});

$this->app->singleton(Service::class, function () {
    return new Service(fn () => Container::getInstance()->make('config'));
});

Глобальный config всегда будет возвращать последнюю версию репозитория конфигурации и, следовательно, безопасен для использования в вашем приложении.

Управление утечкой памяти

Помните, что Octane сохраняет ваше приложение в памяти между запросами; поэтому добавление данных в статически поддерживаемый массив приведет к утечке памяти. Например, следующий контроллер имеет утечку памяти, поскольку каждый запрос к приложению будет продолжать добавлять данные в статический массив $data:

use App\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Str;


public function index(Request $request)
{
    Service::$data[] = Str::random(10);

    
}

При создании приложения следует проявлять особую осторожность, чтобы избежать подобных утечек памяти. Рекомендуется контролировать использование памяти вашим приложением во время разработки, чтобы убедиться, что вы не вносите новые утечки памяти в ваше приложение.

Параллельные задачи

Для этой функции требуется Swoole.

При использовании Swoole вы можете выполнять операции одновременно с помощью легких фоновых задач. Вы можете сделать это, используя метод Octane concurrently. Вы можете комбинировать этот метод с деструктуризацией массива PHP для получения результатов каждой операции:

use App\User;
use App\Server;
use Laravel\Octane\Facades\Octane;

[$users, $servers] = Octane::concurrently([
    fn () => User::all(),
    fn () => Server::all(),
]);

Параллельные задачи, обрабатываемые Octane, используют "task workers" Swoole и выполняются в рамках совершенно другого процесса, чем входящий запрос. Количество воркеров (workers), доступных для обработки параллельных задач, определяется директивой --task-worker в команде octane:start:

php artisan octane:start --workers=4 --task-workers=6

Ticks & Intervals

Для этой функции требуется Swoole.

При использовании Swoole вы можете зарегистрировать операции "tick", которые будут выполняться каждые заданное количество секунд. Вы можете зарегистрировать обратные вызовы "tick" с помощью метода tick. Первым аргументом, предоставленным методу, должна быть строка, представляющая имя операции. Второй аргумент должен быть вызываемой функцией, которая будет вызываться через указанный интервал.

В этом примере мы зарегистрируем замыкание, которое будет вызываться каждые 10 секунд. Обычно метод tick должен вызываться внутри метода boot одного из поставщиков услуг вашего приложения:

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
        ->seconds(10);

Используя метод immediate, вы можете указать Octane немедленно вызывать обратный вызов тика при первоначальной загрузке сервера Octane и каждые N секунд после этого:

Octane::tick('simple-ticker', fn () => ray('Ticking...'))
        ->seconds(10)
        ->immediate();

Кеш Octane

Для этой функции требуется Swoole.

При использовании Swoole вы можете использовать кэш-драйвер Octane, который обеспечивает скорость чтения и записи до 2 миллионов операций в секунду. Таким образом, этот драйвер кэширования является отличным выбором для приложений, которым требуется экстремальная скорость чтения / записи на уровне кэширования.

Этот драйвер кеширования работает на Swoole tables. Все данные, хранящиеся в кеше, доступны всем воркерам (workers) на сервере. Однако кэшированные данные будут сброшены при перезапуске сервера:

Cache::store('octane')->put('framework', 'Laravel', 30);
Максимальное количество записей, разрешенных в кэше Octane, может быть определено в файле конфигурации вашего приложения octane.

Интервалы кеширования

В дополнение к типичным методам, предоставляемым системой кеширования Laravel, драйвер кеширования Octane поддерживает кеширование на основе интервалов. Эти кэши автоматически обновляются с заданным интервалом и должны быть зарегистрированы в методе boot одного из поставщиков услуг вашего приложения. Например, следующий кеш будет обновляться каждые пять секунд:

use Illuminate\Support\Str;

Cache::store('octane')->interval('random', function () {
    return Str::random(10);
}, seconds: 5);

Предварительные требования

Для работы с этим руководством сделайте следующее:

  1. установите Git;
  2. PHP 5.6.4 или более поздней версии;
  3. Composer;
  4. Включите следующие расширения PHP, необходимые для Laravel: OpenSSL, PDO-MySQL, Mbstring, Tokenizer и XML.
  5. MySQL (этот компонент потребуется запустить).

Подготовка локальной базы данных MySQL

На этом шаге вы создадите базу данных на локальном сервере MySQL для использования в этом руководстве.

Подключение к локальному серверу MySQL

В окне терминала подключитесь к локальному серверу MySQL. Используйте это окно терминала для выполнения всех команд в рамках этого руководства.

mysql -u root -p

Если появится предложение ввести пароль, введите пароль для учетной записи root. Если вы не помните пароль учетной записи привилегированного пользователя, ознакомьтесь с разделом MySQL: How to Reset the Root Password (MySQL: как сбросить пароль привилегированного пользователя).

Если команда выполнена успешно, значит, сервер MySQL работает. В противном случае обеспечьте запуск локального сервера MySQL, выполнив соответствующие действия после установки MySQL.

Локальное создание базы данных

В командной строке mysql создайте базу данных.

CREATE DATABASE sampledb;

Завершите подключение к серверу, введя команду quit.

quit

Локальное создание приложения PHP

На этом шаге вы создадите пример приложения Laravel, настроите его подключение к базе данных и запустите это приложение в локальной среде.

Клонирования репозитория

В окне терминала перейдите к пустому каталогу, куда можно клонировать пример приложения. Выполните команду ниже, чтобы клонировать репозиторий с примером.

git clone https://github.com/Azure-Samples/laravel-tasks

С помощью команды cd перейдите в клонированный каталог. Установите необходимые пакеты.

cd laravel-tasks
composer install

Настройка подключения к MySQL

В корне репозитория создайте файл .env. Скопируйте в файл .env приведенные ниже переменные. Замените заполнитель паролем привилегированного пользователя MySQL.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=

Сведения о том, как Laravel использует файл .env, см. в разделе Environment Configuration (Конфигурация среды).

Локальный запуск примера

Выполните перенос базы данных Laravel, чтобы создать таблицы, необходимые для приложения. Чтобы узнать, какие таблицы создаются при переносе, просмотрите каталог database/migrations в этом репозитории Git.

php artisan migrate

Создайте ключ приложения Laravel.

php artisan key:generate

Запустите приложение.

php artisan serve

Откройте браузер и перейдите по адресу http://localhost:8000. Добавьте несколько задач на странице.

Приложение PHP успешно подключается к базе данных MySQL

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Создание гибкого сервера MySQL (предварительная версия).

На этом шаге вы создадите базу данных MySQL в режиме развертывания База данных Azure для MySQL (Гибкий сервер), который предоставляется в общедоступной предварительной версии. Позже вы настроите приложение PHP для подключения к этой базе данных. Запустите Azure Cloud Shell и создайте сервер, выполнив команду az flexible-server create.

az mysql flexible-server create  --resource-group myResourceGroup --public-access 

Важно!

  • Запишите значения имени сервера и строки подключения, чтобы применить их на следующем шаге для подключения к Laravel и запуска переноса данных.
  • Для аргумента IP-Address укажите IP-адрес клиентского компьютера. Созданный сервер сразу блокируется, и для локального управления этим сервером необходимо разрешить доступ клиентскому компьютеру.

Настройка брандмауэра сервера для подключения веб-приложения к серверу

В Cloud Shell создайте правило брандмауэра для сервера MySQL, чтобы разрешить подключения клиентов, выполнив команду az mysql server firewall-rule create. Если для начального и конечного IP-адресов задано значение 0.0.0.0, брандмауэр открывается только для тех служб Azure, которые не используют статические IP-адреса для подключения к серверу.

az mysql flexible-server firewall-rule create --name allanyAzureIPs --server  --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

Локальное подключение к серверу рабочей базы данных MySQL

В окне терминала на локальном компьютере подключитесь к серверу MySQL в Azure. Используйте значение, указанное ранее для и . При появлении запроса на ввод пароля используйте пароль, указанный во время создания базы данных в Azure.

mysql -u  -h .mysql.database.azure.com -P 3306 -p

Создание рабочей базы данных

В командной строке mysql создайте базу данных.

CREATE DATABASE sampledb;

Создание пользователя с разрешениями

Создайте пользователя базы данных с именем phpappuser и предоставьте ему все привилегии в базе данных sampledb. Для простоты в этом руководстве используется пароль MySQLAzure2020.

CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2020';
GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';

Завершите подключение к серверу, введя команду quit.

quit

Подключение приложения к гибкому серверу MySQL

На этом шаге вы подключите приложение PHP к базе данных MySQL, созданной в Базе данных Azure для MySQL.

Настройка подключения к базе данных

В корневой папке репозитория создайте файл .env.production и скопируйте в него следующие переменные. Замените заполнитель в значениях DB_HOST и DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Сохраните изменения.

Совет

Чтобы защитить сведения о подключении к MySQL, этот файл извлекается из репозитория Git (см. файл .gitignore в корне репозитория). Позже вы узнаете, как настроить переменные среды в службе приложений для подключения к базе данных в Базе данных Azure для MySQL. Благодаря этим переменным вам не нужен файл .env в службе приложений.

Настройка TLS/SSL-сертификата

По умолчанию гибкий сервер MySQL требует, чтобы клиенты использовали подключения по протоколу TLS. Чтобы подключиться к базе данных MySQL в Azure, вам потребуется сертификат с расширением PEM, предоставленный службой "База данных Azure для MySQL (Гибкий сервер)". Скачайте этот сертификат и поместите его в папку SSL в локальной копии репозитория с примером приложения.

Откройте файл config/database.php и добавьте в connections.mysql параметры sslmode и options, как показано в следующем коде.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/DigiCertGlobalRootCA.crt.pem',
    ] : []
],

Локальное тестирование приложения

Выполните перенос базы данных Laravel с помощью файла .env.production, указав его как файл среды, чтобы создать таблицы в базе данных MySQL, размещенной в Базе данных Azure для MySQL. Помните, что файл .env.production содержит сведения о подключении к базе данных MySQL в Azure.

php artisan migrate --env=production --force

Файл .env.production еще не содержит действительный ключ приложения. Создайте для него новый ключ в окне терминала.

php artisan key:generate --env=production --force

Запустите пример приложения, указав файл .env.production как файл среды.

php artisan serve --env=production

Перейдите на страницу http://localhost:8000. Если страница загрузилась без ошибок, значит, приложение PHP подключается к базе данных MySQL в Azure.

Добавьте несколько задач на странице.

Подключение приложения PHP к Базе данных Azure для MySQL

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Фиксация изменений

Чтобы зафиксировать изменения, выполните следующие команды Git:

git add .
git commit -m "database.php updates"

Ваше приложение готово к развертыванию.

Развертывание в Azure

На этом шаге вы развернете приложение PHP, подключенное к базе данных MySQL, в службе приложений Azure.

Настойка пользователя развертывания

Для развертывания в веб-приложение Azure из FTP и локального репозитория Git можно использовать пользователя развертывания. Настроив один раз пользователя развертывания, вы сможете использовать его для всех последующих развертываний в Azure. Имя пользователя и пароль учетной записи развертывания отличаются от учетных данных подписки Azure.

Чтобы настроить пользователя развертывания, выполните в Azure Cloud Shell команду az webapp deployment user set. Вместо и укажите имя пользователя и пароль для вашего развертывания.

Имя пользователя должно быть уникальным в Azure. Кроме того, чтобы отправка в локальный репозиторий Git работала, имя пользователя не должно содержать символ @. Пароль должен содержать не менее восьми символов и включать два из трех следующих элементов: буквы, цифры и символы.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku F1 --is-linux

В выходных данных JSON пароль отображается как NULL. Если вы видите сообщение "Conflict. Сведения. Ошибка 409", измените имя пользователя. Если вы видите сообщение об ошибке "Bad Request. Сведения. Ошибка 400", используйте более надежный пароль. Запишите имя пользователя и пароль и используйте их для развертывания веб-приложений.

Создание плана службы приложений

В Cloud Shell создайте план службы приложений в группе ресурсов, выполнив команду az appservice plan create. В следующем примере создается план Службы приложений с именем myAppServicePlan в ценовой категории "Бесплатный" (--sku F1) в контейнере Linux (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku F1 --is-linux

Создание веб-приложения

Создайте веб-приложение в плане Службы приложений myAppServicePlan.

В Cloud Shell для этого можно использовать команду az webapp create. В следующем примере замените глобальным уникальным именем приложения (допустимые символы: a-z, 0-9 и -). Для среды выполнения установлено значение PHP|7.0. Чтобы просмотреть все поддерживаемые среды выполнения, выполните команду az webapp list-runtimes --linux.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name  --runtime "PHP|7.3" --deployment-local-git

Когда веб-приложение будет создано, в Azure CLI отобразится примерно следующее:

Local git is configured with url of 'https://@.scm.azurewebsites.net/.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": ".azurewebsites.net",
  "deploymentLocalGitUrl": "https://@.scm.azurewebsites.net/.git",
  "enabled": true,
  
}

Вы создали пустое веб-приложение с включенным развертыванием Git.

Примечание

URL-адрес удаленного репозитория Git отображается в свойстве deploymentLocalGitUrl в таком формате: https://@.scm.azurewebsites.net/.git. Сохраните этот URL-адрес для дальнейшего использования.

Настройка параметров базы данных

В службе приложений переменные среды задаются в качестве параметров приложения с помощью команды az webapp config appsettings set.

Команда ниже позволяет настроить параметры приложения DB_HOST, DB_DATABASE, DB_USERNAME и DB_PASSWORD. Замените заполнители и .

az webapp config appsettings set --name  --resource-group myResourceGroup --settings DB_HOST=".mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Для доступа к параметрам можно использовать метод PHP getenv. В коде Laravel используется программа-оболочка env для PHP getenv. Например, конфигурация MySQL в файле config/database.php выглядит следующим образом:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Настройка переменных среды Laravel

В среде Laravel требуется ключ приложения из службы приложений. Его можно настроить с помощью параметров приложения.

В окне терминала на локальном компьютере используйте php artisan для создания ключа приложения без сохранения в файле .env.

php artisan key:generate --show

В Cloud Shell задайте ключ приложения в приложении Службы приложений с помощью команды az webapp config appsettings set. Замените заполнители и .

az webapp config appsettings set --name  --resource-group myResourceGroup --settings APP_KEY="" APP_DEBUG="true"

Значение APP_DEBUG="true" указывает Laravel возвращать отладочную информацию в случае ошибок в работе развернутого приложения. При выполнении рабочего приложения задайте для него более безопасное значение false.

Задание пути виртуального приложения

Жизненный цикл приложения Laravel начинается в общем каталоге, а не в корневом каталоге приложения. Образ PHP Docker по умолчанию для службы приложений использует Apache и не позволяет настраивать DocumentRoot для Laravel. Тем не менее вы можете использовать .htaccess для повторного создания всех запросов к точке в каталоге /public вместо корневого каталога. В корне репозитория для этой цели уже добавлен .htaccess. С ним приложение Laravel будет готово к развертыванию.

См. подробнее об изменении корневого каталога сайта.

Публикация в Azure из Git

Вернитесь к окну терминала (в локальном расположении) и добавьте удаленное приложение Azure в локальный репозиторий Git. Замените URL-адресом удаленного репозитория Git, который вы сохранили при создании веб-приложения.

git remote add azure 

Отправьте код в удаленное приложение Azure, чтобы развернуть приложение. При появлении запроса на ввод учетных данных в диспетчере учетных данных Git введите учетные данные, созданные на шаге настройки пользователя развертывания (а не те, которые используются для входа на портал Azure).

git push azure main

Выполнение этой команды может занять несколько минут. При выполнении эта команда выводит приблизительно следующие сведения:

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Updating branch 'main'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a5e076db9c'.
remote: Running custom deployment command...
remote: Running deployment command...
...

Переход к приложению Azure

Перейдите по адресу http://.azurewebsites.net и добавьте несколько задач в список.

Веб-приложение PHP в Azure

Вы запустили управляемое данными приложение PHP в службе приложений Azure.

Локальное обновление и повторное развертывание модели

На этом шаге вы внесете некоторые изменения в модель данных task и веб-приложение, а затем опубликуете обновления в Azure.

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

Добавление столбца

В окне терминала на локальном компьютере перейдите к корневой папке репозитория Git.

Создайте перенос базы данных для таблицы tasks:

php artisan make:migration add_complete_column --table=tasks

Эта команда отображает имя файла переноса, который создается. Найдите этот файл в каталоге database/migrations и откройте его.

Замените метод up следующим кодом:

public function up()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->boolean('complete')->default(False);
    });
}

Предыдущий код добавляет столбец логических значений complete в таблицу tasks.

Замените метод down следующим кодом действия отката:

public function down()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->dropColumn('complete');
    });
}

В окне терминала на локальном компьютере выполните перенос базы данных Laravel, чтобы внести изменения в локальную базу данных.

php artisan migrate

В соответствии с условиями соглашения об именовании Laravel модель Task (см. app/Task.php) сопоставляется с таблицей tasks по умолчанию.

Обновление логики приложения

Откройте файл routes/web.php. В нем приложение определяет свои маршруты и бизнес-логику.

В конце файла добавьте маршрут с помощью следующего кода.

/**
 * Toggle Task completeness
 */
Route::post('/task/{id}', function ($id) {
    error_log('INFO: post /task/'.$id);
    $task = Task::findOrFail($id);

    $task->complete = !$task->complete;
    $task->save();

    return redirect('/');
});

Предыдущий код выполняет простое обновление модели данных, переключая значение complete.

Обновление представления

Откройте файл resources/views/tasks.blade.php. Найдите открывающий тег и замените его приведенным ниже значением.


Предыдущий код изменяет цвет строк в зависимости от того, завершена ли задача.

Следующая строка содержит приведенный ниже код.

{{ $task->name }}

Замените всю эту строку следующим кодом.


    
{{ csrf_field() }} {{ $task->name }}

Предыдущий код добавляет кнопку "Submit" (Отправить), которая ссылается на маршрут, определенный ранее.

Локальная проверка изменений

В окне терминала на локальном компьютере запустите сервер разработки из корневого каталога репозитория Git.

php artisan serve

Чтобы увидеть, как изменится состояние задачи, перейдите по адресу http://localhost:8000 и установите флажок.

Добавлен флажок для задачи

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Публикация изменений в Azure

В окне терминала на локальном компьютере выполните перенос базы данных Laravel со строкой подключения рабочей базы данных, чтобы внести изменения в базу данных в Azure.

php artisan migrate --env=production --force

Зафиксируйте все изменения в Git, а затем отправьте изменения кода в Azure.

git add .
git commit -m "added complete checkbox"
git push azure main

После выполнения команды git push перейдите в приложение Azure и проверьте новые функции.

Изменения модели и базы данных, опубликованные в Azure

Добавленные задачи сохраняются в базе данных. Изменения в схеме данных не влияют на имеющиеся данные.

Очистка ресурсов

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name myResourceGroup

Просмотр логов OpenServer

Начну с небольшого совета, который чаще всего помогает сразу же распознать причину неполадки и решить ее, приложив минимальное количество усилий. Однако уточню, что подойдет эта рекомендация только в том случае, если сам OpenServer запускается в Windows, но при этом старта локального веб-сервера не происходит. 

Просмотр логов OpenServer

На панели задач есть значок программы, по которому нужно кликнуть правой кнопкой мыши. После этого появится контекстное меню, в котором надо нажать на «‎Просмотр логов». В новом окне ознакомьтесь с полученными сведениями и определите, из-за чего появилась рассматриваемая ошибка. 

Запуск программы от имени администратора

Как бы банально это ни звучало, но часто запуск OpenServer от имени администратора решает все неполадки. Дело в том, что сам компонент тесно связан с сетью и файлами, отвечающими за соединение, поэтому и требует определенных привилегий при взаимодействии с ними. Если права доступа отсутствуют, соответственно, и запуска программы не произойдет.

Вам понадобится выйти из панели управления, найти файл программы в корневом каталоге, щелкнуть по нему правой кнопкой мыши и в контекстном меню выбрать пункт «‎Запуск от имени администратора». Подождите несколько секунд и проверьте, появилась ли на экране какая-либо информация, свидетельствующая о начале работы локального веб-сервера.

Запуск OpenServer от имени администратора

Если этот метод оказался эффективным, но вы не хотите каждый раз запускать программу таким образом, выполните простую настройку. Для этого снова кликните по исполняемому файлу правой кнопкой мыши и перейдите в «‎Свойства». Там найдите вкладку «‎Совместимость» и установите галочку возле пункта «Запускать эту программу от имени администратора‎».

Перманентный запуск программы OpenServer от имени администратора

После применения настроек софт всегда будет стартовать с повышенными привилегиями, что позволит избавиться от проблем с запуском.

Редактирование файла hosts

Встроенный в операционную систему файл hosts выполняет важную роль, и часто пользователи задействуют его, если хотят ограничить доступ к конкретным сайтам. Иногда его блокировка средствами Windows становится причиной проблем с запуском OpenServer. Информация об этом появляется в логах при попытке перейти на веб-сервер, поэтому причину можно сразу же распознать. 

Проблемы с запуском OpenServer - командная строка

Хочу дать два совета:

  1. При использовании стороннего антивируса и брандмауэра настройте их так, чтобы OpenServer не попадал в список заблокированных программ. Стандартные средства можно отключить на время исключительно в качестве проверки.
  2. Запустите командную строку от имени администратора и введите команду attrib -s -r -h -a C:\Windows\system32\drivers\etc\hosts, активировав соответствующие атрибуты для упомянутого файла hosts.

Сырой запрос (Raw Query)

У Laravel для работы с базой данных есть механизм под названием Eloquent, плюс имеется мощный конструктор запросов (Query Builder), но иногда необходимо написать просто «сырой» запрос (Raw Query). Это можно сделать с помощью фасада Illuminate\Support\Facades\DB, который имеет методы для каждого типа запроса: select, update, insert, delete и statement.

1. Выполнение запроса SELECT

Метод фасада select() позволяет выполнить SELECT запрос:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class UserController extends Controller {
    /**
     * Показать список всех пользователей
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        $users = DB::select('select * from users where admin = ?', [0]);
        return view('user.index', ['users' => $users]);
    }
}

Первый аргумент метода select() — сырой SQL-запрос, второй — значения параметров для прикрепления к запросу. Обычно это значения для формирования условия WHERE. Привязка параметров обеспечивает защиту от SQL-инъекций. Метод select()возвращает массив объектов stdClass.

foreach ($users as $user) {
    echo $user->name;
}

Вместо использования знака вопроса для привязки параметров, можно выполнить запрос, используя привязку по имени:

$user = DB::select('select * from users where id = :id', ['id' => 1]);

2. Выполнение запроса INSERT

Метод фасада insert() позволяет выполнить INSERT запрос:

DB::insert('insert into users (id, name, email) values (?, ?, ?)', [1, 'Сергей Иванов', 'ivanov.s@mail.ru']);
DB::insert(
    'insert into users (id, name, email) values (:id, :name, :email)',
    ['id' => 1, 'name' => 'Сергей Иванов',  'email' => 'ivanov.s@mail.ru']
);

3. Выполнение запроса UPDATE

Для обновления существующих записей используется метод update(), который возвращает количество изменённых записей:

$affected = DB::update('update users set votes = :votes where id = :id', ['id' => 1, 'votes' => 100]);

4. Выполнение запроса DELETE

Для удаления записей из БД используется метод delete(), который возвращает количество изменённых записей:

$deleted = DB::delete('delete from users where id = :id', ['id' => 1]);

5. Выполнение запроса общего типа

Некоторые запросы к БД не возвращают никаких значений. Для операций такого типа предназначен метод statement() фасада:

DB::statement('drop table users');

6. Транзакции

Для выполнения набора запросов внутри одной транзакции предназначен метод transaction(). Если в функции-замыкании произойдёт исключение, транзакция автоматически откатится. А если функция выполнится успешно, транзакция автоматически применится.

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
});

Метод transaction() принимает второй необязательный аргумент, с помощью которого задаётся число повторных попыток транзакции при возникновении взаимной блокировки. После истечения этих попыток будет выброшено исключение:

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
}, 5);

Чтобы запустить транзакцию вручную и иметь полный контроль над её откатом и применением:

DB::beginTransaction();

Можно откатить транзакцию методом rollBack():

DB::rollBack();

Можно применить транзакцию методом commit():

DB::commit();