6.8 KiB
6.8 KiB
Развертывание
Обзор
Quoter можно развернуть различными способами в зависимости от ваших потребностей и инфраструктуры.
Способы развертывания
1. Docker (Рекомендуется)
Сборка образа
# Сборка production образа
docker build -t quoter:latest .
# Сборка с тегами
docker build -t quoter:v1.0.0 .
Запуск контейнера
docker run -d \
--name quoter \
-p 8080:8080 \
-e REDIS_URL=redis://redis:6379 \
-e CORE_URL=https://api.example.com/graphql \
-e STORJ_ACCESS_KEY=your-key \
-e STORJ_SECRET_KEY=your-secret \
-e AWS_ACCESS_KEY=your-aws-key \
-e AWS_SECRET_KEY=your-aws-secret \
quoter:latest
Docker Compose
Создайте docker-compose.yml:
version: '3.8'
services:
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
quoter:
build: .
ports:
- "8080:8080"
environment:
- REDIS_URL=redis://redis:6379
- CORE_URL=https://api.example.com/graphql
- STORJ_ACCESS_KEY=${STORJ_ACCESS_KEY}
- STORJ_SECRET_KEY=${STORJ_SECRET_KEY}
- AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
- AWS_SECRET_KEY=${AWS_SECRET_KEY}
- RUST_LOG=info
depends_on:
- redis
restart: unless-stopped
volumes:
redis_data:
Запуск:
docker-compose up -d
2. Kubernetes
Deployment
Создайте k8s/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: quoter
labels:
app: quoter
spec:
replicas: 3
selector:
matchLabels:
app: quoter
template:
metadata:
labels:
app: quoter
spec:
containers:
- name: quoter
image: quoter:latest
ports:
- containerPort: 8080
env:
- name: REDIS_URL
value: "redis://redis-service:6379"
- name: CORE_URL
value: "https://api.example.com/graphql"
- name: STORJ_ACCESS_KEY
valueFrom:
secretKeyRef:
name: quoter-secrets
key: storj-access-key
- name: STORJ_SECRET_KEY
valueFrom:
secretKeyRef:
name: quoter-secrets
key: storj-secret-key
- name: AWS_ACCESS_KEY
valueFrom:
secretKeyRef:
name: quoter-secrets
key: aws-access-key
- name: AWS_SECRET_KEY
valueFrom:
secretKeyRef:
name: quoter-secrets
key: aws-secret-key
- name: RUST_LOG
value: "info"
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Service
apiVersion: v1
kind: Service
metadata:
name: quoter-service
spec:
selector:
app: quoter
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
Secrets
apiVersion: v1
kind: Secret
metadata:
name: quoter-secrets
type: Opaque
data:
storj-access-key: <base64-encoded-key>
storj-secret-key: <base64-encoded-secret>
aws-access-key: <base64-encoded-key>
aws-secret-key: <base64-encoded-secret>
3. Systemd (Linux)
Создание сервиса
Создайте /etc/systemd/system/quoter.service:
[Unit]
Description=Quoter File Service
After=network.target redis.service
[Service]
Type=simple
Author=quoter
Group=quoter
WorkingDirectory=/opt/quoter
Environment=REDIS_URL=redis://localhost:6379
Environment=CORE_URL=https://api.example.com/graphql
Environment=STORJ_ACCESS_KEY=your-key
Environment=STORJ_SECRET_KEY=your-secret
Environment=AWS_ACCESS_KEY=your-aws-key
Environment=AWS_SECRET_KEY=your-aws-secret
Environment=RUST_LOG=info
ExecStart=/opt/quoter/quoter
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Управление сервисом
# Создание пользователя
sudo useradd -r -s /bin/false quoter
# Копирование бинарного файла
sudo cp target/release/quoter /opt/quoter/
sudo chown quoter:quoter /opt/quoter/quoter
# Включение и запуск сервиса
sudo systemctl daemon-reload
sudo systemctl enable quoter
sudo systemctl start quoter
# Проверка статуса
sudo systemctl status quoter
Мониторинг и логирование
Prometheus метрики
Добавьте в Cargo.toml:
[dependencies]
prometheus = "0.13"
actix-web-prom = "0.6"
Grafana дашборд
Создайте дашборд для мониторинга:
- Количество запросов в секунду
- Время ответа API
- Использование памяти и CPU
- Ошибки по типам
- Использование квот
Логирование
Структурированные логи
# JSON формат для ELK stack
RUST_LOG=info cargo run | jq .
Ротация логов
Настройте logrotate:
/var/log/quoter/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 quoter quoter
postrotate
systemctl reload quoter
endscript
}
Масштабирование
Горизонтальное масштабирование
- Load Balancer: Настройте nginx или HAProxy
- Redis Cluster: Для высоких нагрузок
- S3 CDN: Для статических файлов
Вертикальное масштабирование
- Увеличьте ресурсы контейнера/сервера
- Настройте пул соединений Redis
- Оптимизируйте размер изображений
Безопасность
Сетевая безопасность
- Используйте HTTPS в продакшене
- Настройте firewall
- Ограничьте доступ к Redis
Секреты
- Используйте Kubernetes Secrets или Docker Secrets
- Не храните секреты в коде
- Ротация ключей доступа
Аудит
- Логируйте все операции с файлами
- Отслеживайте использование квот
- Мониторьте подозрительную активность