You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04.1下PHP 8环境搭建求助:命令简化与权限错误

解决权限错误并生成可复用的PHP开发环境安装脚本

核心问题分析

你遇到的sudo echo "xxx" >> ~/.gnupg/dirmngr.conf权限错误,根源是重定向操作由当前用户Shell执行,而非sudo启动的echo进程。即使echo用了sudo,>>仍会用你的普通用户权限写入root所属的~/.gnupg目录,导致权限拒绝。解决方式是用sudo tee或sudo sh -c让重定向在root权限下执行。

修正后的可复用Bash脚本

将以下内容保存为install-php-dev-env.sh:

#!/bin/bash
set -euo pipefail

# 更新系统包索引
sudo apt update -y

# 安装基础依赖工具
sudo apt install -y gnupg gosu curl ca-certificates zip unzip git sqlite3 libcap2-bin libpng-dev

# 配置GnuPG目录及dirmngr(修复权限问题)
sudo mkdir -p ~/.gnupg
sudo chmod 600 ~/.gnupg
# 使用sudo tee -a实现root权限下追加内容
echo "disable-ipv6" | sudo tee -a ~/.gnupg/dirmngr.conf > /dev/null
echo "keyserver hkp://keyserver.ubuntu.com:80" | sudo tee -a ~/.gnupg/dirmngr.conf > /dev/null

# 添加Ondrej PHP源的GPG密钥及源列表
sudo gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c
sudo gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c | sudo tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ppa_ondrej_php.list > /dev/null

# 再次更新索引并安装PHP 8.2及扩展
sudo apt update -y
sudo apt install -y \
    php8.2-cli php8.2-dev \
    php8.2-pgsql php8.2-sqlite3 php8.2-gd \
    php8.2-curl \
    php8.2-imap php8.2-mysql php8.2-mbstring \
    php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \
    php8.2-intl php8.2-readline \
    php8.2-ldap \
    php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \
    php8.2-memcached php8.2-pcov php8.2-xdebug

# 安装Composer(需root权限写入/usr/bin)
php -r "readfile('https://getcomposer.org/installer');" | sudo php -- --install-dir=/usr/bin/ --filename=composer

# 安装Node.js 18.x
curl -sLS https://deb.nodesource.com/setup_18.x | sudo bash -
sudo apt install -y nodejs
sudo npm install -g npm

# 添加Yarn源并安装
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarn.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list > /dev/null

# 添加PostgreSQL源并安装客户端
curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/pgdg.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list > /dev/null

# 最后更新索引并安装剩余工具
sudo apt update -y
sudo apt install -y yarn mysql-client postgresql-client-14

# 清理系统缓存
sudo apt autoremove -y
sudo apt clean -y
sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

echo "环境安装完成!"

脚本使用步骤

  1. 保存脚本后,赋予执行权限:
    chmod +x install-php-dev-env.sh
    
  2. 以root权限运行脚本:
    sudo ./install-php-dev-env.sh
    

关键修改说明

  • 加入set -euo pipefail:让脚本在出错、使用未定义变量或管道环节出错时立即退出,避免后续误操作。
  • 替换所有echo >>为echo ... | sudo tee -a:确保文件写入操作在root权限下执行,解决权限错误。
  • 给Composer安装命令添加sudo:因为要写入/usr/bin目录,需要root权限。
  • 修正Node.js源安装的权限:将curl | bash -改为curl | sudo bash -,确保源配置操作有足够权限。
  • 拆分长命令为多行,添加注释:提升脚本可读性和维护性。

内容的提问来源于stack exchange,提问作者Mauricio Mendoza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:45:34