Files
star-erp/.gitea/workflows/deploy.yaml
sky121113 fd3ddd0bac
All checks were successful
Koori-ERP-Deploy-System / deploy-demo (push) Has been skipped
Koori-ERP-Deploy-System / deploy-production (push) Successful in 57s
mama
2026-01-06 14:12:23 +08:00

169 lines
6.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Koori-ERP-Deploy-System
on:
push:
branches:
- demo
- main
jobs:
# --- 1. Demo 環境部署 (103 本機) ---
deploy-demo:
if: github.ref == 'refs/heads/demo'
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
github-server-url: http://192.168.0.103:3000
repository: ${{ github.repository }}
- name: Deploy to 103 Demo
run: |
cp .env.example .env
# 設定 Demo 專用的 Key
sed -i "s|APP_KEY=.*|APP_KEY=${{ secrets.APP_KEY }}|g" .env
docker compose up -d --build --wait
# 同步檔案到容器內
tar --exclude='.git' --exclude='node_modules' --exclude='vendor' -cf - . | docker exec -i koori-erp-laravel tar -xf - -C /var/www/html
docker exec koori-erp-laravel chown -R 1000:1000 /var/www/html
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "composer install && npm install && npm run build && php artisan migrate --force && php artisan optimize:clear"
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
# --- 2. 正式環境部署 (erp.koori.tw:2224) ---
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
# - name: Checkout Code
# uses: actions/checkout@v3
# with:
# github-server-url: http://192.168.0.103:3000
# repository: ${{ github.repository }}
# # 使用 rsync 透過 2224 Port 推送代碼
# - name: Push Code to Production
# run: |
# # 1. 快速安裝工具
# apt-get update && apt-get install -y rsync openssh-client
# # 2. 準備鑰匙
# mkdir -p ~/.ssh
# echo "${{ secrets.PROD_SSH_KEY }}" > ~/.ssh/id_rsa_prod
# chmod 600 ~/.ssh/id_rsa_prod
# # 3. 精簡後的同步指令 (只排除 .git)
# rsync -avz --delete \
# --exclude='.git' \
# --exclude='.env' \
# -e "ssh -p 2224 -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no" \
# ./ root@erp.koori.tw:/var/www/koori-erp-prod/
# rm ~/.ssh/id_rsa_prod
# # 遠端執行 Docker 指令
# - name: Remote Docker Commands
# uses: appleboy/ssh-action@master
# with:
# host: erp.koori.tw
# port: 2224 # <--- 這裡指定了 2224 Port
# username: root
# key: ${{ secrets.PROD_SSH_KEY }}
# script: |
# cd /var/www/koori-erp-prod
# chown -R 1000:1000 .
# # 2. 啟動容器
# WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
# # 3. 執行 Laravel 正式環境優化流程
# docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
# composer install --no-dev --optimize-autoloader &&
# npm install &&
# npm run build &&
# php artisan migrate --force &&
# php artisan optimize:clear &&
# php artisan optimize
# "
# docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
# docker restart koori-erp-laravel
- name: Checkout Code
uses: actions/checkout@v3
with:
github-server-url: http://192.168.0.103:3000
repository: ${{ github.repository }}
- name: Step 1 - Push Code to Production
run: |
apt-get update && apt-get install -y rsync openssh-client
mkdir -p ~/.ssh
echo "${{ secrets.PROD_SSH_KEY }}" > ~/.ssh/id_rsa_prod
chmod 600 ~/.ssh/id_rsa_prod
rsync -avz --delete \
--exclude='.git' \
--exclude='.env' \
--exclude='node_modules' \
--exclude='vendor' \
-e "ssh -p 2224 -i ~/.ssh/id_rsa_prod -o StrictHostKeyChecking=no" \
./ root@erp.koori.tw:/var/www/koori-erp-prod/
rm ~/.ssh/id_rsa_prod
# 2. 啟動或重建容器502 最容易發生在這裡的瞬間)
- name: Step 2 - Container Up & Health Check
uses: appleboy/ssh-action@master
with:
host: erp.koori.tw
port: 2224
username: root
key: ${{ secrets.PROD_SSH_KEY }}
script: |
cd /var/www/koori-erp-prod
chown -R 1000:1000 .
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
echo "容器狀態:" && docker ps --filter "name=koori-erp-laravel"
# 3. 處理後端與前端依賴(這時網站可能因為沒 vendor 呈現 500/502
- name: Step 3 - Composer & NPM Build
uses: appleboy/ssh-action@master
with:
host: erp.koori.tw
port: 2224
username: root
key: ${{ secrets.PROD_SSH_KEY }}
script: |
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
composer install --no-dev --optimize-autoloader &&
npm install &&
npm run build
"
# 4. 處理資料庫與 Laravel 快取
- name: Step 4 - Database & Optimization
uses: appleboy/ssh-action@master
with:
host: erp.koori.tw
port: 2224
username: root
key: ${{ secrets.PROD_SSH_KEY }}
script: |
docker exec -u 1000:1000 -w /var/www/html koori-erp-laravel sh -c "
php artisan migrate --force &&
php artisan optimize:clear &&
php artisan optimize &&
php artisan view:cache
"
# 5. 最後權限修正與重啟(一發入魂,解決 502
- name: Step 5 - Final Permission & Service Restart
uses: appleboy/ssh-action@master
with:
host: erp.koori.tw
port: 2224
username: root
key: ${{ secrets.PROD_SSH_KEY }}
script: |
docker exec koori-erp-laravel chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
echo "正在進行最後重啟以確保服務生效..."
docker restart koori-erp-laravel
echo "部署完成!"