Blog

🐧 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!

Wsparcie istniejącego systemu

Potrzebujesz pomocy z działającą aplikacją?

Pomagam firmom rozwijać działające systemy, porządkować wdrożenia i dodawać nowe funkcje bez dokładania chaosu do projektu.

Komentarze (0)
Zaloguj się, aby dodać komentarz

Musisz być zalogowany, aby dodać komentarz.

Zaloguj się

Potrzebujesz kogoś, kto weźmie odpowiedzialność za kolejny krok?

Porozmawiajmy o Twoim projekcie i określmy zakres, który ma sens dla Twoich celów.