🐧

Linux i Serwery Domowe

Raspberry Pi, Docker, Bash, SSH, automatyzacja i wszystko, czego potrzebujesz by zbudować potężny serwer domowy z otwartego oprogramowania.

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

KomponentRekomendacjaUwagi
SBCRaspberry Pi 5 (4GB lub 8GB RAM)USB 3.0 × 2, PCIe 2.0
Nośnik systemuMicroSD 32GB+ A2 lub SSD USB 3.0SD jest słabszą opcją dla NAS
Dysk danychHDD 2.5" USB 3.0 lub SSD M.2 przez HATExt4 lub Btrfs
ObudowaArgon ONE Pi 5 lub podobna z miejscem na dyskAktywne chłodzenie zalecane
Zasilacz5V/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.

3. OpenMediaVault – zarządzanie przez przeglądarkę

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

KomendaOpis
docker psLista działających kontenerów
docker ps -aWszystkie kontenery (też zatrzymane)
docker imagesLokalne obrazy Docker
docker pull nginxPobierz obraz z Docker Hub
docker run -d -p 80:80 nginxUruchom kontener w tle z mapowaniem portu
docker stop NAZWAZatrzymaj kontener
docker rm NAZWAUsuń kontener
docker logs -f NAZWAPokaż logi (na żywo)
docker exec -it NAZWA bashWejdź 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.