Laravel 第一版 加入git clone git pull

This commit is contained in:
allen.yan 2025-06-02 15:24:15 +08:00
parent 9a89e4dffc
commit 1f1641600d
13 changed files with 89 additions and 33 deletions

View File

@ -1,8 +1,11 @@
# Project # Project
APP_NAME=ktvcentral APP_NAME=ktvcentral
APP_DOMAIN=ktvcentral.test APP_DOMAIN=superstarzqd.dnsnet.cc
APP_PORT=80 APP_PORT=80
APP_URL=https://ktvcentral.test APP_URL=http://superstarzqd.dnsnet.cc/
REPO_URL="http://47.251.18.130:3000/Leecheng/KTVCentral.git"
REPO_BRANCH="main"
# Database # Database
DB_HOST=mariadb DB_HOST=mariadb
@ -10,10 +13,3 @@ DB_PORT=3306
DB_DATABASE=KaraokeKingpin DB_DATABASE=KaraokeKingpin
DB_USERNAME=KaraokeKingpin DB_USERNAME=KaraokeKingpin
DB_PASSWORD=ESM7yTPMnavFmbBH DB_PASSWORD=ESM7yTPMnavFmbBH
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis

View File

@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y \
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY ./data/KTVCentral/ /var/www/html/ COPY ./data/html/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html RUN chown -R www-data:www-data /var/www/html

21
Dockerfile.git Normal file
View File

@ -0,0 +1,21 @@
FROM debian:bullseye-slim
# 安裝必要工具
RUN apt-get update && apt-get install -y \
git supervisor bash curl ca-certificates \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 建立目錄
RUN mkdir -p /app /var/log /etc/supervisor
# 複製 supervisord 設定與啟動腳本
COPY supervisord.git.conf /etc/supervisor/supervisord.conf
COPY entrypoint.git.sh /app/entrypoint.sh
# 權限設定
RUN chmod +x /app/entrypoint.sh
WORKDIR /app
# 使用 supervisord 啟動
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

View File

@ -5,7 +5,7 @@ RUN apt-get update && apt-get install -y \
git unzip zip curl libzip-dev libonig-dev libxml2-dev && \ git unzip zip curl libzip-dev libonig-dev libxml2-dev && \
docker-php-ext-install pdo_mysql zip bcmath docker-php-ext-install pdo_mysql zip bcmath
COPY ./data/KTVCentral/ /var/www/html/ COPY ./data/html/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html RUN chown -R www-data:www-data /var/www/html

13
docker-compose.git.yml Normal file
View File

@ -0,0 +1,13 @@
services:
git_worker:
build:
context: .
dockerfile: Dockerfile.git
container_name: git_worker
volumes:
- ./data/html:/app
- ./data/logs/git/:/var/log/
environment:
- REPO_URL=${REPO_URL}
- BRANCH=${REPO_BRANCH}
restart: unless-stopped

View File

@ -22,7 +22,7 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: ${APP_NAME}_app container_name: ${APP_NAME}_app
volumes: volumes:
- ./data/KTVCentral:/var/www/html - ./data/html:/var/www/html
- ./data/logs:/var/www/logs - ./data/logs:/var/www/logs
- ./docker/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf - ./docker/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
depends_on: depends_on:
@ -43,7 +43,7 @@ services:
ports: ports:
- "80:80" - "80:80"
volumes: volumes:
- ./data/KTVCentral:/var/www/html - ./data/html:/var/www/html
- ./docker/nginx/:/etc/nginx/templates - ./docker/nginx/:/etc/nginx/templates
- ./data/logs/nginx/:/var/log/nginx - ./data/logs/nginx/:/var/log/nginx
depends_on: depends_on:
@ -58,7 +58,7 @@ services:
context: . context: .
dockerfile: Dockerfile.queue dockerfile: Dockerfile.queue
volumes: volumes:
- ./data/KTVCentral:/var/www/html - ./data/html:/var/www/html
depends_on: depends_on:
- nginx - nginx
networks: networks:

21
docker/entrypoint.git.sh Normal file
View File

