DevOps Basics: как запустить сайт на своем сервере

DevOps (development + operations) — это направление, находящееся на рубеже разработки ПО и системного администрирования. Примерами DevOps-задач могут быть размещение проекта на сервере, автоматизация деплоя и обеспечение бесперебойной работы сервиса в условиях высокой нагрузки.
Понимать принципы DevOps полезно любым разработчикам. В этой статье мы начнем с основ — настроим сервер и запустим на нем сайт.
Наш гайд будет состоять из нескольких этапов:
- Покупка домена
- Аренда сервера
- Настройка DNS-записей
- Настройка nginx, как обработчика запросов
Покупка домена
Это можно сделать на любом сервисе-регистраторе: (например, reg.ru, godaddy, namecheap, gandi.net). Вам нужно подобрать свободное имя, заполнить регистрационные данные и внести оплату.

Аренда сервера
Следующим шагом нужно выбрать vps-хостинг (virtual private server) и арендовать сервер. Это может быть Selectel, Timeweb или любой другой.
Мы не будем рассматривать работу с виртуальным хостингом (shared hosting), а настроим всё сами. А сейчас небольшое отступление — чем виртуальный хостинг отличается от vps.
| Виртуальный (shared) хостинг | VPS-хостинг |
|---|---|
| Много сайтов разных владельцев находятся на одном сервере. | Вы арендуете виртуальный выделенный сервер и размещаете на нем свои проекты. |
| У вас нет root-прав. Вы не можете влиять на установленную на сервере ОС и набор ПО. | У вас есть root-права. Можно настроить окружение под свои потребности. |
| Есть предустановленная панель управления с графическим интерфейсом. | Панели управления в комплекте нет. Для работы понадобятся навыки администрирования Linux. |
| Подходит для сервисов с небольшой посещаемостью. При большом количестве посетителей может начать тормозить из-за «сайтов-соседей». | Подходит для проектов с высокой нагрузкой. |
Как установить сайт на VDS: инструкция
Главная задача любого владельца сайта — обеспечить своим пользователям быстрый и безопасный доступ к его содержимому. Для достижения этой цели необходимо правильно выбрать хостинг-провайдера и определиться с типом хостинга. Один из основных видов аренды — VPS/VDS (Virtual Private/Dedicated Server) или виртуальный частный/выделенный сервер. Однако просто арендовать его недостаточно — нужно еще разместить и запустить на нем сам проект. Это можно сделать вручную через терминал, но гораздо удобнее устанавливать сайт через панель управления, которую обычно поставляют вместе с услугой хостинга. В этой статье мы поэтапно рассмотрим, как установить сайт на VDS в панели управления ispmanager.
Как разместить сайт на VPS в ispmanager
Данная панель управления является платной, поэтому, чтобы пользоваться ей, необходимо приобрести подписку. Как правило, хостинг-провайдеры предлагают установку панели сразу при заказе сервера. У некоторых хостеров стоимость лицензии входит в тариф, но чаще ее требуется оплачивать отдельно. Ispmanager — один из наиболее распространенных и удобных способов администрирования VPS/VDS, так что установить и запустить эту ПУ можно на любом хостинге. Например, ИХЦ поставляет лицензии Lite, Pro, Host и Bussiness как своим клиентам, так и тем, кто разместил сайт на внешних IP-адресах.
Ниже мы предоставим подробную пошаговую инструкцию, благодаря которой установка сайта на VPS/VDS пройдет быстро и не вызовет трудностей. Вы сможете самостоятельно загрузить файлы сайта, создать базу данных, добавить и привязать доменное имя к VPS, настроить сертификат безопасности, чтобы обеспечить защищенное соединение. Кроме того, мы также рассмотрим, как создать резервную копию вашего сайта, чтобы гарантировать его восстановление в случае сбоя.
Руководство поможет владельцам сайтов и разработчикам, которые хотят произвести запуск веб-ресурса на заранее настроенном виртуальном сервере. О том, как с нуля настроить VPS/VDS , можно прочитать в другой статье в нашем блоге.
Добавление пользователя и домена
Перед размещением на VPS файлов сайта необходимо создать в панели управления нового пользователя и добавить домен, на котором веб-сайт планируется запускать. Для этого войдите в ispmanager с правами root, используя учетные данные, которые вам отправил провайдер после активации сервера или которые вы сами придумали, когда устанавливали панель. После авторизации можно приступать к созданию юзера:
- Выберите вкладку «Пользователи» в боковом меню. В рабочей области откроется экран с инструментами для управления учетными записями.
- Нажмите кнопку «Создать пользователя».
- Заполните обязательные поля (логин, пароль) и поставьте галочки в блоке «Доступ» на тех правах, которыми пользователь будет обладать. Мы рекомендуем разрешить использовать SSL и PHP как модуль Apache. В следующем блоке укажите значения, которые будут использоваться для будущих доменов по умолчанию (кодировка, тип обработчика и т. д.). Настройки всегда можно будет изменить. Нажмите «Далее».
- Вам предложат автоматически создать дополнительные сущности: FTP-пользователя, сайт и почтовый домен. В качестве IP-адресов для двух последних панель ставит тот, что принадлежит вашему VDS. Если их несколько, можете выбрать нужный из списка. В графе «Имя сайта» укажите домен, по которому будет открываться ваш веб-ресурс. В этом же блоке можно сразу установить CMS (WordPress и др.). Отметим, что создавать доменную почту необязательно, если вы планируете использовать сторонний почтовый сервис.
- Нажмите «Далее», проверьте корректность данных и кликните кнопку «Завершить». Готово! Теперь вам необходимо перелогиниться в ispmanager. Откройте вкладку «Пользователи», выберите того, которого только что создали, затем нажмите на три точки справа и строку «Войти под пользователем».
Загрузка файлов сайта
Когда вы подготовили панель (создали пользователя и добавили домен) для работы с веб-сайтом, можно размещать файлы проекта на сервере. Обычно разработчики упаковывают и поставляют их в архиве. Чтобы установить сайт на VPS/VDS, следуйте инструкции:
- Перейдите в раздел «Сайты» в боковом меню. Выберите из списка нужный домен, кликнув по нему мышкой, и нажмите кнопку «Файлы сайта». Вас автоматически перекинет в корневой каталог в файловом менеджере панели управления.
- Кликните «Загрузить». На открывшемся экране установите подходящий формат: файл с локального устройства или URL объекта на другом сервере. После этого выберите файл на компьютере / введите адрес и нажмите «Загрузить». По завершении загрузки вы снова окажетесь в директории доменного имени.
- Если сайт находится в архиве, его требуется развернуть. Выберите загруженный файл из списка, затем нажмите «Архив» и «Извлечь». Ispmanager поддерживает архивные форматы zip, gzip, bzip и др.
Готово! Теперь вы сможете запустить сайт на своем виртуальном хосте. Однако, чтобы он стал доступен другим пользователям, нужно внести изменения в DNS и привязать доменное имя к VPS/VDS.
Привязка домена к VPS
Создаете вы новый сайт или осуществляете его перенос между разными хостинг-провайдерами, вам в любом случае потребуется ассоциировать доменное имя с IP-адресом вашего VPS/VDS. Без этого шага ресурс попросту не будет открываться по символьному адресу: пока система DNS не знает, на каком сервере вы разместили файлы, никто в интернете не сможет получить к ним доступ, используя домен.
Для начала вам потребуется прописать у своего доменного регистратора новые name servers (NS). Войдите в личный кабинет на сайте, где регистрировали имя, и найдите раздел с NS серверами. Поставьте в их значения адреса серверов имен хостинг-провайдера, у которого арендуете VPS/VDS: обычно они имеют вид «ns1.имя-провайдера.ru». Например, в ИХЦ это ns1.ihc.ru и ns2.ihc.ru. После внесения этих правок должно пройти время (до 24 часов), прежде чем система обновится и данные о вашем домене станут доступны по всему миру.
После этого вам следует проверить DNS-записи в ispmanager. Откройте вкладку «Управление DNS» в сайдбаре. Кликните по имени сайта в списке и нажмите «Управлять DNS-записями». У домена должна иметься запись типа A, где будет указан IP-адрес вашего виртуального сервера. Если ее нет, то добавьте соответствующую информацию через кнопку «Создать запись». Благодаря этому страницы веб-сайта можно будет запускать с помощью указания доменного имени в адресной строке браузера.
Если вашему веб-проекту не нужна база данных (допустим, если у вас сайт-визитка), то на этом установку сайта можно завершить, он уже работает. В противном случае потребуется еще одна настройка.
Создание БД и импорт
Если вы собираете или отдаете на сайт какие-либо структурированные сведения, вам понадобится база данных. При переносе проекта с другого сервера, т. е. когда у вас уже есть готовая БД, ее также нужно будет разместить на новом VPS/VDS.
Управлять этим инструментом можно в разделе «Базы данных» в боковом меню. Откройте его и нажмите «Создать базу данных». Заполните поля с именами самой БД и пользователя, выберите сервер (MySQL или MariaDB), задайте пароль и поставьте (или не ставьте) галочку в графе «Удаленный доступ».
Когда БД будет создана, кликните по ней в списке и нажмите «Дамп» — «Импорт». Загрузите файл (обычно в SQL-формате) удобным для вас способом. Готово! База данных установлена на сервер — осталось только связать ее с сайтом.
Для этого пройдите путь «Сайты» — ваш домен — «Файлы сайта» и в открывшемся каталоге найдите конфигурационный файл. Нажмите «Редактировать». На скриншоте ниже показаны строчки, которые вам требуется изменить. Пропишите там новые данные для подключения к БД и кликните по кнопке «Сохранить и закрыть».
Теперь вы можете запускать веб-сайт и пользоваться базой данных. Следующие шаги необязательны, однако мы рекомендуем выполнить их, чтобы установить безопасное соединение и обеспечить возможность восстановить проект в случае его поломки.
Настройка SSL-сертификата
Сертификат безопасности нужен для того, чтобы ваш веб-ресурс открывался по защищенному протоколу HTTPS, который шифрует информацию при ее передаче. В ispmanager есть возможность как установить бесплатный Let’s Encrypt, так и разместить уже имеющийся у вас.
Зайдите на вкладку «SSL-сертификаты». Чтобы поставить купленный:
- нажмите «Добавить сертификат»;
- выберите «Существующий»;
- заполните поля данными, которые получили при покупке SSL-сертификата;
- кликните «Завершить».
Чтобы установить бесплатный:
- нажмите «Let’s Encrypt»;
- выберите пользователя, домен, длину ключа и придумайте название для сертификата;
- кликните «Выпустить».
Готово, теперь на вашем VPS/VDS запущен SSL-сертификат и сайт соответствует современным стандартам безопасности.
Резервное копирование
Делать бэкапы (копии) проекта необходимо, чтобы быстро восстановить рабочую версию в случае сбоя. Поставить такую задачу можно на вкладке «Резервные копии». Кликнув по кнопке «Создать копию», вы можете выбрать, какие данные нужно сохранить. Когда процесс копирования будет завершен, бэкап разместят в этом же разделе.
Мы рекомендуем также хранить резервные копии на съемных носителях или на других серверах: это позволит обезопасить себя в ситуации, если сбоит не только сайт, но и сам VPS/VDS.
Заключение
Разместить сайт на VDS может казаться сложной задачей, но если вы будете следовать нашей пошаговой инструкции, запустить проект получится легко и без проблем. Ispmanager обеспечивает удобный и простой способ управления вашим VPS, позволяя быстро установить и настроить ваш сайт на сервере. Обратите внимание, что процесс может немного отличаться в зависимости от версии и настроек панели. Если у вас возникнут трудности, обратитесь к документации или к службе поддержки ispmanager для получения дополнительной помощи.
Похожие статьи
Инструкция по настройке VPS/VDS сервера с нуля
Сегодня веб-мастера часто выбирают виртуальные частные/выделенные серверы (Virtual Private/Dedicated Servers) для размещения своих проектов. Это оптимальный вариант хостинга, когда мощностей shared-сервера уже недостаточно, а на аренду физической машины нет средств или в ней нет необходимости. Управлять VPS/VDS сложнее, чем обычным хостингом, потому что настраивать его приходится самостоятельно. Если вы не обладаете навыками системного администрирования и у вас нет возможности нанять человека с релевантными опытом, настройка VPS с нуля может занять много времени. Чтобы ускорить процесс, воспользуйтесь нашей пошаговой инструкцией. В статье описаны этапы настройки VDS на ОС Linux.
Управление виртуальными серверами
Управление виртуальным выделенным сервером с помощью консоли — непростая задача для начинающего системного администратора. Оно требует знания команд и английского языка, умения читать ответы сервера, понимания кодов ошибок и приспособленности к работе с удаленным компьютером без графического интерфейса. Альтернативой командной строке является панель управления (ПУ) VPS, в которой функции и их настройки распределены по соответствующим разделам, а большинство действий выполняется щелчком мыши. Ispmanager — удобное и функциональное решение для русскоязычных пользователей. Разберем администрирование VPS на примере данной программы.
Как привязать домен к VPS/VDS серверу
Одним из важных шагов при создании и запуске сайта является привязка доменного имени к серверу, на котором тот расположен. Такое подключение необходимо для того, чтобы интернет-пользователи могли получить доступ к вашему веб-сайту через его символьный адрес: например, ihc.ru. Если вы арендуете виртуальный частный/выделенный сервер (Virtual Private/Dedicated Server), то подключить домен можно не только через панель управления, но и без ее использования. В статье рассказываем, как привязать домен к VPS/VDS на примере административной панели ispmanager, а также напрямую через DNS.
Нажмите дважды, чтобы увеличить
Как разместить сайт на VPS без панели управления хостингом
С помощью этого руководства вы научитесь устанавливать на виртуальный сервер так называемый LAMP-стек.
LAMP — это набор ПО, который включает в себя:
Как результат, после его установки вы сможете запустить свой собственный сайт.
Мы будем использовать виртуальный сервер, тариф ATLEX-VPS-5, 16 ГБ оперативной памяти и 160 ГБ SSD-накопителя. Но для большинства начальных задач (блог, сайт-визитка) и не очень нагруженных проектов вполне подойдёт более простая конфигурация ATLEX-VPS-1. В качестве операционной системы используем дистрибутив Linux Ubuntu 20.04
Для начала давайте разберёмся, что нужно для запуска сайта. Каждый сайт для своей работы требует наличия различных компонентов. Как правило это веб-сервер, поддержка языка программирования, на котором написан сайт, и поддержка базы данных. В этом руководстве мы покажем, как установить веб-сервер Apache, поддержку языка PHP и поддержку баз данных MySQL.
Настройка SSH
Все действия мы будем выполнять через командную строку c использованием SSH-протокола. Вам нужно знать 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 [имяпользователя]
Далее нужно дважды ввести пароль для этого пользователя.
Обязательно запомните пароль или сохраните его в надёжном месте.
После этого вам будет предложено ввести некоторые данные пользователя (полное имя, телефон и т.д.), но все это можно не вводить, а просто оставить поля пустыми, каждый раз нажимая ‘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)
Затем активируем сам брандмауэр командой:
Появится предупреждение, что может прерваться текущее соединение:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Но так как мы разрешили OpenSSH, то не беспокоимся и вводим ‘y’ и нажимаем ‘Enter’ .
Firewall is active and enabled on system startup
Можно проверить статус брандмауэра командой:
Видим, что он активен и активен профиль OpenSSH :
Status: active To Action From — —— —- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Мы разрешили только SSH-подключения, а все остальные подключения брандмауэр теперь блокирует. Чуть позже мы разрешим подключения по HTTP, чтобы открывать сайт.
Теперь очень важный момент: нам нужно подключиться по SSH, но не под пользователем root , а пользователем atlex , которого мы только что создали.
Для этого мы пока не будем закрывать наше текущее SSH-соединение с root, а откроем новое окно терминала и подключимся в нём, на тот случай, если у нас вдруг возникнут проблемы и мы смогли бы их исправить.
В новом окне терминала вводим команду:
Вводим пароль пользователя 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-адрес сервера. Откроется вот такая информационная страница:
Фактически это уже работающий сайт, состоящий из одной HTML-страницы.
Установка поддержки баз данных MySQL
Установим поддержку баз данных MySQL.
sudo apt install mysql-server
После завершения установки рекомендуется выполнить специальный скрипт, который поможет установить различные настройки безопасности. Для этого выполним команду:
Далее необходимо ответить на несколько запросов. Первое, что предлагается сделать, это включить плагин 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
На этом установка 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
Вставим следующий код:
Обратите внимание, для ServerName мы указали IP-адрес нашего сервера, если у вас есть домен, то следует указать его.
Выходим из редактора nano , для этого нажимаем Ctrl + X , вводим ‘yes’ , чтобы сохранить файл.
Для того чтобы веб-сервер активировал наш виртуальный хост, выполним команду:
sudo a2ensite mysite
Для того чтобы изменения вступили в силу, необходимо перезагрузить сервер. Выполняем команду:
sudo systemctl reload apache2
Создадим тестовую страницу в нашем каталоге, где должны располагаться файлы нашего сайта. Снова воспользуемся текстовым редактором nano :
И в него добавим следующий код:
Это PHP-функция, которая выведет подробную информацию о текущей конфигурации php . Вводим IP-адрес нашего сервера в адресную строку браузера и видим, что у нас открывается страница с информацией о конфигурации PHP.
Мы рассмотрели базовые шаги установки Apache, PHP, MySQL и научились создавать виртуальные хосты. Теперь вы можете установить практически любую CMS и запустить свой бизнес в интернете или вести блог.
Домашний веб-сервер для чайников

Привет, Хабр! Относительно недавно после пары лет перерыва в айти, потраченных на изучение японского языка, мне пришлось срочно обновлять свои знания на работе. Ну знаете, искать возможности исполнить все хотелки начальника, как и положено эникею. Меня ждало много увлекательных открытий, но при этом, как водится, и немало боли и борьбы с непонятками. Docker, контейнеры, реверс DNS и реверс прокси, получение TLS сертификатов. В какой-то момент я наконец дошёл до удобного решения, которым я теперь хочу поделиться.
В своё время домашний сервер очень облегчил бы мне понимание Docker’а, да и удобство работы с ним неслабо бы повысил. Поэтому возникла идея написать эту статью, после прочтения которой любой человек даже с поверхностными знаниями в информационных технологиях сможет поставить себе постоянно доступный домашний сервер на базе Docker Swarm с удобной веб-мордой, простым получением TLS-сертификатов и Heroku-подобным функционалом (для чего будем использовать PaaS CapRover).
Статья, в общем-то, рассчитана на новичков, обладающих какими-то техническими знаниями — школьников старших классов, студентов и просто любителей — а потому вряд ли будет интересна серьёзным профессионалам.
Зачем оно нужно?

Ну как минимум потому что это круто, иметь домашний сервер! Да и настраивать всё это дело интересно. При этом он уже за месяца три отобьёт свою стоимость в сравнении с VPS’ом схожей конфигурации. Ну и наконец он просто радует глаз и миленький.
Что же до использования — иметь возможность развернуть в пару кликов дома Docker-контейнеры сразу в формате http://контейнер.мой.домен/ и в ещё один клик подключить к нему SSL неплохо упрощает жизнь. Сейчас всё больше и больше разнообразных приложений и сервисов переезжают в контейнеры и, если вы не любите лишний раз платить большим компаниям, иметь свои аналоги платных сервисов на домашнем сервере это очень удобно.
Ну а удобство для разработчиков и так понятно.
Подготовка
Поскольку мы хотим, чтобы наш домашний сервер был доступен из внешней сети, нужно сделать несколько приготовлений.
Port Forwarding

Проверьте наличие у вашего маршрутизатора (роутера) опции Fort forwarding/Port mapping/Перенаправление портов. Это не самый безопасный, но самый простой способ дать нашему серверу путь во внешний мир. Убедитесь что 80, 443 и 3000 порты у вас ничем не заняты — именно их вы будете прописывать IP адресу вашего сервера. Возможно в будущем, например, если вы захотите поднять почтовый сервер, вам придётся прописать дополнительные порты, но пока нужно только это.
Если проводить аналогию для понимания перенаправления портов, то представьте работу мамы в детстве. По умолчанию охранник туда не пустит, но стоит только сказать волшебную фразу «Я к маме», как строгий охранник уже пускает и говорит куда пройти. Вот и тут так же, с нашим NAT’ом роутера, только вместо «Я к маме» вы говорите порт, на что вас направляют куда надо.
Так же стоит убедиться, что у DHCP вашего роутера есть возможность зарезервировать выданный IP адрес за MAC. Скорее всего ваш сервер будет стоять включённым всё время и не просрочит свой выданный IP адрес, но подстраховаться никогда не бывает лишним. Если нельзя — выпишите машине статичный IP вне зоны выдачи адресов DHCP. Это сложнее и неудобнее, но тоже вариант (Кто-то даже скажет что так даже лучше сделать. Но я сейчас за простоту).
Нету этих опций? Возможно ещё не всё потеряно. Проверьте базу https://dd-wrt.com/support/router-database/ на наличие вашего роутера и есть ли тема по нему на 4pda. Если и там пусто. Ну, либо сворачивайте это руководство, либо пора купить новый роутер.
Домен

Конечно, ничто не мешает нам обращаться к нашему домашнему серверу и напрямую по IP адресу, но делать так не рекомендуется: и не особо безопасно, и запоминать IP адрес не просто, да и если у вас динамический, меняющийся каждый раз как вы заново подключаетесь к интернету, IP адрес, то запоминать его вообще бессмысленно. Ну и наконец, у нас много сервисов планируется, а чтобы к ним доступ был тупо по IP адресу, придётся их на разные порты навешивать. Оно вам надо?
Именно поэтому мы будем использовать домен.
Ну, знаете, ту самую штуку, которую вы вводите в адресной строке. В результате сможем давать сервисам поддомены для удобства и не страдать. Ну, например https://пароли.мой.домен/ для парольного сервиса или https://почта.мой.домен/ для почты. Удобно, в общем, запоминается. Делать это будет Ngnix под капотом нашего PaaS, при желании всегда можете разобраться в конкретике.

Рекомендую я, конечно, домен купить. Цены на домены в популярных зонах достаточно либеральные, платить раз в год, регистраторов куча. В плане выбора регистратора я ничего конкретного советовать не буду. Адекватнее всего ориентироваться по цене и отзывам. Разве что маленькое наблюдение: если регистратор требует миллиарды шекелей за такие вещи, как банальное управление DNS записями, то возможно это не очень хороший регистратор и следует посмотреть в другую сторону.
Впрочем если вы только пощупать пришли, то домен можно получить и бесплатно. Есть такой регистратор — Freenom, там можно бесплатно достать домен в зонах .tk, .ml, .ga, .cf или .gq. Правда как часто бывает с чем-то бесплатным, сайт глючный. Если на проверке доменов у вас всё время пишется, что домен занят, попробуйте поставить сразу полный путь. То есть вводите в проверочное поле не мой_домен, а сразу, скажем, мой_домен.tk.
Очевидно, что если что-то досталось бесплатно, то и потерять его легко — отзывы у Freenom в этом плане далеки от хороших. Так что если планируете что-то серьёзное, то лучше домен себе всё-таки купить у регистратора. Однако для маленького домашнего сервера потенциальная потеря домена не критична.
Cloudflare

Тут мы уже входим в пространство вкусовщины. Вам ничто не мешает использовать и редактор DNS записей вашего регистратора или любой другой сервис управления DNS записями домена. Тут, на хабре, вон вообще CloudFlare раком интернета недавно называли. Но с другой стороны, CloudFlare даже в базовой, бесплатной версии имеет достаточно много приятных фишек, которые ваш регистратор скорее всего не предоставляет. Тут и какая-никакая защита от DDoS, кеширование, расширенные возможности управления доступом и так далее и в том же духе. Плюс в одном из следующих пунктов, когда мы поднимем контейнер для DDNS, будет использоваться именно CloudFlare (впрочем настроить DDNS с другим провайдером вроде DuckDNS — задача достаточно тривиальная).
Правда многие фишки пройдут мимо нас, поскольку проксирование у CloudFlare на wildcard-записи (ну, это записи включающие всё пространство имён *.мой.домен) не работает (ну, за бесплатно). Однако ничего не мешает потом, уже для отдельных сервисов, сделать конкретную запись и пожать все плюшки платформы. Ну или ещё лучше, если у вас статический IP адрес, вообще без DDNS обойтись.
Платформа
Физический путь

Удобство физического пути очевидно — стоит отдельная машинка, не мешает основной работе, радует глаз.
Если спросить, что же использовать как платформу, наверняка многие ответят Малинку (то есть Raspberry Pi). На мой взгляд это не самый лучший выбор для данного случая.
Raspberry Pi отлично подходят для самодельных решений разнообразной направленности, но по соотношению цена/производительность не являются каким-либо лидером. И, хотя сейчас уже множество софта доступно под ARM системы, под x86 программы всё-таки чувствуют себя постабильнее.
Кто-то захочет переоборудовать старую машину или собрать на старых Xeon’ах себе компьютер для веб-сервера. И это тоже вариант, хотя по потреблению электроэнергии не оптимальный.
Я же советовал бы купить для данных целей недорогой (или не очень дешёвый, если вы хотите постоянно запускать «тяжёлые» задачи на вашем сервере) мини-пк (иначе называемый неттоп). Доступные варианты с 8 гигабайтами оперативной памяти, четырёхядерным Celeron и SSD на 128 гигабайт можно найти за 150-200 долларов и этого более чем хватит для домашних задач. При этом он будет компактным, тихим, удобным в размещении, достаточно приятно выглядящим и с низким TDP. Даже в самые дешёвые модели обычно можно доставить как минимум один, а порой и два 2,5 дюймовых диска, так что как файловую помойку его, в общем-то, тоже можно использовать. Хотя лучше превратить его в личное облако, а как файловый сервер использовать отдельное NAS-устройство — для отказоустойчивого хранения большого количества данных форм фактор мини-пк не слишком располагает.
Помимо этого, если вы «наиграетесь» и решите, что оно не ваше, такому компьютеру будет легко найти место. Например поставить обратно Windows и отдать маме/тёте Вале из третьего подъезда. Для офисной работы и использования браузера он подойдёт прекрасно.
А если вы за чуточку большую цену взяли мини-пк с несколькими сетевыми портами, то сможете превратить его в невероятно мощный и функциональный маршрутизатор, поставив сверху OpenWRT, PFsense, ClearOS или ещё какую-нибудь систему для роутеров. Ну и вообще альтернатив много, когда и если наиграетесь с предложенным мной вариантом.
Сразу, правда, надо учесть: шансы, что у такой машинки не будет работать Wi-Fi под линуксом, мягко говоря, не самые маленькие. Так что планируйте проводное соединение.
Заранее погуглите, на какую клавишу вызвать boot menu у вашей машинки. А образ для установки, если вы на Windows, лучше всего на флешку записывать программой Rufus.
Виртуальный путь

Если у вас есть просто живой интерес к тому, что и как настроить, определиться надо ли оно или не надо, то настраиваем виртуальную машину.
Тут стоит провести некоторое разграничение в понимании, поскольку дальше у нас будут ещё и контейнеры Docker. Внешне и по структуре они очень похожи, но вот по использованию неплохо так различаются.
Виртуальная машина — это именно то, как оно звучит — компьютер, которой на самом деле не существует, живущий внутри нашего. Её в какой-то мере можно сравнить с картонной коробкой. Её нужно где-то достать, развернуть, заполнить. Она стоит и занимает место, даже если не до конца заполнена. И залезть внутрь этой коробки иначе как сверху достаточно проблематично.
А контейнер — это как пакетик из магазина. Вроде и служит примерно той же цели, что и коробка, но внутрь что-то положить и достать проще, укладывать по-особому не нужно,места много не занимает, и выкинуть не жалко, и продырявить просто. Говоря же чуть более нормальным языком — контейнер это такая недо-виртуалка, которая ведёт себя скорее как процесс программы.

Конкретный гипервизор (ну, программа, где ваши виртуальные машины создаются и управляются) — на ваше усмотрение. Лучше, конечно, использовать гипервизор первого типа (они, как правило, быстрее, поскольку работают “под” операционной системой, а не “над” ней, как гипервизоры второго типа), но нашему серверу это не очень критично.
Внимание, любители всяких игруль, мобильных и не очень, на Windows — большая часть гипервизоров конфликтуют с эмуляторами Android для игр и с некоторыми античит решениями. Нормально только Bluestacks для Hyper-V работает, так что заранее выберите, что вам важнее.
VirtualBox

Для начала распишу для VirtualBox, который доступен на всех основных платформах, хотя и не отличается высокой скоростью.
Нажмите на кнопку New (Создать) для создания новой машины, и, ориентируясь по своей логике, задайте все настройки — если что, то потом всегда сможете поправить. Правда, меньше чем 2 гигабайта оперативной памяти лучше не ставить.
После создания машины войдите в её настройки. В разделе Storage (Носители) добавьте ваш образ к дисководу (синяя иконка), а в разделе Network (сеть) поменяйте тип подключения на Bridged Adapter (Сетевой мост) и выберите сетевую карту, по которой к вам приходят интернеты, после чего сохраните.


Hyper-V

Поскольку сам я в основном пользуюсь Windows, то предпочитаю использовать Hyper-V — встроенный в Pro версию системы гипервизор первого типа. Если вы пользователь Windows, то вам я тоже его советую — как и положено гипервизору первого типа, он весьма радует своей производительностью.
Чтобы использовать Hyper-V, активируйте его в Turn Windows Features on or off (Включение или отключение компонентов Windows) и перезагрузите компьютер. Вероятно, вам ещё придётся включить аппаратную виртуализацию в BIOS, если вы ещё не делали это. Также необходимо создать в Hyper-V manager (Диспетчер Hyper-V) сетевой интерфейс, ведущий во внешнюю сеть. Кликните справа на Virtual Switch Manager (Диспетчер виртуальных коммутаторов), выберите External (Внешний) и нажмите Create Virtual Switch (Создать виртуальный коммутатор). Далее в настройках External Network (Внешняя сеть) выберите сетевую карту, по которой к вам приходят интернеты, а потом сохраните.


