Skip to main content
Version: 1.12-grodno (current)

User.SPA

Важное примечание: Данная инструкция описывает ручное развертывание без использования Helm и GitLab CI/CD. Артефакты сборки извлекаются из образа и загружаются в S3-бакет my.medikt.net.

Подготовка к развертыванию

Secret'ы

Для конфигурации приложения понадобятся данные из следующих Secret'ов:

Получение данных из Secret'ов выполняется командой:

kubectl get secret <secret-name> -n prod -o jsonpath='{.data}' | jq -r '.[]' | base64 -d

Извлечение артефактов из Docker-образа

# Вытащить Docker образ
docker pull cr.yandex/crpt9c7igqasaqddbg0p/frontend/user.spa:260811.589.3223

# Создать контейнер и извлечь артефакты
mkdir -p artifacts
docker create --name temp-container cr.yandex/crpt9c7igqasaqddbg0p/frontend/user.spa:260811.589.3223
docker cp temp-container:/app/artifacts ./artifacts
docker rm temp-container

Проверка артефактов

ls -1 artifacts/
# Должны быть видны:
200.html
200.html.br
200.html.gz
404.html
404.html.br
404.html.gz
_nuxt
config.overrides.json
favicon.ico
images
index.html
index.html.br
index.html.gz
meta
user

Конфигурация приложения

Создание config.overrides.json

cat > artifacts/config.overrides.json << EOF
{
"userSsrUrl": "https://medikt.net",
"userAuthApiUrl": "https://auth.medikt.net",
"userApiUrl": "https://user.medikt.net",
"uploadApiUrl": "https://upload.medikt.net",
"contentApiUrl": "https://content.medikt.net",
"notificationApiUrl": "https://notification.medikt.net",
"logsApiUrl": "https://logs.medikt.net",
"cookieDomain": ".medikt.net",
"featbit": {
"secretClient": "<client_secret>",
"streamingUri": "wss://els-featuremgr.medikt.net",
"eventsUri": "https://els-featuremgr.medikt.net"
},
"logsApiKey": "<client_token>"
}
EOF

Замените:

  • <client_secret> - значение из Secret featbit-appsettings
  • <client_token> - значение из Secret browser-logging-api-secrets

Создание version.txt

echo "260811.589.3223" > artifacts/version.txt

Загрузка в S3-бакет

Настройка AWS CLI

export AWS_ACCESS_KEY_ID=<your-access-key>
export AWS_SECRET_ACCESS_KEY=<your-secret-key>

aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set default.region ru-central1

Загрузка файлов

cd artifacts

# Загрузка всех файлов с правильными настройками кэширования и Content-Type
aws s3 cp . s3://my.medikt.net/ \
--recursive \
--exclude "*" \
--include "*.html" \
--cache-control "no-cache" \
--endpoint-url https://storage.yandexcloud.net

aws s3 cp . s3://my.medikt.net/ \
--recursive \
--exclude "*" \
--include "*.js" \
--content-type "application/javascript" \
--endpoint-url https://storage.yandexcloud.net

aws s3 cp . s3://my.medikt.net/ \
--recursive \
--exclude "*.html" \
--exclude "*.js" \
--endpoint-url https://storage.yandexcloud.net

# можно выполнить один раз на тестовом развертывании или не выполнять вообще, так как в продакшене этот файл уже есть
aws s3 cp config.overrides.json s3://my.medikt.net/config.overrides.json \
--cache-control "no-cache" \
--endpoint-url https://storage.yandexcloud.net/

cd -

Проверка развертывания

Проверка файлов в бакете

aws s3 ls s3://my.medikt.net/ --endpoint-url https://storage.yandexcloud.net/

Должны быть видны:

  • index.html
  • config.overrides.json
  • version.txt
  • Папки js/, css/, img/ и другие

Проверка доступности

Откройте в браузере: https://my.medikt.net

Troubleshooting

Ошибки при извлечении артефактов

# Проверить, что образ загружен
docker images | grep user.spa

# Удалить старый контейнер, если он существует
docker rm -f temp-container

Ошибки доступа к S3

# Проверить конфигурацию AWS CLI
aws configure list
aws sts get-caller-identity

# Проверить права на бакет
aws s3 ls s3://my.medikt.net/ --endpoint-url https://storage.yandexcloud.net/

Ошибки конфигурации

# Проверить config.overrides.json
cat artifacts/config.overrides.json | jq .

# Проверить версию
cat artifacts/version.txt