引言:从本地开发到生产服务器
在本地机器上开发PHP应用只是工作的一半。真正的技艺始于代码部署到服务器并开始服务真实用户之时。在VPS上进行PHP的高级部署不仅仅是简单地通过FTP复制文件。这是一个综合性的过程,包括环境配置、安全、自动化和监控。
在本文中,我们将详细讲解如何使用现代工具和DevOps实践来配置VPS,以实现PHP应用的专业托管。您将学习如何在Nginx + PHP-FPM技术栈上部署应用、配置CI/CD流水线、优化性能以及实施监控。
假设您已具备Linux、PHP和Web服务器的基础知识。我们将进入高级水平。
1. VPS准备与环境配置
服务器选择与初始配置
对于高级部署,请选择至少具有2 GB RAM和SSD硬盘的VPS。推荐的操作系统为Ubuntu 22.04 LTS或Debian 12。通过SSH获取访问权限后,执行基本配置:
- 更新软件包:
sudo apt update && sudo apt upgrade -y - 创建具有sudo权限的用户:
sudo adduser deployer && sudo usermod -aG sudo deployer - 配置SSH密钥(禁用密码登录)
- 安装fail2ban以防止暴力破解
- 配置UFW(允许端口22、80、443)
安装LEMP技术栈(Nginx + PHP-FPM + MySQL)
我们使用Nginx作为前端服务器,PHP-FPM用于处理PHP。使用一条命令安装所有组件:
sudo apt install nginx mysql-server php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip composer git -y检查版本:
php -vnginx -vmysql --version配置PHP-FPM以实现高性能
对于高级部署,请修改PHP-FPM配置。编辑文件/etc/php/8.3/fpm/pool.d/www.conf(版本可能不同):
pm = dynamicpm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500生产环境的重要php.ini设置:
memory_limit = 256Mupload_max_filesize = 64Mpost_max_size = 64Mmax_execution_time = 300date.timezone = Europe/Moscow重启PHP-FPM:sudo systemctl restart php8.3-fpm
2. 应用部署:从Git到生产环境
克隆与权限配置
为项目创建目录并克隆仓库:
sudo mkdir -p /var/www/yourprojectsudo chown -R deployer:deployer /var/www/yourprojectcd /var/www/yourprojectgit clone git@github.com:yourusername/yourproject.git .配置访问权限:
sudo chown -R www-data:www-data /var/www/yourproject/storagesudo chown -R www-data:www-data /var/www/yourproject/bootstrap/cachesudo chmod -R 775 /var/www/yourproject/storagesudo chmod -R 775 /var/www/yourproject/bootstrap/cache配置Nginx虚拟主机
为您的域名创建配置文件:
sudo nano /etc/nginx/sites-available/yourproject包含缓存和压缩的高级配置示例:
server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/yourproject/public;
index index.php index.html;
charset utf-8;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \\.php$ { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
location ~ /\