Данное руководство носит образовательный характер, и предназначено для тех - кто ни разу не запускал приложения ASP.Net на сервере. Для больших, сложных и серьёзных проектов не годится, так как не учтены все нюансы развёртывания и настройки безопасности.++ Этапы развертывания приложений на сервере Ubuntu 20.04
*** Сервер и соединение
*** Установка .net Core + ASP.net Core
*** Сборка приложения
*** Nginx и всё что с ним связано
*** Сервис приложения
*** Настройка прав пользователя++ Сервер и соединение
Для того что бы развернуть приложение на .NET Core нам необходима виртуальная машина на Ubuntu - на ней мы и запустим наше первое приложение. Подключиться можно через SSH
++ Установка .net Core + ASP.net Core
Для начала нам нужно подключить репозиторий для того чтобы в последующем установить все нужные нам пакеты.
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-... -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.debУстановка пакетов
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-3.1
sudo apt-get install -y aspnetcore-runtime-3.1++ Сборка приложения
На этом этапе нам нужно скомпилировать приложение и получить исполняемые файлы которые мы будем запускать в виртуальной машине.
Создадим проект
dotnet new webapp -o ProjectName
cd ProjectNameСборка приложения
dotnet publish --configuration Release
В итоге мы получим в каталоге проекта по пути /bin/Release/ исполняемые файлы приложения.
++ Nginx и всё что с ним связано
Установка пакетов
sudo apt install nginx
sudo service nginx startВ браузере должна открыться стартовая страница Nginx по умолчанию. Целевая страница доступна по адресу http://server_IP_address
Настройка конфигурации
Для того чтобы настроить сервер так как нам нужно необходимо отредактировать конфиг Nginx в директории /etc/nginx/sites-available/
sudo vi /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;
}
}++ Сервис приложения
Создайте файл определения службы.
sudo vi /etc/systemd/system/dotnetapp.service
Добавляем конфигурацию сервиса
[Unit]
Description=Example .NET Web API App running on Ubuntu[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false[Install]
WantedBy=multi-user.targetЗапуск сервиса
sudo systemctl enable dotnetapp.service
Проверка статуса сервиса
sudo systemctl status dotnetapp.service
Перезапуск сервиса
sudo systemctl restart dotnetapp.service
Daemon reload
sudo systemctl daemon-reload
++ Настройка прав пользователя
Группа www-data
Пользователь (www-data) должен существовать и иметь права владельца в отношении файлов приложения. www-data создаётся автоматически при установке Nginx. Для того чтобы Nginx мог работать с каталогом нашего приложения нужно каталогу присвоить права пользователя www-data.
sudo chown username:www-data /var/www/ -R
sudo systemctl restart dotnetapp.service
sudo chown -R www-data:username /var/www/*
sudo systemctl status dotnetapp.serviceURL: https://docs.google.com/document/d/1BfPRdjGO87BiEgxyXvRAzoOd...
Обсуждается: http://www.opennet.me/tips/info/3149.shtml
Хм, а зачем Nginx? Там же есть Kestrel, и он у вас на 5000 порту, кто мешает его на 80 поднять?
дело привычки, по всей видимости (:
ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать редиректы и т.п., какие-нибудь рейт-лимиты настроить
> ну например, чтобы делать какие-то преобразования заголовков, добавить http-auth, сделать
> редиректы и т.п., какие-нибудь рейт-лимиты настроитьТогда уж все надо модно-молодежно завернуть все в контейнер и не засорять систему МС либами и всякой всячиной. И сборку приложения в том же контейнере делать. А прикрыть Nginx|HAProxy, кому что нравится :)
З.Ы. Kestrel умеет не только базовую авторизацию делать но и по сертификату даже... Но для этого у разработчика должны быть ручки а не лапки :)
Потому что страшно таким голым задом торчать в интернеты. :)
Если уж приходится микрософтовские поделки в интернет выпускать (iis, exchange, sharepoint, etc), то только за nginx/postfix/etc с полным контролем всего :)
Kestrel неплох для девелопмента, на продакшене он сдохнет.
> Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=falseЧто, у мс и в этом телеконтроль встроен? Зондотехнология, блин :)
А знаешь, в чем главный прикол?Оно не отключает телеметрию. Оно отключает сообщение с предупреждением о том, что собирается телеметрия!
Мне кажется это бред. Nginx совершенно не должен работать с каталогом приложения. Он подключается к приложению по HTTP.
>>Длятого чтобы Nginx мог работать с каталогом нашего приложения нужно каталогу
присвоить права пользователя www-data.
Да заверни ты все в Docker и запусти как человек
Вот зачем? В чём смысл? Докер это просто chroot. Зачем с ним мудохаться?