Про локальний сервер я вже писав для Linux Mint та Ubuntu і для Arch Linux. Тепер черга Fedora. Тут чимало вже зроблено за тебе: PHP одразу підключений до Apache, а phpMyAdmin працює щойно після встановлення. Зате є SELinux, який спершу не пустить Apache до сайтів у домашній теці. Розберемося і з ним 😉

Як і в інших статтях, сайти лежатимуть у теці LocalServer у домашньому каталозі, кожен зі своєю адресою, а за бажанням – ще й із HTTPS без попереджень браузера.

1. Apache і PHP

sudo dnf install httpd php php-fpm php-mysqlnd php-gd php-intl php-mbstring php-zip

У Fedora PHP працює через PHP-FPM – окремий сервіс, якому Apache передає запити. Налаштовувати тут нічого не треба: файл /etc/httpd/conf.d/php.conf уже все під'єднує. Потрібні розширення PHP теж ставляться окремими пакетами і вмикаються самі, тож php.ini редагувати не доведеться.

Запускаємо обидва сервіси й додаємо їх в автозапуск:

sudo systemctl enable --now httpd php-fpm

Відкрий у браузері http://localhost – має з'явитися стандартна сторінка Fedora про те, що сервер працює.

Брандмауер для локального сервера чіпати не потрібно: з власного комп'ютера сайти відкриваються і так. Порти 80 і 443 у firewalld відкривай лише тоді, коли хочеш заходити на сайти з інших пристроїв у мережі.

2. MariaDB

sudo dnf install mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation

Остання команда задає пароль для користувача root і прибирає тестові дані. На перше питання (поточний пароль) просто натисни Enter, на питання про unix_socket дай відповідь n, далі задай пароль і на решту питань погоджуйся.

Якщо тобі потрібен саме MySQL, у репозиторіях Fedora є і пакет mysql-server, але ставити його разом із MariaDB не можна – обери щось одне. Для більшості сайтів різниці не буде.

3. Сайти в домашній теці і SELinux

Створимо теку для сайтів і перший тестовий сайт:

mkdir -p ~/LocalServer/mysite
echo "<?php phpinfo();" > ~/LocalServer/mysite/index.php
chmod o+x ~ ~/LocalServer
chmod -R o+rX ~/LocalServer

Дві команди chmod дозволяють Apache зайти в домашню теку і прочитати файли сайту. Тепер створи файл віртуального хоста /etc/httpd/conf.d/mysite.conf:

sudo nano /etc/httpd/conf.d/mysite.conf

з таким вмістом (моє ім'я користувача ivaniura зміни на своє):

<VirtualHost *:80>
    ServerName mysite.localhost
    DocumentRoot "/home/ivaniura/LocalServer/mysite"
    <Directory "/home/ivaniura/LocalServer/mysite">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/mysite-error_log"
    CustomLog "/var/log/httpd/mysite-access_log" common
</VirtualHost>

Apache у Fedora сам підхоплює всі файли .conf з теки conf.d, тож нічого ніде підключати не треба. Перезапусти його:

sudo systemctl restart httpd

Відкриваєш http://mysite.localhost і… бачиш помилку 403. Права на файли правильні, конфігурація теж – це спрацював SELinux. Він стежить, щоб веб-сервер читав лише ті файли, які для нього призначені, а все в домашній теці для нього заборонене. Тому познач теку з сайтами як вміст для веб-сервера:

sudo semanage fcontext -a -t httpd_sys_content_t "/home/ivaniura/LocalServer(/.*)?"
restorecon -R ~/LocalServer

Перша команда раз і назавжди запам'ятовує правило для теки і всього, що в ній, а друга застосовує його до файлів, які вже там лежать. Онови сторінку – тепер має з'явитися інформація про PHP. Адреси на .localhost система і браузери самі ведуть на твій комп'ютер, тож /etc/hosts редагувати не потрібно.

Нові файли, створені просто в LocalServer, отримують правильну мітку самі. А от файли, які ти переносиш туди з інших місць (наприклад, розпакований архів із «Завантажень»), зберігають стару мітку, і на них знову буде 403. Лікується тією самою командою:

restorecon -R ~/LocalServer

Кожен наступний сайт додається так само: нова тека в LocalServer, новий файл .conf у /etc/httpd/conf.d/ і перезапуск Apache. Правило SELinux повторювати вже не треба.

4. HTTPS без попереджень браузера

Для HTTPS візьмемо утиліту mkcert: вона створює власний локальний центр сертифікації і додає його в систему і браузери, тож локальні сайти відкриваються з замочком і без червоних попереджень.

sudo dnf install mod_ssl mkcert nss-tools
mkcert -install
mkcert -cert-file mysite.crt -key-file mysite.key mysite.localhost

Тепер переносимо сертифікат і ключ до системних тек:

sudo mv mysite.crt /etc/pki/tls/certs/
sudo mv mysite.key /etc/pki/tls/private/
sudo restorecon -v /etc/pki/tls/certs/mysite.crt /etc/pki/tls/private/mysite.key

Остання команда тут обов'язкова – це той самий SELinux. Перенесені файли зберігають мітку домашньої теки, і без restorecon Apache просто не запуститься, бо не зможе прочитати сертифікат.

Додай у файл /etc/httpd/conf.d/mysite.conf ще один блок, уже для порту 443:

<VirtualHost *:443>
    ServerName mysite.localhost
    DocumentRoot "/home/ivaniura/LocalServer/mysite"
    <Directory "/home/ivaniura/LocalServer/mysite">
        AllowOverride All
        Require all granted
    </Directory>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/mysite.crt
    SSLCertificateKeyFile /etc/pki/tls/private/mysite.key
</VirtualHost>

Перезапусти Apache – і https://mysite.localhost відкриється без жодних попереджень. Якщо браузер був відкритий під час mkcert -install, перезапусти і його.

5. phpMyAdmin

sudo dnf install phpMyAdmin
sudo systemctl restart httpd

Ось і все 🙂 Пакет у Fedora вже налаштований: phpMyAdmin відкривається лише з твого комп'ютера, а секретний ключ і теки для тимчасових файлів створено автоматично. Заходь на http://localhost/phpmyadmin як root із паролем, який задав/ла в MariaDB.

Якщо в тебе багато баз і в списку зліва важко щось знайти, зайві можна сховати – як це зробити, я писав у статті як приховати непотрібні бази даних в phpMyAdmin.

Якщо щось не працює

# перевірити конфігурацію Apache на помилки
sudo apachectl configtest

# подивитися, чому не запускається сервіс
systemctl status httpd php-fpm mariadb

# що саме заблокував SELinux
sudo ausearch -m avc -ts recent

# журнал помилок сайту
sudo tail /var/log/httpd/mysite-error_log

У Fedora помилка 403 чи сервіс, який не запускається, найчастіше означають саме SELinux: команда ausearch покаже, до якого файлу Apache не пустили, а restorecon зазвичай усе виправляє. Вимикати SELinux заради локального сервера не варто – він захищає всю систему, а не лише сайти.

Повідомлення AH00558: Could not reliably determine the server's fully qualified domain name – лише попередження, сервер працює. Щоб воно зникло, у /etc/httpd/conf/httpd.conf розкоментуй рядок #ServerName www.example.com:80 і заміни його на ServerName localhost.

Готово! Тепер можна налаштувати редактор коду – про це стаття налаштування VS Code для роботи з веб-додатками на PHP та JS. Більше про веб-розробку – за позначками Веб-розробка та Fedora Linux.

Залишилися питання? Пиши в коментарях, розберемося 🙂