Установка FEMP: Nginx, MySQL 8 и PHP 7.4 на FreeBSD 12.1
TL;DR
Кратко: развернём FEMP (FreeBSD + Nginx + MySQL 8 + PHP 7.4) на FreeBSD 12.1 через pkg. Шаги: обновление системы, создание пользователя с sudo, установка и запуск nginx, mysql-server и php-fpm, настройка Nginx для обработки PHP через PHP-FPM, проверка работы через phpinfo(), базовая проверка безопасности и чеклист для продакшена.
Важно: используйте сильные пароли и удалите тестовый info.php после проверки.
Что такое FEMP
FEMP — это набор программ для хостинга динамических сайтов на FreeBSD. Состав:
- FreeBSD — операционная система.
- Nginx — веб-сервер (произносится “Engine‑X”).
- MySQL — СУБД (в руководстве — версия 8.0).
- PHP — язык для обработки динамического контента (здесь — 7.4).
1‑строчное определение: FEMP — стандартный стек для запуска PHP‑приложений на FreeBSD с высокопроизводительным Nginx и реляционной СУБД.
Цели статьи
- Пошагово установить и запустить компоненты FEMP на FreeBSD 12.1.
- Предоставить рекомендации по безопасности, отладке и продакшен‑чеклист.
- Описать альтернативы и сценарии отката.
Требования перед началом
- Сервер с FreeBSD 12.1 (VPS или выделенный хост).
- Учётная запись с правами root или sudo.
- Базовые навыки работы в терминале FreeBSD.
Быстрые начальные команды
Проверка версии FreeBSD:
uname -ro
# FreeBSD 12.1-RELEASEОбновление системы и пакетов:
freebsd-update fetch install
pkg update && pkg upgrade -yУстановка утилит:
pkg install -y sudo vim bash curlСоздание пользователя (пример):
adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default):
# Login group [johndoe]:
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]:
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]:
# Home directory permissions (Leave empty for default):
# Use password-based authentication? [yes]:
# Use an empty password? (yes/no) [no]:
# Use a random password? (yes/no) [no]:
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]:
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye! Дать права sudo группе wheel: откройте visudo и раскомментируйте строку
%wheel ALL=(ALL) ALLПереключитесь на пользователя:
su - johndoeУстановите временную зону:
sudo tzsetupШаг 1 — Установка mainline Nginx
Nginx — лёгкий и производительный HTTP‑сервер. В FreeBSD пакеты удобны через pkg.
Установка mainline (актуальная ветка разработки с последними исправлениями и фичами):
sudo pkg install -y nginx-develПроверка версии:
nginx -v
# nginx version: nginx/1.17.7Запуск и автозапуск при загрузке:
sudo sysrc nginx_enable=yes
sudo service nginx startПроверка статуса:
sudo service nginx status
# nginx is running as pid 17607.Проверьте в браузере http://your_server_IP — должна открыться стартовая страница “Welcome to nginx!”.
Примечание: если предпочтительна ветка stable, установите пакет nginx вместо nginx-devel.
Шаг 2 — Установка MySQL 8.0
MySQL 8 — реляционная база данных. Установка клиента и сервера:
sudo pkg install -y mysql80-client mysql80-serverПроверка версии:
mysql --version
# mysql Ver 8.0.17 for FreeBSD12.0 on amd64 (Source distribution)Включение автозапуска и старт:
sudo sysrc mysql_enable=yes
sudo service mysql-server startПроверка статуса:
sudo service mysql-server status
# mysql is running as pid 19066.Безопасная настройка:
sudo mysql_secure_installationСледуйте подсказкам — установите сильный root‑пароль и примените рекомендуемые настройки безопасности.
Совет по бэкапу: сразу настройте регулярные дампы (mysqldump) или используйте инструменты репликации для важных данных.
Шаг 3 — Установка PHP 7.4
Установка PHP CLI и базовых компонентов:
sudo pkg install -y php74Проверка версии:
php --version
# PHP 7.4.0 (cli) (built: Jul 18 2019 01:14:37) ( NTS )Включение и запуск PHP‑FPM (FastCGI Process Manager):
sudo sysrc php_fpm_enable=yes
sudo service php-fpm startПроверка статуса:
sudo service php-fpm status
# php_fpm is running as pid 23005.Установка PHP‑модулей (опционально)
Просмотр загруженных модулей:
php -m
# [PHP Modules]
# Core
# date
# libxml
# mysqlnd
# pcre
# Reflection
# SPL
# standard
# [Zend Modules]Поиск пакетов модулей php74:
pkg search ^php74-*Установите необходимые расширения, например для работы с MySQL и curl:
sudo pkg install -y php74-mysqli php74-pdo_mysql php74-curl php74-mbstringСовет: для популярных CMS (WordPress, Drupal) чаще всего требуются pdo_mysql, mbstring, json, xml и gd или imagemagick.
Шаг 4 — Настройка Nginx для обработки PHP
Создайте конфигурацию виртуального хоста:
sudo vim /usr/local/etc/nginx/test.confСодержимое файла:
server {
listen 80;
server_name SERVER_IP; # Replace with your IP or hostname
root /usr/local/www/nginx-dist;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Сохраните файл и добавьте его в основной nginx.conf в блок http:
include test.conf;Проверка конфигурации Nginx:
sudo nginx -tПерезагрузка без останова процесса:
sudo service nginx reloadСоветы по socket vs tcp: в высоконагруженных системах предпочтительнее unix socket (например, fastcgi_pass unix:/var/run/php-fpm.sock;) — он даёт меньшую задержку. При использовании контейнеров или распределённых систем используется tcp (127.0.0.1:9000 или другой адрес).
Шаг 5 — Тестирование обработки PHP
Создайте info.php в корне сайта:
sudo vim /usr/local/www/nginx-dist/info.phpВставьте:
Откройте http://your_server_IP/info.php — вы увидите страницу с информацией о PHP.

После проверки обязательно удалите файл:
sudo rm /usr/local/www/nginx-dist/info.phpБезопасность и твики для продакшена
- Удалите демонстрационные страницы (nginx index, info.php).
- Ограничьте доступ к MySQL: слушать только на localhost по умолчанию или настроить firewall.
- Настройте брандмауэр (pf или ipfw) для ограничения входящих соединений.
- Включите TLS: настройте сертификаты Let’s Encrypt и перенаправление HTTP->HTTPS.
- Настройте SELinux/AppArmor‑аналогичные механизмы (в FreeBSD используйте права пользователей и chroot для служб).
- Регулярно обновляйте пакеты через pkg и проверяйте уведомления безопасности.
Отладка и распространённые ошибки
- Nginx не видит PHP: проверьте, что php-fpm запущен и fastcgi_pass указан правильно (tcp или unix socket). Логи: /var/log/nginx/error.log, /var/log/php-fpm.log.
- MySQL не стартует: проверьте права на /var/db/mysql и владельца mysql:mysql.
- Права файлов: веб‑сервер должен иметь доступ к корню сайта; избегайте установки прав 777.
- Неправильный root: убедитесь, что document_root в nginx совпадает с местом, где лежит ваш index.php.
Альтернативы и когда FEMP не подходит
- MariaDB вместо MySQL: совместима по протоколу и иногда предпочтительна для производительности/лицензирования.
- Apache + PHP‑FPM (LAMP на FreeBSD): если нужны специфические модулі Apache.
- Использование pkg вместо ports ускоряет установку; ports даёт больше контроля при компиляции.
- Для статических сайтов Nginx + CDN обходятся без PHP/MySQL.
Пример когда FEMP не подходит: приложения, написанные на Node.js, требуют другой стека (например, FreeBSD + node + nginx как обратный прокси).
Модель принятия решений (heuristic)
- Требуется PHP + реляционная БД → FEMP.
- Нужна высокая совместимость с экосистемой Linux → рассмотрите контейнеры (Docker) на FreeBSD через bhyve/виртуализацию.
- Нужна простой хостинг WordPress → FEMP + набор рекомендуемых модулей (pdo_mysql, mbstring, xml, gd).
Чеклист перед выпуском в продакшен
Роли и задачи:
Системный администратор:
- Установить и настроить автообновления/скрипт бэкапа.
- Настроить мониторинг (Zabbix/Prometheus) и алерты на доступность служб.
DevOps:
- Настроить CI/CD деплой с миграциями БД и откатом.
- Документировать конфигурацию Nginx и php-fpm.
Разработчик:
- Убедиться, что приложение использует PDO с подготовленными выражениями.
- Тесты нагрузки и интеграции с базой.
Мини‑чеклист:
- Удалены демонстрационные файлы
- Настроен TLS и редирект на HTTPS
- Настроен бэкап БД
- Ограничен доступ к MySQL
- Проверена производительность php-fpm и Nginx
Критерии приёмки
- Nginx отвечает на HTTP и перенаправляет на HTTPS.
- PHP‑скрипты обрабатываются корректно, phpinfo() недоступен публично.
- MySQL принимает подключения только от доверенных адресов и настроен бэкап.
- Логи собираются централизованно и есть оповещения при падении службы.
Процесс отката при инциденте
- Переключить трафик на резервный сервер или предыдущую версию (load balancer).
- Остановить проблемную службу: sudo service nginx stop / sudo service php-fpm stop.
- Восстановить конфигурацию из последнего рабочего бэкапа.
- Запустить службы и провести smoke‑тесты.
- Проанализировать логи и закрыть причину инцидента.
Совместимость и миграция
- Переезд с Linux → FreeBSD: конфигурационные отличия в путях (например, /usr/local/etc вместо /etc), используйте относительные пути в скриптах.
- Переход с MySQL 5.7 → 8.0: проверьте совместимость SQL и код приложения, обратите внимание на новую систему авторизации и поведение индексирования.
Частые команды поддержки (cheat sheet)
- Проверить статус сервиса:
sudo service nginx status
sudo service mysql-server status
sudo service php-fpm status- Проверить конфигурацию nginx:
sudo nginx -t- Просмотреть последние логи:
sudo tail -n 200 /var/log/nginx/error.log
sudo tail -n 200 /var/log/mysql/*.log- Ручной перезапуск служб:
sudo service nginx restart
sudo service php-fpm restart
sudo service mysql-server restartЛокальные рекомендации для России и СНГ
- Для TLS рассмотрите Let’s Encrypt через acme.sh (прост в интеграции на FreeBSD).
- При выборе VPS обратите внимание на географию дата‑центра (низкая задержка для локальных пользователей).
Краткий план развития инфраструктуры
- Короткая цель (недели): Развернуть FEMP, настроить TLS, базовый мониторинг.
- Средняя цель (1–3 месяца): Автоматизировать бэкапы и CI/CD, тестирование нагрузок.
- Долгосрочная цель (6–12 месяцев): Масштабирование через балансировщик и кластер баз данных.
Итог и дальнейшие шаги
Поздравляю — вы развернули рабочий FEMP‑стек на FreeBSD 12.1. Дальше рекомендую:
- Настроить автоматические резервные копии базы данных.
- Включить HTTPS через Let’s Encrypt.
- Настроить мониторинг и алерты.
- Провести нагрузочное тестирование перед увеличением трафика.

Краткое резюме: FEMP предоставляет надёжную и гибкую платформу для PHP‑приложений на FreeBSD. Продуманные настройки безопасности и мониторинга позволят безопасно вывести сервис в продакшен.
Контактные заметки и ресурсы
- Документация FreeBSD: https://www.freebsd.org/
- Документация Nginx: https://nginx.org/
- Документация MySQL: https://dev.mysql.com/
- PHP: https://www.php.net/
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить