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: ghcr.io (GitHub Container Registry)
- 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 ghcr.io/connectplatform/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 ghcr.io/connectplatform/ring:v0.9.18-ring-platform.org-amd64 -f Dockerfile .
Крок 2: Надіслати до реєстру
docker push ghcr.io/connectplatform/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=ghcr.io/connectplatform/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: ghcr.io/connectplatform/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.