Про локальний сервер я вже писав для 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.
Залишилися питання? Пиши в коментарях, розберемося 🙂


Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.