Commit Graph

47 Commits

Author SHA1 Message Date
sky121113
4b8436e6c2 [REFACTOR] 移除 MQTT $SYS 監聽機制並優化 CI/CD 流程
1. 移除 MQTT Gateway 對 $SYS 系統主題的訂閱與解析邏輯,改由遺囑 (Last Will) 統一處理上下線狀態。
2. 更新 EMQX ACL 設定,移除 Gateway 的系統主題存取權限。
3. 優化 CI/CD 流程 (deploy-demo.yaml):將 EMQX 重啟改為熱重載 (Reload),並新增 MQTT Worker 自動重啟。
2026-04-22 13:33:42 +08:00
sky121113
6603828ddc [FIX] 用中間檔案取代 tar pipe,徹底避開 pipefail
改為先 tar -cf /tmp/deploy.tar,再 docker exec tar -xf < 檔案。
不使用 pipe = 不受 pipefail 影響。
|| [ $? -le 1 ] 讓 tar exit 1 (warning) 通過,exit 2+ 才失敗。
2026-04-21 17:02:07 +08:00
sky121113
99463a762e [REFACTOR] 簡化 CI/CD 部署腳本 - 從根本解決 tar 問題
問題根源:
- tar 的 'file changed as we read it' 是警告 (exit 1),非錯誤
- 之前用 PIPESTATUS、pipefail toggle、wait_for_container 等 workaround
  處理,導致腳本越來越複雜且脆弱

根本解法:
1. tar --warning=no-file-changed: 讓 tar 忽略此警告並維持 exit 0
2. 三個容器共享同一份 volume,只需同步一次到主容器
3. 移除所有 workaround 程式碼 (PIPESTATUS/pipefail/wait_for_container)

Step 2 從 ~50 行縮減至 ~15 行。
2026-04-21 16:59:27 +08:00
sky121113
a15eeabde7 [FIX] 修復 pipefail 導致 tar 警告中斷部署腳本
Gitea Actions 的 bash shell 預設啟用 set -eo pipefail。
tar 的 exit 1 (file changed as we read it) 是警告非錯誤,
但 pipefail 會讓它變成管線失敗,set -e 立即中斷腳本。

修復:在 tar 管線前暫時 set +o pipefail,
手動檢查 PIPESTATUS 後再恢復 set -o pipefail。
2026-04-21 16:57:03 +08:00
sky121113
d3cb9b4fee [FIX] 根因修復 - 共享 Volume 下不需對每個容器重複同步
根因:三個容器 (laravel, queue, mqtt-worker) 共享同一份
volume mount (.:/var/www/html)。對 laravel 容器做 tar 同步時,
queue/mqtt-worker 會同時看到檔案變動,導致它們 crash → restart。
接著對 queue 容器做冗餘同步時就會撞上 restarting 狀態。

修復:
1. 只對主容器 (star-cloud-laravel) 同步一次即可
2. 同步完成後等待 worker 容器從短暫重啟中恢復
3. 移除對 queue/mqtt-worker 的冗餘 tar 同步
2026-04-21 16:54:45 +08:00
sky121113
88741dc5ae [FIX] 修復 CI/CD 部署時序競爭 - 容器重啟導致 docker exec 隨機失敗
根因:queue/mqtt-worker 容器可能處於 restarting 狀態,
docker exec 在此狀態下會被拒絕 (exit 1),導致部署隨機失敗。

修復:在 deploy_to 函式中加入 wait_for_container 重試邏輯,
在執行 docker exec 前先等待容器進入 running 狀態 (最多 30 秒)。
2026-04-21 16:52:45 +08:00
sky121113
240667d74f [FIX] 修正 CI/CD Bash PIPESTATUS 重置問題
1. 將 tar_status 與 docker_status 的賦值合併到同一行,解決 local 指令會重置 PIPESTATUS 導致變數為空的問題。
2. 增加變數非空檢查,預防非預期的語法錯誤。
3. 加強錯誤輸出的 Debug 資訊。
2026-04-21 16:39:08 +08:00
sky121113
6eb9de4812 [FIX] 強化 CI/CD Step 2 部署腳本與錯誤診斷
1. 改進 deploy_to 函式,同時驗證 tar 與 docker exec 的結束碼,避免靜默失敗。
2. 增加同步過程的日誌輸出 (tar/docker status),提升故障排查效率。
3. 確保任一容器同步失敗時立即中斷流程,防止不完整的部署。
2026-04-21 16:37:50 +08:00
sky121113
2aa0bf23ab [FIX] 優化 CI/CD 部署流程與更新 MQTT 心跳規範
1. 修復 .gitea/workflows/deploy-demo.yaml:改用 bash 函式處理 tar 同步,容許 exit code 1 (檔案變動警告) 並攔截致命錯誤。
2. 更新 .agents/skills/mqtt-communication-specs/SKILL.md:簡化心跳上報 (Heartbeat) 規範,僅保留 firmware_version 與 temperature 欄位。
2026-04-21 16:01:32 +08:00
sky121113
2bc467bb84 [FIX] 修復 CI/CD 部署時 tar 因檔案變動而報錯的問題
1. 在 deploy-demo.yaml 的 tar 指令加入 --ignore-failed-read 預防非致命報錯。
2. 排除 storage 與 bootstrap/cache 目錄的上傳,避免與容器內運作中的檔案衝突。
2026-04-21 15:52:09 +08:00
sky121113
9844607e84 perf(ci): use tar stream for deployment to improve stability 2026-04-21 14:44:02 +08:00
sky121113
c3b623e5e0 [FIX] 修正 CI/CD 中 docker run 的掛載問題,使用 pipe 方式同步設定檔 2026-04-21 13:13:26 +08:00
sky121113
15c0db6742 [REFACTOR] 整理並合併 CI/CD 準備步驟 (Step 0) 2026-04-21 13:11:58 +08:00
sky121113
cec70f38b5 [FIX] 增加 Step 0.2 同步設定檔至宿主機,解決 EMQX 掛載失敗問題 2026-04-21 13:08:12 +08:00
sky121113
cc966f2de7 [FIX] 優化 CI/CD 掛載邏輯,避免 Docker 自動誤建目錄 2026-04-21 13:06:20 +08:00
sky121113
6ef7e2211c [FIX] 修正 CI/CD .env 被誤建為目錄的問題 2026-04-21 13:04:41 +08:00
sky121113
bb426abbc0 [FIX] 修正 CI/CD 掛載錯誤,增加 acl.conf 目錄清理步驟 2026-04-21 13:02:44 +08:00
sky121113
f4f2ca9175 [STYLE] 調整 Workflow 檔案格式
1. 移除 .gitea/workflows/deploy-demo.yaml 中多餘的空行以符合規範。
2026-04-21 08:53:51 +08:00
sky121113
3a31a1a593 [STYLE] 調整 Workflow 檔案格式以符合規範
1. 在 .gitea/workflows/deploy-demo.yaml 中優化程式碼區塊間距。
2026-04-21 08:23:56 +08:00
sky121113
bf43a33df3 [FEAT] 整合 MQTT 資料流自動化與環境埠號修復
1. 整合 MQTT Gateway 並支援動態 Redis Key 前綴隔離,解決多環境衝突。
2. 修正本地開發環境與 Demo 環境的埠號映射 (80/8080) 與 Vite HMR (5175) 設定。
3. 更新 CI/CD 部署流程,新增自動同步程式碼至 MQTT Worker 與 Queue 容器。
4. 擴充 .env.example 以提供完整的 MQTT/EMQX 相關變數範本。
5. 更新模擬腳本以符合現有測試資料。
2026-04-17 13:22:46 +08:00
sky121113
e3ad7dd44f [DOCS] 修正並對齊 Demo 環境基礎設施資訊
1. 更新 README.md 與 framework.md 中的 Demo 環境網域、伺服器指令、部署路徑。
2. 更新 Gitea Workflow (.gitea/workflows/) 中的 Gitea 官方網址 (gitea.setdomains.work)。
3. 更新遠端部署模板中的舊 IP、路徑與機器人信箱,確保全站文件一致性。
2026-04-17 10:30:05 +08:00
sky121113
2de80cd1bf fix: ensure .env is visible to docker compose up for environment variable interpolation 2026-04-16 17:22:12 +08:00
sky121113
420263680d fix: chown /.npm cache and clean stale node_modules for npm install 2026-04-16 17:11:54 +08:00
sky121113
ebc8b7943f fix: chown after docker cp to fix composer permission denied 2026-04-16 17:08:45 +08:00
sky121113
3cacf9d80f fix: use docker cp to inject source code into container (bypass volume mount issue) 2026-04-16 17:06:59 +08:00
sky121113
d8f41e87b4 fix: force no-cache build to ensure composer is installed in image 2026-04-16 16:31:42 +08:00
sky121113
daddfe0f85 fix: use bash and export PATH to resolve composer not found in docker exec 2026-04-16 16:28:06 +08:00
sky121113
4b8e9f7025 fix: align container name with compose.yaml in gitea actions 2026-04-16 16:14:21 +08:00
sky121113
b56bdc624b fix: correct docker-compose filename in workflow 2026-04-16 15:15:50 +08:00
sky121113
b90e05a91a fix: switch to ubuntu-latest labels for compatibility with current runner 2026-04-16 15:12:14 +08:00
sky121113
566448fe94 chore: setup gitea actions internal deployment for demo-sc-103 2026-04-16 15:07:15 +08:00
sky121113
f60e5a9c72 [FEAT] 優化機台 API 通訊識別、補齊前端必填驗證、並配置 Demo 站隊列自動化部署 🦾🚀 2026-03-26 13:09:48 +08:00
sky121113
cd34724c76 [FIX] 在部署流程中加入 php artisan storage:link 以確保頭像與靜態資源連結正常 2026-03-18 09:36:58 +08:00
sky121113
42f96d54c3 [FIX] 修正部署流程:錨定 rsync 排除路徑,確保 resources/views/vendor 資料夾能正確同步 2026-03-13 17:40:31 +08:00
sky121113
56daf8940b [FEAT] 優化部署流程:加入 RoleSeeder 與 AdminUserSeeder,並實作權限系統基礎架構與多租戶隔離機制 2026-03-13 17:35:22 +08:00
sky121113
21e064ff91 [FIX] 強制 HTTPS 與信任代理以修正 Mixed Content 問題,並加入 CI/CD 自動同步 main 邏輯 2026-03-06 17:16:00 +08:00
sky121113
adea7feb7b [STYLE] 新增 deploy-prod.yaml 佔位檔案以觸發 Gitea 側邊欄分類 2026-03-06 17:09:16 +08:00
sky121113
2a6170b4ce [STYLE] 重構 CI/CD 文件名為 deploy-demo.yaml 以對齊 ERP UI 規範 2026-03-06 17:07:02 +08:00
sky121113
acc81b2156 [FEAT] 重構 CI/CD 工作流並修正容器端口配置以對齊 Demo 環境 2026-03-06 16:49:13 +08:00
sky121113
88c3678a4d chore: 加入 Docker 8.5 Dockerfile 並恢復 deploy.yaml 原始版本
- 加入 docker/8.5 目錄(從 Laravel Sail 8.4 複製)
- 恢復 deploy.yaml 到原始版本
2026-01-13 11:04:58 +08:00
sky121113
649cbaab02 fix: 修正部署腳本用戶權限問題
- 將 docker exec 用戶從 -u 1000:1000 改為 -u sail(容器內 sail UID 是 1337)
- 簡化權限修正為 chown -R sail:sail /var/www/html
- 同步更新 Demo 與正式環境的部署腳本

問題根因:容器內 sail 用戶 UID 是 1337,非預期的 1000,導致 npm install 無權寫入
2026-01-13 10:54:29 +08:00
sky121113
9c2ef60463 fix: 更新部署腳本,完全清除 node_modules 後重建以解決權限問題
- 在 npm install 前先 rm -rf node_modules 再重建
- 確保 /.npm 和 node_modules 都有正確的 sail 擁有者
- 同步更新 Demo 與正式環境的部署腳本
2026-01-13 10:48:20 +08:00
sky121113
f67a1dc11e style: 調整 deploy.yaml 格式 2026-01-13 10:45:13 +08:00
sky121113
a578c7f261 fix: 修正部署流程中的 npm 權限問題
- 在 npm install 前先用 root 身份修正 /.npm 和 node_modules 權限
- 加入 npm cache clean --force 避免快取權限衝突
- 同時修正 Demo 與正式環境的部署腳本
- 解決 EACCES 與 ENOTEMPTY 錯誤
2026-01-13 10:39:05 +08:00
sky121113
55ba08c88f chore: 更新 deploy.yaml 部署流程 2026-01-12 13:21:07 +08:00
sky121113
96b22cd577 fix: 修正 Step 4 部署錯誤,改用 SSH action 在 demo 伺服器執行 docker exec 2026-01-12 11:46:56 +08:00
sky121113
2aff99fc76 add deploy 2026-01-12 11:27:34 +08:00