Где лежат файлы сайта centos

Обновлено: 05.07.2024

Цели статьи

Введение

В этой статье я расскажу, как настроить web сервер на базе популярного стека технологий — apache и php с модулем prefork. В связи с выходом нового релиза Centos 8, многие статьи на эту тему стали не актуальны, так как версии софта в базовых репозиториях обновились и тот же php нет смысла ставить из стороннего репозитория.

Работать будем на сервере под управлением CentOS 8. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.

В своей тестовой среде я буду использовать следующие сущности.

Web сервер на CentOS 8

Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:

Процессор2 ядра
Память3 Gb
Диск30 Gb SSD

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

Настройка apache в CentOS 8

Теперь приступим к установке apache. В CentOS 8 это делается очень просто:

Добавляем apache в автозагрузку:

Запускаем apache в CentOS 8:

Проверяем, запустился ли сервер:

Если ничего не видите, скорее всего у вас не настроен firewall. Если не занимались его настройкой, то по-умолчанию в centos установлен firewalld. На нем открыть порты для web сервера можно следующими командами.

Проверить, открылись ли порты можно командой.

Все в порядке, веб сервер работает. Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:

Создаем для нее директории.

Перезапуск apache в centos

Проверим созданную конфигурацию и выполним перезапуск apache.

В данном случае ошибок нет, показано предупреждение. Теперь делаем restart apache:

Дальше на своем компьютере правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:

где 10.20.1.23 ip адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.

Установка php в CentOS 8

Установка php в Centos 8 сильно упростилась по сравнению с предыдущей версией, потому что в базовом репозитории хранится актуальная версия php 7.2, которой можно пользоваться. Пока нет необходимости подключать сторонние репозитории, так как версия 7.2 вполне свежа и актуальна. Если у вас нет необходимости использовать что-то новее, то можно остановиться на этой версии.

Устанавливаем php в CentOS 8, а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.

Выполним перезапуск apache:

Создадим файл в директории виртуального хоста и проверим работу php:

Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.

Где лежит php.ini

После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для всех виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:

Добавляем в самый конец, перед </VirtualHost>

Для применения настроек нужно сделать restart apache. Если у вас полностью дефолтная установка, как у меня, то скорее всего вы увидите ошибку.

Invalid command ‘php_admin_value’, perhaps misspelled or defined by a module not included in the server configuration

Тут стоит проверка на запуск модуля. Он загружается только, если у нас загружен модуль prefork. Давайте попробуем его загрузить принудительно. Для этого комментируем все строки, кроме основной.

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

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.

Стандартный модуль mod_php скомпилирован с поддержкой модуля mpm_prefork. С другими он работать не будет. Таким образом, чтобы у нас нормально заработал php, нам надо вместо модуля mpm_event подключить модуль mpm_prefork. Для этого в конфиге 00-mpm.conf закомментируем подключение mpm_event_module и раскомментируем prefork.

После этого проверяйте конфигурацию и перезапускайте apache. Все должно заработать. Теперь в выводе phpinfo можно увидеть изменение настроек.

Установка MySQL в CentOS 8

Как я уже писал ранее, сейчас все большее распространение получает форк mysql — mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.

Устанавливаем mariadb на CentOS 8:

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

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

Не буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу.

Файлы настроек mysql/mariadb в Centos 8 лежат в директории /etc/my.cnf.d. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.

Перезапуск mariadb/mysql в CentOS 8:

На этом все. Базовый функционал web сервера на CentOS 8 настроен. Дальше настроим популярную панель управления mysql сервером — phpmyadmin.

Установка phpmyadmin

Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директорию с виртуальным хостом исходники панели. Давайте подготовим виртуальный хост. Создаем структуру папок.

После добавления конфига, не забудьте перезапустить apache.

Архив упакован в zip. Если у вас нет на сервере пакета unzip, установите его.

Распаковываем исходники в директорию виртуального хоста.

Более подробно вопрос установки и настройки phpmyadmin я рассматривал отдельно. Можете зайти в панель и создать базу mysql для тестового сайта, например, wordpress. Затем через консоль загрузить исходники cms и распаковать их.

Настройка ssl сертификата Lets Encrypt в apache

Теперь настроим работу web сервера apache с ssl сертификатом. Хотя если быть точным, то tls сертификатом. Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. В репозиториях centos 8 его пока нет, поэтому поставим вручную с сайта разрабочиков.

При первом запуске certbot-auto предложит установить зависимости, которые ему нужны для работы. Он написан на python, поэтому зависимостей в виде модулей питона будет много.

После установки пакетов certbot напишет ошибку, что не может сам настроить apache.

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

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

Теперь выпустим сертификат для нашего домена. Имейте ввиду, чтобы получить сертификат у вас должно быть действующее доменное имя, ссылающееся на web сервер, который настраиваете. Let’s Encrypt будет по доменному имени обращаться к серверу, на котором настраиваете сертификат, чтобы проверить домен. В тестовой лаборатории с вымышленным доменным именем получить настоящий ssl сертификат не получится.

В качестве способа аутентификации выбирайте

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

  1. Через файл .htaccess
  2. С помощью настройки виртуального хоста.

Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.

Ротация логов веб сервера apache

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

Я предлагаю ротировать файлы логов по достижению ими размера в 10Мб, сжимать после ротации и хранить 10 архивов с логом. Обращаю внимание на важный нюанс при ротации логов по размеру. Скорее всего в общем случае она будет работать не так, как вы ожидаете. Подробности читайте по ссылке. Я привел пример простой конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

Настройка SELinux для web сервера apache

Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.

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

Создаем модуль selinux.

То же самое делаем для php.

Добавим нашу директорию /web/sites в соответствующие таблицы selinux для контента и логов.

И отдельно добавим каталог, куда web сервер сможет писать данные. Я покажу на примере правила для сайтов wordpress, где web сервер должен уметь писать в директорию wp-content для загрузки медиафайлов, установки тем и плагинов, а так же изменять файл wp-config.php.

Обновляем атрибуты файлов новым контекстом SELinux.

Теперь активируем защиту selinux и проверяем, что она работает.

Режим работы Enforcing означает, что selinux работает. Убедиться, что модули загружены, можно командой.

В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.

Favorite

Добавить в избранное

Где хранятся данные сайта - выделенный сервер?

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

Хостинг и его виды

Хостинг необходим для того чтобы хранящиеся на нем файлы сайта были доступны пользователям 24 часа в сутки, а также для того чтобы его владелец мог самостоятельно управлять ними и при необходимости конфигурировать. Для этого существуют панели управления.

Где хранятся данные сайта - выделенный сервер?

В настоящее время существует 5 типов хостинга, которые пользуются большим спросом среди пользователей всемирной сети.

· Виртуальный хостинг. В этом случае один сервер делится не определенное количество частей и сдается в аренду, поэтому на одном сервере может находиться сразу множество сайтов. Все арендаторы используют мощности одного сервера, поэтому он подходит для размещения небольших веб-сайтов.

· Виртуальный сервер. В этом случае реальный сервер делится на несколько отдельных частей и сдается в аренду также частями. Один «железный» сервер может быть разделен на множество виртуальных серверов, каждый из которых пользователь может настраивать под конкретный проект, независимо от соседей.

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

· Колокейшн. В этом случае пользователь располагает свои сервера у провайдера и оплачивает их профессиональное обслуживание. Такой хостинг подойдет людям, которые имеют высоконагруженные сайты.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Существует достаточно удобный и бесплатный сервис Яндекс.Диск, который может использовать любой желающий. Бесплатно дается не так много места, но для бэкапа сайта на wordpress хватит.

Внимание! Перед работой с резервным копированием, настройте работу Яндекс.Диска по инструкции: «CentOS 7: Консольный клиент Яндекс.Диска», в противном случае скрипт будет создавать просто локальные копии и не будет отправлять на хранение ваши файлы на Яндекс.Диск.

2. Подготовка к работе.

Двигаться будем поэтапно. Сначала просто рассмотрим вариант бэкапа непосредственно файлов сайта и базы данных, а затем полностью ответим на вопрос о том как сделать регулярную резервную копию сайта на wordpress.

Установим архиватор tar:

Создадим каталог для хранения скриптов /sh прямо в корневом каталоге CentOS 7:

3. Скрипт для архива файлов сайта.

Все комментарии и пояснения напишу сразу в скрипте:

Можно пользоваться отдельно этим скриптом для создания архивов файлов, не обязательно сайта.

Кладем скрипт в cron и получаем регулярную архивацию.

4. Скрипт для бэкапа базы данных.

Теперь сделаем скрипт для резервной копии базы данных. Тут тоже ничего особенного, использую стандартное средство mysqldamp:

На выходе имеем файл с дампом базы mysql_2015-09-29_04-10.sql.gz . Дамп хранится в текстовом формате, можно открывать и редактировать любым редактором.

Кладем скрипт в cron и получаем регулярный дамп базы данных.

5. Автоматизация архивации сайта.

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

