feat: 新增 Docker 設定檔
This commit is contained in:
parent
0ef5abe06d
commit
b7d4ef5a62
20
Docker/svc.front/.env
Normal file
20
Docker/svc.front/.env
Normal file
@ -0,0 +1,20 @@
|
||||
# Project
|
||||
PROJ_NAME=proj_bims_ils-svc
|
||||
|
||||
# Network 網路環境
|
||||
NET_TRAEFIK=net-traefik_svc
|
||||
|
||||
# Image: org/name
|
||||
IMAGE_PROJ_NAME=proj_bims_ils
|
||||
IMAGE_NAME=empower-front
|
||||
TAG_VERSION=0.1.0
|
||||
|
||||
# Remote
|
||||
REMOTE_URL=harbor.mjm-staging.developers-homelab.net
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Basic 基本配置
|
||||
|
||||
HOST_DOMAIN=ibms.mjmtech.com.tw
|
||||
CUSTOMER_ID=empower1
|
||||
WEB_TITLE=新創賦能
|
21
Docker/svc.front/1.start.container.bat
Normal file
21
Docker/svc.front/1.start.container.bat
Normal file
@ -0,0 +1,21 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo PROJ_NAME=!PROJ_NAME!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
:: 啓動: 容器(containers)
|
||||
docker-compose --project-name !PROJ_NAME! --env-file .env up -d
|
27
Docker/svc.front/11.build-image.bat
Normal file
27
Docker/svc.front/11.build-image.bat
Normal file
@ -0,0 +1,27 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo Check: IMAGE_NAME=!IMAGE_NAME!
|
||||
echo Check: TAG_VERSION=!TAG_VERSION!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
REM === 流程 ============================
|
||||
|
||||
:: 0. 移除舊 Image
|
||||
docker rmi !IMAGE_NAME!:!TAG_VERSION!
|
||||
|
||||
:: 1. 打包 映像檔 ( -f: 文件位置(注:是相對於目錄) -t: 標簽 ..: 上一層作爲根目錄(.: 表示當前當作根目錄))
|
||||
docker build -f Dockerfile -t !IMAGE_NAME!:!TAG_VERSION! ../../
|
47
Docker/svc.front/12.push-image.bat
Normal file
47
Docker/svc.front/12.push-image.bat
Normal file
@ -0,0 +1,47 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo Check: IMAGE_PROJ_NAME=!IMAGE_PROJ_NAME!
|
||||
echo Check: IMAGE_NAME=!IMAGE_NAME!
|
||||
echo Check: TAG_VERSION=!TAG_VERSION!
|
||||
echo Check: REMOTE_URL=!REMOTE_URL!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
REM === 設定目標 image tag ==============
|
||||
set "LOCAL_TAG=!IMAGE_NAME!:!TAG_VERSION!"
|
||||
set "REMOTE_TAG=!REMOTE_URL!/!IMAGE_PROJ_NAME!/!IMAGE_NAME!:!TAG_VERSION!"
|
||||
|
||||
|
||||
REM === 流程 ============================
|
||||
|
||||
:: 1. 登入 遠端倉庫
|
||||
echo.
|
||||
echo Login...
|
||||
docker login !REMOTE_URL!
|
||||
|
||||
:: 2. 標簽 標記映像檔
|
||||
echo.
|
||||
echo Tagging image...
|
||||
docker tag !LOCAL_TAG! !REMOTE_TAG!
|
||||
|
||||
:: 3. 推送 映像檔
|
||||
echo.
|
||||
echo Pushing image...
|
||||
docker push !REMOTE_TAG!
|
||||
|
||||
:: 4. 完成
|
||||
echo Done.
|
||||
pause
|
22
Docker/svc.front/2.stop.container.bat
Normal file
22
Docker/svc.front/2.stop.container.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo PROJ_NAME=!PROJ_NAME!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
:: 停止: 容器(containers)
|
||||
docker-compose stop
|
||||
|
22
Docker/svc.front/3.remove.container.bat
Normal file
22
Docker/svc.front/3.remove.container.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo PROJ_NAME=!PROJ_NAME!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
:: 刪除: 容器(containers)
|
||||
docker-compose down
|
||||
|
22
Docker/svc.front/9.delete.all.bat
Normal file
22
Docker/svc.front/9.delete.all.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
cd /d "%~dp0"
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM === 載入 .env 變數(忽略註解與空行) ===
|
||||
for /f "usebackq tokens=1,* delims==" %%a in (".env") do (
|
||||
if "%%a" neq "" (
|
||||
if not "%%a"=="REM" (
|
||||
set "%%a=%%b"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM === 檢查變數 ========================
|
||||
echo -----------------------------------
|
||||
echo PROJ_NAME=!PROJ_NAME!
|
||||
echo -----------------------------------
|
||||
echo.
|
||||
|
||||
:: 刪除: 容器(containers) & 資料(volumes) & 網路(network)
|
||||
docker-compose down -v
|
||||
|
43
Docker/svc.front/Dockerfile
Normal file
43
Docker/svc.front/Dockerfile
Normal file
@ -0,0 +1,43 @@
|
||||
# 使用 Node.js 作為基礎映像
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
# 設定工作目錄
|
||||
WORKDIR /app
|
||||
|
||||
# 複製 package.json 和 package-lock.json (或 yarn.lock) 到工作目錄
|
||||
COPY package*.json ./
|
||||
|
||||
# 安裝依賴
|
||||
RUN npm install --legacy-peer-deps
|
||||
|
||||
# 複製所有檔案到工作目錄
|
||||
COPY . .
|
||||
|
||||
# 清理緩存並重新構建
|
||||
RUN npm cache clean --force
|
||||
RUN rm -rf node_modules
|
||||
RUN npm install --legacy-peer-deps
|
||||
|
||||
# 構建前端應用 (如果需要)
|
||||
RUN npm run build --omit=dev
|
||||
|
||||
# 使用一個更小的映像來提供靜態文件 (例如 Nginx)
|
||||
FROM nginx:alpine
|
||||
|
||||
# 將構建好的靜態檔案複製到 Nginx 的預設目錄
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
|
||||
# (可選) 複製自定義 Nginx 設定檔
|
||||
# COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# 暴露 Nginx 預設的 80 端口
|
||||
EXPOSE 80
|
||||
|
||||
# 2025-08-29 說明
|
||||
LABEL changelog="2025-08-29: 打包測試。"
|
||||
|
||||
# Nginx 已經預設啟動,所以不需要 CMD 指令
|
||||
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||
RUN chmod +x /docker-entrypoint.sh
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
31
Docker/svc.front/docker-compose.yml
Normal file
31
Docker/svc.front/docker-compose.yml
Normal file
@ -0,0 +1,31 @@
|
||||
# 指令
|
||||
# - 啓動容器: docker-compose --env-file .env up -d
|
||||
# - 停止容器: docker-compose down
|
||||
# - 移除容器: docker ps -a >> docker rm <containerId>
|
||||
|
||||
networks:
|
||||
internal:
|
||||
driver: bridge
|
||||
traefik:
|
||||
name: ${NET_TRAEFIK}
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
upload:
|
||||
|
||||
services:
|
||||
|
||||
font:
|
||||
environment:
|
||||
# 動態設定 API 及檔案服務的 URL
|
||||
VITE_API_BASEURL: https://${CUSTOMER_ID}-api.${HOST_DOMAIN}
|
||||
VITE_FILE_API_BASEURL: https://${CUSTOMER_ID}-front.${HOST_DOMAIN}
|
||||
VITE_APP_TITLE: ${WEB_TITLE}
|
||||
#VITE_MQTT_BASEURL: wss://${CUSTOMER_ID}-mqtt.${HOST_DOMAIN}
|
||||
|
||||
volumes:
|
||||
- upload:/usr/share/nginx/html/upload
|
||||
|
||||
networks:
|
||||
- internal
|
||||
- traefik
|
Loading…
Reference in New Issue
Block a user