{"id":28262089,"url":"https://github.com/fr0stfree/kittygram","last_synced_at":"2026-06-22T16:32:21.932Z","repository":{"id":283880747,"uuid":"953161678","full_name":"Fr0stFree/Kittygram","owner":"Fr0stFree","description":"Infrastructure code and CI/CD pipelines for automatic deployment of the Kittygram project in Yandex Cloud","archived":false,"fork":false,"pushed_at":"2025-04-13T10:37:40.000Z","size":362,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-20T06:12:25.506Z","etag":null,"topics":["docker","github-actions","nginx","terraform","yandex-cloud"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fr0stFree.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-22T17:55:12.000Z","updated_at":"2025-05-18T10:30:47.000Z","dependencies_parsed_at":"2025-04-13T10:52:44.500Z","dependency_job_id":null,"html_url":"https://github.com/Fr0stFree/Kittygram","commit_stats":null,"previous_names":["fr0stfree/devopsvirtualization-homework1","fr0stfree/kittygram"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Fr0stFree/Kittygram","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fr0stFree%2FKittygram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fr0stFree%2FKittygram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fr0stFree%2FKittygram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fr0stFree%2FKittygram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fr0stFree","download_url":"https://codeload.github.com/Fr0stFree/Kittygram/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fr0stFree%2FKittygram/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34657893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","github-actions","nginx","terraform","yandex-cloud"],"created_at":"2025-05-20T06:12:13.464Z","updated_at":"2026-06-22T16:32:21.926Z","avatar_url":"https://github.com/Fr0stFree.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kittygram Infrastructure and Deployment\n\nЭтот репозиторий содержит инфраструктурный код и пайплайны CI/CD для автоматического развертывания проекта [Kittygram](https://github.com/yandex-praktikum/kittygram) в Yandex Cloud. Данный проект доступен по следующему адресу: http://89.169.154.252/\n\n## 📚 Что было сделано\n\nВ рамках домашнего задания был выполнен полный цикл автоматизированного деплоя приложения Kittygram в облаке Yandex Cloud. Для этого была разработана и настроена инфраструктура с использованием Terraform: созданы необходимые ресурсы — виртуальная машина, публичный IP-адрес, облачная сеть и конфигурация SSH-доступа. На этапе инициализации ВМ применяется cloud-init, с помощью которого происходит автоматическая установка Docker, настройка docker-compose и добавление SSH-ключей.\n\nРазвёртывание самого приложения реализовано через GitHub Actions. Создан CI/CD-пайплайн, состоящий из нескольких стадий: сборка Docker-образов фронтенда, бэкенда и nginx, публикация их на DockerHub, подключение к облачной ВМ и запуск контейнеров с использованием docker-compose.production.yml. Также добавлены Telegram-уведомления для информирования о статусе пайплайна. Для повышения надёжности проекта присутствуют автотесты, проверяющие корректность конфигурации, доступность приложения и публикацию образов в DockerHub. Проект полностью контейнеризирован и готов к развёртыванию.\n\n## 📦 Стек технологий\n\n- [Terraform](https://www.terraform.io/) — инфраструктура как код\n- [GitHub Actions](https://docs.github.com/en/actions) — CI/CD пайплайны\n- [Docker](https://www.docker.com/) — упаковка и запуск приложения\n- [Yandex Cloud](https://cloud.yandex.ru/) — облачная платформа\n- [cloud-init](https://cloudinit.readthedocs.io/en/latest/) — первичная настройка ВМ\n- [Telegram Bot](https://core.telegram.org/bots/api) — уведомления\n\n## ⚙️ Структура проекта\n\n```\n├── README.md  \n├── .github\n│   └── workflows\n│       ├── deploy.yml              # GitHub Actions: пайплайн деплоя проекта на удалённую ВМ\n│       └── terraform.yml           # GitHub Actions: пайплайн для применения Terraform-инфраструктуры\n├── backend                         # Django-бэкенд Kittygram \n│   ├── Dockerfile\n│   ├── README.md\n│   ├── cats\n│   ├── entrypoint.sh\n│   ├── kittygram_backend\n│   ├── manage.py\n│   └── requirements.txt\n├── docker-compose.production.yml   # Compose-файл для прод-сборки (frontend + backend + nginx)\n├── frontend                        # React-фронтенд Kittygram\n│   ├── Dockerfile\n│   ├── README.md\n│   ├── package-lock.json\n│   ├── package.json\n│   ├── public\n│   └── src\n├── infra                           # Terraform-код для создания инфраструктуры в Yandex Cloud\n│   ├── main.tf                     # Основной файл: создаёт ВМ, сеть, диск и привязку ключей\n│   ├── output.tf                   # Выходные данные Terraform\n│   ├── provider.tf                 # Настройки провайдера Yandex Cloud\n│   └── variables.tf                # Описание переменных Terraform\n├── nginx                           # Конфигурация для reverse-proxy Nginx\n│   ├── Dockerfile\n│   └── nginx.conf\n├── pytest.ini\n├── .env                            # Файл окружения для локального запуска приложения. Смотри .env.example\n├── tests\n│   ├── __init__.py\n│   ├── conftest.py\n│   ├── test_connection.py\n│   ├── test_dockerhub_images.py\n│   └── test_files.py\n└── tests.yml\n```\n\n## Необходимые секреты\n\n| Название | Описание |\n|------------------|----------|\n| YC_SA_JSON_CREDENTIALS | JSON-файл с ключами сервисного аккаунта Yandex Cloud |\n| YC_FOLDER_ID | ID каталога Yandex Cloud |\n| YC_CLOUD_ID | ID облака Yandex Cloud |\n| TELEGRAM_CHAT_ID | ID чата Telegram для уведомлений |\n| TELEGRAM_BOT_TOKEN | Токен Telegram бота для уведомлений |\n| ACCESS_KEY | Доступ к S3-совместимому хранилищу |\n| SECRET_KEY | Секретный ключ доступа к S3-совместимому хранилищу |\n| DOCKER_PASSWORD | Пароль от Docker Hub |\n| DOCKER_USERNAME | Логин от Docker Hub |\n| PRODUCTION_HOST_ADDR | IP-адрес продакшн-сервера на который будет развернуто приложение |\n| PRODUCTION_HOST_LOGIN | Логин для доступа к продакшн-серверу |\n| PRODUCTION_HOST_SSH_PRIVATE_KEY | Приватный SSH-ключ для доступа к продакшн-серверу. Используется для доступа к серверу и развертывания приложения через Deploy Action. |\n| PRODUCTION_HOST_SSH_PUBLIC_KEY | Публичный SSH-ключ для доступа к продакшн-серверу. Используется для создания виртуальной машины и настройки доступа к ней. |\n| ALLOWED_HOSTS | Список разрешённых хостов для Django-приложения. |\n| DEBUG | Режим отладки Django-приложения. |\n| POSTGRES_PASSWORD | Пароль для PostgreSQL. |\n| POSTGRES_USER | Имя пользователя для PostgreSQL. |\n| POSTGRES_DB | Имя базы данных для PostgreSQL. |\n| POSTGRES_HOST | Адрес подключения к PostgreSQL. |\n| POSTGRES_PORT | Порт подключения PostgreSQL. |\n\n\n## 🚀 Pipelines\n\n### Инфраструктура `terraform.yml`\n\nЗапускается через GitHub Actions → Terraform. Необходимо перейти в  Run workflow → выбрать действие:\n - plan — просмотр изменений\n - apply — создать ресурсы\n - destroy — удалить ресурсы\n\nПосле успешного apply у тебя появится виртуальная машина с Docker и docker-compose из cloud-init.\n\n### CI/CD `deploy.yml`\n\nПайплайн автоматически запускается при пуше в ветку main/master\n\nStages\n- Сборку образов frontend, backend и nginx\n- Тестирование образов frontend, backend и nginx\n- Публикацию образов на DockerHub\n- Подключение к удалённой ВМ\n- Запуск контейнеров с помощью docker-compose.production.yml\n- Проверку доступности приложения\n- Отправку уведомления в Telegram\n\n## Примечание\n\nРазработано в рамках учебного задания магистратуры DevOps-инженер от Яндекс Практикума.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffr0stfree%2Fkittygram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffr0stfree%2Fkittygram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffr0stfree%2Fkittygram/lists"}