Развертывание .NET 6 MVC на Linux

Сначала создайте папку в директории Linux, например myweb. При создании каталога не забудьте назначить права доступа, по умолчанию достаточно значения 0755. Права 0755 соответствуют режиму rwxr-xr-x:

Другие пользователи: чтение, выполнение (r-x)

Владелец (вы): чтение, запись, выполнение (rwx)

Группа: чтение, выполнение (r-x)

Затем опубликуйте приложение в Visual Studio: сначала соберите проект в режиме Release, после чего щелкните правой кнопкой по проекту и выберите «Опубликовать». После успешной публикации скопируйте все файлы из каталога публикации в созданную ранее папку myweb через FTP-клиент.

cd /usr/myweb

После этого выполните следующую команду для запуска программы в фоновом режиме — это означает, что приложение не закроется, даже если вы закроете окно удаленного подключения к Linux.

sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)

Ключевой элемент здесь — символ & в конце команды. Без него программа запустится в переднем плане и остановится при закрытии терминала или нажатии сочетания клавиш Ctrl + C.

Пример выполнения команды: sudo nohup dotnet WebSite.dll &

Важное примечание

Перед публикацией настроите порт. Откройте файл appsettings.json вашего .NET MVC приложения.

Добавьте следующую конфигурацию как образец:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

Данная конфигурация разрешает доступ с любого IP-адреса по порту 8080. После этого вы можете настроить обратный прокси Nginx, что позволит обслуживать несколько доменов на одном сервере Linux.

Далее откройте порт в брандмауэре, иначе доступ будет невозможен. Если вы используете Nginx как обратный прокси, внешний доступ к порту не требуется — используйте такую конфигурацию:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

В этом случае приложение будет доступно только по локальному IP-адресу, внешние подключения к порту не требуются.

Конечная цель — открывать приложение по адресу abc.com/hello.

Запустите приложение командой sudo nohup dotnet WebSite.dll &

Проверить, запустилось ли приложение, можно командой: ps -aux | grep WebSite.dll

Если в выводе отобразится список процессов с указанием порта — запуск выполнен успешно.

Настройка обратного прокси Nginx (шаг можно пропустить, если он не нужен)

Если Nginx установлен, основной конфигурационный файл обычно находится по пути /etc/nginx/nginx.conf

Отредактируйте файл /etc/nginx/sites-available/default

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

	root /var/web/xxxx;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	# Основной сайт
	location / {
		try_files $uri $uri/ =404;
	}

	# ✅ Важно: перенаправление пути /hello на .NET
	location /hello {
		proxy_pass http://127.0.0.1:8080;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}Code language: PHP (php)

Перезапустите Nginx

sudo nginx -t
sudo systemctl restart nginx

Перезапустите .NET MVC приложение

Сначала найдите запущенный процесс командой ps -aux | grep WebSite.dll, запомните его PID (первое число в строке с sudo xxxxx &)

Выполните команду kill [PID] для остановки процесса .NET MVC.

Запустите приложение заново командой: sudo nohup dotnet ИмяПроекта.dll —urls http://127.0.0.1:8080 > /dev/null 2>&1 &

Проверьте работоспособность

Перезапуск Nginx

Выполните команду в консоли bash:

Запуск:

sudo systemctl restart nginx

.NET прослушивает порт 8080

Проверьте, работает ли приложение .NET, командой в bash:

Запуск:

curl http://127.0.0.1:8080
Code language: JavaScript (javascript)

Если в консоль выведется код HTML — приложение работает корректно.

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

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