LAMP — це комбінація операційної системи та відкритого програмного забезпечення, призначених для організації роботи динамічних веб-сайтів та веб-додатків. Акронім LAMP є похідним від перших літер компонентів, що входять до його складу: ОС Linux, веб-сервер Apache, бази даних MySQL та мова програмування PHP/Perl/Python.

Встановлення та налаштування LAMP дещо відрізняється залежно від вибраного дистрибутива ОС Linux. Ця стаття націлена на користувачів найпопулярніших дитрибутивів Linux: CentOS та Debian/Ubuntu.

Підключаємося до сервера SSH з правами root-користувача і починаємо встановлення.

Насамперед, оновлюємо інформацію про нові пакети та їх залежність в офіційних репозиторіях.

Вводимо команду:

Для CentOS:

yum -y update

Для Debian, Ubuntu:

apt-get -y update

Зміст

  1. Встановлення веб-сервера Apache
  2. Встановлення сервера баз даних MySQL
  3. Встановлення PHP
  4. Встановлення phpMyAdmin
  5. Оптимізація LAMP для сайту

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

Для CentOS:

yum -y install httpd

Для Debian, Ubuntu:

apt-get -y install apache2

Запускаємо встановлений веб-сервер:

Для CentOS:

service httpd start

Для Debian, Ubuntu:

service apache2 start

Якщо веб-сервер був запущений після інсталяції автоматично, ми побачимо відповідне повідомлення про це. Також ми завжди можемо перевірити поточний стан веб-сервера (втім, як будь-якого іншого сервісу) командою:

Для CentOS:

service httpd status

Для Debian, Ubuntu:

service apache2 status

Тепер можна протестувати інсталяцію Apache.

Перейдемо в браузері IP-адресою нашого сервера, наприклад http://0.0.0.0, де замість нулів ми вказуємо IP, який був виданий при створенні сервера.

Показником успішного встановлення веб-сервера в CentOS буде наступна тестова сторінка:

Тестова сторінка Apache в CentOS

У Debian, Ubuntu ми можемо побачити такий напис:

Тестова сторінка Apache в Debian, Ubuntu

Тепер, коли Apache встановлений та працює, слід додати його в автозавантаження, щоб він запуститься автоматично у разі перезавантаження сервера:

Для CentOS:

chkconfig httpd on

Для Debian, Ubuntu :

update-rc.d apache2 defaults

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

MySQL — система керування базами даних, що використовується для структуризації та пошуку даних.

Щоб встановити MySQL-сервер виконуємо команду:

Для CentOS:

yum -y install mysql-server

Для Debian, Ubuntu:

apt-get -y install mysql-server

Після встановлення в Debian Ubuntu з’явиться вікно для введення нового пароля для root-користувача MySQL сервера. Так як встановлення за замовчуванням передбачає підключення до сервера під root’ом без введення пароля, рекомендується виправити це, встановивши пароль відразу. Як встановити рутовий пароль у CentOS буде описано нижче.

Запускаємо MySQL сервер і додаємо його в автозапуск:

Для CentOS:

service mysqld start
chkconfig mysqld on

Для Debian, Ubuntu:

service mysql start
update-rc.d mysql defaults

Потім запускаємо скрипт, який допоможе нам встановити рутовий пароль (якщо його ще не було встановлено), а також виконати деякі інші налаштування безпеки:

mysql_secure_installation

Послідовно нам буде поставлено кілька питань, на всі з яких рекомендується відповідати позитивно, виходячи з міркувань безпеки (Y або просто Enter):

Set root password? [Y/n] Встановлення пароля для root, якщо його не було встановлено раніше.

Remove anonymous users? [Y/n] Видалення анонімного користувача, який дозволяє логінуватися в MySQL, не маючи облікового запису. Ця можливість призначена лише для тестових цілей.

Disallow root login remotely? [Y/n] Заборона логінуватися під рутом віддалено, залишити доступ тільки з ‘localhost’.

Remove test database and access to it? [Y/n] Видалення тестової бази даних.

Reload privilege tables now? [Y/n] Застосування щойно виконаних змін.

Перевіримо, чи можна підключитися до MySQL під рутом без введення пароля. Вводимо команду:

mysql -u root

Якщо ми бачимо помилку, вказану нижче, все коректно працює — як і має бути, нас не пускає під рутом без пароля.

ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)

Якщо ми спробуємо додати ключ -p і введемо пароль рута, нас має вдало пустити.

mysql -u root -p

Якщо не пускає на цьому етапі, перевіряємо ще раз правильність введення пароля.

Відразу встановлюємо в налаштуваннях MyISAM двигуном для зберігання таблиць за замовчуванням, що показує кращу продуктивність на завантажених серверах. Це стане нам у нагоді. Для цього відкриваємо конфігураційний файл MySQL:

Для CentOS:

nano /etc/my.cnf

Для Debian, Ubuntu:

nano /etc/mysql/my.cnf

і додаємо наступні рядки:

default-storage-engine=MyISAM
default-tmp-storage-engine=MyISAM
skip-innodb

Перезапускаємо MySQL сервер:

Для CentOS:

service mysqld restart

Для Debian, Ubuntu:

service mysql restart

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

PHP — скриптова мова програмування, необхідна для більшості програмного забезпечення на сервері, включаючи форуми, системи управління контентом сайту, наприклад, WordPress і т.д.

Встановимо PHP та модуль для підтримки MySQL у PHP:

Для CentOS:

yum -y install php php-mysql

Для Debian, Ubuntu:

apt-get -y install php5 php5-mysql

Також нам знадобляться деякі додаткові модулі, наприклад: gd (робота із зображеннями), mbstring (підтримка мульбайтових кодувань, включаючи UTF-8), mcrypt (підтримка шифрування)

Для їх встановлення виконаємо:

Для CentOS:

yum -y install php-gd php-mbstring php-mcrypt

Для Debian, Ubuntu:

apt-get -y install php5-gd php5-mbstring php5-mcrypt

Перезапускаємо Apache:

Для CentOS:

service httpd restart

Для Debian, Ubuntu:

service apache2 restart

Щоб протестувати інсталяцію PHP, необхідно створити файл з PHP функцією і помістити його в рутову папку Apache. Ця папка відрізняється в розглянутих дистрибутивах, тому виконаємо:

Для CentOS:

cd /var/www/html

Для Debian, Ubuntu:

cd /var/www

Створюємо та відкриваємо файл для редагування

nano phptest.php

Вставляємо код, наведений нижче, зберігаємо (Ctrl+O) і виходимо з текстового редактора (Ctrl+X):

<?php phpinfo(); ?>

Тепер відкриємо phptest.php у браузері, щоб перевірити працездатність PHP та його модулів

http://0.0.0.0/phptest.php , де замість нулів ми вказуємо IP, який був виданий під час створення сервера.

Тестова сторінка зв'язки Apache-PHP у Debian, Ubuntu

Ця таблиця означає, що PHP встановлено та працює. Скролив таблицю вниз, ми можемо також побачити список встановлених модулів для PHP.

Наш тестовий PHP файл нам більше не потрібен, тому його можна видалити (для підтвердження видалення достатньо натиснути клавішу ‘Y’ і потім Enter):

rm phptest.php

Отже, Apache, MySQL та PHP встановлені. Залишилося перевірити, як працює підключення до бази даних PHP. Для цього створимо ще один файл у тій же папці, де ми зараз знаходимося та назвемо його dbtest.php

Скопіюємо в нього наведений нижче код, замінивши password нашим рутовим паролем MySQL. Не забуваймо зберегти файл.

<?php
$connect = mysql_connect("localhost", "root", "password");
if (!$connect)
{
die('ERROR!'. mysql_error());
}
else
{
echo "Connected successfully!";
}
mysql_close($connect);
?>

Відкриємо dbtest.php у браузері, ввівши в адресний рядок http://0.0.0.0/dbtest.php, де замість нулів ми вказуємо IP, який був виданий при створенні сервера.

Якщо ми все зробили правильно, з’явиться повідомлення про успішне підключення.

