引言:为什么VPS是PHP项目的最佳选择?
用PHP开发Web应用只是工作的一半。另一半同样重要的部分是合理的部署。如果您已经超越了共享主机的限制,并希望完全控制环境,那么虚拟专用服务器(VPS)是理想的解决方案。在本文中,我们将走完从购买服务器到在生产模式下启动PHP应用的整个过程。您将学习如何配置Nginx + PHP-FPM + MySQL组合、设置域名、SSL证书以及自动化代码更新。
步骤1:VPS初始配置与连接
1.1 选择操作系统与首次登录
我们推荐使用Ubuntu 22.04 LTS——稳定且具有长期支持。购买VPS后,您将获得IP地址和root密码。
通过SSH连接:
ssh root@您的服务器IP1.2 创建用户与安全配置
以root身份工作是不良实践。让我们创建一个具有sudo权限的独立用户:
adduser deployerusermod -aG sudo deployer现在配置SSH密钥以便便捷安全地登录。在本地机器上生成密钥(如果没有的话):
ssh-keygen -t rsa -b 4096将公钥复制到服务器:
ssh-copy-id deployer@您的服务器IP验证密钥登录后,禁用密码登录和root访问:
sudo nano /etc/ssh/sshd_config# 修改:PermitRootLogin noPasswordAuthentication no# 重启SSH:sudo systemctl restart sshd步骤2:安装与配置LEMP栈(Nginx、PHP、MySQL)
2.1 安装Nginx
更新软件包并安装Web服务器:
sudo apt update && sudo apt upgrade -ysudo apt install nginx -y检查状态:
sudo systemctl status nginx2.2 安装PHP 8.x及所需扩展
添加包含最新PHP版本的仓库:
sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/phpsudo apt updatesudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip -y2.3 安装MySQL (MariaDB)
sudo apt install mariadb-server mariadb-client -ysudo mysql_secure_installation为您的应用创建数据库和用户:
sudo mysql -u rootCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';FLUSH PRIVILEGES;EXIT;步骤3:在Nginx中配置虚拟主机(Server Block)
为我们的域名(例如 myapp.ru)创建配置文件:
sudo nano /etc/nginx/sites-available/myapp粘贴以下PHP-FPM模板:
server { listen 80; server_name myapp.ru www.myapp.ru; root /var/www/myapp/public; index index.php index.html;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \\.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; }
location ~ /\\.ht { deny all; }}激活站点并重新加载Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -t # 检查配置sudo systemctl reload nginx步骤4:部署应用代码(Git + Composer)
4.1 克隆仓库
创建项目目录并克隆代码(例如从GitHub):
sudo mkdir -p /var/www/myappsudo chown -R deployer:depl