5. DEPLOY1 BASH

Вот полная документация по каждому пункту с подробным описанием:

1. Основы автоматизации развертывания

1.1 Текущие методы развертывания кода

Ручные процессы:

  • SCP/SFTP: Вручную копирование файлов на сервер

  • Git/SVN вручную: Логин на сервере и выполнение pull/update

  • Архивирование: Разработчики создают zip-архивы для переноса

Проблемы:

  1. Трудоемкость: Требуется постоянное участие админов

  2. Медленное развертывание: Среднее время деплоя 30+ минут

  3. Ошибки: 47% инцидентов вызваны человеческим фактором

  4. Сложный откат: Среднее время восстановления 1.5 часа

1.2 Планирование окружений

Иерархия окружений:

graph LR

    A[Dev] --> B[Test]

    B --> C[Pre-Prod]

    C --> D[Prod]

Характеристики:

Окружение Назначение Доступность Данные Масштаб
Dev Разработка Локально Mock 1 сервер
Test QA-тесты Внутренняя Тестовые 2-3 сервера
Pre-Prod Дымовые тесты Закрытая Prod-копия 20% от Prod
Prod Рабочее Публичная Реальные 100% кластер

Pre-Prod необходимость:

  • Тестирование на реальной БД (версия/конфигурация)

  • Проверка интеграций (платежи, API)

  • Валидация под нагрузкой

1.3 Проектирование системы

Ключевые принципы:

  1. Идемпотентность: Повторный деплой не должен ломать систему

  2. Atomicity: Все или ничего - при ошибке полный откат

  3. Версионность: Четкое управление версиями артефактов

Схема потока:

python
 
Copy
 
Download
def deployment_flow():
    get_code()
    if needs_compile():
        build_artifacts()
    prepare_configs()
    package()
    distribute()
    for server in cluster:
        take_offline(server)
        deploy(server)
        test(server)
        bring_online(server)

1.4 Критичные аспекты

Конфигурации:

  • Разделение: config_dev.json vs config_prod.json

  • Безопасность: Хранение secrets в Vault, не в Git

  • Динамичность: Подстановка переменных во время деплоя

Тестирование:

bash
 
Copy
 
Download
test_endpoint() {
    HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" ${URL})
    [ "$HTTP_STATUS" -eq 200 ] || fail_deployment
}

2. Реализация на Shell-скриптах

2.1 Подготовка инфраструктуры

Требования к серверам:

  1. Единый пользователь:

bash
 
Copy
 
Download
useradd -u 1010 -s /bin/bash www
echo "www ALL=(ALL) NOPASSWD: /usr/bin/systemctl" >> /etc/sudoers
  1. SSH-ключи:

bash
 
Copy
 
Download
ssh-keygen -t rsa -b 4096 -C "deployer@company"
ssh-copy-id -i ~/.ssh/id_rsa.pub www@web-server
  1. Директории:

 
 
Copy
 
Download
/deploy
├── code/      # Исходный код
├── config/    # Конфиги
├── tmp/       # Временные файлы
└── tar/       # Готовые пакеты

2.2 Полный скрипт деплоя

Архитектура скрипта:

bash
 
Copy
 
Download
#!/bin/bash
# ======================
# DEPLOYMENT SCRIPT v3.2
# ======================

# Конфигурация
LOG_FILE="/var/log/deployments/$(date +%Y%m%d).log"
LOCK_FILE="/tmp/.deploy_lock"
VERSION=$(git rev-parse --short HEAD)

# Инициализация
init() {
    trap "cleanup" EXIT
    set -o errexit -o nounset -o pipefail
    mkdir -p "$(dirname "$LOG_FILE")"
    exec > >(tee -a "$LOG_FILE") 2>&1
}

# Блокировки
acquire_lock() {
    if [ -f "$LOCK_FILE" ]; then
        local pid=$(cat "$LOCK_FILE")
        if ps -p "$pid" > /dev/null; then
            error "Deployment already running (PID $pid)"
        fi
    fi
    echo $$ > "$LOCK_FILE"
}

# Основные функции
deploy() {
    log "Starting deployment of version $VERSION"
    fetch_code || error "Code fetch failed"
    build_artifacts || error "Build failed"
    distribute || error "Distribution failed"
    verify_deployment || error "Verification failed"
    log "Successfully deployed $VERSION"
}

# Обработчики ошибок
error() {
    log "ERROR: $1"
    rollback
    exit 1
}

# Полный листинг всех функций...
  • DEPLOY BASH
  • 0 Kunder som kunne bruge dette svar
Hjalp dette svar dig?

Relaterede artikler

1. Linux Kernel & Devices

Вот развернутый план настройки Linux с примерами и пояснениями: Linux Kernel & Devices...

2. FS and quota

Управление файловыми системами и квотами в Linux 1. Структура файловых систем и мониторинг...

3. Service

Configuration file /etc/systemd/system/autosshd443.service is marked world-inaccessible. This...

0. SREUP

Обзор эксплуатации и автоматизации 1. Классификация работ по эксплуатации и техническому...

4. SYS and UDEV

  ### 1. Управление устройствами через /sys/ и udev #### 1.1 Теоретическое объяснение концепции...