Я вже розповідав, як підняти локальний сервер LAMP у Linux Mint та Ubuntu і у Fedora. Сьогодні зробимо те саме в Arch Linux: Apache, PHP, MariaDB і phpMyAdmin, сайти лежатимуть у домашній теці, кожен зі своєю адресою, а за бажанням – ще й із HTTPS без попереджень браузера.
В Arch усе налаштовується трохи більше вручну, ніж в Ubuntu, зате ти точно знатимеш, що де лежить 😉 Поїхали!
1. Apache
sudo pacman -S apache
Головний файл налаштувань – /etc/httpd/conf/httpd.conf, до нього ми ще не раз повернемося. Відкрий його:
sudo nano /etc/httpd/conf/httpd.conf
і зроби дві речі:
- розкоментуй рядок
LoadModule rewrite_module modules/mod_rewrite.so– без нього не працюватимуть «красиві» адреси в більшості CMS; - за бажанням зміни
ServerAdmin you@example.comна свою пошту.
Сайти я тримаю в домашній теці, у папці LocalServer, – так зручніше працювати з файлами без sudo. Створимо її і дамо Apache право її читати:
mkdir -p ~/LocalServer
chmod o+x ~ ~/LocalServer
Але є нюанс, на якому легко спіткнутися: сервіс Apache в Arch за замовчуванням узагалі не має доступу до домашніх тек (ProtectHome). Щоб це змінити, створюємо для нього доповнення:
sudo systemctl edit httpd
У редакторі, що відкриється, впиши між коментарями:
[Service]
ProtectHome=read-only
Збережи й закрий. Тепер Apache бачить домашню теку, але нічого в ній змінити не може – для локального сервера саме те.
2. PHP через PHP-FPM
Колись PHP підключали до Apache модулем mod_php, і заради нього доводилося перемикати Apache в повільніший режим prefork. Сучасний спосіб – PHP-FPM: PHP працює окремим сервісом, а Apache лише передає йому запити. Режим Apache при цьому не чіпаємо.
sudo pacman -S php php-fpm php-gd
У файлі httpd.conf розкоментуй два модулі:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Створи файл /etc/httpd/conf/extra/php-fpm.conf:
sudo nano /etc/httpd/conf/extra/php-fpm.conf
з таким вмістом:
DirectoryIndex index.php index.html
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
І підключи його в кінці httpd.conf:
Include conf/extra/php-fpm.conf
Тепер увімкнемо потрібні розширення PHP. У файлі /etc/php/php.ini прибери крапку з комою на початку рядків:
extension=gd
extension=iconv
extension=intl
extension=mysqli
extension=pdo_mysql
Розширення zip там уже увімкнене. Запускаємо PHP-FPM і Apache:
sudo systemctl enable --now php-fpm httpd
3. MariaDB
В Arch Linux замість MySQL використовують MariaDB – це його повністю сумісне відгалуження, тож різниці ти не відчуєш, а команди mysql теж працюють.
sudo pacman -S mariadb
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl enable --now mariadb
Друга команда створює початкову базу даних – її потрібно виконати один раз перед першим запуском. Тепер задаємо пароль для користувача root і прибираємо тестові дані:
sudo mariadb-secure-installation
Увійти в консоль бази даних можна так:
sudo mariadb -u root -p
4. Віртуальні хости
Щоб кожен сайт мав свою адресу, налаштуємо віртуальні хости. У httpd.conf розкоментуй рядок Include conf/extra/httpd-vhosts.conf. Сам файл /etc/httpd/conf/extra/httpd-vhosts.conf за замовчуванням містить два приклади з dummy-host.example.com – видали їх, вони лише засмічуватимуть журнали попередженнями. Натомість для кожного сайту додай такий блок (моє ім'я користувача 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:
mkdir ~/LocalServer/mysite
echo "<?php phpinfo();" > ~/LocalServer/mysite/index.php
chmod -R o+rX ~/LocalServer
sudo systemctl restart httpd
Відкрий у браузері http://mysite.localhost – має з'явитися сторінка з інформацією про PHP. Адреси на .localhost система й браузери самі ведуть на твій комп'ютер, тож редагувати /etc/hosts не потрібно. Якщо хочеш іншу назву, наприклад mysite.test, додай у /etc/hosts рядок 127.0.0.1 mysite.test і вкажи ту саму назву в ServerName.
Кожен наступний сайт додається так само: нова папка, новий блок у httpd-vhosts.conf і перезапуск Apache.
5. HTTPS без попереджень браузера
Звичайний самопідписаний сертифікат браузер зустріне червоним попередженням. Набагато зручніше утиліта mkcert: вона створює власний локальний центр сертифікації і додає його в систему й браузери, тож локальні сайти відкриваються із зеленим замочком.
sudo pacman -S mkcert nss
mkcert -install
mkcert -cert-file server.crt -key-file server.key mysite.localhost
sudo mv server.crt server.key /etc/httpd/conf/
У третій команді через пробіл можна перелічити всі свої локальні сайти – один сертифікат підійде для всіх. Тепер у httpd.conf розкоментуй рядки:
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
А в httpd-vhosts.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/httpd/conf/server.crt"
SSLCertificateKeyFile "/etc/httpd/conf/server.key"
</VirtualHost>
Перезапусти Apache – і https://mysite.localhost відкриється без жодних попереджень. Якщо браузер був відкритий під час mkcert -install, перезапусти і його.
6. phpMyAdmin
sudo pacman -S phpmyadmin
Створи файл /etc/httpd/conf/extra/phpmyadmin.conf:
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"
<Directory "/usr/share/webapps/phpMyAdmin">
DirectoryIndex index.php
AllowOverride All
Options FollowSymlinks
Require local
</Directory>
Require local означає, що phpMyAdmin відкриватиметься лише з твого комп'ютера, а не з усієї локальної мережі. Підключи файл у кінці httpd.conf:
Include conf/extra/phpmyadmin.conf
Далі відкрий /etc/webapps/phpmyadmin/config.inc.php. У рядку з $cfg['blowfish_secret'] між лапками потрібен випадковий рядок рівно з 32 символів – його зручно згенерувати командою:
openssl rand -base64 24
А в кінець того ж файлу додай теку для тимчасових файлів, інакше phpMyAdmin виводитиме попередження:
$cfg['TempDir'] = '/tmp/phpmyadmin';
Колись цю теку створювали прямо в каталозі phpMyAdmin і давали їй права 777, але сучасний сервіс PHP-FPM не може писати в системні теки, та й права 777 – погана звичка. А в /tmp phpMyAdmin сам створить потрібну папку.
Перезапусти Apache і відкрий http://localhost/phpmyadmin – входь як root із паролем, який задав у MariaDB.
Якщо щось не працює
# перевірити конфігурацію Apache на помилки
sudo apachectl configtest
# подивитися, чому не запускається сервіс
systemctl status httpd php-fpm mariadb
# журнал помилок сайту
sudo tail /var/log/httpd/mysite-error_log
Повідомлення AH00558: Could not reliably determine the server's fully qualified domain name – лише попередження, сервер працює. Щоб воно зникло, у httpd.conf розкоментуй рядок #ServerName www.example.com:80 і заміни його на ServerName localhost.
Найчастіші причини: помилка в конфігурації (команда configtest покаже, де саме), забуте доповнення з ProtectHome – тоді Apache повертає помилку 403 для сайтів у домашній теці.
Готово! Якщо ти ще не встановив/ла саму систему, допоможе стаття як просто встановити Arch Linux. Більше про веб-розробку – за позначками Веб-розробка та Arch Linux та Manjaro.
Залишилися питання? Пиши в коментарях, розберемося 🙂

Дивовижна стаття! Робив все крок за кроком, пункт за пунктом - результат нічого не працює. Зніс apache і все що ставив, вичистив всі файли, зробив по вікі, щось не заладилося з phpmyadmin, повернувся до цієї статті, пару описаних рухів - відвалилося і те що працювало. Питання до автора - Ви впевнені що у Вас тут все доладньо описано?
Ви мене заінтригували 🙂 Вже майже два роки статті, і я завжди по ній встановлюю сервер, жодного разу не було проблем. Хіба що розробники дистрибутиву щось встигли змінити буквально недавно, зараз спробую встановити на чисту систему. Чекайте на результат.
Щойно встановив чисту найновішу систему Arch Linux на Virtualbox із KDE Plasma на борту. Далі повторив усі кроки з цієї статті, і все працює. Що саме у Вас не виходить?
Дякую, що відгукнулися :) Вже все працює. Ставив по вікі. Остання проблема з якою був зіткнувся, це неможливість зайти у phpMyadmin через графічний інтерфейс. Вирішив створенням нового користувача і надання йому прав https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7/763359#763359 А взагалі то я ДЯКУЮ Вам за Ваші статті. Не першу я читаю. Вважаю, добре що вони такі є, особливо українською мовою.
Щиро дякую за гарний відгук! І, звичайно, я дуже радий, що у Вас усе вийшло! Заходьте ще, із задоволенням допоможу, чим зможу 😉