ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

linux系统小白部署c#程序

2026/9/3 16:17:20 拓冰建站 浏览量
linux系统小白部署c#程序 https://www.kimi.com/share/1a05541b-b1f2-8f4d-8000-00006a957e17User: c#在windows 系统上的 开发的signalr 服务端 9001端口webapi接口 9002端口vue开发的项目9003端口 怎么部署到麒麟服务器服务器无法联网是一个全新的服务器好多基础的环境都没有安装完全小白linux系统小白怎么搞定这件事情Kimi: 我帮你整理了一份零基础、手把手、完全离线的部署方案。核心思路是越简单越好不编译、不装依赖、复制粘贴就能跑。 总体思路3 大步┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ ① Windows上 │ ──→ │ ② 传到服务器 │ ──→ │ ③ 服务器启动 │ │ 打包三个项目 │ │ MobaXterm拖拽 │ │ 复制粘贴命令 │ └─────────────────┘ └─────────────────┘ └─────────────────┘为什么这样设计SignalR WebAPI用「自包含发布」自带 .NET 运行环境服务器不需要装任何 .NET 相关东西Vue 前端用Python3内置的静态文件服务器托管不需要 Nginx不需要编译你只需要在服务器上复制粘贴命令不需要懂 Linux第一步在 Windows 上准备文件30 分钟1.1 打开你的 SignalR 项目发布在项目文件夹内打开PowerShell或CMD执行dotnet publish-cRelease-rlinux-x64 --self-containedtrue-o./publish-signalr等待完成后项目文件夹里会出现一个publish-signalr文件夹。怎么确认成功了打开publish-signalr文件夹里面应该有一个没有后缀名的文件名字和你的项目名一样比如MySignalR还有很多.so文件。这个无后缀的文件就是可执行程序。1.2 打开你的 WebAPI 项目发布同样执行dotnet publish-cRelease-rlinux-x64 --self-containedtrue-o./publish-webapi完成后也有publish-webapi文件夹里面也有一个无后缀名的可执行文件。1.3 修改 Vue 项目的 API 地址找到 Vue 项目里的.env.production文件如果没有就新建一个内容改成VUE_APP_API_URLhttp://你的服务器IP:9002 VUE_APP_SIGNALR_URLhttp://你的服务器IP:9001把你的服务器IP换成实际 IP比如http://192.168.1.100:9002然后构建npmrun build完成后会出现一个dist文件夹里面就是前端静态文件。1.4 新建一个文件夹整理要上传的内容在 Windows 桌面新建文件夹命名为deploy里面建 3 个子文件夹deploy/ ├── signalr/ ← 把 publish-signalr 里的所有文件复制进来 ├── webapi/ ← 把 publish-webapi 里的所有文件复制进来 └── vue/ ← 把 dist 里的所有文件复制进来最终效果deploy/signalr/里有你的 SignalR 可执行文件无后缀deploy/webapi/里有你的 WebAPI 可执行文件无后缀deploy/vue/里有index.html和static文件夹第二步用 MobaXterm 上传到服务器10 分钟ps打开 MobaXterm 的 SFTP 文件浏览器​​​​启动 MobaXterm​​点击左上角的 ​​Session​​ → ​​New Session​​。选择 ​​SFTP​​或直接使用已打开的 SSH 会话按 CtrlShiftF 打开 SFTP 面板。输入服务器信息​​Remote host​​服务器 IP 或域名如 192.168.1.100​​Username​​你的用户名如 root​​Password​​输入密码或使用密钥认证用 MobaXterm 连接上你的麒麟服务器看左侧的 SFTP 文件浏览器如果没有点上方工具栏的「SFTP」按钮在左侧进入/opt目录直接点..往上退到根目录再双击opt把 Windows 上的deploy文件夹直接拖拽到 MobaXterm 左侧的/opt目录下等待上传完成右下角有进度上传完成后在 MobaXterm 右侧终端输入ls/opt/deploy应该能看到signalr、webapi、vue三个文件夹。第三步在服务器上部署复制粘贴即可以下命令逐条复制粘贴到 MobaXterm 终端执行。你是 root 用户不需要加sudo。3.1 创建专用用户和目录# 创建一个专门跑程序的用户安全规范不用root跑应用useradd-r-m-d/opt/app-s/bin/false appuser# 创建正式部署目录mkdir-p/opt/app/signalr /opt/app/webapi /opt/app/vuemkdir-p/var/log/app解释上面命令就是创建了一个叫appuser的虚拟用户以后程序用这个用户身份运行更安全。3.2 把上传的文件移到正式位置# 复制文件cp-r/opt/deploy/signalr/* /opt/app/signalr/cp-r/opt/deploy/webapi/* /opt/app/webapi/cp-r/opt/deploy/vue/* /opt/app/vue/# 给可执行文件添加运行权限关键chmodx /opt/app/signalr/*chmodx /opt/app/webapi/*# 把所有文件归属给 appuserchown-Rappuser:appuser /opt/app /var/log/app3.3 确认可执行文件名执行下面命令看看你的程序叫什么名字ls-F/opt/app/signalr|grep-v/|grep-v\.ls-F/opt/app/webapi|grep-v/|grep-v\.会输出类似MySignalR MyWebApi记住这两个名字下面要用。3.4 检查 Python3用来跑 Vuepython3--version如果显示类似Python 3.9.x说明有 Python3继续下一步。如果提示未找到命令告诉我需要换方案。3.5 创建 3 个自启动服务systemd下面 3 段命令一段一段复制粘贴执行。注意把MySignalR和MyWebApi换成你实际的名字。① SignalR 服务9001 端口cat/etc/systemd/system/signalr.serviceEOF [Unit] DescriptionSignalR Server Afternetwork.target [Service] Typesimple Userappuser Groupappuser WorkingDirectory/opt/app/signalr ExecStart/opt/app/signalr/MySignalR EnvironmentASPNETCORE_ENVIRONMENTProduction EnvironmentASPNETCORE_URLShttp://0.0.0.0:9001 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF⚠️注意把上面ExecStart后面的MySignalR换成你实际的可执行文件名② WebAPI 服务9002 端口cat/etc/systemd/system/webapi.serviceEOF [Unit] DescriptionWebAPI Server Afternetwork.target [Service] Typesimple Userappuser Groupappuser WorkingDirectory/opt/app/webapi ExecStart/opt/app/webapi/MyWebApi EnvironmentASPNETCORE_ENVIRONMENTProduction EnvironmentASPNETCORE_URLShttp://0.0.0.0:9002 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF⚠️注意把上面ExecStart后面的MyWebApi换成你实际的可执行文件名③ Vue 前端服务9003 端口用 Python3 托管cat/etc/systemd/system/vue.serviceEOF [Unit] DescriptionVue Frontend Afternetwork.target [Service] Typesimple Userappuser Groupappuser WorkingDirectory/opt/app/vue ExecStart/usr/bin/python3 -m http.server 9003 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF3.6 启动三个服务# 重新加载系统服务配置systemctl daemon-reload# 启动并设置开机自启systemctl start signalr systemctl start webapi systemctl start vue systemctlenablesignalr systemctlenablewebapi systemctlenablevue3.7 开防火墙让外部能访问# 放行 9001、9002、9003 三个端口firewall-cmd--zonepublic --add-port9001/tcp--permanentfirewall-cmd--zonepublic --add-port9002/tcp--permanentfirewall-cmd--zonepublic --add-port9003/tcp--permanentfirewall-cmd--reload# 查看是否放行成功firewall-cmd --list-ports应该显示9001/tcp 9002/tcp 9003/tcp3.8 处理 SELinux麒麟高级版必须做# 允许程序绑定端口、对外通信setsebool-Phttpd_can_network_connect on第四步验证是否成功在 MobaXterm 里执行# 查看三个服务是否都在运行systemctl status signalr webapi vue看到Active: active (running)就是成功了。再执行# 查看端口是否被监听ss-tlnp|grep-E9001|9002|9003应该显示三个端口都在监听。第五步浏览器访问地址用途http://服务器IP:9001SignalR 服务http://服务器IP:9002WebAPI 接口http://服务器IP:9003Vue 前端页面⚠️ 非常重要CORS 跨域问题因为 Vue 在 9003 端口调用 9001 和 9002浏览器会拦截跨域。你需要在 C# 代码里加允许跨域SignalR 项目的Program.csbuilder.Services.AddCors(options{options.AddPolicy(AllowAll,policy{policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();});});// 在 app.MapHub 之前加app.UseCors(AllowAll);WebAPI 项目的Program.csbuilder.Services.AddCors(options{options.AddPolicy(AllowAll,policy{policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();});});// 在 app.MapControllers 之前加app.UseCors(AllowAll);加完后重新在 Windows 上发布、重新上传到服务器、重启服务systemctl restart signalr webapi 常用维护命令收藏需求命令重启 SignalRsystemctl restart signalr重启 WebAPIsystemctl restart webapi重启 Vuesystemctl restart vue看实时日志journalctl -u signalr -f看 WebAPI 日志journalctl -u webapi -f看所有服务状态systemctl status signalr webapi vue 配置修改后怎么更新到服务上最简单的方式是在 Windows 上改好重新上传覆盖。你不需要学 Linux 编辑器。方式一Windows 修改后重新上传推荐小白最友好步骤 1在 Windows 上找到配置文件去你之前发布出来的文件夹里找publish-signalr/appsettings.json步骤 2用记事本/VS Code 打开修改改完后保存。步骤 3 先在服务器上停止 WebAPIsystemctl stop webapi步骤 4重新上传到服务器用 MobaXterm左侧 SFTP 进入/opt/app/signalr/把 Windows 上改好的appsettings.json拖拽进去覆盖原文件步骤 5重启服务生效systemctl restart signalr