feat: 拆分 Docker Compose 配置為多檔案繼承模式並優化部署工作流
This commit is contained in:
@@ -59,14 +59,14 @@ jobs:
|
|||||||
cd /var/www/star-erp-demo
|
cd /var/www/star-erp-demo
|
||||||
chown -R 1000:1000 .
|
chown -R 1000:1000 .
|
||||||
|
|
||||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|compose\.demo\.yaml|docker-compose\.yaml)'; then
|
||||||
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose -f compose.yaml -f compose.demo.yaml up -d --build --wait
|
||||||
else
|
else
|
||||||
echo "⚡ 無 Docker 檔案變更,僅重載服務..."
|
echo "⚡ 無 Docker 檔案變更,僅重載服務..."
|
||||||
if ! docker ps --format '{{.Names}}' | grep -q 'star-erp-laravel'; then
|
if ! docker ps --format '{{.Names}}' | grep -q 'star-erp-laravel'; then
|
||||||
echo "容器未運行,正在啟動..."
|
echo "容器未運行,正在啟動..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose -f compose.yaml -f compose.demo.yaml up -d --wait
|
||||||
else
|
else
|
||||||
echo "容器已運行,跳過 docker compose,直接進行程式碼部署..."
|
echo "容器已運行,跳過 docker compose,直接進行程式碼部署..."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ jobs:
|
|||||||
key: ${{ secrets.PROD_SSH_KEY }}
|
key: ${{ secrets.PROD_SSH_KEY }}
|
||||||
script: |
|
script: |
|
||||||
cd /var/www/star-erp
|
cd /var/www/star-erp
|
||||||
# [Patch] 修正正式機 Nginx Proxy 配置 (對應外部 SSL/OpenResty)
|
|
||||||
sed -i "s/- '8080:8080'/- '80:80'\n - '8080:8080'/" compose.yaml
|
|
||||||
sed -i "s/demo-proxy.conf/prod-proxy.conf/" compose.yaml
|
|
||||||
|
|
||||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
||||||
echo "REBUILD_NEEDED=true"
|
echo "REBUILD_NEEDED=true"
|
||||||
@@ -62,14 +59,14 @@ jobs:
|
|||||||
cd /var/www/star-erp
|
cd /var/www/star-erp
|
||||||
chown -R 1000:1000 .
|
chown -R 1000:1000 .
|
||||||
|
|
||||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|docker-compose\.yaml)'; then
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -qE '(Dockerfile|compose\.yaml|compose\.prod\.yaml|docker-compose\.yaml)'; then
|
||||||
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
echo "🔄 偵測到 Docker 相關檔案變更,執行完整重建..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --build --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose -f compose.yaml -f compose.prod.yaml up -d --build --wait
|
||||||
else
|
else
|
||||||
echo "⚡ 無 Docker 檔案變更,僅重載服務..."
|
echo "⚡ 無 Docker 檔案變更,僅重載服務..."
|
||||||
if ! docker ps --format '{{.Names}}' | grep -q 'star-erp-laravel'; then
|
if ! docker ps --format '{{.Names}}' | grep -q 'star-erp-laravel'; then
|
||||||
echo "容器未運行,正在啟動..."
|
echo "容器未運行,正在啟動..."
|
||||||
WWWGROUP=1000 WWWUSER=1000 docker compose up -d --wait
|
WWWGROUP=1000 WWWUSER=1000 docker compose -f compose.yaml -f compose.prod.yaml up -d --wait
|
||||||
else
|
else
|
||||||
echo "容器已運行,跳過 docker compose,直接進行程式碼部署..."
|
echo "容器已運行,跳過 docker compose,直接進行程式碼部署..."
|
||||||
fi
|
fi
|
||||||
|
|||||||
6
compose.demo.yaml
Normal file
6
compose.demo.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
services:
|
||||||
|
proxy:
|
||||||
|
ports:
|
||||||
|
- '8080:8080'
|
||||||
|
volumes:
|
||||||
|
- './nginx/demo-proxy.conf:/etc/nginx/conf.d/default.conf:ro'
|
||||||
7
compose.prod.yaml
Normal file
7
compose.prod.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
services:
|
||||||
|
proxy:
|
||||||
|
ports:
|
||||||
|
- '80:80'
|
||||||
|
- '8080:8080'
|
||||||
|
volumes:
|
||||||
|
- './nginx/prod-proxy.conf:/etc/nginx/conf.d/default.conf:ro'
|
||||||
36
compose.yaml
36
compose.yaml
@@ -8,9 +8,11 @@ services:
|
|||||||
image: 'sail-8.5/app'
|
image: 'sail-8.5/app'
|
||||||
container_name: star-erp-laravel
|
container_name: star-erp-laravel
|
||||||
hostname: star-erp-laravel
|
hostname: star-erp-laravel
|
||||||
network_mode: host
|
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- 'host.docker.internal:host-gateway'
|
- 'host.docker.internal:host-gateway'
|
||||||
|
ports:
|
||||||
|
# - '${APP_PORT:-8080}:80' # 由 proxy 處理
|
||||||
|
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
|
||||||
environment:
|
environment:
|
||||||
WWWUSER: '${WWWUSER}'
|
WWWUSER: '${WWWUSER}'
|
||||||
LARAVEL_SAIL: 1
|
LARAVEL_SAIL: 1
|
||||||
@@ -19,15 +21,18 @@ services:
|
|||||||
IGNITION_LOCAL_SITES_PATH: '${PWD}'
|
IGNITION_LOCAL_SITES_PATH: '${PWD}'
|
||||||
volumes:
|
volumes:
|
||||||
- '.:/var/www/html'
|
- '.:/var/www/html'
|
||||||
|
networks:
|
||||||
|
- sail
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
|
# - mailpit
|
||||||
mysql:
|
mysql:
|
||||||
image: 'mysql/mysql-server:8.0'
|
image: 'mysql/mysql-server:8.0'
|
||||||
container_name: star-erp-mysql
|
container_name: star-erp-mysql
|
||||||
hostname: star-erp-mysql
|
hostname: star-erp-mysql
|
||||||
network_mode: host
|
ports:
|
||||||
|
- '${FORWARD_DB_PORT:-3306}:3306'
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
|
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
|
||||||
MYSQL_ROOT_HOST: '%'
|
MYSQL_ROOT_HOST: '%'
|
||||||
@@ -39,6 +44,8 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- 'sail-mysql:/var/lib/mysql'
|
- 'sail-mysql:/var/lib/mysql'
|
||||||
- './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
|
- './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
|
||||||
|
networks:
|
||||||
|
- sail
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test:
|
test:
|
||||||
- CMD
|
- CMD
|
||||||
@@ -47,14 +54,16 @@ services:
|
|||||||
- '-p${DB_PASSWORD}'
|
- '-p${DB_PASSWORD}'
|
||||||
retries: 3
|
retries: 3
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: 'redis:alpine'
|
image: 'redis:alpine'
|
||||||
container_name: star-erp-redis
|
container_name: star-erp-redis
|
||||||
hostname: star-erp-redis
|
hostname: star-erp-redis
|
||||||
network_mode: host
|
# ports:
|
||||||
|
# - '${FORWARD_REDIS_PORT:-6379}:6379'
|
||||||
volumes:
|
volumes:
|
||||||
- 'sail-redis:/data'
|
- 'sail-redis:/data'
|
||||||
|
networks:
|
||||||
|
- sail
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test:
|
test:
|
||||||
- CMD
|
- CMD
|
||||||
@@ -62,16 +71,23 @@ services:
|
|||||||
- ping
|
- ping
|
||||||
retries: 3
|
retries: 3
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
image: 'nginx:alpine'
|
image: 'nginx:alpine'
|
||||||
container_name: star-erp-proxy
|
container_name: star-erp-proxy
|
||||||
network_mode: host
|
networks:
|
||||||
volumes:
|
- sail
|
||||||
- './nginx/demo-proxy.conf:/etc/nginx/conf.d/default.conf:ro'
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- laravel.test
|
- laravel.test
|
||||||
|
# mailpit:
|
||||||
|
# image: 'axllent/mailpit:latest'
|
||||||
|
# ports:
|
||||||
|
# - '${FORWARD_MAILPIT_PORT:-1025}:1025'
|
||||||
|
# - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
|
||||||
|
# networks:
|
||||||
|
# - sail
|
||||||
|
networks:
|
||||||
|
sail:
|
||||||
|
driver: bridge
|
||||||
volumes:
|
volumes:
|
||||||
sail-mysql:
|
sail-mysql:
|
||||||
driver: local
|
driver: local
|
||||||
|
|||||||
Reference in New Issue
Block a user