Перейти к содержанию

LAMP на Centos8 Stream


ArcheRAWG

Рекомендуемые сообщения

У меня было несколько сайтов/проектов которые крутились где попало. Например сайт крутился на OpenServer, облако в виртуалке, pma вообще небыло, пользовался HeidySQL который поставлялся вместе с OpenServer. И в один прекрасный момент мне это всё надоело, и я решил объединить всё на одном сервере. Почему именно на Centos8? Да просто мне нравится эта система. Да, я вкурсе что 31.12.2021 - прекращается её поддержка, поэтому я выбрал Centos8 Stream. 

В этой статье я не буду касаться установки и настройки системы. Так не буду затрагивать безопасность, т.е. настройку selinux и собственно firewall. Безопасность это дело сугубо индивидуальное, и настраивать его нужно под свои возможности и потребности. Поэтому после запуска системы, сразу отключаем selinux и firewall

setenforce 0
systemctl stop firewalld
systemctl disable firewalld

Установка и настройка Apache

Начнём с установки Apache. 

dnf install httpd

добавляем его в автозагрузку

systemctl enable httpd

и запускаем его

systemctl start httpd

Собственно установка на этом закончена. Уже сейчас если перейти в браузере на ip адрес вашего сервера, то можно увидеть тестовую страницу Apache. Конечно если у вас отключен firewall. Так же работу можно проверить следующей командой

netstat -tulnp | grep httpd

Вывод будет примерно следующий: 

tcp6       0      0 :::80                   :::*                    LISTEN      1205/httpd

Теперь можно приступать к непосредственной настройке Apache. У Centos есть фишка. Если не уделить внимания разметке жесткого диска, он сделает разметку примерно следующего вида: 

image.png.19592bcc2076806556eb59d9b0ea3a6f.png

т.е. раздел /home - будет самым большим. Я несколько раз подъёбывался на этот счёт. Вы можете разметку сделать самостоятельно, т.к. вам нужно, или оставить как есть. В этой статье мы этого касаться не будем. Поэтому все файлы веб-сервера будут лежать в директории /home. Я использую примерно следующую структуру: 

/home/sites - тут лежат все сайты

/home/sites/site1 - папка с сайтом

/home/sites/site1/www - собственно файлы сайта

/home/sites/site1/log - логи сайта

Создаём все нужные директории одной командой и назначаем владельцем директорий apache

mkdir -p /home/sites/site1.ru/{www,log}
chown -R apache. /home/sites/

Дальше нам нужно посмотреть раскоменчена ли строчка в конце файла /etc/httpd/conf/httpd.conf

IncludeOptional conf.d/*.conf

Эта строчка нужна для того чтобы не городить все найстройки в одном месте, а для каждого сайта будет свой отдельный конфиг. Создадим конфиг для первого сайта: 

nano /etc/httpd/conf.d/site1.ru.conf

следующего содержания

<VirtualHost *:80>

    ServerName site1.ru
    ServerAlias www.site1.ru
    DocumentRoot /home/sites/site1.ru/www

    ErrorLog /home/sites/site1.ru/log/error.log
    CustomLog /home/sites/site1.ru/log/access.log common

    <Directory /home/sites/site1.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

Проверим конфигурацию

apachectl -t

Apache может ругнуться

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::95:c6f3:e49f:7204. Set the 'ServerName' directive globally to suppress this message

Это просто предупреждение, и его можно игнорировать. А можно отредактировать файл /etc/hostname и указать там имя своего сервера. В любом случае, если всё сделано правильно, Apache должен написать 

Syntax OK

После этого можно перезапуститься Apache

systemctl restart httpd

или

apachectl restart

Если Apache не стартанул, то смотрил логи

tail -f /var/log/httpd/error_log

но в текущей конфигурации проблем быть не должно. Для полноценной проверки того что всё работает как надо, создадим файл index.html в директории нашего нового сайта /home/sites/site1.ru/www. Напомню, что по умолчанию директория для файлов сайта /var/www/html. Но мы ей пользоваться не будем. 

nano /home/sites/site1.ru/www/index.html

Содержание файла

<center><font color=red size=7>Hello World</font></center>

Сделаем владельцем файла apache

chown apache. /home/sites/site1.ru/www/index.html

Теперь если перейти по адресу вашего сервера, вы увидите не тестовую страницу, а эту страничку которую мы только что создали, а именно: белый фон, и по центру большими красными буквами hello world. Это означает что сам веб сервер уже прекрасно работает, и можно двигаться дальше. 

Установка php с последующим обновлением

Одна из причин почему Centos8 а не Centos7, хотя у последнего поддержка до 2024 года, это то что установка php упростилась, т.к. в репозиториях уже есть версия 7.2 и обновить её, не составит большого труда. Можно конечно сразу поставить 7.4, но я хочу всё таки рассказать про процесс обновления. Поэтому вначала устанавливаем php 7.2 и наверно всё что может понадобится для полноценной CMS или того же Nextcloud

dnf install php php-cli php-mysqlnd php-json php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip

после чего перезапускаем apache

systemctl restart httpd

и для проверки работоспособности создадим info файл. Он нам ещё может пригодиться. 

nano /home/sites/site1.ru/www/info.php

со следующим содержимым

<?php phpinfo(); ?>

И выдадим права на файл

chown apache. /home/sites/site1.ru/www/info.php

Теперь заходим через браузер на наш сайт с указанием к какому файлу обратиться, а именно info.php и мы увидем тестовую страницу php с номером версии и со всеми параметрами и настройками. 

Посмотрели? А теперь обновим версию php до 7.4. Для этого подключим репозиторий

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

отключим 7.2

dnf module reset php:7.2

подключим 7.4

dnf module enable php:remi-7.4

и запускаем обновление

dnf update

перезапустим на всякий случай apache

systemctl restart apache

и проверим ранее созданый файл info.php. Теперь он должен выглядеть примерно так: 

image.thumb.png.1aeab2c122cc595949da662d1a72763c.png

Так же для работы некоторых CMS рекомендую изменить некоторые значения файла /etc/php.ini

max_execution_time 60
max_file_uploads 200
post_max_size 100
upload_max_filesize 100

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

Установка mariadb

Теперь установим БД. Я, как и многие наверно, предпочитаю форк mysql - mariadb. Вот его ставить и будем

dnf install mariadb mariadb-server

сразу после установки запускаем и добавляем в автозагрузку

systemctl start mariadb
systemctl enable mariadb

и запускаем скрипт начальной конфигурации

/usr/bin/mysql_secure_installation

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

systemctl restart mariadb

Установка ssl сертификата Lets Encrypt

Процедура так же проста, и не требует особых навыков. Для начала установим пакет certbot

dnf install epel-release
dnf install certbot

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

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/ssl/certs/localhost.crt

и перезапустим apache

apachectl restart

и запустим certbot

certbot certonly

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

После запуска выбирайте способ аутентификации

Apache Web Server plugin (apache)

если он не доступен то тогда 

Place files in webroot directory (webroot)

Во втором случае, нужно на всякий выдать права 777 на директорую с сайтом. После того как сертификат будет получен, можно вернуть всё обратно. 

Теперь отредактируем конфиг нашего сайта, чтобы он работал по https. Приведём его к такому виду

<VirtualHost *:80>

    ServerName site1.ru
    ServerAlias www.site1.ru
    Redirect permanent / https://site1.ru

</VirtualHost>

<VirtualHost *:443>

    ServerName site1.ru
    ServerAlias www.site1.ru
    DocumentRoot /home/sites/site1.ru/www

    ErrorLog /home/sites/site1.ru/log/error.log
    CustomLog /home/sites/site1.ru/log/access.log common

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/site1.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/site1.ru/privkey.pem

    <Directory /home/sites/site1.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
  
</VirtualHost>

Проверяем конфиг на то что в нём нет ошибок

apachectl -t

и перезапускаем apache

systemctl restart httpd

Готово. Сертификат выдан на 3 месяца, и чтобы не забыть его обновить - процесс перевыпуска можно добавить в cron

30 4 * * * root /usr/bin/certbot renew --post-hook "/usr/sbin/apachectl restart" >> /var/log/le-renew.log

каждый день в 4-30 будет запускаться попытка перевыпустить сертификат, и до тех пор пока он будет считаться новым (если не ошибаюсь 2 месяца) то ничего не будет происходить и в логах вы будет видеть примерно следующее с ообщение

[root@web ~]# tail -f /var/log/le-renew.log
Certificate not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
  /etc/letsencrypt/live/site1/fullchain.pem expires on 2022-01-11 (skipped)
  /etc/letsencrypt/live/site2/fullchain.pem expires on 2022-01-11 (skipped)
  /etc/letsencrypt/live/site3/fullchain.pem expires on 2022-01-11 (skipped)
No renewals were attempted.
No hooks were run.

Вот на этом всё. Это полноценный сервер который позволит держать несколько сайтов, нужно только создать для них директории в /home/sites и конфиги в /etc/httpd/conf.d/. У меня на это веб-сервере крутиться собственно данный сайт, а так же облако, и pma. Для облака нужно было ещё пару модулей доставить и настроить cron, но это уже совсем отдельная статья. 

 

Открыть запись

 

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...