[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 同步
This commit is contained in:
parent
88741dc5ae
commit
d3cb9b4fee
@ -60,38 +60,32 @@ jobs:
|
||||
return 1
|
||||
}
|
||||
|
||||
deploy_to() {
|
||||
local container=$1
|
||||
echo ">>> Syncing code to $container..."
|
||||
echo ">>> Syncing code to star-cloud-laravel..."
|
||||
# 三個容器共享同一份 volume (.:/var/www/html),
|
||||
# 只需同步至主容器一次,queue/mqtt-worker 會自動看到變更。
|
||||
tar --exclude='.git' --exclude='node_modules' --exclude='vendor' --exclude='storage' --exclude='bootstrap/cache' -cf - . \
|
||||
| docker exec -i star-cloud-laravel tar -xf - -C /var/www/html/
|
||||
|
||||
# 先確認容器已就緒,避免 restarting 狀態下 docker exec 被拒絕
|
||||
wait_for_container "$container" || return 1
|
||||
local_tar=${PIPESTATUS[0]} local_docker=${PIPESTATUS[1]}
|
||||
echo " Result: tar=$local_tar, docker=$local_docker"
|
||||
if [ "$local_tar" -gt 1 ] || [ "$local_docker" -ne 0 ]; then
|
||||
echo "!!! Error: Sync failed (tar=$local_tar, docker=$local_docker)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tar --exclude='.git' --exclude='node_modules' --exclude='vendor' --exclude='storage' --exclude='bootstrap/cache' -cf - . \
|
||||
| docker exec -i "$container" tar -xf - -C /var/www/html/
|
||||
|
||||
# 必須在同一行賦值,否則 PIPESTATUS 會被上一個 local 指令重置
|
||||
local tar_status=${PIPESTATUS[0]} docker_status=${PIPESTATUS[1]}
|
||||
|
||||
echo " Result: tar=$tar_status, docker=$docker_status"
|
||||
|
||||
if [ -n "$tar_status" ] && [ "$tar_status" -le 1 ] && [ "$docker_status" -eq 0 ]; then
|
||||
return 0
|
||||
else
|
||||
echo "!!! Error: Sync failed for $container (tar=$tar_status, docker=$docker_status)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 依序執行同步,任一失敗即中斷
|
||||
deploy_to star-cloud-laravel && \
|
||||
deploy_to star-cloud-queue && \
|
||||
deploy_to star-cloud-mqtt-worker && \
|
||||
# 程式碼同步後,queue/mqtt-worker 可能因檔案變動而短暫重啟,等待它們恢復
|
||||
echo ">>> Waiting for worker containers to stabilize..."
|
||||
wait_for_container star-cloud-queue || exit 1
|
||||
wait_for_container star-cloud-mqtt-worker || exit 1
|
||||
echo ">>> All containers are running."
|
||||
|
||||
# 設定權限
|
||||
docker exec star-cloud-laravel sh -c "
|
||||
chown -R 1000:1000 /var/www/html &&
|
||||
mkdir -p /.npm && chown -R 1000:1000 /.npm &&
|
||||
rm -rf /var/www/html/node_modules
|
||||
"
|
||||
|
||||
- name: Step 3 - Composer & NPM & Initialization
|
||||
run: |
|
||||
docker exec -u 1000:1000 -w /var/www/html star-cloud-laravel sh -c "
|
||||
|
||||
Loading…
Reference in New Issue
Block a user