fix: odstranit emoji ze vsech souboru
Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
This commit is contained in:
@@ -3,11 +3,11 @@
|
|||||||
Bash skripty pro správu Dockeru na Macu i Linuxu.
|
Bash skripty pro správu Dockeru na Macu i Linuxu.
|
||||||
Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-domov/`.
|
Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-domov/`.
|
||||||
|
|
||||||
> **Jsi začátečník?** Čti od [Začínáme](#zaciname) – vše je krok za krokem.
|
> **Jsi začátečník?** Čti od [Začínáme](#zaciname) - vše je krok za krokem.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Co tu je
|
## Co tu je
|
||||||
|
|
||||||
| Skript | Alias | Co dělá |
|
| Skript | Alias | Co dělá |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
@@ -17,13 +17,13 @@ Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-d
|
|||||||
| `docker-restore.sh` | `dk-restore` | Obnovuje Docker projekty ze zálohy |
|
| `docker-restore.sh` | `dk-restore` | Obnovuje Docker projekty ze zálohy |
|
||||||
| `disk-watch.sh` | `dk-watch` | Sleduje volné místo na Docker datech |
|
| `disk-watch.sh` | `dk-watch` | Sleduje volné místo na Docker datech |
|
||||||
| `mount-nas.sh` | `dk-nas` | Připojí/odpojí NAS SMB share do `/Volumes/<ssd-data-mount>/multimedia` |
|
| `mount-nas.sh` | `dk-nas` | Připojí/odpojí NAS SMB share do `/Volumes/<ssd-data-mount>/multimedia` |
|
||||||
| `update-macos.sh` | – | Aktualizace macOS přes Software Update |
|
| `update-macos.sh` | - | Aktualizace macOS přes Software Update |
|
||||||
|
|
||||||
Všechny skripty jsou **idempotentní** (můžeš spustit víckrát), mají `--help`, podporují **dry-run** a bez potvrzení nic destruktivního neprovádějí.
|
Všechny skripty jsou **idempotentní** (můžeš spustit víckrát), mají `--help`, podporují **dry-run** a bez potvrzení nic destruktivního neprovádějí.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Začínáme
|
## Začínáme
|
||||||
|
|
||||||
### Krok 1: Naklonuj repo
|
### Krok 1: Naklonuj repo
|
||||||
|
|
||||||
@@ -73,14 +73,14 @@ Příklad struktury:
|
|||||||
|
|
||||||
```
|
```
|
||||||
~/DockerProjects/
|
~/DockerProjects/
|
||||||
├── portainer/
|
+-- portainer/
|
||||||
│ ├── docker-compose.yml
|
| +-- docker-compose.yml
|
||||||
│ └── data/
|
| +-- data/
|
||||||
├── vaultwarden/
|
+-- vaultwarden/
|
||||||
│ ├── docker-compose.yml
|
| +-- docker-compose.yml
|
||||||
│ └── data/
|
| +-- data/
|
||||||
└── nextcloud/
|
+-- nextcloud/
|
||||||
└── docker-compose.yml
|
+-- docker-compose.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
**Konfigurace cesty:**
|
**Konfigurace cesty:**
|
||||||
@@ -104,9 +104,9 @@ dk-backup --dry-run
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📚 Detail ke každému skriptu
|
## Detail ke každému skriptu
|
||||||
|
|
||||||
### `docker-update.sh` → `dk-update`
|
### `docker-update.sh` -> `dk-update`
|
||||||
|
|
||||||
Bezpečná aktualizace Docker Compose projektů.
|
Bezpečná aktualizace Docker Compose projektů.
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ dk-update --dry-run # ukáže co by se dělalo, neprovede
|
|||||||
3. Restartuje s novými image
|
3. Restartuje s novými image
|
||||||
4. Ověří, že vše běží
|
4. Ověří, že vše běží
|
||||||
|
|
||||||
### `docker-backup.sh` → `dk-backup`
|
### `docker-backup.sh` -> `dk-backup`
|
||||||
|
|
||||||
Záloha Docker projektů na NAS.
|
Záloha Docker projektů na NAS.
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ dk-backup --auto # bez dotazovani (cron-friendly)
|
|||||||
- Používá `tar --zstd` (moderní komprese)
|
- Používá `tar --zstd` (moderní komprese)
|
||||||
- Staré zálohy se **nemazou** (musíš ručně)
|
- Staré zálohy se **nemazou** (musíš ručně)
|
||||||
|
|
||||||
### `docker-cleanup.sh` → `dk-cleanup`
|
### `docker-cleanup.sh` -> `dk-cleanup`
|
||||||
|
|
||||||
Bezpečné čištění Docker odpadu.
|
Bezpečné čištění Docker odpadu.
|
||||||
|
|
||||||
@@ -150,11 +150,11 @@ dk-cleanup --all # dangling + build cache + sites + tmp
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Nikdy nemaže:**
|
**Nikdy nemaže:**
|
||||||
- ❌ Používané images
|
- Používané images
|
||||||
- ❌ Bind-mount ani named volume data
|
- Bind-mount ani named volume data
|
||||||
- ❌ Běžící kontejnery
|
- Běžící kontejnery
|
||||||
|
|
||||||
### `docker-restore.sh` → `dk-restore`
|
### `docker-restore.sh` -> `dk-restore`
|
||||||
|
|
||||||
Obnova ze zálohy.
|
Obnova ze zálohy.
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ dk-restore --only portainer # jen jeden projekt
|
|||||||
dk-restore --from 20240801-120000 # konkretni zaloha
|
dk-restore --from 20240801-120000 # konkretni zaloha
|
||||||
```
|
```
|
||||||
|
|
||||||
### `disk-watch.sh` → `dk-watch`
|
### `disk-watch.sh` -> `dk-watch`
|
||||||
|
|
||||||
Sledování volného místa.
|
Sledování volného místa.
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ dk-watch # jen info o aktualnim stavu
|
|||||||
dk-watch --alert # posli Telegram alert kdyz < 10% volneho
|
dk-watch --alert # posli Telegram alert kdyz < 10% volneho
|
||||||
```
|
```
|
||||||
|
|
||||||
### `mount-nas.sh` → `dk-nas`
|
### `mount-nas.sh` -> `dk-nas`
|
||||||
|
|
||||||
Připojí NAS SMB share.
|
Připojí NAS SMB share.
|
||||||
|
|
||||||
@@ -185,10 +185,10 @@ dk-nas --umount # odpoj
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Konfigurace:**
|
**Konfigurace:**
|
||||||
- `SMB_SERVER` – default `<nas-ip>`
|
- `SMB_SERVER` - default `<nas-ip>`
|
||||||
- `SMB_SHARE` – default `Multimedia`
|
- `SMB_SHARE` - default `Multimedia`
|
||||||
- `SMB_USER` – default `mates`
|
- `SMB_USER` - default `mates`
|
||||||
- `TARGET` – default `/Volumes/<ssd-data-mount>/multimedia`
|
- `TARGET` - default `/Volumes/<ssd-data-mount>/multimedia`
|
||||||
- Heslo je v **macOS keychainu** pod `SMB:<server>/<share>`
|
- Heslo je v **macOS keychainu** pod `SMB:<server>/<share>`
|
||||||
|
|
||||||
### `update-macos.sh`
|
### `update-macos.sh`
|
||||||
@@ -201,33 +201,33 @@ Spustí `softwareupdate` na macOS.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔐 Bezpečnost
|
## Bezpečnost
|
||||||
|
|
||||||
- ✅ **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
|
- **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
|
||||||
- ✅ **Všechny skripty podporují `--dry-run`**
|
- **Všechny skripty podporují `--dry-run`**
|
||||||
- ✅ **Žádné destruktivní akce bez potvrzení**
|
- **Žádné destruktivní akce bez potvrzení**
|
||||||
- ✅ **Hesla v macOS keychainu**, ne v skriptech
|
- **Hesla v macOS keychainu**, ne v skriptech
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏗 Struktura
|
## Struktura
|
||||||
|
|
||||||
```
|
```
|
||||||
mates-install-scripts/
|
mates-install-scripts/
|
||||||
├── README.md # Tento soubor
|
+-- README.md # Tento soubor
|
||||||
├── LICENSE # MIT
|
+-- LICENSE # MIT
|
||||||
├── docker-update.sh # Aktualizace Docker
|
+-- docker-update.sh # Aktualizace Docker
|
||||||
├── docker-backup.sh # Záloha na NAS
|
+-- docker-backup.sh # Záloha na NAS
|
||||||
├── docker-cleanup.sh # Čištění odpadu
|
+-- docker-cleanup.sh # Čištění odpadu
|
||||||
├── docker-restore.sh # Obnova ze zálohy
|
+-- docker-restore.sh # Obnova ze zálohy
|
||||||
├── disk-watch.sh # Sledování místa
|
+-- disk-watch.sh # Sledování místa
|
||||||
├── mount-nas.sh # Mount NAS
|
+-- mount-nas.sh # Mount NAS
|
||||||
└── update-macos.sh # Aktualizace macOS
|
+-- update-macos.sh # Aktualizace macOS
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📚 Související
|
## Související
|
||||||
|
|
||||||
- **Jotty:** knowledge base (detailní postupy, troubleshooting)
|
- **Jotty:** knowledge base (detailní postupy, troubleshooting)
|
||||||
- **mates-docker-services:** Docker Compose šablony pro 14 služeb
|
- **mates-docker-services:** Docker Compose šablony pro 14 služeb
|
||||||
|
|||||||
+14
-14
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# disk-watch.sh — sledování volného místa na Docker datech
|
# disk-watch.sh -- sledování volného místa na Docker datech
|
||||||
#
|
#
|
||||||
# Kontroluje:
|
# Kontroluje:
|
||||||
# - <ssd-data-mount> (Docker data)
|
# - <ssd-data-mount> (Docker data)
|
||||||
@@ -48,7 +48,7 @@ WARNINGS=()
|
|||||||
check_disk() {
|
check_disk() {
|
||||||
local path="$1" threshold="$2" label="$3"
|
local path="$1" threshold="$2" label="$3"
|
||||||
if [ ! -d "$path" ]; then
|
if [ ! -d "$path" ]; then
|
||||||
printf '%s%s%s %s — adresář neexistuje\n' "$YELLOW" "⚠" "$NC" "$label"
|
printf '%s%s%s %s -- adresář neexistuje\n' "$YELLOW" "" "$NC" "$label"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
# df v macOS nevrací % použití přímo; parsujeme z výstupu
|
# df v macOS nevrací % použití přímo; parsujeme z výstupu
|
||||||
@@ -60,23 +60,23 @@ check_disk() {
|
|||||||
total=$(echo "$line" | awk '{print $2}')
|
total=$(echo "$line" | awk '{print $2}')
|
||||||
|
|
||||||
if [ -z "$capacity" ]; then
|
if [ -z "$capacity" ]; then
|
||||||
printf '%s%s%s %s — nelze přečíst\n' "$YELLOW" "⚠" "$NC" "$label"
|
printf '%s%s%s %s -- nelze přečíst\n' "$YELLOW" "" "$NC" "$label"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$capacity" -ge "$threshold" ]; then
|
if [ "$capacity" -ge "$threshold" ]; then
|
||||||
printf '%s●%s %s %s/%s (%s%%) — %sPŘEKROČEN PRAH%s (≥%s%%)\n' \
|
printf '%s%s %s %s/%s (%s%%) -- %sPŘEKROČEN PRAH%s (%s%%)\n' \
|
||||||
"$RED" "$NC" "$label" "$used" "$total" "$capacity" "$RED" "$NC" "$threshold"
|
"$RED" "$NC" "$label" "$used" "$total" "$capacity" "$RED" "$NC" "$threshold"
|
||||||
WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)")
|
WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)")
|
||||||
else
|
else
|
||||||
printf '%s●%s %s %s/%s (%s%%) — OK\n' \
|
printf '%s%s %s %s/%s (%s%%) -- OK\n' \
|
||||||
"$GREEN" "$NC" "$label" "$used" "$total" "$capacity"
|
"$GREEN" "$NC" "$label" "$used" "$total" "$capacity"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_docker_disk() {
|
check_docker_disk() {
|
||||||
if ! docker info >/dev/null 2>&1; then
|
if ! docker info >/dev/null 2>&1; then
|
||||||
printf '%s●%s Docker — není dostupný\n' "$YELLOW" "$NC"
|
printf '%s%s Docker -- není dostupný\n' "$YELLOW" "$NC"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ check_docker_disk() {
|
|||||||
out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true)
|
out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true)
|
||||||
|
|
||||||
if [ -z "$out" ]; then
|
if [ -z "$out" ]; then
|
||||||
printf '%s●%s Docker disk — nešlo přečíst\n' "$YELLOW" "$NC"
|
printf '%s%s Docker disk -- nešlo přečíst\n' "$YELLOW" "$NC"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -95,10 +95,10 @@ check_docker_disk() {
|
|||||||
images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \
|
images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \
|
||||||
| awk -F'\t' '$1 == "Images" {print $2}')
|
| awk -F'\t' '$1 == "Images" {print $2}')
|
||||||
|
|
||||||
printf '%s●%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}"
|
printf '%s%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}"
|
||||||
|
|
||||||
# Velké images (>500 MB), které nejsou používané
|
# Velké images (>500 MB), které nejsou používané
|
||||||
printf '%s●%s Velké images (>500 MB):\n' "$BLUE" "$NC"
|
printf '%s%s Velké images (>500 MB):\n' "$BLUE" "$NC"
|
||||||
docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}' \
|
docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}' \
|
||||||
| awk -F'\t' '{
|
| awk -F'\t' '{
|
||||||
size = $1
|
size = $1
|
||||||
@@ -110,7 +110,7 @@ check_docker_disk() {
|
|||||||
printf ' %s\n' "$line"
|
printf ' %s\n' "$line"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Nepoužívané images (pozor, ne "používané" — bezpečnost)
|
# Nepoužívané images (pozor, ne "používané" -- bezpečnost)
|
||||||
unused=$(docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' \
|
unused=$(docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' \
|
||||||
| awk -F'\t' '
|
| awk -F'\t' '
|
||||||
/^([0-9.]+[kMG]B)\s/ {
|
/^([0-9.]+[kMG]B)\s/ {
|
||||||
@@ -121,7 +121,7 @@ check_docker_disk() {
|
|||||||
if (mb + 0 > 200) print size, $2
|
if (mb + 0 > 200) print size, $2
|
||||||
}' | head -5)
|
}' | head -5)
|
||||||
if [ -n "$unused" ]; then
|
if [ -n "$unused" ]; then
|
||||||
printf '%s●%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC"
|
printf '%s%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC"
|
||||||
echo "$unused" | while read -r line; do printf ' %s\n' "$line"; done
|
echo "$unused" | while read -r line; do printf ' %s\n' "$line"; done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -130,7 +130,7 @@ check_top_offenders() {
|
|||||||
if [ ! -d "$SSD_DATA/Dockery" ]; then
|
if [ ! -d "$SSD_DATA/Dockery" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
printf '\n%s●%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC"
|
printf '\n%s%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC"
|
||||||
/bin/du -sh "$SSD_DATA"/Dockery/*/ 2>/dev/null \
|
/bin/du -sh "$SSD_DATA"/Dockery/*/ 2>/dev/null \
|
||||||
| /usr/bin/sort -rh \
|
| /usr/bin/sort -rh \
|
||||||
| /usr/bin/head -5 \
|
| /usr/bin/head -5 \
|
||||||
@@ -148,7 +148,7 @@ check_docker_disk
|
|||||||
check_top_offenders
|
check_top_offenders
|
||||||
|
|
||||||
if [ "${#WARNINGS[@]}" -gt 0 ]; then
|
if [ "${#WARNINGS[@]}" -gt 0 ]; then
|
||||||
printf '\n%s●%s VAROVÁNÍ:\n' "$RED" "$NC"
|
printf '\n%s%s VAROVÁNÍ:\n' "$RED" "$NC"
|
||||||
for w in "${WARNINGS[@]}"; do
|
for w in "${WARNINGS[@]}"; do
|
||||||
printf ' - %s\n' "$w"
|
printf ' - %s\n' "$w"
|
||||||
done
|
done
|
||||||
@@ -156,7 +156,7 @@ fi
|
|||||||
|
|
||||||
if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then
|
if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then
|
||||||
# Alert přes Hermes Telegram cron
|
# Alert přes Hermes Telegram cron
|
||||||
MSG="⚠️ Disk Watch — překročen prah
|
MSG="️ Disk Watch -- překročen prah
|
||||||
$(printf '%s\n' "${WARNINGS[@]}")
|
$(printf '%s\n' "${WARNINGS[@]}")
|
||||||
|
|
||||||
Datum: $(date '+%Y-%m-%d %H:%M:%S')
|
Datum: $(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
|||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# docker-backup.sh — bezpečná záloha Docker projektů a named volumes
|
# docker-backup.sh -- bezpečná záloha Docker projektů a named volumes
|
||||||
#
|
#
|
||||||
# - vytvoří timestamp složku v <backup-root>/
|
# - vytvoří timestamp složku v <backup-root>/
|
||||||
# - pro každý projekt v <docker-projects-root> zastaví kontejnery,
|
# - pro každý projekt v <docker-projects-root> zastaví kontejnery,
|
||||||
@@ -97,7 +97,7 @@ FAILED=()
|
|||||||
for project in "${PROJECTS[@]}"; do
|
for project in "${PROJECTS[@]}"; do
|
||||||
cd "$DOCKERY/$project"
|
cd "$DOCKERY/$project"
|
||||||
ARCHIVE="$DEST/${project}.tar.zst"
|
ARCHIVE="$DEST/${project}.tar.zst"
|
||||||
log " [$project] tar -c <docker-projects-root>/$project/ → $ARCHIVE"
|
log " [$project] tar -c <docker-projects-root>/$project/ -> $ARCHIVE"
|
||||||
# absolutní cesta (background tar pitfall: vždy absolutní)
|
# absolutní cesta (background tar pitfall: vždy absolutní)
|
||||||
if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \
|
if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \
|
||||||
--use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \
|
--use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \
|
||||||
@@ -125,7 +125,7 @@ VOLUMES=$(docker volume ls --format '{{.Name}}' \
|
|||||||
|
|
||||||
for vol in $VOLUMES; do
|
for vol in $VOLUMES; do
|
||||||
ARCHIVE="$DEST/${vol}.tar.zst"
|
ARCHIVE="$DEST/${vol}.tar.zst"
|
||||||
log " [volume:$vol] → $ARCHIVE"
|
log " [volume:$vol] -> $ARCHIVE"
|
||||||
# Nejdřív dekomprimuj na hostiteli, pak pošli do kontejneru (alpine tar neumí zstd)
|
# Nejdřív dekomprimuj na hostiteli, pak pošli do kontejneru (alpine tar neumí zstd)
|
||||||
if docker run --rm \
|
if docker run --rm \
|
||||||
-v "${vol}:/src:ro" \
|
-v "${vol}:/src:ro" \
|
||||||
@@ -197,7 +197,7 @@ log "======================================"
|
|||||||
log "Záloha: $DEST"
|
log "Záloha: $DEST"
|
||||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||||
err "Selhalo: ${#FAILED[@]}"
|
err "Selhalo: ${#FAILED[@]}"
|
||||||
for f in "${FAILED[@]}"; do err " ✗ $f"; done
|
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log "Vše OK."
|
log "Vše OK."
|
||||||
+11
-11
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# docker-cleanup.sh — bezpečné čištění Docker odpadu
|
# docker-cleanup.sh -- bezpečné čištění Docker odpadu
|
||||||
#
|
#
|
||||||
# Cíle (vše s výslovným potvrzením nebo dry-run):
|
# Cíle (vše s výslovným potvrzením nebo dry-run):
|
||||||
# - dangling images (<none>:<none>)
|
# - dangling images (<none>:<none>)
|
||||||
# - starý build cache (docker builder prune -f)
|
# - starý build cache (docker builder prune -f)
|
||||||
# - opuštěné (orphaned) Docker sítě — nikdy bridge/host/none
|
# - opuštěné (orphaned) Docker sítě -- nikdy bridge/host/none
|
||||||
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256…)
|
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256...)
|
||||||
# - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*)
|
# - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*)
|
||||||
#
|
#
|
||||||
# Nikdy nemaže:
|
# Nikdy nemaže:
|
||||||
@@ -98,7 +98,7 @@ show_plan_header() {
|
|||||||
# === DANGLING IMAGES ===
|
# === DANGLING IMAGES ===
|
||||||
plan_dangling() {
|
plan_dangling() {
|
||||||
if [ "$DO_DANGLING" = "0" ]; then return; fi
|
if [ "$DO_DANGLING" = "0" ]; then return; fi
|
||||||
printf '%s● Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC"
|
printf '%s Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC"
|
||||||
|
|
||||||
local pure_dangling=0
|
local pure_dangling=0
|
||||||
local stopped_holding=0
|
local stopped_holding=0
|
||||||
@@ -110,7 +110,7 @@ plan_dangling() {
|
|||||||
holders=$(docker ps -a --filter "ancestor=$id" --format '{{.Names}}\t{{.Status}}' 2>/dev/null | head -3)
|
holders=$(docker ps -a --filter "ancestor=$id" --format '{{.Names}}\t{{.Status}}' 2>/dev/null | head -3)
|
||||||
if [ -n "$holders" ]; then
|
if [ -n "$holders" ]; then
|
||||||
stopped_holding=$((stopped_holding + 1))
|
stopped_holding=$((stopped_holding + 1))
|
||||||
printf ' %s %s ⚠ drží zastavený kontejner: %s\n' \
|
printf ' %s %s drží zastavený kontejner: %s\n' \
|
||||||
"$id" "$size" "$(echo "$holders" | head -1 | awk '{print $1}')"
|
"$id" "$size" "$(echo "$holders" | head -1 | awk '{print $1}')"
|
||||||
else
|
else
|
||||||
pure_dangling=$((pure_dangling + 1))
|
pure_dangling=$((pure_dangling + 1))
|
||||||
@@ -129,7 +129,7 @@ plan_dangling() {
|
|||||||
fi
|
fi
|
||||||
if [ "$stopped_holding" -gt 0 ]; then
|
if [ "$stopped_holding" -gt 0 ]; then
|
||||||
PLANNED_ITEMS+=("dangling-with-stopped-containers:$stopped_holding")
|
PLANNED_ITEMS+=("dangling-with-stopped-containers:$stopped_holding")
|
||||||
printf ' 💡 Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n'
|
printf ' Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n'
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ plan_dangling() {
|
|||||||
# === BUILD CACHE ===
|
# === BUILD CACHE ===
|
||||||
plan_build_cache() {
|
plan_build_cache() {
|
||||||
if [ "$DO_BUILDER" = "0" ]; then return; fi
|
if [ "$DO_BUILDER" = "0" ]; then return; fi
|
||||||
printf '%s● Build cache:%s\n' "$BLUE" "$NC"
|
printf '%s Build cache:%s\n' "$BLUE" "$NC"
|
||||||
|
|
||||||
local size
|
local size
|
||||||
size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \
|
size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \
|
||||||
@@ -158,7 +158,7 @@ plan_build_cache() {
|
|||||||
# === ORPHANED NETWORKS ===
|
# === ORPHANED NETWORKS ===
|
||||||
plan_networks() {
|
plan_networks() {
|
||||||
if [ "$DO_NETWORKS" = "0" ]; then return; fi
|
if [ "$DO_NETWORKS" = "0" ]; then return; fi
|
||||||
printf '%s● Opuštěné Docker sítě:%s\n' "$BLUE" "$NC"
|
printf '%s Opuštěné Docker sítě:%s\n' "$BLUE" "$NC"
|
||||||
|
|
||||||
local count=0
|
local count=0
|
||||||
# Najdi sítě, které NEpoužívá žádný kontejner
|
# Najdi sítě, které NEpoužívá žádný kontejner
|
||||||
@@ -188,7 +188,7 @@ plan_networks() {
|
|||||||
# === TMP FILES ===
|
# === TMP FILES ===
|
||||||
plan_tmp() {
|
plan_tmp() {
|
||||||
if [ "$DO_TMP" = "0" ]; then return; fi
|
if [ "$DO_TMP" = "0" ]; then return; fi
|
||||||
printf '%s● Dočasné soubory:%s\n' "$BLUE" "$NC"
|
printf '%s Dočasné soubory:%s\n' "$BLUE" "$NC"
|
||||||
|
|
||||||
local total_bytes=0
|
local total_bytes=0
|
||||||
local paths=()
|
local paths=()
|
||||||
@@ -237,7 +237,7 @@ confirm() {
|
|||||||
# === STOPPED CONTAINERS ===
|
# === STOPPED CONTAINERS ===
|
||||||
plan_stopped() {
|
plan_stopped() {
|
||||||
if [ "$DO_STOPPED" = "0" ]; then return; fi
|
if [ "$DO_STOPPED" = "0" ]; then return; fi
|
||||||
printf '%s● Zastavené kontejnery:%s\n' "$BLUE" "$NC"
|
printf '%s Zastavené kontejnery:%s\n' "$BLUE" "$NC"
|
||||||
|
|
||||||
local count=0
|
local count=0
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
@@ -305,7 +305,7 @@ if [ "$DO_NETWORKS" = "1" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DO_TMP" = "1" ]; then
|
if [ "$DO_TMP" = "1" ]; then
|
||||||
log "mazání starých /tmp/docker-* (≥7 dní)"
|
log "mazání starých /tmp/docker-* (7 dní)"
|
||||||
# -print -delete musí být v tomto pořadí; -delete sám o sobě na macOS BSD find někdy selže
|
# -print -delete musí být v tomto pořadí; -delete sám o sobě na macOS BSD find někdy selže
|
||||||
/usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do
|
/usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do
|
||||||
log " rm: $f"
|
log " rm: $f"
|
||||||
|
|||||||
+6
-6
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# docker-restore.sh — bezpečná obnova Docker projektů z tar.zst zálohy
|
# docker-restore.sh -- bezpečná obnova Docker projektů z tar.zst zálohy
|
||||||
#
|
#
|
||||||
# - zobrazí dostupné zálohy v $BACKUP_ROOT
|
# - zobrazí dostupné zálohy v $BACKUP_ROOT
|
||||||
# - vyžádá potvrzení (nebo --auto)
|
# - vyžádá potvrzení (nebo --auto)
|
||||||
@@ -230,11 +230,11 @@ for project in "${SELECTED[@]}"; do
|
|||||||
case "$sub" in
|
case "$sub" in
|
||||||
_pre-restore-*) continue ;;
|
_pre-restore-*) continue ;;
|
||||||
docker-compose.y*ml) continue ;;
|
docker-compose.y*ml) continue ;;
|
||||||
.env|.env.*) continue ;; # .env necháme — je to runtime konfigurace
|
.env|.env.*) continue ;; # .env necháme -- je to runtime konfigurace
|
||||||
.DS_Store) continue ;;
|
.DS_Store) continue ;;
|
||||||
esac
|
esac
|
||||||
if [ -e "$SRC/$sub" ]; then
|
if [ -e "$SRC/$sub" ]; then
|
||||||
log " [$project] mv $sub → _pre-restore-$TS_NOW/$project/"
|
log " [$project] mv $sub -> _pre-restore-$TS_NOW/$project/"
|
||||||
mv "$SRC/$sub" "$DEST/$sub" 2>&1 || warn " mv $sub selhal"
|
mv "$SRC/$sub" "$DEST/$sub" 2>&1 || warn " mv $sub selhal"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -325,10 +325,10 @@ log "======================================"
|
|||||||
log " SHRNUTÍ OBNOVY"
|
log " SHRNUTÍ OBNOVY"
|
||||||
log "======================================"
|
log "======================================"
|
||||||
log "Obnoveno:"
|
log "Obnoveno:"
|
||||||
for p in "${SELECTED[@]}"; do log " ✓ $p"; done
|
for p in "${SELECTED[@]}"; do log " [OK] $p"; done
|
||||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||||
err "Selhalo:"
|
err "Selhalo:"
|
||||||
for f in "${FAILED[@]}"; do err " ✗ $f"; done
|
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
|
||||||
fi
|
fi
|
||||||
log ""
|
log ""
|
||||||
log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/"
|
log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/"
|
||||||
@@ -338,5 +338,5 @@ log ""
|
|||||||
if [ "$all_healthy" = "1" ]; then
|
if [ "$all_healthy" = "1" ]; then
|
||||||
log "Všechny kontejnery běží."
|
log "Všechny kontejnery běží."
|
||||||
else
|
else
|
||||||
warn "Některé kontejnery nejsou v pořádku — zkontrolujte logy."
|
warn "Některé kontejnery nejsou v pořádku -- zkontrolujte logy."
|
||||||
fi
|
fi
|
||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# docker-update.sh — bezpečná aktualizace Docker Compose projektů
|
# docker-update.sh -- bezpečná aktualizace Docker Compose projektů
|
||||||
#
|
#
|
||||||
# - zastaví všechny kontejnery,
|
# - zastaví všechny kontejnery,
|
||||||
# - stáhne nové image (docker compose pull),
|
# - stáhne nové image (docker compose pull),
|
||||||
@@ -170,12 +170,12 @@ log "======================================"
|
|||||||
log " SHRNUTÍ"
|
log " SHRNUTÍ"
|
||||||
log "======================================"
|
log "======================================"
|
||||||
log "Aktualizováno: ${#UPDATED[@]} projekt(ů)"
|
log "Aktualizováno: ${#UPDATED[@]} projekt(ů)"
|
||||||
for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " ✓ $p"; done
|
for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " [OK] $p"; done
|
||||||
log "Přeskočeno (beze změny): ${#SKIPPED[@]}"
|
log "Přeskočeno (beze změny): ${#SKIPPED[@]}"
|
||||||
for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done
|
for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done
|
||||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||||
log "Selhalo: ${#FAILED[@]}"
|
log "Selhalo: ${#FAILED[@]}"
|
||||||
for p in "${FAILED[@]}"; do err " ✗ $p"; done
|
for p in "${FAILED[@]}"; do err " [FAIL] $p"; done
|
||||||
fi
|
fi
|
||||||
log ""
|
log ""
|
||||||
log "Log: $LOG"
|
log "Log: $LOG"
|
||||||
+7
-7
@@ -14,31 +14,31 @@ if ! command -v brew >/dev/null 2>&1; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "→ Aktualizace Homebrew metadata..."
|
echo "-> Aktualizace Homebrew metadata..."
|
||||||
brew update
|
brew update
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Upgrade formulae..."
|
echo "-> Upgrade formulae..."
|
||||||
brew upgrade
|
brew upgrade
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Upgrade casks..."
|
echo "-> Upgrade casks..."
|
||||||
brew upgrade --cask
|
brew upgrade --cask
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Cleanup..."
|
echo "-> Cleanup..."
|
||||||
brew cleanup
|
brew cleanup
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Autoremove..."
|
echo "-> Autoremove..."
|
||||||
brew autoremove
|
brew autoremove
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Health check..."
|
echo "-> Health check..."
|
||||||
brew doctor
|
brew doctor
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "→ Outdated packages:"
|
echo "-> Outdated packages:"
|
||||||
brew outdated || true
|
brew outdated || true
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user