Установка-настройка VPS\VDS с нуля на Centos 7

Введение

Подобную статью я писал 4 года назад про тоже самое, но с Ubuntu. Время для ИТ-мира огромное прошло, да и я пересмотрел свои взгляды на дистрибутивы. Сегодня проведем базовую настройку сервера VPS на Centos 7, настроим фаервол, пользователей, доступы. Установим Apache, PHP 7, MySQL, phpMyAdmin и всякие другие штуки :) .

Если вы планируете использовать панель управления сайтами, например Plesk, ISP Manager или cPanel, то вам это руководство не подойдет. Здесь ставим и делаем все только самое нужное, только ручками, не перегружая систему.

Описываю все максимально подробно, но все же нюансы у каждой инсталляции разные. Подразумевается, что вы имеете хотя бы минимальные знания о Linux и умеете более-менее работать с командной строкой (cd, ls, nano, vi, rm и т.п.)

Первые шаги

Итак, у нас имеется свежий VPS на Centos 7, вы получили логин и пароль от root и успешно вошли в систему через SSH, сеть уже настроена и доступ в интернет есть.

Обновим систему:

yum update

Соглашаемся (y) со всеми вопросами.

adduser user

Где user — меняем на ваш будущий логин.

passwd user

Устанавливаем у нашего только что созданного юзера пароль, надо будет ввести дважды, символы не показываются при наборе (это нормально).

usermod -aG wheel user

Добавляем нашего пользователя в группу wheel, что даст ему права исполнять команды от лица администратора.

Далее выходим из системы:

logout

И входим по SSH на сервер снова, с новым пользователем, который мы создали.

Проверяем, что наш пользователь получил повышенные права:

sudo -i

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

Возвращаемся обратно в своего пользователя:

su user

Безопасность безопасная

Первое что делаем — поднастроим SSH и ограничим его от посягательств злых людей.

sudo nano /etc/ssh/sshd_config

Откроется текстовый редактор Nano. Кратко как работать: стрелками перемещаем курсор, PageUp и PageDown листают страницы вверх и вниз, Ctrl+O сохраняет изменения, Ctrl+X — выход.

Нам нужно найти строку:

# Port 22

Тут # — означает что дальше по строке идет комментарий и системой этот параметр не учитывается. Логично понимаем, что параметр этот отвечает за порт, на котором у нас слушает подключения SSH. Для минимизации атак перебором, меняем порт на другой подальше, например 22222, и убираем знак комментария, чтобы SSH считал этот параметр. Должно получится:

Port 22222

Далее, указываем способ подключения — только IPv4. Возможно, у вас доступен и IPv6 в системе, но в конкретно этом случае, он не нужен. Было так:

# AddressFamily any

Меняем на:

AddressFamily inet

Надеюсь к этому моменту вы уже разобрались как раскомментировать строку и менять значения параметров :) . Нажимаем Enter пару раз, и под этим значением в новой строке пишем новый параметр:

AllowUsers user

Этой директивой мы разрешаем подключаться по SSH только пользователю, которого мы создали. Рут будет отключен от удаленного доступа совсем. Сохраняем нашу конфигурацию Ctrl+O.

Настроим фаервол. По умолчанию все сетевые порты закрыты, кроме SSH порта 22. Но теперь у нас порт другой, плюс надо открыть 80 и 443, чтобы работал веб-сервер. Добавляем 22222:

sudo firewall-cmd --add-port=22222/tcp --permanent

443:

sudo firewall-cmd --add-service=https --permanent

80:

sudo firewall-cmd --add-service=http --permanent

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

sudo firewall-cmd --reload

После каждый команды у вас должно высвечиваться «success», что означает корректное применение команды.

sudo service sshd restart

Данная команда перезапустит службу SSH и применит настройки. Теперь попасть на сервер может только user. И только по порту 22222. меняем настройки подключения и возвращаемся в консоль.

Ставим ПО

Centos крайне консервативен сам по себе ( и поэтому намного стабильнее Debian и Ubuntu), потому родной его репозиторий с пакетами не содержит много чего. Чтобы это исправить, подключаем репозиторий EPEL:

