---
title: "Docker"
description: "Документація по Docker для Ring Platform"
locale: "uk"
---
# Docker Deployment для Ring Platform

Комплексне розгортання Ring Platform використовуючи Docker containers з Kubernetes оркестрацією. Підтримує як розробку, так і production середовища з повною ізоляцією та безпекою.

## Системні вимоги

### Мінімальні вимоги
- **Docker**: 24.0+ (з BuildKit підтримкою)
- **Docker Compose**: 2.20+
- **Kubernetes**: 1.25+ (для production)
- **CPU**: 2 cores minimum, 4 cores recommended
- **RAM**: 4GB minimum, 8GB recommended
- **Storage**: 20GB для production deployment

### Мережеві вимоги
- **Outbound HTTPS**: Для завантаження пакетів та API calls
- **Inbound ports**: 80/443 для production, 3000 для development
- **Container registry**: registry.ringdom.org (Forgejo OCI / ring-mesh)
- **External services**: PostgreSQL, Redis, WayForPay, Polygon RPC

### Підтримувані архітектури
- **linux/amd64**: Primary production architecture
- **linux/arm64**: Secondary support для Apple Silicon development

## Розгортання в розробці

### Docker Compose (Розробка)

{`services:
  ring-platform:
    build:
      context: .
      dockerfile: Dockerfile
      platform: linux/amd64
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - NEXTAUTH_URL=http://localhost:3000
      - NEXT_PUBLIC_API_URL=http://localhost:3000
    volumes:
      - .:/app
      - /app/node_modules
    restart: unless-stopped

  postgres:
    image: postgres:15
    environment:
      - POSTGRES_DB=ring_platform
      - POSTGRES_USER=ring
      - POSTGRES_PASSWORD=secure_password
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres_data:`}

### Швидке налаштування розробки

Клонувати репозиторій Запустити середовище розробки Переглянути логи Доступ до додатку

{`git clone https://github.com/connectplatform/ring.git
cd ring/ring-platform.org

docker-compose -f docker-compose.dev.yml up -d

docker-compose logs -f ring-platform

open http://localhost:3000`}

## Виробниче розгортання

### Критичні вимоги до збірки

> [!WARNING]
> **КРИТИЧНО**: Ніколи не використовуйте підсвітку синтаксису на стороні сервера або імпорти Mermaid.js на верхньому рівні - викликає 30-секундні затримки та таймаути 503!

#### Специфікація платформи
Завжди збирати з явним зазначенням платформи для вузлів Kubernetes AMD64

{`docker build --platform linux/amd64 \
  -t registry.ringdom.org/ringdom-clones/ring:v0.9.18-ring-platform.org-amd64 \
  -f Dockerfile .`}

#### Конфігурація Docker
- **НЕ** виключати директорію `docs/` з `.dockerignore`
- **ОБОВ'ЯЗКОВО** копіювати директорії `lib/` та `docs/` на етапі runtime Dockerfile
- **Використовувати динамічні імпорти** для клієнтських бібліотек типу Mermaid.js

### Процес збірки та розгортання

#### Крок 1: Зібрати образ Docker

{`cd ring-platform.org
docker build --platform linux/amd64 \
  -t registry.ringdom.org/ringdom-clones/ring:v0.9.18-ring-platform.org-amd64 \
  -f Dockerfile .`}

#### Крок 2: Надіслати до реєстру

{`docker push registry.ringdom.org/ringdom-clones/ring:v0.9.18-ring-platform.org-amd64`}

#### Крок 3: Розгорнути в Kubernetes
ssh k8s-control-01 'kubectl -n ring-platform-org set image \

{`deployment/ring-platform \
  ring-platform=registry.ringdom.org/ringdom-clones/ring:v0.9.18-ring-platform.org-amd64'`}

#### Крок 4: Моніторити розгортання

{`ssh k8s-control-01 'kubectl -n ring-platform-org rollout status deployment/ring-platform'
ssh k8s-control-01 'kubectl -n ring-platform-org get pods -l app=ring-platform'`}

---

# Розгортання Kubernetes

## Огляд

Ring Platform розгортається в Kubernetes з використанням HAProxy як зовнішнього балансувальника навантаження та MetalLB для внутрішньої балансировки сервісів. Це забезпечує масштабованість корпоративного рівня, високу доступність та управління трафіком.

## Попередні вимоги

- Кластер Kubernetes v1.29+
- Встановлений HAProxy LoadBalancer (10.10.0.30)
- Налаштований MetalLB з пулом IP (10.10.0.40-10.10.0.50)
- Cilium CNI з шифруванням WireGuard
- NGINX Ingress Controller (опціонально)

## Конфігурація DNS

Налаштуйте вашого DNS-провайдера для вказівки `ring-platform.org` на ваші публічні IP:

Основна настройка (Рекомендується) Розширена настройка з балансуванням навантаження

{`ring-platform.org      A     195.95.233.69    # HAProxy LoadBalancer
www.ring-platform.org  CNAME ring-platform.org

ring-platform.org      A     195.95.233.69    # Основний (HAProxy)
ring-platform.org      A     195.95.233.15    # Другорядний (MetalLB)`}

## Налаштування простору імен

Створити простір імен Ring Встановити як простір за замовчуванням для розгортання

{`kubectl create namespace ring-platform-org

kubectl config set-context --current --namespace=ring-platform-org`}

## Розгортання додатку Ring Platform

ring-platform-deployment.yaml Сервіс Ring Platform з MetalLB

{`apiVersion: apps/v1
kind: Deployment
metadata:
  name: ring-platform
  namespace: ring-platform-org
  labels:
    app: ring-platform
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ring-platform
  template:
    metadata:
      labels:
        app: ring-platform
    spec:
      containers:
      - name: ring-platform
        image: registry.ringdom.org/ringdom-clones/ring:v0.9.18-ring-platform.org-amd64
        ports:
        - containerPort: 3000
          name: http
        env:
        - name: NODE_ENV
          value: "production"
        - name: NEXTAUTH_URL
          value: "https://ring-platform.org"
        - name: NEXT_PUBLIC_API_URL
          value: "https://ring-platform.org"
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /api/health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /api/health
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 5
          timeoutSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
  name: ring-platform-service
  namespace: ring-platform-org
  annotations:
    metallb.universe.tf/loadBalancerIPs: 10.10.0.41
spec:
  selector:
    app: ring-platform
  ports:
  - name: http
    port: 80
    targetPort: 3000
    protocol: TCP
  - name: https
    port: 443
    targetPort: 3000
    protocol: TCP
  type: LoadBalancer
  loadBalancerIP: 10.10.0.41`}

## Конфігурація NGINX Ingress

ring-platform-ingress.yaml Основний додаток Документація субдомен

{`apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ring-platform-ingress
  namespace: ring-platform-org
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
  tls:
  - hosts:
    - ring-platform.org
    - www.ring-platform.org
    - docs.ring-platform.org
    secretName: ring-platform-tls
  rules:
  - host: ring-platform.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ring-platform-service
            port:
              number: 80
  - host: www.ring-platform.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ring-platform-service
            port:
              number: 80
  - host: docs.ring-platform.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ring-platform-service
            port:
              number: 80`}

Це розгортання Kubernetes забезпечує масштабованість корпоративного рівня, високу доступність та надійне управління трафіком для платформи Ring з використанням балансувальників навантаження HAProxy та MetalLB.
