如何通过GitHub YML在Azure Web App中持久化安装apt-get包(ffmpeg)
解决Azure Web App部署后ffmpeg丢失的问题
首先得明确:你在GitHub Workflow里执行apt-get install ffmpeg根本没用,因为这个步骤是在GitHub的构建服务器上跑的,不是Azure Web App的运行环境,装的包自然不会出现在Azure的机器上。
下面给几个靠谱的解决方法:
方法1:用启动脚本在应用启动时自动安装ffmpeg
Azure Web App每次启动时会执行你指定的启动命令,我们可以写个脚本先检查ffmpeg是否存在,不存在就安装,再启动应用。
- 在项目根目录创建
start.sh脚本:
#!/bin/bash # 检查ffmpeg是否已安装 if ! command -v ffmpeg &> /dev/null; then echo "安装ffmpeg中..." sudo apt-get update && sudo apt-get install ffmpeg -y -qq fi # 替换成你的Python应用启动命令,比如用gunicorn或者直接运行python脚本 gunicorn app:app
- 给脚本加执行权限:在本地或GitHub Workflow里加一步
chmod +x start.sh - 在Azure Portal的Web App配置页,把「启动命令」改成
./start.sh,这样每次应用启动都会自动检查并安装ffmpeg。
方法2:把ffmpeg二进制文件打包到应用目录
Azure Web App的/home/site/wwwroot目录是持久化的,不会因为重启或部署丢失,所以可以把ffmpeg的静态编译二进制文件放到项目里一起部署:
- 下载对应Linux x64版本的静态ffmpeg包(不用安装,直接就能运行),解压后把
ffmpeg和ffprobe文件放到项目的bin目录里 - 在Python代码里调用ffmpeg时指定本地路径,比如:
import subprocess # 指向项目里的ffmpeg二进制文件 ffmpeg_path = "./bin/ffmpeg" subprocess.run([ffmpeg_path, "-i", "input.mp4", "output.mp4"])
- 把
bin目录提交到GitHub,部署时就会同步到Azure,重启也不会丢。
方法3:用自定义Docker容器部署
如果你的应用可以用容器部署,直接在Dockerfile里安装ffmpeg,这样容器自带ffmpeg,完全不用担心丢失问题:
FROM python:3.9-slim WORKDIR /app # 先安装ffmpeg RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 启动应用 CMD ["gunicorn", "app:app"]
然后在GitHub Workflow里把这个容器部署到Azure Web App即可。
内容的提问来源于stack exchange,提问作者PC_User
相关产品推荐
相关产品推荐