Я использую следующую схему бэкапа сайта:

  • Папка day , где хранится 7 архивов сайта за последние 7 дней.
  • Папка week , где хранятся 4 бэкапа за последние 4 недели.
  • Папка month , где хранятся все резервные копии сайта за все время, эту папку я автоматически не очищаю.

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

Привожу 3 полных скрипта по созданию резервной копии сайта wordpress, но реально можно бэкапить любой сайт — joomla, drupal, modx и другие. Принципиального значения cms или фреймворк не имеет.

5.1. Ежедневный бэкап.

Скрипт ежедневного бэкапа сайта backup-day.sh :

5.2. Еженедельный бэкап.

Скрипт еженедельного бэкапа сайта backup-week.sh :

5.3. Ежемесячный бэкап.

Скрипт ежемесячного бэкапа сайта backup-month.sh :

6. Флаг исполняемости.

Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости. Для этого используется команда chmod +x и имя файла скрипта:

Теперь его можно выполнять прямо из консоли:

7. Автоматизация исполнения сценариев: cron.

Теперь для автоматизации добавляем эти 3 файла в cron:

Добавляем в него строки по смыслу:

Все, наш wordpress надежно забэкаплен.

Еще сюда можно прикрутить оповещение на почту! Как сделать возможность получать письма с сервера описано в статье: «CentOS 7: Postfix 3 для отправки электронной почты с внутреннего системного «почтового ящика».

Тогда в конце каждого текста команд вашего скрипта добавьте:

8. Восстановление сайта wordpress из резервной копии.

Теперь рассмотрим вариант, когда вам необходимо восстановить сайт из резервной копии. Для этого нам понадобятся оба архива: исходники и база данных. Разархивировать в принципе можно где угодно. В Windows архивы открываются бесплатным архиватором 7zip. Дамп базы данных в обычном текстовом формате, его можно открыть блокнотом, скопировать и вставить в phpmyadmin.


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

Вот пример того, как извлечь файлы из архива в консоли сервера.

Разархивируем каталог www из бэкапа:

Файлы извлечены в папку www . Теперь их можно скопировать в папку с сайтом.

Для восстановления базы данных поступаем следующим образом.

Сначала распакуем архив:

Теперь зальем дамп в базу данных:

Все, база данных восстановлена!

Внимание! Необходимо учесть, что база будет восстановлена в базу с оригинальным именем и заменит ее содержимое, если таковая на сервере есть. Чтобы восстановить базу в другую, необходимо отредактировать начало дампа и заменить там название базы на новое. Если восстановление происходит на другом сервере, то это не имеет значения.

9. Заключение.

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

Схема создания бэкапа позволяет откатиться практически на неограниченное время назад. Глубину архивов вы можете сами задавать, изменяя параметр mtime в скрипте. Можно хранить, к примеру, ежедневный архив не 7 дней, как делаю я, а 30, если у вас есть такая потребность.

Для экономии времени, ниже представлен список часто используемых команд при работе с CentOS.

Системная информация

показать мануал для command:

показать информацию о ядре:

информация о памяти:

показать инф. о использовании дисков в GB:

вывести размер текущего каталога:

использование памяти и swap:

информация версия ОС:

информация о дистрибутиве:

показать текущий аптайм:

показать пользователей онлайн:

имя, под которым вы залогинены:

Дата и время

показать текущую дату и время:

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

установить дату и время, где MM – месяц, DD – день, hh – час, mm – минуты:

вывести календарь на текущий месяц:

Процессы

вывести ваши текущие активные процессы:

найти и вывести информацию о процессе process:

показать все запущенные процессы:

список остановленных и фоновых задач:

убить процесс с id pid:

убить все процессы с именем process:

получить информацию whois для domain:

получить DNS информацию domain:

Работа с пакетами

вывести список установленных пакетов:

обновить все пакеты:

установить пакет package_name:

удалить пакет package_name:

Файлы и папки

скачать файл по адресу url:

создать символическую ссылку link к файлу file:

список файлов и каталогов:

форматированный список со скрытыми каталогами и файлами:

сменить на домашний каталог:

сменить директорию на dir:

показать текущий каталог:

удалить каталог dir:

удалить file без подтверждения:

удалить каталог dir без подтверждения:

скопировать file1 в file2:

скопировать dir1 в dir2:

скопировать dir1 в dir2 с сохранением всех прав доступа:

переименовать file1 в file2, если file2 каталог, то переместить file1 в каталог file2:

создать директорию dir:

создать древо директорий /home/user/dir:

установка прав 777 на dir:

установка прав 777 на dir и все подкаталоги рекурсивно:

задать владельца apache с группы apache для директории dir:

Читайте также: