← systems

001 Развертывание сайта с автоматическим деплоем (Docker + GitHub Actions)

  1. Выбор инфраструктуры и подготовка сервера
    • Выбор провайдера. Использовал Timeweb Cloud для аренды VPS в московском регионе для минимального пинга;
    • Конфигурация. Выбрал Ubuntu 24.04. с предустановленным Docker;
    • Ресурсы. Изначально рассматривал 2 ГБ RAM, но увеличил до 4 ГБ для обеспечения запаса прочности под будущие личные задачи автоматизации (n8n);
    • Сеть. Получил публичный IPv4 адрес для доступа извне;
  2. Безопасность и SSH-авторизация
    • Генерация ключей. На локальной машине создал пару ключей для защищенного доступа;
    • Настройка доступа. Отключил вход по паролю, добавив публичный ключ в файл~/.ssh/authorized_keys на сервере;
    • Права доступа. Настроил строгие права доступа в Linux (chmod 700 для папки .ssh и 600 для ключей), чтобы система безопасности не игнорировала “замки”.
  3. Контейнеризация проекта (Docker)
    • Dockerfile. Описал образ на базе nginx:stable-apline, в который копируются статические файлы сайта (папка src с основным кодом сайта) и кастомный конфиг Nginx.
    • Docker Compose. Создал файл docker-compose.yml для удобного управления контейнерами. В процессе отладил мапинг портов (заменили 8080:80 на стандартный 80:80, чтобы сайт открывался сразу по IP).
  4. Автоматизация деплоя (CI/CD)
    • GitHub Secrets. В репозитории создал зашифрованные переменные (REMOTE_HOST, REMOTE_USER, SSH_PRIVATE_KEY), чтобы скрыть чувствительные данные.
    • GitHub Actions. Написал workflow-файл по пути .github/workflows/deploy.yml. Скрипт срабатывает при каждом git push в ветку main, заходит по SSH на сервер и обновляет проект.
  5. Решение проблем доступа к приватному коду
    • Deploy Keys. Так как репозиторий приватный, добавил публичный ключ сервера в настройки GitHub (Deploy keys). Это дало серверу право скачивать код без ввода логина и пароля.
    • SSH-авторизация в скрипте. В GitHub Actions добавил шаг, который временно создает приватный ключ на сервере, чтобы Git мог успешно выполнить clone/pull по протоколу SSH.
  6. Финальный запуск
    • Команда деплоя. Создание docker-compose.yml мелочь, но приятная. Позволяет сократить количество ручного ввода команд, с помощью использования docker compose up -d --build, которая автоматически пересобирает образ при изменениях и перезапускает сайт с минимальным простоем.
    • Результат. Сайт доступен по публичному IP, а любое изменение в коде попадает на сервер за считанные секунды после пуша в репозиторий.