Тестова сторінка зв'язки Apache-MySQL-PHP

Можливі проблеми при відкритті dbtest.php у браузері

Ми можемо побачити такі помилки:

1) ERROR! Can’t connect to local MySQL server через сокет ‘/var/run/mysqld/mysqld.sock’ (2)

Ця помилка означає, що MySQL сервіс зупинено і слід запустити його, виконавши:

Для CentOS:

service mysqld start

Для Debian, Ubuntu:

service mysql start

2) ERROR! Access denied for user ‘root’@’localhost’ (using password: YES)

Потрібно перевірити ще раз рутовий пароль в dbtest.php, так він був введений неправильно.

3) Перед нами порожня біла сторінка.

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

Якщо перевірка була успішною, видаляємо тестовий файл:

rm dbtest.php

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

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

Для CentOS:

За замовчуванням phpMyAdmin не міститься в офіційних репозиторіях CentOS, тому ми скористаємося репозиторієм EPEL (Extra Packages for Enterprise Linux).

Завантажуємо EPEL:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Встановлюємо EPEL:

rpm -Uvh epel-release-6*.rpm

Видаляємо завантажений файл, тому що він нам більше не знадобиться:

rm epel-release-6*.rpm

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

yum -y install phpmyadmin

За замовчуванням, phpMyAdmin у CentOS налаштований так, щоб не дозволяти нікому підключатися до нього. Ми збираємося це виправити, тому що без цього установка не мала сенсу.

Відкриваємо конфіграційний файл

nano /etc/httpd/conf.d/phpMyAdmin.conf

знаходимо рядок <Directory /usr/share/phpmyadmin> та в секції Apache 2.2 міняємо

Order Deny,Allow
Deny from All

на

Order Allow,Deny
Allow from All

Зберігаємо файл (Ctrl+O) і виходимо з текстового редактора (Ctrl+X).

Для Debian, Ubuntu:

apt-get -y install phpmyadmin

Під час встановлення нам запропонують вибрати веб-сервер, який має бути автоматично налаштований для запуску phpMyAdmin

Тиснемо пробіл, щоб вибрати apache2 , потім Tab і Enter.

Далі буде створено користувач phpmyadmin та базу даних для нього. Для цього необхідно буде ввести рутовий пароль для MySQL і двічі пароль для користувача phpmyadmin.

Щоб значно знизити ймовірність зламу сервера, змінимо шлях до phpMyAdmin, за яким відкриваємо програму в браузері. Для цього відкриваємо конфігураційний файл та вносимо такі коригування:

Для CentOS:

nano /etc/httpd/conf.d/phpMyAdmin.conf

Знаходимо рядки:

Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin

і міняємо їх на

#Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyconsole /usr/share/phpMyAdmin

Для Debian, Ubuntu:

nano /etc/phpmyadmin/apache.conf

Змінюємо рядок

Alias /phpmyadmin /usr/share/phpmyadmin

на наступну

Alias /phpmyconsole /usr/share/phpmyadmin

Зверніть увагу, замість phpmyconsole ви можете вказати будь-яке поєднання букв та цифр на свій розсуд, який вам буде зручно використовувати для доступу до консолі phpMyAdmin.

Зберігаємо файл та виходимо з текстового редактора.

На цьому налаштування phpMyAdmin завершено. Перезапускаємо Apache

Для CentOS:

service httpd restart

Для Debian, Ubuntu :

service apache2 restart

Тепер ми можемо підключитися до консолі phpMyAdmin, перейшовши у браузері за посиланням

http://0.0.0.0/phpmyconsole/ , де замість нулів ми вказуємо IP, який був виданий під час створення сервера.

Стартова сторінка phpMyAdmin

Вводимо наш MySQL логін та пароль.

Ми успішно увійшли.

Консоль управління phpMyAdmin

Тепер ми можемо керувати базами даних MySQL через веб-інтерфейс.

На цьому встановлення завершено, але для оптимального використання ресурсів потрібна певна оптимізація компонентів LAMP.

Оптимізація LAMP для сайту

