https://www.kimi.com/share/1a05541b-b1f2-8f4d-8000-00006a957e17
User: 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_URL=http://你的服务器IP:9002 VUE_APP_SIGNALR_URL=http://你的服务器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 会话,按 Ctrl+Shift+F 打开 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/# 给可执行文件添加运行权限(关键!)chmod+x /opt/app/signalr/*chmod+x /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(用来跑 Vue)
python3--version如果显示类似Python 3.9.x,说明有 Python3,继续下一步。
如果提示未找到命令,告诉我,需要换方案。
3.5 创建 3 个自启动服务(systemd)
下面 3 段命令,一段一段复制粘贴执行。注意把MySignalR和MyWebApi换成你实际的名字。
① SignalR 服务(9001 端口)
cat>/etc/systemd/system/signalr.service<<'EOF' [Unit] Description=SignalR Server After=network.target [Service] Type=simple User=appuser Group=appuser WorkingDirectory=/opt/app/signalr ExecStart=/opt/app/signalr/MySignalR Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:9001 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF⚠️注意:把上面
ExecStart=后面的MySignalR换成你实际的可执行文件名!
② WebAPI 服务(9002 端口)
cat>/etc/systemd/system/webapi.service<<'EOF' [Unit] Description=WebAPI Server After=network.target [Service] Type=simple User=appuser Group=appuser WorkingDirectory=/opt/app/webapi ExecStart=/opt/app/webapi/MyWebApi Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:9002 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF⚠️注意:把上面
ExecStart=后面的MyWebApi换成你实际的可执行文件名!
③ Vue 前端服务(9003 端口,用 Python3 托管)
cat>/etc/systemd/system/vue.service<<'EOF' [Unit] Description=Vue Frontend After=network.target [Service] Type=simple User=appuser Group=appuser WorkingDirectory=/opt/app/vue ExecStart=/usr/bin/python3 -m http.server 9003 Restart=always RestartSec=5 [Install] WantedBy=multi-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--zone=public --add-port=9001/tcp--permanentfirewall-cmd--zone=public --add-port=9002/tcp--permanentfirewall-cmd--zone=public --add-port=9003/tcp--permanentfirewall-cmd--reload# 查看是否放行成功firewall-cmd --list-ports应该显示:9001/tcp 9002/tcp 9003/tcp
3.8 处理 SELinux(麒麟高级版必须做)
# 允许程序绑定端口、对外通信setsebool-Phttpd_can_network_connect on第四步:验证是否成功
在 MobaXterm 里执行:
# 查看三个服务是否都在运行systemctl status signalr webapi vue看到Active: active (running)就是成功了。
再执行:
# 查看端口是否被监听ss-tlnp|grep-E'9001|9002|9003'应该显示三个端口都在监听。
第五步:浏览器访问
| 地址 | 用途 |
|---|---|
http://服务器IP:9001 | SignalR 服务 |
http://服务器IP:9002 | WebAPI 接口 |
http://服务器IP:9003 | Vue 前端页面 |
⚠️ 非常重要:CORS 跨域问题
因为 Vue 在 9003 端口,调用 9001 和 9002,浏览器会拦截(跨域)。你需要在 C# 代码里加允许跨域:
SignalR 项目的Program.cs:
builder.Services.AddCors(options=>{options.AddPolicy("AllowAll",policy=>{policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();});});// 在 app.MapHub 之前加app.UseCors("AllowAll");WebAPI 项目的Program.cs:
builder.Services.AddCors(options=>{options.AddPolicy("AllowAll",policy=>{policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();});});// 在 app.MapControllers 之前加app.UseCors("AllowAll");加完后,重新在 Windows 上发布、重新上传到服务器、重启服务:
systemctl restart signalr webapi🔧 常用维护命令(收藏)
| 需求 | 命令 |
|---|---|
| 重启 SignalR | systemctl restart signalr |
| 重启 WebAPI | systemctl restart webapi |
| 重启 Vue | systemctl 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: 先在服务器上停止 WebAPI
systemctl stop webapi
步骤 4:重新上传到服务器
用 MobaXterm:
- 左侧 SFTP 进入
/opt/app/signalr/ - 把 Windows 上改好的
appsettings.json拖拽进去,覆盖原文件
步骤 5:重启服务生效
systemctl restart signalr