#!/bin/bash # Функция вывода помощи usage() { echo "Использование: $0 service version" echo " service - Указать обновляемый сервис: meshcentral, rustdesk или passbolt" echo " version - Новая версия приложения" exit 1 } upgradeService() { docker compose stop > /dev/null 2>&1 docker compose up -d > /dev/null 2>&1 } upgradeOneService() { local service="$1" # Остановить контейнер приложения docker compose stop $service > /dev/null 2>&1 # Запустить docker compose заново с обновлённым приложением docker compose up -d $service > /dev/null 2>&1 } if [[ $# -lt 2 ]]; then usage fi # Принимаем новую версию как аргумент NEW_VERSION="$2" case "$1" in 'meshcentral') cd /opt/docker/$1/ && sed -i.bak "s#typhonragewind/meshcentral:.*#typhonragewind/meshcentral:$NEW_VERSION#" docker-compose.yml echo "Загрузка образа: MeshCentral:$NEW_VERSION" if ! docker compose pull $1 > /dev/null 2>&1; then echo 'Образ не найден.' exit 1 fi echo "Выполняется обновление приложения $1..." upgradeOneService meshcentral echo "Обновление приложения $1 до версии $NEW_VERSION выполнено." ;; 'rustdesk') cd /opt/docker/$1/ && sed -i.bak "s#rustdesk/rustdesk-server:.*#rustdesk/rustdesk-server:$NEW_VERSION#" docker-compose.yml echo "Загрузка образа: RustDesk:$NEW_VERSION" if ! docker compose pull > /dev/null 2>&1; then echo 'Образ не найден.' exit 1 fi echo "Выполняется обновление приложения $1..." upgradeService echo "Обновление приложения $1 до версии $NEW_VERSION выполнено." ;; 'passbolt') cd /opt/docker/$1/ && sed -i.bak "s#passbolt/passbolt:.*#passbolt/passbolt:$NEW_VERSION#" docker-compose.yml echo "Загрузка образа: Passbolt:$NEW_VERSION" if ! docker compose pull $1 > /dev/null 2>&1; then echo 'Образ не найден.' exit 1 fi echo "Выполняется обновление приложения $1..." upgradeOneService passbolt echo "Обновление приложения $1 до версии $NEW_VERSION выполнено." ;; *) usage ;; esac docker image prune -af > /dev/null 2>&1