Установка LAMP в archlinux

Apache — это самый популярный веб-сервер. Его задача как и любого другого веб-сервера — отдавать контент на запросы клиентов. Apache обладает большим функционалом за счет подключаемых модулей.

Установка

$ sudo pacman -S apache php php-apache mysql

Это наиболее популярный вариант установки. Таким образом мы получим небезызвестный LAMP — Linux + Apache + MySQL + PHP

Если вы не нуждаетесь в каком-либо из компонентов, не ставьте его.

Не забудьте установить пароль для пользователя MySQL. Для этого необходимо запустить сервер командой systemctl start httpd.service, а затем выполнить следующее (на примере установки с выбором mariadb):

$ sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
# systemctl start mysqld.service
# mysql_secure_installation

Теперь если вы попробуете зайти без пароля, у вас ничего не выйдет:

# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

При необходимости (забытый пароль или ещё какое-нибудь недоразумение), сбросьте настройки:

# mysqld_safe --skip-grant-tables &

Команды на вход с паролем и выход:

# mysql -u root -p
\q

Теперь проверим, есть ли в /etc/shadow пользователь http:

# cat /etc/shadow | grep http:
http:x:14871::::::

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

# useradd -d /srv/http -r -s /bin/false -U http

Смотрим содержание нашего /etc/hosts:

# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost linux

Примечание: здесь и далее linux - имя хоста, т.е. вашей машины

Имя хоста должно быть прописано в /etc/hostname:

$ cat /etc/hostname
linux

Итак, если вы ещё не запустили Apache, пришло время сделать это:

# systemctl start httpd.service

Проверим его работоспособность, пройдя по ссылке в браузере: http://localhost/ Если всё нормально, вы увидите следующее изображение:

localhost

Что делать с PHP?

Измените /etc/httpd/conf/httpd.conf:

# закомментировать строку
# LoadModule mpm_event_module modules/mod_mpm_event.so
# и добавить
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Для того чтобы обрабатывались *.php файлы:

# версия php зависит от установленной вами (в примере php7)
# после строки LoadModule dir_module modules/mod_dir.so
# добавить
LoadModule php7_module modules/libphp7.so

# в список Include где-нибудь после строк
# Various default settings
Include conf/extra/httpd-default.conf
# добавить
Include conf/extra/php7_module.conf

Удостоверьтесь, что корневая директория веб-сервера (по-умолчанию /srv/http/) находится в списке open_basedir файла /etc/php/php.ini

open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/path/to/documentroot

После чего понадобится перезапустить веб-сервер:

# systemctl restart httpd.service

Пришло время проверить отображение php-файлов. Можно создать каталог public_html, внутрь которого положить файл test.php стандартного содержания:

<html>
  <head>
    <title>PHP</title>
  </head>
  <body>
    <?php phpinfo(); ?>
  </body>
</html>
public html

Если php работает, при помощи функции phpinfo() будет выведена служебная информация.

phpinfo

MySQL

Для поддержки MySQL в /etc/php/php.ini раскомментируйте следующие строку:

;extension=mysql.so

Запустите mysql, если это не было сделано раньше. Убедитесь, что группа и пользователь mysql существуют.

Права на корневую директорию mysql должны принадлежать соответствующему пользователю:

# ls -l /var/lib/mysql
итого 110700
-rw-rw---- 1 mysql mysql 16384 июн
-rw-rw---- 1 mysql mysql 52 июн

Если это не так, измените владельца:

# chown -R mysql:mysql /var/lib/mysql

Кстати, файл конфигурации mysql расположен в /etc/mysql/my.cnf.

Установка базы данных

Если вы хотите запускать mysql от имени суперпользователя, можете не применять опцию --user и не изменять владельца

# mysql_install_db --datadir=/var/lib/mysql --user=mysql
# chown -R mysql:mysql /var/lib/mysql

Для запуска MySQL:

# systemctl start mysqld.service

Тестируем mysql (как root):

# mysql -u root -p

Задать пароль для mysql :

# mysqladmin -u root password 'пароль_root'

Для входа в mysql:

# mysql -u root -h linux -p

где linux - не забывайте! - имя вашего хоста.

Установка phpMyAdmin (не бязательно)

Следует установить нужные пакеты:

$ sudo pacman -S php-mcrypt phpmyadmin

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

extension=mysqli.so
extension=mcrypt.so
extension=bz2.so
extension=zip.so

И исправить несколько файлов как указано ниже.

/etc/php/php.ini (добавить /etc/webapps)

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps

/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 all granted
</Directory>

/etc/httpd/conf/httpd.conf

# phpMyAdmin configuration
Include conf/extra/phpmyadmin.conf

Можно взглянуть на файл конфигурации phpmyadmin, но исправлять там ничего не нужно, в примерах ниже мы проведём настройку другим способом.

// /etc/webapps/phpmyadmin/config.inc.php
// хост
$cfg['Servers'][$i]['host'] = 'localhost';

// по-умолчанию не предоставляется доступ без пароля
$cfg['Servers'][$i]['AllowNoPassword'] = true;

// имя пользователя и пароль
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';

phpMyAdmin настроим из веб-интерфейса. Чтобы это стало возможным в соответствии с документацией создадим директорию, доступную на запись пользователю httpd:

# cd /usr/share/webapps/phpMyAdmin
# mkdir config
# chgrp http config
# chmod g+w config

После чего можно перейти к настройкам по адреcу http://localhost/phpmyadmin/setup.

phpmyadmin

Отредактируем файл/etc/webapps/phpmyadmin/.htaccess

# /etc/webapps/phpmyadmin/.htaccess
deny from all

Теперь, перезагрузив наш httpd, можно войти в phpmyadmin по адресу http://localhost/phpmyadmin. Для входа от рута используйте логин root и пароль, заданный при настройке mysql.