如何在Ubuntu中部署PHP项目
在Ubuntu上部署PHP项目需完成环境准备、Web服务器配置、项目部署、数据库设置及安全优化五大步骤,以下是详细操作指南:
1. 准备系统环境
首先更新系统软件包,确保后续安装的组件为最新版本:
sudo apt update && sudo apt upgrade -y
2. 安装Web服务器(Apache/Nginx)
根据项目需求选择Web服务器,以下分别介绍Apache和Nginx的安装步骤:
2.1 安装Apache(适合传统项目)
sudo apt install apache2 -y
sudo systemctl start apache2 && sudo systemctl enable apache2
验证Apache是否运行:浏览器访问http://服务器IP,若显示Apache默认欢迎页面则说明成功。
2.2 安装Nginx(适合高并发项目)
sudo apt install nginx -y
sudo systemctl start nginx && sudo systemctl enable nginx
验证Nginx是否运行:浏览器访问http://服务器IP,若显示Nginx默认欢迎页面则说明成功。
3. 安装PHP及必要扩展
PHP项目需安装核心组件及常用扩展(如MySQL、GD、MBString等),以下以PHP 8.3为例(可根据项目需求调整版本):
# 添加Ondřej Surý的PHP PPA(提供最新稳定版)
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# 安装PHP及扩展
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml -y
# 启动PHP-FPM并设置开机自启
sudo systemctl start php8.3-fpm && sudo systemctl enable php8.3-fpm
验证PHP是否安装成功:
php -v
应输出PHP版本信息(如PHP 8.3.x)。
4. 配置Web服务器支持PHP
4.1 Apache配置(集成PHP-FPM)
Apache需通过proxy_fcgi模块与PHP-FPM通信,步骤如下:
- 启用必要模块:
sudo a2enmod proxy proxy_fcgi rewrite - 编辑虚拟主机配置(以默认站点为例):
修改sudo nano /etc/apache2/sites-available/000-default.conf块,添加PHP处理规则::80 > ServerAdmin webmaster@localhost DocumentRoot /var/www/html/your_project # 替换为项目目录 ServerName yourdomain.com # 替换为域名或IPOptions Indexes FollowSymLinks AllowOverride All # 允许.htaccess覆盖 Require all granted # PHP-FPM处理配置 SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost" - 启用站点并重启Apache:
sudo a2ensite 000-default.conf sudo systemctl reload apache2
4.2 Nginx配置(支持PHP解析)
Nginx通过fastcgi_pass指令将PHP请求转发给PHP-FPM,步骤如下:
- 编辑默认站点配置:
修改sudo nano /etc/nginx/sites-available/defaultserver块,添加PHP处理规则:server { listen 80; server_name yourdomain.com; # 替换为域名或IP root /var/www/html/your_project; # 替换为项目目录 index index.php index.html index.htm; location / { try_files $uri $uri/ =404; # 尝试匹配文件,否则返回404 } location ~ \.php$ { include snippets/fastcgi-php.conf; # 引入FastCGI配置 fastcgi_pass unix:/run/php/php8.3-fpm.sock; # PHP-FPM socket路径(根据版本调整) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 可选:限制访问.htaccess文件 location ~ /\.ht { deny all; } } - 测试Nginx配置语法并重启:
sudo nginx -t && sudo systemctl reload nginx
5. 部署PHP项目
将本地项目文件上传至Web服务器目录(如/var/www/html/your_project),可使用scp、rsync或FTP工具(如FileZilla):
# 示例:使用scp上传项目(本地目录为~/project,服务器IP为192.168.1.100)
scp -r ~/project/* user@192.168.1.100:/var/www/html/your_project
设置项目目录权限(确保Web服务器用户www-data有读写权限):
sudo chown -R www-data:www-data /var/www/html/your_project
sudo find /var/www/html/your_project -type f -exec chmod 644 {} \; # 文件权限644
sudo find /var/www/html/your_project -type d -exec chmod 755 {} \; # 目录权限755
6. 配置数据库(如需)
若项目需要数据库(如MySQL),需完成以下步骤:
- 安装MySQL服务器:
sudo apt install mysql-server -y sudo systemctl start mysql && sudo systemctl enable mysql - 运行安全脚本(设置root密码、移除匿名用户等):
sudo mysql_secure_installation - 登录MySQL并创建数据库、用户:
在MySQL shell中执行:sudo mysql -u root -pCREATE DATABASE your_database; -- 创建数据库 CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'your_password'; -- 创建用户 GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost'; -- 授权 FLUSH PRIVILEGES; -- 刷新权限 EXIT; - 修改项目配置文件(如
config.php),填入数据库信息:define('DB_HOST', 'localhost'); define('DB_USER', 'your_user'); define('DB_PASS', 'your_password'); define('DB_NAME', 'your_database');
7. 测试部署
在浏览器中访问http://yourdomain.com(或服务器IP),若项目首页正常显示,则说明部署成功。若遇到问题,可通过以下日志排查:
- Apache错误日志:
/var/log/apache2/error.log - Nginx错误日志:
/var/log/nginx/error.log - PHP错误日志:
/var/log/php8.3-fpm.log(需在php.ini中开启log_errors = On)
8. 安全优化(可选但重要)
- 配置防火墙:使用UFW允许HTTP/HTTPS流量:
sudo ufw allow 'Apache Full' # 或 'Nginx Full' sudo ufw enable - 启用HTTPS:使用Let’s Encrypt免费获取SSL证书:
sudo apt install certbot python3-certbot-apache # Apache # 或 sudo apt install certbot python3-certbot-nginx # Nginx sudo certbot --apache -d yourdomain.com # 替换为域名 sudo certbot --nginx -d yourdomain.com # 替换为域名 - 关闭调试模式:上线后将项目配置中的
display_errors设置为Off,避免暴露敏感信息。
通过以上步骤,即可在Ubuntu上成功部署PHP项目。根据项目需求(如使用Composer、Redis等),可进一步调整配置。