1. 项目背景与核心需求
去年帮朋友部署在线考试系统时踩了不少坑,这个项目让我意识到即使是简单的Web应用部署,也藏着许多新手容易忽略的细节。今天就来拆解这个典型的LAMP架构考试网站部署全流程,重点分享那些官方文档不会告诉你的实战经验。
这个PHP开发的考试系统包含考生管理、题库组卷、在线监考等模块,采用经典的前后端混合架构。部署时需要特别关注环境兼容性、数据安全和性能调优三个维度,我会用Nginx替代传统的Apache来获得更好的并发处理能力。
2. 环境准备与依赖安装
2.1 服务器基础配置
推荐使用Ubuntu 22.04 LTS系统,其长期支持特性和稳定的软件源能避免很多依赖冲突。首次登录后务必完成这三项基础配置:
- 创建专用部署用户(避免直接使用root):
adduser exam_deploy usermod -aG sudo exam_deploy- 防火墙规则设置,仅开放必要端口:
ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable- 时区与基础工具配置:
timedatectl set-timezone Asia/Shanghai apt update && apt install -y git curl unzip重要提示:生产环境务必禁用密码登录,改用SSH密钥认证。编辑/etc/ssh/sshd_config文件将PasswordAuthentication设为no
2.2 数据库选型与优化
MySQL 8.0在事务处理和索引优化方面表现更优,特别适合考试系统这种写密集型应用。安装后需要调整的关键配置:
[mysqld] innodb_buffer_pool_size = 1G # 建议设为物理内存的70% innodb_log_file_size = 256M max_connections = 200 query_cache_type = 0 # 考试系统禁用查询缓存创建专用数据库时注意字符集设置:
CREATE DATABASE exam_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;3. Web服务环境搭建
3.1 PHP环境调优
选择PHP 7.4作为运行时(兼容性最佳),需要安装的扩展包括:
apt install -y php7.4-fpm php7.4-mysql php7.4-gd php7.4-mbstring调整php.ini关键参数:
memory_limit = 256M upload_max_filesize = 20M post_max_size = 22M session.gc_maxlifetime = 14400 # 考试时长考虑3.2 Nginx配置技巧
考试系统的Nginx配置需要特别注意静态资源缓存和PHP请求处理:
server { listen 80; server_name exam.yourdomain.com; root /var/www/exam/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(jpg|jpeg|png|gif|css|js)$ { expires 30d; add_header Cache-Control "public"; } }4. 应用部署与安全加固
4.1 代码部署最佳实践
使用Git进行代码管理时,推荐采用这样的目录结构:
/var/www/ └── exam ├── current -> releases/v1.0.0 # 符号链接 ├── releases │ └── v1.0.0 └── storage # 持久化数据部署脚本示例:
rsync -az --exclude='.env' --exclude='storage/*' ./ user@server:/var/www/exam/releases/v1.0.0 ln -sfn /var/www/exam/releases/v1.0.0 /var/www/exam/current4.2 安全防护措施
- 文件权限设置:
chown -R exam_deploy:www-data /var/www/exam find /var/www/exam -type d -exec chmod 750 {} \; find /var/www/exam -type f -exec chmod 640 {} \;- 环境变量保护:
chmod 600 /var/www/exam/.env chown www-data:www-data /var/www/exam/storage -R- 定期备份策略:
# 每日数据库备份 mysqldump -u root exam_system | gzip > /backups/exam_$(date +%F).sql.gz # 保留最近7天备份 find /backups -type f -mtime +7 -delete5. 性能监控与故障排查
5.1 实时监控方案
安装Prometheus + Grafana监控组合:
apt install -y prometheus-node-exporter关键监控指标包括:
- PHP-FPM进程状态
- MySQL查询吞吐量
- 服务器负载与内存使用
- Nginx请求处理时长
5.2 常见问题处理
- 考试提交卡顿:
# 检查PHP进程阻塞 watch -n 1 'ps aux | grep php-fpm' # 数据库慢查询分析 mysqldumpslow -s t /var/log/mysql/mysql-slow.log- 图片上传失败:
# 检查PHP配置 php -i | grep upload_max_filesize # Nginx客户端body大小 grep client_max_body_size /etc/nginx/nginx.conf- 会话保持异常:
# 检查session存储路径 ls -l /var/lib/php/sessions/ # 查看session.gc_probability配置 php -i | grep session.gc6. 扩展优化建议
对于高并发考试场景,可以考虑:
- 使用Redis缓存试题数据和会话信息
- 静态资源通过CDN加速
- 数据库读写分离部署
- 采用Docker容器化部署提高移植性
实际部署中发现,启用OPcache后PHP执行效率提升明显:
[opcache] opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60