境配置規(guī)范指南:示例搭建Directus 12.4.0)
Docker Compose 模塊化多環(huán)境配置規(guī)范指南示例搭建Directus 12.4.0Docker Compose 模塊化多環(huán)境配置規(guī)范指南示例Directus 12.4.0額外說明Directus 可以干什么目錄結(jié)構(gòu)規(guī)范配置文件詳解與完整注釋1. 全局公共環(huán)境配置dev/.env2. 服務(wù)私有環(huán)境配置dev/directus_V12.4.0/.env3. 服務(wù)編排配置dev/directus_V12.4.0/docker-compose.yml4. 創(chuàng)建數(shù)據(jù)庫5. 服務(wù)啟動6. 瀏覽器訪問Docker Compose 模塊化多環(huán)境配置規(guī)范指南服務(wù)的版本、端口、密碼以及項目的環(huán)境網(wǎng)絡(luò)這些要怎么放置標(biāo)準(zhǔn)的規(guī)范做法是雙層配置隔離根目錄公共.env僅保留全局通用變量ENV、COMPOSE_PROJECT_NAME、NETWORK_NAME等。服務(wù)私有.env與服務(wù)的docker-compose.yml同級放置僅維護(hù)該服務(wù)獨(dú)有的參數(shù)如版本、密碼、端口、JVM 配置等。示例Directus 12.4.0額外說明Directus 可以干什么GitHub 官網(wǎng)https://github.com/directus/directus介紹Directus是構(gòu)建項目的后端平臺。將其連接到數(shù)據(jù)庫、資產(chǎn)存儲和外部服務(wù)即可立即獲得REST和GraphQL API、SDK、實時功能、身份驗證、文件管理、自動化以及用于處理數(shù)據(jù)的 Web 應(yīng)用程序。精細(xì)的訪問控制意味著用戶只能查看、交互和創(chuàng)建其角色允許的數(shù)據(jù)。Docker 構(gòu)建官網(wǎng)說明https://directus.com/docs/self-hosting/deploying目錄結(jié)構(gòu)規(guī)范以下為標(biāo)準(zhǔn)的工程目錄結(jié)構(gòu)。不同環(huán)境如dev/test/prod通過頂層文件夾進(jìn)行物理隔離.env按照雙層變量隔離的方式dev/ ├── .env # 全局公共環(huán)境配置文件僅定義共享基礎(chǔ)設(shè)施變量 └── directus_V12.4.0/ # 獨(dú)立服務(wù)單元 ├── .env # 服務(wù)私有環(huán)境配置文件僅定義服務(wù)專屬變量 ├── docker-compose.yml # Docker Compose 編排文件 └── volumes/ # 持久化數(shù)據(jù)與日志掛載目錄配置文件詳解與完整注釋1. 全局公共環(huán)境配置dev/.env# # Docker Compose 全局公共環(huán)境配置文件# 作用管理跨服務(wù)的全局基礎(chǔ)設(shè)施配置如網(wǎng)絡(luò)、環(huán)境標(biāo)識等# ############################################################# 環(huán)境基礎(chǔ)配置############################################################# 當(dāng)前運(yùn)行環(huán)境標(biāo)識# 可選值dev開發(fā)、test測試、prod生產(chǎn)ENVdev# Docker Compose 全局項目名稱影響容器默認(rèn)命名前綴COMPOSE_PROJECT_NAMEdev############################################################# Docker 公共網(wǎng)絡(luò)配置############################################################# 跨服務(wù)通信的 Docker 共享網(wǎng)絡(luò)名稱NETWORK_NAMEnetwork-${ENV}# 自定義 Docker bridge 網(wǎng)絡(luò)子網(wǎng)掩碼確保網(wǎng)段不與宿主機(jī)沖突NETWORK_SUBNET10.10.0.0/242. 服務(wù)私有環(huán)境配置dev/directus_V12.4.0/.env# # Directus 服務(wù)專屬環(huán)境配置文件# 作用管理 Directus 獨(dú)享的版本、密鑰、管理員賬號及暴露端口# 位置與服務(wù)自身的 docker-compose.yml 同級# ############################################################# Directus 配置############################################################# 鏡像版本例如11.0.0 / 10.13.0DIRECTUS_VERSION11.0.0# 暴露端口配置宿主機(jī)訪問端口容器內(nèi)部默認(rèn)端口8055DIRECTUS_PORT8055############################################################# Directus 安全密鑰配置############################################################# 系統(tǒng) Session 簽名與敏感數(shù)據(jù)加密 Key建議使用 standard UUID v4# 用于管理后臺 Cookie 校驗、內(nèi)部 Session 加密及敏感字段哈希派生# 在線網(wǎng)址https://uuidgen.org/v/4DIRECTUS_SECURITY_KEYc7ac2c39-3e63-4780-8d87-1aba2d683d91# JWT 令牌簽名私鑰建議使用強(qiáng)隨機(jī) Base64/Hex 字符串# 用于對外 API 接口響應(yīng)中 Access Token 與 Refresh Token 的生成與驗簽# 在線網(wǎng)址https://secretkeygenerator.com/zh/jwt-secret-key-generatorDIRECTUS_JWT_SECRET63jYs2S94dhgpB88oqBYZRICnBOIeK7FTGCeYcUtiU4############################################################# Directus 管理員初始化賬號############################################################# 初始超級管理員郵箱登錄 Web UI 管理后臺憑證DIRECTUS_ADMIN_EMAILhaokai163.com# 初始超級管理員密碼DIRECTUS_ADMIN_PASSWORDPass8520############################################################# 目標(biāo) MySQL 數(shù)據(jù)庫連接憑證############################################################# 數(shù)據(jù)庫連接用戶與密碼連接同一網(wǎng)絡(luò)中已部署的 MySQL 服務(wù)DIRECTUS_DB_USERrootDIRECTUS_DB_PASSWORDPass8520DIRECTUS_DB_DATABASEdirectus配置屬性說明DIRECTUS_SECURITY_KEY主要用于 Directus 內(nèi)部 Session 簽名、Cookie 加密及敏感字段的哈希派生推薦使用標(biāo)準(zhǔn)的 UUID v4 結(jié)構(gòu)。在線網(wǎng)址https://uuidgen.org/v/4DIRECTUS_JWT_SECRET是用于簽發(fā)與驗簽 REST API 接口 JWT TokenAccess Token / Refresh Token的 HMAC 秘鑰要求具備極高的隨機(jī)熵值。在線網(wǎng)址https://secretkeygenerator.com/3. 服務(wù)編排配置dev/directus_V12.4.0/docker-compose.yml可以參考官網(wǎng)提供的https://directus.com/docs/self-hosting/deploying# # Directus Docker Compose 配置## 目錄結(jié)構(gòu)# dev/# ├── .env# └── directus_V11.0.0/# ├── .env# ├── docker-compose.yml# └── volumes/# ├── uploads/ # 用戶上傳的媒體與文件資產(chǎn)/directus/uploads# └── extensions/ # 自定義擴(kuò)展與插件目錄/directus/extensions## 說明## 1. 環(huán)境配置# 全局基礎(chǔ)參數(shù)ENV、NETWORK等由根目錄公共 .env 管理# Directus 專屬參數(shù)版本、密鑰、端口等由服務(wù)同級 .env 管理。## 2. 持久化目錄# Directus 的文件資產(chǎn)與擴(kuò)展插件統(tǒng)一存放于# directus_V11.0.0/volumes/ 目錄下。## 3. 路徑規(guī)則# 所有宿主機(jī)掛載目錄均采用相對路徑# 相對路徑以當(dāng)前 docker-compose.yml 所在目錄為基準(zhǔn)。# 例如 ./volumes/uploads 對應(yīng)# 當(dāng)前環(huán)境/directus_V11.0.0/volumes/uploads。## 4. 環(huán)境隔離# 掛載路徑不使用 ${ENV} 拼接。# 不同環(huán)境通過上層目錄進(jìn)行隔離例如# dev/directus_V11.0.0、test/directus_V11.0.0。## 5. 數(shù)據(jù)遷移# directus_V11.0.0/ 目錄包含 Compose 配置及靜態(tài)文件# 結(jié)合底層 MySQL 數(shù)據(jù)庫可作為當(dāng)前環(huán)境數(shù)據(jù)字典服務(wù)的整體備份和遷移單元。## 6. 依賴關(guān)系# 依賴外部已拉起的 MySQL 實例如果后續(xù)有依賴 Directus 的微服務(wù)# 請在下游服務(wù)中使用 depends_on: directus: condition: service_healthy。## ############################################################# 網(wǎng)絡(luò)配置############################################################networks:# Compose 內(nèi)部網(wǎng)絡(luò)名稱。env_network:# 使用 Docker Bridge 網(wǎng)絡(luò)。driver:bridge# Docker 實際網(wǎng)絡(luò)名稱由上層公共 .env 管理。name:${NETWORK_NAME}# 自定義網(wǎng)絡(luò)地址范圍。ipam:config:-subnet:${NETWORK_SUBNET}############################################################# 服務(wù)配置############################################################services:########################################################### Directus##########################################################directus:# Directus 鏡像及版本。# 版本由私有 .env 中的 DIRECTUS_VERSION 管理。image:directus/directus:${DIRECTUS_VERSION}# 容器名稱自動拼接環(huán)境與版本號。# 例如directus_dev_V11.0.0container_name:directus_${ENV}_V${DIRECTUS_VERSION}# 加入當(dāng)前環(huán)境的 Docker 網(wǎng)絡(luò)。networks:-env_network# 端口映射。## Directus# 宿主機(jī) ${DIRECTUS_PORT} - 容器 8055ports:-${DIRECTUS_PORT}:8055# Directus 運(yùn)行參數(shù)。environment:# 系統(tǒng) Session 簽名與敏感數(shù)據(jù)加密 Key映射內(nèi)部定義的 DIRECTUS_SECURITY_KEY。KEY:${DIRECTUS_SECURITY_KEY}# JWT 令牌簽名私鑰映射內(nèi)部定義的 DIRECTUS_JWT_SECRET。SECRET:${DIRECTUS_JWT_SECRET}# 初始超級管理員賬號信息。ADMIN_EMAIL:${DIRECTUS_ADMIN_EMAIL}ADMIN_PASSWORD:${DIRECTUS_ADMIN_PASSWORD}# 數(shù)據(jù)庫客戶端類型指定為 MySQL。DB_CLIENT:mysql# 同一網(wǎng)絡(luò)中連接 MySQL 服務(wù)名例如mysql。DB_HOST:mysqlDB_PORT:3306DB_DATABASE:${DIRECTUS_DB_DATABASE}DB_USER:${DIRECTUS_DB_USER}DB_PASSWORD:${DIRECTUS_DB_PASSWORD}# CORS 跨域配置開啟全量允許便于外部 API 正常調(diào)用。CORS_ENABLED:trueCORS_ORIGIN:true######################################################### 持久化目錄########################################################## 所有宿主機(jī)掛載目錄均采用相對路徑。## 相對路徑以當(dāng)前 docker-compose.yml 所在目錄為基準(zhǔn)。## 當(dāng)前 Compose 文件路徑示例## 當(dāng)前環(huán)境/directus_V11.0.0/docker-compose.yml## 因此## ./volumes/uploads# ./volumes/extensions## 分別對應(yīng)## 當(dāng)前環(huán)境/directus_V11.0.0/volumes/uploads# 當(dāng)前環(huán)境/directus_V11.0.0/volumes/extensions## 不使用 ${ENV} 拼接掛載路徑# 環(huán)境隔離由上層目錄完成。#########################################################volumes:# 用戶上傳的媒體文件、文檔及資產(chǎn)目錄。## 宿主機(jī)# ./volumes/uploads## 容器# /directus/uploads-./volumes/uploads:/directus/uploads# 自定義擴(kuò)展、 Hook 腳本及第三方接口插件目錄。## 宿主機(jī)# ./volumes/extensions## 容器# /directus/extensions-./volumes/extensions:/directus/extensions######################################################### 健康檢查嚴(yán)格遵照官方標(biāo)準(zhǔn)的 /server/ping 探針########################################################healthcheck:# 使用 wget 訪問內(nèi)部 HTTP Ping 端點(diǎn)探測服務(wù)可用性。test:[CMD-SHELL,wget --spider -q http://localhost:8055/server/ping || exit 1]# 正常運(yùn)行階段每 10 秒檢查一次。interval:10s# 單次健康檢查超時時間。timeout:5s# 連續(xù)失敗 5 次后標(biāo)記為 unhealthy。retries:5# 啟動階段的高頻探測間隔加快探測容器就緒速度。start_interval:5s# 啟動階段給予 30 秒寬限時間用于數(shù)據(jù)庫 Schema 校驗與初始化。start_period:30s# 容器異常退出后自動重啟。restart:unless-stopped######################################################### 容器標(biāo)簽########################################################labels:# 當(dāng)前環(huán)境。env:${ENV}# Directus 版本。version:${DIRECTUS_VERSION}# 服務(wù)名稱自動拼接環(huán)境與版本號。service:directus_${ENV:-dev}_V${DIRECTUS_VERSION}4. 創(chuàng)建數(shù)據(jù)庫注意需要先創(chuàng)建數(shù)據(jù)庫Directus 的數(shù)據(jù)庫驅(qū)動mysql2在啟動時只會連接指定的數(shù)據(jù)庫并自動建表初始化系統(tǒng) Schema但不會自動幫你執(zhí)行CREATE DATABASE建庫操作。如果目標(biāo)數(shù)據(jù)庫不存在MySQL 就會拋出ER_BAD_DB_ERROR (1049): Unknown database directus_db錯誤。如果一開始使用docker-compose.yml啟動之后修改docker-compose.yml換一個管理賬號那么除了刪除volumes文件夾還要清空對應(yīng)的數(shù)據(jù)庫數(shù)據(jù)才能生效。5. 服務(wù)啟動在directus_V12.4.0/目錄下執(zhí)行命令時顯式同時加載父級和當(dāng)前目錄的.env文件dockercompose --env-file../.env --env-file .env up-d注意必須同時寫上--env-file ../.env和--env-file .env這樣 Compose 才能在語法解析階段同時獲取到父級的ENV、NETWORK_NAME以及子級的ES_VERSION。出現(xiàn)這個警告是因為 Docker Compose 在同一個項目名稱Project Name下檢測到了不屬于當(dāng)前docker-compose.yml文件定義的其他容器。警告原因分析出現(xiàn)該警告的核心原因在于多個子服務(wù)共享了同一個 Docker Compose 項目名稱Project Name項目名稱統(tǒng)一由于公共配置文件中統(tǒng)一指定了固定的COMPOSE_PROJECT_NAME例如devDocker Compose 會將該項目下的所有服務(wù)如容器 A、容器 B 等歸入同一個邏輯項目集中管理。局部文件讀取當(dāng)在某個獨(dú)立的服務(wù)子目錄下執(zhí)行部署命令時Docker Compose 僅會加載當(dāng)前目錄下的docker-compose.yml配置文件。識別為孤兒容器Compose 在檢查全局項目狀態(tài)時發(fā)現(xiàn)該項目下存在其他已經(jīng)在運(yùn)行、但未定義在當(dāng)前docker-compose.yml文件中的容器因此將其標(biāo)記為“孤兒容器orphan containers”并發(fā)出提醒。影響說明無負(fù)面影響這僅是 Docker Compose 的正常提示信息不會影響當(dāng)前服務(wù)的啟動與運(yùn)行也不會自動刪除或干預(yù)其他正在運(yùn)行的容器。符合預(yù)期將多個組件放在同一個大項目名下屬于合理的管理方式只要已運(yùn)行的其他服務(wù)仍需繼續(xù)提供服務(wù)完全忽略此警告即可。6. 瀏覽器訪問注意這里要加/login否則edge會識別有問題。http://localhost:8055設(shè)置中可以選擇中文