能不依赖宝塔面板、PHPStudy这类集成环境,自己在Ubuntu上把LAMP一套从零装起来,是很多PHP开发者进阶路上的一道分水岭。装完你会突然明白Apache和Nginx到底差在哪、PHP-FPM是干什么的、MySQL的认证插件为什么偶尔会坑你一下。这篇文章主要面向已经会写PHP、但一直用集成环境、没碰过Linux服务器配置的开发者,也适合准备把项目部署到云服务器、但不想用面板的人。我会带你把Linux + Apache + MySQL/MariaDB + PHP这条链路完整走一遍,不只是敲命令,还会解释每一步为什么这么做,以及哪些地方最容易翻车。
1. 动手前的规划:Apache还是Nginx、PHP用哪个版本、MySQL还是MariaDB
很多人一上来就apt install apache2 php mysql-server一把梭,结果装完发现版本不对、扩展缺一堆、跑起来500错误,回头还得折腾半天。我先说清楚选型问题。
Apache在LAMP里依然是稳妥选择。 虽然Nginx在高并发静态文件场景下性能更强,但Apache的.htaccess支持、mod_php(虽然我后面会推荐PHP-FPM方式)、模块化配置对PHP开发者更友好,尤其是你需要在目录级别做权限控制、伪静态规则时,Apache的配置直觉性更强。教程场景、个人服务器、中小流量项目,Apache完全够用。
PHP版本选8.1以上。 Ubuntu 22.04默认软件源里的PHP是8.1,24.04是8.3。如果你还在跑老项目、依赖ThinkPHP 3.2.3这类远古框架,那确实得谨慎,那个生态停在PHP 5.6/7.0时代,真要跑老项目建议用Docker容器隔离,别直接裸装在系统里污染环境。新项目、新框架(ThinkPHP 6/8、Laravel 10+)一律用PHP 8.x,性能和安全都好很多。
MySQL还是MariaDB? 这俩在兼容性上几乎一样,Ubuntu软件源里默认的mysql-server包实际上就是MySQL 8.0二进制版,而MariaDB是社区分支。我的建议是:如果你不需要MySQL 8.0特有的功能(比如窗口函数、CTE这些其实MariaDB 10.6+也大部分有了),用哪个都行。但如果你的项目里用了mysql_native_password认证插件相关的老配置,MariaDB反而更省心一点。本文以MySQL 8.0为例,MariaDB的安装命令我会在结尾补充。
另外,提前确认你的Ubuntu版本和CPU架构。lsb_release -a查看版本,uname -m查看架构。Ubuntu 22.04和24.04的软件源、包版本差异很大。国内服务器还需要换源,不然apt update可能慢到让你怀疑人生。我用的是Ubuntu 22.04 LTS,下面所有命令都以这个版本为基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从零到通:四件套安装与首次联通测试
2.1 先把系统源换成国内镜像
这一步不是必须的,但如果你在国内服务器上,做完能省大量等待时间。Ubuntu 22.04的源配置文件是/etc/apt/sources.list,但我更推荐直接改/etc/apt/sources.list.d/ubuntu.sources(新版格式)。先把原来的文件备份:
bash复制sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
然后编辑它,把archive.ubuntu.com和security.ubuntu.com替换为mirrors.aliyun.com或mirrors.tuna.tsinghua.edu.cn。替换后执行:
bash复制sudo apt update && sudo apt upgrade -y
2.2 安装Apache 2.4并验证启动
bash复制sudo apt install -y apache2
sudo systemctl enable apache2
sudo systemctl start apache2
装完访问http://你的服务器IP,看到Apache2 Ubuntu Default Page就说明Web服务已经起来了。此时注意防火墙——如果你开了UFW,需要放行:
bash复制sudo ufw allow in "Apache Full"
这里的Apache Full包含了80和443端口,比单独放行Apache更省事。
2.3 安装PHP 8.1和常用扩展
不要只装php包,那样PHP连MySQL驱动都没有。我建议一次性把常用扩展装齐,省得后面缺啥补啥:
bash复制sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-gd php8.1-xml
