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

Установка FEMP стека на FreeBSD 12.1 — пошаговое руководство

• 6 min read • Инфраструктура • Обновлено 16 Nov 2025
FEMP на FreeBSD 12.1 — установка и настройка
FEMP на FreeBSD 12.1 — установка и настройка

Диаграмма FEMP стека: FreeBSD, Nginx, MySQL и PHP

Зачем это нужно

FEMP — сочетание открытого ПО, которое превращает FreeBSD-сервер в платформу для динамических веб‑сайтов и приложений. Nginx обслуживает HTTP-запросы, PHP обрабатывает динамическую логику, MySQL хранит данные, а FreeBSD обеспечивает стабильную OS-платформу.

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

Что вы получите в результате

  • Рабочий Nginx, обслуживающий статические файлы и пересылающий PHP-запросы в PHP-FPM.
  • Рабочий MySQL 8.0 сервер с базовой безопасностью.
  • PHP 7.4 с возможностью добавления модулей.
  • Набор проверочных шагов и контрольных списков для админа и разработчика.

Требования

  • Сервер с FreeBSD 12.1.
  • Пользователь с root-привилегиями или sudo.
  • Базовые навыки работы с консолью FreeBSD.

Краткая методология (мини-метод)

  1. Проверка версии и обновление системы.
  2. Установка базовых утилит и создание пользователя.
  3. Установка и запуск Nginx.
  4. Установка MySQL + первичная безопасность.
  5. Установка PHP + PHP-FPM и интеграция с Nginx.
  6. Тестирование и приёмка.

Начало — обновление системы и создание пользователя

Проверьте версию FreeBSD:

uname -ro
# FreeBSD 12.1-RELEASE

Обновите систему и пакеты:

freebsd-update fetch install
pkg update && pkg upgrade -y

Установите утилиты и создайте пользователя:

pkg install -y sudo vim bash curl
adduser
# Следуйте подсказкам. Рекомендуем добавить пользователя в группу wheel.

Откройте visudo и разрешите группу wheel выполнять команды через sudo:

visudo
# Уберите комментарий у строки %wheel ALL=(ALL) ALL

Переключитесь на нового пользователя:

su - johndoe

Установите часовой пояс:

sudo tzsetup

Важно: заменяйте примеры имён пользователей и паролей вашими реальными значениями.

Установка mainline Nginx

Nginx хорошо подходит для высоконагруженных сайтов. Установите mainline-ветку (если хотите стабильную — установите пакет nginx):

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

Если всё в порядке, при переходе на ваш IP вы увидите страницу «Welcome to nginx!» (страница по умолчанию).

Установка MySQL 8.0

Установите клиент и сервер MySQL 8.0:

sudo pkg install -y mysql80-client mysql80-server

Проверьте клиентскую версию:

mysql --version
# mysql  Ver 8.0.x for FreeBSD

Включите автозапуск и запустите сервис:

sudo sysrc mysql_enable=yes
sudo service mysql-server start

Проверьте статус:

sudo service mysql-server status

Запустите скрипт начальной безопасности:

sudo mysql_secure_installation

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

Важно: не отключайте удалённый доступ root в тех случаях, когда это нужно для административных задач; вместо этого используйте привилегированные учётные записи с ограничением по IP или SSL.

Установка PHP 7.4 и PHP-FPM

Установите PHP 7.4:

sudo pkg install -y php74

Проверьте версию:

php --version
# PHP 7.4.x (cli)

Включите и запустите PHP-FPM:

sudo sysrc php_fpm_enable=yes
sudo service php-fpm start

Проверьте статус:

sudo service php-fpm status

Модули PHP

Посмотреть текущие модули:

php -m

Найти доступные модули для php74:

pkg search ^php74-*

Установите те, которые нужны вашему приложению, например mysql, curl, gd, mbstring:

sudo pkg install -y php74-mysqli php74-curl php74-gd php74-mbstring

Совет: устанавливайте только необходимые расширения во избежание лишней поверхности атаки.

Настройка Nginx для работы с PHP

Создайте файл конфигурации виртуального хоста, например /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;
  }

}

Добавьте include test.conf; в блок http {} основного nginx.conf (/usr/local/etc/nginx/nginx.conf).

Проверьте конфигурацию и перезагрузите Nginx:

sudo nginx -t
sudo service nginx reload

Важно: замените SERVER_IP на реальный домен или IP. Для prod‑сайтов используйте server_name с доменом и настраивайте HTTPS.

Тестирование PHP

Создайте файл /usr/local/www/nginx-dist/info.php с содержимым:

Перейдите в браузере на http://your_server_IP/info.php и проверьте страницу конфигурации PHP:

Страница phpinfo с информацией о конфигурации PHP

После теста удалите info.php:

sudo rm /usr/local/www/nginx-dist/info.php

Важно: не оставляйте phpinfo() в продакшене — это раскрывает подробности сервера.

Контрольный список приёмки

Критерии приёмки:

  • Nginx слушает порт 80 и отвечает на HTTP-запросы.
  • PHP-FPM запущен и обрабатывает PHP-скрипты (проверка через info.php).
  • MySQL запущен и доступен локально; root защищён паролем.
  • Файловые права на root сайта настроены корректно: веб‑сервер имеет доступ только к необходимым каталогам.
  • Логи ошибок Nginx и PHP доступны и вращаются.

Тесты/критерии приёмки:

  • curl -I http://localhost/ возвращает 200 OK.
  • php -v показывает установленную версию.
  • mysql -u root -p подключается и показывает список баз.

Рекомендации по безопасности и жёсткая настройка

  1. Откройте только нужные порты (80/443). Используйте pf или ipfw для фильтрации.
  2. Настройте TLS (Let’s Encrypt через acme-client или Certbot).
  3. Отключите ненужные PHP-функции (disable_functions в php.ini): например exec, shell_exec, system, passthru.
  4. Установите строгие права на папки веб‑приложений: владельцем должен быть отдельный пользователь/группа, а не root. Доступ на запись — только там, где требуется.
  5. Регулярно обновляйте пакеты: pkg update && pkg upgrade -y.
  6. Настройте регулярное резервное копирование баз и файлов.
  7. Включите и проверьте логирование ошибок (nginx error_log, php-fpm log, MySQL error log).
  8. При возможности используйте AppArmor/SELinux‑аналог или chroot в FreeBSD‑контексте и jails.

Альтернативные подходы и варианты

  • MariaDB вместо MySQL: совместима с MySQL API, чаще используется в некоторых дистрибутивах. Пакет — mariadb104-server и mariadb104-client.
  • Использовать порты (FreeBSD ports) для сборки модулей с нужными опциями.
  • Вместо nginx можно использовать Apache (httpd) с mod_php или php-fpm.
  • Для контейнеризации — запускать каждый компонент в отдельном контейнере (Docker/Podman) — на FreeBSD это менее распространено, но возможно через шаги виртуализации.

Когда этот подход не подходит:

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

Ментальная модель: как компоненты взаимодействуют

  • Клиент → Nginx: Nginx принимает HTTP(S) запросы.
  • Nginx → PHP-FPM: если это .php файл, Nginx передаёт запрос в PHP-FPM через fastcgi.
  • PHP → MySQL: PHP использует расширение mysqli или PDO для доступа к базе.
  • Логи: все компоненты пишут логи локально, системный админ агрегирует и анализирует их.

Эта модель помогает быстро диагностировать проблемы: если страница статична — смотрим Nginx; если PHP не работает — смотрим PHP-FPM; если данные не загружаются — проверяем MySQL.

Ролеваые контрольные списки

Для системного администратора:

  • Обновил систему и пакеты.
  • Настроил пользователя и sudo.
  • Запустил и проверил Nginx, MySQL, PHP-FPM.
  • Настроил автоматический запуск сервисов.
  • Настроил firewall и TLS.
  • Настроил резервное копирование.

Для разработчика:

  • Проверил работу PHP и доступ к БД.
  • Установил необходимые PHP-расширения.
  • Проверил права на файлы и доступы API.
  • Провёл базовые нагрузочные тесты локально.

Для специалиста по безопасности:

  • Убедился в отсутствии phpinfo в проде.
  • Проверил disable_functions в php.ini.
  • Проанализировал логи на предмет подозрительных попыток.
  • Настроил ротацию логов и резервное копирование.

Резервирование и откат

Простой план отката:

  1. Снимите бэкап конфигурационных файлов и баз (mysqldump).
  2. При проблемах — восстановите конфигурации и перезапустите сервисы: sudo service nginx reload; sudo service php-fpm restart; sudo service mysql-server restart.
  3. Если обновление пакета вызвало проблему — можно откатить пакет до предыдущей версии из snapshot или пересобрать из портов.

Советы по миграции и совместимости

  • При переходе с другой ОС проверьте пути конфигурации: в FreeBSD большинство конфигов лежит в /usr/local/etc.
  • Путь корня сайта по умолчанию: /usr/local/www/nginx-dist.
  • MySQL-клиенты и серверы совместимы по протоколу, но проверьте версии и кодировки (utf8mb4).

Заключение

Поздравляем — вы установили базовый FEMP стек на FreeBSD 12.1. Эта конфигурация служит отправной точкой для развёртывания приложений на PHP и управления данными через MySQL. Дальше рекомендую настроить HTTPS, автоматические бэкапы, мониторинг и регулярные обновления.

Краткие ключевые действия:

  • Проверить сервисы (nginx, php-fpm, mysql-server).
  • Удалить тестовые страницы и файлы.
  • Настроить TLS и firewall.
  • Подключить резервное копирование.

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

Дополнительные ресурсы и ссылки

  • Руководство по pkg — официальная документация FreeBSD.
  • Документация Nginx — конфигурация виртуальных хостов и fastcgi.
  • Руководство MySQL — безопасная настройка и резервирование.
  • PHP Manual — рекомендации по настройке php.ini и безопасным функциям.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро