
1. 为什么选择Ubuntu作为PHP开发环境作为一个长期使用Ubuntu进行PHP开发的工程师我可以负责任地说Ubuntu是目前最适合PHP开发的Linux发行版之一。从2008年第一次在Ubuntu 8.04上配置LAMP环境开始到现在的Ubuntu 22.04 LTS这个组合已经服务了我上百个PHP项目。选择Ubuntu的首要原因是其卓越的软件包管理。通过apt-get我们可以一键安装PHP及其所有扩展sudo apt install php php-mysql php-curl php-gd php-mbstring php-xml php-zip其次是硬件兼容性。无论是实体机还是虚拟机包括WSL2Ubuntu都能完美运行。我最近在戴尔XPS 13上测试从安装到配置完开发环境只用了不到30分钟。2. 基础环境配置指南2.1 系统安装与优化推荐使用Ubuntu 22.04 LTS版本它提供5年支持周期。安装时注意分区建议/ 50Gswap 内存1.5倍/home剩余空间取消所有预装软件选项保持系统纯净安装完成后立即执行sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git curl2.2 PHP环境搭建对于PHP开发我建议使用ondrej PPA源获取最新版本sudo add-apt-repository ppa:ondrej/php sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap配置PHP-FPM时关键参数调整; /etc/php/8.2/fpm/php.ini memory_limit 256M upload_max_filesize 64M post_max_size 64M max_execution_time 1203. 开发工具链配置3.1 代码编辑器选择VSCode是目前PHP开发的最佳选择sudo snap install --classic code必备扩展PHP IntelephensePHP DebugPHP Namespace ResolverLaravel Artisan3.2 数据库管理MySQL仍是PHP项目的主流选择sudo apt install -y mysql-server sudo mysql_secure_installation推荐使用DBeaver作为GUI工具sudo snap install dbeaver-ce4. 高级开发环境配置4.1 Docker集成对于需要隔离环境的项目sudo apt install -y docker.io docker-compose sudo usermod -aG docker $USER典型docker-compose.yml配置version: 3 services: app: image: php:8.2-apache ports: - 8080:80 volumes: - ./:/var/www/html db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: app_db4.2 调试环境搭建Xdebug配置/etc/php/8.2/fpm/conf.d/20-xdebug.inizend_extensionxdebug.so xdebug.modedebug xdebug.client_hosthost.docker.internal xdebug.client_port9003 xdebug.start_with_requestyes5. 生产力提升技巧5.1 命令行效率工具安装zsh和oh-my-zshsudo apt install -y zsh sh -c $(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)推荐插件gitcomposerlaravelzsh-autosuggestionszsh-syntax-highlighting5.2 常用开发辅助创建项目模板脚本#!/bin/bash mkdir $1 cd $1 git init composer init --namevendor/$1 --descriptionProject $1 --typeproject --licenseMIT --require-devphpunit/phpunit^9.0 --requirephp8.2 mkdir src tests touch README.md .gitignore6. 常见问题解决方案6.1 权限问题处理Apache/Nginx权限配置sudo chown -R www-data:www-data /var/www/html sudo usermod -a -G www-data $USER sudo chmod -R 775 /var/www/html/storage6.2 性能优化建议OPcache配置/etc/php/8.2/fpm/conf.d/10-opcache.iniopcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files4000 opcache.revalidate_freq60 opcache.fast_shutdown17. 持续集成方案7.1 GitHub Actions配置基础PHP测试工作流.github/workflows/php.ymlname: PHP Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Setup PHP uses: shivammathur/setup-phpv2 with: php-version: 8.2 extensions: mbstring, xml, curl, gd, mysql - name: Install dependencies run: composer install --prefer-dist --no-progress --no-suggest - name: Execute tests run: vendor/bin/phpunit8. 安全最佳实践8.1 基础安全加固关键安全措施sudo ufw enable sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo apt install -y fail2ban sudo systemctl enable fail2ban8.2 PHP安全配置禁用危险函数/etc/php/8.2/fpm/php.inidisable_functions exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source expose_php Off9. 多项目管理方案9.1 虚拟主机配置Apache多站点配置示例VirtualHost *:80 ServerName project1.test DocumentRoot /var/www/project1/public Directory /var/www/project1/public AllowOverride All Require all granted /Directory /VirtualHost本地DNS配置/etc/hosts127.0.0.1 project1.test 127.0.0.1 project2.test10. 现代化开发实践10.1 使用Laravel Sail对于Laravel项目curl -s https://laravel.build/example-app | bash cd example-app ./vendor/bin/sail up10.2 API开发工具安装Postmansudo snap install postman11. 系统监控与维护11.1 资源监控工具安装Glancessudo apt install -y glances11.2 日志管理关键日志文件/var/log/nginx/error.log/var/log/php8.2-fpm.log/var/log/mysql/error.log日志轮转配置示例/etc/logrotate.d/php/var/log/php/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate /usr/lib/php/php8.2-fpm-reopenlogs endscript }12. 备份策略实施12.1 数据库备份每日备份脚本/usr/local/bin/db_backup.sh#!/bin/bash DATE$(date %Y%m%d) mysqldump -u root -p[password] --all-databases | gzip /backup/mysql/all-databases-$DATE.sql.gz find /backup/mysql/ -type f -mtime 30 -delete12.2 代码备份使用Git远程仓库git remote add backup gitbackup-server:project.git git push backup main13. 终端个性化配置13.1 主题与字体安装Powerline字体sudo apt install -y fonts-powerline.zshrc配置示例ZSH_THEMEagnoster DEFAULT_USER$USER plugins(git composer laravel)13.2 实用别名开发常用别名alias paphp artisan alias puphpunit alias cdacomposer dump-autoload alias nahgit reset --hard git clean -df14. 团队协作配置14.1 统一开发环境使用Vagrant创建标准环境Vagrant.configure(2) do |config| config.vm.box ubuntu/jammy64 config.vm.provision shell, path: provision.sh end14.2 代码风格统一安装PHP-CS-Fixercomposer require --dev friendsofphp/php-cs-fixer配置.php-cs-fixer.php?php $finder PhpCsFixer\Finder::create() -in(__DIR__) -exclude(vendor); return PhpCsFixer\Config::create() -setRules([ PSR12 true, strict_param true, array_syntax [syntax short], ]) -setFinder($finder);15. 性能测试工具15.1 Apache Benchmark基本用法ab -n 1000 -c 100 http://localhost/15.2 PHP性能分析安装XHProfsudo apt install -y php-xhprof分析脚本示例?php xhprof_enable(XHPROF_FLAGS_CPU XHPROF_FLAGS_MEMORY); // 你的代码 $xhprof_data xhprof_disable(); include_once /usr/share/php/xhprof_lib/utils/xhprof_lib.php; include_once /usr/share/php/xhprof_lib/utils/xhprof_runs.php; $xhprof_runs new XHProfRuns_Default(); $run_id $xhprof_runs-save_run($xhprof_data, xhprof_test);16. 容器化开发进阶16.1 多容器编排复杂docker-compose.yml示例version: 3.8 services: app: build: context: . dockerfile: Dockerfile ports: - 8000:8000 volumes: - .:/var/www/html depends_on: - db - redis db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: app MYSQL_USER: user MYSQL_PASSWORD: password volumes: - db_data:/var/lib/mysql redis: image: redis:alpine ports: - 6379:6379 volumes: db_data:16.2 生产环境Docker优化多阶段构建示例# 构建阶段 FROM composer:2 as builder WORKDIR /app COPY . . RUN composer install --no-dev --optimize-autoloader # 生产阶段 FROM php:8.2-fpm-alpine WORKDIR /var/www/html COPY --frombuilder /app . RUN chown -R www-data:www-data /var/www/html17. 本地邮件测试17.1 MailHog安装使用Docker运行MailHogdocker run -d -p 8025:8025 -p 1025:1025 mailhog/mailhogPHP配置发送测试邮件ini_set(SMTP, localhost); ini_set(smtp_port, 1025); mail(testexample.com, Test Subject, Test Message);18. 前端工具集成18.1 Node.js环境通过NVM安装curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install --lts18.2 前端构建工具安装常用工具npm install -g yarn gulp webpack19. 文档生成方案19.1 PHPDocumentor安装与使用composer require --dev phpdocumentor/phpdocumentor ./vendor/bin/phpdoc -d ./src -t ./docs19.2 Swagger集成安装zircote/swagger-phpcomposer require --dev zircote/swagger-php注解示例/** * OA\Info( * titleMy API, * version1.0.0, * descriptionAPI documentation * ) */20. 持续学习资源20.1 官方文档关键链接PHP官方文档Ubuntu服务器指南Apache文档MySQL文档20.2 社区资源优质论坛PHP Reddit社区Ubuntu论坛Stack Overflow PHP标签