---
title: "Docker"
description: "Документация по Docker для Ring Platform"
locale: "ru"
---
# Развертывание Docker

Ring Platform может быть развернут с использованием контейнеров Docker с полной оркестрацией Kubernetes. Это руководство охватывает как разработку, так и производственные развертывания.

## Предварительные требования

### Системные требования
- Docker 20.10+
- Docker Compose 2.0+
- Кластер Kubernetes (для производства)
- Минимум 4 ГБ ОЗУ, рекомендуется 8 ГБ
- 20 ГБ дискового пространства

### Сетевые требования
- Исходящий доступ HTTPS для загрузки пакетов
- Входящий доступ на портах 80/443 (производство)
- Доступ к Forgejo OCI (registry.ringdom.org / ring-mesh)

## Развертывание в разработке

### 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.
