
1. 环境准备与系统更新在Ubuntu上搭建Web服务器前需要确保系统环境干净且更新到最新状态。我推荐使用Ubuntu 22.04 LTS版本这是目前最稳定的长期支持版本官方维护周期长达5年。首先打开终端执行系统更新命令sudo apt update sudo apt upgrade -y这个命令做了两件事apt update更新本地软件包索引相当于刷新软件商店的商品目录apt upgrade实际升级所有可更新的软件包注意生产环境中建议在非业务时段进行系统更新避免意外中断服务。如果是在已有业务的服务器上操作可以先测试更新影响。更新完成后建议安装一些基础工具包sudo apt install -y curl wget vim net-tools这些工具在后续配置和故障排查时非常有用curl/wget用于下载文件vim比默认nano更强大的文本编辑器net-tools包含ifconfig等网络工具2. Apache安装与配置2.1 安装Apache服务器Apache是LAMP栈中的LLinux和AApache部分作为Web服务器处理HTTP请求。安装命令很简单sudo apt install -y apache2安装完成后验证Apache版本apache2 -v正常应该看到类似这样的输出Server version: Apache/2.4.41 (Ubuntu) Server built: 2022-01-05T14:49:562.2 服务管理与防火墙配置启动Apache并设置开机自启sudo systemctl start apache2 sudo systemctl enable apache2检查服务状态sudo systemctl status apache2绿色active (running)表示服务正常运行。如果系统启用了UFW防火墙需要放行HTTP/HTTPS流量sudo ufw allow Apache Full2.3 测试Apache运行在浏览器访问服务器IP应该能看到Apache默认页面。如果看不到检查IP是否正确确认安全组/防火墙放行了80端口查看Apache错误日志sudo tail -f /var/log/apache2/error.log3. MySQL数据库安装3.1 安装MySQL服务器MySQL是LAMP中的M负责数据存储管理sudo apt install -y mysql-server安装后验证版本mysql --version典型输出mysql Ver 8.0.29-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))3.2 安全加固MySQL安装后需要运行安全脚本sudo mysql_secure_installation会提示设置root密码生产环境务必设置强密码移除匿名用户禁止root远程登录移除测试数据库重新加载权限表3.3 创建数据库用户建议为每个应用创建专用用户避免使用rootsudo mysql -u root -p登录后执行CREATE DATABASE webapp; CREATE USER webuserlocalhost IDENTIFIED BY StrongPassword123!; GRANT ALL PRIVILEGES ON webapp.* TO webuserlocalhost; FLUSH PRIVILEGES; EXIT;4. PHP安装与集成4.1 安装PHP及常用扩展PHP是LAMP中的P负责动态内容处理sudo apt install -y php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip这个命令安装了php核心Apache的PHP模块MySQL支持常用扩展curl、gd图像处理等验证PHP版本php -v输出示例PHP 7.4.3 (cli) (built: Nov 25 2021 23:16:22) ( NTS )4.2 配置PHP主要配置文件位于/etc/php/7.4/apache2/php.ini建议修改的关键参数upload_max_filesize 16M post_max_size 16M memory_limit 128M max_execution_time 120 date.timezone Asia/Shanghai修改后重启Apache生效sudo systemctl restart apache25. 环境测试与验证5.1 创建测试页面在web根目录创建测试文件sudo vim /var/www/html/info.php内容?php phpinfo(); ?访问http://your-server-ip/info.php应该能看到详细的PHP配置信息。5.2 数据库连接测试创建测试脚本sudo vim /var/www/html/dbtest.php内容?php $conn new mysqli(localhost, webuser, StrongPassword123!, webapp); if ($conn-connect_error) { die(连接失败: . $conn-connect_error); } echo MySQL连接成功; ?访问该页面应该显示MySQL连接成功。6. 安全加固与优化6.1 Apache安全配置编辑主配置文件sudo vim /etc/apache2/apache2.conf建议修改ServerTokens Prod ServerSignature Off TraceEnable Off限制目录访问sudo vim /etc/apache2/sites-available/000-default.conf在 块内添加Directory /var/www/html Options -Indexes AllowOverride All /Directory6.2 MySQL安全建议定期备份数据库为每个应用使用独立数据库用户限制远程访问如非必要启用二进制日志用于恢复6.3 PHP安全设置禁用危险函数disable_functions exec,passthru,shell_exec,system,proc_open,popen关闭错误显示生产环境display_errors Off log_errors On7. 常见问题排查7.1 Apache无法启动检查错误sudo systemctl status apache2 sudo journalctl -xe常见原因端口冲突如已有Nginx运行配置文件语法错误权限问题7.2 PHP页面显示源码说明PHP模块未正确加载检查sudo a2enmod php7.4 sudo systemctl restart apache27.3 MySQL连接问题检查服务状态sudo systemctl status mysql连接测试mysql -u webuser -p如果连接被拒绝确认用户名密码正确检查用户权限查看MySQL错误日志sudo tail -f /var/log/mysql/error.log8. 进阶配置建议8.1 虚拟主机配置为多个网站配置虚拟主机sudo mkdir -p /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/example.com/public_html创建配置文件sudo vim /etc/apache2/sites-available/example.com.conf内容VirtualHost *:80 ServerAdmin adminexample.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined /VirtualHost启用站点sudo a2ensite example.com.conf sudo systemctl reload apache28.2 HTTPS配置使用Lets Encrypt免费证书sudo apt install -y certbot python3-certbot-apache sudo certbot --apache -d example.com -d www.example.com证书会自动续期建议测试续期sudo certbot renew --dry-run8.3 性能优化启用Apache缓存模块sudo a2enmod cache sudo a2enmod cache_disk安装OPcache加速PHPsudo apt install -y php-opcacheMySQL优化sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf调整innodb_buffer_pool_size 1G # 根据内存调整 query_cache_size 64M9. 维护与管理9.1 日志管理关键日志位置Apache访问日志/var/log/apache2/access.logApache错误日志/var/log/apache2/error.logMySQL错误日志/var/log/mysql/error.log建议配置日志轮转sudo vim /etc/logrotate.d/apache29.2 备份策略网站文件备份sudo tar -czvf /backup/website-$(date %F).tar.gz /var/www/htmlMySQL数据库备份mysqldump -u webuser -p webapp /backup/webapp-$(date %F).sql建议设置定时任务crontab自动执行备份。9.3 监控设置安装基本监控工具sudo apt install -y htop sysstat关键监控指标内存使用free -mCPU负载uptime磁盘空间df -hMySQL状态mysqladmin -u root -p status10. 实际部署建议在真实项目部署时我通常会遵循以下流程准备阶段确认服务器规格CPU/内存/存储规划目录结构准备部署清单部署流程# 从Git拉取代码 cd /var/www/html sudo git clone https://github.com/your/repo.git . # 设置权限 sudo chown -R www-data:www-data . sudo find . -type d -exec chmod 755 {} \; sudo find . -type f -exec chmod 644 {} \; # 导入数据库 mysql -u webuser -p webapp database_dump.sql # 重启服务 sudo systemctl restart apache2 sudo systemctl restart mysql验证测试功能测试性能测试安全扫描监控设置配置告警阈值设置日志监控部署备份验证机制这套LAMP环境经过多年实战检验在中小型Web应用中表现稳定可靠。根据项目需求后续可以考虑加入Redis缓存、负载均衡等进阶组件。