记录一次开发到部署的全过程(ASP.NET Core | Cent 7 | Mysql |Docker)

记录一次开发到部署的全过程(ASP.NET Core | Mysql |Docker)

整个过程从学习到开发再到部署,累计花费时间1个月左右。
主要使用 Docker 做环境部署,部署项目采用ASP.NET Core开发而成的demo API,期间产生问题:

  • 怎么做统一信息返回处理
  • Docker 本地部署vsdbg\vs2017u5无效
  • 怎么做开发环境部署
  • 远程部署Docker报错AttributeError: 'NoneType' object has no attribute 'containers'
  • 远程服务器上Docker 未(无法)启动code=exited,status=1/FAILURE
  • 怎么拉取本地构建的应用镜像
  • 等若干问题

整个项目使用技术或者工具(平台)列表如下:

  • Visual Studio Community And Visual Studio Code
  • Docker Hub And Docker Desktop
  • Mysql 8.0.x (图形化工具 Navicat 15.x)
  • SDK [NET 7.0]
  • PostMan(API 请求测试工具)
  • Ubuntu 22.04 | WSL 2.0(用以支持本地Docker开发和部署)
  • 等若干

项目镜像地址 :AQLIFE/TreeHolesApi
项目Github地址:AQLIFE/TreeHolesApi


One:本地开发

这里开发的是一个简单的树洞(项目),主要想要实践使用过滤器的来对接口返回信息进行统一信息处理和封装。

项目主要结构由:

  • TreeHolesController :控制器
  • TreeInfo :ORM 模型
  • TreeDbContext :数据库连接上下文

首先,这个项目需要一个数据库,所以我使用Docker 创建了一个Mysql 数据库容器,映射端口3307.

appsetting.json 连接字符串配置:

"ConnectionStrings": {
    "MysqlConnection": "server=192.168.0.101;port=3307;database=treeHoles;user id=root;password=148632"
}

创建应用过滤器,具体详情可看另一篇文章或Github,然后在Program.cs 中进行DbContextFilter的使用。

// 启用控制器 的swgger 支持,添加全局过滤器
builder.Services.AddControllers(options =>options.Filters.Add<ApplicationFilters>());

string? arg = builder.Configuration["ConnectionStrings:MysqlConnection"];

// 添加DbContext 支持
if (arg != null)
    builder.Services.AddDbContext<TreeDbContext>(options => options.UseMySQL(arg));

完成以上两步后,开始第一次本地运行。
在这里插入图片描述

使用的运行方案为Project
在这里插入图片描述

这里运行后的地址和端口需要另外设置,详见另一篇文章

运行后成功的状态
到这里之后,初步开发就完成了。之后需要的就是添加Docker支持


Two:本地部署

这里需要停止上文终端的运行,并找到项目解决方案,右键添加Docker支持(使用默认生成的DockerFile 文件足矣),修改其中EXPOSE 80的数字,80对应你上文终端启用的端口号。

然后选择 Docker 方案进行运行
在这里插入图片描述

此处不要使用F5的调试运行,然后可能会出现本文第二个问题,(Docker 本地部署vsdbg\vs2017u5无效)

如果出现这种问题,请首先检查C:\你的用户名\vsdbg文件架是否存在,其内部是否具有文件,没有就安装报错的对应版本,具体详情可以参阅其他用户文章。

第一次Docker 可能会卡住了,这里点击生成菜单的取消,检查Docker 是否启动 和 项目是否正常后重试运行。

如果没有创建对应的项目容器和镜像,就请检查Docker 内是否由重名的镜像和容器,将其删除后,重新运行Docker 方案。

了解是否是项目方案可以打开VS视图菜单下的其他窗口,选择容器窗口,就可以看见项目容器是否创建。不建议使用由VS 默认创建项目容器,可能会出现无法连接数据库问题。

出现该问题后,建议使用Docker Desktop 或者 Power Shell 执行Docker run命令来创建项目容器。
创建成功后,可以在VS 容器窗口中找到项目容器,点击选项卡的文件查看,是否具有同名的项目.dll文件,存在即项目能成功部署到Docker上。但部署成功不等于项目运行成功,还需要查看Docker上的项目日志,是否具有和上文终端同样的输出日志,有则为成功。
在这里插入图片描述

Vs 2022 的容器窗口和 Docker DeskTop 都可以查看容器日志
如果不放心,可以使用PostMan进行测试


Three:远程部署

在上文的基础上,推送容器镜像到个人Docker Hub仓库,优先公开库,私人库,可能存在无法拉取问题(部署机拉取麻烦)

涉及命令:docker push aqlife/treeholesapi 推送项目前,建议先创建Docker hub仓库,保持和镜像同名

部署机是一个Cent 7 的版本,可以安装Docker ,但是村子文章开头的问题4、5,这两个属于同一个问题,简单解决方案:

sudo rm -rf /etc/docker/daemon.json # 删除错误配置文件
systemctl start docker #重启Docker

问题别名 :daemon 配置问题

拉取仓库镜像,构建应用容器所需数据库,然后创建应用容器。
之后在服务器和服务器控制台上打开应用容器和数据库所需端口号。

本文使用来自腾讯云的Cent 应用服务器-宝塔版

在这里插入图片描述
在这里插入图片描述
之后,检查日志输出是否正常,再用Postman 测试接口,即可。


2022-12-2 AQLIFE &Fox Life

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值