sudo yum install epel-release
sudo yum update

Доставим пакетов, нужных в работе:

sudo yum install htop wget multitail bash-completion git zip unzip

Спросит несколько подтверждений, со всеми соглашаемся.

Установим Prelink — эта утилита будет автоматически подгружать в память наиболее часто используемые библиотеки. Это сократит время доступа к файлам и улучшит быстродействие. Особенно актуально, если ваш сервер не на SSD-дисках:

sudo yum install prelink

Соглашаемся со всем. Ну вы сами уже поняли, да? :)

Далее у нас идет Apache. Тут он называется httpd:

sudo yum install httpd

И после, MySQL:

sudo yum install mariadb mariadb-server

Для PHP 7 придется поболее пошаманить, даже в EPEL репозитории нужной версии PHP нет. Добавим еще репозиторий:

sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Далее отредактируем конфиг нужного нам репозитория, чтобы он заработал:

sudo nano /etc/yum.repos.d/remi-php74.repo

В этом файле нам нужно изменить:

enabled=0

На:

enabled=1

И сохраняем файл, мы же уже умеем? Ctrl+O. И выход Ctrl+X. Далее, обновляем кэш пакетов:

sudo yum update

И ставим пачкой сразу PHP 7.4 (последняя версия на момент написания) с некоторыми модулями:

sudo yum install php php-fpm php-gd php-mysql php-imagick php-dom php-opcache php-zip php-mbstring

Настроим ПО

MySQL требует запуски скрипта первоначальной настройки:

sudo mysql_secure_installation

Запустится мастер настройки в виде вопросов-ответов. Запросит рутовый пароль от баз. Он изначально пустой, ничего не вводим. Задаем на следующих шагах новый рутовый пароль от баз, подтверждаем удаление анонимного доступа и обновление привелегий. Удаленные соединения можете разрешать, можете нет, у нас всеравно порт MySQL закрыт фаерволом из внешней сети.

Далее — PHP. Открываем его конфиг:

sudo nano /etc/php.ini

Здесь нас интересуют три параметра. Их нужно привести к следущим значениям:

memory_limit = 128M
post_max_size = 64M
upload_max_filesize = 64M

Сохраняем, закрываем. Теперь Apache:

sudo nano /etc/httpd/conf/httpd.conf

Изменим дополнительные индексные файлы:

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.php
</IfModule>

В модуле <Directory «/var/www/html»> нужно заменить:

AllowOverride None

На:

AllowOverride All

Это разрешит серверу исполнять директивы .htaccess для файлов, необходимых для безопасной работы сайтов.

Если вы никогда не имели ранее дела с Apache, тут я подробнее остановлюсь на том, как настраиваются виртуальные хосты на нем. Другими словами, как правильно указать «какой домен в какую папку ведет». Если вы знаете как, пропустите следущий абзац.

В Apache каждый сайт, домен, или как тут они называются «виртуальный хосты (VirtualHost)» настраивается отдельным конфигурационным файлом для каждого хоста в директории /etc/httpd/conf.d/. Если вы просмотрите содержимое этой папки (ls), вы увидите там несколько файлов, в том числе welcome.conf. Он содержит настройки страницы — заглушки. Это первый виртуальный хост, тестовый. Заодно и проверим, работает ли наш сервер и открывается ли ресурс — откройте адрес вашего сервера в вашем любимом браузере, вы должны увидеть сайт-заглушку с информацией про апач. Если она открываается, значит до этого мы все настроили корректно. Особенность работы этой страницы в том, что если кто-либо укажет айпи-адрес вашего сервера в браузере, или перейдет по любой ссылке, домен которой явно не указан в конфигцрация виртуальных хостов, он всегда будет попадать на эту страницу. Поэтому, ее надо отключить.

