Категории: C#

Публикация .NET Core приложение? Настройка Docker на VPS

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

Итак, у нас есть следующие вводные:

На основе проекта мы создаем Docker Image, публикуем его в Docker hub, выполняем настройку Linux сервера и непосредственно разворачиваем наше приложение.

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.

А на моем YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Создание .NET Core приложения

Начнем с того, что создадим новый проект приложения .net core. Выберем MVC шаблон, проверим, что подключена контейнеризация docker и включим авторизацию отдельных пользователей. На создание проекта и получение зависимостей уйдет немного времени. Нужно немного подождать. После этого мы можем запустить наше приложение, чтобы проверить его работу. На первую разгрузку также потребуется время. И наконец мы видим сайт на основе стандартного шаблона.

Отлично, теперь у нас есть готовое к публикации приложение. Нам необходимо упаковать его в docker image для удобного и быстрого развертывания.

Работа с Docker

Кстати, если ты не знаешь, что такое docker, то можешь посмотреть мое подробное видео по основам docker

Но для начала проверим работу нашего приложения в docker контейнере. Для этого необходимо, чтобы на компьютере был установлен docker desktop для windows. Запускаем исполнение приложения в docker контейнере и как видим, сайт доступен уже по другому порту. Чтобы убедиться, что приложение выполняется в docker, выполним команду в PowerShell. Мы видим, что имя приложения и порт совпадают.

docker ps

Теперь нам необходимо опубликовать образ нашего приложения в docker hub. Для простоты понимания docker hub можно воспринимать как GitHub, но на котором хранятся не файлы с исходным кодом, а готовые образы. Чтобы работать с docker hub необходимо зарегистрироваться на сайте https://hub.docker.com/

Выбираем:

Опубликовать -> Реестр контейнеров -> Центр Докер

И жмем «Опубликовать». Вводим свои учетные данные docker hub и нажимаем «Сохранить». Начинается процесс формирования и отправки docker image, который займет некоторое время. Теперь удостоверимся, но наш образ был успешно опубликован. Для этого зайдем в список своих репозиториев и убедимся, что он тут присутствует.

Супер! Мы уже проделали большую работу и сделали образ нашего приложения общедоступным. А теперь нам предстоит примерить на себя роль DevOps специалиста и заняться настройкой сервера, где будет работать наше приложение.

Настройка виртуального выделенного сервера VPS

Существует множество различных способов, как разместить приложение в сети. И сегодня мы воспользуемся одним из лучших – это выделенный виртуальный сервер VPS. По сути, это полноценный компьютер с операционной системой, где мы имеем полный контроль.

А использовать мы будем любезно предоставленный мне хостинг-провайдером Veesp выделенным сервером на базе Linux. Veesp предоставляет широкий выбор продуктов с достаточно вкусными ценами и высокой производительностью. Но что отличает Veesp от других?

  • Это безлимитный трафик при 200 мегабит в секунду
  • Дополнительная подсеть IPv6 к стандартной IPv4 на каждый сервер
  • Удобный REST API, для тех, кто любит все автоматизировать
  • Высокий аптайм с открытой статистикой
  • И множество различных способов оплаты, и в том числе даже Bitcoin.

Я уже зарегистрирован здесь и использую тариф SSD 2, поэтому после авторизации могу сразу перейти в панель управления хостингом. Которая действительно простая, понятная и удобная. Здесь нам потребуется IP адрес нашего сервера и root-пароль. При желании можно пользоваться терминалом прямо в браузере, но мне удобнее работать через PowerShell.

Итак, для начала нам необходимо подключиться к терминалу удаленного сервера. Благо в последних версиях Windows приложение OpenSSH уже благополучно встроено и никаких дополнительных действий выполнять не нужно. Выполним команду

ssh -l root 77.73.68.150

где root – это имя пользователя, а 77.73.68.150 – IP-адрес сервера. Подтвердим соединение и введем root-пароль, который можно получить в панели управления, если нажать на кнопку показать пароль.

После этого мы попадаем на чистенький сервер с установленной Ubuntu 16.04 x64. Сразу выполним обновление всех пакетов прописав команду:

sudo apt update && sudo apt upgrade

Отлично. Мы полностью настроили доступ к VPS и выполнили все необходимые предварительные настройки операционной системы. А теперь непосредственно приступим к установке и настройке docker-engine для развертывания нашего приложения.

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

sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual

Затем добавить ключ репозитория разработчиков docker:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Теперь добавить сам этот репозиторий:

sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'

Выполнить обновление пакетов:

sudo apt update && apt-cache policy docker-engine

Непосредственно установить docker:

sudo apt install -y docker-engine

И наконец добавить пользователя в группу docker:

sudo usermod -aG docker $(whoami)

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

sudo systemctl status docker

Если все хорошо, то статус будет активным. Для выхода используем сочетание клавиш Ctrl+C.

Но это еще не все. Для того, чтобы предоставить доступ к приложению необходимо открыть используемые порты на VPS. Для этого выполните команды:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Публикация .NET Core приложения на VPS с помощью Docker

Хочу заметить, что подобная настройка выполняется всего один раз при первоначальной конфигурации VPS. В дальнейшем необходимо просто получать docker image из docker hub и запускать приложение в контейнере с помощью всего одной команды:

docker run -d -p 80:80/tcp shwanoff/helloworlddotnetcoreapp

где shwanoff/helloworldcore – имя нашего образа на docker hub

Теперь проверим работу нашего приложения введя в строке браузера IP адрес нашего сервера:

http://77.73.68.150

И получаем полностью готовое к работе наше приложение. Задача выполнена в полном объеме + дополнительно у нас остался настроенный для работы виртуальный выделенный сервер VPS, где мы сможем публиковать и остальные приложения. Теперь остается привязать доменное имя к IP адресу, чтобы пользователям было удобно находить сайт и все круто.

Также рекомендую прочитать статью Топ-7 вещей необходимых разработчику ПО подпишитесь на группу ВКонтакте,Телеграм и YouTube-канал. Там еще больше полезного и интересного для разработчиков.

shwan @shwanoff

Программист .NET

Disqus Comments Loading...
Поделиться
Опубликовано
shwan @shwanoff

Свежие публикации

Принципы SOLID C#

Принципы SOLID C# представляют собой набор утверждений, которые описывают архитектуру программных продуктов. То есть, следуя им можно разработать стабильно работающее…

5 дней тому назад

Функциональный API библиотеки Keras

Добрый день, уважаемые читатели. Темой этой статьи является функциональный программный интерфейс библиотеки Keras, который мы будем использовать для построения непоследовательных…

1 неделя тому назад

Сеточный поиск лучшей архитектуры нейронной сети с помощью Keras и Sklearn

Добрый день, уважаемые читатели. Темой нашей сегодняшней статьи станет объединение библиотек Keras и Sklearn. Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного…

3 недели тому назад

Использование конвейера в sklearn

Добрый день, уважаемые читатели. Темой сегодняшней статьи станет объединение множества трансформаторов и классификатора в конвейер с сеточным поиском лучшей комбинации…

1 месяц тому назад

Английский язык для программиста

Английский язык считается языком международного общения, но еще больше он распространён в IT сфере, где его знание является одним из…

3 месяца тому назад

Сверточная нейронная сеть для распознавания цифр

Добрый день, уважаемые читатели. Целью этой статьи является классификация изображений с помощью сверточных слоёв Keras. Всё это дело мы будем…

4 месяца тому назад