ZaLinux.ru

Как установить веб-сервер Apache с PHP 7, MariaDB/MySQL и phpMyAdmin (LAMP) на Ubuntu 16.10 или 17.04

В этой статье будет показано, как установить веб-сервер на Ubuntu 16.10 или 17.04. Кроме веб-сервера Apache мы установим PHP 7, MariaDB (полный аналог MySQL с дополнительными улучшениями) и phpMyAdmin. Эта инструкция применима к Ubuntu 16.10 или 17.04 серверной и настольной версий. Т.е. вы можете установить веб-сервер как на свой домашний компьютер, так и на виртуальный частный сервер (VPS).

Если вам нужен надёжный и недорогой VPS/VDS, то вы найдёте их по ссылкам: отечественный (имеются пробные периоды) и иностранный (при регистрации по ссылке $10 уже на счету)

LAMP – это аббревиатура от Linux, Apache, MySQL/MariaDB, PHP. Веб-сервер позволит вам прямо на локальной машине устанавливать и тестировать WordPress, Joomla, Drupal и свои сайты. Эта связка является стандартной для большинства веб-хостингов и именно эти программы обычно требуются для работы веб-сайтов.

Шаг 1: Установка Apache на Ubuntu 16.10 или 17.04

1. Начнём с установки веб-сервера Apache из официальных репозиториев Ubuntu. Это делается командой:

sudo apt install apache2 vim
# ИЛИ
sudo apt-get install apache2 vim

2. После успешной установки веб-сервера Apache, убедитесь следующими командами, что демон запущен и к какому порту он привязан (по умолчанию apache прослушивает 80 порт):

sudo systemctl status apache2.service

sudo ss -tlpn

3. Установка ServerName для подавления предупреждения

Далее мы добавим одну строку в файл /etc/apache2/apache2.conf чтобы убрать сообщение с предупреждением. Хотя это и безвредно, если вы не установили ServerName на глобальном уровне, вы будете получать следующее сообщение о синтаксической ошибке в конфигурации Apache:

sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Откройте главный конфигурационный файл текстовым редактором:

sudo gedit /etc/apache2/apache2.conf

Если вы настраиваете систему без графического интерфейса, вместо gedit используйте, например, vim:

sudo vim /etc/apache2/apache2.conf

Внутри, в конце файла добавьте директиву ServerName, указывающую на ваше основное доменное имя. Если у вас нет связанного с вашим сервером доменного имени, вы можете использовать внешний IP сервера:

. . .
ServerName server_domain_или_IP

Если вы забыли внешний IP сервера, то проверить его можно так:

curl suip.biz/ip/

Для локального веб-сервера можно сделать следующую запись:

ServerName localhost

Когда закончите, сохраните и закройте файл.

Далее, проверьте ошибки синтаксиса набрав:

sudo apache2ctl configtest
Syntax OK

Поскольку мы добавили глобальную директиву ServerName, предупреждения больше нет.

Для того, чтобы изменения вступили в силу, перезапустите Apache:

sudo systemctl restart apache2

4. Для проверки работы веб-сервера apache, откройте в браузере IP адрес сервера. Если вы устанавливаете на локальном компьютере, но наберите localhost. Должна появиться страница по умолчанию для веб-сервера, примерно как на скриншоте:

5. Следующей командой мы добавляем службу веб-сервера в автоматическую автозагрузку при каждом запуске компьютера:

sudo systemctl enable apache2

Шаг 2: Установка MariaDB/MySQL в Ubuntu 16.10 или 17.04

6. MariaDB – это форк MySQL. Программы взаимозаменяемы, даже процессы называются одинаково. Выбор MariaDB или MySQL – абсолютно на ваше усмотрение. В дальнейшем это ни на что не повлияет. Для установки MariaDB наберите:

sudo apt install mariadb-server

Для установки MySQL наберите:

sudo apt install mysql-server

Установите только одну из них!

7. После завершения установки, запустите простой скрипт безопасности, который удалит некоторые настройки по умолчанию и чуть заблокирует доступ к нашей системе. Запустите интерактивный скрипт командой:

sudo mysql_secure_installation

Давайте внимательно разберёмся со всем, что говорит нам этот скрипт, поскольку вопросам безопасности вер-сервера следует уделять особое внимание.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

Перевод:

Примечание: запуск всех элементов этого скрипта рекомендуется для всех серверов MariaDB в продакшене (реальном рабочем использовании).

In order to log into MariaDB to secure it, we'll need the current password for the root user.  If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here.

Перевод:

Для того, чтобы войти в MariaDB для настройки безопасности, нам нужен текущий пароль пользователя root. Если вы только что установили MariaDB и ещё не установили пароль рута, то пароль будет пустым, т.е. просто нажмите Enter.

Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.

Перевод:

Установите пароль рута, чтобы никто другой не мог войти в MariaDB без надлежащей авторизации как пользователь root.

Set root password? [Y/n]
New password:
Re-enter new password:

Перевод:

Установить пароль root’а? [Да/нет]

Новый пароль:

Повторно введите новый пароль:

Если у вас появилась строка «Sorry, you can't use an empty password here.» она означает, что пароль не может быть пустым, т.е. вы не ввели пароль.

By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them.  This is intended only for testing, and to make the installation go a bit smoother.  You should remove them before moving into a production environment.
Remove anonymous users? [Y/n]

Перевод:

По умолчанию, установленная MariaDB имеет анонимного пользователя, позволяющего любому войти в MariaDB даже если для него не было создано пользовательского аккаунта. Это сделано в целях тестирования и упрощения установки. Вам следует удалить их перед переходом в реальное рабочее окружение.

Удалить анонимного пользователя? [Да/нет]

Normally, root should only be allowed to connect from 'localhost'.  This ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]

Перевод:

Обычно, root’у следует разрешать подключаться только с 'localhost'. Это гарантирует, что кто-то из сети не сможет угадать пароль root’а.

Отключить удалённый вход рута? [Да/нет]

By default, MariaDB comes with a database named 'test' that anyone can access.  This is also intended only for testing, and should be removed before moving into a production environment.
Remove test database and access to it? [Y/n]

Перевод:

По умолчанию MariaDB поставляется с базой данных 'test', к которой может любой получить доступ. Это также сделано в целях тестирования и она должна быть удалена перед переходом в реальное рабочее окружение.

Удалить тестовую базу данных и доступ к ней? [Да/нет]

Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Reload privilege tables now? [Y/n]

Перевод:

Перезагрузка таблицы привилегий гарантирует, что все сделанные изменения немедленно будут иметь эффект.

Перезагрузить таблицу привилегий сейчас? [Y/n]

All done!  If you've completed all of the above steps, your MariaDB installation should now be secure.

Перевод:

Всё сделано! Если вы завершили все вышеописанные шаги, ваша установленная MariaDB должна быть безопасной.

Ещё раз о пароле MariaDB. Это должен быть надёжный и уникальный пароль. Думайте о нём как о пароле входа на ваш сервер. Он должен отличаться от пароля пользователя Linux.

8. Для получения доступа к базе данных MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL и запустите следующие команды:

sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

9. Затем перезапустите службу MySQL и попробуйте войти в базу данных без sudo, как показано ниже.

sudo systemctl restart mysql.service
mysql -u root -p

Шаг 3: Установка PHP 7 в Ubuntu 16.10 или 17.04

10. Следующей командой установите последнюю версию PHP 7, а также несколько необходимых плагинов.

sudo apt install php libapache2-mod-php php-mysql php-xml php-gd php-imap php-mysql

11. После установки PHP7 и всех необходимых модулей, наберите следующую команду, чтобы посмотреть версию PHP.

php -v

12. В большинстве случаев вам захочется изменить то, как Apache работает с файлами, когда запрашивается директория. В текущий момент, если пользователь запрашивает с сервера директорию, Apache, в первую очередь, будет искать файл index.html. Мы хотим сказать нашему веб серверу, что PHP файлы имеют приоритет, и что Apache в первую очередь должен искать файл index.php.

Чтобы сделать это, наберите эту команду для открытия файла dir.conf в текстовом редакторе с привилегиями рута:

sudo gedit /etc/apache2/mods-enabled/dir.conf

