diff --git a/Dockerfile b/Dockerfile index bc14cbe..7188df5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM php:8.2-fpm -# 1. 安裝系統必要的擴充套件(Laravel 需要 zip, unzip 等才能解壓套件) +# 1. 安裝系統套件(這層幾乎不變,永遠快取) RUN apt-get update && apt-get install -y \ git \ curl \ @@ -11,20 +11,23 @@ RUN apt-get update && apt-get install -y \ unzip \ && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd -# 🎯 2. 從官方 Composer 鏡像中,直接把 composer 執行檔複製進來 COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -# 3. 設定工作目錄 WORKDIR /var/www -# 4. 把專案檔案複製進去 +# 🎯 2. 【核心魔法】只複製套件清單檔案 +COPY composer.json composer.lock /var/www/ + +# 🎯 3. 在這裡就先執行安裝! +# 因為上面只複製了 json/lock,只要你沒裝新套件,這層 Docker 就會直接跳過、秒速套用快取! +RUN composer install --no-interaction --no-scripts --no-autoloader --no-dev + +# 4. 最後才複製你天天在修改的 Laravel 原始碼(如 Controller、Routes) COPY . /var/www -# 🎯 5. 在容器內直接執行 composer install,把 vendor 長出來! -# 加上 --no-dev 是因為生產環境不需要測試套件,速度會快非常多 -RUN composer install --no-interaction --optimize-autoloader --no-dev +# 5. 補上自動載入優化 +RUN composer dump-autoload --optimize --no-dev EXPOSE 9000 -# 6. 啟動 Laravel HTTP 伺服器 CMD ["php", "/var/www/artisan", "serve", "--host=0.0.0.0", "--port=9000"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 1ff8ed0..057bd3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,5 @@ services: + # 🐘 1. 你的 Laravel 後端服務 finance-backend: build: context: . @@ -11,14 +12,36 @@ services: - APP_ENV=production - APP_DEBUG=false - DB_CONNECTION=pgsql - - DB_HOST=161.118.239.140 + - DB_HOST=finance-postgres # 🎯 關鍵:改用資料庫的服務名稱當作 Host! - DB_PORT=5432 - DB_DATABASE=myfinance - DB_USERNAME=myfinance_henry4682 - DB_PASSWORD=DwmQ78PB networks: - - 1panel-network # 🎯 這裡的名字必須跟最下面一模一樣 + - 1panel-network + depends_on: + - finance-postgres # 🎯 確保資料庫先開,後端才開 + + # 🐬 2. 直接在這裡把消失的 PostgreSQL 生回來! + finance-postgres: + image: postgres:15-alpine # 使用穩定的 15-alpine 版本 + container_name: finance-laravel-backend-postgres + restart: always + ports: + - "5432:5432" # 🎯 把 5432 暴露給實體主機,這樣你本機的 pgAdmin 就能連進來了! + environment: + - POSTGRES_DB=myfinance + - POSTGRES_USER=myfinance_henry4682 + - POSTGRES_PASSWORD=DwmQ78PB + volumes: + - finance_db_data:/var/lib/postgresql/data # 🎯 資料持久化,容器重啟資料也不會掉 + networks: + - 1panel-network networks: - 1panel-network: # 🎯 這裡一定要頂格(沒有縮排),定義這個外部網路 - external: true \ No newline at end of file + 1panel-network: + external: true + +# 🎯 定義資料庫的儲存卷 +volumes: + finance_db_data: \ No newline at end of file