Не так давно я писав схожу статтю, як підняти локальний сервер на Linux Mint та Ubuntu. Сьогодні поговоримо про те, як зробити те саме в Arch Linux. Будемо аналогічно налаштовувати сервер на п'ять сайтів із розміщенням файлів у домашньому каталозі.

Отож, поїхали!

1. Веб-сервер

sudo pacman -S apache

Файли налаштувань Apache лежать у теці /etc/httpd/conf, а основний файл налаштувань – /etc/httpd/conf/httpd.conf. У ньому нам потрібно буде змінити кілька нюансів.

ServerAdmin you@example.com

Тут прописуємо свою електронну пошту, яка буде виводитися, наприклад, на сторінці помилки Apache.

DocumentRoot "/srv/http"
<Directory "/srv/http">

Тут міняємо шлях на свій. Я перед тим натякав, що файли будуть розміщені у домашньому каталозі, тож, для прикладу, обізвемо теку "LocalServer", тоді записи будуть виглядати так (моє ім'я користувача ivaniura тобі теж доведеться змінити на своє):

DocumentRoot "/home/ivaniura/LocalServer"
<Directory "/home/ivaniura/LocalServer">

Та на кілька рядків нижче знаходимо запис:

AllowOverride None

Змінюємо значення None на All.

Розкоментовуємо рядок:

LoadModule rewrite_module modules/mod_rewrite.so

Тепер надаємо права доступу до заданої теки:

sudo chmod o+x ~
sudo chmod o+x ~/LocalServer
sudo chmod -R o+r ~/LocalServer

Вмикаємо та запускаємо сервер:

sudo systemctl enable httpd
sudo systemctl start httpd

Підтримка SSL/HTTPS

Встановлюємо відповідний пакет:

sudo pacman -S openssl

Створюємо самозавірені сертифікати:

sudo openssl req -x509 -nodes -days 5000 -newkey rsa:2048 -keyout /etc/httpd/conf/server.key -out /etc/httpd/conf/server.crt

У процесі створення сертифікатів указуємо двозначний код країни UA, область, місто, назву організації, філіалу, своє ім'я та електронну адресу (будь-який із цих пунктів або навіть усі можна пропустити, якщо ти робиш для себе тестовий полігон – все одно, окрім тебе, цю інформацію ніхто не побачить 😀 )

Повертаємося у файл /etc/httpd/conf/httpd.conf та розкоментовуємо рядки:

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf

Віртуальні хости

У тому ж файлі розкоментовуємо ще один рядок:

Include conf/extra/httpd-vhosts.conf

Тепер відкриваємо файл /etc/httpd/conf/extra/httpd-vhosts.conf та додаємо там налаштування своїх локальних сайтів. Зважаючи на те, що в мене ім'я користувача ivaniura та хости будуть називатися test1, test2, test3, test4 та test5, мій файл виглядає отак:

<VirtualHost test1:80>
    ServerAdmin webmaster@test1
    DocumentRoot "/home/ivaniura/LocalServer/test1"
    ServerName test1
    ServerAlias test1
    ErrorLog "/var/log/httpd/test1-error_log"
    CustomLog "/var/log/httpd/test1-access_log" common

    <Directory "/home/ivaniura/LocalServer/test1">
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost test1:443>
    ServerAdmin webmaster@test1
    DocumentRoot "/home/ivaniura/LocalServer/test1"
    ServerName test1:443
    ServerAlias test1:443
    ErrorLog "/var/log/httpd/test1-error_log"
    CustomLog "/var/log/httpd/test1-access_log" common

    <Directory "/home/ivaniura/LocalServer/test1">
        Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/server.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/server.key"
</VirtualHost>

Це для хоста test1. Нижче у тому ж файлі потрібно продублювати той же запис, але із значенням test2, test3 і т. д. у відповідних місцях.

Тепер додаємо записи про наші локальні сайти у файл /etc/hosts:

127.0.0.1 localhost.localdomain localhost my-hostname
127.0.0.1 test1
127.0.0.1 test2
127.0.0.1 test3
127.0.0.1 test4
127.0.0.1 test5

…де my-hostname міняємо на свою назву хоста.

PHP

sudo pacman -S php php-apache php-gd

Знову повертаємось до файлу /etc/httpd/conf/httpd.conf (популярний він, правда? 😉 ). У ньому закоментовуємо рядок

LoadModule mpm_event_module modules/mod_mpm_event.so

Розкоментовуємо

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Після рядків

# Various default settings
Include conf/extra/httpd-default.conf

Додаємо:

LoadModule php_module modules/libphp.so
AddHandler php-script php
Include conf/extra/php_module.conf

У файлі /etc/php/php.ini розкоментовуємо

extension=gd

MySQL

Наперед скажу – в Arch Linux чистий MySQL за замовчуванням змінений на форк MariaDB. Не лякайся – різниці ти не відчуєш 😉

sudo pacman -S mysql

Відкриваємо файл /etc/php/php.ini і в ньому розкоментовуємо рядки:

;extension=mysqli
;extension=pdo_mysql

Встановлюємо базу даних:

sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo chown -R mysql:mysql /var/lib/mysql

Вмикаємо та запускаємо MySQL:

sudo systemctl enable mysqld
sudo systemctl start mysqld

Встановлюємо пароль для root-користувача MySQL:

sudo mysql_secure_installation

Вхід у MySQL буде відбуватися за допомогою наступної команди:

sudo mysql -u root -p

phpMyAdmin

sudo pacman -S phpmyadmin

У файлі /etc/php/php.ini розкоментовуємо рядки:

extension=bz2
extension=iconv
extension=zip

Створюємо конфігураційний файл /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 вкінці додаємо рядок:

Include conf/extra/phpmyadmin.conf

Далі відкриваємо файл /etc/webapps/phpmyadmin/config.inc.php, шукаємо в ньому рядок

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

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

Далі створюємо каталог для тимчасових файлів phpMyAdmin і надаємо їй необхідні права:

sudo mkdir /usr/share/webapps/phpMyAdmin/tmp
sudo chmod -R 777 /usr/share/webapps/phpMyAdmin/tmp

Готово.