配置 Envoy 部署到線上 Server

2020/11/15 LaravelDeploy
Photo by SpaceX (https://unsplash.com/@spacex) on Unsplash (https://unsplash.com/)
Photo by SpaceX on Unsplash

目前都是開發小網站,還沒有時間去研究 CI/CD,不過最近一時興起,把部署的動作改成半自動化。本篇來紀錄使用 Envoy 部署網站到線上 Server 時踩的的一些小坑。

# 設定 Envoy & 讀取 .env 變數

為了不要讓遠端主機的 IP 位置進版控,這裡先設定一些環境變數 (可以在 .env.example 也複製一份空的):

.env

DEPLOY_SSH_HOST=root@host
DEPLOY_ROOT=/home/USER/public_html/SITE

DEPLOY_SSH_HOST 是遠端主機的 IP 位置,DEPLOY_ROOT 是主機中網站的根目錄。

然後就可以寫 Envoy.blade.php 了,引入 DotEnv 套件就可以在 Envoy.blade.php 裡使用環境變數:

Envoy.blade.php

@include('vendor/autoload.php')

@setup
    (\Dotenv\Dotenv::createImmutable(__DIR__)->load());
@endsetup

@servers(['production' => env('DEPLOY_SSH_HOST')])

@task('deploy')
    cd {{ env('DEPLOY_ROOT') }}
    git pull origin main
    {{ env('DEPLOY_COMPOSER_PATH', 'composer') }} install --no-dev -o
    php artisan migrate --force
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
@endtask

如果使用 Windows + Homestead 組合的話,因為 Envoy 是不能在 Windows 中執行,增加下面的部署腳本,自動進 Homestead 裡執行 Envoy 部署網站:

deploy.sh

cd ~/Homestead && vagrant ssh -c "cd code/SITE && envoy run deploy"