Если вы работаете через SSH или ваша система без графического окружения, то для открытия используйте текстовый редактор командной строки, например vim:

sudo vim /etc/apache2/mods-enabled/dir.conf

Там вы увидите что-то вроде:

<IfModule mod_dir.c>
	DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Мы хотим переместить индексный файл PHP в первую позицию после DirectoryIndex:

<IfModule mod_dir.c>
	DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Когда закончите, сохраните и закройте файл.

После этого нужно перезагрузить веб-сервер Apache, чтобы изменения вступили в силу. Это можно сделать набрав:

sudo systemctl restart apache2

Также используя systemctl можно проверить статус службы apache2:

sudo systemctl status apache2

Типичный вывод:

● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; generated; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Сб 2016-12-24 11:04:45 MSK; 32s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 5340 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS
  Process: 5363 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCE
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─5380 /usr/sbin/apache2 -k start
           ├─5383 /usr/sbin/apache2 -k start
           ├─5384 /usr/sbin/apache2 -k start
           ├─5385 /usr/sbin/apache2 -k start
           ├─5386 /usr/sbin/apache2 -k start
           └─5387 /usr/sbin/apache2 -k start

дек 24 11:04:44 HackWareUbuntu systemd[1]: Starting LSB: Apache2 web server...
дек 24 11:04:44 HackWareUbuntu apache2[5363]:  * Starting Apache httpd web serve
дек 24 11:04:45 HackWareUbuntu apache2[5363]:  *
дек 24 11:04:45 HackWareUbuntu systemd[1]: Started LSB: Apache2 web server.

13. Чтобы протестировать PHP7 и конфигурацию модулей, создайте в корневой директории веб-сервера /var/www/html/ файл info.php.

sudo gedit /var/www/html/info.php
# ИЛИ
sudo vim /var/www/html/info.php

добавьте следующие строки в файл info.php.

<?php
phpinfo();

Откройте в вашем веб-браузере адрес https://IP_адрес_вашего_сервера/info.php для проверки PHP конфигурации.

Для локального веб-сервера откройте http://localhost/info.php

Шаг 4: Установка phpMyAdmin в Ubuntu 16.10 или 17.04

14. Опционально, если вы хотите администрировать MariaDB из веб-браузера, установите phpMyAdmin.

sudo apt install php-gettext phpmyadmin

Во время установки phpMyAdmin выберите веб сервер apache2:

Ответьте «Нет» на запрос о настройки с dbconfig-common:

15. После завершения установки phpMyAdmin выполните следующее.

Для загрузки конфигурации phpMyAdmin веб-сервером Apache откройте файл

sudo gedit /etc/apache2/apache2.conf
# ИЛИ
sudo vim /etc/apache2/apache2.conf

И добавьте в самый конец строку

Include /etc/phpmyadmin/apache.conf

Сохраните и закройте файл. Перезапустите сервер:

sudo systemctl restart apache2

Теперь phpMyAdmin будет доступен по адресу https://IP_адрес_вашего_сервера/phpmyadmin/

А для локального сервера по адресу http://localhost/phpmyadmin/

Рекомендуется продолжить знакомство с настройкой веб-сервера Apache на Ubuntu и посмотреть инструкции:

Рекомендуемые статьи:

