0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

jf_21561199 来源:jf_21561199 作者:jf_21561199 2024-12-25 21:15 次阅读

前言

���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的 C#应用提供强大支撑,结合 Git 版本控制与 Docker 容器化部署,实现代码高效管理与无缝迁移。即刻行动,让您的 Web 服务更加稳定、高效,领跑数字化转型之路!

���本实验深入演示了如何在 Ubuntu 环境中,利用 Git 进行版本控制管理代码,并通过 Docker 技术自定义构建镜像,从而实现项目从代码到应用的快速构建、打包与部署流程。这一流程不仅提升了开发效率,还确保了环境的一致性与可重复性。

环境准备

购买服务器配置

本次实验使用的是 Flexus 云服务器 X 实例 服务器。

wKgZPGdsBXmALG2KAACgmvlB9Hk561.png

在性能设置中我选择了自定义模式,使用了 4vCPUs | 12GiB,镜像我选用的是最高版本的 ubuntu

wKgZO2dsBXqAV5RzAAECo10_NbQ658.png

打开 xshell,使用购买的服务器的公网 IP 地址,和设置的密码,连接上我们的服务器。

wKgZPGdsBXqAS1FJAAM3QAKAdTA860.png

项目部署

项目准备(Dockerfile 文件)

我这里以 c#为例,新建一个 .net8.0 的 Web API 项目

wKgZO2dsBXqADCYuAAIcuQ2rRRQ461.png

这个新建的官网的 webApi 项目自带一个接口 weatherforecast 接口,可以获取到最近的天气,因为本篇主要目的是如何使用 git+docker 在服务器上发布,因此不做太多改动。本地启动一下,成功访问到,我们稍后将这个程序部署到服务器上。

wKgZPGdsBXuAIdYJAAFR6UZiexs157.png

因为我们后面采用 Git 方式来发布应用,因此在 gitee 上新建仓库,将代码上传上去。

在项目路径下新建一个 Dockerfile 文件,内容如下(根据自己的解决方案名称、构建环境,如.net 6.0、7.0 等版本,亦或是其他语言,对以下代码就行调整,本部署方式适用于其他编程语言或其他版本的.net)

wKgZO2dsBXuAEWlDAAJsuq55yWA280.png

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseUSER $APP_UIDWORKDIR /appEXPOSE 8080FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildARG BUILD_CONFIGURATION=ReleaseWORKDIR /srcCOPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]RUN dotnet restore "WebApplication1/WebApplication1.csproj"COPY . .WORKDIR "/src/WebApplication1"RUN dotnet build "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/buildFROM build AS publishARG BUILD_CONFIGURATION=ReleaseRUN dotnet publish "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=falseFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "WebApplication1.dll"]

这段 Dockerfile 用于构建一个 ASP.NET Core 应用程序的 Docker 镜像

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base:从 Microsoft Container Registry (MCR) 拉取 ASP.NET Core 8.0 的官方运行时镜像作为基础镜像,并将其标记为 base。这个镜像包含了运行 ASP.NET Core 应用程序所需的一切,但不包含构建工具。

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build:从 Microsoft Container Registry 拉取 ASP.NET Core 8.0 的官方 SDK 镜像,用于构建应用程序。这个镜像包含了构建.NET 应用程序所需的一切工具。

通过这种方式,Dockerfile 利用了 Docker 的多阶段构建特性,确保了构建过程中只包含必要的工具(在构建阶段使用 SDK,在最终镜像中仅包含运行时),从而减小了最终镜像的大小。

Git 部署并拉取代码

安装 Git

打开终端,然后输入以下命令来安装 Git

sudo apt update sudo apt install git

配置 Git 用户信息

在安装 Git 后,建议配置你的用户名和电子邮件地址。这些信息将用于你的 Git 提交,并帮助你识别代码更改的源头。

git config --global user.name "你的名字" git config --global user.email "你的邮箱地址"

SSH 密钥

