Примечание
Kubernetes предназначен для управления контейнеризованными приложениями в крупномасштабных производственных средах. Он поддерживает автоматическое масштабирование, обнаружение сервисов и управление отказами.
Развертывание в Docker-compose затрудняет масштабирование и не обеспечивает отказоустойчивость.
В данном примере рассматривается вариант развертывания всех компонентов системы, включая общесистемные PostgreSQL, Redis, RabbitMQ, на одной виртуальной машине.
Для установки Docker на ВМ и включения автозагрузки при перезапуске выполните команды:
sudo dnf install docker-ce docker-ce-cli docker-compose
sudo systemctl enable docker --now
sudo systemctl status docker
Подробнее об установке на РЕД ОС — https://redos.red-soft.ru/base/redos-7_3/7_3-administation/7_3-containers/7_3-docker-install/?nocache=1729788973214.
Включите доступ пользователя к сервису:
usermod -aG docker <имя_пользователя>
Для установки Docker на ВМ и включения автозагрузки при перезапуске выполните команды:
sudo apt install docker-compose-v2
Добавить текущего пользователя в группу docker:
sudo usermod -aG docker $USER
Подробнее об установке — https://docs.astralinux.ru/latest/guide/virtual/docker/compose2/.
Если для обращения к сервису планируется использовать доменное имя (например, https://timetta.my-company.com), то требуется создание соответствующий DNS-записей. Альтернатива — обращаться по IP адресу.
Для работы приложения потребуются сертификаты для всех IP адресов и/или доменных имен, по которым будут опубликованы сервисы приложения.
Для compose файла и конфигураций создаем папку, например:
sudo mkdir -p /opt/timetta
sudo chown -R $USER:$USER /opt/timetta # Даём права своему пользователю
cd /opt/timetta
В папку надо добавить файлы:
Если есть приватный и публичный ключи, то создать pfx можно так:
openssl pkcs12 -export -out certificate.pfx -inkey certificate.pem -in certificate.pem
Замените op.timetta-test.com на ваше доменное имя или IP адрес. Укажите пароли для Redis, RabbitMQ и прочие параметры.
name: timetta
configs:
app_settings:
file: ./settings.json
client_settings:
file: ./client-settings.json
nginx_config:
file: ./nginx.conf
certificate_pfx:
file: ./certificate.pfx
cert_pub_pem:
file: ./cert_pub.pem
cert_key_pem:
file: ./cert_key.pem
services:
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- /path/to/local/dаta:/root/redis
- /path/to/local/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=1
- REDIS_PORT=6379
- REDIS_DATABASES=16
rabbitmq:
container_name: rabbitmq
image: rabbitmq:latest
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1
ports:
- 5672:5672
api:
container_name: api
restart: always
image: cr.yandex/crpr8bvek949tq2fuqkf/api:latest
ports:
- "5400:5400/tcp"
links:
- passport:op.timetta-test.com
environment:
- ASPNETCORE_URLS=https://*:5400
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_HTTPS_PORTS=5400
- ASPNETCORE_Kestrel__Certificates__Default__Path=/app/secrets/certificate.pfx
deploy:
resources:
limits:
cpus: "1"
memory: 4G
reservations:
cpus: "0.5"
memory: 2G
configs:
- source: app_settings
target: /app/secrets/settings.json
- source: certificate_pfx
target: /app/secrets/certificate.pfx
passport:
container_name: passport
image: cr.yandex/crpr8bvek949tq2fuqkf/passport:latest
ports:
- "5401:5401/tcp"
environment:
- ASPNETCORE_URLS=https://*:5401
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_HTTPS_PORTS=5401
- ASPNETCORE_Kestrel__Certificates__Default__Path=/app/secrets/certificate.pfx
configs:
- source: app_settings
target: /app/secrets/settings.json
- source: certificate_pfx
target: /app/secrets/certificate.pfx
consumer:
container_name: consumer
image: cr.yandex/crpr8bvek949tq2fuqkf/consumer:latest
ports:
- "5403:5403/tcp"
configs:
- source: app_settings
target: /app/secrets/settings.json
scheduler:
container_name: scheduler
image: cr.yandex/crpr8bvek949tq2fuqkf/scheduler:latest
ports:
- "5406:5406/tcp"
configs:
- source: app_settings
target: /app/secrets/settings.json
web-socket:
container_name: web-socket
image: cr.yandex/crpr8bvek949tq2fuqkf/web-socket-hub:latest
ports:
- "5404:5404/tcp"
environment:
- ASPNETCORE_URLS=https://*:5404
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_HTTPS_PORTS=5404
- ASPNETCORE_Kestrel__Certificates__Default__Path=/app/secrets/certificate.pfx
configs:
- source: app_settings
target: /app/secrets/settings.json
- source: certificate_pfx
target: /app/secrets/certificate.pfx
reporting:
container_name: reporting
image: cr.yandex/crpr8bvek949tq2fuqkf/reporting:latest
ports:
- "5405:5405/tcp"
environment:
- ASPNETCORE_URLS=https://*:5405
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_HTTPS_PORTS=5405
- ASPNETCORE_Kestrel__Certificates__Default__Path=/app/secrets/certificate.pfx
configs:
- source: app_settings
target: /app/secrets/settings.json
- source: certificate_pfx
target: /app/secrets/certificate.pfx
client:
container_name: client
image: cr.yandex/crpr8bvek949tq2fuqkf/client-host:latest
ports:
- "443:443/tcp"
deploy:
update_config:
parallelism: 1
delay: 0s
order: stop-first
configs:
- source: nginx_config
target: /etc/nginx/nginx.conf
- source: client_settings
target: /usr/share/nginx/html/assets/config.json
- source: cert_key_pem
target: /etc/nginx/cert_key.pem
- source: cert_pub_pem
target: /etc/nginx/cert_pub.pem
docker compose up -d --force-recreate
Структура БД и миграция данных выполняется путём обращения к адресу [apiURL]/migrate
. После миграции необходимо убедиться в работоспособности приложения.
Перейти на русскую версию?