Після того як все необхідне ПЗ для хостингу сайту встановлено, є сенс оптимізувати роботу сервера: ви збільшите і продуктивність, і зменшите витрату ресурсів сервера, а як наслідок — заощадите і не купуватимете більш потужний сервер. Оптимізація під кожен тип ресурсу (блог, форум, інтернет-магазин) може дещо відрізнятись, але є базові рекомендації, які підійдуть практично для кожної CMS.

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

Для CentOS:

yum -y install ntsysv
ntsysv

Для Debian, Ubuntu:

apt-get -y install rcconf
rcconf

Видалення сервісу з автозавантаження розглянемо на прикладі агентів пересилання повідомлень (Postfix у CentOS або Exim у Debian, Ubuntu), які є у стандартному встановленні. Якщо поштовий функціонал нам не цікавий у межах даного сервера, Postfix/Exim можна сміливо вимкнути. Для навігації використовуємо стрілки вгору-вниз, переміщаючись до пункту, що цікавиться, тиснемо Пробіл, щоб прибрати астериск з квадратних дужок, далі Tab для переміщення до кнопки Ok і Enter.

Видалення сервісів з автозавантаження CentOS, Debian, Ubuntu

Далі вимикаємо журнал atime (час останнього доступу до файлу) для файлової системи ext4. Для цього відкриваємо конфігураційний файл, який керує автомонтажем файлових систем:

nano /etc/fstab

і додаємо опцію noatime у четвертій колонці першого рядка, як показано нижче:

/dev/xvda1 / ext4 defaults,discard,errors=remount-ro,noatime 1 1
/dev/xvda2 swap swap defaults 0 0

Тепер необхідно знову підмонтувати кореневу файлову систему, для якої щойно були виконані зміни, виконавши команду:

mount / -o remount

Оптимізація Apache

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

Для CentOS:

httpd -M

Для Debian, Ubuntu:

apache2ctl -M

Нижче наведено список модулів, які необхідні для роботи переважної більшості сайтів:

  • alias
  • autoindex
  • authz_host
  • deflate
  • dir
  • expires
  • log_config
  • mime
  • negotiation
  • php5
  • rewrite
  • setenvif

Інші shared-модулі можуть бути відключені. Це заощадить безліч ресурсів на обробці запитів. При цьому ми в будь-який момент можемо увімкнути/вимкнути необхідні модулі. Для відключення необхідно виконати таке:

Для CentOS:

Відкриваємо конфігураційний файл

nano /etc/httpd/conf/httpd.conf

та коментуємо рядок з модулем, який нам не потрібен:

#LoadModule назва_модуля відносний_шлях_до_модуля

Для Debian, Ubuntu:

Запускаємо команду:

a2dismod назва_модуля

Для включення модуля потрібно зробити протилежне:

Для CentOS:

Відкриваємо конфігураційний файл

nano /etc/httpd/conf/httpd.conf

і додаємо в нього рядок виду:

LoadModule назва_модуля відносний_шлях_до_модуля

наприклад,

LoadModule rewrite_module modules/mod_rewrite.so

Для Debian, Ubuntu:

Запускаємо команду:

a2enmod назва_модуля

наприклад,

a2enmod rewrite

Опис усіх модулів Apache можна переглянути на офіційному сайті: Модулі Apache

Налаштовуємо параметри мультипроцесорного модуля Prefork:

Для CentOS:

nano /etc/httpd/conf/httpd.conf

Для Debian, Ubuntu:

nano /etc/apache2/apache2.conf

Знаходимо блок параметрів для модуля Prefork за рядком:

Для CentOS:

<IfModule prefork.c>

Для Debian, Ubuntu:

<IfModule mpm_prefork_module>

Розберемо призначення кожної з директив та визначимо рекомендовані значення.

Директиви StartServers , MinSpareServers та MaxSpareServers дають можливість мати кілька створених процесів у пам’яті заздалегідь, щоб не потрібно було їх створювати щоразу після отримання запиту.

Внесемо деякі корективи до налаштувань. Вкажемо Apache створювати 3 процеси після запуску:

StartServers 3

Якщо залишилося менше 3-х вільних процесів, Apache залишить 3 незакритими:

MinSpareServers 3

Дозволимо Apache залишати не більше 5 вільних процесів, решту слід знищити

MaxSpareServers 5

ServerLimit встановлює максимальне значення MaxClients протягом життєвого циклу процесу сервера Apache. Значення ServerLimit не повинно перевищувати значення MaxClients для дотримання стабільності системи.

Директива MaxClients визначає максимальну кількість паралельних запитів, що обробляються сервером. Цей параметр рекомендується періодично підлаштовувати, обираючи оптимальне значення в діапазоні 128 – 4096.

Директива MaxRequestsPerChild встановлює максимальну кількість запитів, які можуть обробити один дочірній процес до завершення. Стандартне значення 0 означає, що створений процес ніколи не буде завершено. Змініть цей параметр, щоб уникнути ризику витоку пам’яті. У нашому прикладі після 4096 опрацьованих запитів процес буде перезапущено:

MaxRequestsPerChild 4096

Завдяки KeepAlive запитам встановлюються постійні з’єднання між клієнтом та сервером. Таким чином, відбувається економія ресурсів, оскільки не потрібно встановлювати з’єднання повторно. Час очікування перед закриттям встановимо на 30 секунд:

KeepAlive On
KeepAliveTimeout 30

Настійно рекомендується обмежити логи для досягнення найкращої продуктивності шляхом зміни параметра LogLevel з warn на error:

LogLevel error

Оскільки модуль deflate (стиснення файлів gzip) вже увімкнено, залишилося підлаштувати його під різні типи файлів для істотного зменшення розмірів трафіку. Робиться це так:

Для CentOS:

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

nano /etc/httpd/conf.d/deflate.conf

Для Debian, Ubuntu:

Видаляємо старий файл конфігурації та створюємо замість нього порожній:

rm /etc/apache2/mods-enabled/deflate.conf && nano /etc/apache2/mods-enabled/deflate.conf

Вставляємо у створений файл блок:

<IfModule mod_deflate.c>
     AddOutputFilterByType DEFLATE text/plain
     AddOutputFilterByType DEFLATE text/html
     AddOutputFilterByType DEFLATE text/xml
     AddOutputFilterByType DEFLATE text/css
     AddOutputFilterByType DEFLATE application/xml
     AddOutputFilterByType DEFLATE application/xhtml+xml
     AddOutputFilterByType DEFLATE application/rss+xml
     AddOutputFilterByType DEFLATE application/javascript
     AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

Зверніть увагу, що деякі CMS стиснення також повинні бути примусово включені в налаштуваннях.

Після виконаних маніпуляцій перезавантажуємо Apache:

Для CentOS:

service httpd restart

Для Debian, Ubuntu:

service apache2 restart

Оптимізація PHP

Відкриваємо конфігураційний файл:

Для CentOS:

nano /etc/php.ini

Для Debian, Ubuntu:

nano /etc/php5/apache2/php.ini

Змінюємо значення деяких параметрів відповідно до таких рекомендацій:

zlib.output_compression = Off
zlib.output_compression_level = -1

Вимкнення стиснення (за умови, що воно включене до Apache, як було рекомендовано вище).

max_execution_time = 5

Налаштування максимального часу виконання скрипта (в секундах). Зверніть увагу, що для інтернет-магазину може знадобитися більш тривале виконання скрипту (наприклад, при фільтрації товарів).

memory_limit = 40M

Максимальна кількість пам’яті, яку споживає скрипт. Хоча за замовчуванням цей параметр дорівнює 128 Мб, рекомендується його зменшити в кілька разів, щоб не виникла ситуація, коли декілька погано написаних скриптів з’їдають всю пам’ять, доступну на сервері.

expose_php = Off

Заборона PHP відправляти разом з кожною відповіддю на запит власну версію (знижує ймовірність зламу, оскільки потенційні уразливості сервера можуть бути виявлені хакером у тому числі і за версією PHP).

report_memleaks = On

