Ручная установка
- Скопировать файлы сертификатов на сервер backend
- Подключиться к серверу backend по протоколу ssh
- Если необходимо - выполнить конвертацию сертификатов в формат *.crt командами: openssl x509 -inform DER -in xxxxxxxxxxxxx.cer -out xxxxxxxxxxxxx.cer.crt и/или openssl x509 -inform PEM -in xxxxxxxxxxxxx.cer -out xxxxxxxxxxxxx.cer.crt
- скопировать файлы в контейнер командой: docker cp xxxxxxxxxxxxxxxx.crt имя_контейнера:/root
- Войти в командную строку контейнера командой: docker exec -ti имя_контейнера /bin/bash
- Выполнить внутри контейнера команду update-ca-certificates
- выполнить команду: docker restart имя_контейнера
- важное замечание - при остановке контейнера через docker-compose down/up - необходимо повторить шаги с п.1 по п.7
Установка сертификата во все контейнеры SimpleOne через скрипт
Часть сервисов SimpleOne (`backend`, `schedule`, `business_rule`, `event`) делает исходящие HTTPS-запросы к внешним системам (почта, LDAP, внешние API). Если такая система использует самоподписанный или корпоративный сертификат, его нужно добавить в доверенные внутри контейнеров — иначе запросы будут падать с ошибкой проверки TLS.
Скрипт ниже автоматизирует установку сертификата сразу во все подходящие запущенные контейнеры, но без ручного `docker exec` для каждого контейнера).
## Скрипт
Сохраните как `add_cert.sh` в одной директории с файлом сертификата:
#!/bin/bash
# Проверка, что передан аргумент (имя файла сертификата)
if [ -z "$1" ]; then
echo "Ошибка: Необходимо указать имя файла сертификата в текущей директории."
echo "Пример использования: bash $0 certificate.crt"
exit 1
fi
cert_path="./$1"
# Проверка, что файл существует
if [ ! -f "$cert_path" ]; then
echo "Ошибка: Файл сертификата '$cert_path' не найден."
exit 1
fi
# Получение списка контейнеров, в которые будет ставиться сертификат
containers=($(docker ps --format '{{.Names}}' | grep -E 'backend|schedule|business_rule|event'))
# Цикл для обхода всех выбранных контейнеров
for container in "${containers[@]}"; do
echo "Обработка контейнера: $container"
# Копирование сертификата в контейнер
docker cp "$cert_path" "$container:/usr/local/share/ca-certificates/"
# Обновление списка доверенных сертификатов
docker exec "$container" update-ca-certificates
echo "Сертификат добавлен и обновлен в контейнере $container."
echo ""
done
echo "Операция завершена: сертификат '$1' добавлен и обновлен во всех указанных контейнерах."
## Как использовать
1. Положите сертификат (`.crt`) и скрипт в одну директорию на сервере.
2. Дайте права на выполнение: `chmod +x add_cert.sh`
3. Запустите: `./add_cert.sh certificate.crt`
4. Скрипт сам найдёт запущенные контейнеры имеющими в названии `backend`, `schedule`, `business_rule`, `event` и установит сертификат в каждый.
## Важно
Сертификат ставится во временный слой контейнера и **пропадёт при пересоздании** (обновление платформы, `docker-compose up -d` с новым образом и т.п.) — после этого скрипт нужно запустить снова.