PHP项目如何部署到服务器

wen PHP项目 30

本文目录导读:

PHP项目如何部署到服务器

  1. 服务器环境准备
  2. 项目文件上传
  3. Nginx配置
  4. 文件权限设置
  5. 环境配置
  6. 数据库配置
  7. 使用Docker部署(推荐)
  8. 部署脚本示例
  9. 安全配置
  10. 监控和维护

我来详细说明PHP项目部署到服务器的完整流程:

服务器环境准备

基础环境配置

# Ubuntu/Debian系统
sudo apt update
sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml
# CentOS/RHEL系统
sudo yum install epel-release
sudo yum install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml

PHP版本选择

# 查看当前PHP版本
php -v
# 安装特定版本(如PHP 8.1)
sudo apt install php8.1 php8.1-fpm php8.1-mysql

项目文件上传

使用SCP上传

# 从本地上传到服务器
scp -r /local/project user@server_ip:/var/www/html/
# 如果使用SSH密钥
scp -i ~/.ssh/id_rsa -r /local/project user@server_ip:/var/www/html/

使用Git部署

# 服务器上克隆项目
cd /var/www/html
git clone https://github.com/username/project.git
# 更新项目
cd project
git pull origin main

Nginx配置

创建站点配置文件

# /etc/nginx/sites-available/project.conf
server {
    listen 80;
    server_name your_domain.com;
    root /var/www/html/project/public;
    index index.php index.html;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.ht {
        deny all;
    }
}

启用站点

# 创建软链接
sudo ln -s /etc/nginx/sites-available/project.conf /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx

文件权限设置

# 设置目录权限
sudo chown -R www-data:www-data /var/www/html/project
sudo chmod -R 755 /var/www/html/project
sudo chmod -R 775 /var/www/html/project/storage
sudo chmod -R 775 /var/www/html/project/bootstrap/cache

环境配置

复制环境变量文件

# Laravel项目
cp .env.example .env
php artisan key:generate
# 其他框架类似

修改.env配置

APP_URL=http://your_domain.com
DB_HOST=localhost
DB_DATABASE=your_database
DB_USERNAME=your_user
DB_PASSWORD=your_password

数据库配置

# 创建数据库
mysql -u root -p
CREATE DATABASE project_db;
CREATE USER 'project_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON project_db.* TO 'project_user'@'localhost';
FLUSH PRIVILEGES;
# 导入数据库
mysql -u project_user -p project_db < database.sql
# 运行迁移
php artisan migrate

使用Docker部署(推荐)

docker-compose.yml示例

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./public:/var/www/html/public
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - php
  php:
    image: php:8.1-fpm
    volumes:
      - .:/var/www/html
    environment:
      - DB_HOST=db
      - DB_DATABASE=project_db
      - DB_USERNAME=user
      - DB_PASSWORD=password
  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: project_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: root_password
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

部署脚本示例

#!/bin/bash
# deploy.sh
# 变量
PROJECT_DIR="/var/www/html/project"
GIT_REPO="https://github.com/username/project.git"
# 拉取最新代码
cd $PROJECT_DIR
git pull origin main
# 安装依赖
composer install --no-dev --optimize-autoloader
# 设置权限
chown -R www-data:www-data $PROJECT_DIR
chmod -R 755 $PROJECT_DIR/storage
chmod -R 755 $PROJECT_DIR/bootstrap/cache
# 清理缓存
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 运行迁移
php artisan migrate --force
echo "部署完成!"

安全配置

防火墙设置

# 开放端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

SSL证书配置(Let's Encrypt)

# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your_domain.com

监控和维护

日志查看

# Nginx访问日志
tail -f /var/log/nginx/access.log
# PHP错误日志
tail -f /var/log/php8.1-fpm.log

性能优化

# 启用OPcache
# 编辑php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000

注意事项:

  • 生产环境禁止开启错误显示
  • 定期备份数据库和项目文件
  • 使用环境变量管理敏感信息
  • 保持系统和依赖的更新

这样配置后,你的PHP项目就可以正常运行了,具体步骤可能根据项目框架略有不同,但大体流程是一样的。

抱歉,评论功能暂时关闭!