Логування помилок про виявлені витоки пам’яті.

post_max_size = 4M
upload_max_filesize = 4M

Максимальний розмір запитів та файлів для завантаження. Не варто встановлювати занадто великий розмір, якщо немає потреби. Параметр post_max_size не повинен перевищувати memory_limit , встановлений раніше.

error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR

Журналування лише критичних помилок.

Якщо у нас встановлений PHP версії нижче 5.5, нам знадобиться APC (Alternative PHP Cache), який кешуватиме скомпільовані PHP скрипти, що дозволить використовувати їх повторно без перекомпіляції. Це значно знижує навантаження. Після зміни файлів кеш скидається автоматично і в результаті скрипти перекомпілюються перед запуском. Встановлюємо кілька допоміжних пакетів:

Для CentOS:

yum -y install php-pear php-devel httpd-devel pcre-devel gcc make

А тепер, власне, і сам APC:

pecl install apc

У процесі встановлення нам буде поставлено кілька запитань, натискаємо Enter після кожного з них (приймаємо налаштування за замовчуванням). Наступна команда включає розширення APC:

echo "extension=apc.so" > /etc/php.d/apc.ini

Для Debian, Ubuntu:

Тут буде достатньо лише однієї команди:

apt-get -y install php-apc

Подальша оптимізація в роботі PHP досягається кешуванням даних та оптимізацією власне PHP-коду.

У форумних CMS також рекомендується відключити debug-режим, оскільки він сильно уповільнює роботу (дивіться посібник для вашої CMS).

Оптимізація MySQL

Оскільки MySQL розрахований на роботу з невеликими базами даних і на слабкому залізі, ми оптимізуємо параметри для підвищення продуктивності шляхом внесення змін до конфігураційного файлу:

Для CentOS:

nano /etc/my.cnf

Для Debian, Ubuntu:

nano /etc/mysql/my.cnf

Встановлюємо такі значення:

key_buffer = 300M

Обсяг оперативної пам’яті, куди складатимуться індекси. Встановлюємо це значення в 30% від усієї оперативної пам’яті, яку ми маємо на сервері.

query_cache_size = 32M

Кешування запитів. Зі збільшенням цього значення прямо пропорційно збільшуються, як продуктивність, і витрата пам’яті. Таким чином, можна почати з 32 Мб і збільшувати це значення за необхідності.

table_cache = 64

Пам’ять, виділена під відкриті таблиці.

Перевірка продуктивності VPS

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

curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.yourdomain.com

де замість http://www.yourdomain.com ми вставляємо посилання на сторінку, час відгуку якої нас цікавить.

Нам буде видано результат із трьох значень, наприклад:

0.070:0.230:0.655

Усі ці таймери ведуть відлік від старту запиту навіть перед зверненням до DNS. Таким чином, після того, як було зроблено запит, потрібно 0.230 – 0.071 = 0.159 секунд, щоб веб-сервер обробив запит і почав повертати дані. Клієнт витратив 0.655 – 0.230 = 0.425 секунд, завантажуючи дані з сервера.

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

Також встановлюємо утиліту, за допомогою якої нам буде зручно контролювати кількість пам’яті, що використовується, і завантаження процесора. Вводимо команду:

Для CentOS:

yum -y install htop

Для Debian, Ubuntu:

apt-get -y install htop

Запускаємо:

htop

Як видно у верхній частині скріншота, наша тестова інсталяція споживає 191 Мб пам’яті (близько 20%) пам’яті та навантажує кожне ядер процесора на 1,3%:

Моніторинг системи засобами htop

На додаток до вищесказаного, ми можемо аналізувати швидкість роботи сайту за допомогою інструменту Pagespeed від Google. Цей сервіс вкаже нам на поточні проблеми та надасть корисні рекомендації. Для початку аналізу достатньо ввести посилання на потрібну сторінку у сервісі Google PageSpeed Insights.

На цьому встановлення та початкову оптимізацію LAMP завершено.

Можна приступати до встановлення системи керування контентом (CMS).

Вам також може бути цікава інструкція «Як прив’язати домен до сайту».