首先在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,就说明正常。