После этого создайте новую машину в Hyper-V manager (но только не создавайте «быструю» машину, там всё не слава богу), а потом пройдите в её свойства и отключите Secure Boot (если машина 2-ого поколения). Остальные параметры по вкусу, но меньше 2 гигабайт оперативной памяти лучше не ставить. Ну и как сетевой интерфейс, очевидно, нужно поставить свежесозданный.
Установка и настройка системы

При выборе дистрибутива для установки у нас есть некоторый выбор (Но свериться с поддерживаемыми платформами на https://docs.docker.com/engine/install/ не помешает). Официально докер рекомендуется ставить на Ubuntu, я обычно предпочитаю Debian, но нам в целом не принципиально. Однако возможные подводные камни я распишу только для этих двух дистрибутивов.
И да, если можете, то лучше напрямую смотрите инструкции. А то информация в интернете имеет привычку устаревать и есть шанс, что к моменту, как вы это читаете, всё уже десять раз поменялось.
В случае с Ubuntu скачайте Ubuntu Server — на сервере графический интерфейс ни к чему, вы даже не будете подключать к нему монитор после изначальной установки. При установке важный момент — НЕ отмечайте Docker в качестве установки по умолчанию. Иначе он поставится как snap пакет, будет глючить, тупить и вообще, зачем вам лишние проблемы, не дружите со snap’ами, это плохая компания.
После установки системы копипастим по одной эти строчки (вы же уже подключились по SSH, правда ведь? Если нет, то чуть подальше будет инструкция) или вбиваем вручную:
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
При установке Debian не надо отмечать web server, поскольку в качестве него у нас Nginx внутри контейнера Docker’а с нашим PaaS работать будет.
После установки системы копипастим эти строчки:
sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
В общем скачайте что вам нравится, запишите на флешку при физическом пути, подключите к виртуалке при виртуальном и давайте, устанавливайте по инструкциям.
Помимо того, чтобы вводить команды вручную, вы можете использовать Ansible или другие системы для развёртывания, но данное руководство их проигнорирует, поскольку ничего сложного мы не делаем. Просто знайте, что если вам потребуется однотипно настраивать несколько машин, то можно по ssh удобненько это делать через Ansible. Но ssh игнорировать всё же не стоит, ведь как минимум подключившись к своей машине по нему, вы сможете тупо копипастить все команды из руководств, а не вводить вручную.
Ansible это достаточно важный инструмент для Linux-админа и, если вы планируете сдавать или хотя бы просто учиться на сертификации от RedHat, то он вам понадобится. Ну так, на будущее.
Ssh клиентов великое множество, я обычно пользуюсь встроенным в Windows OpenSSH (хотя он встроен, но в старых версиях Windows 10 может быть по-умолчанию отключен. Включается в Turn Windows Features On and Off (Управление дополнительными компонентами)). Просто открываете PowerShell и пишите:
ssh логин_в_linux@IPшник_сервера
А после вводите пароль своего пользователя. Тут стоит отметить, что использовать ssh с паролем это не особо безопасно (но зато проще всего), и, если у вас будет желание с этим разобраться, то лучше настроить ssh ключ.
Систему мы настроили, но не спешите ставить CapRover. Сначала вернёмся к роутеру. Найдите в нём ваш сервер и зарезервируйте его IP адрес в DHCP. Ну или поменяйте его на что-нибудь приятное и зарезервируйте. У вас есть чувство прекрасного, я уверен. После этого пропишите перенаправление с 80, 443 и 3000 портов маршрутизатора на 80, 443 и 3000 порты нашего сервера.
Вот пример того, как оно выглядит в моём роутере TP-Link:


Теперь идём к домену. Войдите в CloudFlare или DNS редактор вашего регистратора и создайте следующую запись:
Тип: A
Хост: *.ваш.домен
Запись: указывает на ваш внешний IP адрес

Если вы не знаете как узнать ваш внешний IP адрес, то посмотрите в настройках интерфейса, роутера, где угодно. Ну или наберите в поисковике что-нибудь вроде «мой IP», если копаться не хочется.
Можете сразу не отходя от кассы создать токен, если планируете динамически обновлять DNS при изменении вашего IP адреса.
Для этого пройдите по ссылке https://dash.cloudflare.com/profile/api-tokens и создайте токен со следующими свойствами:
Zone — Zone Settings — Read
Zone — Zone — Read
Zone — DNS — Edit
Include — All zones
Сохраните длинный Cloudflare API токен, но далеко не убирайте.

Всё, теперь заходим на сервер и пишем волшебную команду, которая поднимает нашу систему для управления контейнерами:
docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
Если вы плохо знакомы с Docker’ом, то тут мы запускаем наш первый контейнер — небольшой PaaS CapRover. Помимо этого мы даём портам в контейнере путь на волю (-p 80:80 -p 443:443 -p 3000:3000), позволяем контейнеру иметь доступ к демону Docker на хост-машине (-v /var/run/docker.sock:/var/run/docker.sock) и делаем так, чтобы папка из контейнера хранила своё содержимое в папке на хосте (-v /captain:/captain). Если так не сделать, то при перезапуске контейнера всё содержимое: настроечные файлы и другие данные нашего контейнера, потеряются навсегда. Так что никогда не забывайте указывать команду -v при работе docker в консоли, чтобы потом не плакать у разбитого корыта. Ну а caprover/caprover — это образ на Docker Hub.
Подождите немного и зайдите либо по айпи адресу, либо по адресу вашего домена:3000 (например http://мой.домен:3000), введите пароль captain42 . После этого тут же введите в нижнее поле ваш домен и нажмите Update Domain. Можете также нажать на Enable HTTPS, но вот на Force HTTPS не надо нажимать — Cloudflare и так трафик у вас (если вы оставили рекомендуемые настройки) с http на https переводит. Конфликтов на этом поводе нам не надо.
Настала пора запустить наш первый контейнер внутри PaaS.
Перейдите в веб панели в раздел Apps, нажмите на One-Click Apps/Database, найдите CloudFlare DDNS. Это достаточно простой контейнер, весь смысл которого сводится к тому чтобы раз в пять минут проверять, изменился ли IP адрес сервера, и, если изменился, обновлять DNS запись на CloudFlare.

После того как вы нажали на него, вы увидите много опций для ввода. Вообще говоря, чтобы всё заработало нам достаточно просто указать наш сохранённый токен CloudFlare и задать какое-нибудь имя. Но давайте всё-таки разберёмся, что именно мы видим.

А видим мы опции ввода так называемых переменных окружения. Не всех правда, а только тех, которые указал автор конфигурационного файла для CapRover. Значения из этих переменных контейнер может достать и использовать в своих целях, проще говоря через них задаётся начальная конфигурация контейнера.
Так вот, задайте какое-нибудь имя, вставьте ранее сохранённый токен и нажмите Deploy. Контейнер заработал. Теперь можете делать что угодно!
Чуть сложнее
Этот контейнер был простым, без веб доступа, но что у тех, к которым мы будем иметь доступ? Да в общем всё так же, разве что ещё можно включить https, задать домен, указать HTTP порт контейнера и включить websocket. Попробуйте, это просто и интересно!

Использование

И вот наконец у нас всё стоит и работает.
Зачем оно вам? Ну, если вы до сих пор не знаете — придумайте. Для установки в один клик в CapRover доступно множество приложений для повседневного использования. Например менеджер паролей Vaultwarden. Торрент-клиент Qbittorrent. Сервер Minecraft. Боты для Discord. Вариантов много.
Я, например, держу стол для игры в DnD с друзьями Foundry VTT, веб-интерфейс для пробуждение от спячки моего домашнего компьютера (чтобы потом подключаться по RDP), свой маленький гит на базе Gitea, удобный фронтэнд для чтения Reddit’а libReddit, веб-архив для закладок и ещё кучу всякой всячины для тестов и изучения.
Ничто не мешает вам самому поэкспериментировать с контейнерами, которых в списке ещё нет, а если результат будет удовлетворительным — опубликовать свой конфиг на Github среди других приложений для установки в один клик.
В самом начале мы установили SSH, так что если вы захотите более тонкой настройки, подключите и тыкайтесь. Советую также зайти на SSH через VS Studio Code с установленным расширением Docker’а, и установить его же сразу там на ваш сервер. Теперь наблюдать, управлять и чистить мусор в контейнерах гораздо удобнее.
Что дальше?
Возможно, вам уже хватило, вы поняли что это не ваше и вообще. Тоже неплохой результат. Возможно, вы просто хотели домашний сервер и получили его — опять же, к результату мы пришли. Или же вы хотите большего — и это тоже прекрасный результат! Надо понимать, что хотя Docker Swarm уже несколько протух, для небольших нагрузок, вроде домашнего использования, он подходит на отлично. А если вам мало, то, разобравшись как и что тут работает, вы можете медленно начать своё движение к изучению kubernetes.
Что можно посоветовать конкретного? Ну, если Docker вам интересен и хочется в нём разобраться поглубже, то вводный цикл статей от Microsoft достаточно приятно и наглядно объясняет как и что оно.
Если хотите покрупнее брать — и в Hyper-V получше разобраться, и в контейнерах и чуточку затронуть кубер, то вот ещё у них есть неплохие материалы.
Не, не, вы не подумайте, я хоть и виндовый админ (ну хорошо-хорошо, эникей а не админ), но не сказать чтобы прям топлю за Microsoft, просто материалы у них бесплатные и достаточно толковые, на мой взгляд.
Коли от Microsoft тошнит — ищите курсы. В англоязычных интернетах с этим проще — идёшь на Udemy или Pluralsight и выбираешь курс по теме, где люди поменьше в комментах бугуртят на качество, и в бой. С русскоязычными курсами посложнее в выборе, но кто ищет — тот найдёт.
Ну и наконец если в целом вся эта тема с сервисами на своём домашнем сервере вам интересна, то вот отличный список selfhosted решений на все случаи жизни.
В общем, да пребудет с вами IT сила!