虽然你可以通过 HTTPS URL 克隆仓库,但使用 SSH 密钥可以更安全地访问你的仓库。

检查是否已存在 SSH 密钥:

ls -al ~/.ssh

如果控制台输入结果像我一样

wKgZPGdsBXyAPn0xAAANOB5hzzY027.png

.ssh文件夹是存在的,没有看到 id_rsa和 id_rsa.pub文件,说明没有包含任何 SSH 密钥。那么你需要生成一个新的 SSH 密钥对。

chmod 700 /root/.ssh//更改 /root/.ssh 目录的权限,700 意味着只有目录的所有者 ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"

命令执行后,它会询问你“Enter file in which to save the key (/root/.ssh/id_rsa):”,这是在询问你希望将生成的私钥保存在哪个文件中。默认情况下,它会建议你保存在/root/.ssh/id_rsa

直接按回车键,它会接受默认的文件名/root/.ssh/id_rsa来保存私钥

接下来,会要求你输入一个密码(passphrase)来保护私钥。这是一个可选步骤,如果你不想设置密码,只需再次按回车键即可跳过此步骤

wKgZO2dsBXyAN6DeAAAsoINA_RU996.png

再次输入 ls -al ~/.ssh,可以看到.ssh 目录下已经生成 id_rsa.pub 等文件了。

wKgZPGdsBXyAZkboAAAP3jQzGOU277.png

输入以下命令,公钥内容将被输出到终端,然后我们复制这些内容。

cat /root/.ssh/id_rsa.pub

这里以 gitee 为例,我们将公钥添加到安全设置的 SSH 公钥中。

wKgZO2dsBX2AFMdGAAHmuQu86wM518.png

添加完成后我们就可以在控制台执行命令将我们的项目代码克隆下来了。

wKgZPGdsBX6AYn2wAAJoi3aqtI0057.png

安装 docker

Docker 在 Ubuntu 上依赖一些软件包,需要先行安装。

sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

添加 Docker GPG 密钥

这是为了验证从 Docker 仓库下载的软件包的完整性。

#官方 GPG key (可能国内访问会存在问题)curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 阿里源(推荐使用)curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加 Docker 官方软件源

接下来,需要将 Docker 的官方软件源添加到你的 Ubuntu 系统中。运行以下命令(根据你的 Ubuntu 版本,$(lsb_release -cs)会自动替换为你的 Ubuntu 代号,如 focal、jammy 等):

#Docker 官方源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null#阿里 apt 源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

再次更新软件包列表

添加完软件源后,再次运行更新命令以确保你的软件包列表是最新的:

sudo apt updatesudo apt-get update

安装 docker

#安装最新版本的 Dockersudo apt install docker-ce docker-ce-cli containerd.io#查看 Docker 版本 docker version#查看所有容器 docker ps -a

项目运行

构建镜像

cd 到我们使用 git 拉下来的项目,如下,包含 Dockerfile 的目录下

wKgZO2dsBX6ATTPaAAAPaIZEphI565.png

执行命令构建一个新的 Docker 镜像

docker build -t auth .

构建成功后执行 docker images 查看镜像,如下我名称为 auth 的镜像已经构建完成。

wKgZPGdsBX6AIzpGAAANNagVrQs705.png

运行容器

docker run -d -p 8080:8080 --restart=always --name auth auth

-d: 这个标志表示以“分离模式”运行容器,也就是说,容器会在后台运行。你不会直接看到容器的输出,除非你使用 docker logs命令或其他方法来查看。

-p 8080:8080: 这个参数用于端口映射。它将容器内的 8080 端口映射到宿主机的 8080 端口上。这样,任何发送到宿主机 8080 端口的请求都会被转发到容器的 8080 端口上。

--restart=always: 这个参数指定了容器的重启策略。always表示无论何时容器停止运行(无论是因为退出还是 Docker 守护进程重启),Docker 都会自动重启这个容器。

