引言:为什么VPS是PHP项目的理想解决方案
\n开发PHP应用只是工作的一半。另一半同样重要的部分是将其正确部署到服务器。虚拟专用服务器(VPS)提供了共享主机无法比拟的灵活性、控制力和性能。您将获得root访问权限、精细调整环境的能力以及完全的资源隔离。
\n在本指南中,我们将以PHP 8.x、Nginx、MySQL和Git为例,走完从购买服务器到应用上线的全过程。所有步骤均针对最流行的Web服务器操作系统Ubuntu 22.04 LTS进行说明。
\n\n1. VPS初始设置与连接
\n\n1.1. 选择与购买VPS
\n对于PHP应用,最低要求为:1 vCPU、1 GB RAM、20 GB SSD。推荐信誉良好的提供商:DigitalOcean、Linode、Vultr或国内的Timeweb、Beget。
\n购买后,您将获得IP地址、root密码(或SSH密钥)。
\n\n1.2. 通过SSH连接并创建用户
\n连接到服务器(将192.168.1.1替换为您的IP):
ssh root@192.168.1.1\n创建一个非特权用户用于日常工作:
\nadduser deployer\nusermod -aG sudo deployer\n配置SSH密钥以实现安全登录:
\nmkdir -p /home/deployer/.ssh\ncp ~/.ssh/authorized_keys /home/deployer/.ssh/\nchown -R deployer:deployer /home/deployer/.ssh\nchmod 700 /home/deployer/.ssh\nchmod 600 /home/deployer/.ssh/authorized_keys\n禁用root密码登录,编辑/etc/ssh/sshd_config:
PermitRootLogin prohibit-password\nPasswordAuthentication no\n重启SSH:systemctl restart sshd
1.3. 服务器基本安全
\n- \n
- 更新软件包:
apt update && apt upgrade -y\n - 安装fail2ban:
apt install fail2ban -y\n - 配置UFW(防火墙): \n
ufw allow OpenSSH\nufw allow 'Nginx Full'\nufw enable\n\n2. 安装与配置LEMP环境(Linux, Nginx, MySQL, PHP)
\n\n2.1. 安装Nginx
\napt install nginx -y\nsystemctl enable nginx\nsystemctl start nginx\n在浏览器中打开服务器IP地址,检查是否正常工作。您应该看到Nginx的欢迎页面。
\n\n2.2. 安装PHP 8.x和PHP-FPM
\n添加最新PHP版本的仓库:
\napt install software-properties-common -y\nadd-apt-repository ppa:ondrej/php -y\napt update\napt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y\n检查PHP-FPM状态:
\nsystemctl status php8.2-fpm\n\n2.3. 安装MySQL (MariaDB)
\napt install mariadb-server -y\nsystemctl enable mariadb\nsystemctl start mariadb\n运行安全脚本:
\nmysql_secure_installation\n为应用创建数据库和用户:
\nmysql -u root -p\nCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';\nGRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n\n2.4. 配置Nginx虚拟主机
\n为我们的域名(例如myapp.com)创建配置文件:
nano /etc/nginx/sites-available/myapp\n文件内容:
\nserver {\n listen 80;\n server_name myapp.com www.myapp.com;\n root /var/www/myapp/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass unix: