溫馨提示×

如何在Debian上利用Laravel進行自動化部署

小樊
42
2025-10-17 02:34:57
欄目: 智能運維

如何在Debian上利用Laravel實現自動化部署

在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鉤子實現自動化部署

Git鉤子可在代碼推送時自動觸發部署腳本,適合小型項目。

  1. 在服務器上創建裸倉庫
    cd /var/repo
    sudo mkdir your-laravel-repo.git
    cd your-laravel-repo.git
    sudo git init --bare
    
  2. 創建部署腳本
    在裸倉庫的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
    
  3. 賦予執行權限
    sudo chmod +x /var/repo/your-laravel-repo.git/hooks/post-receive
    
  4. 本地配置遠程倉庫
    在本地Laravel項目中添加遠程倉庫:
    git remote add production ssh://user@your-server-ip/var/repo/your-laravel-repo.git
    
    推送代碼時自動觸發部署:
    git push production main
    

三、使用GitHub Actions實現自動化部署

GitHub Actions適合需要版本控制集成的項目,無需在服務器上安裝額外工具。

  1. 在項目根目錄創建.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
    
  2. 配置GitHub Secrets
    進入項目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
  3. 推送代碼觸發部署
    將代碼推送到GitHub的main分支,GitHub Actions會自動執行部署流程。

四、使用專用部署工具(Laravel Forge/Laravel Envoyer)

1. Laravel Forge(官方推薦)

Laravel Forge是Laravel官方提供的服務器管理工具,支持一鍵部署、Git集成、數據庫備份等功能。

  • 步驟
    • 注冊Forge賬號,添加Debian服務器(提供SSH訪問權限)。
    • 在Forge中創建Laravel項目,關聯Git倉庫(GitHub/GitLab/Bitbucket)。
    • 配置部署腳本(自動執行composer install、migrate等命令)。
    • 點擊“Deploy”按鈕即可觸發自動化部署。
  • 優勢:界面友好、支持零停機部署、集成Let’s Encrypt SSL。

2. Laravel Envoyer(零停機部署)

Laravel Envoyer專為Laravel設計,支持零停機部署、實時監控、回滾功能。

  • 步驟
    • 注冊Envoyer賬號,添加Debian服務器。
    • 配置項目倉庫和部署路徑。
    • 設置部署鉤子(如composer install、migrate)。
    • 點擊“Deploy Now”即可實現零停機部署。
  • 優勢:零停機、實時健康檢查、一鍵回滾。

以上方法覆蓋了不同場景下的自動化部署需求,可根據項目規模和團隊習慣選擇合適的方式。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女