Ansible Playbook中apt缓存更新失败求助(PHP8.1安装场景)
解决Debian机器上添加ppa:ondrej/php源导致apt update失败的问题
问题根源
ppa:ondrej/php是Ubuntu专属的PPA源格式,Debian系统不支持直接使用PPA,这就是你执行Playbook时出现apt cache update failed报错的核心原因。Ondřej Surý同时维护了适用于Debian的PHP源,我们需要替换成这个源来安装PHP8.1。
修正后的Playbook
--- - name: "Laravel部署Playbook" hosts: laravelserver become: yes remote_user: root vars: password: "*******" ip: "xxx.xxx.xxx.xxx" tasks: - name: "更新并升级apt仓库" apt: upgrade: yes update_cache: yes cache_valid_time: 86400 - name: "安装Apache服务器" apt: name: apache2 state: present - name: "启用Apache服务" service: name: apache2 enabled: yes - name: "安装PHP依赖包" apt: name: - ca-certificates - apt-transport-https - software-properties-common - gnupg2 state: present - name: "导入Sury PHP源的GPG密钥" apt_key: url: https://packages.sury.org/php/apt.gpg state: present - name: "添加Sury PHP源到Debian系统" apt_repository: repo: "deb https://packages.sury.org/php/ {{ ansible_distribution_release }} main" state: present filename: sury-php - name: "更新apt缓存" apt: update_cache: yes - name: "安装PHP8.1及相关依赖" apt: name: - php8.1 - php8.1-mysql - libapache2-mod-php8.1 - php8.1-imap - php8.1-ldap - php8.1-xml - php8.1-fpm - php8.1-curl - php8.1-mbstring - php8.1-zip state: present
关键修改点说明
- 移除原有的
ppa:ondrej/php添加步骤,替换为Debian兼容的Sury源操作 - 新增
gnupg2包安装,用于导入GPG密钥 - 使用
apt_key模块导入Sury源的验证密钥,避免源验证失败 - 源地址中用
{{ ansible_distribution_release }}变量自动适配Debian发行版代号(如bullseye、bookworm) - 将
libapache2-mod-php替换为libapache2-mod-php8.1,确保安装对应PHP8.1的模块
额外检查项
- 确认目标Debian机器能正常访问
https://packages.sury.org/php/,可手动执行curl https://packages.sury.org/php/apt.gpg测试网络连通性 - 若Debian版本过旧(如stretch及更早),Sury源可能不再支持,建议升级至较新稳定版
内容的提问来源于stack exchange,提问作者user11631346
相关产品推荐
相关产品推荐

