# **當你執行 `npm run start` 時的執行流程** 會依序執行以下檔案和步驟: 1. **執行 `npm run start`** - 這個命令會在 `package.json` 中尋找對應的腳本: `"start": "docker compose --env-file .env.example up -d --build"` - 這行命令會使用 `.env.example` 檔案中的環境變數,啟動並構建 Docker 容器。 2. **讀取 `docker-compose.yml` 檔案** - Docker Compose 會根據 `docker-compose.yml` 檔案中的設定,啟動定義的服務。 - 該檔案中定義了兩個服務: - **`postgres` 資料庫容器** - **`db_migrate` 資料庫遷移容器** 3. **啟動 `postgres` 資料庫容器** - 使用 `postgres:16.4-alpine3.20` 映像,根據環境變數設定資料庫使用者、密碼和資料庫名稱。 4. **構建並啟動 `db_migrate` 資料庫遷移容器** - 根據 `migrate.Dockerfile` 建立容器映像。 - `depends_on` 確保在 `postgres` 資料庫服務啟動並健康後,才會啟動 `db_migrate` 容器。 5. **執行 `migrate.Dockerfile`** - `db_migrate` 容器構建過程中,執行以下步驟: - 容器啟動後,會執行 `npm run init`,然後執行 `npm run migrate`。 6. **執行 `npm run init`** - 在 `package.json` 中,`init` 腳本定義為: **"init": "db-migrate up --config database.json -e pg -m ./migrations/init"** - 這個命令會使用 `db-migrate` 工具,根據 `database.json` 的設定,執行 `./migrations/init` 目錄下的遷移檔案,初始化資料庫結構。 7. **執行 `./migrations/init` 資料夾中的遷移檔案** - 這些檔案定義了初始的資料庫結構,例如建立資料表、索引等。 8. **執行 `npm run migrate`** - 接著執行 `package.json` 中定義的 `migrate` 腳本: ` "migrate": "db-migrate up --config database.json -e pg -m ./migrations/task"` - 這個命令執行 `./migrations/task` 目錄下的遷移檔案,對資料庫進行進一步的變更,例如新增資料、修改結構等。 9. **執行 `./migrations/task` 資料夾中的遷移檔案** - 例如,執行 `20241021064214-task.js` 檔案,該檔案會: - 讀取並執行 `sqls/20241021064214-task-up.sql` 中的 SQL 指令。 - 這些 SQL 指令包含了對資料庫的資料插入、更新、刪除等操作。 10. **資料庫更新完成** - 經過以上步驟,資料庫已被初始化並更新到最新狀態。 - 此時,資料庫中已經建立了相應的資料表和資料。 11. **使用 DBeaver 連接資料庫** - 因為在 `docker-compose.yml` 中將資料庫的埠 `5432` 映射到本地主機,所以你可以使用 DBeaver 連接到 `localhost:5432`。 - 使用在 `.env.example` 中設定的使用者名稱和密碼,就能查看到已建立的資料表和資料。 **總結**:當你執行 `npm run start` 時,系統會啟動 Docker 容器,初始化並更新資料庫,最終讓你能夠看到已建好的資料表和資料。 ## 將作業上傳到 GitHub ,他做了什麼事情去驗證資料庫指令沒有出錯? `check.yml` 文件是一個 GitHub Actions 的工作流程配置文件,用於在每次程式碼推送或建立拉取請求時,自動執行資料庫的初始化和遷移測試,確保資料庫遷移腳本的正確性和可靠性。以下是 `check.yml` 所做的事情: 1. **觸發條件**: - 當程式被推送(`push`)到任何分支,或建立拉取請求(`pull_request`)時,觸發此工作流程。 2. **定義工作流程**: - 工作流程名稱為 **"test-migrate"**。 3. **設定工作環境**: - 指定運行環境為 `ubuntu-latest`。 4. **設置環境變數**: - 定義資料庫連接所需的環境變數: - `DB_USERNAME`: 資料庫使用者名稱(`root`)。 - `DB_PASSWORD`: 資料庫密碼(`test`)。 - `DB_DATABASE`: 資料庫名稱(`test`)。 - `DB_HOST`: 資料庫主機(`localhost`)。 5. **服務配置**: - 啟動一個 PostgreSQL 資料庫服務,使用以下配置: - **映像**:`postgres:16.4-alpine3.20`。 - **埠映射**:`5432:5432`,將容器的 5432 埠映射到本地主機。 - **環境變數**:使用上述設定的資料庫使用者、密碼和資料庫名稱。 6. **執行步驟**: - **檢出程式碼庫**: - 使用 `actions/checkout@v4` 檢出當前程式碼庫。 - **設定 Node.js 環境**: - 使用 `actions/setup-node@v4`,設定 Node.js 版本為 `22`,並啟用 npm 緩存。 - **還原 npm 模組緩存**: - 使用緩存來加速依賴安裝過程。 - **安裝依賴**: - 執行 `npm ci --production` 安裝生產環境所需的依賴。 - **更新 npm 模組緩存**: - 將新的依賴緩存起來,供未來的工作流程使用。 - **執行資料庫遷移測試**: - 執行 `npm run init && npm run migrate`,初始化並遷移資料庫。 - 這會執行位於 `./migrations/init` 和 `./migrations/task` 資料夾中的遷移腳本,確保資料庫結構與最新的程式碼一致。 7. **目的和作用**: - 自動化資料庫遷移測試,確保每次程式碼變更都不會破壞資料庫的完整性。 - 提早發現潛在的資料庫遷移問題,提升程式碼品質。 - 確保團隊成員在合併程式碼前,資料庫遷移腳本能夠在乾淨的環境下成功執行。 透過 `check.yml`,每當有新的程式碼提交或拉取請求時,GitHub Actions 會自動測試資料庫遷移,確保應用程式的穩定性和可靠性。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up