Apache, php, mysql и phpmyadmin на ubuntu server

Комплект LAMP ( linux apache php mysql ) настолько часто используем и необходим, что заметку по его установке и минимальной настройке обязательно надо сделать. Этот набор будет полезен, как для запуска других сервисов на сервере, так и для веб-разработки. Приступим.

Сначала всё устанавливаем:
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php zip libapache2-mod-php php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-mysql php-bcmath php-gmp
sudo apt-get install phpmyadmin

Во время установки phpmyadmin выбираем apache2 в появившемся меню и жмём «YES»:
configuring phpmyadmin
«Please choose the web server that should be automatically configured to run phpMyAdmin.»
Web server to reconfigure automatically:
[*] apache2
[ ] lighttpd

В следующем меню просто на нажимаем «YES»:
configuring phpmyadmin
«The phpmyadmin package must have a database installed and configured before it can be used. This can be optionally handled with dbconfig-common. If you are an advanced database administrator and know that you want to perform this configuration manually, or if your database has already been installed and configured, you should refuse this option. Details on what needs to be done should most likely be provided in /usr/share/doc/phpmyadmin. Otherwise, you should probably choose this option.»
Configure database for phpmyadmin with dbconfig-common?

Далее нас просят создать пароль для создаваемого пользователя phpmyadmin. Придумайте, впишите пароль и нажмите «ОК»:
configuring phpmyadmin
Please provide a password for phpmyadmin to register with the database server. If left blank, a random
password will be generated.
MySQL application password for phpmyadmin:

Повторяем только что введённый пароль ещё раз:
configuring phpmyadmin

И установку на этом можно считать законченной, дальше переходим к настройке. Но перед этим можете зайти на http://ip-адрес-сервера/ и увидеть страничку «Apache2 Ubuntu Default Page».
apache
А вот тут http://ip-адрес-сервера/phpmyadmin/ откроется страничка авторизации phpmyadmin.
Авторизоваться на ней можно указав пользователя phpmyadmin и пароль, который мы вписывали чуть ранее во время установки phpmyadmin — веб-интерфейса для управления базой данных. На этом можно было бы и остановиться, но мы вникнем в mysql чуть поглубже.

Далее будет небольшая часть, где я опишу, как через консоль mysql можно создать нового пользователя и дать ему права на базы.
Затронем именно работу с mysql через консоль mysql, а не через phpmyadmin. Для того, чтобы к ней подключиться, в консоли ubuntu server вписываем:
sudo mysql -u root -h localhost -p
Вписываем сначала пароль суперпользователя, а потом пользователя root в mysql (сразу после установки mysql пароль у root отсутствует), таким образом попадаем в консоль mysql.
Далее смотрим какие есть базы:
show databases;
Не забываем обязательно ставить символ «;» в конце команды. Вывод команды будет примерно такой:
+———————+
| Database |
+———————+
| information_schema |
| mysql |
| performance_schema |
| phpmyadmin |
| sys |
+———————+

Смотрим какие есть пользователи:
SELECT user FROM mysql.user;
увидим что-то похожее на:
+——————+
| user |
+——————+
| debian-sys-maint |
| mysql.infoschema |
| mysql.session |
| mysql.sys |
| phpmyadmin |
| root |
+——————+
Здесь как раз есть тот самый пользователь phpmyadmin, под которым мы заходили через web-интерфейс.
Посмотреть его права доступа можно так:
SHOW GRANTS FOR 'phpmyadmin'@'localhost';

Увидим что-то похожее на:
+———————————————————————+
| Grants for phpmyadmin@localhost |
+———————————————————————+
| GRANT USAGE ON *.* TO `phpmyadmin`@`localhost` |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO `phpmyadmin`@`localhost` |
+———————————————————————+
Видим, что права у него на базу phpmyadmin для подключения к localhost.

Создаём пользователя adm с паролем adm123 в mysql и возможностью подключаться ко всем базам не только с localhost, но и с любого другого хоста:
CREATE USER 'adm'@'localhost' IDENTIFIED BY 'adm123';
CREATE USER 'adm'@'%' IDENTIFIED BY 'adm123';
GRANT ALL PRIVILEGES ON *.* TO 'adm'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'adm'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

И уже с этим пользователем adm и паролем adm123 можно подключаться к серверу mysql через phpmyadmin по адресу http://ip-или-адрес-сайте/phpmyadmin/ и создавать нужную базу через web-интерфейс, там же можно выполнять sql запросы на создание базы. Можете так и сделать, а можно продолжить работать в консоли mysql, что мы и сделаем.
Создаём пустую базу данных под названием testdb:
CREATE DATABASE testdb;
Так как мы создавали пользователя adm и давали ему полные правам на всё, то в phpmyadmin он увидит созданную базу.
Но если создавали пользователя в mysql и не выполняли команду GRANT (не назначали права доступа) чуть выше, то можно пользователю дать права только на конкретную базу, а не на всё подряд. Команда для этого будет выглядеть так:
GRANT ALL PRIVILEGES ON testdb.* TO 'adm'@'localhost';
FLUSH PRIVILEGES;

Таким образом мы даём полные права пользователю adm на базу testdb при подключении к localhost.

Если надо чтобы пользователь adm мог подключаться к базе testdb издалека, а не только с localhost, то после команды:
GRANT ALL PRIVILEGES ON testdb.* TO 'adm'@'localhost';
надо выполнить ещё:
GRANT ALL PRIVILEGES ON testdb.* TO 'adm'@'%';

Для выхода из консоли mysql, просто выполняем в конце команду:
exit;

Таким образом мы создали пользователя и базу в mysql, но здесь стоит упомянуть про удаление пользователя и базы. Начнём с удаления пользователя. Для этого сначала удаляем права у этого пользователя:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'adm'@'localhost';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'adm'@'%';

А теперь удаляем самого пользователя:
DROP USER 'adm'@'localhost';
DROP USER 'adm'@'%';
FLUSH PRIVILEGES;

Теперь про удаление базы данных. Тут тоже всё просто, всё сводится к одной команде:
DROP DATABASE testdb;

На этом краткое отступление про работу с mysql можно завершить и переходим к настройке apache. В общем, если у Вас будет размещаться всего 1 тестовый сайт, то достаточно его файлы разместить в /var/www/html/ , открывать http://ip_адрес_сервера/ и радоваться. Но если вы предполагаете заниматься веб-разработкой, то обойтись без виртуальных хостов в apache будет тяжело или, как минимум, не удобно. Конфигурацию php тоже надо подправить, указав верный часовой пояс. Для этого откроем конфигурационный файл php.ini
sudo nano /etc/php/7.4/apache2/php.ini
ищем строку:
;date.timezone =
надо её раскомментировать и исправить на:
date.timezone = Europe/Moscow
вместо Europe/Moscow укажите свою часовую зону, подсмотреть возможные варианты timezones можно на сайте php
После внесения изменений в php.ini необходимо перезапустить apache:
sudo service apache2 restart

Тем, кому виртуальные хосты apache2 не нужны, поздравляю, у Вы закончили выполнять инструкцию, можете пользоваться (устанавливаться системы мониторинга или интерфейсы для отображения информации через веб-интерфейс и т.д.), а кому нужны виртуальные хосты, например для веб разработки, продолжаем читать дальше.
Создаём конфигурационный файл виртуального хоста:
sudo nano /etc/apache2/sites-available/test.com.conf
вписываем туда содержимое этого файла:
virtualhost apache
Таким образом мы описываем виртуальный хост для сайта test.com

Теперь надо создать упомянутые в файле директории и назначить им права:
sudo mkdir -p /var/www/test.com/html
sudo mkdir -p /var/www/test.com/log
sudo chmod -R 0777 /var/www/test.com/

Активируем виртуальный хост и перезапускаем apache2:
sudo a2ensite test.com.conf
Видим:
Enabling site test.com.
To activate the new configuration, you need to run:
systemctl reload apache2
значит всё в порядке и надо выполнить перезапуск apache. Выполняем:
sudo systemctl reload apache2
Всё, с apache мы тоже закончили.

Далее, чтобы совсем не залазить в дебри, не поднимать dns сервер и не создавать в нём записи, будем использовать файл hosts на конечном клиенте. Допустим вы работаете на w!nd0w$ l0, тогда открываем для редактирования файл C:\Windows\System32\drivers\etc\hosts и вписываем внизу строку:
192.168.1.2 test.com

где
192.168.1.2 — это ip адрес, где мы поднимали apache только что
Сохраняем, закрываем файл hosts и открываем в браузере на клиенте адрес http://test.com/
Видим, как откроется страничка, значит всё сделано верно.

Подведём итоги.
Мы научились устанавливать Apache, php, mysql server (в примерах использовалась версия 8.0) на ubuntu server 20.04, создавать пользователей и пустые базы данных в mysql, назначать полные права пользователю mysql, устанавливать веб интерфейс для управления базами данный под названием phpmyadmin и создавать виртуальные хосты в apache.

Добавить комментарий