Как стать автором
Обновить

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

Время на прочтение6 мин
Количество просмотров21K

В этой статье я по шагам покажу как:

  1. Развернуть ASP.NET Core приложение

  2. Установить и настроить MS SQL

  3. Установить SSL сертификат

Все это на VPS с чистой системой Ubuntu 20.04.

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

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

ASP.NET Core 3.1 Application | MS SQL
ASP.NET Core 3.1 Application | MS SQL

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

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

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

Мои настройки профиля:

  • Конфигурация: Release

  • Целевая платформа: net6.0

  • Режим развертывания: Зависит от платформы

  • Целевая среда выполнения: Переносимая версия

Нажимаю опубликовать.

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

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

Имя пользователя и пароль пришли мне на 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 мне на много удобнее.

ssh <login>@<ip>
ssh root@134.0.118.152

Шаг третий: установить .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

Устанавливаю Nginx:

sudo apt install nginx

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

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

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

Содержание файла:

server {
    listen        80;
    server_name vashdomen.com;
    location / {
        proxy_pass         http://127.0.0.1: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;
    }
}

Если ваше .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 в конце.

Кому проще создать файл на своей ОС и отправить его через 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 Id=sa;Password=<MyStrongPassword>;

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

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

sudo systemctl restart AspNetServer

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

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

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

  • certificate.crt - сам сертификат

  • private.key - приватный ключ

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

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

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

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

server {
    listen        80;
    server_name vashdomen.com;
    location / {
        proxy_pass         http://127.0.0.1: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;
    }
}

server {
	listen 443 ssl;

	ssl_certificate /var/netcore/ssl-certificates/certificate.crt;
	ssl_certificate_key /var/netcore/ssl-certificates/private.key;

	server_name vashdomen.com;

	location / {
        proxy_pass         http://127.0.0.1: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;
    }
}

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

server {
    listen 80;
    server_name vashdomen.com;
    return 301 https://$host$request_uri;
}

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

sudo nginx -t
sudo nginx -s reload

Итог

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

Большая часть информации взята отсюда - https://www.c-sharpcorner.com/article/how-to-deploy-net-core-application-on-linux/

Теги:
Хабы:
Всего голосов 10: ↑4 и ↓60
Комментарии15

Публикации

Истории

Работа

.NET разработчик
79 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн