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
- Lokalne środowisko deweloperskie
- Administracja serwerem
- Dostęp zdalny i bezpieczeństwo
- Monitorowanie i debugowanie
- 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:
- Aktualizacja systemu: Zawsze zaczynaj od zaktualizowanego systemu
- Utworzenie użytkownika deployer: Nigdy nie używaj roota do codziennych operacji
- Konfiguracja kluczy SSH: Bezpieczniejsze niż hasła
- 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:
- Generowanie klucza SSH: Tworzy parę kluczy (publiczny i prywatny)
- Kopiowanie klucza publicznego: Dodaje Twój klucz do autoryzowanych kluczy serwera
- 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:
- SCP (Secure Copy): Prosty transfer plików
- 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:
-
Monitorowanie procesów:
top: Podstawowa przeglądarka procesówhtop: Ulepszona przeglądarka procesów z lepszym interfejsemps: Lista procesówpgrep: Znajdź procesy po nazwie
-
Wykorzystanie zasobów:
df: Miejsce na dyskufree: Użycie pamięcivmstat: Statystyki pamięci wirtualnejiostat: Statystyki I/Onetstat: Połączenia sieciowe
-
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ę:
-
Profilowanie CPU:
perf: Narzędzia analizy wydajności- Pokazuje, które funkcje używają najwięcej CPU
-
Analiza pamięci:
free: Podstawowe użycie pamięcivmstat: Szczegółowe statystyki pamięci/proc/meminfo: Surowe informacje o pamięci
-
I/O dysku:
iostat: Statystyki I/Oiotop: 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!