Linux部署.Net Core Web项目
本文主要记录我在Linux(Ubuntu)上部署.net core 的操作记录,也便于以后部署。
如对您有所帮助,不胜荣幸~
文章目录
- 前言
- 一、准备工作
- 1. 版本信息
- 2. windows端web项目
- 二、操作步骤
- 1. Linux 配置 .net 运行环境
- 1.1 查看最新 .net 运行环境的下载路径
- 1.2 安装 dotnet SDK
- 1.2.1 下载安装包
- 1.2.2 解压安装包
- 1.2.3 设置环境变量
- 1.3 验证
- 2. windows 端 web 项目发布选项设置
- 3. 将web发布文件从windows上传到LInux
- 4. Linux 运行 web 项目
- 5. 设置 web 项目 开机自启
- 5.1 安装supervisor
- 5.2 在supervisor中为.net web 项目添加配置信息
- 5.2.1 创建.net web项目的日志输出文件夹
- 5.2.2 进入/etc/supervisor/conf.d
- 5.2.3 新建config文件
- 5.2.4 添加开机自启等配置项
- 5.2.5 重启supervisor
- 5.2.6 查看supervisor服务是否正常运行
- 5.3.5 为supervisor开启可视化web站点管理界面(可选操作)
- 总结
前言
本文主要介绍如何将windows上开发的 dotnet core web 应用程序部署到 Linux服务器上(Ubuntu 22.04)。
本人所使用的软件版本如下:
- 操作系统版本:Ubuntu 22.04
- web 项目版本:.net 6.0
本人在windows端部署的网站如下。端口:5001。本文目标就是将其部署到Ubuntu上去。

一、准备工作
1. 版本信息
- 操作系统版本:Ubuntu 22.04
- web 项目版本:.net 6.0
2. windows端web项目
二、操作步骤
1. Linux 配置 .net 运行环境
众所周知,所有 .net 项目的运行都需要 .net 运行环境。
.net 运行环境分两种:sdk 和 runtime(运行时) 。
- sdk:sdk包含runtime,同时可以为.net 开发人员提供.net 项目的运行编译打包环境。
- runtime:runtime 是sdk的一个子集,仅仅可以使得.net程序在操作系统上运行。
如果无需在Linux上做.net开发,可以只安装runtime,我这里主要演示sdk的安装。
微软官方参考文档:
在 Ubuntu 上安装 .NET SDK 或 .NET 运行时
使用安装脚本或通过提取二进制文件在 Linux 上安装 .NET
1.1 查看最新 .net 运行环境的下载路径
前往 .net 官方下载地址 ,页面内容打开如下图所示:

我们选择上图中的.NET 6.0,进入下图页面,选择合适自己操作系统架构的 SDK 地址。

ubuntu 查看系统架构的命令如下:
dpkg --print-architecture

我的是amd64,选择x64。

点击【copy】按钮复制得到下载地址:
https://download.visualstudio.microsoft.com/download/pr/868b2f38-62ca-4fd8-93ea-e640cf4d2c5b/1e615b6044c0cf99806b8f6e19c97e03/dotnet-sdk-6.0.407-linux-x64.tar.gz
1.2 安装 dotnet SDK
1.2.1 下载安装包
我们使用wget命令下载复制得到的runtime安装包
wget https://download.visualstudio.microsoft.com/download/pr/868b2f38-62ca-4fd8-93ea-e640cf4d2c5b/1e615b6044c0cf99806b8f6e19c97e03/dotnet-sdk-6.0.407-linux-x64.tar.gz

1.2.2 解压安装包
在当前主目录下创建.dotnet 文件夹
mkdir -p .dotnet

创建成功:
文件夹选项,设置显示隐藏文件后可以见到.dotnet文件夹:

将安装包内的文件解压到.dotnet 文件夹中
tar -zxvf dotnet-sdk-6.0.407-linux-x64.tar.gz -C .dotnet

解压成功。

1.2.3 设置环境变量
要使环境变量对所有用户有效,需要修改profile文件:
sudo vim /etc/profile

键入[i],插入以下语句:
export DOTNET_ROOT=$(pwd)/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

再键入[Esc],退出编辑模式。
键入[:wq]保存并退出Vim。
注销或者重启就可以生效。
1.3 验证
重启后,通过dotnet --info 命令查看dotnet信息。

设置完成。
SDK 安装成功。
2. windows 端 web 项目发布选项设置
Visual Studio 中 web 项目的发布选项需要将 TargetRuntime 改成 Linux版本,选择适合自己的Linux架构版本,前文中已经讲过如何查看自己Linux的架构了。本人的amd64,选择x64。

Deployment Mode(部署方式) :
- Self-contained (独立应用) 自带dotnet运行时,可以部署至一台空白环境服务器,无需提前安装配置dotnet运行时。缺点是:部署包较大。
- Framework-dependent(框架依赖型) 生成跨平台的部署包,用户需要在Linux上安装相应版本的运行时。
我之前已经安装好.net 6.0 SDK,包含了运行时,所以这里我选择Framework-dependent。
3. 将web发布文件从windows上传到LInux
设置成功后,选择发布,将web应用程序发布到文件夹。
发布成功后,使用ftp将web发布文件从windows上传到Linux上。
PS:本人在Linux上的web发布项目为:/home/qyh/workspace/WebPublishFolder/WowCrtAdvrts

上传成功:

上图中程序入口就是:Jcjy.Web(你的web项目名称)
4. Linux 运行 web 项目
控制台进入.net web项目路径:
cd ~/workspace/WebPublishFolder/WowCrtAdvrts

运行web项目:
dotnet Jcjy.Web.dll
浏览器输入ip+端口号,如下图所示。部署成功。

到目前为止Linux上部署.Net Core Web已经讲完了。接下来我主要讲下如何利用Nginx做反向代理。
5. 设置 web 项目 开机自启
supervisor是python开发的通用进程管理程序,可以将普通的命令行进程变成后台守护进程,监控进程状态,当进程异常退出时可自动重启。
5.1 安装supervisor
sudo apt-get install supervisor

如图所示,安装完成。
5.2 在supervisor中为.net web 项目添加配置信息
5.2.1 创建.net web项目的日志输出文件夹
我们先把web项目的日志输出文件夹创建好,这里我准备将日志放到这个目录下:/var/log/web/dotnet/
sudo mkdir -p /var/log/web/dotnet
5.2.2 进入/etc/supervisor/conf.d
supervisor安装好之后,在/etc/下会有一个supervisor文件夹,conf.d就是存放supervisor的配置文件的文件夹。
cd /etc/supervisor/conf.d

5.2.3 新建config文件
我们为.net web 项目创建配置文件:
sudo touch WowCrtAdvrts.conf
这里的【WowCrtAdvrts】是你的web 项目名称,

5.2.4 添加开机自启等配置项
编辑 WowCrtAdvrts.conf 文件
sudo vi WowCrtAdvrts.conf
i

输入一下配置项:
[program:WowCrtAdvrts]
command=dotnet Jcjy.Web.dll
directory=/home/qyh/workspace/WebPublishFolder/WowCrtAdvrts
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT
autostart=true
autorestart=true
startsecs=1
stderr_logfile=/var/log/web/dotnet/WowCrtAdvrts.err.log
stdout_logfile=/var/log/web/dotnet/WowCrtAdvrts.out.log
directory就是我们的.net core web项目所在目录;
stderr_logfile是错误日志所在路径,stdout_logfile是输出日志所在路径,我统一放在了/var/log/web/dotnet/下面;

然后输入ESC->:wq保存退出即可。

修改完成。
5.2.5 重启supervisor
sudo service supervisor stop
sudo service supervisor start

5.2.6 查看supervisor服务是否正常运行
sudo supervisorctl
5.3.5 为supervisor开启可视化web站点管理界面(可选操作)
supervisor自带了可视化管理界面,需要我们做一下配置就能开启。
在/etc/supervisor 目录下,打开supervisor.conf 文件
cd /etc/supervisor
sudo vi supervisor.conf
i

添加如下配置项
[inet_http_server]
port=127.0.0.1:8001
username=admin
password=123456

保存修改并退出
ESC
:wq
重启supervisor
sudo service supervisor stop
sudo service supervisor start
总结
以上就是今天要讲的内容,总的来说还是很简单的,但是我在具体操作时参考网上教程还是踩了一些坑。本文如对您有所帮助,不胜荣幸~
相关文章:
Linux部署.Net Core Web项目
本文主要记录我在Linux(Ubuntu)上部署.net core 的操作记录,也便于以后部署。 如对您有所帮助,不胜荣幸~ 文章目录前言一、准备工作1. 版本信息2. windows端web项目二、操作步骤1. Linux 配置 .net 运行环境1.1 查看最新 .net 运行环境的下载路径1.2 安装…...
【C++】STL之stack、queue的使用和模拟实现+优先级队列(附仿函数)+容器适配器详解
之前的一段时间,我们共同学习了STL中一些容器,如string、vector和list等等。本章我们将步入新阶段的学习——容器适配器。本章将详解stack、queue的使用和模拟实现优先级队列(附仿函数)容器适配器等。 目录 (一&…...
第⑦讲:Ceph集群RGW对象存储核心概念及部署使用
文章目录1.RadosGW对象存储核心概念1.1.什么是RadosGW对象存储1.2.RGW对象存储架构1.3.RGW对象存储的特点1.4.对象存储中Bucket的特性1.4.不同接口类型的对象存储访问对比2.在集群中部署RadosGW对象存储组件2.1.部署RGW组件2.2.集群中部署完RGW组件后观察集群的信息状态2.3.修改…...
从异步到promise
一,背景 1.1,js的单线程 这一切,要从js诞生之初说起,因为js是单线程的语言。 js单线程原因:作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程&…...
Linux系统中进行JDK环境的部署
一、为什么需要部署JDK。 JDK:Java Development Kit,是用于Java语言开发的环境。 部署JDK不需要懂得Java语言,只需要掌握Linux相关命令即可。 二、部署版本与环境。 系统:安装在VMware环境下的CentOS7.6; JDK版本&a…...
Leetcode.1033 移动石子直到连续
题目链接 Leetcode.1033 移动石子直到连续 Rating : 1421 题目描述 三枚石子放置在数轴上,位置分别为 a,b,c。 每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入…...
【Java】在SpringBoot中使用事务注解(@Transactional)时需要注意的点
在SpringBoot中使用事务注解(Transactional)时需要注意的点Transactional是什么使用事务注解(Transactional)时需要注意的点Transactional是什么 Transactional是Spring框架提供的一个注解,用于声明事务边界和配置事务…...
找到序列最高位的1和最高位的0并输出位置
前言: 该题为睿思芯科笔试题,笔试时长20分钟。 题目描述 接口如下: module first_1_and_0#(parameter WIDTH 8 )(input [WIDTH-1:0] data_in ,input target ,output exist ,outpu…...
面试总结sdiugiho
一、进程与线程的区别 进程: 一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程; windows 任务管理器中 一个 exe 就是一个进程。 线程: 进程中的一个执行任务(控制…...
WIN10無法再使用 IE 瀏覽器打开网页解决办法
修改 Registry(只適用 Win10) 微軟已於 2023 年 2 月 14 日永久停用 Internet Explorer,會透過 Edge 的更新讓使用者開啟 IE 時自動導向 Edge,其餘如工作列上的圖示,使用的方法則是透過「品質更新」的 B 更新來達成&am…...
搭建SpringBoot和Mysql Demo
1. 引言 在上一篇文章中,介绍了如何搭建一个SpringBoot项目;本篇文章,在上一篇文章的基础上,接着介绍下怎样实现SpringBoot和MySQL的整合。在后端开发中,数据库开发是绕不开的话题,开发中很多的时间都是在…...
晶振03——晶振烧坏的原因
晶振03——晶振烧坏的原因 首先要清楚的一件事情是:晶振分为无源晶振与有源晶振两大类。基于这两类晶振的内部结构与工作原理的差异,晶振被烧坏的情况也要分为两大类: 针对无源晶振被烧坏的情况有以下两点: 1、手焊操作不当 假…...
项目管理的难点
一、项目团队建设 建设一支高效的项目团队,明确团队队员的职责是项目经理进行项目管理的首要条件,也是项目目标能否实现的关键。 1.1 学会放权 任何人都不能掌握所有的知识和技能,要敢于相信别人,让别人去做。 放权就要选择最…...
day22 ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
问题: ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点 首先,二叉搜索树是一种常见的数据结构,它具有以下特点: 每个节点最多有两个子节点,分别为左子节点和右子节…...
ChatGPT 这个风口,普通人怎么抓住?
最近在测试ChatGPT不同领域的变现玩法,有一些已经初见成效,接下来会慢慢分享出来。 今天先给大家分享一个,看完就能直接上手的暴力引流玩法。 所需工具: 1)ChatGPT(最好是plus版,需要保证快速…...
Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)
本篇将总结实际项目开发中Python代码规范检查、自动编排的一些工具,特点,使用方法,以及如何在Pycharm中集成这些工具,如autoflake、yapf、black、isort、autopep8代码规范和自动编排工具。上一篇总结的pylint、pyproject-flake8、…...
acme.sh从 letsencrypt 生成SSL免费证书并自动更新证书
acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书 ACME 协议: Automatic Certificate Management Environment 自动化证书管理环境 文档: github: https://github.com/acmesh-official/acme.shgitee: https://gitee.com/neilpang/acme.sh中文文档: https://git…...
基于html+css的evenly布局
准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...
【从零开始学习 UVM】10.5、UVM TLM —— UVM TLM Blocking Get Port
文章目录 UVM TLM Get Port Example1. 创建一个发送方类,其端口类型为 uvm_blocking_get_imp3. 创建接收器类,等待 get 方法。4. 在更高层次上连接端口及其实现Get端口阻塞行为任何组件都可以通过 TLM get 端口请求从另一个组件接收事务。发送组件应定义获取端口的实现。该实…...
English Learning - L2 第 10 次小组纠音 辅音 [m] [n] [ŋ] 半元音 [w] [j] 2023.3.29 周三
English Learning - L2 第 10 次小组纠音 辅音 [m] [n] [ŋ] [w] [j] 2023.3.29 周三共性问题more Autumn [ɔː] 舌位偏前gone evening 前后鼻音不分Hes proud of this name 双元音缺乏滑动感bank thing 中的后鼻音发成前鼻音week what yolk 元音 [iː] [ɒ] 舌位偏前 [əʊ] …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
