Что такое deploy (развёртывание)?

Ответ

Deploy (развёртывание) — это комплексный процесс доставки новой версии программного обеспечения из среды разработки (например, Git-репозитория) на рабочее окружение (production), где оно становится доступным для конечных пользователей. Это ключевой этап жизненного цикла DevOps.

Основные этапы современного деплоя:

  1. Сборка (Build): Преобразование исходного кода в исполняемый артефакт.
    # Пример для PHP-проекта
    composer install --no-dev --optimize-autoloader
    npm run production
    php artisan config:cache
  2. Тестирование (Test): Автоматический прогон тестов (юнит, интеграционных) в CI-пайплайне.
  3. Релиз (Release): Создание версионированного релиз-артефакта (Docker-образ, zip-архив).
  4. Развёртывание (Deploy): Перенос артефакта на production-серверы и его активация.
  5. Верификация и мониторинг: Проверка работоспособности (health checks) и наблюдение за метриками после выкатки.

Стратегии развёртывания (для минимизации простоя и рисков):

  • Blue-Green Deployment: Два идентичных окружения ("синее" — текущее, "зелёное" — новое). После развёртывания на "зелёное" трафик переключается на него. Позволяет мгновенный откат.
  • Canary Release: Новая версия постепенно развёртывается на небольшой процент пользователей (канарейка), затем, при успехе, на всех.
  • Rolling Update: Постепенное обновление инстансов приложения по одному или группами.

Пример команды для простого деплоя через Ansible:

- name: Deploy application
  hosts: webservers
  tasks:
    - name: Pull latest code
      git:
        repo: 'git@github.com:company/app.git'
        dest: /var/www/app
        version: main
    - name: Install dependencies
      composer:
        command: install
        working_dir: /var/www/app
        no_dev: yes
    - name: Restart PHP-FPM
      systemd:
        name: php-fpm
        state: restarted

Ответ 18+ 🔞

Ну, слушай, давай разжую, что такое этот ваш деплой, а то некоторые думают, что это просто файлик скопировать. Ёпта, это целая наука, чувак. Деплой — это когда ты свою поделку, над которой ебушки-воробушки плясал, вытаскиваешь из песочницы (гита там всякого) и суёшь на реальный сервак, где уже люди твои баги ловить начинают. Это как сердце DevOps, пизда рулю, если без него — всё стоит.

Основные этапы, без которых нихуя не получится:

  1. Сборка (Build): Берёшь свои кривые строчки кода и делаешь из них что-то работающее. Типа как собрать табуретку из досок и гвоздей.

    # Пример для PHP-проекта
    composer install --no-dev --optimize-autoloader
    npm run production
    php artisan config:cache

    Главное тут — не забыть --no-dev, а то выкатишь на прод кучу хлама для разработки, сам от себя охуеешь.

  2. Тестирование (Test): Вот тут твой код начинают взъёбывать автоматические тесты в CI-пайплайне. Если они падают — дальше путь закрыт. Доверия ебать ноль к коду, который тесты не прошёл.

  3. Релиз (Release): Упаковываешь эту сборку в аккуратную коробочку с версией. Docker-образ, архив — неважно. Главное, чтобы потом можно было сказать: «Откатывайся на версию 2.1, там хуй с горы, а не фича».

  4. Развёртывание (Deploy): Самый волнующий момент. Ты эту коробочку закидываешь на продакшен-сервера и говоришь: «Работай, сука!». И сервера начинают бздеть.

  5. Верификация и мониторинг: Выкатил и пошёл пить чай? Да похуй, конечно. Надо смотреть, не легло ли всё, не жрёт ли память овердохуища. Health checks, метрики — без этого ты как слепой.

Стратегии, чтобы не обосраться:

  • Blue-Green Deployment: Два окружения — синее (рабочее) и зелёное (новое). Поднял на зелёном, проверил и хуй — переключил весь трафик. Если что-то пошло не так, переключил обратно за секунду. Красота.
  • Canary Release: Выкатываешь новинку не всем, а, скажем, 5% пользователей. Как канарейка в шахте. Если эти пять процентов не сдохли — можно и остальным подсунуть. Хитрая жопа, но безопасно.
  • Rolling Update: Обновляешь сервера по одному, потихоньку. Старый ещё работает, новый поднимается. Главное — не накосячить с совместимостью, а то гомосеки налетели.

Ну и пример, как это может выглядеть в лоб, через Ansible:

- name: Deploy application
  hosts: webservers
  tasks:
    - name: Pull latest code
      git:
        repo: 'git@github.com:company/app.git'
        dest: /var/www/app
        version: main
    - name: Install dependencies
      composer:
        command: install
        working_dir: /var/www/app
        no_dev: yes
    - name: Restart PHP-FPM
      systemd:
        name: php-fpm
        state: restarted

Смотришь на этот код и думаешь: «Э, бошка, думай». Всё вроде просто: вытянул код, поставил зависимости, перезапустил службу. Но чуть зазеваешься — и накрылся медным тазом весь сайт. Поэтому деплой — это вам не хуй в пальто, а серьёзная работа, где терпения ноль ебать нужно иметь, и внимательности — охуенно много.