В этой статье я по шагам покажу как:
-
Развернуть ASP.NET приложение
-
Установить и настроить MS SQL
-
Установить SSL сертификат
Все это на VPS с чистой системой Ubuntu 20.04.
MS SQL требует минимум 2GB свободной оперативной памяти для установки и запуска.
Показывать я буду на примере готового ASP.NET сайта для просмотра аниме (японская анимация). Оно работает и запускается без ошибок на localhost. Приложение использует MS SQL базу данных, которую мы установим и настроим на Шаге шесть.
Шаг первый: публикация приложения
В обозревателе решений нажмите правой кнопкой мыши по проекту -> опубликовать.
Если у вас нет профиля, нажмите «Добавить профиль публикации» -> Целевой объект выбираем папка -> Указываем удобно место, куда файлы выгрузятся -> Готово.
Мои настройки профиля:
-
Конфигурация: Release
-
Целевая платформа: netcoreapp3.1
-
Режим развертывания: Зависит от платформы
-
Целевая среда выполнения: Переносимая версия
Нажимаю опубликовать.
Если у вас другая целевая платформа, то на Шаге три вам нужно будет скачать версию .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 <ip> -l <login>
ssh "134.0.118.152" -l root
Шаг третий: установить .NET Core 3.1 на Ubuntu
У меня по умолчанию не было установлено репозиториев Microsoft с .NET Core, поэтому я скачал и установил их этими командами:
sudo 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
Теперь я устанавливаю .NET Core 3.1 и необходимые библиотеки:
sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-sdk-3.1
Шаг четвертый: установить и настроить Apache
Устанавливаю Apache и подключаю нужные модули:
sudo apt-get install apache2 sudo a2enmod proxy proxy_http proxy_html proxy_wstunnel sudo a2enmod rewrite
Следующие, что надо сделать — это создать файл конфигурации, который будет перенаправлять запросы по порту 80 (а в будущем и 443 для SSL) на наше ASP.NET приложение. Файл конфигурации надо создать по пути /etc/apache2/conf-enabled/netcore.conf
Можете создать файл на вашей ОС и при помощи FileZilla перенести его по пути, указанному выше, или создать его при помощи текстового редактора nano/vim. Я воспользуюсь nano.
sudo nano /etc/apache2/conf-enabled/netcore.conf
Содержание файла:
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ </VirtualHost>
Если ваше .NET приложение запущено на другом порте, указывайте его вместо 5000.
Проверяем конфиг на ошибки и перезапускаем apache, чтобы обновить конфиг:
sudo apachectl configtest sudo service apache2 restart
Шаг пятый: создать сервис с ASP.NET приложением
По сути этот шаг необязательный и его можно просто пропустить, заменив командой 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-get 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-get update sudo apt-get 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>;
И перезапускаю сервис AspNetServer командой:
sudo systemctl restart AspNetServer
Готово! Сайт работает. Следующий шаг будет посвящен настройке SSL сертификата.
Шаг седьмой: настройка SSL сертификата
При покупке домена мне в подарок дали SSL сертификат. На почту пришли все данные. Чтобы установить его на сайт я создал 3 файла:
-
yourdomain.crt — сам сертификат
-
privatekey.key — приватный ключ
-
intermediate.crt — промежуточный сертификат
Важно! Данные в эти файлы надо вставлять вместе с
——BEGIN CERTIFICATE——
——END CERTIFICATE——
В директории с Asp.Net приложением я создал директорию ssl-certificates.
Я перенес все файлы сертификатов по пути /var/netcore/ssl-certificates/
Добавим к нашему Apache серверу модуль SSL:
sudo a2enmod ssl
Теперь надо изменить файл конфигурации Apache, я открываю редактор nano командой sudo nano /etc/apache2/conf-enabled/netcore.conf
и изменяю код:
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ </VirtualHost> <VirtualHost *:443> ProxyPreserveHost On ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ SSLEngine on SSLCertificateFile /var/netcore/ssl-certificates/yourdomain.crt SSLCertificateKeyFile /var/netcore/ssl-certificates/privatekey.key SSLCertificateChainFile /var/netcore/ssl-certificates/intermediate.crt </VirtualHost>
Если хотите, чтобы HTTP автоматический перенаправлялся на HTTPS, измените содержимое <VirtualHost *:80> на это:
<VirtualHost *:80> Redirect permanent / https://example.com/ </VirtualHost>
example.com — замените на ваш домен.
Проверяем правильность конфига и перезапускаем Apache:
sudo apachectl configtest sudo service apache2 restart
Итог
На этом все, спасибо всем, кто прочел, надеюсь помог вам.
Большая часть информации взята отсюда — https://www.c-sharpcorner.com/article/how-to-deploy-net-core-application-on-linux/
Про настройку SSL на Apache узнал из этой инструкции — https://support.globalsign.com/ssl/ssl-certificates-installation/apache-http-server-ssl-certificate-installation
ссылка на оригинал статьи https://habr.com/ru/post/708336/
Добавить комментарий