From 1f1641600de0a31e5266888080150682e24403c3 Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Mon, 2 Jun 2025 15:24:15 +0800 Subject: [PATCH] =?UTF-8?q?Laravel=20=E7=AC=AC=E4=B8=80=E7=89=88=20?= =?UTF-8?q?=E5=8A=A0=E5=85=A5git=20clone=20git=20pull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 14 +++++--------- Dockerfile | 2 +- Dockerfile.git | 21 +++++++++++++++++++++ Dockerfile.queue | 2 +- docker-compose.git.yml | 13 +++++++++++++ docker-compose.yml | 6 +++--- docker/entrypoint.git.sh | 21 +++++++++++++++++++++ docker/entrypoint.sh | 10 ---------- docker/supervisord.git.conf | 12 ++++++++++++ restart.sh | 2 +- start.sh | 3 +++ status.sh | 2 +- stop.sh | 14 +++++++------- 13 files changed, 89 insertions(+), 33 deletions(-) create mode 100644 Dockerfile.git create mode 100644 docker-compose.git.yml create mode 100644 docker/entrypoint.git.sh create mode 100644 docker/supervisord.git.conf diff --git a/.env.example b/.env.example index 15fcdf9..583bea3 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,11 @@ # Project APP_NAME=ktvcentral -APP_DOMAIN=ktvcentral.test +APP_DOMAIN=superstarzqd.dnsnet.cc 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 DB_HOST=mariadb @@ -10,10 +13,3 @@ DB_PORT=3306 DB_DATABASE=KaraokeKingpin DB_USERNAME=KaraokeKingpin DB_PASSWORD=ESM7yTPMnavFmbBH - -# Redis -REDIS_HOST=redis -REDIS_PORT=6379 -QUEUE_CONNECTION=redis -CACHE_DRIVER=redis -SESSION_DRIVER=redis \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cd67806..b98983e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y \ 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 diff --git a/Dockerfile.git b/Dockerfile.git new file mode 100644 index 0000000..b2adc2f --- /dev/null +++ b/Dockerfile.git @@ -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"] \ No newline at end of file diff --git a/Dockerfile.queue b/Dockerfile.queue index 08526a4..3678b79 100644 --- a/Dockerfile.queue +++ b/Dockerfile.queue @@ -5,7 +5,7 @@ RUN apt-get update && apt-get install -y \ git unzip zip curl libzip-dev libonig-dev libxml2-dev && \ 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 diff --git a/docker-compose.git.yml b/docker-compose.git.yml new file mode 100644 index 0000000..1f131a8 --- /dev/null +++ b/docker-compose.git.yml @@ -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 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 31ae94d..6cd2acc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,7 +22,7 @@ services: dockerfile: Dockerfile container_name: ${APP_NAME}_app volumes: - - ./data/KTVCentral:/var/www/html + - ./data/html:/var/www/html - ./data/logs:/var/www/logs - ./docker/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf depends_on: @@ -43,7 +43,7 @@ services: ports: - "80:80" volumes: - - ./data/KTVCentral:/var/www/html + - ./data/html:/var/www/html - ./docker/nginx/:/etc/nginx/templates - ./data/logs/nginx/:/var/log/nginx depends_on: @@ -58,7 +58,7 @@ services: context: . dockerfile: Dockerfile.queue volumes: - - ./data/KTVCentral:/var/www/html + - ./data/html:/var/www/html depends_on: - nginx networks: diff --git a/docker/entrypoint.git.sh b/docker/entrypoint.git.sh new file mode 100644 index 0000000..6355335 --- /dev/null +++ b/docker/entrypoint.git.sh @@ -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 \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 33e330f..b739cd1 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -5,16 +5,6 @@ cd /var/www/html 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..." composer install --no-interaction --prefer-dist diff --git a/docker/supervisord.git.conf b/docker/supervisord.git.conf new file mode 100644 index 0000000..34dcb2e --- /dev/null +++ b/docker/supervisord.git.conf @@ -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 \ No newline at end of file diff --git a/restart.sh b/restart.sh index 8f91e22..d37a10a 100755 --- a/restart.sh +++ b/restart.sh @@ -15,7 +15,7 @@ else fi # 使用 .env 中的 APP_NAME 作為 project name -PROJECT_NAME="${APP_NAME:-ktvproject}" +PROJECT_NAME="${APP_NAME}" echo "♻️ 正在重新啟動 $PROJECT_NAME 所有服務..." diff --git a/start.sh b/start.sh index d97b405..3a98e4d 100755 --- a/start.sh +++ b/start.sh @@ -31,6 +31,9 @@ if [ "$WIPE" == "true" ]; then EXTRA_FLAGS="up -d --build" fi +echo "🚀 get APP to git services..." +docker compose -f docker-compose.git.yml $EXTRA_FLAGS + echo "🚀 Starting APP services..." docker compose -p $PROJECT_NAME -f docker-compose.yml $EXTRA_FLAGS diff --git a/status.sh b/status.sh index f6bfc07..b171df7 100644 --- a/status.sh +++ b/status.sh @@ -10,7 +10,7 @@ else fi # 使用 .env 中的 APP_NAME 作為 project name -PROJECT_NAME="${APP_NAME:-ktvproject}" +PROJECT_NAME="${APP_NAME}" echo "📊 目前 $PROJECT_NAME 相關容器狀態:" docker ps --filter "name=${PROJECT_NAME}_" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" diff --git a/stop.sh b/stop.sh index 1f6baf8..e01813e 100755 --- a/stop.sh +++ b/stop.sh @@ -22,19 +22,19 @@ NETWORK_NAME="${APP_NAME}_network" EXTRA_FLAGS="" if [ "$WIPE" == "true" ]; then 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 echo "🛑 Stopping APP services..." docker compose -p "$PROJECT_NAME" -f docker-compose.yml down $EXTRA_FLAGS 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)已清除!" else echo "✅ 所有服務 $PROJECT_NAME 已成功關閉。"