配置 Envoy 部署到線上 Server

目前都是開發小網站,還沒有時間去研究 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"