#!/usr/bin/env bash # BÜTÇEM geri yükleme — sunucuda root olarak, ELLE çalıştırılır. Ayrıntı: docs/DEPLOY.md › Geri yükleme # # sudo scripts/backup/butcem-restore.sh /var/backups/butcem/mongo-….archive.gz [/var/backups/butcem/uploads-….tar.gz] # # DİKKAT: butcem veritabanındaki koleksiyonlar yedektekilerle DEĞİŞTİRİLİR (--drop); uploads arşivi # verilirse volume içeriği silinip arşivden yazılır. Önce uygulamayı durdurun (Dokploy › Stop). # Ayarlar butcem-backup.sh ile aynı dosyadan: /etc/butcem-backup.env set -euo pipefail CONFIG="${BUTCEM_BACKUP_CONFIG:-/etc/butcem-backup.env}" # shellcheck source=/dev/null [ -f "$CONFIG" ] && . "$CONFIG" : "${MONGO_CONTAINER:?}" "${MONGO_ROOT_USER:?}" "${MONGO_ROOT_PASSWORD:?}" "${UPLOADS_VOLUME:?}" DB_NAME="${DB_NAME:-butcem}" HELPER_IMAGE="${HELPER_IMAGE:-alpine:3.20}" MONGO_FILE="${1:?Kullanım: butcem-restore.sh [uploads-arşivi]}" UPLOADS_FILE="${2:-}" [ -s "$MONGO_FILE" ] || { echo "Arşiv yok veya boş: $MONGO_FILE"; exit 1; } [ -z "$UPLOADS_FILE" ] || [ -s "$UPLOADS_FILE" ] || { echo "Arşiv yok veya boş: $UPLOADS_FILE"; exit 1; } # Bütünlük kontrolü (aynı klasörde SHA256SUMS varsa) DIR="$(cd "$(dirname "$MONGO_FILE")" && pwd)" STAMP="$(basename "$MONGO_FILE" | sed -E 's/^mongo-(.*)\.archive\.gz$/\1/')" if [ -f "$DIR/SHA256SUMS-$STAMP" ]; then (cd "$DIR" && sha256sum -c "SHA256SUMS-$STAMP") || { echo "Bütünlük kontrolü başarısız."; exit 1; } fi CID="$(docker ps -q --filter "name=${MONGO_CONTAINER}" | head -n1)" [ -n "$CID" ] || { echo "Çalışan MongoDB konteyneri yok: $MONGO_CONTAINER"; exit 1; } echo "Geri yüklenecek: $MONGO_FILE${UPLOADS_FILE:+ ve $UPLOADS_FILE}" echo "'$DB_NAME' veritabanındaki mevcut veri yedektekiyle DEĞİŞTİRİLECEK." if [ "${ASSUME_YES:-0}" != "1" ]; then read -r -p "Devam etmek için 'evet' yazın: " ANSWER [ "$ANSWER" = "evet" ] || { echo "Vazgeçildi."; exit 1; } fi CONF="/tmp/butcem-restore-$$.yaml" printf 'password: "%s"\n' "$MONGO_ROOT_PASSWORD" | docker exec -i "$CID" sh -c "umask 077 && cat > $CONF" trap 'docker exec "$CID" rm -f "$CONF" >/dev/null 2>&1 || true' EXIT docker exec -i "$CID" mongorestore --quiet --config "$CONF" --username "$MONGO_ROOT_USER" \ --authenticationDatabase admin --archive --gzip --drop --nsInclude "${DB_NAME}.*" <"$MONGO_FILE" echo "✓ Veritabanı geri yüklendi." if [ -n "$UPLOADS_FILE" ]; then docker run --rm -v "$UPLOADS_VOLUME":/data -v "$(cd "$(dirname "$UPLOADS_FILE")" && pwd)":/backup:ro "$HELPER_IMAGE" \ sh -c "find /data -mindepth 1 -delete && tar xzf /backup/$(basename "$UPLOADS_FILE") -C /data && chown -R 1001:1001 /data" echo "✓ Yüklenen dosyalar geri yüklendi." fi echo "Uygulamayı yeniden başlatın (Dokploy › Start) ve duman testini çalıştırın."