websoft9/docs/notes/Process.md
qiaofeng1227 d6f65c8d67 porcess
2023-09-07 16:23:12 +08:00

4.4 KiB
Raw Blame History

Process

所有的微操作一定归属于如下三个类别:

  • CI持续集成即源码准确性
  • CD持续部署即让软件 running 起来
  • CP持续发布即通过域名让用户可以访问

另外还有与系统维护相关的:

  • Settings
  • Upgrade
  • Fix
  • CLI

CI

CI 遵循几个法则:

  • 为 CD 准备一个完全可用的编排物料
  • Git 驱动,保证编排物料与应用运行环境分离,编排物料可修改可复原
  • 编排物料中的资源(包/镜像)具备良好的网络可达性

integation/

CD

CD 遵循几个法则:

  • 可以管理应用的完全生命周期
  • 应用可以指定部署到local之外的服务器或集群环境portainer 中对应的术语为 endpoint 或 environment
  • 部署编排物料(CI 的产出物)可以是 docker-compose也可以是 helm
  • 也可以支持源码编译成镜像后自动部署参考waypoint

deploy/apps/create/standalone/repository

基于 repository 创建应用100% 使用 Portainer API /stacks/create/standalone/repository

deploy/apps/{id}/git

设置 portainer 与 repository 之间的连接关系100% 使用 Portainer API /stacks/{id}/git

deploy/apps

List all apps继承 Portainer API /stacks

额外需要增加如下几类数据:

  1. 将 app 主容器的 "Env" 合并到 Portainer API 返回的 env[] 中

    portaier 中的 repository 安装方式中,.env 并不会被 portainer 保存到接口中

  2. portainer 中的应用目录的 variables.json 或 repository variables.json

deploy/apps{id}

与 Portainer API /stacks{id} 雷同,支持 get, put, delete

deploy/apps/{id}/git/redeploy

100% 使用 Portainer API /stacks/{id}/git/redeploy

deploy/apps/{id}/start

100% 使用 Portainer API /stacks/{id}/start

deploy/apps/{id}/stop

100% 使用 Portainer API /stacks/{id}/stop

deploy/apps/{id}/restart

Portainer 未提供对应的 API可以创建此操作也可以直接在前端通过 stop & start 组合实现。

deploy/apps/{id}/migrate

将 Docker 应用迁移到另外一台服务器上。此需求暂不实现

100% 使用 Portainer API /stacks/{id}/migrate

CP

publish/nginx/proxy

function proxy(hostdomains[], Optional:port, Optional:exra_proxy.conf)

init()

也可以使用 getPort(), getExra_proxy()

  1. 获取 Port: 从 portainer.containers 接口中 Label 属性集中获取 http 或 https

    com.docker.compose.http.port": "9001" | com.docker.compose.https.port": "9002"

  2. 获取 exra_proxy.conf: 从 Gitea 接口中获取 repository 的 src/nginx_proxy.conf

update()

修改 proxy 中的 domain

add()

查询 Nginx 中是否有此应用的 Proxy

  • Y将新的域名插入到 Proxy 中(忽略 nginx_proxy.conf
  • N新增 Proxy

delete()

删除所有相关的 proxys

list()

查询所有相关的 proxys

enable() enable所有相关的 proxys

disable()

disable 所有相关的 proxys

App

Install

app_name 是软件名称例如wordpressapp_id 是用户安装的应用名称

  1. App_Manage API 接受输入并接受语法检查app_name, app_id, domains[], default_domain, version{}

  2. App_Manage 后端准备源码Copy app_name from Library -> Modify .env (*port/url/app_name/POWER_PASSWORD/version)

  3. APP_Manage 后端调用 Gitea API创建仓库

    1-3 CI过程

  4. APP_Manage 后端调用 Portainer API基于 Gitea Repository 创建应用 staus: [active,inactive]

    4 CD过程

  5. APP_Manage 后端调用 Nginx API为应用创建 Proxy(port,domains{},customer_proxy)

    5 CP过程

步骤 3-5 是有状态操作(产生对后续操作有影响的记录),故需考虑事务完整性。

Lists

Manage

Uninstall

  • App_Manage API 接受输入并接受语法检查app_id
  • APP_Manage 后端调用 Gitea API删除 Repository
  • APP_Manage 后端调用 Nginx API删除 Proxy
  • APP_Manage 后端调用 Portainer API删除应用

卸载必须是一个事务操作,确保完成所有步骤,以上先后顺序非常关键

Stop

APP_Manage 后端调用 Portainer API 的 stop

Start

APP_Manage 后端调用 Portainer API 的 start

Restart

APP_Manage 后端调用 Portainer API 的 [stop + start]

Modify

Gitea API 列出当前 APP 的 repository 之 URL提供访问链接

Redeploy

  • APP_Manage 后端调用 Portainer API 的 redeploy

Settings

Upgrade

CLI