Как разместить сайт на VPS без панели управления хостингом

С помощью этого руководства вы научитесь устанавливать на виртуальный сервер так называемый LAMP-стек.

LAMP — это набор ПО, который включает в себя:

  • Linux;
  • Apache;
  • MySQL;
  • PHP.

Как результат, после его установки вы сможете запустить свой собственный сайт.

Мы будем использовать виртуальный сервер, тариф ATLEX-VPS-5, 16 ГБ оперативной памяти и 160 ГБ SSD-накопителя. Но для большинства начальных задач (блог, сайт-визитка) и не очень нагруженных проектов вполне подойдёт более простая конфигурация ATLEX-VPS-1. В качестве операционной системы используем дистрибутив Linux Ubuntu 20.04

Для начала давайте разберёмся, что нужно для запуска сайта. Каждый сайт для своей работы требует наличия различных компонентов. Как правило это веб-сервер, поддержка языка программирования, на котором написан сайт, и поддержка базы данных. В этом руководстве мы покажем, как установить веб-сервер Apache, поддержку языка PHP и поддержку баз данных MySQL.

Настройка SSH

Все действия мы будем выполнять через командную строку c использованием SSH-протокола. Вам нужно знать IP-адрес, имя пользователя и пароль. Данные для подключения вам придут в письме при заказе виртуального сервера.

Открываем на своём локальном компьютере терминал (командную строку) и вводим команду для подключения.

shh root@ip_адрес_сервера

Если вы подключаетесь впервые, может появиться такое сообщение:

The authenticity of host 'ip_адрес_сервера (ip_адрес_сервера)' can't be established. RSA key fingerprint is SHA256:YaaqERsh9oMs/Qa5nlMJLlb4ewlJDGLaDGsuOcDzOs8. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Просто нажимаем 'yes' или букву 'y', появится запрос на ввод пароля.

При вводе пароля символы на экран не выводятся, это сделано в целях безопасности.

Warning: Permanently added 'ip_адрес_сервера' (RSA) to the list of known hosts. root@ip_адрес_сервера's password:

Вводим пароль и нажимаем 'Enter'.

После подключения к серверу мы попадаем в командную строку на самом сервере, т.е. в систему, которая установлена на сервере.

Перед установкой каких-либо компонентов рекомендуется обновить систему до последней актуальной версии.

Выполним последовательно команды

apt update apt upgrade

Начнется обновление системы.

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

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

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

Для этого выполним команду adduser [имяпользователя]

например:

adduser atlex

Далее нужно дважды ввести пароль для этого пользователя.

Обязательно запомните пароль или сохраните его в надёжном месте.

После этого вам будет предложено ввести некоторые данные пользователя (полное имя, телефон и т.д.), но все это можно не вводить, а просто оставить поля пустыми, каждый раз нажимая 'enter'.

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

Выполняем команду:

usermod -aG sudo atlex

Настройка брандмауэра UFW

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

sudo ufw app list Available applications: OpenSSH

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

Активируем эту службу командой:

ufw allow OpenSSH Rules updated Rules updated (v6)

Затем активируем сам брандмауэр командой:

ufw enable

Появится предупреждение, что может прерваться текущее соединение:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Но так как мы разрешили OpenSSH, то не беспокоимся и вводим 'y' и нажимаем 'Enter'.

Firewall is active and enabled on system startup

Можно проверить статус брандмауэра командой:

ufw status

Видим, что он активен и активен профиль OpenSSH:

Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Мы разрешили только SSH-подключения, а все остальные подключения брандмауэр теперь блокирует. Чуть позже мы разрешим подключения по HTTP, чтобы открывать сайт.

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

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

В новом окне терминала вводим команду:

ssh atlex@ip_адрес_сервера

Вводим пароль пользователя atlex.

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

Сессию SSH с пользователем root можно закрыть, введя команду 'exit'

Установка веб-сервера Apache

Теперь установим веб-сервер Apache. Для этого выполняем команду:

sudo apt install apache2

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

