BlogArticles/2024-03/补档 Uni运维小记.md

133 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
{
title: "补档 Uni运维小记",
description: "作者在Docker中配置ChronoCat QQ框架时遇到困难包括版本兼容、VNC显示问题及冻号风险。部分API测试成功基于Satori协议调用方便。后续计划提供JSON格式的API供其他容器使用示例包含来源、目标和信息内容。环境问题尚未解决。",
draft: false,
type: "article",
created_at: "2024-03-29T10:30:00+08:00",
published_at: "2024-03-29T11:18:00+08:00",
updated_at: [ "2024-03-29T11:18:00+08:00"],
category: 'Uni',
tags: [ "运维" ],
tech_stack: [ "Docker", "Nginx", "MariaDB", "Azure Devops" ],
tech_stack_percent: [ 40,30,20,50 ],
tech_stack_icon_names: [ "mdi:docker","simple-icons:nginx", "simple-icons:mariadb", "simple-icons:azuredevops" ],
tech_stack_theme_colors: [ "#1c90ed","#109748","#c0765a","#2b99e2" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
#运维
运维的主要任务有部署代码配置和维护服务器上的nginx,Docker和mariaDB服务。~~还有背锅~~
运维技术路线:
##Docker
学习[Docker](https://docker-practice.github.io/zh-cn/)会是你的第一课。几乎全部的后端代码都运行在Docker中Docker提供了服务管理自动化部署和端口映射功能你需要学习的有关知识有
Image、Container的概念及相关操作
从Image构建Container端口映射相关配置
导出Container Log, 进入运行的Container进行检查
从 DOCKERFILE 文件构建Container
从 DockerCompose 构建Container
##nginx
nginx维护的关键是看懂学长留下的配置文件。然后在其基础上堆上自己的文件同时保持nginx不崩
目前笔者nginx技术有限。不过多赘述
##mariaDB
mariaDB和Mysql语法略有区别。但大部分都是一致的。作为运维你需要为后端代码建立所需的数据库。建立数据库配置用户并不困难。去bing或者谷歌花点时间就能做好。
但是关键是,把带有帐号,密码,地址的字符串传递给后端代码。我将在后续提到。
##Azure
你有很大概率在Azure中看到这份指导文件但你大概率还不会使用Azure进行代码管理和部署配置。
这里不会讲Commit PR 或是 Branch相关的概念。如果你不了解你需要去学习Git相关知识。在很大程度上Azure和Github类似只是这里不会从搜索引擎中搜到。接下来我会假设你了解相关概念。
这里主要讲Azure Pipelines的配置
在左侧你能找到Pipelines。你可以右键在新窗口中打开。这样就可以不退出本指导。
你可以看到很多Pipeline在其中。排在前面的可能是IWutApi,或是其他什么东西。它们在进行**自动化部署**的工作。每个Pipeline都在持续监测某个仓库的的某个分支如果发生改变它会把代码传到制定的服务器构建运行。这样后端开发者就能在第一时间对最新的代码进行测试并且把最新的代码上线供用户使用。
这一近乎神奇的操作的关键是仓库中的一个yml文件它通常被命名为 ***-pipeline.yml
关于yml文件的配置我的建议是
```yml
trigger:
- main
resources:
- repo: self
variables:
projectName: iwut-api-prod
stages:
- stage: Deploy
displayName: 部署到服务器
jobs:
- deployment: VMDeploy
displayName: 部署到Uni服务器
environment:
name: JP-tencent
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
- checkout: self
fetchDepth: 1
displayName: 切换到目标仓库分支
- bash: |-
docker compose -p $(projectName) -f docker-compose.yml up --build -d
env:
DeployPort: 5003
ConnectionStrings__App: $(ConnectionStrings__App)
displayName: 运行 docker compose 命令
```
这是目前正在运行的一份pipeline文件。我们来简单分析一下如果要改在其他工程上需要改什么。
trigger规定正在监测的分支名字是什么
projectName项目名字改成对应的
stages里第一个可能要改的是environment,你要部署到哪个服务器。在Pipeline-Environments中可以看到现在可用的服务器。这个大概率会有人告诉你。但以防万一这里简单叙述目前的情况。
如果你要部署的是一个需要Debug,后端还在开发的代码放在uni-tencent上并且只部署dev分支。
如果你要上线一个供用户使用的新功能那么JP-tencent是更好的选择只部署main或master分支
下一个要改的是steps中的bash 这是一行从Docker-Compose启动docker container指令关于Docker Container创建和端口转发在Docker-Compose文件中。
然后是env, DeployPort和ConnectionStrings__App
env是环境变量这里创建了两条环境变量部署端口和连接字符串。
这里容我粘贴DockerCompose.yml(也能在仓库找到)文件,插入的讲解一下
```yml
version: '3.8'
services:
iwut-api: #目标Contaienr 名字
image: iwut-api:prod #镜像名字
build:
context: .
dockerfile: IWutApi/Dockerfile #DockerFile文件位置需要修改
args:
BuildConfig: Release #发行环境
environment:
TZ: Asia/Shanghai
ASPNETCORE_ENVIRONMENT: Production #发行环境
ConnectionStrings__App: ${ConnectionStrings__App:?} #数据库连接串
ports:
- ${DeployPort}:80 #端口
extra_hosts:
- "host.docker.internal:host-gateway"
```
这个文件中发行环境可能会改成Debug或Development,这个看后端需求。
你可以看到 数据库连接串和端口使用了${something} 的形式,这里就是在读取环境变量。
回到之前的Pipeline文件端口没什么说的了现在聊聊ConnectionStrings_App
该环境变量 在构建Pipeline过程中加入如图。![Screenshot_2024-03-25-15-29-23-111_com.realvnc.viewer.android.jpg][1]
右侧添加名字和值,由于该字符串包括密码,所以需要**勾上Keep this value secret**
问题出现了,你 ~~,一个刚准备接锅的运维,~~ 怎么知道这个值怎么填因为过往的Pipeline这里都是****
两个办法:
如果是新的项目,直接问后端,直接问他怎么填,要个示例。
如果是老项目
还记得之前Docker要求你学习怎么进入容器内部吗
``` Bash
docker exec -it (DockerID) bash
echo $ConnectionStrings__App
```
当然还有第三个办法,反正代码就在这,不如发挥主观能动性,学习后端。
祝你好运
[1]: https://typecho.lichx.top/usr/uploads/2024/03/1075500197.jpg