Якщо ти робиш сайти, рано чи пізно захочеш працювати з ними на своєму комп'ютері, а не одразу на хостингу: швидко, без інтернету і без ризику зламати живий сайт. Для цього потрібен локальний сервер. У Linux Mint та Ubuntu його можна підняти за пів години з безкоштовних компонентів, які в світі веб-розробки називають LAMP: Linux, Apache, MySQL і PHP.

Нижче покроково: встановлюємо веб-сервер Apache, базу даних MySQL, PHP і phpMyAdmin, а потім налаштовуємо кілька сайтів, кожен зі своєю адресою. Інструкція підійде і для Debian та інших систем на основі Ubuntu.

1. Встановлення веб-сервера Apache

Відкривай термінал і вводь:

sudo apt update
sudo apt install apache2

Одразу перевір, чи сервер працює: відкрий у браузері адресу localhost (або 127.0.0.1). Маєш побачити стандартну сторінку Apache:

Стандартна сторінка Apache після встановлення в Ubuntu

2. Встановлення бази даних MySQL

sudo apt install mysql-server

Якщо тобі ближча MariaDB (вона повністю сумісна з MySQL і стоїть за замовчуванням у Debian), став її замість MySQL:

sudo apt install mariadb-server

У свіжих версіях Ubuntu та Linux Mint користувач root у MySQL входить без пароля, але тільки через sudo. Перевір:

sudo mysql

Колись я радив міняти пароль і спосіб входу для самого root, але простіше й безпечніше створити окремого користувача для роботи з сайтами й phpMyAdmin. Не виходячи з MySQL, введи (заміни ім'я і пароль на свої):

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'твій_пароль';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Тепер можна входити в MySQL уже без sudo:

mysql -u admin -p

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

3. Встановлення PHP

PHP і найпотрібніші розширення ставляться однією командою:

sudo apt install php libapache2-mod-php php-mysql php-gd php-mbstring php-xml php-curl php-zip php-intl

Щоб перевірити, що PHP працює, створи у папці /var/www/html файл info.php:

echo "<?php phpinfo();" | sudo tee /var/www/html/info.php

Відкрий localhost/info.php – має з'явитися велика таблиця з налаштуваннями PHP. Переконався/лась, що все працює? Видали цей файл, на сервері він не потрібен:

sudo rm /var/www/html/info.php

4. Встановлення phpMyAdmin

phpMyAdmin – це зручний графічний інтерфейс для роботи з базами даних прямо в браузері.

sudo apt install phpmyadmin

Під час встановлення система запитає, з яким веб-сервером працювати. Обери apache2. Увага: пункт треба саме позначити клавішею Пробіл (з'явиться зірочка), а вже потім натиснути Enter, інакше phpMyAdmin не підключиться до Apache:

Вибір веб-сервера apache2 під час встановлення phpMyAdmin

Далі погоджуйся на автоматичне налаштування бази даних для phpMyAdmin:

Налаштування бази даних для phpMyAdmin через dbconfig-common

І придумай пароль для службового користувача phpMyAdmin (запам'ятовувати його не обов'язково, для входу ми використаємо користувача, створеного вище):

Пароль службового користувача phpMyAdmin

Тепер відкрий localhost/phpmyadmin і увійди під користувачем admin із паролем, який ти задав/ла на другому кроці:

Сторінка входу в phpMyAdmin

Якщо phpMyAdmin не відкривається

Найчастіше причина в тому, що на етапі вибору веб-сервера не було позначено apache2. Виправити просто – підключи конфігурацію вручну і перезапусти Apache:

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2

Якщо після оновлення phpMyAdmin сиплеться помилками

Буває, що після оновлення системи на сторінці phpMyAdmin з'являється ціле простирадло попереджень на кшталт Deprecation Notice. Я свого часу добряче злякався за свої бази, але насправді з ними все гаразд – просто версії пакетів розійшлися. Найчастіше допомагає перевстановлення:

sudo apt install --reinstall phpmyadmin

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

5. Кілька сайтів на локальному сервері

За замовчуванням Apache показує один сайт із папки /var/www/html. Але якщо ти працюєш над кількома проєктами одночасно, зручніше, щоб кожен мав свою адресу, наприклад mysite.localhost. Це робиться за допомогою віртуальних хостів.

Папка для сайту

Створи папку для нового сайту і віддай її своєму користувачу, залишивши групу веб-сервера:

sudo mkdir -p /var/www/mysite
sudo chown -R $USER:www-data /var/www/mysite
sudo chmod -R 775 /var/www/mysite

Колись я й сам радив ставити права 777, «щоб усе точно працювало». Не роби так навіть локально: 775 і правильний власник розв'язують ті самі проблеми без зайвого ризику.

Для зручності можна зробити ярлик на папку у своїй домашній теці:

ln -s /var/www/mysite ~/mysite

Файл налаштувань віртуального хоста

Створи файл конфігурації:

sudo nano /etc/apache2/sites-available/mysite.conf

І встав у нього:

<VirtualHost *:80>
    ServerName mysite.localhost
    DocumentRoot /var/www/mysite
    <Directory /var/www/mysite>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

AllowOverride All дозволяє сайту використовувати власний файл .htaccess – без цього не працюватимуть «красиві» адреси в більшості CMS.

Вмикаємо сайт

sudo a2ensite mysite
sudo a2enmod rewrite
sudo systemctl reload apache2

Адреса сайту

Адреси на .localhost сучасні браузери самі ведуть на твій комп'ютер, тож http://mysite.localhost має відкритися одразу. Якщо хочеш іншу назву, наприклад просто mysite чи mysite.test, додай її у файл /etc/hosts:

127.0.0.1 localhost mysite.test

і не забудь вказати ту саму назву в ServerName. Кожен наступний сайт додається так само: нова папка, новий файл у sites-available, a2ensite – і готово.

Корисні команди для керування сервером

# перезапустити Apache
sudo systemctl restart apache2

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

# подивитися журнал помилок
sudo tail -f /var/log/apache2/error.log

# зупинити або запустити MySQL
sudo systemctl stop mysql
sudo systemctl start mysql

Користуєшся іншою системою? У мене є інструкції для локального сервера на Arch Linux і у Fedora Linux, а також для Windows: локальний сервер на Windows і швидкий варіант через Laragon. А редактор коду для роботи з сайтами допоможе налаштувати стаття про VS Code для PHP та JavaScript. Більше матеріалів – за позначкою Веб-розробка.