Отключаем страницу заглушку, закомментировав все строки в файле welcome.conf решеткой на каждой строке (#):

sudo nano /etc/httpd/conf.d/welcome.conf

Далее, нам нужно создать наш собственный виртуальный хост для нашего первого домена. Тут мы считаем, что домен у вас есть, и его А запись ведет на айпи-адрес вашего сервера. Создаем конфигурационный файл:

sudo nano /etc/httpd/conf.d/domain.conf

Командой выше мы создаем новый конфиг и сразу открываем редактор, чтобы его напонить. Название конфига может быть любым для вашего удобства, но лучше, конечно, называть именами ваших доменов. Главное, это расширение .conf, иначе апач не посчитает эти файлы конфигурациями. Открывается редактор, и туда мы должны вставить следующий текст:

<VirtualHost *:80>

    ServerName domain.com
    DocumentRoot /var/www/domain.com

    ErrorLog /var/log/domain.com/error.log
    CustomLog /var/log/domain.com/access.log common

    <Directory /var/www/domain.com>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

Здесь мы создаем виртуальный хост domain.com (меняйте на ваш домен), указываем каталог, в котором будут файлы сайта и указываем, куда писать логи. Стандартно, каталоги с файлами для сайтов кладуться в /var/www/ и в соответствующую подпапку для каждого сайта.

После того, как вы вставили текст выше в свой конфиг, нужно изменить значения на ваши — domain.com на ваш домен. После изменений сохраняйте файл и выходите из редактора.

Мы указали, куда писать логи, но сам подкаталог domain.com отсутствует, надо его создать:

sudo mkdir /var/log/domain.com

И также создать тестовую главную страницу нашего нового сайта:

sudo nano /var/www/domain.com/index.php

И наполнить ее краткой и лаконичной инструкцией — выводом конфигурации PHP:

<?php
phpinfo();
?>

После редактирования конфиг — файлов, для применения настроек нужно перезапускать апач:

sudo service httpd restart

После исполнения этой команды, страница-заглушка должна исчезнуть, а браузер по побращению к вашему айпи-адресу будет возврашать ошибку «Forbidden» (Доступ запрещен). Но ваш сайт по обращению к domain.com будет выводить страницу конфигурации PHP:

Если вы видите такую страницу, значит мы сразу проверили и наш новый сайт, и работу PHP и работу апача. Наличие данной страницы в общем доступе — дыра безопасности, поэтому эту страницу после проверки надо удалить:

sudo rm -f /var/www/domain.com/index.php

domain.com не забывайте менять на свой домен!

Для удобного менеджмента базой данных, нам нужно установить phpMyAdmin. Перехордим на phpmyadmin.net, правой кнопкой жмем на ссылку скачивания и копируем адрес ссылки:

На момент написания, последняя версия — 5.0.2. В этом случае скопированная вами ссылка будет такой:

https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip

Далее сскачаем архив:

cd /var/www/domain.com/
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip

Каталог с менеджером баз данных нужно создавать с нелогичным путем (pma1234 например), чтобы перебором нельзя было на него попасть, и этот адрес знали только вы. Разархивируем архив и переименуем папку:

sudo unzip https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
sudo mv phpMyAdmin-5.0.2-all-languages.zip pma1234

Теперь по адресу http://domain.com/pma1234 откроется phpMyAdmin, доступ в который: логин — root, пароль — тот, который вы задали при настройке MySQL.

Подытожим

У нас настроен и готов к работе веб-сервер Apache с PHP 7.4, MySQL и удобным менеджером БД. Мы можем создавать сколько угодно виртуальных хостов и баз данных. Простой хостинг нам такого не позволил бы, затем и нужен VPS.

Немного агитации. :) Если вам описанное здесь не по силам, или требуются дополнительные настройки (HTTPS, Memcached, Redis, сайт на WordPress, да что угодно еще) — вы можете обратиться ко мне, через страницу Контактов.

Среди VPS — провайдеров я рекомендую HexCore, которым пользуюсь сам. Выделяется он невысоким ценником, быстрыми дисками и автоматическим бесплатным бэкапом всего сервера раз в неделю. И самое важное для меня — возможность установить любую операционную систему (можете загрузить свой .ISO файл)!