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:
2026-08-02 08:50:11 +02:00
parent 09d5ccb4b1
commit 10d214c2a2
7 changed files with 771 additions and 771 deletions
+42 -42
View File
@@ -3,11 +3,11 @@
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/`.
> **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á |
|---|---|---|
@@ -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 |
| `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` |
| `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í.
---
## 🚀 Začínáme
## Začínáme
### Krok 1: Naklonuj repo
@@ -73,14 +73,14 @@ Příklad struktury:
```
~/DockerProjects/
├── portainer/
│ ├── docker-compose.yml
│ └── data/
├── vaultwarden/
│ ├── docker-compose.yml
│ └── data/
└── nextcloud/
└── docker-compose.yml
+-- portainer/
| +-- docker-compose.yml
| +-- data/
+-- vaultwarden/
| +-- docker-compose.yml
| +-- data/
+-- nextcloud/
+-- docker-compose.yml
```
**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ů.
@@ -122,7 +122,7 @@ dk-update --dry-run # ukáže co by se dělalo, neprovede
3. Restartuje s novými image
4. Ověří, že vše běží
### `docker-backup.sh` `dk-backup`
### `docker-backup.sh` -> `dk-backup`
Záloha Docker projektů na NAS.
@@ -138,7 +138,7 @@ dk-backup --auto # bez dotazovani (cron-friendly)
- Používá `tar --zstd` (moderní komprese)
- 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.
@@ -150,11 +150,11 @@ dk-cleanup --all # dangling + build cache + sites + tmp
```
**Nikdy nemaže:**
- Používané images
- Bind-mount ani named volume data
- Běžící kontejnery
- Používané images
- Bind-mount ani named volume data
- Běžící kontejnery
### `docker-restore.sh` `dk-restore`
### `docker-restore.sh` -> `dk-restore`
Obnova ze zálohy.
@@ -165,7 +165,7 @@ dk-restore --only portainer # jen jeden projekt
dk-restore --from 20240801-120000 # konkretni zaloha
```
### `disk-watch.sh` `dk-watch`
### `disk-watch.sh` -> `dk-watch`
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
```
### `mount-nas.sh` `dk-nas`
### `mount-nas.sh` -> `dk-nas`
Připojí NAS SMB share.
@@ -185,10 +185,10 @@ dk-nas --umount # odpoj
```
**Konfigurace:**
- `SMB_SERVER` default `<nas-ip>`
- `SMB_SHARE` default `Multimedia`
- `SMB_USER` default `mates`
- `TARGET` default `/Volumes/<ssd-data-mount>/multimedia`
- `SMB_SERVER` - default `<nas-ip>`
- `SMB_SHARE` - default `Multimedia`
- `SMB_USER` - default `mates`
- `TARGET` - default `/Volumes/<ssd-data-mount>/multimedia`
- Heslo je v **macOS keychainu** pod `SMB:<server>/<share>`
### `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 podporují `--dry-run`**
- **Žádné destruktivní akce bez potvrzení**
- **Hesla v macOS keychainu**, ne v skriptech
- **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
- **Všechny skripty podporují `--dry-run`**
- **Žádné destruktivní akce bez potvrzení**
- **Hesla v macOS keychainu**, ne v skriptech
---
## 🏗 Struktura
## Struktura
```
mates-install-scripts/
├── README.md # Tento soubor
├── LICENSE # MIT
├── docker-update.sh # Aktualizace Docker
├── docker-backup.sh # Záloha na NAS
├── docker-cleanup.sh # Čištění odpadu
├── docker-restore.sh # Obnova ze zálohy
├── disk-watch.sh # Sledování místa
├── mount-nas.sh # Mount NAS
└── update-macos.sh # Aktualizace macOS
+-- README.md # Tento soubor
+-- LICENSE # MIT
+-- docker-update.sh # Aktualizace Docker
+-- docker-backup.sh # Záloha na NAS
+-- docker-cleanup.sh # Čištění odpadu
+-- docker-restore.sh # Obnova ze zálohy
+-- disk-watch.sh # Sledování místa
+-- mount-nas.sh # Mount NAS
+-- update-macos.sh # Aktualizace macOS
```
---
## 📚 Související
## Související
- **Jotty:** knowledge base (detailní postupy, troubleshooting)
- **mates-docker-services:** Docker Compose šablony pro 14 služeb
+14 -14
View File
@@ -1,6 +1,6 @@
#!/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:
# - <ssd-data-mount> (Docker data)
@@ -48,7 +48,7 @@ WARNINGS=()
check_disk() {
local path="$1" threshold="$2" label="$3"
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
fi
# df v macOS nevrací % použití přímo; parsujeme z výstupu
@@ -60,23 +60,23 @@ check_disk() {
total=$(echo "$line" | awk '{print $2}')
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
fi
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"
WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)")
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"
fi
}
check_docker_disk() {
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
fi
@@ -85,7 +85,7 @@ check_docker_disk() {
out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true)
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
fi
@@ -95,10 +95,10 @@ check_docker_disk() {
images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \
| 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é
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}}' \
| awk -F'\t' '{
size = $1
@@ -110,7 +110,7 @@ check_docker_disk() {
printf ' %s\n' "$line"
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}}' \
| awk -F'\t' '
/^([0-9.]+[kMG]B)\s/ {
@@ -121,7 +121,7 @@ check_docker_disk() {
if (mb + 0 > 200) print size, $2
}' | head -5)
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
fi
}
@@ -130,7 +130,7 @@ check_top_offenders() {
if [ ! -d "$SSD_DATA/Dockery" ]; then
return
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 \
| /usr/bin/sort -rh \
| /usr/bin/head -5 \
@@ -148,7 +148,7 @@ check_docker_disk
check_top_offenders
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
printf ' - %s\n' "$w"
done
@@ -156,7 +156,7 @@ fi
if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then
# Alert přes Hermes Telegram cron
MSG=" Disk Watch překročen prah
MSG=" Disk Watch -- překročen prah
$(printf '%s\n' "${WARNINGS[@]}")
Datum: $(date '+%Y-%m-%d %H:%M:%S')
+4 -4
View File
@@ -1,6 +1,6 @@
#!/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>/
# - pro každý projekt v <docker-projects-root> zastaví kontejnery,
@@ -97,7 +97,7 @@ FAILED=()
for project in "${PROJECTS[@]}"; do
cd "$DOCKERY/$project"
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í)
if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \
--use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \
@@ -125,7 +125,7 @@ VOLUMES=$(docker volume ls --format '{{.Name}}' \
for vol in $VOLUMES; do
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)
if docker run --rm \
-v "${vol}:/src:ro" \
@@ -197,7 +197,7 @@ log "======================================"
log "Záloha: $DEST"
if [ "${#FAILED[@]}" -gt 0 ]; then
err "Selhalo: ${#FAILED[@]}"
for f in "${FAILED[@]}"; do err " $f"; done
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
exit 1
fi
log "Vše OK."
+11 -11
View File
@@ -1,12 +1,12 @@
#!/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):
# - dangling images (<none>:<none>)
# - starý build cache (docker builder prune -f)
# - opuštěné (orphaned) Docker sítě nikdy bridge/host/none
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256)
# - opuštěné (orphaned) Docker sítě -- nikdy bridge/host/none
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256...)
# - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*)
#
# Nikdy nemaže:
@@ -98,7 +98,7 @@ show_plan_header() {
# === DANGLING IMAGES ===
plan_dangling() {
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 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)
if [ -n "$holders" ]; then
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}')"
else
pure_dangling=$((pure_dangling + 1))
@@ -129,7 +129,7 @@ plan_dangling() {
fi
if [ "$stopped_holding" -gt 0 ]; then
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
}
@@ -137,7 +137,7 @@ plan_dangling() {
# === BUILD CACHE ===
plan_build_cache() {
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
size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \
@@ -158,7 +158,7 @@ plan_build_cache() {
# === ORPHANED NETWORKS ===
plan_networks() {
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
# Najdi sítě, které NEpoužívá žádný kontejner
@@ -188,7 +188,7 @@ plan_networks() {
# === TMP FILES ===
plan_tmp() {
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 paths=()
@@ -237,7 +237,7 @@ confirm() {
# === STOPPED CONTAINERS ===
plan_stopped() {
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
while IFS= read -r line; do
@@ -305,7 +305,7 @@ if [ "$DO_NETWORKS" = "1" ]; then
fi
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
/usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do
log " rm: $f"
+6 -6
View File
@@ -1,6 +1,6 @@
#!/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
# - vyžádá potvrzení (nebo --auto)
@@ -230,11 +230,11 @@ for project in "${SELECTED[@]}"; do
case "$sub" in
_pre-restore-*) 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 ;;
esac
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"
fi
done
@@ -325,10 +325,10 @@ log "======================================"
log " SHRNUTÍ OBNOVY"
log "======================================"
log "Obnoveno:"
for p in "${SELECTED[@]}"; do log " $p"; done
for p in "${SELECTED[@]}"; do log " [OK] $p"; done
if [ "${#FAILED[@]}" -gt 0 ]; then
err "Selhalo:"
for f in "${FAILED[@]}"; do err " $f"; done
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
fi
log ""
log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/"
@@ -338,5 +338,5 @@ log ""
if [ "$all_healthy" = "1" ]; then
log "Všechny kontejnery běží."
else
warn "Některé kontejnery nejsou v pořádku zkontrolujte logy."
warn "Některé kontejnery nejsou v pořádku -- zkontrolujte logy."
fi
+3 -3
View File
@@ -1,6 +1,6 @@
#!/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,
# - stáhne nové image (docker compose pull),
@@ -170,12 +170,12 @@ log "======================================"
log " SHRNUTÍ"
log "======================================"
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[@]}"
for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done
if [ "${#FAILED[@]}" -gt 0 ]; then
log "Selhalo: ${#FAILED[@]}"
for p in "${FAILED[@]}"; do err " $p"; done
for p in "${FAILED[@]}"; do err " [FAIL] $p"; done
fi
log ""
log "Log: $LOG"
+7 -7
View File
@@ -14,31 +14,31 @@ if ! command -v brew >/dev/null 2>&1; then
exit 1
fi
echo " Aktualizace Homebrew metadata..."
echo "-> Aktualizace Homebrew metadata..."
brew update
echo ""
echo " Upgrade formulae..."
echo "-> Upgrade formulae..."
brew upgrade
echo ""
echo " Upgrade casks..."
echo "-> Upgrade casks..."
brew upgrade --cask
echo ""
echo " Cleanup..."
echo "-> Cleanup..."
brew cleanup
echo ""
echo " Autoremove..."
echo "-> Autoremove..."
brew autoremove
echo ""
echo " Health check..."
echo "-> Health check..."
brew doctor
echo ""
echo " Outdated packages:"
echo "-> Outdated packages:"
brew outdated || true
echo ""