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