Linux
6 maja 2026
⏱ 22 min czytania
Raspberry Pi 5 jako domowy serwer NAS – konfiguracja od zera
Przybliżony koszt: 350–500 zł (Raspberry Pi + dysk + obudowa) | Poziom: Średniozaawansowany
Gotowe urządzenia NAS (Synology, QNAP) kosztują od kilkuset do kilku tysięcy złotych i wiążą Cię z ekosystemem producenta. Raspberry Pi 5 z dyskiem USB 3.0 lub SSD przez HAT M.2 daje podobną funkcjonalność za ułamek ceny, z pełną kontrolą nad oprogramowaniem i bez abonamentów.
1. Dobór sprzętu
| Komponent | Rekomendacja | Uwagi |
| SBC | Raspberry Pi 5 (4GB lub 8GB RAM) | USB 3.0 × 2, PCIe 2.0 |
| Nośnik systemu | MicroSD 32GB+ A2 lub SSD USB 3.0 | SD jest słabszą opcją dla NAS |
| Dysk danych | HDD 2.5" USB 3.0 lub SSD M.2 przez HAT | Ext4 lub Btrfs |
| Obudowa | Argon ONE Pi 5 lub podobna z miejscem na dysk | Aktywne chłodzenie zalecane |
| Zasilacz | 5V/5A USB-C (oficjalny) | Tani zasilacz = problemy |
Po instalacji Raspberry Pi OS Lite (64-bit, bez środowiska graficznego) zaktualizuj system:
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y parted hdparm rsync
2. Konfiguracja Samba
Samba pozwala na udostępnianie folderów w sieci lokalnej – widocznych jako dyski sieciowe w Windows, macOS i Linuxie.
sudo apt install -y samba samba-common-bin
# Przygotuj dysk (zakładamy /dev/sda1 zamontowany w /mnt/nas)
sudo mkdir -p /mnt/nas/public /mnt/nas/private
sudo chown -R pi:pi /mnt/nas
# Edytuj konfigurację Samba
sudo nano /etc/samba/smb.conf
Dodaj na końcu pliku:
[NAS-Public]
comment = Publiczne pliki NAS
path = /mnt/nas/public
browsable = yes
writable = yes
guest ok = yes
create mask = 0664
directory mask = 0775
[NAS-Private]
comment = Prywatne pliki NAS
path = /mnt/nas/private
browsable = yes
writable = yes
guest ok = no
valid users = pi
create mask = 0600
directory mask = 0700
# Ustaw hasło Samba dla użytkownika pi
sudo smbpasswd -a pi
# Zrestartuj usługę
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd
# Sprawdź konfigurację
testparm
💡 W systemie Windows podłącz dysk sieciowy przez: \\192.168.x.x\NAS-Public (zamień IP na adres swojego Pi). W macOS użyj Finder → Go → Connect to Server → smb://192.168.x.x.
OpenMediaVault (OMV) to dystrybucja NAS oparta na Debianie z webowym panelem administracyjnym. Zamiast ręcznie konfigurować Sambę, masz wszystko w przeglądarce.
# Instalacja OMV na istniejącym Raspberry Pi OS
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
# Po instalacji wejdź w przeglądarce na http://IP_RASPBERRY
# Login: admin | Hasło: openmediavault
Po zalogowaniu skonfiguruj: Storage → File Systems → montaż dysku, następnie Services → SMB/CIFS → udostępniane foldery. OMV automatycznie tworzy konfigurację Samba.
4. Automatyczny backup z rsync i cron
# Backup folderów z komputera na NAS (uruchom na PC z Linuxem)
rsync -avz --delete \
/home/uzytkownik/Dokumenty/ \
pi@192.168.1.100:/mnt/nas/private/backup-dokumenty/
# Automatyzacja – cron co noc o 2:00
crontab -e
# Dodaj linię:
# 0 2 * * * rsync -avz --delete /home/uzytkownik/Dokumenty/ pi@192.168.1.100:/mnt/nas/private/backup-dokumenty/ >> /var/log/backup-nas.log 2>&1
5. Zdalny dostęp przez WireGuard VPN
# Instalacja WireGuard na Raspberry Pi
sudo apt install -y wireguard
# Generuj klucze
wg genkey | sudo tee /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
sudo chmod 600 /etc/wireguard/private.key
# Konfiguracja /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <TWOJ_KLUCZ_PRYWATNY>
Address = 10.8.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Twój laptop/telefon
PublicKey = <KLUCZ_PUBLICZNY_KLIENTA>
AllowedIPs = 10.8.0.2/32
sudo systemctl enable --now wg-quick@wg0
# Otwórz port 51820/UDP w routerze (przekierowanie portów)
Docker
30 kwietnia 2026
⏱ 15 min czytania
Docker w 30 minut – kontenery dla hobbystów
Docker to technologia konteneryzacji, która pozwala uruchamiać aplikacje w izolowanych środowiskach. Dla hobbystów oznacza to: instalujesz Jellyfin (media server), Nextcloud (prywatna chmura) lub Home Assistant jedną komendą, bez zaśmiecania systemu zależnościami i bez konfliktów między aplikacjami.
Instalacja Docker na Ubuntu/Debian/Raspberry Pi OS
# Oficjalny skrypt instalacyjny (najszybsza metoda)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Dodaj siebie do grupy docker (bez sudo)
sudo usermod -aG docker $USER
newgrp docker
# Sprawdź instalację
docker --version
docker run hello-world
Podstawowe komendy Docker
| Komenda | Opis |
docker ps | Lista działających kontenerów |
docker ps -a | Wszystkie kontenery (też zatrzymane) |
docker images | Lokalne obrazy Docker |
docker pull nginx | Pobierz obraz z Docker Hub |
docker run -d -p 80:80 nginx | Uruchom kontener w tle z mapowaniem portu |
docker stop NAZWA | Zatrzymaj kontener |
docker rm NAZWA | Usuń kontener |
docker logs -f NAZWA | Pokaż logi (na żywo) |
docker exec -it NAZWA bash | Wejdź do kontenera |
Przykładowy docker-compose.yml – Nextcloud + MariaDB
Docker Compose pozwala definiować wielokontenerowe aplikacje w jednym pliku YAML. Utwórz folder i plik:
mkdir ~/nextcloud && cd ~/nextcloud
nano docker-compose.yml
version: '3.8'
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: silneHasloRoot
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: silneHasloNc
volumes:
- db_data:/var/lib/mysql
nextcloud:
image: nextcloud:latest
restart: unless-stopped
ports:
- "8080:80"
links:
- db
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: silneHasloNc
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: adminHaslo
volumes:
- nc_data:/var/www/html
volumes:
db_data:
nc_data:
# Uruchom stos
docker compose up -d
# Sprawdź logi
docker compose logs -f nextcloud
# Zatrzymaj wszystko
docker compose down
Po chwili Nextcloud będzie dostępny pod http://IP_SERWERA:8080. Twoja prywatna chmura, bez żadnych abonamentów.
💡 Przydatne obrazy Docker dla hobbystów: jellyfin/jellyfin (media server), homeassistant/home-assistant, portainer/portainer-ce (webowe GUI do Docker), pihole/pihole (blokowanie reklam DNS), vaultwarden/server (własny menedżer haseł kompatybilny z Bitwarden).
Bash
22 kwietnia 2026
⏱ 17 min czytania
15 skryptów Bash które ułatwią Ci codzienne życie
Bash to supermoc Linuxa – pozwala automatyzować powtarzalne zadania, które ręcznie zajmują minuty, a skrypt wykonuje w sekundy. Każdy ze skryptów poniżej można od razu skopiować, wkleić do pliku .sh, nadać uprawnienie chmod +x i używać.
1. Backup plików z datą w nazwie
#!/bin/bash
# backup.sh – archiwizuje wskazany folder z datą w nazwie pliku
SRC="${1:-$HOME/Dokumenty}"
DEST="${2:-$HOME/Backupy}"
DATE=$(date +%Y-%m-%d_%H%M)
mkdir -p "$DEST"
tar -czf "$DEST/backup_${DATE}.tar.gz" "$SRC"
echo "✓ Backup zapisany: $DEST/backup_${DATE}.tar.gz"
2. Monitor zasobów systemu – szybki podgląd
#!/bin/bash
# sysinfo.sh
echo "═══════════ SYSTEM INFO ═══════════"
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime -p)"
echo "CPU temp: $(vcgencmd measure_temp 2>/dev/null || cat /sys/class/thermal/thermal_zone0/temp | awk '{printf "%.1f°C\n",$1/1000}')"
echo "RAM: $(free -h | awk '/Mem:/{print $3 " / " $2}')"
echo "Dysk /: $(df -h / | awk 'NR==2{print $3 " / " $2 " (" $5 " użyte)"}')"
echo "IP: $(hostname -I | awk '{print $1}')"
echo "==================================="
3. Masowa zmiana nazw plików (np. zdjęcia z wakacji)
#!/bin/bash
# rename_photos.sh – dodaje prefiks i numerację
PREFIX="${1:-foto}"
COUNT=1
for f in *.jpg *.jpeg *.png 2>/dev/null; do
EXT="${f##*.}"
NEW="${PREFIX}_$(printf '%04d' $COUNT).${EXT}"
mv "$f" "$NEW"
echo " $f → $NEW"
((COUNT++))
done
echo "✓ Przemianowano $((COUNT-1)) plików"
4. Sprawdzenie czy strona działa (monitoring HTTP)
#!/bin/bash
# monitor_web.sh – uruchom przez cron co 5 minut
SITES=("https://ipraktyk.pl" "https://twojaserwer.local:8080")
EMAIL="twoj@email.com"
for URL in "${SITES[@]}"; do
CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL")
if [ "$CODE" != "200" ]; then
echo "ALERT: $URL zwrócił kod $CODE o $(date)" | \
mail -s "⚠️ Strona niedostępna: $URL" "$EMAIL"
fi
done
5. Czyszczenie starych plików logów
#!/bin/bash
# cleanup_logs.sh – usuwa logi starsze niż N dni
LOG_DIR="${1:-/var/log/mojaplikacja}"
DAYS="${2:-30}"
echo "Usuwam logi starsze niż $DAYS dni z $LOG_DIR..."
find "$LOG_DIR" -name "*.log" -mtime +$DAYS -exec rm -v {} \;
echo "✓ Gotowe"
6. SSH z autorestartem (keep-alive tunnel)
#!/bin/bash
# tunnel.sh – utrzymuje tunel SSH z autorestartem
while true; do
ssh -N -o ServerAliveInterval=30 \
-o ExitOnForwardFailure=yes \
-L 8080:localhost:80 user@twojserwer.example.com
echo "Tunel zerwany. Ponowne połączenie za 10s..."
sleep 10
done
💡 Jak dodać skrypt do crona: Wpisz crontab -e i dodaj linię np. 0 3 * * * /home/pi/skrypty/backup.sh >> /var/log/backup.log 2>&1 by uruchamiać backup codziennie o 3:00 w nocy.