d423cf5079
Run Tests / test (pull_request) Successful in 29s
- Dockerfile:移除 cron 安裝與 scheduler crontab 設定 - docker-entrypoint.sh:移除 service cron start - docker-compose.yml:新增 scheduler service(php artisan schedule:work) - .env.example:SESSION_DRIVER=redis、LOG_CHANNEL=stderr、移除 LOG_STACK/LOG_DAILY_DAYS - docs/STARTUP.md:新增 Log 查看、VPS 維護窗口操作與 Rollback 說明 VPS 部署需手動更新 .env 並執行 docker compose up -d --build(詳見 STARTUP.md §11) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
2.2 KiB
Bash
64 lines
2.2 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
echo "=== CFDivePlatform 容器初始化開始 ==="
|
||
|
||
# 確保目錄與權限(php-fpm 啟動前必須完成)
|
||
[ ! -d "/var/www/storage" ] && mkdir -p /var/www/storage
|
||
[ ! -d "/var/www/bootstrap/cache" ] && mkdir -p /var/www/bootstrap/cache
|
||
chown -R www-data:www-data /var/www
|
||
chmod -R 775 /var/www/storage /var/www/bootstrap/cache
|
||
|
||
# 確保 .env 存在
|
||
if [ ! -f .env ]; then
|
||
cp .env.example .env
|
||
php artisan key:generate
|
||
fi
|
||
|
||
# 強制 DB_HOST=db(Docker service name,不能用 localhost)
|
||
php -r "
|
||
\$env = file_get_contents('/var/www/.env');
|
||
\$env = preg_replace('/^DB_HOST=.*$/m', 'DB_HOST=db', \$env);
|
||
file_put_contents('/var/www/.env', \$env);
|
||
"
|
||
|
||
# Composer 依賴(vendor 不存在或 lock 內容變更時才裝)
|
||
# 用內容比對而非 mtime:git checkout/pull 會更新 composer.json 的 mtime,
|
||
# mtime 比對會讓每次分支操作後的開機都重跑 autoload 生成(bind mount 上耗時數分鐘、期間全站 502)
|
||
if [ -f "composer.lock" ] && { [ ! -d "vendor" ] || ! cmp -s composer.lock vendor/.composer.lock.installed; }; then
|
||
composer install --no-scripts --optimize-autoloader
|
||
cp composer.lock vendor/.composer.lock.installed
|
||
fi
|
||
|
||
# 背景執行:等 MySQL → migration → cache clear → storage link → swagger
|
||
# php-fpm 不等這些完成就先啟動,避免重啟時 CORS 502
|
||
(
|
||
echo "⏳ [背景] 等待 MySQL..."
|
||
COUNT=0
|
||
until mysqladmin ping -h"db" -u"${DB_USERNAME:-cfdiveuser}" -p"${DB_PASSWORD}" --silent 2>/dev/null || [ $COUNT -ge 30 ]; do
|
||
sleep 2
|
||
COUNT=$((COUNT+1))
|
||
done
|
||
|
||
echo "🗄️ [背景] 執行 migration..."
|
||
php artisan migrate --force || echo "⚠️ migration 失敗"
|
||
|
||
echo "🧹 [背景] 清除 Laravel 緩存..."
|
||
php artisan config:clear || true
|
||
php artisan cache:clear || true
|
||
php artisan route:clear || true
|
||
php artisan view:clear || true
|
||
|
||
echo "🔗 [背景] storage:link..."
|
||
php artisan storage:link --force || true
|
||
|
||
if php -r "echo class_exists('L5Swagger\\L5SwaggerServiceProvider') ? 'yes' : 'no';" 2>/dev/null | grep -q 'yes'; then
|
||
php artisan l5-swagger:generate || true
|
||
fi
|
||
|
||
echo "✅ [背景] 初始化完成"
|
||
) &
|
||
|
||
echo "🚀 啟動 php-fpm..."
|
||
exec "$@"
|