Ubuntu下PHP开发环境配置全指南
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标签

相关新闻

模型越做越大,产线却越跑越慢,怎么破?

模型越做越大,产线却越跑越慢,怎么破?

近年来,随着深度学习技术的飞速发展,模型参数量从百万级跃升至万亿级已不再是新闻。从BERT到GPT-3,再到如今的GPT-4、Claude-3,模型的“大”带来了前所未有的能力突破——更强的泛化性、更丰富的上下文理解、更精准的生成效果。然…

2026/10/16 19:19:43 阅读更多 →
江棉斌:一个做新媒体培训机构的老板为什么要开发AI?

江棉斌:一个做新媒体培训机构的老板为什么要开发AI?

一个做新媒体培训机构的老板,自己烧钱开发新媒体营销AI,原因是当下新媒体行业已全面进入AI深度迭代与存量博弈的新周期。流量成本持续高企,内容同质化严重,平台算法频繁变动,大量企业虽持续投入人力与资金,…

2026/10/16 13:05:51 阅读更多 →
天津河西区本地GEO获客怎么选?看这三点就够了

天津河西区本地GEO获客怎么选?看这三点就够了

很多河西区的实体老板都在问:现在同城生意越来越难做,有没有一种方式,能让客户在问AI助手的时候,直接推荐到我们店?其实这种需求背后对应的正是本地GEO获客。在河西区陈塘庄,有一家专注这个方向的服务商——…

2026/10/15 22:14:06 阅读更多 →

最新新闻

GIS竞赛环境镜像:ArcGIS Pro标准化考场部署指南

GIS竞赛环境镜像:ArcGIS Pro标准化考场部署指南

简介:本资源为第九届全国大学生GIS应用技能大赛上午场完整实操成果包,面向GIS专业本科生、竞赛备赛团队及空间分析初学者,聚焦GIS基础操作、地图制图与空间分析能力训练。压缩包共33个文件,含14个ADF栅格数据文件(支撑…

2026/10/16 19:20:13 阅读更多 →
jQuery表格列宽拖动实战:colResizable插件参数与持久化方案

jQuery表格列宽拖动实战:colResizable插件参数与持久化方案

简介:jQuery表格列宽拖动插件 colResizable-1.3.min.js 的完整资源包,面向需要优化表格交互体验的前端开发者,适合报表、数据分析、后台管理等需灵活查看数据的场景,解决默认列宽固定、用户不便调整的问题。压缩包仅34KB&#xff…

2026/10/16 19:20:13 阅读更多 →
支付宝信用免押租赁小程序源码(生产级开源)

支付宝信用免押租赁小程序源码(生产级开源)

简介:这是一套面向中小租赁企业与开发者的技术实践型小程序源码,基于支付宝小程序平台构建信用免押租赁服务系统,适用于数码产品、3C设备、电动车、电池等多品类租赁场景。资源解决传统租赁中押金管理难、合同签署重、坏单率高等核心痛点&…

2026/10/16 19:20:13 阅读更多 →
从模型到ONNX:Meta-Llama-3-8B_rai_1.8.0_hybrid的32层Llama架构、GQA注意力与KV缓存完整解析

从模型到ONNX:Meta-Llama-3-8B_rai_1.8.0_hybrid的32层Llama架构、GQA注意力与KV缓存完整解析

【免费下载链接】Meta-Llama-3-8B_rai_1.8.0_hybrid 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Meta-Llama-3-8B_rai_1.8.0_hybrid 点击查看 免费下载 Meta-Llama-3-8B_rai_1.8.0_hybrid 是 AMD 针对 Ryzen AI(RAI)处理器深度优化的…

2026/10/16 19:20:13 阅读更多 →
ACGAN原理深度解析:解耦生成与属性控制的隐空间机制

ACGAN原理深度解析:解耦生成与属性控制的隐空间机制

1. 为什么ACGAN不是“GAN的升级版”,而是解决了一个根本性错位问题很多人刚接触ACGAN时,第一反应是:“哦,这是DCGAN加了分类标签的版本,属于GAN家族的常规迭代。”我最初也这么想,直到在某跨平台系统里用它…

2026/10/16 19:20:13 阅读更多 →
iOS桌面小插件IntentConfiguration实战:动态配置与性能优化

iOS桌面小插件IntentConfiguration实战:动态配置与性能优化

1. 桌面小插件的核心架构与 IntentConfiguration 的定位1.1 从静态配置到动态交互的演进逻辑WidgetKit 在 iOS 14 中首次亮相时,给桌面小插件带来了三种配置方式:StaticConfiguration、IntentConfiguration和DynamicIntentConfiguration(后者…

2026/10/16 19:19:12 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →