C#进阶-在Ubuntu上部署ASP.NET Core Web API应用

随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架,非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用,包括部署准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。


一、部署准备

在开始之前,请确保你具备以下条件:

  • 一台运行 Linux(如 Ubuntu 20.04)的服务器,具有 SSH 访问权限。
  • ASP.NET Core Web API 项目,并确保在本地能够正常运行。

二、安装 MySQL(如需)

1. 安装MySQL服务器

sudo apt install mysql-server -y

2. 启动并设置MySQL开机自启

sudo systemctl start mysql
sudo systemctl enable mysql

3. 验证MySQL安装

登录MySQL以确认安装成功。

sudo mysql -u root -p

MySQL默认密码是root,直接登录即可。

4. 修改初始密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

5. 创建库和表

这里我们用SQL语句把项目需要的数据库建好即可。


三、安装 .NET 运行环境

首先,需要在你的 Linux 服务器上安装 .NET 运行环境(如果选择框架依赖部署)或 .NET SDK(如果需要编译代码)。

1. 添加 Microsoft 包存储库

# 安装所需的依赖
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common

在这里插入图片描述

# 下载并安装微软的公钥
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb# 更新包索引
sudo apt-get update

在这里插入图片描述

2. 安装 .NET 运行环境

# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0

在这里插入图片描述

注意:根据你的应用所使用的 .NET 版本,调整安装的运行时版本。

3. 验证安装

dotnet --version

你应该会看到已安装的 .NET 版本号,如 8.0.x

在这里插入图片描述


四、发布 ASP.NET Core 应用

1. Visual Studio 发布应用

在本地开发环境中,使用 visual studio 发布应用。

在这里插入图片描述

选择框架依赖部署(FDD)或自包含部署(SCD):

  • 框架依赖部署(FDD):目标服务器需要预先安装 .NET 运行环境。
  • 自包含部署(SCD):应用程序包含了所有必要的运行时文件,无需在服务器上安装 .NET。

在这里插入图片描述

保存发布配置,点击发布。

在这里插入图片描述

发布成功。

在这里插入图片描述

发布后的项目在目标位置里:D:\DCO\dco_ll\bin\Release\net8.0

在这里插入图片描述

2. 复制发布后的内容到服务器目录

将文件夹内所有内容复制到服务器上的预发布项目目录上。

在这里插入图片描述

其中,应用涉及的配置信息一般在 appsettings.json 里。


五、启动项目

切换到项目目录,指定端口启动项目。

cd xxxx #你的项目在服务器上的部署路径
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80" 

在这里插入图片描述

到这里,程序已经用公网IP访问了。


六、配置 Nginx 作为反向代理(可选)

Nginx 将作为反向代理,将来自客户端的请求转发到 ASP.NET Core 应用,处理 SSL、负载均衡等任务。

如果你的项目端口监听的不是默认80端口(比如5000端口),那么可以通过 Nginx 监听80端口进行转发,访问80端口的请求会自动转发到5000端口上。

1. 安装 Nginx

sudo apt-get update
sudo apt-get install -y nginx

2. 配置 Nginx

创建一个新的 Nginx 配置文件,或修改默认配置。

sudo nano /etc/nginx/sites-available/default

在这里插入图片描述

修改为以下内容:

server {listen 80 default_server;listen [::]:80 default_server; root /var/www/html;index index.html index.htm index.nginx-debian.html;server_name dco021.atomgit.net; # 替换为你的域名或服务器IPlocation / {proxy_pass http://localhost:5000;  # 替换为你的应用监听的端口proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

3. 启用配置并重启 Nginx

# 创建符号链接以启用配置
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/# 测试 Nginx 配置是否正确
sudo nginx -t# 重启 Nginx
sudo systemctl restart nginx

七、设置系统服务(可选)

使用 systemd 将你的 ASP.NET Core 应用配置为服务,确保应用在服务器启动时自动运行,并在崩溃后自动重启。

1. 创建 systemd 服务文件

sudo nano /etc/systemd/system/dcowebhook.service

添加以下内容:

[Unit]
Description=DCOWebhook ASP.NET Core Web API
After=network.target[Service]
WorkingDirectory=/var/www/dco
ExecStart=/usr/bin/dotnet /var/www/dco/DCOWebhook.dll --urls "http://0.0.0.0:5000" #换成需要监听的端口
Restart=always
# 用户和组
User=www-data
Group=www-data
# 环境变量
Environment=ASPNETCORE_ENVIRONMENT=Production[Install]
WantedBy=multi-user.target

在这里插入图片描述

注意

  • WorkingDirectory:你的应用所在的目录。
  • ExecStart:启动应用的命令。根据你的发布方式(FDD 或 SCD)调整路径和参数。
  • UserGroup:推荐使用非 root 用户(如 www-data)运行服务,提升安全性。

2. 重新加载 systemd 并启动服务

sudo systemctl daemon-reload
sudo systemctl start dcowebhook.service #如果是修改配置需要刷新则写restart
sudo systemctl enable dcowebhook.service

3. 检查服务状态

sudo systemctl status dcowebhook.service

你应该会看到服务正在运行,并监听指定的端口。

在这里插入图片描述


八、配置防火墙

确保服务器的防火墙允许 HTTP(80)和 HTTPS(443)端口的流量。

使用 UFW 配置防火墙。

sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

注意Nginx Full 配置包括 HTTP 和 HTTPS 端口。

在这里插入图片描述


九、查看日志

如果项目依然无法访问,可以查看日志分析问题所在。

1. 查看 Nginx 错误日志

sudo tail -f /var/log/nginx/error.log

2. 查看 ASP.NET Core 应用日志

sudo tail -f /var/log/dcowebhook/log-*.txt

十、常见问题

1. 解决端口占用

偶尔会遇到端口被占用的问题,我们要先查看是哪个进程在占用这个端口。

sudo lsof -i 5000 #换成你需要查的端口

再来杀死这个进程。

sudo kill -9 76681 #换成上一步查到的进程的pid

在这里插入图片描述
这样这个端口就释放出来了。


十一、总结

通过本文的步骤,你已经成功在 Linux 服务器上部署了 ASP.NET Core Web API 应用。你不仅配置了应用的发布和运行,还设置了 Nginx 作为反向代理,确保了应用的高可用性和安全性。此外,配置日志记录帮助你更好地监控和维护应用。根据实际需求,你还可以进一步优化配置,如启用 HTTPS、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网页自动化】篡改猴入门教程

安装篡改猴 打开浏览器扩展商店(Edge、Chrome、Firefox 等)。搜索 Tampermonkey 并安装。 如图安装后,浏览器右上角会显示一个带有猴子图标的按钮。 创建用户脚本 已进入篡改猴管理面板点击创建 脚本注释说明 name:脚本名称。…

数据结构之双链表(C语言)

​ 数据结构之双链表(C语言) 1 链表的分类2 双向链表的结构3 双向链表的节点创建与初始化3.1 节点创建函数3.2 初始化函数 4 双向链表插入节点与删除节点的前序分析5 双向链表尾插法与头插法5.1 尾插函数5.2 头插函数 6 双向链表的尾删法与头删法6.1尾删…

【0x007A】HCI_Write_Secure_Connections_Host_Support命令详解

目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Secure_Connections_Host_Support命令格式 2.2. Secure_Connections_Host_Support 三、生成事件及参数 3.1. HCI_Command_Complete事件格式 3.2. Status 四、命令执行流程梳理 4.1. 命令发送阶段 4.2. 命令接收…

第一节 环境搭建

Visual Studio Visual Studio 2019 密码:gd24 组件 安装即可

《Spring Framework实战》4:Spring Framework 文档

欢迎观看《Spring Framework实战》视频教程 概述 历史, 设计理念, 反馈, 开始。 核心技术 IoC 容器、事件、资源、i18n、 验证、数据绑定、类型转换、SpEL、AOP、AOT。 测试 Mock 对象、TestContext 框架、 Spring MVC 测试,…

【adb】5分钟入门adb操作安卓设备

ADB(Android Debug Bridge) 是一个多功能的命令行工具,用于与 Android 设备进行交互、调试和管理。它提供了对设备的直接控制,能够帮助开发者进行调试、安装应用、传输文件等。 目录 将设备和电脑连接 adb shell 文件的基本操…

Tauri教程-基础篇-第二节 Tauri的核心概念上篇

“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…

Ubuntu 下载安装 elasticsearch7.17.9

参考 https://blog.csdn.net/qq_26039331/article/details/115024218 https://blog.csdn.net/mengo1234/article/details/104989382 过程 来到 Es 的版本发布列表页面:https://www.elastic.co/downloads/past-releases#elasticsearch 根据自己的系统以及要安装的…

深度学习与计算机视觉 (博士)

文章目录 零、计算机视觉概述一、深度学习相关概念1.学习率η2.batchsize和epoch3.端到端(End-to-End)、序列到序列(Seq-to-Seq)4.消融实验5.学习方式6.监督学习的方式(1)有监督学习(2)强监督学习(3)弱监督学习(4)半监督学习(5)自监督学习(6)无监督学习(7)总结:不同…

深入Android架构(从线程到AIDL)_18 SurfaceView的UI多线程02

目录 2、 使用SurfaceView画2D图 范例一 设计GameLoop(把小线程移出来) 范例二 2、 使用SurfaceView画2D图 范例一 以SurfaceView绘出Bitmap图像设计SpriteView类别来实作SurfaceHolder.Callback接口首先来看个简单的程序,显示出一个Bitmap图像。这个图像就构…

数据库相关面试重点知识

一、Mysql索引 1.索引的本质 索引是帮助 Mysql 高效获取数据的排好序的数据结构。 索引的数据结构: 二叉树红黑树Hash表B-Tree(BTree) Question:为什么加入索引之后效率就会变高呢? 以上图为例,如果…

ansible-api分析(VariableManager变量)

一. 简述: ansible是一个非常强大的工具,可以支持多种类型(字符,数字,列表,字典等)的变量。除了有大量的内置变量及fact变量,也可以通过多种方式进行变量自定义 。不同方式定义的变量,优先级也不太一样,之…

【Uniapp-Vue3】image媒体组件属性

如果我们想要在页面上展示图片就需要使用到image标签。 这部分最重要的是图片的裁剪,图片的裁剪和缩放属性: mode 图片裁剪、缩放的模式 默认值是scaleToFill 我将用两张图片对属性进行演示,一张是pic1.jpg(宽更长&#xf…

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定,或者多只相机固定位置拍图,硬拷贝拼图,采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照,相机视野互相重叠,基于Patmax特征定位后,无缝 拼图&#xff…

“多维像素”多模态雷视融合技术构建自动驾驶超级感知能力|上海昱感微电子创始人蒋宏GADS演讲预告

2025年1月14日,第四届全球自动驾驶峰会将在北京中关村国家自主创新示范区展示交易中心-会议中心举行。经过三年的发展,全球自动驾驶峰会已经成长为国内自动驾驶领域最具影响力、规模最大的产业峰会之一。在主会场下午的城市NOA专题论坛上,上海…

C语言初阶习题【25】strcpy的模拟实现

1. 首先先调用下库函数,看它实现了什么 2. 我们自己实现一个strcpy函数 3. 改进1 把*destnation和source 写上去,使用后置 4. 改进2 这里直接把赋值操作放到了while的判断条件里面,然后while循环语句什么都不做,放了一个空语句…

使用 SQL 和表格数据进行问答和 RAG(6)—将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库

将指定目录下的 CSV 或 Excel 文件导入 SQLite 数据库。以下是详细代码逻辑: 1. 类结构 该类包含三个主要方法: _prepare_db:负责将文件夹中的 CSV 和 XLSX 文件转换为 SQL 表。_validate_db:用于验证 SQL 数据库中创建的表是否…

设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析

策略模式(Strategy Pattern)核心思想是将算法的实现从使用该算法的类中分离出来,作为独立的对象,通过接口来定义算法家族,这样就可以很容易地改变或扩展算法。通过这种方式,可以避免在客户端代码中使用大量…

如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈

如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈 问题背景 由于我司最早期19年使用的是gitee,因此大部分仓库都在gitee有几百个库的代码,…

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…