# fk-portainer-stack-utils **Repository Path**: g-devops/fk-portainer-stack-utils ## Basic Information - **Project Name**: fk-portainer-stack-utils - **Description**: Portainer客户端,无需SSH做Agent的远程部署。配合Jenkins实现持续部署功能(CI+CD) - **Primary Language**: Go - **License**: GPL-3.0 - **Default Branch**: sam-custom - **Homepage**: https://github.com/greenled/portainer-stack-utils - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-16 - **Last Updated**: 2023-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # psu - Portainer命令行工具 Portainer Stack Utils,PT命令行客户端(windows/linux),无需SSH做Agent的远程部署。配合Jenkins实现持续部署功能(CI+CD) **图示** ![](./_ex/res/02-autoDeploy.png) **PT管理节点** - 1.支持Group可按环境分组:dev,test,prod - 2.支持Tags标签:宿主节点可设定多个业务主机标签 ![](./_ex/res/c01-节点列表.png) ## 一、快速体验 - 1.Portainer安装: [汉化/定制版](https://gitee.com/g-devops/lang-replacement#%E4%B8%80%E5%BF%AB%E9%80%9F%E4%BD%93%E9%AA%8C) - 2.Agent初始(见README最底部脚本) - 3.PSU配置使用 ```bash # step1: 下载psu(见gitee仓库发行版) # $ ./psu --version Portainer Stack Utils v1.22.0+675d1ad7 linux/amd64 BuildDate: 220213_141203 # step2: `.psu.yaml` (配置于用户目录下) url: http://localhost:9000 user: admin password: xxx # stack: deploy: stack-rpath: /opt/stack-apps #指定部署目录 # step3: stack部署(docker-compose编排容器) # windows psu.exe stack deploy stack12-win -d ./_ex/stack-minio-sample --endpoint=172.16.0.x #执行效果图详请"明细说明" # linux psu stack deploy stack13-nux -d ./_ex/stack-minio-sample --endpoint=172.16.0.x # step4: 上传/执行(psu host upload/exec) # $ ./psu host exec --endpoint=172.25.23.194 -c ./t1.sh --color=false time="2022-02-13T14:05:16+08:00" level=info msg="Exec executing" endpoint=172.25.23.194 shell="./t1.sh" time="2022-02-13T14:05:18+08:00" level=info msg="Exec executed" endpoint=172.25.23.194 execRet.Code=0 time="2022-02-13T14:05:18+08:00" level=info msg=" /opt/svr/portainer-agent/agent-172.25.23.194_8130 total 27M -rwxr-xr-x 1 1000 1000 15M Nov 29 17:08 agent" # $ go run . host up --endpoint=172.25.23.194 -d version/ --rname=123.tar INFO[0000] Uploading endpoint=172.25.23.194 rname=123.tar rpath=/tmp .psuignore not exist, skip INFO[0001] Uploaded endpoint=172.25.23.194 execRet.Code=0 INFO[0001] tar-packed remote file: /tmp/123.tar ``` ![](./_ex/res/01-容器化.png) ## 二、明细说明 **PSU工具** (1)由Go编写,原作者2018.11-2019.11开源于github,现基于原版做修复及功能扩展: `Jenkins/本地环境 > PSU > PT > Agent`, 做物理机/容器多主机的stack部署管理。 (2)应用部署,在PT与Agent之间基于反向HTTP连接不占用节点端口,同时可避免传统基于SSH的部署的安全隐患或限定。 ![](./_ex/res/b1-psu-win-stackDeploy.png) - (Doc)补充.psu.yaml配置用法,新加stack-minio-sample示例 - (Fix)修复stack delete操作(基于PT1.22.0, 兼容PT2.x最新版) - (Feat)Deploy:支持宿主机upload远程上传,exec远程执行 - (Feat)Deploy:psu statck deploy -d 上传本地目录到远程>> dcp up - (Feat)Upload: 更换tar.go解决相对路径问题,生成tarCache在内存,直接发到http远程,不本地落盘 - (Feat)Upload: 支持.psuignore过滤。(go-gitignore) - (Feat)Upload:小内存大文件上传,io.Pipe模式 (直接tarBuf上送远端, 取消gzip压缩) - (Feat)Exec:支持color显示,windows下换行支持。(ansicolor) - (Feat)PT端普通用户,PSU部署容器的管理(节点级别的粗粒度权限) - (TODO)PT端部署日志审计(不写到boltdb) **PT/Agent组件:** - PT管理:(官方版不支持Agent绑定本地socket,推荐:[汉化/定制版 Agent免占用TCP端口](https://gitee.com/g-devops/lang-replacement#%E4%B8%80%E5%BF%AB%E9%80%9F%E4%BD%93%E9%AA%8C)) - Agent端:(宿主机部署,[使用定制版](https://gitee.com/g-devops/fk-agent)) - 宿主机部署> 远程上传文件、远程执行shell脚本的实现 - 远程上传> 大文件接收的支持(已测内网: 1.4G文件 约30s接收完成) **Agent初始** ```bash # 物理机安装 export DEPLOY="/opt/svr/portainer-agent" export URL="http://172.25.21.60:9000" export USER="admin" export PASS="xxx" curl -s https://gitee.com/g-devops/fk-agent/raw/sam-custom/_deploy/binary_ins.sh |bash - # 卸载 curl -s https://gitee.com/g-devops/fk-agent/raw/sam-custom/_deploy/binary_ins.sh |bash -s uninstall ``` ![](./_ex/res/d1-agent-binaryIns.png)