部署.NET 6 MVC到Linux

首先在linux的目录下面创建一个文件夹,假如例如myweb,创建目录的时候,记得要给目录分配权限,默认是0755就可以。0755 对应的权限是 rwxr-xr-x

其他用户:可读、可执行(r-x)

用户(你自己):可读、可写、可执行(rwx)

分组:可读、可执行(r-x)

然后在vs中发布你的程序,先在release模式下面,编译一番,然后右键项目–发布。发布成功后,通过ftp工具把发布目录里面的所有文件复制到上面创建的my web目录

cd /usr/myweb

然后,就可以执行下面的命令,让你的程序在后台执行,所谓后台,也就是你退出当前的远程登录linux窗口后,程序不会退出。

sudo nohup dotnet yourprogramname.dll &

关键是这个命令末尾的& ,如果你想后台运行,这个&就不能少,如果少了就是前台执行,如果你退出终端,程序就停止。或者ctrl + c 你的程序也会停止。

例如,我这里执行 sudo nohup dotnet WebSite.dll & 执行后。

补充:重要

发布之前,配置好端口。打开你的.NET MVC程序中的 appsettings.json

增加如下配置,参考

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}

以上表示 允许通过任何ip访问,并且端口是8080,然后你就可以通过nginx来映射了,这样你的linux才可以支持多个域名。

然后开放端口。否则无法访问,不过如果我这里是通过nginx来反向代理的,所以就不需要任何ip访问了,我就这样配置

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}

以上就只需要本地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;
	}
}

然后重启 nginx

sudo nginx -t
sudo systemctl restart nginx

然后重启你的.NET MVC

先查找之前的进程 ps -aux | grep WebSite.dll 然后找到 里面sudo xxxxx & 那个 的进程号 第一个数字

然后 kill 那个数字 就可以 退出这个.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

如果有输出 HTML,就说明正常。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注