Как развернуть .Net Core 2.1 MVC проект на Ubuntu Server 18.04

Итак, .Net Core уже давно Open Source и, на данный момент, версии 2.1. Что же это нам даёт?  Да много чего, так как теперь мы можем писать на C#  под Linux и Mac.

Но, главное — это возможность поднимать Web проекты на Linux серверах, что в разы удешевляет и ускоряет разработку.

А теперь, как развернуть MVC .Net Core 2.1 проект на вируальной машине VirtualBox с Ububtu Server 18.04 на борту. Ниже будет пошаговая инструкция, как это сделать.

Для начала, нам понадобятся такой софт:

1.VirtualBox:         https://www.virtualbox.org/wiki/Downloads
2.Ubuntu Server:  https://www.ubuntu.com/server
3.Putty:                  https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
4: WinCP:              https://winscp.net/eng/download.php

Скачиваем все. Устанавливаем VirtualBox. Создаем новую виртуальную машину Ubuntu 64x. Выделяем ей 1ГБ оперативной и 20ГБ дисковой пямяти.
Устанавливаем на нее Ubuntu Server 18.04. Тут, я думаю, проблем возникнуть не должно. На всяки случай, вот инструкция: http://slusar.su/ubuntu-server-18-04-ustanovka-i-nastroyka-na-virtualbox/

Теперь, когда виртуальный сервер установлен, запускаем его и логинимся.
Напоминаю, что подключиться к серверу можно еще и по SSH или FTP. Вот короткая инструкция http://slusar.su/kak-podklyuchitsya-k-virtualnomu-linux-ser/

Полезные команды:

#переход по деректориям
cd /path 
#копирование
cp /path/file.txt /path/
#удаление файла (добавляйте -R, при удалении папки) 
rm file.txt 
#открыть полный доступ к каталогу (добавляйте -R, и к вложенным файлам)
chmod 777 /direc 
#открыть порт, если нужно
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT 

Чтобы работать от имени Root пользователя, вводим команду:

Sudo -s

Это позволит не вводить каждый раз команду sudo и подтверждать ее паролем. На тестовом сервере такое допустимо, чтобы ускорить работу, но на проде лучше так не рисковать.

apt update
apt upgrade

Если вы вошли под root, тогда введите эти две команды, чтобы обновить систему и список доступных пакетов. Если же вы не хотите работать под root, тогда перед каждой командой вводите sudo и подтверждайте действие вводом пароля. Я же дальше буду работать с root правами.

sudo apt update
sudo apt upgrade

УСТАНОВКА NGIX

Итак, для нормального доступа к нашему приложению из вне, нам потребуется установить и настроить NGIX сервер. Установка производится такими командами:

nginx=stable # use nginx=development for latest development version
add-apt-repository ppa:nginx/$nginx
apt update
apt install nginx

УСТАНОВКА .NET CORE 2.1

Теперь установим сам .Net Core 2.1, инструкцию по установке взял тут: https://www.microsoft.com/net/download/linux-package-manager/ubuntu18-04/sdk-current
Добавляем ссылку на репозитории:

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

И приступаем к установке самого дотнета:

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1

Чтобы убедиться, что все установилось, введите команду, которая покажет версию установленного SDK

dotnet --version

Теперь проверим работу нашего NGIX. Для начала запустим сервис:

sudo service nginx start

Теперь, если у вас настроен доступ в вашу сеть с виртуальной машины (смотри в инструкции установки сервера), вы можете на своей основной ОС запустить браузер и ввести в адресную строку IP вашего сервера:

НАСТРОЙКА NGIX

Отлично! Все работает. Но теперь нужно настроить наш NGIX, чтобы он мог показывать наш будущий сайт. Для этого заходим в папку /etc/nginx/sites-available/

cd /etc/nginx/sites-available/default
ls

Команда ls покажет нам список всех файлов. Где мы видим один единственный файл default. Вот его содержимое без комментариев.

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

Открываем его на редактирование (вы можете предварительно удалить файл командой rm default, команда ниже создаст пустой файл с таким же именем ):

sudo nano default

и заменяем такими значениями:

server {
    listen        80;
    server_name   example.com *.example.com;
    location / {
        proxy_pass         https://localhost:5001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

чтобы сохранить файл ctrl+x

Мы используем https://localhost:5001, потому что проект MVC запускается по умолчанию под таким адресом. Вы можете менять это значение по своему усмотрению.

Проверяем правильность синтаксиса конфигурационного файта командой:

sudo nginx -t

И перезагружаем NGIX сервер:

sudo nginx -s reload

СОЗДАЕМ ТЕСТОВЫЙ WEB ПРОЕКТ

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

cd

Которая нас возвращает в каталог user. Где мы создадим папку для нашего проекта webapp и войдем в нее.

mkdir webapp
cd webapp/

Теперь приступим к созданию приложения MVC. Для этого достаточно ввести команду создания, а затем просмотреть список файтов:

dotnet new mvc
ls

Вот как это выглядит:

Отлично, теперь запустим наше приложение, чтобы проверить его работу:

dotnet run

И сразу же проверяем, обратившись по IP к нашему серверу из браузера:

Супер! Все работает! Но, мы еще не запаблишили наш проект. Это тоже делается довольно легко.

ПУБЛИКАЦИЯ ПРОЕКТА
Находясь в папке проекта вводим команду:

dotnet publish

И получаем результат:


Теперь наш скомпилированный проект лежит по адресу /bin/Debug/netcoreapp2.1/publish относительно папки проекта. Перейдем туда и посмотрим, что там:

cd bin/Debug/netcoreapp2.1/publish/
ls

И вот результат:

Теперь перенесем эти файлы в отдельный каталог для сайтов по адресу /var/www/, где создадим для него папку webapp. Итак, создаем папку и копируем:

mkdir /var/www/webapp
cp * /var/www/webapp -r

Чтобы проверить, работает ли наш сайт, перейдем в его новую папку и запустим на выполнение:

cd /var/www/webapp/
dotnet webapp.dll

Если мы снова обратимся по IP нашему серверу через браузер, то увидим, что сайт работает.

СОЗДАНИЕ СЕРВИСА ДЛЯ АВТОЗАПУСКА ПРИЛОЖЕНИЯ

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

создадим файл настройки сервиса mywebapp.service, который будет лежать в папке /etc/systemd/system/ :

sudo nano /etc/systemd/system/mywebapp.service

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

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www/webapp
ExecStart=/usr/bin/dotnet /var/www/webapp/webapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=dotnet-mywebapp
User=user
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

Теперь мы можем активировать наш сервис, запустить и посмотреть его статус:

systemctl enable mywebapp.service
systemctl start mywebapp.service
systemctl status mywebapp.service

Если статус покажет адрес: http://localhost:5000

То нужно поменять настройки NGIX (почему он так себя ведет еще не понял)

sudo nano /etc/nginx/sites-available/default
server {
    listen        80;
    server_name   example.com *.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

И рестартнуть все сервисы и NGIX

service nginx reload
systemctl start  mywebapp.service
systemctl status  mywebapp.service

И ребутим сервер

reboot

Статьи по теме:

https://docs.microsoft.com/ru-ru/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x
https://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx
https://www.microsoft.com/net/download/linux-package-manager/ubuntu18-04/sdk-current
http://linuxway.ru/pervye-shagi/komanda-chmod-primery-ispolzovaniya/

How to Tame a Penguin | Master Linux with ASP.NET Core | Brendan Richards

Одна идея о “Как развернуть .Net Core 2.1 MVC проект на Ubuntu Server 18.04

  1. Евгений

    502 Bad Gateway
    nginx/1.14.0 (Ubuntu)
    на стадии
    Отлично, теперь запустим наше приложение, чтобы проверить его работу:

    dotnet run

    welcom to nginx открывался, что делать?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

×