Running asp net on linux

Разворачиваем и демонизируем ASP.NET Core приложение под Linux в виде фонового сервиса

Далее, мы можем просто установить dotnet-пакет при помощи apt-get:

sudo apt-get install dotnet-dev-1.0.4

Теперь можем смело приступать к созданию приложения

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

При помощи команды dotnet new мы можем создать шаблон для нашего приложения, подобно шаблонам из Visual Studio. Подробная документация к команде.

На текущий момент (07.2017), команда dotnet new поддерживает следующие шаблоны:

Мы создадим веб-приложение ASP.NET Core:

На выходе консоль выдаст нам следующее сообщение:

Чтобы убедиться, что шаблон сгенерировался правильно, заглянем в содержимое папки при помощи команды ls -la .

Все необходимые папки для сборки приложения на месте, приступим! Для начала, восстановим все пакеты при помощи dotnet restore .

Теперь можем собрать приложение:

Запустим приложение с помощью:

Консоль говорит нам, что приложение запустилось по адресу localhost:5000/. Проверим:

Желающих подробнее узнать, как работает web-сервер отсылаю к официальному источнику.

Теперь убьём процесс нажав Ctrl + C и опубликуем приложение командой dotnet publish. Эта команда упаковывает приложение и все его зависимости для дальнейшего развёртывания (желающим интимных подробностей сюда).

В случае проблем с правами доступа Вам поможет команда sudo chmod и эта страница документации.

Если мы хотим развернуть наше приложение под linux-сервером, необходимо настроить прокси и демонизировать процесс запуска приложения. Для проксирования мы будем использовать nginx, для демонизации процесса systemd. Краткое описание утилиты

Как следует из документации выше, с asp.net core в коробке идет kestrel — веб-сервер для asp.net приложений. Зачем нам тогда нужен прокси-сервер? Ответ даётся на официальной странице Microsoft:

Если вы выставляете ваше приложение в интернет, Вы должны использовать IIS, Nginx или Apache как обратный прокси-сервер.

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

Главная причина, по которой следует использовать обратный прокси сервер — безопасность. Kestrel относительно нов и ещё не имеет полного комплекта защиты от атак.

Ещё одна причина, по которой следует использовать обратный прокси-сервер — наличие на сервере нескольких приложений, использующих один порт. Kestrel не поддерживает разделение одного порта между несколькими приложениями.

Так же, использование обратного прокси-сервера может облегчить распределение нагрузки и поддержку SSL.

Как говорилось выше, в качестве прокси-сервера мы будем использовать nginx.

Т.к. в качестве прокси-сервера у нас используется не IIS, следует добавить следующие строки в метод Configure файла Startap.cs.

app.UseForwardedHeaders(new ForwardedHeadersOptions < ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto >); 

Здесь мы включаем поддержку ForwardedHeaders мидлвера из пакета. Microsoft.AspNetCore.HttpOverrides, который будет вставлять в Http-запрос заголовки X-Forwarded-For и X-Forwarded-Proto, использующиеся для определения исходного IP адреса клиента и передачи его прокси-серверу. Определение мидлверов и практическое использование так же будет рассмотрено в дальнейших частях этого гайда.

Читайте также:  Linux vpn сервер pptp

Если у Вас nginx не установлен, выполните следующую команду.

sudo apt-get install nginx

Далее, нам необходимо сконфигурировать nginx для проксирования http-запросов.

Создадим файл /etc/nginx/sites-available/aspnetcore.conf. Папка sites-avalible укахывает nginx-у, какие веб-сайты доступны на текущем сервере для обработки. Добавим в него следующие строки:

Создадим символическую ссылку на aspnetcore.conf в папку sites-enabled, в которой отражаются запущенные nginx-ом сайты.

sudo ln -s /etc/nginx/sites-available/aspnetcore.conf /etc/nginx/sites-enabled/aspnetcore.conf

(символическая ссылка — специальный файл в файловой системе, в котором вместо пользовательских данных содержится путь к файлу, открываемому при обращении к данной ссылке (файлу)(С) Википедия — прим. авт.)

Nginx настроен на то, чтобы принимать запросы с localhost:8888. Перезапускаем nginx командой sudo service nginx restart , чтобы созданные нами конфигурационные файлы вступили в силу. Проверяем:

502-я ошибка говорит, что сервер перенаправляет нас в другое место и в этом месте что-то пошло не так. В нашем случае — я убил процесс с нашим веб-приложением, которое было ранее запущено командой dotnet run. Потому что могу 🙂