运行完成后可以执行 docker ps 查看容器:

wKgZO2dsBX-ARPo1AACRobB_KuU123.png

新增安全组

打开服务器控制台,找到我们当前的服务器,点击名称。

wKgZPGdsBX-AbSToAAHMnbGYb_4498.png

进去到详情后,切换到安全组页面,点击配置规则。

wKgZO2dsBYCAPlj6AAEzJVrUasI323.png

在入方向规则下,点击添加规则,然后加入我们项目的端口号。

wKgZPGdsBYCAFKzWAAG-TKZFYGU160.png

访问接口

查看我们的服务器的 ip 地址

wKgZO2dsBYGAdc2VAAHD8JfT-uU715.png

打开浏览器,访问我们项目的接口,成功获取到信息。

wKgZPGdsBYGATetPAAKdLwXbsgo691.png

更新发布

接下来我们将接口调整一下,改为返回一个 hello word!

wKgZO2dsBYGABoaVAADW5i59T8g153.png

提交代码

wKgZPGdsBYKAO4VvAAGr7AfT9PU446.png

回到服务器控制台,执行 git pull 拉取最新代码

wKgZO2dsBYKAB5qqAAAkSiFpryY089.png

使用更新后的代码重新构建 Docker 镜像。运行与之前相同的 docker build 命令

docker build -t auth .

停止并删除旧的容器。

docker stop auth docker rm auth

使用更新后的镜像启动一个新容器。

docker run -d -p 8080:8080 --restart=always --name auth auth

刷新一下我们的浏览器,页面中返回的信息是 hello word!

wKgZPGdsBYKATVlQAAA7gtA9Wvs248.png


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Git
    Git
    +关注

    关注

    0

    文章

    199

    浏览量

    15756
  • 云服务器
    +关注

    关注

    0

    文章

    592

    浏览量

    13362
收藏 人收藏

    评论

    相关推荐

    Flexus X 实例 Docker+Jenkins+gitee 实现 CICD 自动化部署 - 解放的双手~

    前言 828 B2B 企业节特惠来袭,Flexus X 实例引领自动化部署新纪元!Docker 携手 Jenkins 与 Gitee,共创
    的头像 发表于 12-26 18:19 128次阅读
    <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>Docker</b>+Jenkins+gitee 实现 CICD 自动化<b class='flag-5'>部署</b> - 解放<b class='flag-5'>你</b>的双手~

    使用 Flexus X 实例搭建 Dubbo-Admin 服务

    ,更是针对柔性算力需求量身打造,能够智能适应业务负载变化,完美契合电商直播、企业官网建设、开发测试环境、游戏部署、音视频处理等多种中低负载应用场景。与 Flexus 应用服务器 L 实例相比,
    的头像 发表于 12-26 18:17 108次阅读
    使用 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>搭建 Dubbo-Admin 服务

    手把手教你如何用华为云 Flexus X 实例部署之前爆火的“人生重启“游戏

    明星。 Flexus 云服务器 X 实例是专为中小企业和开发者设计的下一代柔性算力云服务器。它能聪明地感知业务负载,非常适合电商直播、企业网站、开发测试环境、游戏服务器以及音视频服务等中低负载场景。相比于
    的头像 发表于 12-26 09:38 92次阅读
    手把手教你如何用华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b><b class='flag-5'>部署</b>之前爆火的“人生重启“游戏

    华为云 Flexus X 实例 docker 部署 mediacms,功能齐全的现代化开源视频和媒体 CMS

    华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务的需
    的头像 发表于 12-25 17:51 123次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> mediacms,功能齐全的现代化开源视频和媒体 CMS

    技术升级:探索华为云 EulerOS 与 Flexus X 实例如何完美融合快速部署 Django

    ,我们将目光聚焦于华为云 EulerOS 操作系统与 Flexus X 实例的深度融合,探讨如何在这一强大组合下实现 Django 服务的快速部署
    的头像 发表于 12-25 17:50 123次阅读
    技术升级:探索华为云 EulerOS 与 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>如何完美融合<b class='flag-5'>快速</b><b class='flag-5'>部署</b> Django

    华为云 Flexus X 实例 MySQL 性能加速评测及对比

    场景需求 3 二、Flexus 云服务器 X 购买 3 2.1 Flexus X 实例购买 4 2.2 购买 MySQL 加速
    的头像 发表于 12-25 17:10 113次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> MySQL 性能加速评测及对比

    华为云 Flexus X 实例 docker 部署 Jitsi 构建属于自己的音视频会议系统

    华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务的需
    的头像 发表于 12-25 17:08 73次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> Jitsi 构建属于自己的音视频会议系统

    Flexus X 实例搭配华为云 EulerOS,快速部署 MySQL 并执行读写性能测试

    前言 本篇博文将继续对华为云 Flexus 云服务器 X 实例进行 MySQL 相关的实例测评 查看镜像信息 本地连接服务器之后输入指令 l
    的头像 发表于 12-24 12:27 99次阅读
    <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>搭配华为云 EulerOS,<b class='flag-5'>快速</b><b class='flag-5'>部署</b> MySQL 并执行读写性能测试

    基于 Flexus 云服务器 X 实例体验大模型部署体验测评

    也很快。但是大家目前都是在体验,能不能部署一下试试呢? 今天,我们就以华为云 Flexus 云服务器 X 实例部署一下,顺便测测其性能看看
    的头像 发表于 12-24 12:27 88次阅读
    基于 <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b>体验大模型<b class='flag-5'>部署</b>体验测评

    云服务器 Flexus X 实例 MySQL 应用加速测试

    企业节,Flexus X 实例的优惠活动正火热进行,对于有算力性能需求及自建 MySQL、Redis、Nginx 等性能要求的用户
    的头像 发表于 12-24 12:19 102次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> MySQL 应用加速测试

    数字化转型加速器,Flexus X 实例提升企业核心竞争力

    随着市场环境的快速变化,企业对 IT 基础设施的可定制性和可扩展性颇为关注。然而,传统的云服务模型往往难以满足这些需求,它们往往提供的是预定义的资源配置,缺乏必要的灵活性。在此背景下,华为云结合市场
    的头像 发表于 07-03 15:43 682次阅读
    数字化转型加速器,<b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>提升企业核心竞争力

    微软Dev Home应用提供自定义文件管理支持

    据悉,Microsoft 近期发布了 0.13 版 Dev Home 应用程序,除修复多项 BUG 外,还新增了自定义文件资源管理器功能。该应用支持用户在应用内创建虚拟机,利用微软旗下的 Hyper V 技术生成本地虚拟机。
    的头像 发表于 04-26 11:15 465次阅读

    HarmonyOS开发实例:【自定义Emitter】

    使用[Emitter]实现事件的订阅和发布,使用[自定义弹窗]设置广告信息。
    的头像 发表于 04-14 11:37 1002次阅读
    HarmonyOS开发<b class='flag-5'>实例</b>:【<b class='flag-5'>自定义</b>Emitter】

    鸿蒙ArkUI实例:【自定义组件】

    组件是 OpenHarmony 页面最小显示单元,一个页面可由多个组件组合而成,也可只由一个组件组合而成,这些组件可以是ArkUI开发框架自带系统组件,比如 `Text` 、 `Button` 等,也可以是自定义组件,本节笔者简单介绍一下自定义组件的语法规范。
    的头像 发表于 04-08 10:17 642次阅读

    蓝牙 | 软件:Git管理高通的ChipCode项目

    处理卡住了,我们只能从git下手。Git有优秀的项目管理代码管理的能力,所以学一学
    的头像 发表于 01-26 08:29 400次阅读
    蓝牙 | 软件:<b class='flag-5'>Git</b><b class='flag-5'>管理</b>高通的ChipCode<b class='flag-5'>项目</b>