29 Комментарии

  1. Артем

    Класс, все супер быстро настроил

     

  2. Александр

    Спасибо за статью.
    Вроде бы все правильно сделал, но…
    В Муадминевыдает Расширение mysqli не найдено. Пожалуйста, проверьте ваши настройки PHP. Смотрите our documentation для дополнительной информации.
    И гуглил и логи смотрел, но увы…
    Не подскажете куда смотреть?
     

    1. Alexey (Автор записи)

      Попробуйте:

      sudo apt-get install php7.0-mysql
      
  3. viktor

    Здравствуйте

    Конечно Debian не совсем Ubuntu 🙂 , но все же может подскажите

    Есть сервер LAMP на Debian 6.0 – Apache2.2 – PHP 5.3 – MySQL

    На нем вертится самописный сайт для внутренних нужд офиса. Сайт в кодировке windows-1251, так как писали на виндовой машине особо не заморачиваясь с кодировкой. Сейчас приобрели новый комп и решили на него перенести. Так как Debian 6 вроде как уже старенький установили сервер LAMP на Debian 8.0 – Apache2.4 – PHP 5.5 – MySQL. Сайт работает, но проблема в том что при открытии сайта в браузере страничка открывается в UTF-8 кодировке и каждый раз приходится переключать кодировку в браузере на windows-1251.

    Я так понимаю Апач дает команду браузеру открывать страницу в этой кодировке, не читая тег meta в котором указана кодировка windows-1251.
    ВОПРОС: как заставить Апач не делать этого

    Пробовал вставить AddDefaultChaset windows-1251 и в конфигурацию виртуального сервера и в файл .htaccess  – не помогло, может не туда прописывал.

    Исправлять сайт не вариант, хотя тоже пробовал перегнав статичную в UTF статика отображалась нормально, но получали затык с php. Как уже писал сайт самописный соответственно документации что-почем нет

    1. Alexey (Автор записи)

      У вас в AddDefaultChaset пропущена одна буква. Если сайт на PHP, то в .htaccess пропишите:

      AddDefaultCharset windows-1251
      php_value default_charset "cp1251" 

      В конфигурационном файле Apache замените 

      AllowOverride None

      на

      AllowOverride All

      Иначе файлы .htaccess не будут оказывать влияния. После замены не забудьте перезапустить веб-сервер.

      Судя по всему это не ваш случай, но браузеры также ориентируются на метатэги, например:

       <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

      Т.е. если сервер говорит, что кодировка windows-1251, а в HTML-коде присутствует указанный выше метатег, то страница будет показана именно в кодировке UTF-8.

  4. Алексей

    Здрасти. После статуса У меня Mariadb server is down

    в конце строки Lines 1-17/17 (END) и ничего не происходит, на что жать?

    1. Alexey (Автор записи)

      Странная у вас… Ubuntu 16.10.

      Шучу, я узнал, конечно, что это Kali Linux на картинке, более того, эта статья на 100% подойдёт для Kali Linux, Linux Mint и предыдущих версий Ubuntu.

      Хотя в Kali Linux установлены все три компонента: Apache, PHP, MariaDB, только службы не добавлены в автозапуск. Там не нужно ничего устанавливать, достаточно выполнять:

      sudo systemctl start apache2
      sudo systemctl start mysql.service

      перед каждым использованием веб-сервера. Или всё-таки добавить эти службы в автозагрузку.

      И опять же, даже если в Kali Linux повторить все действия из этой инструкции (я специально только что проверил на своей системе), ничего страшного не происходит, и службы, в том числе MariaDB, работают как положено.

      Отсюда у меня вопрос к вам: что именно вы делали, какими командами запускаете MariaDB?

      1. Алексей

        Мне всё в root делать?

      2. Алексей

        такими же как и mysql

    2. Alexey (Автор записи)

      У вас установлен/активирован apparmor? Если да, то дело в нём. Его не нужно отключать, но нужно обновить политики.

      Если дело не в этом, то после попытки запуска СУБД, выполните:

      sudo journalctl -xn

      и скопируйте вывод в комментарий.

      В каталоге /var/lib/mysql/ есть файл с расширением .err, также хотелось бы увидеть его содержание.

      1. Алексей

        Все папки обшарил mysql ни одного файла с таким расширением не нашёл

      2. Алексей

        только frm, MYD, MYI, CSV, CSM, ibD

      3. Алексей

        примерное навзание есть? Я даже не могу понять как общий поиск в Кали сделать

  5. Алексей

    sudo systemctl start apache2

    sudo systemctl start mysql.service

    всё это ввёл, ничего не произошло, включилась командная строка root

  6. Алексей

    как их завершать процессы с не завершенным окончанием.

    line 1-23?

    1. Alexey (Автор записи)

      Стрелочками вправо-влево. Или перенаправлять вывод в текстовый файл.

      sudo journalctl -xn > file.txt
      gedit file.txt

      У вас Kali с оф.сайта или какой-то мод? Какая версия?

      примерное название есть?

      У меня файл называется HackWare.err, у вас точно должно быть другое, т.к. у меня HackWare – это имя хоста.

      И ещё раз:

      • Что именно делали, ставили сервер по этой инструкции? Или просто пришли сюда спросить об ошибке? Если ставили по другой инструкции, как именно ставили, дайте ссылку на инструкцию.
      • Как именно запускаете MariaDB? Я понимаю, что также как MySQL, но MySQL можно запустить различными командами. Какую именно команду вводите?
    2. Alexey (Автор записи)

      У меня получилось это повторить – ошибка в точности, как у вас. Фокус делается так:

      sudo systemctl start mysql.service
      sudo systemctl start mariadb.service

      После этого проверка

      sudo systemctl status mariadb.service

      показывает ровно ту же ошибку, что на вашем скриншоте.

      Решение: даже если у вас установлена MariaDB, то запускать её нужно так:

      sudo systemctl start mysql.service

      А смотреть статус так:

      sudo systemctl status mysql.service

      После запуска проверьте версию:

      mysql --version
      mysql  Ver 15.1 Distrib 10.1.21-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

      Т.е. запустилась именно MariaDB.

      Чтобы окончательно убедиться, что у нас уж точно MariaDB:

      sudo mysql -u root
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MariaDB connection id is 33
      Server version: 10.1.21-MariaDB-5 Debian 9.0
      
      Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
      MariaDB [(none)]> 

      Там пять (!) раз упоминается, что вы вошли именно в MariaDB, чтобы не было сомнений smiley

      1. Алексей

        kali-linux-2016.2-amd64, от кудв скачано не помню, история загрузок со всех браузеров тоже не помнит.

  7. Алексей

    MariaDB подменяла собой root было дело, что то там тестировала, но только на это и была способна. Mysql-service not worcked, foucking chet gasterworcked/

  8. Алексей

    root@Alexper:~#  service mysql start

    root@Alexper:~#

    root@Alexper:~#  service php star

    root@Alexper:~#

    root@Alexper:~#  service apachl2 start

    root@Alexper:~#

    потом перезаписывал: upgrade, restart

    она мне , ты что дурак? Всё есть.

    Я ей опять: service mysql start

  9. Алексей

    root@Alexper:~# sudo systemctl start mariadb.service
    Job for mariadb.service failed because the control process exited with error code.
    See "systemctl status mariadb.service" and "journalctl -xe" for details.
    root@Alexper:~#

  10. Алексей

    Предистория всего этого: мне понадобился BurpSuit, у меня стоит версия игрушка, так посмотри и скачай или купи, выбрал первое. Их файлы запуска все в рассширение jar, запуск специальной прогой от JAVA нет, искал, что то скачал, она не запускалась или ушла в системник там и работает мне напользу, но со своими взглядами на жизнь. Начал устраивать эксперименты, Kali лапочка запросила mysql быть по активнее, вот в принципе и с этого всё и началось.

  11. Алексей

    root@Alexper:~# mysql --version
    mysql  Ver 15.1 Distrib 10.1.21-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
     

  12. Алексей

    root@Alexper:~# sudo mysql -u root
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 33
    Server version: 10.1.21-MariaDB-5 Debian 9.0

    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]>

  13. Алексей

    Вот, всё есть. НО….

  14. Алексей

    я свою тему закрою, так как я вернулся пятном недельной давности назад. А точто что совсем захломил всё, даже скачивать перестала из интернета. Мне просто надо Oracl Java&Runtime для запуска BrupSuit. Куда переходить, где есть такие темы?

  15. victor

    не могу понять как входить в phpMyAdmin

    Ввожу пользователь root :

    #2002 – No such file or directory &mdash; Сервер не отвечает (либо локальный сокет сервера MySQL неверно настроен).

    без пароля тоже не пускает

    как быть вообще?

  16. Мое имя

    Спасибо большое за статью! Е-ху)))))))) В kali получилось все с первого раза)

     

  17. Алексей

    Большое спасибо! Молодцы! Очень полезная статья, целый день не мог добиться, чтобы php интерпретатоор отрабатывал скрипт, и только после установки всех пакетов, как у Вас указано, заработал, с благодраностью и пожеланиям успехов !

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *