🗣 Wd提问: 自动化部署源码php
🤖 Ai回答: 自动化部署 PHP 源码是一个常见的 DevOps 需求,尤其在使用 Git、CI/CD 工具(如 Jenkins、GitHub Actions、GitLab CI)或脚本自动化时。下面我将为你提供一套完整的自动化部署 PHP 源码方案,涵盖从代码提交到服务器上线的全流程。
✅ 自动化部署 PHP 源码完整方案
🎯 目标
当开发者 `git push` 到 `main` 或 `production` 分支时,自动:
1、拉取最新代码
2、安装 Composer 依赖
3、清理缓存(如 Laravel)
4、重启 Web 服务(Nginx / Apache)
5、发送通知(可选)
🧩 一、服务器环境准备(Linux Ubuntu/CentOS)
1、安装必要组件
bash
更新系统
sudo apt update && sudo apt upgrade -y
安装 Nginx / Apache(选其一)
sudo apt install nginx -y
安装 PHP 8.1+(推荐)
sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-curl php8.1-mbstring php8.1-xml php8.1-zip -y
安装 Composer
curl -sS https://getcomposer.org/installer | sudo php install-dir=/usr/local/bin filename=composer
安装 Git
sudo apt install git -y
创建部署用户(安全最佳实践)
sudo adduser deployer
sudo usermod -aG www-data deployer 让部署用户有权限写入网站目录
2、设置网站目录权限
bash
假设网站根目录为 /var/www/html/myapp
sudo mkdir -p /var/www/html/myapp
sudo chown -R deployer:www-data /var/www/html/myapp
sudo chmod -R 775 /var/www/html/myapp
sudo chmod g+s /var/www/html/myapp 设置 SGID,确保新文件继承组权限
💡 注意:PHP-FPM 通常以 `www-data` 用户运行,所以部署用户必须属于 `www-data` 组。
🚀 二、部署脚本(deploy.sh)
在服务器上创建部署脚本:
bash
在 /home/deployer/ 下创建部署脚本
nano /home/deployer/deploy.sh
✅ deploy.sh 内容:
bash
!/bin/bash
部署配置
APP_PATH=/var/www/html/myapp
REPO=https://github.com/yourname/your-php-project.git
BRANCH=main
COMPOSER_OPTS=optimize-autoloader no-dev
日志文件
LOG=/var/log/deploy.log
记录开始时间
echo [$(date)] 开始部署..、 $LOG
进入项目目录
cd $APP_PATH { echo ❌ 项目目录不存在 $LOG; exit 1; }
拉取最新代码
echo ➡️ 拉取代码..、 $LOG
git fetch origin
git checkout $BRANCH
git reset hard origin/$BRANCH
安装 Composer 依赖
if [ -f composer.json ]; then
echo ➡️ 安装 Composer 依赖..、 $LOG
sudo -u www-data composer install $COMPOSER_OPTS
fi
清理缓存(适用于 Laravel)
if [ -f artisan ]; then
echo ➡️ 清理 Laravel 缓存..、 $LOG
sudo -u www-data php artisan config:clear
sudo -u www-data php artisan cache:clear
sudo -u www-data php artisan view:clear
sudo -u www-data php artisan route:clear
fi
设置权限(确保可写)
echo ➡️ 设置文件权限..、 $LOG
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
重启 Web 服务
echo ➡️ 重启 Nginx..、 $LOG
sudo systemctl reload nginx
成功提示
echo ✅ 部署完成! $LOG
echo [$(date)] 部署成功! | mail -s PHP 部署通知 your-email@65.hk 可选邮件通知
🛡️ 赋予执行权限
bash
chmod +x /home/deployer/deploy.sh
🔐 三、SSH 密钥认证(避免手动输入密码)
1、在本地生成 SSH 密钥(如果还没有)
bash
ssh-keygen -t ed25519 -C your_email@65.hk
2、将公钥添加到服务器
bash
将本地 ~/.ssh/id_ed25519.pub 内容复制到服务器的 ~/.ssh/authorized_keys
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo 你的公钥内容 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
3、测试连接(本地执行)
bash
ssh deployer@your-server-ip
✅ 如果无需密码登录成功,说明配置正确。
🔄 四、自动化触发方式(推荐 2 种)
✅ 方式一:使用 GitHub Actions(最推荐)
在你的 PHP 项目根目录创建:
yaml
.github/workflows/deploy.yml
name: Deploy PHP App
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
name: Checkout code
uses: actions/checkout@v4
name: SSH Deploy
uses: appleboy/ssh-action@v0.3.1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/deployer
./deploy.sh
📁 在 GitHub 项目 Secrets 中添加:
| 名称 | 值 |
| `HOST` | `your-server-ip` |
| `USERNAME` | `deployer` |
| `SSH_KEY` | 私钥内容(从本地 `~/.ssh/id_ed25519` 复制,包含 `BEGIN OPENSSH PRIVATE KEY`) |
⚠️ 注意:私钥需是完整的一段,不要换行或加空格。
✅ 方式二:使用 Webhook + 服务器监听(进阶)
1、在 GitHub 项目 → Settings → Webhooks → Add webhook
Payload URL: `http://your-server-ip/deploy-webhook`
Content type: `application/json`
Trigger: `Just the push event`
2、在服务器上创建一个简单的 PHP 接收脚本:
php
/var/www/html/deploy-webhook.php
<?php
header('Content-Type: application/json');
$secret = 'your-webhook-secret-123';
$payload = file_get_contents('php://input');
$sig = 'sha256=' 、hash_hmac('sha256', $payload, $secret);
if ($_SERVER['HTTP_X_HUB_SIGNATURE_256'] !== $sig) {
http_response_code(401);
echo json_encode(['error' = 'Invalid signature']);
exit;
}
// 执行部署脚本
$output = shell_exec('/home/deployer/deploy.sh 2&1');
echo json_encode(['status' = 'success', 'output' = $output]);
注意:此方式需确保 `shell_exec` 被允许,且 `deploy.sh` 能被 www-data 执行(需配置 sudo 权限)。
📦 五、可选增强功能
| 功能 | 实现方式 |
| 回滚机制 | 保留上一次发布版本,部署失败时回退 `git reset hard HEAD~1` |
| 蓝绿部署 | 使用两个目录 `/var/www/html/app-v1`, `/var/www/html/app-v2`,通过 Nginx 切换 `root` |
| 健康检查 | 部署后请求 `/health` 接口,失败则回滚 |
| 通知 | 企业微信、钉钉、Slack Webhook |
| 监控 | 使用 Prometheus + Grafana 监控部署状态 |
✅ 最佳实践总结
| 项目 | 建议 |
| 🚫 不要使用 root 部署 | 使用专用用户 `deployer` |
| ✅ 使用 Git 标签版本 | 用 `v1.0.0` 标签发布,避免直接 push main |
| ✅ 部署前备份 | `cp -r app app-backup-$(date +%Y%m%d)` |
| ✅ 本地测试 | 在本地 `composer install` + `php -S localhost:8000` 测试 |
| ✅ 日志记录 | 所有操作记录到 `/var/log/deploy.log` |
| ✅ 监控告警 | 部署失败时自动发钉钉/邮件 |
🧪 测试部署
1、在本地修改一个 PHP 文件(比如 `index.php`)
2、`git add 、&& git commit -m test deploy && git push origin main`
3、查看 GitHub Actions 是否运行成功
4、登录服务器查看日志:
bash
tail -f /var/log/deploy.log
❓ 常见问题
Q:Composer 安装慢?
→ 使用阿里云镜像:
bash
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
Q:权限错误(文件无法写入)?
→ 确保 `storage/` 和 `bootstrap/cache/` 属于 `www-data:www-data`,且权限为 `775`
Q:Nginx 403 Forbidden?
→ 检查 `root` 是否指向正确目录,`index` 是否包含 `index.php`
✅ 结语
你现在拥有一个企业级自动化部署 PHP 源码的流水线,无需手动 FTP、无需 SSH 登录服务器,只需 `git push`,代码即上线!
💡 推荐搭配:Docker + Docker Compose 更进一步实现环境隔离,但对简单 PHP 项目,上述方案已足够高效稳定。
如需我为你生成 Laravel / WordPress / ThinkPHP 的专属部署模板,也可以告诉我你的框架!
📣 商家广告:





0
IP地址: 145.95.43.183
搜索次数: 1
提问时间: 2025-11-10 16:03:48
🛒 域名购买:
4666.com.cn
76.gold
529.net.cn
txqg.cn
s-y.com.cn
wangai.net
suosou.com.cn
ltkj.net
87.gold
368.net.cn
❓️ 热门提问:
ip解释
机房供电系统
欧洲好的vps
云主机 操作系统
如何配置二级域名
存储服务器怎么连接
弱电智能化机房建设
gpu服务器价格多少
vps和云服务器有什么区别
广告设计接单网站
豌豆Ai站群搜索引擎系统
🌐 域名评估:
souzi.com.cn
81.biz
si.tw.cn
rr.xz.cn
cgtq.cn
6-6.com.cn
5a.nm.cn
qb.top
yu8.fj.cn
openseek.co
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
霸屏神器
聊天室网页版
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。