使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry
使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry
概述
本文介绍了如何使用 GitHub Actions 构建 CosyVoice 项目的运行环境 Docker 镜像,并将其推送到阿里云容器镜像服务(ACR)和 GitHub Package Registry。通过挂载本地代码和模型的方式,运行时环境被独立打包为 Docker 镜像,便于分发和部署。这种方式使得项目的依赖和运行环境可控,并且可以在不同环境下保持一致性。
准备工作
1. 配置环境变量
在 GitHub 仓库的设置页面中,添加以下必要的环境变量:
ALIYUN_ACR_USERNAME: 登录阿里云容器镜像服务的用户名。ALIYUN_ACR_PASSWORD: 登录阿里云容器镜像服务的密码。ALIYUN_ACR_REGISTRY: 阿里云容器镜像服务的注册表 URL。GHCR_USERNAME: GitHub Packages 的用户名。GHCR_TOKEN: GitHub Packages 的个人访问令牌。IMAGE_NAME: Docker 镜像名称。
这些信息可以通过 GitHub 仓库的 Settings -> Secrets and variables -> Secrets 页面添加。
2. 创建 Dockerfile
在 CosyVoice 项目中,使用 runtime/python/Dockerfile 文件,该文件定义了构建运行环境 Docker 镜像的指令。确保 Dockerfile 根据项目需求进行了正确配置,特别是镜像中的 Python 环境和依赖。
设置 GitHub Actions
1. 创建通用工作流模板文件
创建一个通用的 GitHub Actions 工作流模板,通过参数化配置使得同一份工作流文件适用于不同项目。对于 CosyVoice 项目,可以根据需求调整工作流中的参数和路径。
2. 编写工作流脚本
name: Build and Push CosyVoice Runtime Environment Docker Image
on:
push:
branches:
- main # 触发推送的主要分支
workflow_dispatch: # 允许手动触发工作流
jobs:
build:
runs-on: ubuntu-latest
env:
DOCKERFILE_PATH: ${{ github.event.inputs.dockerfile_path || 'runtime/python' }} # 默认路径
IMAGE_TAG: ${{ github.sha }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to GitHub Package Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Aliyun ACR
run: echo "${{ secrets.ALIYUN_ACR_PASSWORD }}" | docker login --username=${{ secrets.ALIYUN_ACR_USERNAME }} --password-stdin ${{ secrets.ALIYUN_ACR_REGISTRY }}
- name: Build and push
uses: docker/build-push-action@v3
with:
context: ${{ env.DOCKERFILE_PATH }}
file: ${{ env.DOCKERFILE_PATH }}/Dockerfile
push: true
tags: |
${{ secrets.ALIYUN_ACR_REGISTRY }}/${{ github.repository }}:${{ env.IMAGE_TAG }}
ghcr.io/${{ github.repository }}:${{ env.IMAGE_TAG }}
该工作流文件包含以下关键特性:
- 参数化配置:通过输入参数指定 Dockerfile 的路径,默认为
runtime/python,从而使得该工作流能够适应不同项目的结构。 - 手动触发选项:除了基于推送事件触发外,还提供了
workflow_dispatch选项,使得用户可以手动触发工作流,便于进行测试或按需构建。
配置 Podman 命令
为了将本地代码和模型挂载到容器中并运行,可以使用以下 Podman 命令:
podman run -d \
--name cosyvoice \
--device=nvidia.com/gpu=all \
-v ${LOCAL_PROJECT_PATH}:/opt/CosyVoice \
-p 9233:9233 \
${DOCKER_IMAGE}:${IMAGE_TAG} \
/bin/bash -c "cd /opt/CosyVoice && python3 api.py"
其中:
${LOCAL_PROJECT_PATH}是本地项目的路径,可以设置为环境变量。${DOCKER_IMAGE}是推送到注册表的镜像名称。${IMAGE_TAG}是镜像标签,通常为构建哈希值${{ github.sha }}。
请确保系统已安装 NVIDIA Container Toolkit,并正确配置本地环境,以支持 Podman 与 NVIDIA GPU 的交互。
未解决的问题
目前,在使用 podman compose 运行容器时,无法通过该方式使用宿主机的 GPU。这是一个已知问题,正在寻找解决方案。
使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry的更多相关文章
- 经GitHub将kubernetes镜像推送到阿里云
背景 在安装kubernetes时会出现无法访问镜像站的情况,通过GitHub将kubernetes镜像推送到阿里云之后,即可使用阿里云地址引用所需镜像,现已同步镜像5000+,当前还在陆续同步.仓库 ...
- 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库
两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...
- vuepress-theme-reco + Github Actions 构建静态博客,部署到第三方服务器
最新博客链接 Github链接 查看此文档前应先了解,vuepress基本操作 参考官方文档进行配置: vuepress-theme-reco VuePress SamKirkland / FTP-D ...
- 如何将本地项目推送到码云仓库或者GitHub仓库
将本地项目推送到码云仓库. 前提: git 和码云 1.在码云上先创建一个仓库. 2.在要被上传的项目的目录右键, 选择 Git Bash Here. 3.在窗口输入命令: git init 这时 ...
- Django项目: 项目环境搭建 ---- 三、在码云平台创建项目&推送到码云上
三.在码云平台创建项目 git服务平台: 主要使用github(最主流) 国内访问速度慢 托管私有项目收费 国内一般使用码云gitee 国内访问速度快 托管私有项目免费(限制开发人数) 公司中使用gi ...
- 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序
小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...
- Git实现1个项目2个地址1次推送
Git实现1个项目2个地址1次推送 考虑到不需要pull操作,因此本方法适用于个人项目分别在两个平台或地址进行部署 给origin 增加一个可以push的地址 git remote set-url - ...
- Linux下Jenkins与GitHub自动构建Node项目(Vue)
根据上篇文章<Linux下Jenkins与GitHub自动构建NetCore与部署>,我们知道了Jenkins的强大功能,自动构建,部署了一个NetCore的Web,让开发人员专注于开发, ...
- Jenkins构建项目后发送钉钉消息推送
前言 钉钉是我们日常工作的沟通工具,在Jenkins构建持续集成项目配合钉钉机器人的功能,可以让我们在持续集成测试环节快速接收到测试结果的消息推送. 一:新建一个钉钉群,选择自定义机器人 二:添加机器 ...
- (一)构建基于ubuntu docker MySQL 5.6 镜像并推送到Docker Hub
一,创建目录二,文件准备三,构建四,使用五,在宿主机上连接docker 中的mysql六,推送镜像到Docker hub 一,创建目录 mkdir -p mysql/5.6 二,文件准备 注意执行脚本 ...
随机推荐
- Q:Oracle表空间使用权限错误:ORA-01950
使用A用户账号(默认表空间tablespace_A),A用户表中插入数据报错ORA-01950 报错处理方法: 方法1:授予用户A unlimited tablespace权限 grant unlim ...
- 如何配置支付宝密钥之如何配置普通 RSA2 密钥|保姆级教学(一)
进行支付宝开发的第一步就是:配置密钥. 但是有很多小伙伴都不知道怎么配置,这篇文章将手把手帮你从头开始捋清如何配置支付宝密钥- 这次首先放一下官方文档:[如何生成及配置 RSA2 密钥],大佬们也可以 ...
- 在私有化部署的 Gitlab 实例中开启内置的容器镜像仓库
版本 极狐 GitLab v16.1.2-jh 步骤 如果使用 Let's Encrpt 集成,容器镜像仓库功能自动开启,访问地址为 your-gitlab-domain:5050. 否则,默认不开启 ...
- Springboot 3.x 集成Knife4j [踩坑日记]
之前项目用的是SpringBoot2.x 新项目用了SpringBoot3.x版本,引入Knife4j 报错java.lang.TypeNotPresentException: Type javax. ...
- keil优化等级说明 keil code optimization
其中 0级(Constan folding)的优化包括: a.常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算. b. 简单访问优化:对8051系统的内部数据和位地 ...
- Vue3 性能优化十大技巧:打造高性能应用的终极指南
在现代前端开发中,性能优化是提升用户体验和系统效率的关键.Vue3 作为目前最流行的前端框架之一,提供了许多内置的性能优化工具和方法.本文将深入探讨 Vue3 中的十大性能优化技巧,帮助你从零开始构建 ...
- Python 脚本编写指南:从框架到实践
一.引言 Python 作为一种强大且易于学习的编程语言,在各个领域都有着广泛的应用.编写 Python 脚本是实现各种功能和任务的常见方式. 二.Python 脚本框架的基本组成部分 导入必要的模块 ...
- 植物大战僵尸杂交版,最新安装包(PC+手机+苹果)+ 修改器+高清工具
植物大战僵尸杂交版:全新游戏体验与创意碰撞 游戏简介 <植物大战僵尸杂交版>是由B站知名UP主潜艇伟伟迷基于经典游戏<植物大战僵尸>进行的一次大胆且富有创意的二次创作.这款游戏 ...
- ubuntu更换国内镜像源备忘
源的路径: /etc/apt/sources.list 更换前备份一下: sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 打开文档,修 ...
- Git pull(拉取),push(上传)命令整理(详细)
转自:https://www.cnblogs.com/wbl001/p/11495110.html (文档较长,请大家耐心阅读,很有帮助) git比较本地仓库和远程仓库的差异 更新本地的远程分支 gi ...