如何在Ubuntu中部署PHP项目
在Ubuntu上部署PHP项目需完成环境准备、Web服务器配置、项目部署、数据库设置及安全优化五大步骤,以下是详细操作指南:
首先更新系统软件包,确保后续安装的组件为最新版本:
sudo apt update && sudo apt upgrade -y
根据项目需求选择Web服务器,以下分别介绍Apache和Nginx的安装步骤:
sudo apt install apache2 -y
sudo systemctl start apache2 && sudo systemctl enable apache2
验证Apache是否运行:浏览器访问http://服务器IP,若显示Apache默认欢迎页面则说明成功。
sudo apt install nginx -y
sudo systemctl start nginx && sudo systemctl enable nginx
验证Nginx是否运行:浏览器访问http://服务器IP,若显示Nginx默认欢迎页面则说明成功。
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)。
Apache需通过proxy_fcgi模块与PHP-FPM通信,步骤如下:
sudo a2enmod proxy proxy_fcgi rewrite
sudo nano /etc/apache2/sites-available/000-default.conf
修改<VirtualHost *:80>块,添加PHP处理规则:<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/your_project # 替换为项目目录
ServerName yourdomain.com # 替换为域名或IP
<Directory /var/www/html/your_project>
Options Indexes FollowSymLinks
AllowOverride All # 允许.htaccess覆盖
Require all granted
</Directory>
# PHP-FPM处理配置
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
sudo a2ensite 000-default.conf
sudo systemctl reload apache2
Nginx通过fastcgi_pass指令将PHP请求转发给PHP-FPM,步骤如下:
sudo nano /etc/nginx/sites-available/default
修改server块,添加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;
}
}
sudo nginx -t && sudo systemctl reload nginx
将本地项目文件上传至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
若项目需要数据库(如MySQL),需完成以下步骤:
sudo apt install mysql-server -y
sudo systemctl start mysql && sudo systemctl enable mysql
sudo mysql_secure_installation
sudo mysql -u root -p
在MySQL shell中执行:CREATE 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');
在浏览器中访问http://yourdomain.com(或服务器IP),若项目首页正常显示,则说明部署成功。若遇到问题,可通过以下日志排查:
/var/log/apache2/error.log/var/log/nginx/error.log/var/log/php8.3-fpm.log(需在php.ini中开启log_errors = On)sudo ufw allow 'Apache Full' # 或 'Nginx Full'
sudo ufw enable
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等),可进一步调整配置。