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

    文章

    201

    浏览量

    15878
  • 云服务器
    +关注

    关注

    0

    文章

    763

    浏览量

    13485
收藏 人收藏

    相关推荐

    华为云 Flexus X 实例云服务器部署即时通讯 IM 项目

    @TOC   写在前面 手里拿到了一台 华为云 Flexus X 实例 的云服务器,部署部署项目
    的头像 发表于 02-07 10:15 131次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>云服务器<b class='flag-5'>部署</b>即时通讯 IM <b class='flag-5'>项目</b>

    云服务器 Flexus X 实例:one-api 部署,支持众多大模型

    、开发测试环境、游戏服务器、音视频服务等中低负载场景。相较于 Flexus 应用服务器 L 实例Flexus 云服务器 X 实例的优势包含
    的头像 发表于 02-06 17:35 211次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:one-api <b class='flag-5'>部署</b>,支持众多大模型

    华为云 Flexus X 实例:极速搭建个人代码仓库 GitLab 平台

    ​ 目录 前言 1 一、Flexus 云服务器 X 介绍 1 1.1 Flexus 云服务器 X 实例简介 1 1.2
    的头像 发表于 01-23 18:29 156次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:极速搭建个人<b class='flag-5'>代码</b>仓库 GitLab 平台

    Flexusx 实例与 Harbor 私有镜像仓库的完美结合

    。Harbor 作为领先的私有镜像仓库,与 Flexus X 完美结合,助力企业轻松管理 Docker
    的头像 发表于 01-22 18:04 130次阅读
    Flexusx <b class='flag-5'>实例</b>与 Harbor 私有<b class='flag-5'>镜像</b>仓库的完美<b class='flag-5'>结合</b>

    Flexus 云服务器 X 实例部署 Docker 管理仪表板 DweebUI

    出强大的运算和适应能力。当这样强大的云服务器与 DweebUI 这个功能丰富的容器管理 WebUI 相结合时,必然为容器管理带来高效、便捷且创新的解决方案。 一、Flexus 云服务器
    的头像 发表于 01-14 09:27 571次阅读
    <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'>Docker</b> <b class='flag-5'>管理</b>仪表板 DweebUI

    Flexus 云服务器 X 实例安装 Docker 管理工具 Portainer

    。在此强大平台上部署如 Portainer CE 这样的容器管理工具,不仅能够极大地简化 Docker 环境的管理流程,还能进一步提升运维效率与自动化水平,
    的头像 发表于 01-13 18:46 569次阅读
    <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>工具 Portainer

    云服务器 Flexus X 实例Docker 集成搭建 YesPlayMusic 网易云音乐播放器

    配置镜像加速 1、购买华为云 Flexus X 实例 Flexus云服务器X
    的头像 发表于 01-13 18:17 253次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>,<b class='flag-5'>Docker</b> 集成搭建 YesPlayMusic 网易云音乐播放器

    云服务器 Flexus X 实例Docker 集成搭建 Grafana 开源数据可视化平台

    的用户界面,用户可以轻松创建和自定义动态仪表板,以实时展示关键指标和数据趋势 华为云端口放行 • 服务器放行对应端口 9955 Docker 安装并配置镜像加速 1、购买华为云 Flexus
    的头像 发表于 01-13 15:50 168次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>,<b class='flag-5'>Docker</b> 集成搭建 Grafana 开源数据可视化平台

    云服务器 Flexus X 实例:RAG 开源项目 FastGPT 部署,玩转大模型

    倍性能,旗舰体验,覆盖高科技、零售、金融、游戏等行业大多数通用工作负载场景,完全可以支持 FastGPT 的部署、运行和使用,而且,Flexus 云服务器 X 实例 能够提供完备的产品
    的头像 发表于 01-08 11:49 533次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:RAG 开源<b class='flag-5'>项目</b> FastGPT <b class='flag-5'>部署</b>,玩转大模型

    华为云 Flexus 云服务器 X 实例之 openEuler 系统部署 Docker Compose 管理工具 Dockge

    docker-compose.yaml 部署文件时,Dockge 以其精美的设计和易用性脱颖而出,成为不可或缺的管理工具。利用华为云 Flexus 云服务器
    的头像 发表于 01-08 11:41 272次阅读
    华为云 <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b>之 openEuler 系统<b class='flag-5'>部署</b> <b class='flag-5'>Docker</b> Compose <b class='flag-5'>管理</b>工具 Dockge

    云端代码管理新体验,华为云 Flexus X 实例上 GitLab 部署与使用的实战指南云端代码管理新体验

    前言**** 华为云 Flexus X 云服务器携手 GitLab,为开发者和企业带来了云端部署的全新选择。Flexus X
    的头像 发表于 01-07 17:05 263次阅读
    云端<b class='flag-5'>代码</b><b class='flag-5'>管理</b>新体验,华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>上 GitLab <b class='flag-5'>部署</b>与使用的实战指南云端<b class='flag-5'>代码</b><b class='flag-5'>管理</b>新体验

    云服务器 Flexus X 实例部署 Gitea,拥有自己的 Git 仓库,管理本地代码

    、零售、金融、游戏等众多领域的通用工作负载需求。本文旨在详细阐述如何高效利用“云服务器 Flexus X 实例”,包括如何在其中从零开始,通过安装相关依赖、安装 Docker、安装 G
    的头像 发表于 01-07 16:59 168次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:<b class='flag-5'>部署</b> Gitea,拥有自己的 <b class='flag-5'>Git</b> 仓库,<b class='flag-5'>管理</b>本地<b class='flag-5'>代码</b>

    云服务器 Flexus X 实例:轻量级 http 服务器 Tinyhttpd 部署

     来体验 Flexus 云服务器 X 实例 。 一、云服务器 Flexus 首先,进入官网购买 Flexus 云服务器
    的头像 发表于 01-07 16:59 205次阅读
    云服务器 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:轻量级 http 服务器 Tinyhttpd <b class='flag-5'>部署</b>

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

    前言 828 B2B 企业节特惠来袭,Flexus X 实例引领自动化部署新纪元!Docker 携手 Jenkins 与 Gitee,共创
    的头像 发表于 12-26 18:19 253次阅读
    <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>的双手~

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

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