Выведем список профилей:

sudo ufw app list

и увидим, что помимо OpenSSH, добавлено 3 новых профиля Apache. Каждый из этих профилей содержит набор настроек:

  • Apache — открывает порт 80, который используется протоколом http;
  • Apache Full — открывает порты 80 и 443, которые используются протоколами http и https;
  • Apache Secure — открывает только порт 443.

Мы применим Apache Full, чтобы иметь возможность разрешать как http, так и https трафик.

Для активации профиля выполняем команду:

sudo ufw allow in "Apache Full" Rule added Rule added (v6)

После этого мы можем проверить, как работает Apache, и открыть сайт по умолчанию.

Для этого открываем браузер и вводим IP-адрес сервера. Откроется вот такая информационная страница:

Apache

Фактически это уже работающий сайт, состоящий из одной HTML-страницы.

Установка поддержки баз данных MySQL

Установим поддержку баз данных MySQL.

Выполним команду:

sudo apt install mysql-server

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

sudo mysql_secure_installation

Далее необходимо ответить на несколько запросов. Первое, что предлагается сделать, это включить плагин VALIDATE PASSWORD, который используется для того чтобы при настройке пароля баз MySQL нельзя было использовать простые пароли. Для включения вводим 'y' и нажимаем 'enter'

На следующем шаге предлагается установить степень проверки пароля:

There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

Выберем средний: вводим 1 и нажимаем 'enter'

Далее вводим надёжный пароль и подтверждаем его.

Обратите внимание! Это пароль для пользователя root именно для MySQL, и он не имеет отношения к пользователю root, который у вас используется в системе.

На все последующие вопросы можно отвечать 'y' и нажимать 'enter':

  • запрос на удаление анонимного пользователя,
  • запрос на отключение удалённой авторизации пользователя root,
  • удаление тестовой базы данных.

По завершении будет запрос на активацию тех настроек и настроек, которые мы сделали.

В результате получим сообщение:

Success. All done!

Установка поддержки языка PHP

Далее установим поддержку языка PHP.

Нам нужно установить три пакета:

  • PHP
  • libapache2-mod-php — модуль, который позволяет обрабатывать PHP-файлы.
  • php-mysql — позволяет взаимодействовать PHP с MySQL
sudo apt install php libapache2-mod-php php-mysql

На этом установка LAMP закончена.

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

Выполним команду:

sudo mkdir /var/www/mysite

Вместо mysite указываем домен нашего сайта.

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

sudo chown -R $USER:$USER /var/www/mysite

Далее нужно создать файл конфигурации для нашего виртуального хоста. Файлы конфигурации хранятся в директории /etc/apache2/sites-available. Откроем консольный текстовый редактор nano и создадим файл конфигурации. Выполним команду:

sudo nano /etc/apache2/sites-available/mysite.conf

Вставим следующий код:

<VirtualHost *:80> ServerName ip_адрес_сервера ServerAlias ip_адрес_сервера ServerAdmin atlex@localhost DocumentRoot /var/www/mysite ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

Обратите внимание, для ServerName мы указали IP-адрес нашего сервера, если у вас есть домен, то следует указать его.

Выходим из редактора nano, для этого нажимаем Ctrl + X, вводим 'yes', чтобы сохранить файл.

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

sudo a2ensite mysite

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

sudo systemctl reload apache2

Создадим тестовую страницу в нашем каталоге, где должны располагаться файлы нашего сайта. Снова воспользуемся текстовым редактором nano:

nano /var/www/mysite/index.php

И в него добавим следующий код:

<?php phpinfo();

Это PHP-функция, которая выведет подробную информацию о текущей конфигурации php. Вводим IP-адрес нашего сервера в адресную строку браузера и видим, что у нас открывается страница с информацией о конфигурации PHP.

PHP Info

Мы рассмотрели базовые шаги установки Apache, PHP, MySQL и научились создавать виртуальные хосты. Теперь вы можете установить практически любую CMS и запустить свой бизнес в интернете или вести блог.

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

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: