Настройка VPS (VDS) для самых маленьких
Содержание поста
Хотите приручить дракона по имени VPS (VDS)? В данном посте вы сможете найти ответы на многие вопросы и погрузиться в дивный новый мир, из которого не захочется возвращаться.
✌️ Я долго мучился в попытках выбрать правильную организацию данного поста: разделить его на несколько или объединить в один, так называемый лонгрид. В итоге решил оставить все в рамках одного поста по следующим причинам:
- Все нужное в одном месте, не нужно искать по блогу необходимый раздел, вспоминать его название, а потом искать заново, если вспомнилось не то что нужно;
- Быстрый поиск на странице свойствами браузера (найти на странице);
- Данный пост я планирую постоянно пополнять и обновлять, а сделать это проще в одном месте.
Поэтому, готовьтесь, будет много букв. Для новичков, можно читать от начала до конца (я старался логически расставить разделы), для тех, что знает что ищет — есть содержание по темам (выше этого абзаца в ПК-версии и синяя иконка в правом нижнем углу в мобильной версии).
VPS или VDS
Одни из первых вопросов у новичков:
- Что лучше VPS или VDS?
- Чем отличается VPS от VDS?
Давайте разбираться.
Начнем с терминов:
- VPS (Virtual Private Server) — виртуальный частный сервер.
- VDS (Virtual Dedicated Server) — виртуальный выделенный сервер.
Сразу спойлер: это название одной и той же услуги. А данные аббревиатуры являются синонимами, вы можете использовать любую. Мне больше нравится VPS и в дальнейшем я буду использовать ее.
А теперь подробнее насчет возникшей дилеммы. В какой-то момент некоторые компании решили разделить эти понятия, основывая свои доводы на типе виртуализации: мол, если VPS — то разделение идет на уровне операционной системы, а если VDS, то на уровне железа.
Если развить эту мысль дальше, то можно сделать ошибочный вывод, что VPS — это когда на сервере вам создают отдельного пользователя и сдают в аренду, VDS — это когда в аренду сдают, например 1 плату оперативной памяти, 1 ядро процессора и один слот с памятью. Это неверно и даже в некоторой мере абсурдно. В рамках услуги VPS (VDS) применяется, и то, и другое.
Более того, есть сервисы, которые продают эти услуги отдельно и по разным ценам. Если встретите такой сервис — бегите и никогда не возвращайтесь. Данное введение в заблуждение является достоверным фактом непрофессионализма с некоторой долей мошенничества.
Разобрали, приняли, поехали дальше.
Что такое VPS
Чтобы у вас сложилась более полная картина происходящего, я хочу провести более расширенный экскурс и сделать описание несколько шире, чем просто определение VPS.
Итак, допустим у нас есть какой-то проект, например, интернет-магазин, который мы хотим опубликовать в интернете и заработать много денег.
Всего есть три варианта (без экзотических или экстра дорогих):
- Виртуальный хостинг.
- VPS.
- Выделенный сервер.
Разберем эти варианты подробнее.
Виртуальный хостинг
Самый популярный и доступный вариант. За относительно небольшие деньги вы арендуете панель управления установленную на сервере хостинг-компанией с помощью которой можете работать с доменами, файлами, базами данных и прочим.
Вычислительные мощности будут ограничены выбранным тарифом. Если мы рассматриваем пример сервера выше, то на нем могут располагаться сотни, тысячи, десятки тысяч… аккаунтов виртуального хостинга.
Основное преимущество виртуального хостинга — это отсутствие необходимости в серверном администрировании. В панели управления уже есть необходимый функционал с графическим интерфейсом: нажал одну кнопочку — создал базу данных, нажал на другую — создал CRON-задачу, нажал на третью — загрузил архив в 10 Гб. Данный вариант подходит для большинства стандартных сайтов и веб-приложений.
А вот основные недостатки — это ограниченные вычислительные мощности, которые обычно лимитируются нагрузкой на процессор и базу данных, а также отсутствие возможности установки произвольного программного обеспечения на сервер. Например, чаще всего виртуальный хостинг комплектуется MySQL, и если для своего проекта вы хотите использовать PostgreSQL — виртуальный хостинг не подойдет.
Рассматривая наш интернет-магазин — это может быть отличной точкой отправления. Мы запускаем сайт, получаем первые заказы и деньги. Но наш проект растет, пользователей становится все больше, мы хотим добавить новые возможности, а виртуальный хостинг становится для нас уже слишком тесным. Пора двигаться дальше…
VPS
Возьмем за основу некий гипотетический сервер, у которого есть: 10 CPU (процессоров), 200 ГБ RAM (оперативной памяти) и 30 ТБ SSD (постоянной памяти).
В рамках VPS вы можете арендовать, например: 1 CPU, 5 Гб RAM и 20 Гб SSD. Конечно, можно арендовать более мощную конфигурацию — все зависит от бюджета.
Вы получаете полноценный сервер: все заказанные мощности — полностью ваши, можете устанавливать любое программное обеспечение и проводить настолько тонкую настройку, насколько позволит фантазия.
Здесь хочу оговориться, что VPS — это не всегда «кусочек» одного сервера которым вы пользуетесь. Чаще всего, это несколько серверов объединенных в одну сеть, которые распределяют нагрузку между собой. Но вас, как конечных потребителей — это не сильно должно волновать.
Данный вариант подходит проектов средней сложности, которым важно программное окружение или вычислительные мощности, а часто: и то, и другое.
Из недостатков: более высокая цена (в сравнении с виртуальным хостингом) и необходимость навыков серверного администрирования (а этот пост как раз и посвящен тому, чтобы вы получили такие навыки на базовом уровне).
Разместив наш интернет-магазин в рамках VPS — мы наконец-то счастливы. Можем без проблем внедрять новую функциональность, оптимизировать скорость работы и многое другое. В принципе, можно остановиться. Как вдруг, у нас появляется возможность выйти на мировой рынок — а это уже совсем другие цифры…
Выделенный сервер
Это аренда полноценного сервера в дата-центре хостинг-провайдера. Он будет принадлежать только вам в рамках оплаченного периода. Возможности будут те же, что и в VPS, плюс дополнительные возможности по расширению и модернизации.
Также, есть возможность создать серверный кластер. Это когда несколько серверов объединяют в одну сеть и они обслуживают проект распределяя нагрузку между собой и заменяют какой-либо сервер из сети, если он недоступен по какой-либо причине. Данный вариант подходит для крупных проектов.
Цель, которую мы закладывали в интернет-магазин, достигнута. У нас есть кластер серверов в каждой стране мире, которые обслуживают счастливых покупателей, а если вдруг какой-то сервер выйдет из строя, его прикроет сервер из соседней страны. Пора отдохнуть и прикупить комфортабельную яхту или уютный остров…
Выбор хостинг-провайдера для VPS
Хочу сразу дать совет: не гонитесь за ценой, а выбирайте по качеству. Самый дешевый вариант (а точнее бесплатный) — это ваш компьютер. Разверните локальный сервер и работайте над проектом или тренируйтесь.
Стабильная работа проекта при старте — это очень важно. На моей практике было множество историй от клиентов, которые вкладывали большие деньги в разработку, а потом по своему неведению, экономии или дурному совету — запускали проект у самого дешевого хостинг-провайдера с сомнительной репутацией.
Итак, проект готов, реклама с большим бюджетом запущена, клиенты идут. А проект упал раз (обновление сервера), упал два (технические работы), упал три (причину выясняем…) и так далее. Рекламный бюджет израсходован, клиенты потеряли доверие и прочее, прочее, прочее.
Не делайте так. Не важно, какого типа проект вы запускаете. Не важно, будет ли он монетизироваться. Начинать работу нужно только с проверенными хостинг-провайдерами. И именно поэтому, данный этап так важен.
Понимаю ваше начальное замешательство. Существует огромный выбор хостинг-провайдеров и выбор становится мучительной мукой. Поэтому предлагаю начальный план действий, который вы можете адаптировать под себя.
1. Составить список лидеров на основе рейтингов.
Открываете сайты с рейтингами хостинг-провайдеров, читаете отзывы и выписываете те компании, которые вам кажутся наиболее подходящими. Сайтов с рейтингами тоже много, вот самые популярные из них:
Обязательно обращайте внимание на проплаченные позиции в рейтинге и купленные отзывы. Не бывает идеальных хостинг-провайдеров. Всегда найдутся недовольные клиенты. Поэтому, если вы увидите 100 положительных отзывов из 100 — есть большая вероятность, что это не настоящие, а купленные отзывы.
С каждого рейтинга выпишите понравившихся лидеров, затем объедините всех в один список, убрав тех, кто был только в одном рейтинге. В идеале, в вашем списке должны провайдеры, которые были во всех рейтингах.
2. Сравните тарифы и цены.
Одним из плюсов VPS является то, что можно начинать работу с самой минимальной конфигурацией, а в последующем, при росте нагрузки или проекта, просто повышать тариф.
Поэтому нужно проверить всех хостинг-провайдеров из вашего списка на предоставление широкой линейки тарифа и обязательного наличия минимальной конфигурации. Если тарифов мало или самый минимальный стоит как крыло боинга — исключаем из списка.
Также, на этом этапе обращаем внимание на ценообразование среди всех конкурсантов: должен быть разбег в ценах плюс-минус 20-30%. Если кто-то сильно выбивается в бОльшую или меньшую сторону — исключаем из списка.
3. «Пощупайте» внутренний интерфейс.
Практически все хостинг-провайдеры позволяют зарегистрироваться без оплаты (если это не так — исключаем из списка). Это может быть тестовый период или обычная регистрация, после которой можно выбрать нужный тариф.
После регистрации, внимательно исследуем все разделы и выносим оценку, основанную на собственных предпочтениях. Здесь очень тонкий момент, мы все разные и вкусы у нас, соответственно, тоже разные. Если вы, просматривая личный кабинет, испытываете неудобства в расположении элементов навигации, видите лаги или еще какие-либо моменты, которые вас не устраивают — исключаете из списка.
Конечно, человек такое существо, которое привыкает ко всему, но если при первом взгляде у вас возникает дискомфорт, лучше отказаться сразу, чем потом пройти все стадии от отрицания до принятия.
4. Пообщайтесь с технической поддержкой.
Техническая поддержка очень важна. Это будет вторая инстанция после Google, куда вы обратитесь за помощью в случае проблем. Поэтому советую вам задать какой-то вопрос, чтобы оценить время и качество ответа. Если вам ответили через сутки (или позже) или ответили так, что стало еще непонятнее — исключайте из списка.
5. Выбор победителя.
Итак, у вас в списке остались самые лучше — осталось выбрать одного. Если вы еще не определились окончательно, то я рекомендую прислушаться к своим ощущениям. Если какой-то провайдер вам по душе, но цена выше, чем у другого, то выбирайте того, у кого выше цена. Поверьте, наценка в 20-30% не стоит того, чтобы потом пожалеть о выборе.
Также, список полученный до этого этапа — обязательно сохраните. Если вдруг что-то пойдет не так или поймете, что ошиблись в выборе — у вас будут альтернативные варианты.
И наконец, когда вы уже можете проводить оценку хостинг-провайдеров непредвзято, я могу привести список хостинг-провайдеров с кратким описанием каждого, с которыми часто работал. Может быть мои варианты, помогут сделать вам окончательный выбор.
Раньше, среди моих фаворитов, были также и зарубежные сервисы: DigitalOcean и AWS. Но так как я пишу этот пост в октябре 2024 года, вы должны быть в курсе ограничений, по которым оплата таких сервисов затруднена. Если вы читаете этот пост из светлого будущего, где уже нет таких ограничений, тогда можете смело добавлять в свой список этих провайдеров.Хостинг-провайдер Рег.ру
Достоинства:
- Один крупнейших и старейших хостинг провайдеров.
Недостатки:
- Часто необоснованно завышенная цена на тарифы и дополнительные услуги.
- Много доп.услуг предоставляются на платной основе, хотя у большинства других хостинг-провайдеров — входят в стоимость тарифа.
- Долгая тех.поддержка. Компания обосновывает это большим количеством клиентов и высокой загрузкой специалистов, но как говорится: «Проблемы индейцев шерифа не …» — расширяйте штат.
Хостинг-провайдер Beget
Достоинства:
- Многие доп.услуги входят в стоимость тарифа.
- Быстрая тех.поддержка.
Недостатки:
- По моему мнению, не очень удобная панель управления.
- Не всегда квалифицированная тех.поддержка. Бывают некорректные ответы, на один и тот же вопрос, можно получить два кардинально разных ответа (и не всегда правильные).
Хостинг-провайдер Джино
Достоинства:
- Многие популярные доп.услуги входят в стоимость тарифа.
- По моему мнению, удобная панель управления.
Недостатки:
- Долгая тех.поддержка. Не как в рег.ру конечно, но иногда ответ нужно ждать от 3 часов.
- Некоторые элементарные услуги — платные.
- Частенько проводятся технические работы, да, в основном ночью, но я считаю это не очень хорошим показателем.
Хостинг-провайдер Timeweb Cloud
Здесь сразу объясню свою предвзятость. Это был мой первый хостинг, с которым я начал работать в 2014 году. На то время — это была развивающаяся компания, которая была очень открыта к клиентам (у них даже до сих пор есть раздел, где клиенты публикуют свои пожелания по модернизации сервиса, все голосуют и идеи набравшие бОльшее количество голосов — рассматриваются компанией и внедряются). Компания постоянно обновлялась в лучшую сторону и устраивала меня по всем параметрам.
В последующем, когда компания подросла, как это часто и бывает, появились неудобства. Подросли цены (до этого, были одни из самых низких) до среднего или даже выше среднего уровня среди конкурентов, тех.поддержка стала чуть медленнее, а падения серверов стали чуть чаще.
Но не смотря на это, по моему мнению, среди остальных конкурентов — этот хостинг-провайдер остается лучшим выбором как для хостинга, так и для VPS.
Достоинства:
- Удобная панель управления.
- Быстрая и квалифицированная тех.поддержка.
- Современное (можно даже сказать топовое) железо на серверах.
Недостатки:
- Популярные дополнительные услуги — платные.
Итак, с выбором хостинг-провайдера вы определились, зарегистрировали аккаунт, выбрали тариф. Двигаемся дальше.
Выбор операционной системы для VPS
Обычно хостинг провайдеры предлагают большой выбор операционных систем.
Есть очень специфичный варианты, но обычно выбор делается между Linux или Windows.
Windows Server — платная операционная система и обычно используется в проектах, для которых является обязательной по тем или иным причинам.
Наиболее часто на VPS устанавливают дистрибутивы Linux, которые можно использовать бесплатно. Три наиболее популярных варианта: Debian, Ubuntu и CentOS.
Описание каждой операционной системы заслуживает отдельного поста (если не нескольких). Поэтому я приведу краткое описание популярных Linux-дистрибутивов, а за детальным описанием вы можете обратиться к поисковым системам.
Debian
Является самым старым и наиболее стабильным дистрибутивом Linux в сравнении с остальными. Создан в 1993 году и имеет обширное сообщество.
В Debian существует три ветки:
- Stable (стабильная). Версия, которая обновляется примерно раз в 2 года и поддерживает предыдущую версию в течение 5 лет. Но за стабильность нужно платить — Stable не всегда поддерживает самые современные версии дополнительных пакетов.
- Testing (тестируемая). Данная версия используется как промежуточный вариант перед выпуском Stable-версии. Этот вариант используют чаще всего, т.к. он позволяет использовать современные версии дополнительных пакетов, но платой за это может быть нестабильная работа.
- Unstable (нестабильная). Предназначена, в основном, для испытаний и ее не стоит рассматривать для установки на VPS.
Debian использует систему пакетов APT (Advanced Package Tool).
Debian в основном выбирают для проектов, где важна высокая стабильность, полный контроль над системой и критически важна устойчивая работа при обновлениях пакетов.
Ubuntu
Дистрибутив создан в 2004 году на основе Debian. Ubuntu предоставляет необходимый баланс между стабильностью и современностью устанавливаемых пакетов. Обновления выпускаются два раза в года и имеют следующую поддержку:
- Обычные версии поддерживаются 9 месяцев.
- LTS-версии (Long Term Support) поддерживаются 5 лет.
Из-за частых обновлений, в сравнении с Debian, Ubuntu лучше поддерживает современное оборудование.
Ubuntu использует систему пакетов APT (Advanced Package Tool).
Ubuntu подходит для широкого спектра задач и проектов. Основными преимуществами являются: удобство, большее количество качественное документации и активное сообщество.
CentOS
Дистрибутив представлен в 2004 году и основан на коммерческом дистрибутиве RHEL (Red Hat Enterprise Linux). В отличие от Debian и Ubuntu не имеет какого-либо графика по выпуску обновлений. 30 июня 2024 года завершилась поддержка последней версии CentOS с номером 7. В последующем дистрибутив представлен как CentOS Stream и он не будет иметь релизов со стабильной поддержкой, а будет развиваться как постоянно обновляемая платформа для получения свежих версий пакетов.
Дистрибутив изначально ориентирован именно на серверное использование, но в силу своей специфичности, не всегда подходит новичкам в серверном администрировании.
CentOS использует систему пакетов YUM (Yellowdog Updater, Modified).
CentOS используют в основном опытные системные администраторы для проектов со сложностью выше среднего. Прошу обратить внимание, что под словом «используют», я имею в виду именно правильную конфигурацию, которая подбирается индивидуально под проект, а не просто установку дистрибутива, навешивания пакетов и веры в то, что теперь все будет работать быстрее и стабильнее.
Что выбрать новичку?
Если до этого вы не работали ни с одной из этих операционных систем, тогда устанавливайте последнюю доступную версию Ubuntu. Она является отличной отправной точкой.
Подключение к серверу по SSH
Для подключения к серверу, необходимо использовать сетевой протокол SSH (Secure Shell). Если вы до этого не работали с SSH, не волнуйтесь, я буду расписывать все шаги максимально подробно. Но для общего развития, рекомендую прочитать мои статьи по работе с SSH и терминалом.
При создании VPS у хостинг-провайдер предоставил вам (обычно информацию отправляют на email после заказа, а также дублируют в панели управления VPS):
- IP-адрес сервера, который выглядит как четыре разряда цифр разделены точками (вида 000.000.000.000).
- Root-пароль — это пароль главного пользователя сервера.
Для начала, рассмотрим самый простой вариант подключения к серверу по SSH — через пароль.
Подключение по паролю
Linux, MacOS, Windows 10 (от 1809)
Для Linux и MacOS используйте встроенную в операционную систему утилиту, которая называется терминал (terminal), а для WIndows 10 — PowerShell.
Запускаем терминал / PowerShell и выполняем команду:
ssh root@IP_адрес_сервераЕсли вы подключаетесь в первый раз, появится уведомление для подтверждения соединения. Нужно ввести yes и нажать Enter.
Затем появится поле ввода пароля.
🛑 Обратите внимание: ввод пароля всегда скрыт в терминале, поэтому вы не увидите никаких символов (даже звездочек), но каждый символ фиксируется и функция вставки работает.
Вводим или вставляем root-пароль и нажимаем Enter.
Если возле приглашения к вводу (место, где мигает черточка) вы видите root@IP_адрес_сервера (или имя пользователя) — значит все ок, вы успешно подключились к серверу. Для теста введите pwd, чтобы увидеть путь, по которому вы находитесь.
Windows до 10 версии
Для подключения к серверу по SSH, необходимо установить программу PuTTY. Для операционных систем я не буду приводить подробную инструкцию, так как считаю, что их использует малое количество пользователей. А те, кто остался, вряд ли будут нуждаться в подобных инструкциях, так как скорее всего — это гики 😉.
Подключение по SSH-ключу
У способа подключения к серверу через пароль, есть недостаток: вводить пароль приходится при каждом подключении. Обычно, подключение по паролю используется, если работа будет разовой или очень редкой. Если вы планируете работать с этим сервером постоянно, лучше использовать авторизацию по SSH-ключу. Помимо отсутствия постоянного ввода пароля, подключение к серверу по SSH-ключу является более безопасным, так как снижает вероятность взлома учетной записи.
Как работает авторизация по SSH-ключу
- На вашем компьютере создается пара ключей: открытый и закрытый.
- Закрытый ключ хранится только у вас на компьютере, а открытый ключ передается на сервер, который он сохраняет у себя.
- Вы отправляете запрос на подключение к серверу. Происходит сверка версий SSH-протоколов. Если версии несовместимы — появится сообщение об ошибке.
- Сервер отправляем вам свой открытый ключ, который ваша операционная система проверяет. Если все хорошо и ключу можно доверять — генерируется сеансовый (действует только для данного подключения) ключ, который будет использоваться для симметричного шифрования канала.
- Вы отправляете на сервер свой открытый ключ, который сервер ищет у себя и если находит, то генерирует случайное число, шифрует его переданным открытым ключом и отправляет вам обратно.
- Вы расшифровываете сообщение от сервера своим закрытым ключом и отправляете результат на сервер.
- Если число сгенерированное сервером число совпадает с числом, которое вы расшифровали закрытым ключом — все ок, подключение успешно.
Звучит сложно, правда? Да, но благодаря этому и обеспечивается максимально защищенное соединение. К тому же, все шаги будут выполнять в фоновом режиме без вашего участия.
Разобрались, приступаем.
Генерируем пару SSH-ключей
Введите в терминал / PowerShell:
ssh-keygen -t rsaДолжно появиться сообщение с примерно таким содержанием:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):Нажимаем Enter и ключ будет сохранен в указанную директорию по умолчанию.
Затем появится сообщение, предлагающее задать кодовую фразу для ключа:
Enter passphrase (empty for no passphrase):Если указать кодовую фразу, то ее придется вводить при каждом последующем подключении, а мы этого как раз и хотели избежать. Поэтому ничего не вводим и просто нажимаем Enter.
Если появится сообщение о подтверждении ввода кодовой фразу, то тоже ничего не вводим и еще раз нажимаем Enter.
Появится примерно такое сообщение:
Your identification has been saved in /home/username/.ssh/id_rsa
Your public key has been saved in /home/username/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:cq7NlA17+ODqK6LOEPvKc82BtGTwwSSzz0oElbWTwBc username@device-name
The key's randomart image is:
+---[RSA 3072]----+
|.==+E. |
|..*+.o |
| oo.= |
|. o= . |
|..+oo . S |
|.o.o . + * |
|o. o . B o |
|+o...o * + |
|+*+. o=o+ . |
+----[SHA256]-----+Ура! Пара ключей создана и сохранена в директории ~/.ssh/.
В файле id_rsa хранится закрытый ключ, а в id_rsa.pub — открытый.
Посмотреть значение открытого ключа можно сразу в терминале:
cat ~/.ssh/id_rsa.pubКопируем открытый ключ на сервер
В дальнейшие команды вам будет нужно подставить свои значения:
username— имя пользователя, в нашем случаеroot.server_ip— IP адрес вашего сервера.
Для Linux и MacOS:
ssh-copy-id username@server_ipДля Windows:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"Если появится сообщение с подтверждением, введите yes и в конце подтвердите копирование ключа вводом root-пароля.
Данной командой мы скопировали значение открытого ключа из файла id_rsa.pub на сервер в ~/.ssh/authorized_keys.
Все готово. Да, да, так просто. Теперь для подключения к серверу нужно всего лишь использовать команду:
ssh username@server_ipОбмен ключами и проверки будут выполняться в фоновом режиме.
Вы великолепны и заслужили чашку кофе или чая ☕.
Работа с пользователями на сервере
Изменение или сброс пароля root-пользователя
Пароль root-пользователя — самое главное в защите сервера от несанкционированного доступа. Но в жизни бывает всякое и пароль может быть утерян или раскрыт. Поэтому в данном разделе мы разберем как сменить или сбросить пароль root-пользователя по SSH. Это конечно можно сделать через панель управления VPS, но мы же не ищем легких путей?
Изменение пароля
Данный вариант подойдет, если вы знаете текущий пароль.
1. Подключаемся по SSH по паролю или SSH-ключу.
2. Выполняем команду:
passwd3. Вводим новый пароль и нажимаем Enter. Затем повторяем пароль и снова Enter.
🛑 Обратите внимание: ввод пароля всегда скрыт в терминале, поэтому вы не увидите никаких символов (даже звездочек), но каждый символ фиксируется и функция вставки работает.
Все. Теперь пароль изменен. Закройте текущее окно терминала и создайте новое подключение.
Сброс пароля
Данный вариант подойдет, если вы не помните старый пароль.
1. Загружаем операционную систему на сервере в режиме восстановления пароля через панель управления VPS (вам нужно самостоятельно найти инструкцию у хостинг-провайдера).
2. Поочередно выполняем команды:
mount -o rw /dev/vda1 /mntchroot /mnt /bin/bashpasswd root3. Вводим новый пароль и нажимаем Enter. Затем повторяем пароль и снова Enter.
🛑 Обратите внимание: ввод пароля всегда скрыт в терминале, поэтому вы не увидите никаких символов (даже звездочек), но каждый символ фиксируется и функция вставки работает.
4. Нажимаем сочетание клавиш CTRL + D для выхода из режима chroot.
5. Отмонтируем диск выполнением команды:
umount /mnt6. Переименуем корневую файловую систему в режим read only выполнив команду:
mount -o ro /dev/vda1 /mnt7. Перезагружаем сервер через панель управления VPS.
Готово. Можно подключиться к серверу с новым паролем.
Добавление пользователя с привилегиями sudo
По умолчанию, у вас есть один пользователь с правами администратора, который называется root. Это самый главный пользователь во всей иерархии и может делать с операционной все что угодно. В этом и кроется угроза безопасности: если выполнить какую-либо команду по ошибке или незнанию — могут произойти необратимые повреждения файлов или системы.
Поэтому, для работы с операционными системами Linux рекомендуется создавать пользователя с привилегиями sudo (substitute user and do, «подменить пользователя и выполнить»), которые позволяют при необходимости выполнять команды с правами администратора, а для подтверждения выполнения такой команды обычно запрашивается пароль, что позволяет лишний раз подумать перед запуском.
Данную инструкцию вы также можете использовать для создания обычного пользователя (без sudo), для этого выполните только первые три шага.
Шаг №1
Создаем пользователя (Ubuntu / Debian / CentOS):
adduser username
# где username - имя пользователя на латиницеШаг №2
Ubuntu / Debian запросит пароль нового пользователя и его подтверждение.
Для CentOS пароль пользователю нужно задать через отдельную команду:
passwd username
# где username - имя созданного пользователяШаг №3
Ubuntu / Debian запросит дополнительную информацию о пользователе: имя, телефон и прочее. Можете указать эти данные или просто нажимать Enter, чтобы оставить значения по умолчанию. А в конце вводим y, чтобы подтвердить информацию.
В CentOS, чтобы задать информацию о пользователе, нужно ввести команду (пропустите это шаг, если не хотите ничего указывать):
chfn username
# где username - имя созданного пользователяШаг №4
Предоставим пользователю sudo-привилегии путем добавления в группу.
Ubuntu / Debian:
usermod -aG sudo username
# где username - имя созданного пользователяCentOS:
usermod -aG wheel username
# где username - имя созданного пользователяШаг №5
Проверим работу. Для начала переключаемся на нового пользователя:
su - username
# где username - имя созданного пользователяБудет запрошен пароль этого пользователя (не root, а именно нового пользователя с sudo-привилегиями).
Теперь попробуем выполнить любую команду, которая требует прав администратора.
Запоминаем: если вы хотите выполнить команду с правами администратора, перед ней всегда указываем sudo. Если вы выполняете какую-то команду и она выводим уведомление, что у вас недостаточно прав — значит самое время ввести sudo перед командой.
Для примера, посмотрим содержимое каталога /root, который доступен только администраторам:
sudo ls -la /rootЕсли вы видите список файлов и каталогов — значит вы все сделали правильно. Есть ничего не отображается, удалите созданного пользователя командой ниже и начните заново:
deluser username
# где username - имя созданного пользователяШаг №6
Это не обязательно, но я рекомендую всегда отключать дистанционный доступ для root-пользователя после создания пользователя с crud-привилегиями. Это необходимо для логирования действий всех пользователей и позволит работать с операционной системой только созданным пользователями, а в случае необходимости отследить кто, и какие действия выполнял.
Открываем файл с SSH-параметрами:
sudo nano /etc/ssh/sshd_configОткроется текстовый редактор, который называется nano. Перемещаясь по параметрам стрелками вверх и вниз, находим строку PermitRootLogin и указываем для нее значение no. В итоге строка должна выглядеть так:
PermitRootLogin noСохраним изменения и выйдем из редактора с помощью сочетания клавиш: CTRL + X, затем Y, затем Enter.
Теперь нужно перезапустить SSH-службу для применения изменений.
Ubuntu / Debian:
sudo service ssh restartCentOS:
sudo service sshd restartПодключение к серверу по SSH-ключу для нового пользователя
Если вы до этого не подключались по SSH-ключу, то нужно будет сгенерировать ключи для нового пользователя с привилегиями sudo.
Если вы уже подключались по SSH-ключу для root-пользователя, то можно скопировать существующий на сервере открытый ключ, чтобы он использовался для нового пользователя.
Копируем весь каталог с SSH-ключами в каталог нового пользователя:
sudo cp -r /root/.ssh /home/username
# где username - имя созданного пользователяУстановим нового пользователя владельцем этого каталога и создадим новую группу пользователей с тем же именем:
sudo chown -R username:username /home/username/.ssh
# где username - имя созданного пользователяНа этом все. Теперь можно подключаться по SSH-ключу, как обычно, только теперь в качестве имени указывать не root, а имя пользователя с sudo-привилегиями:
ssh username@server_ip
# где username - имя созданного пользователяУстановка веб-сервера Apache
1. Обновим индексы пакетов
Ubuntu / Debian:
sudo apt updateCentOS:
sudo yum update2. Установим Apache
Ubuntu / Debian:
sudo apt install apache2CentOS:
sudo yum install httpd3. Настроим брандмауэр
Используя брандмауэр мы закроем все внешние порты, а затем откроем только нужные.
В нашем случае, мы откроем следующие порты:
- 22 порт для SSH.
- 80 порт для HTTP-запросов.
- 443 порт для HTTPS-запросов.
В Ubuntu / Debian мы будем использовать брандмауэр UFW, а в CentOS — Firewall.
Ubuntu / Debian
1. Установим UFW, если он вдруг не установлен:
sudo apt install ufw2. Проверим статус брандмауэра:
sudo ufw status3. Если видите статус inactive, тогда запускаем UFW:
sudo ufw enable4. Открываем 80 порт для HTTP-запросов:
sudo ufw allow 805. Открываем 443 порт для HTTPS-запросов:
sudo ufw allow 4436. Открываем 22 порт для SSH:
sudo ufw allow 22/tcpCentOS
1. Проверим статус брандмауэра:
sudo firewall-cmd --state2. Если статус отличается от running, тогда запускаем:
sudo systemctl start firewalld3. И добавляем в автозагрузку:
sudo systemctl enable firewalld4. Открываем 80 порт для HTTP-запросов:
sudo firewall-cmd --permanent --add-service=http5. Открываем 443 порт для HTTPS-запросов:
sudo firewall-cmd --permanent --add-service=https6. Открываем 21 порт для SSH:
sudo firewall-cmd --permanent --add-port=21/tcp7. Перезапустим брандмауэр:
sudo firewall-cmd --reload4. Запустим Apache
Ubuntu / Debian:
sudo systemctl start apache2CentOS:
sudo systemctl start httpd5. Проверим, что все работает
Ubuntu / Debian:
sudo service apache2 statusCentOS:
sudo systemctl status httpdЕсли в выводе команды вы видите статус «active (running)«, значит все получилось. Нажмите два раза CTRL + C, чтобы выйти.
6. Добавим Apache в автозапуск
Сейчас, при каждой перезагрузке сервера будет нужно вводить команду запуска Apache. Чтобы этого избежать, добавим запуск веб-сервера в автозагрузку, чтобы он запускался автоматически.
Ubuntu / Debian:
sudo systemctl enable apache2CentOS:
sudo systemctl enable httpd7. Проверим в браузере
Теперь можно открыть IP-адрес сервера в браузере. Если вы видите приветственную страницу веб-сервера Apache — поздравляю вас! Все готово.
Настройка виртуальных хостов Apache
Apache позволяет создавать несколько виртуальных хостов, которые работают независимо друг от друга, что дает возможность размещения нескольких сайтов (с разными доменами) в рамках одного VPS-севера. Даже если вы планируете размещать только один сайт, я все равно рекомендую создать виртуальный хост, чтобы как минимум упростить администрирование и обеспечить возможное расширение с минимальными усилиями.
Для начала, нужно добавить домен. Сделать это можно в панели управления VPS и следовать инструкциям вашего хостинг провайдера. Чаще всего для домена указываются необходимые ресурсные записи DNS.
Но бывает ситуация, когда домен расположен на услуге виртуального хостинга, а в рамках VPS вы хотите разместить только сайт на поддомене. Не все хостинг-провайдеры позволяют добавлять поддомен отдельно от основного домена, требуя вначале прикрепить домен к VPS указав NS-сервера. Этого можно избежать, если на стороне хостинг-провайдера, у которого находится домен, создать нужный поддомен и в качестве A-записи указать IP-адрес вашего VPS-сервера, а затем создать виртуальный хост Apache.
Итак, домен или поддомен добавлен. Приступаем.
Вначале создадим директорию для нашего сайта и назовем ее, для примера, mysite.ru (в следующих командах не забывайте заменять mysite.ru на ваш домен):
sudo mkdir /var/www/mysite.ruСоздадим основную директорию, где будут располагаться файлы сайта:
sudo mkdir /var/www/mysite.ru/public_htmlУстановим права доступа для общего доступа и конкретного для нашего пользователя:
sudo chmod -R 755 /var/wwwsudo chown -R $USER:$USER /var/www/mysite.ru/В Apache есть дефолтный файл конфигурации, который располагается в директории /etc/apache2/sites-available и называется 000-default.conf. Для каждого нового сайта, нам нужно создать свои файлы конфигурации и размещать их в этом же каталоге.
Но для начала, нам нужно отключить стандартную конфигурацию:
sudo a2dissite 000-defaultСоздадим файл конфигурации виртуального хоста командой:
sudo nano /etc/apache2/sites-available/mysite.ru.confИ в открывшемся текстовом редакторе укажем минимальный набор настроек.
🛑 Не забудьте заменить mysite.ru на ваш домен.
<VirtualHost *:80>
ServerName mysite.ru
ServerAlias www.mysite.ru
ServerAdmin admin@localhost
DocumentRoot /var/www/mysite.ru/public_html
<Directory /var/www/mysite.ru/public_html>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/www/mysite.ru/error.log
CustomLog /var/www/mysite.ru/access.log combined
</VirtualHost>Чтобы сохранить изменения и выйти из редактора, нажимаем CTRL + X, затем Y, и наконец Enter.
Пройдемся по тому, что указали:
- Блок
<VirtualHost>— содержит директивы для настройки конкретного виртуального хоста. В данном случае любого хоста на 80 порту. ServerName— имя хоста. В нашем случае доменное имя.ServerAlias— псевдоним имени хоста. В нашем случае домен с www.ServerAdmin— email администратора. Обычно заполняется фиктивным.DocumentRoot— путь до корневой директории сайта.- Блок
<Directory>— задает настройки для корневой директории. В данном случае мы указали:AllowOverride All— разрешаем настройки заданные в файле .htaccess;Require all granted— допуск к корневой директории доступен для всех.
ErrorLog— путь до логов с ошибками.CustomLog— путь до логов доступа.
Данные директивы вы можете изменять на свое усмотрение. То, что я привел выше — это минимальный набор, которого обычно хватает в большинстве случаев. Для подробностей — заглядывайте в официальную документацию Apache.
Включаем новый сайт:
sudo a2ensite mysite.ruПерезапускам Apache:
sudo systemctl restart apache2Готово. Теперь вы можете размещать в корневой директории файлы сайта. Но я обычно еще проверяю корректность настройки добавлением тестового индексного файла.
Создаем файл и открываем редактор:
sudo nano /var/www/mysite.ru/public_html/index.htmlНаполняем базовой html-разметкой:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Проверка виртуального хоста</title>
</head>
<body>
<h1>Ура! Сайт готов.</h1>
</body>
</html>Теперь можно открыть сайт по доменному имени в браузере и проверить работоспособность.
Установка веб-сервера nginx
1. Обновим индексы пакетов
Ubuntu / Debian:
sudo apt updateCentOS:
sudo yum update2. Установим nginx
Ubuntu / Debian:
sudo apt install nginxCentOS.
Добавим EPEL-репозиторий и установим nginx:
sudo yum install epel-releasesudo yum install nginx3. Настроим брандмауэр
Используя брандмауэр мы закроем все внешние порты, а затем откроем только нужные.
В нашем случае, мы откроем следующие порты:
- 22 порт для SSH.
- 80 порт для HTTP-запросов.
- 443 порт для HTTPS-запросов.
В Ubuntu / Debian мы будем использовать брандмауэр UFW, а в CentOS — Firewall.
Ubuntu / Debian
1. Установим UFW, если он вдруг не установлен:
sudo apt install ufw2. Проверим статус брандмауэра:
sudo ufw status3. Если видите статус inactive, тогда запускаем UFW:
sudo ufw enable4. Открываем 80 порт для HTTP-запросов:
sudo ufw allow 805. Открываем 443 порт для HTTPS-запросов:
sudo ufw allow 4436. Открываем 22 порт для SSH:
sudo ufw allow 22/tcpCentOS
1. Проверим статус брандмауэра:
sudo firewall-cmd --state2. Если статус отличается от running, тогда запускаем:
sudo systemctl start firewalld3. И добавляем в автозагрузку:
sudo systemctl enable firewalld4. Открываем 80 порт для HTTP-запросов:
sudo firewall-cmd --permanent --add-service=http5. Открываем 443 порт для HTTPS-запросов:
sudo firewall-cmd --permanent --add-service=https6. Открываем 21 порт для SSH:
sudo firewall-cmd --permanent --add-port=21/tcp7. Перезапустим брандмауэр:
sudo firewall-cmd --reload4. Запустим nginx
Ubuntu / Debian / CentOS:
sudo systemctl start nginx5. Проверим, что все работает
Ubuntu / Debian / CentOS:
sudo systemctl status nginxЕсли в выводе команды вы видите статус «active (running)«, значит все получилось. Нажмите два раза CTRL + C, чтобы выйти.
6. Добавим nginx в автозапуск
Сейчас, при каждой перезагрузке сервера будет нужно вводить команду запуска nginx. Чтобы этого избежать, добавим запуск веб-сервера в автозагрузку, чтобы он запускался автоматически.
Ubuntu / Debian:
sudo systemctl enable nginx7. Проверим в браузере
Теперь можно открыть IP-адрес сервера в браузере. Если вы видите приветственную страницу веб-сервера nginx — поздравляю вас! Все готово.
Настройка виртуальных хостов nginx
nginx позволяет создавать несколько виртуальных хостов, которые работают независимо друг от друга, что дает возможность размещения нескольких сайтов (с разными доменами) в рамках одного VPS-севера. Даже если вы планируете размещать только один сайт, я все равно рекомендую создать виртуальный хост, чтобы как минимум упростить администрирование и обеспечить возможное расширение с минимальными усилиями.
Для начала, нужно добавить домен. Сделать это можно в панели управления VPS и следовать инструкциям вашего хостинг провайдера. Чаще всего для домена указываются необходимые ресурсные записи DNS.
Но бывает ситуация, когда домен расположен на услуге виртуального хостинга, а в рамках VPS вы хотите разместить только сайт на поддомене. Не все хостинг-провайдеры позволяют добавлять поддомен отдельно от основного домена, требуя вначале прикрепить домен к VPS указав NS-сервера. Этого можно избежать, если на стороне хостинг-провайдера, у которого находится домен, создать нужный поддомен и в качестве A-записи указать IP-адрес вашего VPS-сервера, а затем создать виртуальный хост nginx.
Итак, домен или поддомен добавлен. Приступаем.
Вначале создадим директорию для нашего сайта и назовем ее, для примера, mysite.ru (в следующих командах не забывайте заменять mysite.ru на ваш домен):
sudo mkdir -p /var/www/mysite.ru/htmlНазначим права на директорию:
sudo chown -R www-data:www-data /var/www/mysite.ru/htmlsudo chmod 755 /var/www/mysite.ruСоздадим индексный файл сайта:
sudo nano /var/www/mysite.ru/html/index.htmlИ наполним его базовой html-разметкой:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Проверка виртуального хоста</title>
</head>
<body>
<h1>Ура! Сайт готов.</h1>
</body>
</html>Чтобы сохранить изменения и выйти из редактора, нажимаем CTRL + X, затем Y, и наконец Enter.
Создадим файл конфигурации для нового сайта в директории /etc/nginx/sites-available:
sudo nano /etc/nginx/sites-available/mysite.ruДобавим в конфигурацию базовые настройки:
server {
listen 80;
listen [::]:80;
root /var/www/mysite.ru/html;
index index.html index.htm;
server_name mysite.ru www.mysite.ru;
location / {
try_files $uri $uri/ = 404;
}
}Чтобы сохранить изменения и выйти из редактора, нажимаем CTRL + X, затем Y, и наконец Enter.
Пройдемся по тому, что указали:
listen— какие порты слушать. В данном случае 80 порт отдельно и с маской.root— путь до корневой директории сайта.index— возможные именования индексных файлов. Вы можете добавлять свои варианты через пробел.server_name— имя хоста. В нашем случае доменное имя.- Блок location — указывает какой путь обрабатывать. Мы указали главную страницу.
try_files— пытается найти файл по указанному пути. В нашем случае полный URI, а если не найдет, то вернет статус 404.
Данные директивы вы можете изменять на свое усмотрение. То, что я привел выше — это минимальный набор, которого обычно хватает в большинстве случаев. Для подробностей — заглядывайте в официальную документацию nginx.
Создадим символическую ссылку между директориями sites-available и sites-enabled:
sudo ln -s /etc/nginx/sites-available/mysite.ru /etc/nginx/sites-enabled/mysite.ruПротестируем конфигурацию:
sudo nginx -tЕсли видите статусы ok и successful — продолжаем.
Отключим виртуальный хост установленный по умолчанию:
sudo rm /etc/nginx/sites-enabled/defaultПерезагрузим nginx:
sudo systemctl restart nginxГотово. В браузере можно открыть сайт по IP-адресу сервера или домена, чтобы убедиться, что все работает.
Установка MySQL
1. Подготовка
Ubuntu / Debian
Обновим версии пакетов:
sudo apt updateCentOS
Установим wget:
sudo yum install wgetСкачаем MySQL:
sudo wget https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpmДобавим репозиторий в установщик:
sudo yum install mysql80-community-release-el7-5.noarch.rpm2. Установим MySQL
Ubuntu / Debian:
sudo apt install mysql-serverCentOS:
sudo yum install mysql-community-server3. Запустим MySQL
Ubuntu / Debian:
sudo systemctl start mysqlCentOS (вначале запустим сервис, а потом сам MySQL):
sudo service mysqld startsudo systemctl start mysqld4. Добавим MySQL в автозагрузку
Ubuntu / Debian:
sudo systemctl enable mysqlCentOS:
sudo chkconfig mysqld on5. Настроим базовые параметры безопасности
Запускам конфигуратор:
sudo mysql_secure_installationУстановим следующие параметры:
1. Вопросом «Would you like to setup VALIDATE PASSWORD component?» MySQL предлагает установить плагин валидации паролей. Он позволяет выбрать режим строгости к создаваемым паролям. Существует три степени валидации:
LOW— минимальная длина 8 символов.MEDIUM— минимальная длина 8 символов. Должен содержать цифры, символы с разным регистром и специальные символы.STRONG— минимальная длина 8 символов. Должен содержать цифры, символы с разным регистром, специальные символы и файлы из словаря.
Я рекомендую всегда устанавливать данный плагин и в качестве степени валидации выбирать MEDIUM. Поэтому в ответ на вопрос вводим y и затем 1 (что означает MEDIUM в списке степеней валидации паролей).
2. Затем нам нужно удалить вход анонимных пользователей, поэтому на вопрос «Remove anonymous users?» вводим y.
3. На вопрос «Disallow root login remotely?» — вводим y, чтобы отключить удаленный доступ для root-пользователя.
4. На вопрос «Remove test database and access to it?» — вводим у, чтобы удалить тестовую базу данных.
5. На вопрос «Reload privilege tables now?» — вводим y, чтобы обновить таблицы привилегий пользователей MySQL.
Ubuntu / Debian
1. Подключаемся к MySQL (не запоминайте эту команду, ниже будет правильная):
sudo mysql -u root2. Установим пароль для root-пользователя с помощью SQL-запроса (не забудьте изменить my-super-secret-password на свой пароль):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'my-super-secret-password';3. Обновим привилегии:
FLUSH PRIVILEGES;4. Выходим из MySQL введя exit или \q.
5. Остановим MySQL:
sudo systemctl stop mysql6. Запустим заново с новыми настройками:
sudo systemctl start mysql7. Для подключения к MySQL используйте команду с запросом пароля:
sudo mysql -u root -pCentOS
1. Узнаем текущий пароль root-пользователя (будет выведен в консоль, копируем):
sudo grep 'temporary password' /var/log/mysqld.log2. Подключаемся к MySQL используя скопированный пароль:
sudo mysql -u root -p3. Изменяем пароль root-пользователя (не забудьте изменить my-super-secret-password на свой пароль):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'my-super-secret-password'4. Выходим из MySQL введя exit или \q.
5. Остановим MySQL:
sudo systemctl stop mysqld6. Запустим заново с новыми настройками:
sudo systemctl start mysqld7. Для подключения к MySQL используйте команду с запросом пароля:
sudo mysql -u root -pУстановка MariaDB
1. Обновим индексы пакетов
Ubuntu / Debian:
sudo apt updateCentOS:
sudo yum update2. Установим MariaDB
Ubuntu / Debian:
sudo apt install mariadb-server mariadb-clientCentOS:
sudo yum info mariadbsudo yum install mariadb-server3. Добавим MariaDB в автозагрузку
Ubuntu / Debian / CentOS:
sudo systemctl enable mariadb4. Настроим базовые параметры безопасности
Запускам конфигуратор:
sudo mysql_secure_installationНа вопрос «Enter current password for root» — нажимаем Enter, так как пароля пока нет.
На вопрос «Switch to unix_socket authentication» — вводим n, т.к. хотим сделать авторизацию по паролю, а не по сокету.
На вопрос «Change the root password?» — вводим y, чтобы установить пароль root-пользователя.
Для «New password» — вводим новый пароль root-пользователя.
Для «Re-enter new password» — повторяем пароль.
На вопрос «Remove anonymous users?» вводим y, чтобы удалить анонимных пользователей.
На вопрос «Disallow root login remotely?» — вводим y, чтобы отключить удаленный доступ для root-пользователя.
На вопрос «Remove test database and access to it?» — вводим у, чтобы удалить тестовую базу данных.
На вопрос «Reload privilege tables now?» — вводим y, чтобы обновить таблицы привилегий пользователей MariaDB.
Подключаемся к MariaDB и вводим недавно созданный пароль root-пользователя:
sudo mysql -u root -pДля выхода из MariaDB введите exit или \q.
Установка PostgreSQL
1. Обновим индексы пакетов
Ubuntu / Debian:
sudo apt updateCentOS:
sudo yum update2. Установим PostgreSQL
Ubuntu / Debian:
sudo apt-get install postgresql postgresql-contribCentOS.
Добавляем репозиторий и уточняем последнюю версию PostgreSQL:
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm; yum list -y postgre*-server*Установим последнюю версию, у меня это 15:
yum -y install postgresql15-serverЕсли в процессе установки возникнет ошибка невозможности разрешения зависимостей, сначала установите репозиторий epel , а затем снова попытайтесь установить PostgreSQL:
yum -y install epel-releaseИнициализируем (не забудьте указать свою версию PostgreSQL):
/usr/pgsql-15/bin/postgresql-15-setup initdb3. Запускаем PostgreSQL
Ubuntu:
sudo systemctl start postgresql.serviceCentOS:
systemctl enable postgresql-15; service postgresql-15 start4. Проверим статус PostgreSQL:
Ubuntu:
sudo systemctl status postgresql.serviceCentOS:
service postgresql statusУстановка PHP
1. Подготовка
Ubuntu / Debian
1. Обновим индексы пакетов:
sudo apt updateCentOS
1. Обновим индексы пакетов:
sudo yum update2. Добавим EPEL и дополнительные утилиты:
sudo yum install epel-release yum-utils3. Добавим репозиторий REMO (в примере используется CentOS 9. Если у вас версия выше или ниже, замените число 9 на используемую версию CentOS):
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-9.rpm4. Включим PHP-модуль (в примере я использую PHP 8.3, при необходимости, замените на нужную версию):
sudo yum module enable php:remi-8.32. Установим PHP
Ubuntu / Debian:
sudo apt install phpCentOS:
sudo yum install phpПроверим установленную версию PHP (Ubuntu / Debian / CentOS):
php -v3. Установим дополнительные PHP-расширения
Ниже я указываю PHP-расширения для примера. Вы можете изменить список на свое усмотрение. Можно установить как одно расширение, так и несколько — разделяя их пробелами.
Ubuntu / Debian:
sudo apt install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmathCentOS:
sudo yum install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmathПосмотреть установленные PHP-расширения можно командой (Ubuntu / Debian / CentOS):
php -mУстановка phpMyAdmin
1. Обновим индексы пакетов
Ubuntu / Debian:
sudo apt updateCentOS:
sudo yum update2. Установим phpMyAdmin
Ubuntu / Debian:
sudo apt install phpmyadminCentOS:
sudo yum install phpmyadminЕсли появилось красиво оформленное окно: вам нужно выбрать используемый веб-сервер.
Для Apache, с помощью стрелок на клавиатуре отмечаем его и нажимаем Enter.
Для nginx нажмите Tab, чтобы убрать выделение пунктов (должна пропасть галочка) и нажмите Enter.
Далее выбираем Yes, чтобы настроить phpMyAdmin по стандартному файлу кофигурации.
Вводим пароль пароль приложения и подтверждаем повторным вводом.
Теперь нужно включить или установить PHP-расширение mbstring.
Если расширение было установлено ранее, включаем:
sudo phpenmod mbstringЕсли нет, устанавливаем.
Ubuntu / Debian:
sudo apt install php-mbstringCentOS:
sudo yum install php-mbstring3. Настроим веб-сервер
Apache настроен на работу с phpMyAdmin сразу после установки, для nginx нужно настроить файл конфигурации.
Узнаем название файла unix-сокета PHP:
cd /run/php/Посмотрим список:
lsНас интересует то, что выделено цветом, содержим точную версию PHP и расширение .sock, например php8.3-fpm.sock. Запоминаем.
Создадим файл конфигурации phpMyAdmin в nginx:
sudo nano /etc/nginx/sites-available/phpmyadmin.confНаполним его следующим содержимым (замените SERVER-IP-ADDRESS (строка server_name) на ваш IP-адрес сервера, а php8.3-fpm.sock (строки fastcgi_pass вверху и внизу) на название вашего сокета из предыдущего шага:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/;
server_name SERVER-IP-ADDRESS;
index index.php index.html index.htm;
location /phpmyadmin {
alias /usr/share/phpmyadmin/;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
fastcgi_ignore_client_abort off;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
access_log off;
log_not_found off;
expires 1M;
}
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Чтобы сохранить изменения и выйти из редактора, нажимаем CTRL + X, затем Y, и наконец Enter.
Удалим файл стандартной конфигурации:
sudo rm -rf /etc/nginx/sites-enabled/defaultСоздадим символическую ссылку между директориями sites-available и sites-enabled для файла конфигурации:
sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/Проверим, что ошибок нет:
sudo nginx -tЕсли видите статусы ok и successful — продолжаем.
Перезапустим nginx:
sudo systemctl restart nginx4. Изменяем прямую ссылку к phpMyadmin.
По умолчанию, phpMyAdmin доступен по адресу: http://SERVER-IP-ADDRESS/phpmyadmin, где SERVER-IP-ADDRESS — IP-адрес вашего сервера.
Использовать доступ к phpMyAdmin по явной ссылке/phpmyadmin, а также /pma, /mysql и прочее — очень плохая идея. Злоумышленники могут воспользоваться брутфорсом (подбором паролей), чтобы получить доступ. Поэтому, прямой адрес лучше переименовать в что-то менее явное. Во что именно — на ваше усмотрение, в качестве примера сделаем так, чтобы phpMyAdmin был доступен по адресу http://SERVER-IP-ADDRESS/super-puper-secret-pma-link
Apache
Откроем конфигурацию phpMyAdmin:
sudo nano /etc/phpmyadmin/apache.confЗакомментируем строку Alias /phpmyadmin /usr/share/phpmyadmin добавив в начало # (решетку) и добавим ниже строку Alias /super-puper-secret-pma-link /usr/share/phpmyadmin.
В итоге должно получиться так:
#Alias /phpmyadmin /usr/share/phpmyadmin
Alias /super-puper-secret-pma-link /usr/share/phpmyadminТеперь phpMyAdmin доступен по ссылке: http://SERVER-IP-ADDRESS/super-puper-secret-pma-link, где SERVER-IP-ADDRESS — IP-адрес вашего сервера.
nginx
Откроем файл конфигурации:
sudo nano /etc/nginx/sites-available/phpmyadmin.confНаходим строку location /phpmyadmin { и меняем ее на location /super-puper-secret-pma-link {.
Перезапускаем nginx:
sudo systemctl restart nginxТеперь phpMyAdmin доступен по ссылке: http://SERVER-IP-ADDRESS/super-puper-secret-pma-link, где SERVER-IP-ADDRESS — IP-адрес вашего сервера.
5. Настройка доступа в phpMyAdmin только определенным IP-адресам
Данной настройкой, мы идем от меньшего к большему. Запретим доступ в phpMyAdmin всем IP-адресам, а открывать будем только тем, кому доверяем.
Apache
Откроем файл конфигурации:
sudo nano /etc/phpmyadmin/apache.confНайдем строки:
Order allow,deny
Allow from allИ изменим их следующим образом:
Order deny,allow
Deny from all
Allow from XXX.XXX.XXX.XXX
# где XXX.XXX.XXX.XXX - IP-адрес, которому хотим разрешить доступ к phpMyAdminЕсли будет нужно добавить несколько IP-адресов, просто добавьте их на новой строке в виде Allow from XXX.XXX.XXX.XXX, где XXX.XXX.XXX.XXX — IP-адрес, которому хотим разрешить доступ к phpMyAdmin.
Перезагрузим Apache:
sudo systemctl restart apache2nginx
Откроем файл конфигурации:
sudo nano /etc/nginx/sites-available/phpmyadmin.confПосле строки location ... добавим следующее:
allow XXX.XXX.XXX.XXX;
deny all;
# где XXX.XXX.XXX.XXX - IP-адрес, которому хотим разрешить доступ к phpMyAdminЕсли будет нужно добавить несколько IP-адресов, просто добавьте их на новой строке под последним allow в виде allow XXX.XXX.XXX.XXX, где XXX.XXX.XXX.XXX — IP-адрес, которому хотим разрешить доступ к phpMyAdmin.
Перезагрузим nginx:
sudo systemctl restart nginx