Architecture

Хмарні архітектури та DevOps-практики для стартапів

cyberwolf.studio
Architecture/12 min read/January 8, 2025
Danylo Kabanov
Danylo Kabanov
Chief Technology Officer

#Хмарні архітектури та DevOps-практики для стартапів

Інфраструктура — це фундамент продукту. Помилки на цьому рівні коштують дорого: простої, втрата даних, повільна розробка. У CyberWolf.Studio ми допомагаємо стартапам побудувати інфраструктуру, яка масштабується разом з бізнесом.

##Принципи нашого підходу

  • Infrastructure as Code — вся інфраструктура описана в коді та версіонована
  • Immutable infrastructure — замість оновлення серверів створюємо нові
  • Автоматизація всього — від тестів до деплою та моніторингу
  • Security by default — безпека вбудована в кожен етап пайплайну

##CI/CD пайплайн

Кожен коміт проходить через автоматизований пайплайн:

yaml
1# .github/workflows/deploy.yml
2name: Deploy Pipeline
3
4on:
5 push:
6 branches: [main, staging]
7 pull_request:
8 branches: [main]
9
10jobs:
11 quality:
12 runs-on: ubuntu-latest
13 steps:
14 - uses: actions/checkout@v4
15 - uses: pnpm/action-setup@v2
16
17 - name: Install dependencies
18 run: pnpm install --frozen-lockfile
19
20 - name: Lint
21 run: pnpm lint
22
23 - name: Type check
24 run: pnpm type-check
25
26 - name: Unit tests
27 run: pnpm test:unit --coverage
28
29 - name: Upload coverage
30 uses: codecov/codecov-action@v4
31
32 e2e:
33 needs: quality
34 runs-on: ubuntu-latest
35 steps:
36 - name: E2E tests
37 run: pnpm test:e2e
38 env:
39 DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
40
41 deploy-staging:
42 needs: [quality, e2e]
43 if: github.ref == 'refs/heads/staging'
44 runs-on: ubuntu-latest
45 steps:
46 - name: Deploy to staging
47 run: pnpm deploy:staging
48
49 deploy-production:
50 needs: [quality, e2e]
51 if: github.ref == 'refs/heads/main'
52 runs-on: ubuntu-latest
53 steps:
54 - name: Deploy to production
55 run: pnpm deploy:production

##Архітектура на AWS

Типова архітектура для стартапу, що обробляє 10K-100K запитів на хвилину:

typescript
1// Infrastructure as Code (CDK)
2const architecture = {
3 networking: {
4 vpc: "Ізольована мережа з публічними та приватними підмережами",
5 alb: "Application Load Balancer з SSL termination",
6 cloudfront: "CDN для статики та API-кешування",
7 },
8 compute: {
9 ecs_fargate: "Контейнери без управління серверами",
10 lambda: "Event-driven функції для фонових задач",
11 autoscaling: {
12 min: 2,
13 max: 20,
14 targetCpuUtilization: 70,
15 scaleInCooldown: 300,
16 scaleOutCooldown: 60,
17 },
18 },
19 data: {
20 rds_postgres: "Основна база даних з Multi-AZ",
21 elasticache_redis: "Кешування та сесії",
22 s3: "Медіа-файли та бекапи",
23 sqs: "Черги для асинхронних задач",
24 },
25 security: {
26 waf: "Захист від DDoS та SQL injection",
27 secrets_manager: "Централізоване управління секретами",
28 iam: "Мінімальні привілеї для кожного сервісу",
29 guardduty: "Моніторинг загроз",
30 },
31}

##Docker та контейнеризація

Кожен сервіс пакується у оптимізований Docker-образ:

dockerfile
1# Multi-stage build для мінімального розміру образу
2FROM node:20-alpine AS base
3RUN corepack enable pnpm
4
5FROM base AS deps
6WORKDIR /app
7COPY package.json pnpm-lock.yaml ./
8RUN pnpm install --frozen-lockfile --prod
9
10FROM base AS build
11WORKDIR /app
12COPY package.json pnpm-lock.yaml ./
13RUN pnpm install --frozen-lockfile
14COPY . .
15RUN pnpm build
16
17FROM base AS runner
18WORKDIR /app
19ENV NODE_ENV=production
20
21RUN addgroup -g 1001 -S nodejs
22RUN adduser -S nextjs -u 1001
23
24COPY --from=deps /app/node_modules ./node_modules
25COPY --from=build --chown=nextjs:nodejs /app/.next ./.next
26COPY --from=build /app/public ./public
27COPY --from=build /app/package.json ./
28
29USER nextjs
30EXPOSE 3000
31CMD ["pnpm", "start"]

##Моніторинг та алертинг

Три рівні спостережуваності:

РівеньІнструментиЩо відстежуємо
ІнфраструктураCloudWatch, GrafanaCPU, RAM, мережа, диск
ЗастосунокSentry, DataDogПомилки, латентність, throughput
БізнесPostHog, custom dashboardsКонверсія, активність, revenue

###Алертинг — не надто багато, не надто мало

typescript
1// Конфігурація алертів
2const alerts = {
3 critical: {
4 // Негайна реакція — 24/7
5 "error_rate > 5%": "PagerDuty + Slack",
6 "p99_latency > 3s": "PagerDuty + Slack",
7 "health_check_failed": "PagerDuty + Slack",
8 },
9 warning: {
10 // Реакція в робочий час
11 "error_rate > 1%": "Slack",
12 "p95_latency > 1s": "Slack",
13 "disk_usage > 80%": "Slack",
14 "cpu_usage > 85% for 10m": "Slack",
15 },
16 info: {
17 // Для аналізу
18 "deployment_completed": "Slack",
19 "auto_scaling_event": "Slack",
20 "certificate_expiry < 30d": "Email",
21 },
22}
"

"Найкращий інцидент — той, який вирішується до того, як його помітив користувач."

##Стратегія бекапів

  • Database: Автоматичні снепшоти кожні 6 годин, retention 30 днів
  • Media: S3 з cross-region replication
  • Configuration: Все в Git, encrypted secrets в AWS Secrets Manager
  • Disaster recovery: Регулярне тестування відновлення (раз на квартал)

##Підсумки

Хмарна інфраструктура — це не разове налаштування, а безперервний процес оптимізації. Починайте просто, автоматизуйте рутину, моніторте все і масштабуйтесь поступово.

***

Потрібна допомога з інфраструктурою? Зв'яжіться з нами — побудуємо надійний фундамент для вашого продукту.

DevOpsCloudAWSCI/CDInfrastructure