Как я подружил PHP 8.3 с Apache на FastPanel и не сошел с ума
FastPanel — удобно, но со своими тараканами
Мой сайт mysurik.ru работает на FastPanel. Это панель управления хостингом на nginx + Apache. Удобная штука: сайты добавляются в два клика, SSL Let’s Encrypt автоматом, базы MySQL через phpMyAdmin.
Но когда я решил поменять версию PHP, началось веселье.
Как переключить PHP на FastPanel
По умолчанию FastPanel ставит PHP 8.3 от Apache (mod_php). Работает от пользователя fastuser. В админке FastPanel можно выбрать версию PHP для каждого сайта отдельно: 7.4, 8.0, 8.1, 8.2, 8.3.
Я хотел подключить PHP 8.3, потому что WordPress 7.0 рекомендует именно его. В админке выбрал — и всё. PHP сменился без перезагрузки Apache. Магия.
Но потом WordPress начал падать с ошибкой «Allowed memory size exhausted». Пришлось лезть в php.ini:
/etc/php/8.3/apache2/php.ini
Там я увеличил memory_limit до 512M, upload_max_filesize до 100M, post_max_size до 100M. После правок перезагрузил Apache через FastPanel — всё заработало.
Фокус с пользователем fastuser
Важный нюанс: в FastPanel Apache работает от пользователя fastuser (а не www-data, как обычно). Это значит, что файлы на сайте должны принадлежать fastuser, иначе WordPress не сможет загружать картинки, обновлять плагины, устанавливать темы.
Я наступил на эти грабли: скопировал сайт на сервер через root, и файлы принадлежали root. WordPress ругался «Unable to create directory». Пришлось менять владельца:
chown -R fastuser:fastuser /var/www/fastuser/data/www/mysurik.ru
После этого всё заработало.
FastPanel PHP vs обычный PHP
В FastPanel есть два PHP: системный (через Apache mod_php) и отдельный PHP для CLI (/opt/fphp/bin/php). Они могут быть разных версий.
Я долго не мог понять, почему wp-cli не работает — а он использовал системный PHP, а не fastpanel-ский. Пришлось вызывать его явно:
/opt/fphp/bin/php wp-cli.phar
Теперь занёс это в алиас в .bashrc.
Итог
FastPanel — нормальная панель для небольших сайтов. Для WordPress она даже удобнее, чем чистая настройка nginx + Apache вручную. Главное — помнить про пользователя fastuser и разные версии PHP.
FastPanel — почему я выбрал эту панель
Когда я впервые увидел FastPanel, подумал «очередная админка для хостов». Но покопавшись, понял — вещь. Она легче Vestacp, быстрее ISPmanager и, главное, бесплатная. Ставится одной командой, весит копейки, а делает всё то же самое: сайты, почта, БД, DNS.
Установка прошла гладко. Скрипт сам подтянул Apache 2.4, PHP 8.3 и MySQL 8. Через 10 минут после установки у меня уже работал тестовый сайт. Без лишних телодвижений.
Первая настройка PHP — тут я офигел
Открыл php.ini — а там стандартные 8 MB для upload_max_filesize. У меня на сайте тема с демками весит 15 MB. Пришлось лезть в панель FastPanel, там есть отдельный раздел для PHP-настроек. Поменял на 32 MB, сохранил, перезагрузил PHP-FPM.
Но самое смешное — забыл про Apache. Без перезагрузки самого Apache изменения PHP не применяются к mod_php. Потратил час на поиск проблемы, хотя решение было на поверхности: systemctl reload apache2.
mod_php vs PHP-FPM — вечный спор
FastPanel по умолчанию ставит mod_php для Apache. Это удобно — не надо настраивать прокси, всё работает из коробки. Но mod_php жрёт память как не в себя. На тестовом сервере с 2 GB RAM Apache отжирал 500 MB даже при пустом сайте. Переключился на PHP-FPM — память упала до 150 MB. Разница колоссальная.
Переключение заняло 5 минут: зашёл в настройки FastPanel, выбрал PHP-FPM, указал пул, перезагрузил сервисы. И всё. Для тех, кто не знает — советую сразу ставить на PHP-FPM. mod_php — прошлый век.
Что я понял про FastPanel за неделю
Панель отличная для small-scale проектов. Если у тебя один-два сайта на WordPress — она справится идеально. Но когда сайтов станет 10+, начинаются тормоза в интерфейсе и путаница с пулами PHP. Я упёрся в этот потолок где-то на 8 сайте. Пришлось переезжать на nginx + ручное управление.
Мой вердикт: FastPanel хороша как стартовая площадка. Для новичка — лучшее, что есть. Но как только почувствуешь, что панель мешает — не бойся сносить и ставить всё руками. Это следующий уровень.
Расширю рассказ о работе с PHP 8.3 на FastPanel. FastPanel — удобно, но со своими тараканами. Мой сайт mysurik.ru работает на FastPanel. Это панель управления хостингом на nginx + Apache. Удобная штука: сайты добавляются в два клика, SSL Let’s Encrypt автоматом, базы MySQL через phpMyAdmin. Но когда я решил поменять версию PHP, началось веселье. Панель берет на себя рутину, но за это приходится мириться с её архитектурой. Если понимать, как она устроена, — работа идёт гладко. Если нет — наступаешь на грабли и теряешь часы.
Как переключить PHP на FastPanel. По умолчанию FastPanel ставит PHP 8.3 от Apache (mod_php). Работает от пользователя fastuser. В админке FastPanel можно выбрать версию PHP для каждого сайта отдельно: 7.4, 8.0, 8.1, 8.2, 8.3. Я хотел подключить PHP 8.3, потому что WordPress 7.0 рекомендует именно его. В админке выбрал — и всё. PHP сменился без перезагрузки Apache. Магия. Выбор версии PHP в панели — это большая фишка FastPanel: разные сайты могут работать на разных версиях. Для совместимости со старыми проектами это очень удобно. Переключение занимает один клик в админке.
Почему важна свежая версия PHP. Каждая новая версия PHP — это не только новые фичи, но и ускорение. PHP 8.3 быстрее PHP 7.4 на десятки процентов. WordPress 7.0 рекомендует PHP 8.3 именно из-за скорости и безопасности. Более того, старые версии PHP со временем лишаются поддержки — а значит, накапливают неисправленные уязвимости. Держать актуальную версию PHP — это вопрос не только производительности, но и безопасности. Обновление версии PHP — один из самых эффективных способов ускорить сайт без правок кода. Проверьте версию своего PHP — возможно, вы теряете скорость.
Проблема с памятью. Потом WordPress начал падать с ошибкой «Allowed memory size exhausted». Пришлось лезть в php.ini: /etc/php/8.3/apache2/php.ini. Там я увеличил memory_limit до 512M, upload_max_filesize до 100M, post_max_size до 100M. После правок перезагрузил Apache через FastPanel — всё заработало. Ошибка памяти — классика WordPress: тяжёлые темы, плагины и WooCommerce требуют больше памяти, чем стандартные 128 MB. Диагностика проста: ошибка «Allowed memory size exhausted» прямо указывает на лимит. Увеличиваете memory_limit — и сайт оживает. Это одна из первых настроек, которую я делаю после установки WordPress.
Почему именно 512 MB. Стандартный memory_limit в 128 MB хватает для простого блога, но для магазина или сайта с тяжёлыми плагинами — нет. Я поставил 512 MB — это комфортный запас для большинства WordPress-сайтов. Больше обычно не нужно: 512 MB хватает даже для WooCommerce с десятком активных плагинов. При этом не забывайте про upload_max_filesize и post_max_size: если ваши темы с демо-данными весят десятки мегабайт, стандартные 8 MB вас сломают. Эти три параметра — минимальный набор, который нужно проверить на любом свежем WordPress.
Фокус с пользователем fastuser. Важный нюанс: в FastPanel Apache работает от пользователя fastuser (а не www-data, как обычно). Это значит, что файлы на сайте должны принадлежать fastuser, иначе WordPress не сможет загружать картинки, обновлять плагины, устанавливать темы. Я наступил на эти грабли: скопировал сайт на сервер через root, и файлы принадлежали root. WordPress ругался «Unable to create directory». Пришлось менять владельца: chown -R fastuser:fastuser /var/www/fastuser/data/www/mysurik.ru. После этого всё заработало. Это самая частая причина «не могу загрузить файл» на FastPanel — неправильный владелец.
Как избежать этой проблемы. Правило простое: все файлы сайта должны принадлежать fastuser:fastuser, а папки должны иметь права 755, файлы — 644. Когда вы копируете сайт через root или распаковываете архив из-под root, владелец становится root — и WordPress отказывается работать с файлами. Решение: после копирования всегда делайте chown -R fastuser:fastuser на папку сайта. Я добавил это в свой чек-лист переезда сайтов. Запись занимает одну команду и избавляет от получаса танцев с правами. Запомните: на FastPanel владелец — fastuser, а не www-data.
FastPanel PHP vs обычный PHP. В FastPanel есть два PHP: системный (через Apache mod_php) и отдельный PHP для CLI (/opt/fphp/bin/php). Они могут быть разных версий. Я долго не мог понять, почему wp-cli не работает — а он использовал системный PHP, а не fastpanel-ский. Пришлось вызывать его явно: /opt/fphp/bin/php wp-cli.phar. Теперь занёс это в алиас в .bashrc. Эта тонкость сбивает многих: системный PHP может быть другой версии, чем PHP для сайтов. Wp-cli использует тот PHP, который указан в shebang или PATH. Решение — вызывать wp-cli через панельный PHP явно. Алиас в .bashrc решает проблему навсегда.
Почему это важно. Разные версии PHP для сайтов и CLI — это источник путаницы. Вы можете получить версию 8.2 для сайта и 7.4 для CLI — и не понимать, почему wp-cli ведёт себя иначе. Моя рекомендация: всегда проверяйте версии обеих PHP: php -v (системный) и /opt/fphp/bin/php -v (панельный). Если вам нужен wp-cli — заводите алиас на панельный PHP. Так вы будете работать с той же версией, что и ваши сайты. Это убирает целый класс проблем с совместимостью. Одна строчка в .bashrc — и больше никакой путаницы.
FastPanel — почему я выбрал эту панель. Когда я впервые увидел FastPanel, подумал «очередная админка для хостов». Но покопавшись, понял — вещь. Она легче Vestacp, быстрее ISPmanager и, главное, бесплатная. Ставится одной командой, весит копейки, а делает всё то же самое: сайты, почта, БД, DNS. Установка прошла гладко. Скрипт сам подтянул Apache 2.4, PHP 8.3 и MySQL 8. Через 10 минут после установки у меня уже работал тестовый сайт. Без лишних телодвижений. Для начинающего администратора это идеальный старт: не нужно вручную настраивать веб-сервер, почту и базы.
Первая настройка PHP — тут я офигел. Открыл php.ini — а там стандартные 8 MB для upload_max_filesize. У меня на сайте тема с демками весит 15 MB. Пришлось лезть в панель FastPanel, там есть отдельный раздел для PHP-настроек. Поменял на 32 MB, сохранил, перезагрузил PHP-FPM. Но самое смешное — забыл про Apache. Без перезагрузки самого Apache изменения PHP не применяются к mod_php. Потратил час на поиск проблемы, хотя решение было на поверхности: systemctl reload apache2. Этот урок я запомнил навсегда: после изменения PHP-настроек всегда перезагружайте Apache. Один момент, который экономит час.
mod_php vs PHP-FPM — вечный спор. FastPanel по умолчанию ставит mod_php для Apache. Это удобно — не надо настраивать прокси, всё работает из коробки. Но mod_php жрёт память как не в себя. На тестовом сервере с 2 GB RAM Apache отжирал 500 MB даже при пустом сайте. Переключился на PHP-FPM — память упала до 150 MB. Разница колоссальная. Переключение заняло 5 минут: зашёл в настройки FastPanel, выбрал PHP-FPM, указал пул, перезагрузил сервисы. И всё. Для тех, кто не знает — советую сразу ставить на PHP-FPM. mod_php — прошлый век.
Почему PHP-FPM лучше. PHP-FPM — это отдельный процесс, который держит пул воркеров и принимает запросы через FastCGI. Он не занимает память, пока нет запросов, и позволяет точно настраивать количество воркеров. mod_php — это модуль Apache, который загружает PHP в каждый процесс Apache, съедая память на каждый воркер. При равной нагрузке PHP-FPM потребляет в разы меньше памяти. Плюс у PHP-FPM есть отдельный пул для каждого сайта — можно ограничивать ресурсы. Если сервер слабый или сайтов несколько — PHP-FPM обязателен. Переход с mod_php на PHP-FPM — это самый быстрый способ освободить память.
Что я понял про FastPanel за неделю. Панель отличная для small-scale проектов. Если у тебя один-два сайта на WordPress — она справится идеально. Но когда сайтов станет 10+, начинаются тормоза в интерфейсе и путаница с пулами PHP. Я упёрся в этот потолок где-то на 8 сайте. Пришлось переезжать на nginx + ручное управление. Любая панель имеет предел: чем больше сайтов, тем сложнее управлять ими через GUI. Панель удобна для старта, но по мере роста появляется потребность в тонкой ручной настройке. Переход на ручное управление — это естественный этап взросления администратора.
Мой вердикт. FastPanel хороша как стартовая площадка. Для новичка — лучшее, что есть. Но как только почувствуешь, что панель мешает — не бойся сносить и ставить всё руками. Это следующий уровень. Мой путь был таким: начал с FastPanel, понял архитектуру, набил шишки, потом перешёл на ручное управление с полным пониманием того, что делаю. Панель дала мне фундамент. Если вы новичок — начинайте с FastPanel, она не даст сбиться. А когда поймёте, как всё устроено, — сами решите, оставаться или расти дальше.