Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
a5df236
Определились с технологией
UZver24 Nov 23, 2025
eed393b
Добавлена заготовка проекта
UZver24 Nov 23, 2025
4762e6e
Бэкенд запущен
UZver24 Nov 23, 2025
c715c6d
Запущен фронтенд
UZver24 Nov 23, 2025
1101666
Контейнеризация
UZver24 Nov 23, 2025
b09b109
Собрали образы
UZver24 Nov 23, 2025
3daa021
Добавлен композер
UZver24 Nov 23, 2025
90716db
Развернул minikube
UZver24 Nov 23, 2025
2e4645d
Пробуем создать манифесты
UZver24 Nov 23, 2025
f240602
Протестировал minicube
UZver24 Nov 23, 2025
59880a0
Тест результата Helm
UZver24 Nov 23, 2025
5459838
Update roadmap.md
UZver24 Nov 24, 2025
b0b5d27
Update README.md
UZver24 Nov 24, 2025
e1596fc
Update README.md
UZver24 Nov 24, 2025
491abc6
Update README.md
UZver24 Nov 24, 2025
1ffab59
Настроен локальный terraform
UZver24 Nov 24, 2025
1f8463b
Формирование конфигов для облачного развёртывания
UZver24 Nov 24, 2025
dc445ae
Проверен терраформ в облаке
UZver24 Nov 24, 2025
bfe204b
Добавлено создание k8 кластера
UZver24 Nov 24, 2025
daad752
Автосоздание сервисного аккаунта
UZver24 Nov 24, 2025
140c649
Добавили работу с Managed Kubernetes Cluster
UZver24 Nov 24, 2025
5c5967b
Добавлено развёртывание в Yandex Serverless Containers
UZver24 Nov 24, 2025
d8775b5
Предварительная доводка для облака
UZver24 Nov 24, 2025
cccfbba
FinOps
UZver24 Nov 25, 2025
7354b4a
Оптимизация архитектуры облака
UZver24 Nov 25, 2025
b9b6f05
Заработало в облаке
UZver24 Nov 25, 2025
74f1edb
Переходим к настройке CI/CD
UZver24 Nov 25, 2025
334cfb9
Добавлена сборка бэкенда
UZver24 Nov 25, 2025
2e19121
Добавлена сборка фронтенда
UZver24 Nov 25, 2025
84b650c
Добавлена автоматизация terraform
UZver24 Nov 25, 2025
95b111a
Подготовлен CI/CD пайплайн
UZver24 Nov 25, 2025
b1003c5
Исправление ошибок
UZver24 Nov 25, 2025
544e786
Исправление ошибок
UZver24 Nov 25, 2025
24d6da3
backend работает, смотрю Terraform
UZver24 Nov 25, 2025
383619a
Исправление ошибок
UZver24 Nov 25, 2025
bc63c67
Исправление ошибок
UZver24 Nov 25, 2025
3359cae
Исправлен импорт сервисных аккаунтов
UZver24 Nov 25, 2025
95a792b
Ещё исправления сервисных аккаунтов
UZver24 Nov 25, 2025
3762f7c
Пробую удалять лишние аккаунты
UZver24 Nov 25, 2025
c19c360
Ещё пробуем работу с аккаунтами
UZver24 Nov 25, 2025
a947d17
Исправление ошибок
UZver24 Nov 25, 2025
10aa756
Исправляю авторизацию
UZver24 Nov 25, 2025
6379c6a
Импорт для бакета и контейнера
UZver24 Nov 25, 2025
b4e23e2
Доработка API Gateway и контейнеров
UZver24 Nov 25, 2025
434d44c
Исправление API Gateway
UZver24 Nov 25, 2025
fcbc4f1
Пропускаем создание yandex_api_gateway
UZver24 Nov 25, 2025
267fdd1
Восстановлен build-frontend
UZver24 Nov 25, 2025
243dc83
Исправление сборки фронтенда
UZver24 Nov 25, 2025
9ded6d3
Проба поправить API_GATEWAY_ENDPOINT
UZver24 Nov 25, 2025
a0f5fc0
Доработка сборки
UZver24 Nov 25, 2025
597af5a
Настройка YC
UZver24 Nov 25, 2025
aab2b2b
Исправляем Content-Type
UZver24 Nov 25, 2025
ae7e8c0
Обновление roadmap: MVP готов
UZver24 Nov 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
504 changes: 504 additions & 0 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

66 changes: 66 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
ENV/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Node
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
dist/
dist-ssr/
*.local

# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store

# Environment
.env
.env.local
.env.*.local

# Logs
*.log
logs/

# OS
Thumbs.db

# Terraform artifacts (infrastructure)
infrastructure/**/.terraform/
infrastructure/**/*.tfstate
infrastructure/**/*.tfstate.*
infrastructure/**/crash.log
infrastructure/**/.terraform.lock.hcl

# Terraform secrets (облако)
infrastructure/**/terraform.tfvars
infrastructure/**/*.auto.tfvars

124 changes: 124 additions & 0 deletions CI/CHECK_REGISTRY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Проверка Container Registry

## Быстрая проверка

### 1. Список реестров

```bash
yc container registry list
```

Вывод должен показать ваш реестр с ID (например, `crp50gpc30l3tbd4rtj0`).

### 2. Список образов в реестре

```bash
# Замените REGISTRY_ID на ваш ID реестра
yc container image list --registry-id crp50gpc30l3tbd4rtj0
```

Или по имени реестра:

```bash
yc container image list --registry-name devops-portfolio
```

### 3. Детальная информация об образе

```bash
# По ID образа
yc container image get --id crpjf10o8ke35dcsh20k

# Или по имени и тегу
yc container image get --name crp50gpc30l3tbd4rtj0/backend:latest
```

### 4. Проверка доступа через Docker

**Важно**: Если у вас настроен credential helper для `yc`, нужно либо отключить его, либо использовать другой профиль.

#### Вариант 1: Отключить credential helper для cr.yandex

```bash
# Проверить текущую конфигурацию
cat ~/.docker/config.json

# Если есть credential helper для cr.yandex, можно временно отключить его
# или использовать другой профиль
```

#### Вариант 2: Использовать IAM токен напрямую

```bash
# Создать IAM токен
TOKEN=$(yc iam create-token)

# Логин (может не работать, если включен credential helper)
echo "$TOKEN" | docker login --username iam --password-stdin cr.yandex
```

#### Вариант 3: Настроить credential helper правильно

```bash
# Настроить Docker для работы с Yandex Container Registry
yc container registry configure-docker
```

### 5. Проверка pull образа

```bash
# Попробовать скачать образ
docker pull cr.yandex/crp50gpc30l3tbd4rtj0/backend:latest
```

### 6. Проверка push образа

```bash
# Создать тестовый образ
docker tag <local-image> cr.yandex/crp50gpc30l3tbd4rtj0/test:latest

# Попробовать загрузить
docker push cr.yandex/crp50gpc30l3tbd4rtj0/test:latest
```

## Текущее состояние вашего реестра

- **Registry ID**: `crp50gpc30l3tbd4rtj0`
- **Registry Name**: `devops-portfolio`
- **Образы**:
- `backend:latest` (59.0 MB)
- `frontend:latest` (23.0 MB)

## Проверка прав доступа

```bash
# Проверить, какие роли назначены вашему аккаунту
yc container registry list-access-bindings --id crp50gpc30l3tbd4rtj0
```

## Устранение проблем

### Ошибка: "unauthorized"

1. Проверьте, что IAM токен действителен (не истёк)
2. Проверьте права доступа к реестру
3. Убедитесь, что используете правильный Registry ID

### Ошибка: "credential helper"

Если Docker использует credential helper от `yc`, можно:
1. Временно отключить его в `~/.docker/config.json`
2. Использовать другой профиль: `yc container registry configure-docker --profile <PROFILE>`
3. Использовать переменные окружения вместо credential helper

### Проверка токена

```bash
# Создать новый токен
yc iam create-token

# Проверить, что токен работает
yc config set token $(yc iam create-token)
yc container registry list
```

58 changes: 58 additions & 0 deletions CI/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# CI Scripts

В каталоге собраны вспомогательные скрипты, которые используются для ручного запуска или в GitHub Actions workflow для подготовки артефактов перед Terraform.

> **📋 Перед использованием CI/CD**: Настройте секреты в GitHub согласно инструкции в [SECRETS.md](SECRETS.md)

> **📝 GitHub Actions workflow**: Файл `.github/workflows/ci.yml` содержит конфигурацию автоматического CI/CD пайплайна.

> **🔧 Проблемы?**: См. [TROUBLESHOOTING.md](TROUBLESHOOTING.md) для решения частых проблем.

## `build_backend.sh`

Собирает backend-образ и публикует его в Yandex Container Registry.

Переменные окружения (обязательные):

| Переменная | Описание |
|-------------------|----------|
| `REGISTRY_ID` | ID Container Registry (например, `crp50gpc30l3tbd4rtj0`). |
| `IMAGE_TAG` | Тег образа (`latest`, `dev`, `$CI_COMMIT_SHORT_SHA`). |
| `YC_OAUTH_TOKEN` | OAuth/IAM токен, полученный через `yc iam create-token`. |

Пример локального запуска:

```bash
export REGISTRY_ID=crp50gpc30l3tbd4rtj0
export IMAGE_TAG=dev
export YC_OAUTH_TOKEN=$(yc iam create-token)
./CI/build_backend.sh
```

В GitHub Actions workflow переменные настраиваются автоматически через секреты (`REGISTRY_ID`, `YC_OAUTH_TOKEN`). `IMAGE_TAG` по умолчанию использует `${{ github.sha }}` (полный хеш коммита).

## `build_frontend.sh`

Собирает React/Vite фронтенд и выгружает готовый `dist/` в Object Storage (Yandex S3).

Переменные окружения (обязательные):

| Переменная | Описание |
|-------------------------|----------|
| `STATIC_BUCKET_NAME` | Имя бакета (например, `kulibin-devops-portfolio`). |
| `API_GATEWAY_ENDPOINT` | URL API Gateway, который будет подставлен в `VITE_API_BASE_URL`. |
| `AWS_ACCESS_KEY_ID` | Access key для Object Storage (из Terraform output). |
| `AWS_SECRET_ACCESS_KEY` | Secret key для Object Storage (из Terraform output). |

Пример запуска:

```bash
export STATIC_BUCKET_NAME=kulibin-devops-portfolio
export API_GATEWAY_ENDPOINT=https://d5dm4d9170q82do7f5m8.lievo6ut.apigw.yandexcloud.net
export AWS_ACCESS_KEY_ID=$(terraform -chdir=infrastructure/serverless output -raw static_site_access_key)
export AWS_SECRET_ACCESS_KEY=$(terraform -chdir=infrastructure/serverless output -raw static_site_secret_key)
./CI/build_frontend.sh
```

В GitHub Actions workflow переменные (`STATIC_BUCKET_NAME`, `API_GATEWAY_ENDPOINT`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`) автоматически извлекаются из Terraform outputs. Скрипт выполняет `npm ci`, `npm run build` и `yc storage s3 cp --recursive dist/ ...`.

Loading
Loading