На самом деле, потому что запускать dotnet run в консоли и вечно держать эту вкладку открытой грустно. Именно поэтому процесс будем демонизировать, то есть настроем автозапуск после перезагрузки и автоматическую работу в фоне с помощью systemd.

Для этого создадим файл в директории /etc/systemd/system/ с расширением .service

sudo nano /etc/systemd/system/kestrel-test.service

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

[Service]
WorkingDirectory=/home/robounicorn/projects/asp.net/core/test-lesson/bin/Debug/netcoreapp1.1/publish #путь к publish папке вашего приложения
ExecStart=/usr/bin/dotnet /home/robounicorn/projects/asp.net/core/test-lesson/bin/Debug/netcoreapp1.1/publish/test-lesson.dll # путь к опубликованной dll
Restart=always
RestartSec=10 # Перезапускать сервис через 10 секунд при краше приложения
SyslogIdentifier=dotnet-example
User=root # пользователь, под которым следует запускать ваш сервис
Environment=ASPNETCORE_ENVIRONMENT=Production

Теперь включим и запустим сервис при помощи следующих команд:

sudo systemctl enable kestrel-test.service sudo systemctl start kestrel-test.service
sudo systemctl status kestrel-test.service

Если всё было сделано правильно, на эта команда выдаст нам следующее:

Перейдём по ссылке ещё раз:

Ну вот, дело в шляпе. Спасибо за внимание!

Источник

Развертывание ASP.NET Core MVC приложения на Ubuntu 20.04 на VPS. Установка SSL

MS SQL требует минимум 2GB свободной оперативной памяти для установки и запуска.

Показывать я буду на примере готового ASP.NET Core сайта для просмотра аниме (японская анимация). Оно работает и запускается без ошибок на localhost. Приложение использует MS SQL базу данных, которую мы установим и настроим на Шаге шесть.

ASP.NET Core 3.1 Application | MS SQL

Шаг первый: публикация приложения

В обозревателе решений нажмите правой кнопкой мыши по проекту -> опубликовать.

Если у вас нет профиля, нажмите «Добавить профиль публикации» -> Целевой объект выбираем папка -> Указываем удобно место, куда файлы выгрузятся -> Готово.

  • Конфигурация: Release
  • Целевая платформа: net6.0
  • Режим развертывания: Зависит от платформы
  • Целевая среда выполнения: Переносимая версия

Если у вас другая целевая платформа, то на Шаге три вам нужно будет скачать версию .NET-SDK, которая вам нужна.

Шаг второй: отправить файлы через SFTP и установить SSH соединение

Читайте также:  Astra linux special edition vipnet

Имя пользователя и пароль пришли мне на e-mail, указанный при регистрации. Обычно имя пользователя стоит root. IP адрес написан в настройках VPS на сайте.

Чтобы подключиться по SFTP (SSH File Transfer Protocol) для передачи файлов, я использую программу FileZilla.

Запускаю -> Файл -> Менеджер сайтов -> Новый сайт

Протокол надо выбрать SFTP — SSH File Transfer Protocol.
Хост — это IP от VPS.
Логин и пароль ввожу из письма, нажимаю соединиться.

На VPS я создал директорию /var/netcore/ и файлы опубликованного приложения, при помощи Drag&Drop перенес в созданную директорию. FileZilla в логах показывает какие-то ошибки, но я их просто игнорирую, и все работает.

Установка SSH соединения. Большинство сайтов предоставляют возможность открыть консоль с SSH прямо в браузере нажатием одной кнопки, но он какой-то лагучий. Сделать это через CMD на windows 10 мне на много удобнее.

Шаг третий: установить .NET 6.0 на Ubuntu

У меня не было репозиториев Microsoft с .NET-SDK 6.0, поэтому я установил их командами:

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb

Я устанавливаю .NET 6.0 и необходимые библиотеки:

sudo apt update sudo apt install apt-transport-https sudo apt update sudo apt install dotnet-sdk-6.0

Шаг четвертый: установить и настроить Nginx

Следующие, что надо сделать — это настроить файл конфигурации, который будет перенаправлять запросы по порту 80 (а в будущем и 443 для SSL) на наше ASP.NET Core приложение. Файл конфигурации находится по пути /etc/nginx/sites-available/default

Можете создать файл на вашей ОС и при помощи FileZilla перенести его, или создать его при помощи текстового редактора nano/vim. Я воспользуюсь nano.

sudo nano /etc/nginx/sites-available/default

Если ваше .NET приложение запущено на другом порте, указывайте его вместо 5000.

Проверяем конфиг на ошибки и перезапускаем nginx, чтобы обновить конфиг:

sudo nginx -t sudo nginx -s reload

Шаг пятый: создать сервис с ASP.NET Core приложением

По сути этот шаг необязательный и его можно просто пропустить, заменив командой dotnet YourApp.dll . Теперь вы можете в строке браузера написать IP адрес VPS и увидеть ваш сайт. У меня сейчас ошибка 500 из-за отсутствия MS SQL на VPS, исправив ее на Шаге шесть, сайт будет работать. Но держать в потоке (я не уверен, как это в unix называется) вашего пользователя всегда запущенное приложения — это не вариант, поэтому давайте настроим сервис, который будет делать это постоянно на фоне.

Чтобы завершить выполнение приложения, нажмите сочетание клавиш Ctrl + C.

Я создал файл по пути /etc/systemd/system/AspNetServer.service AspNetServer — это имя нашего сервиса, позже мы будем его использовать, чтобы запускать, останавливать, перезапускать приложение, читать его журналы и т.д. Можете указать любое имя, главное оставьте .service в конце.

Читайте также:  Linux загрузка больших файлов

Кому проще создать файл на своей ОС и отправить его через FileZilla, делайте так, я же просто воспользуюсь командой sudo nano /etc/systemd/system/AspNetServer.service и вставлю следующий код:

[Unit] Description=ASP .NET Web Application [Service] WorkingDirectory=/var/netcore ExecStart=/usr/bin/dotnet /var/netcore/AnimeSite.dll Restart=always RestartSec=10 SyslogIdentifier=netcore-demo User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target

На 5 строчке вместо AnimeSite.dll укажите dll файл вашего приложения.

sudo systemctl enable AspNetServer sudo systemctl start AspNetServer

Проверить статус сервиса можно командой:

sudo systemctl status AspNetServer

Чтобы выйти из режима просмотра статуса, нажмите Ctrl + C.

Если ваше приложение не использует базы данных, то все готово, введите IP от VDS в строку браузера и проверяйте. Если приложение выдает ошибку или вы просто хотите почитать вывод приложения, используйте команду:

journalctl -u AspNetServer

При помощи ввода цифр можете выбрать, на какую строчку перескочить. Я пишу 9999, чтобы перейти в конец и посмотреть, какое исключение появляется.

Шаг шестой: установка и настройка MS SQL

Установим необходимую библиотеку и репозитории MS SQL:

sudo apt install software-properties-common sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"

Затем установим загрузчик MS SQL:

sudo apt update sudo apt install -y mssql-server

И при помощи этой команды перейдем к установке MS SQL:

sudo /opt/mssql/bin/mssql-conf setup

Нам предлагают выбрать, какую версию установить, я выберу Express под номером 3. Соглашаюсь с условиями пользования, устанавливаю свой супер сложный пароль и готово. Проверим, работает ли MS SQL командой systemctl status mssql-server —no-pager

Я изменяю строку подключения в appsettings.json, указав свой супер сложный пароль:

Server=localhost;Database=animesitedb;User >

Важно! Как верно отметили в комментариях, подключаться к БД через sa не правильно. Лучше создайте пользователя и выделите ему минимальные необходимые права.

И перезапускаю сервис AspNetServer командой:

sudo systemctl restart AspNetServer

Готово! Сайт работает. Следующий шаг будет посвящен настройке SSL сертификата.

Шаг седьмой: настройка SSL сертификата

При покупке домена мне в подарок дали SSL сертификат. На почту пришли все данные. Чтобы установить его на сайт я создал 2 файла:

Важно! Данные в эти файлы надо вставлять вместе с

——BEGIN CERTIFICATE——

——END CERTIFICATE——

В директории с ASP.NET Core приложением я создал директорию ssl-certificates и перенес все файлы сертификатов по пути /var/netcore/ssl-certificates/

Теперь надо изменить файл конфигурации Nginx, я открываю редактор nano командой sudo nano /etc/nginx/sites-available/default и изменяю код:

Если хотите, чтобы HTTP автоматический перенаправлялся на HTTPS, измените содержимое server, где listen 80 на это:

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

sudo nginx -t sudo nginx -s reload

На этом все, спасибо всем, кто прочел, надеюсь помог вам.

Источник

Оцените статью
Adblock
detector