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 测试,…

PyTorch reshape函数介绍

torch.reshape 是 PyTorch 用于改变张量形状的函数之一。它不会改变张量的数据,而是重新组织其元素以适应新的形状。 reshape 的使用 torch.reshape(input, shape) → Tensorinput:输入张量。shape:新形状,使用整数或 -1 指定各维…

Java QueryWrapper groupBy自定义字段,以及List<Map>转List<Entity>

Java queryWrapper groupby自定义字段 String sql "data_id,(select value from lz_html a where a.data_id lz_html.data_id and class_nametest-item-status) status," "(select value from lz_html a where a.data_id lz_html.data_id and class_nametes…

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

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

LeetCode100之组合总和(39)--Java

1.问题描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复…

Cosmos的gRPC与Go

Cosmos与Go语言 gRPC gRPC的基本概念(维基百科): gRPC (gRPC Remote Procedure Calls) 是一个跨平台的开源高性能远程过程调用(RPC)框架。gRPC最初由Google创建,它使用一个通用的RPC基础设施Stubby来连接…

maven的中国镜像有哪些

根据您的请求&#xff0c;以下是一些可用的 Maven 中国镜像&#xff1a; 阿里云 官网&#xff1a;阿里云 Maven 镜像配置&#xff1a;<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>…

Apache zookeeper集群搭建

文章目录 引言I 集群搭建保证服务器基础环境一致JDK安装与配置环境变量安装与修改zk配置文件同步zk安装包与配置文件zk集群启停查看进程、状态、日志II 扩展:shell脚本一键启停引言 springCloud 脚手架项目功能模块:Java分布式锁 https://blog.csdn.net/z929118967/article/d…

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

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

Ubuntu 下载安装 elasticsearch7.17.9

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

深入理解神经网络中的损失函数:BCELoss 与 MSELoss

深入理解神经网络中的损失函数&#xff1a;BCELoss 与 MSELoss 在神经网络开发中&#xff0c;损失函数是关键组件之一&#xff0c;决定了模型优化的方向和效果。本文将详细探讨两种常用损失函数&#xff1a;二元交叉熵&#xff08;BCELoss&#xff09; 和 均方误差&#xff08…

前端数据模拟器 mockjs 和 fakerjs

功能&#xff1a;帮助前端生成随机数据&#xff0c;独立于后端单独开发 一、mockjs 安装&#xff1a;npm install mockjs 优点&#xff1a;官网是中文。 缺点&#xff1a;目前该库已经无人维护&#xff0c;也没人解决github上的bug。 官网 github地址 二、fakerjs 安装&#xf…

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

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

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

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

数据库相关面试重点知识

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

ansible-api分析(VariableManager变量)

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