🐧 Linux - Administracja i DevOps

Administracja systemami Linux i praktyki DevOps to niezbędne umiejętności dla współczesnych programistów i administratorów systemów. Ten przewodnik został specjalnie przygotowany dla junior developerów i osób rozpoczynających pracę z administracją Linux. Omówimy wszystko, od konfiguracji lokalnego środowiska deweloperskiego po zarządzanie serwerami produkcyjnymi, ze szczególnym uwzględnieniem bezpieczeństwa, wydajności i najlepszych praktyk. Każda sekcja zawiera szczegółowe wyjaśnienia i praktyczne przykłady, które pomogą Ci lepiej zrozumieć omawiane koncepcje.

📋 Spis treści

  1. Lokalne środowisko deweloperskie
  2. Administracja serwerem
  3. Dostęp zdalny i bezpieczeństwo
  4. Monitorowanie i debugowanie
  5. Kopie zapasowe

Czym jest DevOps?

DevOps to zestaw praktyk łączących rozwój oprogramowania (Dev) i operacje IT (Ops). Jego celem jest skrócenie cyklu rozwoju i zapewnienie ciągłego dostarczania oprogramowania o wysokiej jakości. Jako junior developer, zrozumienie praktyk DevOps pomoże Ci:

  • Wydajniej wdrażać aplikacje
  • Lepiej współpracować z zespołem
  • Zrozumieć pełny cykl życia aplikacji
  • Pisać kod bardziej gotowy do produkcji

Dlaczego Linux?

Linux jest najpopularniejszym systemem operacyjnym dla serwerów i środowisk deweloperskich, ponieważ:

  • Jest darmowy i open-source
  • Wysoko bezpieczny i stabilny
  • Doskonały do rozwoju i wdrażania
  • Większość usług chmurowych działa na Linuxie
  • Większość narzędzi deweloperskich jest tworzona najpierw dla Linuxa

Lokalne środowisko deweloperskie

Konfiguracja stacji roboczej

Zanim zaczniemy, zrozummy do czego służy każde narzędzie:

  • git: System kontroli wersji do śledzenia zmian w kodzie
  • curl & wget: Narzędzia do pobierania plików z internetu
  • vim: Edytor tekstu do edycji plików w terminalu
  • htop: Interaktywny przeglądarka procesów (lepsza niż podstawowe polecenie 'top')
  • tmux: Multiplekser terminala (pozwala uruchamiać wiele sesji terminala)
  • build-essential: Zawiera podstawowe narzędzia do budowania oprogramowania
  • software-properties-common: Pomaga zarządzać repozytoriami oprogramowania
# Aktualizacja systemu
# To polecenie aktualizuje listę dostępnych pakietów i ich wersji
sudo apt update && sudo apt upgrade

# Instalacja podstawowych narzędzi deweloperskich
# Flaga -y automatycznie odpowiada "tak" na pytania
sudo apt install -y \
    git \
    curl \
    wget \
    vim \
    htop \
    tmux \
    build-essential \
    software-properties-common

# Instalacja Dockera i Docker Compose
# Docker pomaga uruchamiać aplikacje w izolowanych kontenerach
# Docker Compose pomaga zarządzać wieloma kontenerami
# Ułatwia to rozwój i wdrażanie aplikacji
curl -fsSL https://get.docker.com | sudo sh

Narzędzia deweloperskie

Zrozummy do czego służy każde narzędzie deweloperskie:

  • Node.js: Środowisko uruchomieniowe JavaScript do budowania aplikacji serwerowych
  • npm: Menedżer pakietów Node.js do instalowania bibliotek JavaScript
  • PHP: Język skryptowy po stronie serwera
  • Composer: Menedżer pakietów PHP do zarządzania zależnościami PHP
# Instalacja Node.js i npm
# LTS oznacza "Long Term Support" - bardziej stabilna wersja
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

# Instalacja PHP i popularnych rozszerzeń
# Każde rozszerzenie dodaje konkretną funkcjonalność do PHP:
# - php-fpm: FastCGI Process Manager dla PHP
# - php-mysql: Wsparcie dla bazy danych MySQL
# - php-gd: Przetwarzanie obrazów
# - php-mbstring: Obsługa ciągów wielobajtowych
# - php-xml: Przetwarzanie XML
sudo apt install -y \
    php \
    php-cli \
    php-fpm \
    php-json \
    php-common \
    php-mysql \
    php-zip \
    php-gd \
    php-mbstring \
    php-curl \
    php-xml \
    php-bcmath

# Instalacja Composera
# Composer jest jak npm, ale dla PHP
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Administracja serwerem

Początkowa konfiguracja serwera

Gdy po raz pierwszy otrzymujesz dostęp do serwera, oto niezbędne kroki do jego zabezpieczenia:

  1. Aktualizacja systemu: Zawsze zaczynaj od zaktualizowanego systemu
  2. Utworzenie użytkownika deployer: Nigdy nie używaj roota do codziennych operacji
  3. Konfiguracja kluczy SSH: Bezpieczniejsze niż hasła
  4. Konfiguracja SSH: Wyłączenie logowania hasłem i dostępu roota
# Aktualizacja systemu
sudo apt update && sudo apt upgrade

# Tworzenie nowego użytkownika
# To tworzy użytkownika o nazwie 'deployer' z katalogiem domowym
sudo adduser deployer
# Dodanie użytkownika do grupy sudo (pozwala uruchamiać polecenia jako root)
sudo usermod -aG sudo deployer

# Konfiguracja uwierzytelniania kluczem SSH
# Klucze SSH są bezpieczniejsze niż hasła
# Wykorzystują kryptografię klucza publicznego
mkdir -p ~/.ssh
chmod 700 ~/.ssh  # Ograniczenie uprawnień tylko do właściciela
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys  # Ograniczenie uprawnień tylko do właściciela

# Konfiguracja SSH
sudo nano /etc/ssh/sshd_config
# Te ustawienia zwiększają bezpieczeństwo serwera:
# PermitRootLogin no        # Zapobiega logowaniu jako root
# PasswordAuthentication no # Wyłącza logowanie hasłem
# PubkeyAuthentication yes # Włącza uwierzytelnianie kluczem

Bezpieczeństwo serwera

Bezpieczeństwo jest kluczowe dla każdego serwera. Oto co robi każde zabezpieczenie:

  • UFW (Uncomplicated Firewall): Przyjazny interfejs do zarządzania regułami firewalla
  • fail2ban: Chroni przed atakami brute-force poprzez blokowanie IP, które nie mogą się uwierzytelnić
# Instalacja i konfiguracja firewalla
sudo apt install -y ufw
# Domyślne polityki
sudo ufw default deny incoming  # Blokuj wszystkie przychodzące połączenia domyślnie
sudo ufw default allow outgoing # Pozwól na wszystkie wychodzące połączenia
# Pozwól na konkretne usługi
sudo ufw allow ssh    # Port 22
sudo ufw allow http   # Port 80
sudo ufw allow https  # Port 443
sudo ufw enable       # Uruchom firewall

# Instalacja fail2ban
# fail2ban monitoruje pliki logów i blokuje IP wykazujące złośliwe zachowanie
sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local  # Utwórz własną konfigurację
sudo systemctl enable fail2ban  # Uruchom przy starcie
sudo systemctl start fail2ban   # Uruchom teraz

Dostęp zdalny i bezpieczeństwo

Konfiguracja SSH

SSH (Secure Shell) to główny sposób dostępu do serwerów zdalnych. Oto jak skonfigurować go bezpiecznie:

  1. Generowanie klucza SSH: Tworzy parę kluczy (publiczny i prywatny)
  2. Kopiowanie klucza publicznego: Dodaje Twój klucz do autoryzowanych kluczy serwera
  3. Konfiguracja klienta SSH: Ułatwia łączenie się
# Generowanie klucza SSH
# -t ed25519: Użyj algorytmu Ed25519 (bezpieczniejszy niż RSA)
# -C: Dodaj komentarz (zazwyczaj Twój email)
ssh-keygen -t ed25519 -C "[email protected]"

# Kopiowanie klucza na serwer
# To dodaje Twój klucz publiczny do pliku authorized_keys na serwerze
ssh-copy-id uzytkownik@adres_ip_serwera

# Plik konfiguracyjny SSH (~/.ssh/config)
# Ten plik ułatwia łączenie się z serwerami
# Zamiast wpisywać pełne polecenie, możesz po prostu wpisać 'ssh mojserwer'
Host mojserwer
    HostName adres_ip_serwera        # Adres IP serwera
    User nazwa_uzytkownika           # Twoja nazwa użytkownika na serwerze
    IdentityFile ~/.ssh/id_ed25519   # Twój klucz prywatny
    Port 22                          # Port SSH (domyślnie 22)

Bezpieczny transfer plików

Istnieją dwa główne sposoby bezpiecznego transferu plików:

  1. SCP (Secure Copy): Prosty transfer plików
  2. RSYNC: Bardziej zaawansowany, z funkcjami takimi jak:
    • Wznawianie przerwanych transferów
    • Kopiowanie tylko zmienionych plików
    • Kompresja
    • Wyświetlanie postępu
# SCP (Secure Copy)
# Podstawowy transfer plików
scp plik.txt uzytkownik@serwer:/sciezka/do/destynacji
# Transfer katalogu
scp -r katalog/ uzytkownik@serwer:/sciezka/do/destynacji

# RSYNC (z kompresją i paskiem postępu)
# -a: tryb archiwum (zachowuje uprawnienia, itp.)
# -v: szczegółowe wyświetlanie
# -z: kompresja podczas transferu
# --progress: pokaż postęp
rsync -avz --progress zrodlo/ uzytkownik@serwer:/sciezka/do/destynacji
# Lustrzane kopie katalogów (usuń pliki, których nie ma w źródle)
rsync -avz --delete zrodlo/ uzytkownik@serwer:/sciezka/do/destynacji

Monitorowanie i debugowanie

Monitorowanie systemu

Zrozumienie stanu zdrowia systemu jest kluczowe. Oto główne narzędzia:

  1. Monitorowanie procesów:

    • top: Podstawowa przeglądarka procesów
    • htop: Ulepszona przeglądarka procesów z lepszym interfejsem
    • ps: Lista procesów
    • pgrep: Znajdź procesy po nazwie
  2. Wykorzystanie zasobów:

    • df: Miejsce na dysku
    • free: Użycie pamięci
    • vmstat: Statystyki pamięci wirtualnej
    • iostat: Statystyki I/O
    • netstat: Połączenia sieciowe
  3. Monitorowanie logów:

    • Logi systemowe: Ogólne zdarzenia systemowe
    • Logi journal: Logi usług systemd
    • Logi jądra: Komunikaty o sprzęcie i sterownikach
# Monitorowanie procesów
top        # Podstawowa przeglądarka procesów
htop       # Bardziej przyjazna przeglądarka procesów
ps aux | grep nazwa_procesu  # Znajdź konkretny proces
pgrep nazwa_procesu         # Pobierz ID procesu po nazwie

# Wykorzystanie zasobów
df -h      # Pokaż miejsce na dysku w czytelnym formacie
free -h    # Pokaż użycie pamięci w czytelnym formacie
vmstat 1   # Pokaż statystyki pamięci wirtualnej co 1 sekundę
iostat     # Pokaż statystyki I/O
netstat -tulpn  # Pokaż wszystkie nasłuchujące porty i połączenia

# Monitorowanie logów
tail -f /var/log/syslog    # Śledź log systemowy w czasie rzeczywistym
journalctl -f              # Śledź logi systemd w czasie rzeczywistym
dmesg                      # Pokaż komunikaty jądra

Analiza wydajności

Gdy system jest wolny, te narzędzia pomagają zidentyfikować przyczynę:

  1. Profilowanie CPU:

    • perf: Narzędzia analizy wydajności
    • Pokazuje, które funkcje używają najwięcej CPU
  2. Analiza pamięci:

    • free: Podstawowe użycie pamięci
    • vmstat: Szczegółowe statystyki pamięci
    • /proc/meminfo: Surowe informacje o pamięci
  3. I/O dysku:

    • iostat: Statystyki I/O
    • iotop: Monitorowanie I/O w czasie rzeczywistym
# Profilowanie CPU
perf top              # Pokaż użycie CPU według funkcji
perf record -g -p PID # Nagraj użycie CPU dla procesu
perf report           # Przeanalizuj nagranie

# Analiza pamięci
free -h               # Pokaż użycie pamięci
vmstat 1             # Pokaż statystyki pamięci co sekundę
cat /proc/meminfo    # Pokaż szczegółowe informacje o pamięci

# I/O dysku
iostat -x 1          # Pokaż statystyki I/O co sekundę
iotop                # Pokaż użycie I/O według procesu

Kopie zapasowe i odzyskiwanie

Automatyczne kopie zapasowe

Regularne kopie zapasowe są kluczowe.

# Skrypt kopii zapasowej bazy danych
#!/bin/bash
# Konfiguracja
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="uzytkownik"
DB_PASS="haslo"
DB_NAME="baza_danych"

# Tworzenie kopii zapasowej
# mysqldump tworzy plik SQL z Twojej bazy danych
# gzip kompresuje go, aby zaoszczędzić miejsce
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME-$DATE.sql.gz

# Usuwanie starych kopii
# Zachowaj tylko ostatnie 7 dni kopii zapasowych
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

# Kopia zapasowa plików
# tar tworzy archiwum
# -c: utwórz
# -z: kompresuj z gzip
# -f: określ nazwę pliku
tar -czf /backup/files/strona-$DATE.tar.gz /var/www/strona

🔗 Śledź mnie na LinkedIn po więcej wskazówek DevOps i aktualizacji!

Komentarze (0)
Zostaw komentarz

© 2026 Wszelkie prawa zastrzeżone.