Если PHP будет использоваться в Hugo, например, для контактной формы, полезно использовать для тестирования локальный веб-сервер c поддержкой PHP.

1. Выбор локального сервера

Локальные серверы позволяют запускать свой сайт без использования хостинга, прямо на домашнем компьютере. Вы можете выбрать локальный сервер, в зависимости от ваших потребностей, например: Open Server Panel, MAMP, XAMPP, Denwer и WampServe.

1.1. Open Server Panel

Open Server Panel (OSPanel) — это портативная программная среда, созданная специально для веб-разработчиков. Приложение работает на ОС Windows, поддерживает Apache и Nginx в качестве веб-сервера и предоставляет возможность запускать различные версии PHP, MySQL, PostgreSQL, MongoDB и других популярных модулей.
OSPanel — некоммерческий проект, распространяется бесплатно.
Перейти к скачиванию этой программы для Windows можно на официальном сайте. Подробная документация по установке и настройке находится здесь.

1.1.1. Подключение Hugo к локальному серверу OSPanel

Установим OSPanel, например на диск D: в папку OSPanel. OSPanel после установки создает следующую структуру каталогов:

.
├── addons                    # Дополнения
│   └── <имя_дополнения>      # Основной каталог дополнения
│       └── ospanel_data      # Служебные файлы (исходники настроек и конфигов)
├── bin                       # Общие исполняемые файлы
├── config                    # Настройки
│   ├── <имя_модуля>          # Настройки модуля
│   │   ├── default           # Каталог профиля Default
│   │   │   ├── templates     # Шаблоны конфигурации
│   │   │   └── settings.ini  # Настройки модуля для профиля Default
│   │   └── module.ini        # Базовые настройки модуля (вкл/выкл + имя профиля)
│   ├── menu.ini              # Настройки меню
│   └── program.ini           # Настройки программы
├── data                      # Хранилище данных (базы данных и др.)
├── home                      # Пользовательские проекты (домены)
├── licenses                  # Лицензии на компоненты сторонних производителей
├── logs                      # Файлы журналов
│   ├── domains               # Журналы проектов
│   └── mail                  # Хранилище почты
├── modules                   # Модули
│   └── <имя_модуля>          # Основной каталог модуля
│       └── ospanel_data      # Служебные файлы (исходники настроек и конфигов)
├── system                    # Служебный каталог программы
│   └── lang                  # Языковые файлы
├── temp                      # Временные файлы
└── user                      # Пользовательские данные
    └── ssl                   # Пользовательские файлы SSL (ключи, сертификаты и др.)

Сначала создадим подкаталог с именем нового проекта в каталоге home, например: webpractica.

Далее, в корневом каталоге проекта создадим подкаталоги .osp и public.

Настройки проекта хранятся в файле <проект>\.osp\project.ini. В каталоге .osp создадим файл настройки пректа project.ini со следующим содержимым:

[имя_домена]

php_engine = ...
public_dir = {base_dir}\public

Замените [имя_домена] на желаемое имя домена вашего проекта.
Задайте версию движка PHP, которую вы хотите использовать для обработки PHP-файлов этого домена, в параметре php_engine.

[!important] Значение [имя_домена] должно совпадать с именем домена, заданным в файле настроек проекта Hugo config.toml, в строке baseURL.

Например, если baseURL = "https://www.webpractica.ru/", содержимое файла project.ini, должно быть:

[www.webpractica.ru]

php_engine = PHP-8.3
public_dir = {base_dir}\public

Ниже приведена структура каталогов для нашего примера.

D:
└── OSPanel
    ├── addons                    # Дополнения
    │   └── <имя_дополнения>      # Основной каталог дополнения
    │       └── ospanel_data      # Служебные файлы (исходники настроек и конфигов)
    ├── bin                       # Общие исполняемые файлы
    ├── config                    # Настройки
    │   ├── <имя_модуля>          # Настройки модуля
    │   │   ├── default           # Каталог профиля Default
    │   │   │   ├── templates     # Шаблоны конфигурации
    │   │   │   └── settings.ini  # Настройки модуля для профиля Default
    │   │   └── module.ini        # Базовые настройки модуля (вкл/выкл + имя профиля)
    │   ├── menu.ini              # Настройки меню
    │   └── program.ini           # Настройки программы
    ├── data                      # Хранилище данных (базы данных и др.)
    ├── home                      # Пользовательские проекты (домены)
    │   └── webpractica           # Пример домена  
    │   │   ├── .osp              
    │   │   │   └── project.ini   # Файл настроек проекта
    │   │   └── public            # Каталог для размещения папок и файлов сайта, сгентерированных Hugo
    ├── licenses                  # Лицензии на компоненты сторонних производителей
    ├── logs                      # Файлы журналов
    │   ├── domains               # Журналы проектов
    │   └── mail                  # Хранилище почты
    ├── modules                   # Модули
    │   └── <имя_модуля>          # Основной каталог модуля
    │       └── ospanel_data      # Служебные файлы (исходники настроек и конфигов)
    ├── system                    # Служебный каталог программы
    │   └── lang                  # Языковые файлы
    ├── temp                      # Временные файлы
    └── user                      # Пользовательские данные
        └── ssl                   # Пользовательские файлы SSL (ключи, сертификаты и др.)