@ -0,0 +1,21 @@
#!/bin/bash
REPO_URL=${REPO_URL:-https://github.com/your/repo.git}
BRANCH=${BRANCH:-main}
# 若資料夾為空則 clone
if [ -z "$(ls -A /app | grep -v 'entrypoint.sh')" ]; then
echo "[git-worker] Cloning repository..."
git clone --branch "$BRANCH" "$REPO_URL" /app
else
echo "[git-worker] Repository exists, skipping clone."
fi
# 定時 git pull
echo "[git-worker] Starting periodic git pull..."
while true; do
cd /app
echo "[git-worker] Pulling latest changes from $BRANCH..."
git pull origin "$BRANCH"
sleep 300
done

View File

@ -5,16 +5,6 @@ cd /var/www/html
APP_URL="${APP_URL%/}" APP_URL="${APP_URL%/}"
# if [ ! -d "html" ]; then
# if [ -n "$GIT_REPO_URL" ]; then
# echo "Cloning project from ${GIT_REPO_URL}..."
# git clone "$GIT_REPO_URL" html
# else
# echo "GIT_REPO_URL not set. Skipping clone."
# exit 1
# fi
#fi
echo "Running composer install..." echo "Running composer install..."
composer install --no-interaction --prefer-dist composer install --no-interaction --prefer-dist

View File

@ -0,0 +1,12 @@
[supervisord]
nodaemon=true
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
[program:git-worker]
command=/app/entrypoint.sh
autostart=true
autorestart=true
startsecs=0
stdout_logfile=/var/log/git-worker.log
stderr_logfile=/var/log/git-worker.err.log

View File

@ -15,7 +15,7 @@ else
fi fi
# 使用 .env 中的 APP_NAME 作為 project name # 使用 .env 中的 APP_NAME 作為 project name
PROJECT_NAME="${APP_NAME:-ktvproject}" PROJECT_NAME="${APP_NAME}"
echo "♻️ 正在重新啟動 $PROJECT_NAME 所有服務..." echo "♻️ 正在重新啟動 $PROJECT_NAME 所有服務..."

View File

@ -31,6 +31,9 @@ if [ "$WIPE" == "true" ]; then
EXTRA_FLAGS="up -d --build" EXTRA_FLAGS="up -d --build"
fi fi
echo "🚀 get APP to git services..."
docker compose -f docker-compose.git.yml $EXTRA_FLAGS
echo "🚀 Starting APP services..." echo "🚀 Starting APP services..."
docker compose -p $PROJECT_NAME -f docker-compose.yml $EXTRA_FLAGS docker compose -p $PROJECT_NAME -f docker-compose.yml $EXTRA_FLAGS

View File

@ -10,7 +10,7 @@ else
fi fi
# 使用 .env 中的 APP_NAME 作為 project name # 使用 .env 中的 APP_NAME 作為 project name
PROJECT_NAME="${APP_NAME:-ktvproject}" PROJECT_NAME="${APP_NAME}"
echo "📊 目前 $PROJECT_NAME 相關容器狀態:" echo "📊 目前 $PROJECT_NAME 相關容器狀態:"
docker ps --filter "name=${PROJECT_NAME}_" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" docker ps --filter "name=${PROJECT_NAME}_" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

14
stop.sh
View File

@ -22,19 +22,19 @@ NETWORK_NAME="${APP_NAME}_network"
EXTRA_FLAGS="" EXTRA_FLAGS=""
if [ "$WIPE" == "true" ]; then if [ "$WIPE" == "true" ]; then
EXTRA_FLAGS="-v --rmi all" EXTRA_FLAGS="-v --rmi all"
# 檢查並建立 network如果不存在
if ! docker network ls --format '{{.Name}}' | grep -wq "$NETWORK_NAME"; then
echo "🔌 Docker 網路 $NETWORK_NAME 不存在"
else
docker network rm $NETWORK_NAME
echo "🔌 Docker 網路 $NETWORK_NAME 已刪除"
fi
fi fi
echo "🛑 Stopping APP services..." echo "🛑 Stopping APP services..."
docker compose -p "$PROJECT_NAME" -f docker-compose.yml down $EXTRA_FLAGS docker compose -p "$PROJECT_NAME" -f docker-compose.yml down $EXTRA_FLAGS
if [ "$WIPE" == "true" ]; then if [ "$WIPE" == "true" ]; then
# 檢查並建立 network如果不存在
if ! docker network ls --format '{{.Name}}' | grep -wq "$NETWORK_NAME"; then
echo "🔌 Docker 網路 $NETWORK_NAME 不存在"
else
docker network rm $NETWORK_NAME
echo "🔌 Docker 網路 $NETWORK_NAME 已刪除"
fi
echo "🧹 所有資料volumes, image已清除" echo "🧹 所有資料volumes, image已清除"
else else
echo "✅ 所有服務 $PROJECT_NAME 已成功關閉。" echo "✅ 所有服務 $PROJECT_NAME 已成功關閉。"