Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cinema Club Infrastructure

Цей репозиторій містить інфраструктурний код для автоматизації розгортання проекту Cinema Club.

📁 Структура проекту

CC-infra/
├── .github/
│   └── workflows/
│       ├── gitleaks.yml           # Сканування секретів
│       ├── deploy_infra.yml       # Розгортання інфраструктури (ручний запуск)
│       └── deploy_app.yml         # Розгортання додатку (ручний запуск)
├── ansible/
│   ├── roles/
│   │   ├── infrastructure/        # Системні налаштування
│   │   │   └── tasks/
│   │   │       └── main.yml       # Встановлення Docker, системних пакетів
│   │   └── application/           # Деплой додатку
│   │       ├── tasks/
│   │       │   └── main.yml       # Docker Compose деплой, cleanup
│   │       └── templates/
│   │           └── docker-compose.yml.j2  # Шаблон без volumes
│   ├── deploy_infrastructure.yml  # Playbook для інфраструктури
│   ├── deploy_application.yml     # Playbook для додатку
│   └── inventory.ini              # Інвентарь серверів
├── .gitleaks.toml                 # Конфігурація Gitleaks
└── README.md                      # Цей файл

🎯 Призначення

Цей репозиторій забезпечує:

  1. Розділення інфраструктури та додатку - окремі workflow для системних налаштувань та деплою
  2. Docker-based deployment - код додатку запакований в Docker image
  3. Версіонування - кожен build отримує тег latest + v{номер} (v1, v2, v3...)
  4. Безпеку - сканування коду на наявність секретів за допомогою Gitleaks
  5. Ручне керування - всі деплої запускаються вручну (workflow_dispatch)

🚀 Використання

Автоматичний деплой через GitHub Actions (основний метод)

1️⃣ Налаштування GitHub Secrets

Додайте в Settings → Secrets and variables → Actions:

Для SSH доступу:

  • SERVER_IP - IP вашого сервера (наприклад: 193.27.208.30)
  • SSH_PORT - SSH порт (наприклад: 15322)
  • SSH_USER - користувач для деплою (рекомендовано: deploy)
  • SSH_PRIVATE_KEY - приватний SSH ключ (ED25519)

Для Docker Hub:

  • DOCKER_USERNAME - ваш Docker Hub username
  • DOCKER_PASSWORD - Docker Hub access token (не пароль!)

2️⃣ Перший запуск: Deploy Infrastructure

  1. Перейдіть в ActionsDeploy Infrastructure
  2. Натисніть Run workflowRun workflow
  3. Очікуйте завершення (~2-5 хв)

Що відбувається:

  • ✅ Оновлення системи Ubuntu
  • ✅ Встановлення Docker, git, python3
  • ✅ Створення директорій для додатку
  • ✅ Налаштування користувача для Docker

Запускати: Тільки при новому сервері або оновленні системних компонентів

3️⃣ Деплой додатку: Deploy Application

  1. Перейдіть в ActionsDeploy Application
  2. Натисніть Run workflowRun workflow
  3. Очікуйте завершення (~3-7 хв)

Що відбувається:

  • ✅ Збирає Docker image з кодом з репозиторію CinemaClub
  • ✅ Теги: latest + v{номер запуску} (v1, v2, v3...)
  • ✅ Пуш на Docker Hub: ivansstef/cinemaclub
  • ✅ Деплой на сервер через Ansible
  • ✅ Cleanup старих образів (залишає 3 останні)
  • ✅ Перевірка доступності сайту

Запускати: Кожен раз при оновленні коду CinemaClub

4️⃣ Перевірка результату

http://your-server-ip:8080

Ручне розгортання через Ansible (для розробки)

  1. Налаштуйте ansible/inventory.ini:
[webservers]
your-server-ip ansible_port=15322 ansible_user=deploy ansible_ssh_private_key_file=~/.ssh/deploy_key
  1. Деплой інфраструктури:
cd ansible
ansible-playbook -i inventory.ini deploy_infrastructure.yml
  1. Деплой додатку:
ansible-playbook -i inventory.ini deploy_application.yml -e "image_tag=latest"

🔒 Безпека

Репозиторій автоматично сканується на наявність секретів:

  • При кожному push
  • При створенні pull request
  • Щоденно о 4:00 ранку

📋 Вимоги

Цільовий сервер:

  • Ubuntu 22.04 LTS
  • Користувач deploy з NOPASSWD:ALL sudo
  • SSH доступ через ED25519 ключ
  • Відкритий порт 8080 для HTTP

Для CI/CD (GitHub Actions):

  • GitHub Secrets налаштовані (SSH + Docker Hub)
  • Docker Hub акаунт з access token

Для локальної розробки:

  • Ansible 2.9+
  • SSH ключ для доступу до сервера
  • Python 3.8+

🔮 CI/CD Pipelines

Pipeline 1: Gitleaks ✅ (активний)

  • Тригери: Push, Pull Request, щоденно о 4:00
  • Що робить: Сканує код на наявність секретів, паролів, токенів
  • Статус: Постійно активний

Pipeline 2: Deploy Infrastructure 🔧 (ручний)

  • Тригери: Тільки ручний запуск (workflow_dispatch)
  • Що робить:
    • Підключається до сервера через SSH (користувач deploy)
    • Встановлює системні залежності (Docker, git, Python)
    • Налаштовує директорії та користувача
    • НЕ деплоїть додаток!
  • Коли запускати: При новому сервері або оновленні системи
  • Налаштування: Потребує SSH Secrets

Pipeline 3: Deploy Application 🚀 (ручний)

  • Тригери: Тільки ручний запуск (workflow_dispatch)
  • Що робить:
    1. Клонує репозиторій CinemaClub
    2. Збирає Docker image (nginx:1-alpine-slim + код)
    3. Теги: latest + v{run_number} (v23, v24, v25...)
    4. Пуш на Docker Hub: ivansstef/cinemaclub
    5. Ansible деплоїть через docker-compose (без volumes!)
    6. Cleanup старих образів (залишає 3 останні на сервері)
    7. Перевірка HTTP доступності
  • Коли запускати: Після змін в коді CinemaClub
  • Налаштування: Потребує SSH + Docker Hub Secrets

🚫 Автоматичні тригери вимкнені

Всі workflow запускаються тільки вручну для контролю над деплоєм.

📝 Важливі примітки

🐳 Docker Architecture

  • Код в образі: Весь код CinemaClub запакований в Docker image (без volumes)
  • Версії: Кожен build створює два теги: latest + v{номер}
  • Cleanup: На сервері зберігаються тільки 3 останні образи (автоматичне видалення старих)
  • Docker Hub: Всі версії зберігаються на Docker Hub (ручне видалення при потребі)

🔐 Безпека

  • Всі секрети в GitHub Secrets (ніколи в коді!)
  • SSH ключ ED25519 для deploy користувача
  • Docker Hub access token (не пароль!)
  • NOPASSWD sudo тільки для deploy користувача

🔄 Workflow логіка

  1. Інфраструктура (deploy_infra.yml):

    • Запускається ПЕРШИЙ РАЗ на новому сервері
    • Встановлює системні компоненти
    • НЕ торкається додатку
  2. Додаток (deploy_app.yml):

    • Запускається ПРИ КОЖНОМУ ОНОВЛЕННІ коду
    • Збирає новий Docker image з коду CinemaClub
    • Деплоїть через Ansible (docker-compose down/pull/up)
    • Чистить старі образи

🎯 Типові сценарії

Новий сервер:

1. Deploy Infrastructure (один раз)
2. Deploy Application (перший деплой)

Оновлення коду CinemaClub:

1. Deploy Application (тільки це)

Оновлення системних пакетів:

1. Deploy Infrastructure

🤝 Внесок

  1. Створіть feature branch
  2. Внесіть зміни
  3. Переконайтесь, що Gitleaks не виявив секретів
  4. Створіть Pull Request

� Посилання

📊 Статус проекту

  • ✅ Інфраструктура: Розділена на окремі ролі (infrastructure/application)
  • ✅ Docker: Версіонування + cleanup старих образів
  • ✅ CI/CD: Ручні workflow для Deploy Infrastructure та Deploy Application
  • ✅ Безпека: Gitleaks сканування + користувач deploy з обмеженими правами
  • ✅ Production-ready: Деплой на 193.27.208.30:8080

Останнє оновлення: Листопад 2025 - Рефакторинг архітектури, розділення infra/app

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages