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; # 替换为你的域名或服务器IP

    location / {
        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、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从光子到图像——相机如何捕获世界?

引言 你是否想过为何我们按一下相机快门就可以将眼前广袤多彩的世界显示于一个小小的相机屏幕上?本期推文中将带着大家重现从光子转换为电子、电子转换为图像中数字驱动值的整个流程。 ▲人们通过相机捕获眼前的场景 从光子到电子的转换 光线首先通过光学镜头进入相…

C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件

今天在本文中,我们将尝试使用NPOI库将图像插入到 Excel 文件的特定位置。请将以下逻辑添加到您的写作方法中,在 Excel 文件中添加图像(JPEG、PNG),我已经有一个示例 jpeg 文件 - Read-write-excel-npoi.jpg ,我们将尝试…

OpenCV实现基于拉普拉斯算子的浮雕特效

图像浮雕效果的实现原理主要基于图像处理技术,特别是利用图像中像素之间的灰度差异来模拟立体感。以下是对该原理的详细解释: 一、浮雕效果的基本概念 浮雕是把所要呈现的图像突起于材质表面,根据凹凸的程度不同从而形成三维的立体感。在计…

前端用json-server来Mock后端返回的数据处理

<html><body><div class"login-container"><h2>登录</h2><div class"login-form"><div class"form-group"><input type"text" id"username" placeholder"请输入用户名&q…

【xLua】xLua-master签名、加密Lua文件

GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作&#xff0c;又发现项目工程并没导入Tools&#xff0c;可以从xLua-master工程拷贝到项目工程Assets…

Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类&#xff1a; 继承了 MonoBehaviour 用于定义游戏对象的行为&#xff0c;每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…

AIDD-人工智能药物设计-AlphaFold系列:全面回顾AF1-3的关键研究成果及其对科学界的影响

AlphaFold系列&#xff1a;全面回顾AF1-3的关键研究成果及其对科学界的影响 本文章将围绕 AlphaFold 系列模型在蛋白质结构预测领域的前沿研究展开&#xff0c;重点介绍 AlphaFold1、AlphaFold2 与 AlphaFold3 的关键研究成果&#xff0c;以及它们对科学界和制药工业的深远影响…

Pandas-RFM会员价值度模型

文章目录 一. 会员价值度模型介绍二. RFM计算与显示1. 背景2. 技术点3. 数据4. 代码① 导入模块② 读取数据③ 数据预处理Ⅰ. 数据清洗, 即: 删除缺失值, 去掉异常值.Ⅱ. 查看清洗后的数据Ⅲ. 把前四年的数据, 拼接到一起 ④ 计算RFM的原始值⑤ 确定RFM划分区间⑥ RFM计算过程⑦…

Git 入门指南:如何高效管理你的代码库

文章目录 Git 的介绍安装 Git创建仓库Git 三板斧addcommitpush 冲突问题常用 Git 指令 Git 的介绍 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化并支持团队协作开发。最初由 Linus Torvalds&#xff08;Linux 操作系统的创始人&#xff09;开发&#xff0c;Gi…

execl条件比较两个sheet每个单元格的值

1.把对比的sheet复制到对比文件中 2.选择首个单元格 3.新建规则 4.选择公式 5.编写公式 A3<>Sheet1!A36.选择差异颜色 7.选择应用范围 $1:$655368.选择应用范围

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝&#xff0c;又进来偷我源码啦&#x1f44a;&#x1f44a;&#x1f44a;。欢迎偷源码 &#x1f525;&#x1f525;&#x1f525; 获取免费源码以及更多源码&#xff0c;可以私信联系我 我们常常…

本地LLM部署--Open WebUI(多媒体工具FFMPEG作用)

OpenWebUI 和 FFmpeg 的关系主要体现在 多媒体处理需求 上。OpenWebUI 是一个基于 Web 的接口项目&#xff0c;提供与各种 AI 模型交互的功能&#xff0c;而 FFmpeg 则是一种多媒体处理工具&#xff0c;用于处理音视频数据。二者的关系主要体现为 依赖和功能互补&#xff0c;具…

使用双向链表优化数组操作的性能

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 背景 双向链表的优势 实现方案 性能优化 …

Inno Setup制作安装包,安装给win加环境变量

加 ; 加环境变量&#xff0c;开启&#xff0c;下面一行 ChangesEnvironmentyes 和 ; 加环境变量wbrj变量名&#xff0c;{app}\project\bin变量值&#xff0c;{app}\后接文件名&#xff0c;{app}表示安装路径。下面一行,{olddata};原来的值上拼接 Root: HKLM; Subkey: “SYSTEM\…

积分与签到设计

积分 在交互系统中&#xff0c;可以通过看视频、发评论、点赞、签到等操作获取积分&#xff0c;获取的积分又可以参与排行榜、兑换优惠券等&#xff0c;提高用户使用系统的积极性&#xff0c;实现引流。这些功能在很多项目中都很常见&#xff0c;关于功能的实现我的思路如下。 …

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

AI赋能服装零售:商品计划智能化,化危机为转机

在服装零售这片竞争激烈的战场上&#xff0c;每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时&#xff0c;许多品牌往往将危机归咎于外部环境。然而&#xff0c;真相往往更为深刻——“危机不是外部的&#xff0c;而是你的商品计…

Flutter:吸顶效果

在分页中&#xff0c;实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…

企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布

概述 workerman/rabbitmq 是一个异步RabbitMQ客户端&#xff0c;使用AMQP协议。 RabbitMQ是一个基于AMQP&#xff08;高级消息队列协议&#xff09;实现的开源消息组件&#xff0c;它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…

信号弱开启手机Wifi通话,MIUI显示/隐藏5G开关的方法

1.开启手机Wi-Fi通话&#xff0c;提升无信号或弱信号时的通话质量 Wi-Fi 通话(Wi-Fi calling)&#xff0c;又称VoWiFi&#xff0c;是一项名为“ Voice over Wi-Fi ”的服务&#xff0c;它允许手机用户使用他们的智能手机使用 Wi-Fi网络拨打电话&#xff0c;即在Wi-Fi环境下就能…