在Debian系統上,Laravel項目的自動化部署可通過Git鉤子、**CI/CD工具(GitHub Actions/Jenkins)或專用部署工具(Laravel Forge/Envoyer)**實現。以下是具體步驟:
在部署前,需確保Debian服務器安裝必要的軟件包:
sudo apt update && sudo apt upgrade -y
sudo apt install -y git nginx php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl php8.2-xml php8.2-mbstring php8.2-zip unzip composer mariadb-server
配置Nginx虛擬主機(以example.com
為例):
sudo nano /etc/nginx/sites-available/example.com
添加以下內容(替換example.com
為你的域名):
server {
listen 80;
server_name example.com;
root /var/www/example.com/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
啟用配置并重啟Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo systemctl restart nginx
創建Laravel項目并配置環境:
cd /var/www
composer create-project laravel/laravel example.com
cd example.com
cp .env.example .env
php artisan key:generate
設置目錄權限:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
Git鉤子可在代碼推送時自動觸發部署腳本,適合小型項目。
cd /var/repo
sudo mkdir your-laravel-repo.git
cd your-laravel-repo.git
sudo git init --bare
hooks
目錄下創建post-receive
文件:sudo nano /var/repo/your-laravel-repo.git/hooks/post-receive
添加以下內容(替換/var/www/example.com
為項目部署路徑):#!/bin/bash
TARGET="/var/www/example.com"
GIT_DIR="/var/repo/your-laravel-repo.git"
BRANCH="main"
while read oldrev newrev ref
do
if [[ $ref = refs/heads/$BRANCH ]];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
cd $TARGET
composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:clear
chown -R www-data:www-data $TARGET/storage
chown -R www-data:www-data $TARGET/bootstrap/cache
systemctl restart nginx
echo "Deployment completed."
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done
sudo chmod +x /var/repo/your-laravel-repo.git/hooks/post-receive
git remote add production ssh://user@your-server-ip/var/repo/your-laravel-repo.git
推送代碼時自動觸發部署:git push production main
GitHub Actions適合需要版本控制集成的項目,無需在服務器上安裝額外工具。
.github/workflows/deploy.yml
:name: Deploy Laravel to Debian
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, xml, curl, zip
- name: Install dependencies
run: composer install --optimize-autoloader --no-dev
- name: Generate application key
run: php artisan key:generate
- name: Deploy to server via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/example.com
git pull origin main
composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:clear
systemctl restart nginx
Settings > Secrets and variables > Actions
,添加以下變量:
SERVER_HOST
: Debian服務器IP或域名SERVER_USER
: 服務器SSH用戶名(如ubuntu
)SSH_PRIVATE_KEY
: 服務器SSH私鑰(生成ssh-keygen -t rsa -b 4096
,將公鑰添加到服務器~/.ssh/authorized_keys
)main
分支,GitHub Actions會自動執行部署流程。Laravel Forge是Laravel官方提供的服務器管理工具,支持一鍵部署、Git集成、數據庫備份等功能。
composer install
、migrate
等命令)。Laravel Envoyer專為Laravel設計,支持零停機部署、實時監控、回滾功能。
composer install
、migrate
)。以上方法覆蓋了不同場景下的自動化部署需求,可根據項目規模和團隊習慣選擇合適的方式。