diff --git a/webhook/docker-compose.yml b/webhook/docker-compose.yml new file mode 100644 index 0000000..85e4356 --- /dev/null +++ b/webhook/docker-compose.yml @@ -0,0 +1,15 @@ +services: + webhook: + image: alpine:3.19 + container_name: webhook-receiver + command: [ "sh", "-c", "apk add --no-cache webhook docker-cli && webhook -hooks /etc/webhook/hooks.json -verbose" ] + volumes: + - ./hooks.json:/etc/webhook/hooks.json:ro + - ./scripts:/etc/webhook/scripts:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - /Volume1/DockerAppsData/git:/Volume1/DockerAppsData/git:ro + - /Volume1/DockerAppsData/mixapp:/Volume1/DockerAppsData/mixapp + # ДОБАВЛЕНО: Монтируем папку с docker-compose файлами + - /Volume1/DockerYAML:/Volume1/DockerYAML + network_mode: host + restart: unless-stopped diff --git a/webhook/scripts/deploy-myproject.sh b/webhook/scripts/deploy-myproject.sh new file mode 100644 index 0000000..1c70f6d --- /dev/null +++ b/webhook/scripts/deploy-myproject.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# Скрипт деплоя для octopus (FIXED v4 - Auto-Update Compose) +LOG_FILE="/tmp/deploy-octopus.log" +HASH_FILE="/tmp/requirements-hash.txt" +DOCKER_COMPOSE_DIR="/Volume1/DockerYAML/mix" +APP_ROOT="/Volume1/DockerAppsData/mixapp/app" + +echo "=== Deploy started at $(date) ===" >> "$LOG_FILE" + +# 1. Git pull +echo "Step 1: Git pull..." >> "$LOG_FILE" +docker exec git-cli sh -c "cd /git/octopus && git pull" >> "$LOG_FILE" 2>&1 + +# 2. Вычисляем общий хеш (requirements + docker config + docker-compose) +echo "Step 2: Checking for structural changes..." >> "$LOG_FILE" +NEW_HASH=$(docker exec git-cli sh -c "cd /git/octopus && cat myproject/requirements.txt docker/* docker/docker-compose.yml | md5sum" | awk '{print $1}') + +OLD_HASH="" +if [ -f "$HASH_FILE" ]; then + OLD_HASH=$(cat "$HASH_FILE") +fi + +# 3. Копируем файлы приложения +echo "Step 3: Copying app files..." >> "$LOG_FILE" +rm -rf "$APP_ROOT/myproject"/* +cp -r /Volume1/DockerAppsData/git/octopus/myproject/. "$APP_ROOT/myproject/" >> "$LOG_FILE" 2>&1 + +rm -rf "$APP_ROOT/docker" +mkdir -p "$APP_ROOT/docker" +cp -r /Volume1/DockerAppsData/git/octopus/docker/. "$APP_ROOT/docker/" >> "$LOG_FILE" 2>&1 + +# 4. Обновляем docker-compose.yml (Infrastructure as Code) +echo "Step 4: Updating docker-compose.yml..." >> "$LOG_FILE" +cp /Volume1/DockerAppsData/git/octopus/docker/docker-compose.yml "$DOCKER_COMPOSE_DIR/docker-compose.yml" >> "$LOG_FILE" 2>&1 + +# 5. Устанавливаем права +echo "Step 5: Setting permissions..." >> "$LOG_FILE" +chown -R 1000:1000 "$APP_ROOT" >> "$LOG_FILE" 2>&1 +chmod +x "$APP_ROOT/docker/entrypoint.sh" >> "$LOG_FILE" 2>&1 +chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/media >> "$LOG_FILE" 2>&1 +chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static >> "$LOG_FILE" 2>&1 + +# 6. Логика пересборки +cd "$DOCKER_COMPOSE_DIR" + +if [ "$NEW_HASH" != "$OLD_HASH" ]; then + echo "Step 6: Changes detected! Rebuilding ALL images..." >> "$LOG_FILE" + docker-compose build >> "$LOG_FILE" 2>&1 + echo "$NEW_HASH" > "$HASH_FILE" + echo "Images rebuilt successfully!" >> "$LOG_FILE" +else + echo "Step 6: No structure changes, skipping rebuild." >> "$LOG_FILE" +fi + +# 7. Полный перезапуск +echo "Step 7: Restarting ALL containers..." >> "$LOG_FILE" +docker-compose down >> "$LOG_FILE" 2>&1 +docker-compose up -d >> "$LOG_FILE" 2>&1 + +# Проверка +echo "Step 8: Check status..." >> "$LOG_FILE" +docker-compose ps >> "$LOG_FILE" 2>&1 + +echo "=== Deploy finished at $(date) ===" >> "$LOG_FILE"