1.1.2. Перенаправление общедоступного (Public) каталога Hugo в каталог локального сервера.

Для того чтобы Hugo генерировал папки и файлы сайта в нужный нам каталог, нужно прописать путь в параметре publishDir в файле конфигурации Hugo.

Ниже приведена конфигурация в файле config.toml, для нашего примера:

baseURL = "https://www.webpractica.ru/"
publishDir = "D:/OSPanel/home/webpractica/public"

Теперь, после выполнения команды hugo из корня нашего проекта Hugo, папки и файлы сайта будут сгенерированы в каталоге пользовательского домена OSPanel.
Для нашего примера, выполним в окне командной строки (cmd):

d:
cd D:\Hugo\Sites\webpractica
hugo --gc --minify

1.2. MAMP

MAMP - локальная серверная среда для веб-разработки с Apache, Nginx, PHP и MySQL для macOS и Windows, есть платное и бесплатное решение.

1.2.1. Установка MAMP

Скачйте MAMP с сайта и запустите установку.
Локальная установка по умолчанию, происходит в папку Programs (путь установки можно изменить).

Производитель запутывает пользователей, чтобы направить их к платной версии MAMP Pro. В папке Programs есть только одна иконка для версии MAMP Pro. Приложение MAMP.app скрыто в каталоге Programs/MAMP. Однако на панели запуска также есть иконка для запуска версии MAMP. У иконки серый фон в отличие от версии MAMP Pro с бирюзовым фоном.

1.2.2. Настройка MAMP

Самое важное при настройке MAMP и подключении к Hugo — это корневой каталог. Он настраивается в настройках в разделе Server.

Нажатие на иконку MAMP запускает минимальный интерфейс. Здесь можно задать веб-сервер - Apache или Nginx - и версию PHP. Шестеренка вверху слева открывает диалог настроек.

В разделе «Настройки» — «Общие» можно включить «Запустить сервер», «Проверить наличие обновлений» и «Остановить сервер». «Кэш» отключить, а «Открыть страницу WebStart» необходимо только в том случае, если, например, вам нужна phpMyAdmin база данных MySQL. «WebStart» также можно запустить на стартовой странице приложения.

Порты можно не изменять. Порт Apache - 8888, проект Hugo вызывается localhost:8888 в браузере.

В разделе Настройки - Сервер - корневой каталог для веб-страниц Hugo можно задать с помощью мини-кнопки «Select». Это самая важная настройка. Вы можете сохранить свой проект локально, например, в каталоге /Users/myWeb/mamp-sites/mySite.

Настройки - Облако - бесплатная версия MAMP не имеет доступа к облаку. В случае выбора Облака, вам будет предложено купить платную версию.

1.2.3. Подключение Hugo к MAMP

Обычно содержимое каталога public копируется в корневой каталог веб-сервера через sFTP. Файл конфигурации проекта Hugo config.toml содержит параметр доменного имени baseurl.

Для локальной установки MAMP, в config.toml необходимо установить: baseURL = "".

1.2.4. Перенаправление публичного каталога Hugo в локальный каталог MAMP

Команда CLI терминала hugo в каталоге проекта Hugo создает новую статическую версию веб-сайта Hugo. По умолчанию эти данные доступны в каталоге Hugo project/public. Теперь можно копировать содержимое public в корневой каталог MAMP после каждой сборки. Но это очень неудобно.

Можно редактировать и сохранять свои проекты Hugo, например, в Apple iCloud. Это дает доступ к проектам со всех устройств с доступом к iCloud. При таком подходе MAMP, конечно, должен быть установлен по одному и тому же пути на всех устройствах.

Как уже было описано выше, для примера, локальный корневой каталог проекта MAMP — /Users/myWeb/mamp-sites/mySite. Теперь нужно заставить Хьюго записывать файлы в этот каталог при создании статической версии. Для этого нужно вставить в config.toml строку publishDir = "/Users/myWeb/mamp-sites/mySite".

Ниже приведен пример настроек в config.toml:

# baseURL = "https://mySite.ru/"
baseURL = ""
publishDir = "/Users/myWeb/mamp-sites/mySite"
1.2.5. MAMP logs

Если что-то не работает, иногда полезно посмотреть логи MAMP. Логи Apache, MySQL и PHP находятся в каталоге Programs/MAMP/logs.

1.2.6. Удаление MAMP

MAMP, а также установленный MAMP Pro можно полностью удалить из каталога Programs, удалив Programs/MAMP каталог и приложение «MAMP PRO.app» из каталога Programs.

1.2.7. Заключение

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

[!WARNING] Важно, как только проект Hugo будет опубликован, нужно не забыть установить параметр baseURL обратно на доменное имя. Это не должно быть проблемой, поскольку вам не придется продолжать разрабатывать PHP-код. В какой-то момент эта часть будет завершена, и вам больше не нужно будет запускать MAMP. Интегрированная среда разработки Hugo по-прежнему предоставляет все под localhost:1313.