Настройка VPS (VDS) для самых маленьких

Комментариев: 0
28 мин.
Добавить в закладки

Хотите приручить дракона по имени 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.

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

Всего есть три варианта (без экзотических или экстра дорогих):

  1. Виртуальный хостинг.
  2. VPS.
  3. Выделенный сервер.

Разберем эти варианты подробнее.

Виртуальный хостинг

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

Вычислительные мощности будут ограничены выбранным тарифом. Если мы рассматриваем пример сервера выше, то на нем могут располагаться сотни, тысячи, десятки тысяч… аккаунтов виртуального хостинга.

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

А вот основные недостатки — это ограниченные вычислительные мощности, которые обычно лимитируются нагрузкой на процессор и базу данных, а также отсутствие возможности установки произвольного программного обеспечения на сервер. Например, чаще всего виртуальный хостинг комплектуется MySQL, и если для своего проекта вы хотите использовать PostgreSQL — виртуальный хостинг не подойдет.

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

VPS

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. Выполняем команду:

passwd

3. Вводим новый пароль и нажимаем Enter. Затем повторяем пароль и снова Enter.

🛑 Обратите внимание: ввод пароля всегда скрыт в терминале, поэтому вы не увидите никаких символов (даже звездочек), но каждый символ фиксируется и функция вставки работает.

Все. Теперь пароль изменен. Закройте текущее окно терминала и создайте новое подключение.

Сброс пароля

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

1. Загружаем операционную систему на сервере в режиме восстановления пароля через панель управления VPS (вам нужно самостоятельно найти инструкцию у хостинг-провайдера).

2. Поочередно выполняем команды:

mount -o rw /dev/vda1 /mnt
chroot /mnt /bin/bash
passwd root

3. Вводим новый пароль и нажимаем Enter. Затем повторяем пароль и снова Enter.

🛑 Обратите внимание: ввод пароля всегда скрыт в терминале, поэтому вы не увидите никаких символов (даже звездочек), но каждый символ фиксируется и функция вставки работает.

4. Нажимаем сочетание клавиш CTRL + D для выхода из режима chroot.

5. Отмонтируем диск выполнением команды:

umount /mnt

6. Переименуем корневую файловую систему в режим read only выполнив команду:

mount -o ro /dev/vda1 /mnt

7. Перезагружаем сервер через панель управления 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 restart

CentOS:

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 update

CentOS:

sudo yum update

2. Установим Apache

Ubuntu / Debian:

sudo apt install apache2

CentOS:

sudo yum install httpd

3. Настроим брандмауэр

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

В нашем случае, мы откроем следующие порты:

  • 22 порт для SSH.
  • 80 порт для HTTP-запросов.
  • 443 порт для HTTPS-запросов.

В Ubuntu / Debian мы будем использовать брандмауэр UFW, а в CentOS — Firewall.

Ubuntu / Debian

1. Установим UFW, если он вдруг не установлен:

sudo apt install ufw

2. Проверим статус брандмауэра:

sudo ufw status

3. Если видите статус inactive, тогда запускаем UFW:

sudo ufw enable

4. Открываем 80 порт для HTTP-запросов:

sudo ufw allow 80

5. Открываем 443 порт для HTTPS-запросов:

sudo ufw allow 443

6. Открываем 22 порт для SSH:

sudo ufw allow 22/tcp

CentOS

1. Проверим статус брандмауэра:

sudo firewall-cmd --state

2. Если статус отличается от running, тогда запускаем:

sudo systemctl start firewalld

3. И добавляем в автозагрузку:

sudo systemctl enable firewalld

4. Открываем 80 порт для HTTP-запросов:

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

5. Открываем 443 порт для HTTPS-запросов:

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

6. Открываем 21 порт для SSH:

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

7. Перезапустим брандмауэр:

sudo firewall-cmd --reload

4. Запустим Apache

Ubuntu / Debian:

sudo systemctl start apache2

CentOS:

sudo systemctl start httpd

5. Проверим, что все работает

Ubuntu / Debian:

sudo service apache2 status

CentOS:

sudo systemctl status httpd

Если в выводе команды вы видите  статус «active (running)«, значит все получилось. Нажмите два раза CTRL + C, чтобы выйти.

6. Добавим Apache в автозапуск

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

Ubuntu / Debian:

sudo systemctl enable apache2

CentOS:

sudo systemctl enable httpd

7. Проверим в браузере

Теперь можно открыть 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/www
sudo 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 update

CentOS:

sudo yum update

2. Установим nginx

Ubuntu / Debian:

sudo apt install nginx

CentOS.

Добавим EPEL-репозиторий и установим nginx:

sudo yum install epel-release
sudo yum install nginx

3. Настроим брандмауэр

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

В нашем случае, мы откроем следующие порты:

  • 22 порт для SSH.
  • 80 порт для HTTP-запросов.
  • 443 порт для HTTPS-запросов.

В Ubuntu / Debian мы будем использовать брандмауэр UFW, а в CentOS — Firewall.

Ubuntu / Debian

1. Установим UFW, если он вдруг не установлен:

sudo apt install ufw

2. Проверим статус брандмауэра:

sudo ufw status

3. Если видите статус inactive, тогда запускаем UFW:

sudo ufw enable

4. Открываем 80 порт для HTTP-запросов:

sudo ufw allow 80

5. Открываем 443 порт для HTTPS-запросов:

sudo ufw allow 443

6. Открываем 22 порт для SSH:

sudo ufw allow 22/tcp

CentOS

1. Проверим статус брандмауэра:

sudo firewall-cmd --state

2. Если статус отличается от running, тогда запускаем:

sudo systemctl start firewalld

3. И добавляем в автозагрузку:

sudo systemctl enable firewalld

4. Открываем 80 порт для HTTP-запросов:

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

5. Открываем 443 порт для HTTPS-запросов:

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

6. Открываем 21 порт для SSH:

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

7. Перезапустим брандмауэр:

sudo firewall-cmd --reload

4. Запустим nginx

Ubuntu / Debian / CentOS:

sudo systemctl start nginx

5. Проверим, что все работает

Ubuntu / Debian / CentOS:

sudo systemctl status nginx

Если в выводе команды вы видите  статус «active (running)«, значит все получилось. Нажмите два раза CTRL + C, чтобы выйти.

6. Добавим nginx в автозапуск

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

Ubuntu / Debian:

sudo systemctl enable nginx

7. Проверим в браузере

Теперь можно открыть 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/html
sudo 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 update

CentOS

Установим 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.rpm

2. Установим MySQL

Ubuntu / Debian:

sudo apt install mysql-server

CentOS:

sudo yum install mysql-community-server

3. Запустим MySQL

Ubuntu / Debian:

sudo systemctl start mysql

CentOS (вначале запустим сервис, а потом сам MySQL):

sudo service mysqld start
sudo systemctl start mysqld

4. Добавим MySQL в автозагрузку

Ubuntu / Debian:

sudo systemctl enable mysql

CentOS:

sudo chkconfig mysqld on

5. Настроим базовые параметры безопасности

Запускам конфигуратор:

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 root

2. Установим пароль для 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 mysql

6. Запустим заново с новыми настройками:

sudo systemctl start mysql

7. Для подключения к MySQL используйте команду с запросом пароля:

sudo mysql -u root -p

CentOS

1. Узнаем текущий пароль root-пользователя (будет выведен в консоль, копируем):

sudo grep 'temporary password' /var/log/mysqld.log

2. Подключаемся к MySQL используя скопированный пароль:

sudo mysql -u root -p

3. Изменяем пароль root-пользователя (не забудьте изменить my-super-secret-password на свой пароль):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'my-super-secret-password'

4. Выходим из MySQL введя exit или \q.

5. Остановим MySQL:

sudo systemctl stop mysqld

6. Запустим заново с новыми настройками:

sudo systemctl start mysqld

7. Для подключения к MySQL используйте команду с запросом пароля:

sudo mysql -u root -p

Установка MariaDB

1. Обновим индексы пакетов

Ubuntu / Debian:

sudo apt update

CentOS:

sudo yum update

2. Установим MariaDB

Ubuntu / Debian:

sudo apt install mariadb-server mariadb-client

CentOS:

sudo yum info mariadb
sudo yum install mariadb-server

3. Добавим MariaDB в автозагрузку

Ubuntu / Debian / CentOS:

sudo systemctl enable mariadb

4. Настроим базовые параметры безопасности

Запускам конфигуратор:

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 update

CentOS:

sudo yum update

2. Установим PostgreSQL

Ubuntu / Debian:

sudo apt-get install postgresql postgresql-contrib

CentOS.

Добавляем репозиторий и уточняем последнюю версию 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 initdb

3. Запускаем PostgreSQL

Ubuntu:

sudo systemctl start postgresql.service

CentOS:

systemctl enable postgresql-15; service postgresql-15 start

4. Проверим статус PostgreSQL:

Ubuntu:

sudo systemctl status postgresql.service

CentOS:

service postgresql status

Установка PHP

1. Подготовка

Ubuntu / Debian

1. Обновим индексы пакетов:

sudo apt update

CentOS

1. Обновим индексы пакетов:

sudo yum update

2. Добавим EPEL и дополнительные утилиты:

sudo yum install epel-release yum-utils

3. Добавим репозиторий REMO (в примере используется CentOS 9. Если у вас версия выше или ниже, замените число 9 на используемую версию CentOS):

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-9.rpm

4. Включим PHP-модуль (в примере я использую PHP 8.3, при необходимости, замените на нужную версию):

sudo yum module enable php:remi-8.3

2. Установим PHP

Ubuntu / Debian:

sudo apt install php

CentOS:

sudo yum install php

Проверим установленную версию PHP (Ubuntu / Debian / CentOS):

php -v

3. Установим дополнительные 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-bcmath

CentOS:

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 update

CentOS:

sudo yum update

2. Установим phpMyAdmin

Ubuntu / Debian:

sudo apt install phpmyadmin

CentOS:

sudo yum install phpmyadmin

Если появилось красиво оформленное окно: вам нужно выбрать используемый веб-сервер.

Для Apache, с помощью стрелок на клавиатуре отмечаем его и нажимаем Enter.

Для nginx нажмите Tab, чтобы убрать выделение пунктов (должна пропасть галочка) и нажмите Enter.

Далее выбираем Yes, чтобы настроить phpMyAdmin по стандартному файлу кофигурации.

Вводим пароль пароль приложения и подтверждаем повторным вводом.

Теперь нужно включить или установить PHP-расширение mbstring.

Если расширение было установлено ранее, включаем:

sudo phpenmod mbstring

Если нет, устанавливаем.

Ubuntu / Debian:

sudo apt install php-mbstring

CentOS:

sudo yum install php-mbstring

3. Настроим веб-сервер

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 nginx

4. Изменяем прямую ссылку к 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 apache2

nginx

Откроем файл конфигурации:

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
Подписаться
Уведомить о
guest
0 комментариев