当前位置: 首页 > news >正文

将.net应用部署到Linux服务器

一、环境准备

安装 .NET Runtime(用于部署运行),例如安装 .NET 8 Runtime(不需要开发):

sudo yum install -y dotnet-runtime-8.0

或者安装 SDK(含开发工具):

sudo yum install -y dotnet-sdk-8.0

查看版本验证:

dotnet --info

 输出类似如下内容,则表明安装成功:

Host:
Version:      8.0.17
Architecture: x64
Commit:       77545d6fd5
RID:          rhel.9-x64

 二、部署 .NET 应用程序

1.上传或复制你的发布文件到服务器

如果在Windows 电脑发布,则进入项目所在目录,使用以下命令发布为生产环境:

dotnet publish -c Release -o ./publish

 然后将文件打包成tar文件,上传到服务器指定目录,使用以下命令解压:

tar -xvf myapp.tar

2. 运行 .NET 应用

切换到项目目录并运行:

dotnet myApp.dll

默认监听 http://localhost:5000

查看服务是否在运行:

ps -ef | grep dotnet

查看端口是否在监听:

sudo ss -tuln | grep 5000

 如果输出下面的内容则表明则程序已经在运行了

tcp   LISTEN 0      512          0.0.0.0:5000      0.0.0.0:*  

 上面的命令如果窗口关闭,则程序退出。下面将其设置为持久化运行

三、设置为后台服务(Systemd)

sudo vim /etc/systemd/system/myapp.service

写入如下内容,

[Unit]
Description=my.NET Web API
After=network.target[Service]
# 设置工作目录(替换为你的项目发布目录)
WorkingDirectory=/var/www/projects# 启动命令(包含 dll 路径)
ExecStart=/usr/bin/dotnet myapp.dll# 设置环境变量用于监听公网地址
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000# 设置用户
User=root# 自动重启策略
Restart=always
RestartSec=5
SyslogIdentifier=myapp-api[Install]
WantedBy=multi-user.target

 确认应用工作:

curl http://127.0.0.1:5000

注意事项

  • WorkingDirectory 一定要指向包含 dll 的目录。

  • 如果使用了其他环境变量(如数据库连接、日志路径等),也可以在 [Service] 中继续加 Environment=XXX=YYY

  • 若应用运行失败,可用 journalctl -xejournalctl -u byring 查看详细错误日志。

保存并退出,依次执行下面的命令:

# 重新加载 Systemd 配置
sudo systemctl daemon-reload
#  设置服务开机自启,需替换myapp为自己的应用
sudo systemctl enable myapp
#  启动应用
sudo systemctl start myapp
#  停止应用
sudo systemctl stop myapp
#  重启应用
sudo systemctl restart myapp
# 查看服务状态
sudo systemctl status myapp
# 查看输出日志(实时滚动输出)
journalctl -u myapp -f
# 取消开机启动
sudo systemctl disable myapp

服务启动好了,后面可以配置nginx进行域名访问了。

http://www.lryc.cn/news/583125.html

相关文章:

  • 深入解析 .NET 泛型:从原理到实战优化
  • Docker 搭建 Harbor 私有仓库
  • 使用 Docker 搭建 Go Web 应用开发环境——AI教你学Docker
  • mac m1安装大模型工具vllm
  • Vue的watch和React的useEffect
  • “AI 曼哈顿计划”:科技竞赛还是人类挑战?
  • 电商销量第一,贝锐向日葵智能远控硬件背后的软硬结合战略
  • Mac mini 高性价比扩容 + Crossover 游戏实测 全流程手册
  • Python-FAQ-单例模式
  • 深入理解图像二值化:从静态图像到视频流实时处理
  • 一天两道力扣(3)
  • 计蒜客T3473丑数、Leetcode2401最长优雅子数组、Leetcode167两数之和、Leetcode581最短无序连续子数组
  • 开源链动2+1模式与AI智能名片融合下的S2B2C商城小程序源码:重构大零售时代新生态
  • 【工具】Pycharm隐藏文件类型或目录
  • Hive MetaStore的实现和优化
  • AI+智慧园区 | 事件处置自动化——大模型重构园区治理逻辑
  • 向量空间 线性代数
  • 两张图片对比clip功能
  • 在 PyCharm 中安装并配置 Node.js 的指南
  • 整合Spring、Spring MVC与MyBatis:构建高效Java Web应用
  • Linux的 `test`命令(或等价中括号写法 `[空格expression空格]`)的用法详解. 笔记250709
  • 自制明信片DIY:让心意更有温度
  • python Gui界面小白入门学习
  • OpenCV图像增强秘籍:高通滤波与特效艺术
  • 学习open62541 --- [79] 在docker中运行open62541工程
  • SpringCloud系列 - xxl-job 分布式任务调度 (七)
  • Docker高级管理
  • Wireshark抓包实验之TCP连接
  • 使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
  • 数据管理新范式:基于Docker的私有云存储系统构建指南