Гид по технологиям

Установка FEMP: Nginx, MySQL 8 и PHP 7.4 на FreeBSD 12.1

6 min read Инфраструктура Обновлено 07 Nov 2025
Установка FEMP на FreeBSD 12.1
Установка FEMP на 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.

Страница phpinfo() в браузере

После проверки обязательно удалите файл:

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 принимает подключения только от доверенных адресов и настроен бэкап.
  • Логи собираются централизованно и есть оповещения при падении службы.

Процесс отката при инциденте

  1. Переключить трафик на резервный сервер или предыдущую версию (load balancer).
  2. Остановить проблемную службу: sudo service nginx stop / sudo service php-fpm stop.
  3. Восстановить конфигурацию из последнего рабочего бэкапа.
  4. Запустить службы и провести smoke‑тесты.
  5. Проанализировать логи и закрыть причину инцидента.

Совместимость и миграция

  • Переезд с 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 на FreeBSD

Краткое резюме: FEMP предоставляет надёжную и гибкую платформу для PHP‑приложений на FreeBSD. Продуманные настройки безопасности и мониторинга позволят безопасно вывести сервис в продакшен.


Контактные заметки и ресурсы

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти