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

Зачем это нужно
FEMP — сочетание открытого ПО, которое превращает FreeBSD-сервер в платформу для динамических веб‑сайтов и приложений. Nginx обслуживает HTTP-запросы, PHP обрабатывает динамическую логику, MySQL хранит данные, а FreeBSD обеспечивает стабильную OS-платформу.
Важно: это руководство даёт стартовую настройку для продакшна, но требует дополнительных мер безопасности и резервного копирования перед прямым выкатом в боевую среду.
Что вы получите в результате
- Рабочий Nginx, обслуживающий статические файлы и пересылающий PHP-запросы в PHP-FPM.
- Рабочий MySQL 8.0 сервер с базовой безопасностью.
- PHP 7.4 с возможностью добавления модулей.
- Набор проверочных шагов и контрольных списков для админа и разработчика.
Требования
- Сервер с FreeBSD 12.1.
- Пользователь с root-привилегиями или sudo.
- Базовые навыки работы с консолью FreeBSD.
Краткая методология (мини-метод)
- Проверка версии и обновление системы.
- Установка базовых утилит и создание пользователя.
- Установка и запуск Nginx.
- Установка MySQL + первичная безопасность.
- Установка PHP + PHP-FPM и интеграция с Nginx.
- Тестирование и приёмка.
Начало — обновление системы и создание пользователя
Проверьте версию 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:

После теста удалите 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 подключается и показывает список баз.
Рекомендации по безопасности и жёсткая настройка
- Откройте только нужные порты (80/443). Используйте pf или ipfw для фильтрации.
- Настройте TLS (Let’s Encrypt через acme-client или Certbot).
- Отключите ненужные PHP-функции (disable_functions в php.ini): например exec, shell_exec, system, passthru.
- Установите строгие права на папки веб‑приложений: владельцем должен быть отдельный пользователь/группа, а не root. Доступ на запись — только там, где требуется.
- Регулярно обновляйте пакеты: pkg update && pkg upgrade -y.
- Настройте регулярное резервное копирование баз и файлов.
- Включите и проверьте логирование ошибок (nginx error_log, php-fpm log, MySQL error log).
- При возможности используйте 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.
- Проанализировал логи на предмет подозрительных попыток.
- Настроил ротацию логов и резервное копирование.
Резервирование и откат
Простой план отката:
- Снимите бэкап конфигурационных файлов и баз (mysqldump).
- При проблемах — восстановите конфигурации и перезапустите сервисы: sudo service nginx reload; sudo service php-fpm restart; sudo service mysql-server restart.
- Если обновление пакета вызвало проблему — можно откатить пакет до предыдущей версии из 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 и безопасным функциям.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента