Kategoria: Wordpress

  • Od Pliku Tekstowego do Gry Online: Kompletny Poradnik Wdrażania Aplikacji React

    Od Pliku Tekstowego do Gry Online: Kompletny Poradnik Wdrażania Aplikacji React

    Masz gotowy kod do gry w React, ale znajduje się on w jednym pliku tekstowym? Chcesz umieścić tę grę na swojej stronie WordPress, w konkretnym podkatalogu, i móc ją łatwo aktualizować? Ten poradnik przeprowadzi Cię przez cały proces krok po kroku, od stworzenia projektu, przez konfigurację, aż po publikację i rozwiązywanie typowych problemów.

    Krok 1: Stworzenie Struktury Projektu z Pliku z Kodem

    Pierwszym wyzwaniem jest przekształcenie luźnego pliku z kodem w pełnoprawny, działający projekt React. Samo posiadanie pliku .txt nie wystarczy – potrzebujemy całej struktury folderów i plików konfiguracyjnych, które pozwolą na instalację zależności i budowanie aplikacji.

    Użyjemy narzędzia Vite, aby szybko wygenerować nowoczesną strukturę projektu React.

    1. Tworzenie projektu:npm create vite@latest movie-quiz -- --template react
      Ta komenda tworzy nowy folder o nazwie movie-quiz i wypełnia go kompletnym, minimalnym szablonem projektu React.
    2. Instalacja zależności:cd movie-quiz npm install
      Po wejściu do nowego folderu, npm install czyta plik package.json i pobiera wszystkie niezbędne biblioteki do podfolderu node_modules.

    Po wykonaniu tych kroków mamy gotową strukturę. Teraz wystarczy skopiować kod z Twojego pliku Quiz game Movies - React.txt i wkleić go do src/App.jsx, zastępując domyślną zawartość.

    Krok 2: Konfiguracja Tailwind CSS

    Jeśli Twój kod, tak jak w naszym przypadku, używa klas stylów z Tailwind CSS (np. bg-gray-50, font-bold), musimy dodać go do projektu. Najnowsze wersje Tailwind integrują się z Vite w bardzo prosty sposób.

    Zainstaluj wtyczkę:npm install @tailwindcss/vite

    Zaktualizuj konfigurację Vite: Otwórz plik vite.config.js i dodaj wtyczkę Tailwind:

    import { defineConfig } from 'vite'
    import react from '@vitejs/plugin-react'
    import tailwindcss from '@tailwindcss/vite'
    
    // https://vitejs.dev/config/
    export default defineConfig({
      base: '/movie-quiz/',
      plugins: [
        react(),
        tailwindcss(),
      ],
    })

    Zaimportuj style: Otwórz plik src/index.css, usuń jego zawartość i wklej jedną linię:

    @import "tailwindcss";

    Po tych krokach aplikacja uruchomiona za pomocą npm run dev powinna wyświetlać się poprawnie ze wszystkimi stylami.

    Krok 3: Publikacja Gry w Podkatalogu WordPress

    Gdy gra działa już lokalnie, możemy opublikować ją w internecie.

    1. Konfiguracja ścieżki bazowej: Aby gra działała w podkatalogu (np. /gra-quiz/), musimy dodać opcję base: '/gra-quiz/' do pliku vite.config.js. To kluczowy krok, który sprawia, że wszystkie ścieżki do plików (CSS, JS) w zbudowanej aplikacji są poprawne.
    2. Budowa wersji produkcyjnej:npm run build
      Ta komenda tworzy folder dist zawierający zoptymalizowane, statyczne pliki gry, gotowe do publikacji.
    3. Wysłanie plików na serwer: Za pomocą klienta FTP połącz się z serwerem, stwórz podkatalog gra-quiz w głównym folderze WordPressa i wgraj do niego zawartość folderu dist.
    4. Konfiguracja .htaccess: Aby odświeżanie strony wewnątrz gry działało poprawnie, w folderze gra-quiz na serwerze stwórz plik .htaccess z regułami przekierowującymi wszystkie zapytania do pliku index.html gry. Zapobiega to przejęciu routingu przez WordPress i wyświetlaniu błędu 404.

    Krok 4: Aktualizacja Gry

    Proces aktualizacji (np. dodawania nowych pytań) jest prosty i cykliczny:

    1. Modyfikuj kod: Zmień pliki projektu na swoim komputerze (np. dodaj pytania w src/App.jsx).
    2. Zbuduj ponownie: Uruchom npm run build, aby stworzyć nową wersję plików w folderze dist.
    3. Opublikuj: Połącz się z serwerem, usuń starą zawartość folderu gra-quiz i wgraj w jej miejsce nową zawartość folderu dist.

    Słowniczek Użytych Komend

    • npm create vite@latest [nazwa] -- --template react: Tworzy nowy, gotowy do pracy projekt React przy użyciu narzędzia Vite.
    • cd [nazwa-folderu]: (Change Directory) Zmienia bieżący folder w terminalu.
    • npm install: Czyta plik package.json i instaluje wszystkie potrzebne biblioteki.
    • npm install [nazwa-pakietu]: Instaluje konkretny, dodatkowy pakiet.
    • npm run dev: Uruchamia lokalny serwer deweloperski z podglądem na żywo.
    • npm run build: Tworzy zoptymalizowaną, produkcyjną wersję aplikacji w folderze dist.
    • npx [komenda]: Uruchamia polecenie z pakietu zainstalowanego lokalnie w projekcie.
    • nvm install [wersja]: Instaluje określoną wersję Node.js za pomocą menedżera NVM.
    • nvm use [wersja]: Przełącza aktywną wersję Node.js w terminalu.
    • rm -rf [nazwa-folderu]: (Remove) Usuwa folder wraz z całą jego zawartością.
    Quiz game 1
    Quiz game 2
    Quiz game 3

    Rozwiązywanie Problemów (FAQ)

    Tutaj zebraliśmy błędy, które napotkaliśmy podczas procesu, wraz z ich rozwiązaniami.

    Błąd: Could not read package.json

    Problem:

    Próba uruchomienia komendy npm run build w folderze, który zawiera tylko plik z kodem, a nie całą strukturę projektu.

    Rozwiązanie:

    Należy najpierw stworzyć pełną strukturę projektu za pomocą komendy npm create vite@latest nazwa-projektu — –template react, a dopiero potem przenieść do niego swój kod i uruchamiać komendy npm.

    Błąd: could not determine executable to run

    Problem:

    Komenda npx tailwindcss init -p nie działa. npx nie jest w stanie znaleźć i uruchomić pakietu tailwindcss.

    Rozwiązanie:

    Ten błąd może mieć wiele przyczyn, od uszkodzonego cache npm po problemy ze ścieżkami w systemie. Najskuteczniejszym rozwiązaniem jest ominięcie problemu i skorzystanie z nowoczesnej integracji Tailwind z Vite (opisanej w Kroku 2), która nie wymaga ręcznego uruchamiania tej komendy. Jeśli jednak musisz ją uruchomić, spróbuj najpierw wykonać czystą instalację (rm -rf node_modules package-lock.json, a następnie npm install).

    Błąd: Komunikat o wtyczce PostCSS dla Tailwind

    Problem:

    Po uruchomieniu serwera deweloperskiego pojawia się błąd informujący, że wtyczka PostCSS dla Tailwind została przeniesiona do osobnego pakietu.

    Rozwiązanie:

    Ten błąd pojawia się przy próbie użycia starszej metody konfiguracji z najnowszą wersją Tailwind CSS (v4+). Poprawne rozwiązanie to skorzystanie z oficjalnej wtyczki @tailwindcss/vite, która automatyzuje cały proces. Należy zainstalować wtyczkę, dodać ją do pliku vite.config.js i usunąć starą konfigurację z pliku postcss.config.js (jeśli istnieje).

  • Twój serwer jest bezpieczny. Poradnik, jak trwale blokować ataki

    Twój serwer jest bezpieczny. Poradnik, jak trwale blokować ataki

    Trwała czarna lista IP z Fail2ban, UFW i Ipset

    Wstęp: Poza tymczasową ochroną

    W cyfrowym świecie, gdzie ataki na serwery są na porządku dziennym, sama reakcja nie wystarczy. Choć narzędzia takie jak Fail2ban stanowią podstawową linię obrony, ich tymczasowe blokady pozostawiają lukę – uporczywi atakujący, po upływie czasu bana, mogą wrócić i próbować ponownie. Ten artykuł stanowi szczegółowy przewodnik po budowie w pełni zautomatyzowanego, dwuwarstwowego systemu, który zamienia efemeryczne bany w trwałe, globalne blokady. Połączenie Fail2ban, UFW oraz potężnego narzędzia Ipset tworzy mechanizm, który trwale chroni serwer przed znanymi recydywistami.

    Warstwa pierwsza: Reakcja z Fail2ban

    Na początku każdego ataku stoi Fail2ban. Ten daemon monitoruje pliki logów (np. sshd.log, apache.log) w poszukiwaniu wzorców świadczących o próbach włamania – na przykład wielu nieudanych prób logowania. Gdy wykryje taką aktywność, natychmiastowo blokuje adres IP atakującego, dodając go do reguł firewalla na zdefiniowany czas (np. 10 minut, 30 dni). Jest to skuteczna, ale krótkotrwała reakcja.

    Warstwa druga: Trwałość z UFW i Ipset

    Aby ban stał się trwały, potrzebujemy silniejszej, scentralizowanej metody zarządzania adresami IP. W tym miejscu wkraczają UFW i Ipset.

    Czym jest Ipset?Ipset to rozszerzenie do jądra Linuksa, które pozwala na zarządzanie zbiorami (setami) adresów IP, sieci, czy portów. Jest to znacznie bardziej wydajne rozwiązanie niż dodawanie tysięcy pojedynczych reguł do firewalla. Zamiast tego, firewall może odwołać się do całego zestawu za pomocą jednej reguły.

    Instalacja i konfiguracja IpsetPierwszym krokiem jest instalacja Ipset w systemie. Używamy do tego standardowych menedżerów pakietów:sudo apt updatesudo apt install ipsetNastępnie tworzymy dwa zestawy: blacklist dla adresów IPv4 i blacklist_v6 dla IPv6.

    sudo ipset create blacklist hash:ip hashsize 4096
    sudo ipset create blacklist_v6 hash:net family inet6 hashsize 4096

    Parametr hashsize określa maksymalną liczbę wpisów, co jest kluczowe dla wydajności.

    Integracja Ipset z Firewallem UFWAby UFW zaczął korzystać z naszych zestawów, musimy dodać do jego reguł odpowiednie polecenia. Edytujemy pliki konfiguracyjne UFW, dodając reguły blokujące ruch, który pochodzi z adresów zawartych w naszych zestawach Ipset. Dla IPv4 edytujemy

    sudo nano /etc/ufw/before.rules:

    Zaraz po:

    *filter
    :ufw-before-input - [0:0]

    dodajemy:

    # =======================================================
    # Reguły dla trwałej czarnej listy (ipset)
    # Blokuj każdy przychodzący ruch od adresów IP z zestawu 'blacklist' (IPv4)
    -A ufw-before-input -m set --match-set blacklist src -j DROP
    # =======================================================
    

    Dla IPv6 edytujemy

    sudo nano /etc/ufw/before6.rules

    Zaraz po

    *filter
    :ufw6-before-input - [0:0]

    dodajemy:

    # =======================================================
    # Reguły dla trwałej czarnej listy (ipset) - IPv6
    # Blokuj każdy przychodzący ruch od adresów IP z zestawu 'blacklist_v6'
    -A ufw6-before-input -m set --match-set blacklist_v6 src -j DROP
    # =======================================================
    

    Po dodaniu reguł, przeładowujemy UFW, aby weszły w życie:

    sudo ufw reload

    Skrypt do automatycznej aktualizacji czarnej listy

    Sednem systemu jest skrypt, który działa jako pomost między Fail2ban a Ipset. Jego zadaniem jest zbieranie zbanowanych adresów, unikalizowanie ich i synchronizowanie z zestawami Ipset.

    sudo nano /usr/local/bin/update-blacklist.sh

    Poniżej przedstawiono zawartość skryptu. Działa on w kilku krokach:

    1. Tworzy tymczasową, unikalną listę adresów IP z logów Fail2ban oraz istniejącej czarnej listy.
    2. Tworzy tymczasowe zestawy Ipset.
    3. Czyta adresy z unikalnej listy i dodaje je do odpowiednich zestawów tymczasowych (rozróżniając IPv4 i IPv6).
    4. Atomowo zamienia stare zestawy Ipset na nowe, tymczasowe, minimalizując ryzyko przerw w ochronie.
    5. Niszczy stare, tymczasowe zestawy.
    6. Zwraca podsumowanie liczby zablokowanych adresów.
    #!/bin/bash
    BLACKLIST_FILE="/etc/fail2ban/blacklist.local"
    IPSET_NAME_V4="blacklist"
    IPSET_NAME_V6="blacklist_v6"
    touch "$BLACKLIST_FILE"
    (grep 'Ban' /var/log/fail2ban.log | awk '{print $(NF)}' && cat "$BLACKLIST_FILE") | sort -u > "$BLACKLIST_FILE.tmp"
    mv "$BLACKLIST_FILE.tmp" "$BLACKLIST_FILE"
    
    sudo ipset create "${IPSET_NAME_V4}_tmp" hash:ip hashsize 4096 --exist
    sudo ipset create "${IPSET_NAME_V6}_tmp" hash:net family inet6 hashsize 4096 --exist
    
    while IFS= read -r ip; do
      if [[ "$ip" == *":"* ]]; then
        sudo ipset add "${IPSET_NAME_V6}_tmp" "$ip"
      else
        sudo ipset add "${IPSET_NAME_V4}_tmp" "$ip"
      fi
    done < "$BLACKLIST_FILE"
    
    sudo ipset swap "${IPSET_NAME_V4}_tmp" "$IPSET_NAME_V4"
    sudo ipset swap "${IPSET_NAME_V6}_tmp" "$IPSET_NAME_V6"
    
    sudo ipset destroy "${IPSET_NAME_V4}_tmp"
    sudo ipset destroy "${IPSET_NAME_V6}_tmp"
    
    COUNT_V4=$(sudo ipset list "$IPSET_NAME_V4" | wc -l)
    COUNT_V6=$(sudo ipset list "$IPSET_NAME_V6" | wc -l)
    let COUNT_V4=$COUNT_V4-7
    let COUNT_V6=$COUNT_V6-7
    [ $COUNT_V4 -lt 0 ] && COUNT_V4=0
    [ $COUNT_V6 -lt 0 ] && COUNT_V6=0
    
    echo "Czarna lista i ipset zaktualizowane. Zablokowane IPv4: $COUNT_V4, Zablokowane IPv6: $COUNT_V6"
    exit 0
    
    

    Po utworzeniu skryptu, należy nadać mu uprawnienia do wykonania:

    sudo chmod +x /usr/local/bin/update-blacklist.sh

    Automatyzacja i trwałość po restarcie

    Aby skrypt działał bez ingerencji, używamy harmonogramu cron. Otwieramy edytor crontab dla użytkownika root i dodajemy regułę, która uruchomi skrypt co godzinę:

    sudo crontab -e
    0 * * * * /usr/local/bin/update-blacklist.sh

    lub raz dziennie o 6 rano:

    0 6 * * * /usr/local/bin/update-blacklist.sh

    Ostatni, ale kluczowy krok, to zapewnienie, że zestawy Ipset przetrwają restart. Zestawy te są domyślnie przechowywane w pamięci RAM. Tworzymy więc usługę systemd, która zapisze ich stan przed zamknięciem serwera i wczyta go ponownie przy starcie.

    sudo nano /etc/systemd/system/ipset-persistent.service
    [Unit]
    Description=Zapisuje i wczytuje zestawy ipset przy starcie/zamknięciu systemu
    Before=network-pre.target
    ConditionFileNotEmpty=/etc/ipset.rules
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/bash -c "/sbin/ipset create blacklist hash:ip --exist; /sbin/ipset create blacklist_v6 hash:net family inet6 --exist; /sbin/ipset flush blacklist; /sbin/ipset flush blacklist_v6; /sbin/ipset restore -f <(grep -v ' create' /etc/ipset.rules)"
    ExecStop=/sbin/ipset save -f /etc/ipset.rules
    
    [Install]
    WantedBy=multi-user.target
    
    

    Na koniec włączamy i uruchamiamy usługę:

    sudo systemctl daemon-reload
    sudo systemctl enable --now ipset-persistent.service

    Jak to działa w praktyce?

    Cały system to zautomatyzowany łańcuch zdarzeń, który działa w tle, chroniąc serwer przed atakami. Oto, jak wygląda przepływ informacji i działań:

    1. Reakcja na atak (Fail2ban):
      • Ktoś próbuje się włamać na serwer (np. wielokrotnie podając błędne hasło przez SSH).
      • Fail2ban, monitorując logi systemowe (/var/log/fail2ban.log), wykrywa ten wzorzec.
      • Natychmiast dodaje adres IP atakującego do tymczasowej reguły firewalla, blokując mu dostęp na określony czas.
    2. Trwałe banowanie (Skrypt i cron):
      • Co godzinę (zgodnie z ustawieniem w cron), system uruchamia skrypt update-blacklist.sh.
      • Skrypt czyta logi Fail2ban, znajduje wszystkie adresy, które zostały zbanowane (linijki zawierające „Ban”), a następnie porównuje je z istniejącą, lokalną czarną listą (/etc/fail2ban/blacklist.local).
      • Tworzy unikalną listę wszystkich zbanowanych adresów.
      • Tworzy tymczasowe zestawy ipset (blacklist_tmp i blacklist_v6_tmp) i dodaje do nich wszystkie adresy z unikalnej listy.
      • Wykonuje operację ipset swap, która atomowo zamienia stare, aktywne zestawy na nowe, zaktualizowane.
      • UFW, dzięki zdefiniowanym wcześniej regułom, natychmiast zaczyna blokować nowe adresy, które pojawiły się w zaktualizowanych zestawach ipset.
    3. Trwałość po restarcie (Usługa systemd):
      • Działanie Ipset jest ulotne – zestawy istnieją tylko w pamięci. Usługa ipset-persistent.service rozwiązuje ten problem.
      • Przed wyłączeniem/restartem serwera: systemd uruchamia polecenie ExecStop=/sbin/ipset save -f /etc/ipset.rules. Zapisuje ono aktualny stan wszystkich zestawów ipset do pliku na dysku.
      • Po włączeniu/restarcie serwera: systemd uruchamia polecenie ExecStart=/sbin/ipset restore.... Wczytuje ono z pliku /etc/ipset.rules wszystkie zablokowane adresy i automatycznie odtwarza zestawy ipset w pamięci.
      • Dzięki temu, nawet jeśli serwer zostanie zrestartowany, czarna lista IP pozostaje nienaruszona, a ochrona jest aktywna od pierwszych chwil po uruchomieniu systemu.

    Podsumowanie i weryfikacja

    Zbudowany system to w pełni zautomatyzowana, wielowarstwowa ochrona. Atakujący są tymczasowo banowani przez Fail2ban, a ich adresy są automatycznie dodawane do trwałej czarnej listy, która jest natychmiastowo blokowana przez UFW i Ipset. Usługa systemd zapewnia, że czarna lista przetrwa restarty serwera, chroniąc przed recydywistami na stałe. Aby zweryfikować działanie, można użyć poniższych komend:

    • sudo ufw status verbose
    • sudo ipset list blacklist oraz sudo ipset list blacklist_v6
    • sudo systemctl status ipset-persistent.service

    Jak Stworzyć Niezawodną Białą Listę (Whitelist) Adresów IP w UFW i Ipset

    Wprowadzenie: Dlaczego Biała Lista Jest Kluczowa?

    Podczas konfigurowania zaawansowanych reguł firewalla, zwłaszcza tych, które automatycznie blokują adresy IP (jak w systemach z Fail2ban), istnieje ryzyko przypadkowego zablokowania samego siebie lub kluczowych usług. Biała lista (whitelist) to mechanizm, który działa jak przepustka VIP dla Twojego firewalla – adresy IP umieszczone na tej liście zawsze będą miały dostęp, niezależnie od innych, bardziej restrykcyjnych reguł blokujących.

    Ten poradnik pokaże Ci, jak krok po kroku stworzyć solidną i trwałą białą listę, używając UFW (Uncomplicated Firewall) oraz ipset. Jako przykładu użyjemy adresu IP 111.222.333.444, który chcemy dodać jako zaufany.

    Krok 1: Stworzenie Dedykowanego Zestawu ipset dla Białej Listy

    Pierwszym krokiem jest utworzenie osobnego „kontenera” na nasze zaufane adresy IP. Użycie ipset jest znacznie wydajniejsze niż dodawanie wielu pojedynczych reguł do iptables.

    Otwórz terminal i wpisz następujące polecenie:

    sudo ipset create whitelist hash:ip
    

    Co zrobiliśmy?

    • ipset create: Polecenie tworzące nowy zestaw.
    • whitelist: Nazwa naszego zestawu. Jest krótka i jednoznaczna.
    • hash:ip: Typ zestawu. hash:ip jest zoptymalizowany do przechowywania i bardzo szybkiego wyszukiwania pojedynczych adresów IPv4.

    Krok 2: Dodanie Zaufanego Adresu IP

    Teraz, gdy mamy już gotowy kontener, dodajmy do niego nasz przykładowy, zaufany adres IP.

    sudo ipset add whitelist 111.222.333.444
    

    Możesz powtórzyć to polecenie dla każdego adresu, który chcesz dodać do białej listy. Aby sprawdzić zawartość listy, użyj polecenia:

    sudo ipset list whitelist
    

    Krok 3: Modyfikacja Firewalla – Nadanie Priorytetu Białej Liście

    To jest najważniejszy krok. Musimy zmodyfikować reguły UFW tak, aby połączenia z adresów na białej liście były akceptowane natychmiast, zanim firewall zacznie przetwarzać jakiekolwiek reguły blokujące (w tym te z czarnej listy ipset czy Fail2ban).

    Otwórz plik konfiguracyjny before.rules:Jest to plik, w którym znajdują się reguły przetwarzane przed głównymi regułami UFW.

    sudo nano /etc/ufw/before.rules

    Dodaj regułę ACCEPT na samej górze: Przejdź na początek pliku i znajdź sekcję *filter. Zaraz pod linią

    :ufw-before-input - [0:0]

    , dodaj nasz nowy fragment. Umieszczenie go na samej górze gwarantuje, że zostanie przetworzony jako pierwszy.

    *filter
    :ufw-before-input - [0:0]
    # =======================================================
    # Reguła dla białej listy (ipset) - ZAWSZE MA PIERWSZEŃSTWO
    # Akceptuj każdy ruch od adresów IP z zestawu 'whitelist'
    -A ufw-before-input -m set --match-set whitelist src -j ACCEPT
    # =======================================================
    

    -A ufw-before-input: Dodajemy regułę do łańcucha ufw-before-input.

    -m set --match-set whitelist src: Warunek: „jeśli źródłowy (src) adres IP pasuje do zestawu whitelist„.

    -j ACCEPT: Akcja: „natychmiast zaakceptuj (ACCEPT) pakiet i przestań przetwarzać dalsze reguły dla tego pakietu”.

    Zapisz plik i przeładuj UFW:

    sudo ufw reload
    Od tego momentu każde połączenie z adresu 111.222.333.444 będzie natychmiast akceptowane.

    Krok 4: Zapewnienie Trwałości Białej Listy

    Zestawy ipset są przechowywane w pamięci i znikają po restarcie serwera. Aby nasza biała lista była trwała, musimy upewnić się, że jest ona automatycznie wczytywana przy każdym starcie systemu. Wykorzystamy do tego naszą wcześniej stworzoną usługę

    ipset-persistent.service.

    Zaktualizuj usługę systemd: Musimy ją „nauczyć” o istnieniu nowego zestawu whitelist.

    sudo nano /etc/systemd/system/ipset-persistent.service

    Znajdź linię ExecStart i dodaj do niej polecenia create i flush dla whitelist. Jeśli masz już inne zestawy, po prostu dodaj whitelist na początku.

    # Przykład zaktualizowanej linii
    ExecStart=/bin/bash -c "/sbin/ipset create whitelist hash:ip --exist; /sbin/ipset create blacklist hash:ip --exist; /sbin/ipset create blacklist_v6 hash:net family inet6 --exist; /sbin/ipset create blacklist_nets hash:net --exist; /sbin/ipset flush whitelist; /sbin/ipset flush blacklist; /sbin/ipset flush blacklist_v6; /sbin/ipset flush blacklist_nets; /sbin/ipset restore -f <(grep -v '^create' /etc/ipset.rules)"
    


    Najprościej jest zastąpić całą linię ExecStart jej kompletną wersją, uwzględniającą wszystkie Twoje zestawy.

    Przeładuj konfigurację systemd:

    sudo systemctl daemon-reload

    Zapisz aktualny stan wszystkich zestawów do pliku: To polecenie nadpisze stary plik /etc/ipset.rules nową wersją, która zawiera już informacje o Twojej białej liście.

    sudo ipset save > /etc/ipset.rules

    Zrestartuj usługę, aby upewnić się, że działa z nową konfiguracją:

    sudo systemctl restart ipset-persistent.service

    Podsumowanie

    Gratulacje! Stworzyłeś solidny i niezawodny mechanizm białej listy. Dzięki niemu możesz bezpiecznie zarządzać swoim serwerem, mając pewność, że zaufane adresy IP, takie jak 111.222.333.444, nigdy nie zostaną przypadkowo zablokowane. Pamiętaj, aby dodawać do tej listy tylko w pełni zaufane adresy, takie jak Twój domowy lub biurowy adres IP.

    Jak efektywnie blokować adresy IP i podsieci na serwerze Linux

    Blokowanie pojedynczych adresów IP jest łatwe, ale co, jeśli atakujący używają wielu adresów z tej samej sieci? Ręczne banowanie każdego z nich jest nieefektywne i czasochłonne.

    W tym artykule dowiesz się, jak wykorzystać narzędzia ipset i iptables, aby skutecznie blokować całe podsieci, automatyzując ten proces i oszczędzając cenny czas.

    Dlaczego blokowanie całych podsieci jest lepsze?

    Wiele ataków, zwłaszcza tych typu „brute-force”, jest przeprowadzanych z wielu adresów IP należących do tego samego operatora lub z tej samej puli adresów (podsieci). Blokowanie tylko jednego z nich jest jak łatanie małej dziury w dużej zaporze — reszta ruchu wciąż może się przedostać.

    Zamiast tego, możesz zablokować całą podsieć, na przykład 45.148.10.0/24. Taki zapis oznacza, że blokujesz aż 256 adresów jednocześnie, co jest znacznie skuteczniejsze.

    Skrypt do automatycznego blokowania podsieci

    Aby zautomatyzować proces, możesz użyć poniższego skryptu bash. Skrypt ten jest interaktywny — prosi Cię o podanie podsieci do zablokowania, a następnie dodaje ją do listy ipset oraz zapisuje w pliku, dzięki czemu będzie trwale zablokowana.

    Przeanalizujmy skrypt krok po kroku:

    #!/bin/bash
    
    # Nazwa listy ipset, do której będą dodawane podsieci
    BLACKLIST_NAME="blacklist_nets"
    
    # Plik, do którego będą dopisywane zablokowane podsieci
    BLACKLIST_FILE="/etc/fail2ban/blacklistnet.local"
    
    # 1. Tworzy plik z czarną listą, jeśli jeszcze nie istnieje
    touch "$BLACKLIST_FILE"
    
    # 2. Sprawdza, czy lista ipset już istnieje. Jeśli nie, tworzy ją.
    # Użycie "hash:net" pozwala na przechowywanie podsieci, co jest kluczowe.
    ipset list $BLACKLIST_NAME >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        sudo ipset create $BLACKLIST_NAME hash:net maxelem 65536
    fi
    
    # 3. W pętli prosi użytkownika o podanie podsieci do zablokowania.
    # Pętla kończy się, gdy użytkownik wpisze "koniec".
    while true; do
        read -p "Podaj adres podsieci do zablokowania (np. 192.168.1.0/24) lub wpisz 'koniec': " subnet
        
        if [ "$subnet" == "koniec" ]; then
            break
        elif [[ "$subnet" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}$ ]]; then
            # Sprawdza, czy wprowadzony format jest poprawny
            
            # Sprawdza, czy podsieć nie jest już w pliku, aby uniknąć duplikatów
            if ! grep -q "^$subnet$" "$BLACKLIST_FILE"; then
                echo "$subnet" | sudo tee -a "$BLACKLIST_FILE" > /dev/null
            fi
            
            # Dodaje podsieć do listy ipset
            sudo ipset add $BLACKLIST_NAME $subnet
        else
            echo "Błąd: Nieprawidłowy format. Podaj adres w formacie 'X.X.X.X/Y'."
        fi
    done
    
    # 4. Dodaje regułę w iptables, która blokuje cały ruch z adresów na liście ipset.
    # Upewnia się, że reguła jest dodawana tylko raz.
    if ! sudo iptables -C INPUT -m set --match-set $BLACKLIST_NAME src -j DROP >/dev/null 2>&1; then
        sudo iptables -A INPUT -m set --match-set $BLACKLIST_NAME src -j DROP
    fi
    
    # 5. Zapisuje reguły iptables, aby przetrwały restart serwera.
    # Ten fragment sprawdza, z jakiego narzędzia korzysta system
    if command -v netfilter-persistent &> /dev/null; then
        sudo netfilter-persistent save
    elif command -v service &> /dev/null && service iptables status >/dev/null 2>&1; then
        sudo service iptables save
    fi
    
    echo "Skrypt zakończył działanie. Lista '$BLACKLIST_NAME' została zaktualizowana, a reguły iptables są aktywne."
    
    

    Jak używać skryptu

    1. Zapisz skrypt: Zapisz powyższy kod w pliku, np. block_nets.sh
    2. Nadaj uprawnienia: Upewnij się, że plik ma uprawnienia do wykonania: chmod +x block_nets.sh
    3. Uruchom skrypt: Wykonaj skrypt z uprawnieniami roota: sudo ./block_nets.sh
    4. Podawaj podsieci: Skrypt poprosi Cię o podanie adresów podsieci. Po prostu wpisuj je w formacie X.X.X.X/Y i zatwierdzaj Enterem. Po zakończeniu wpisz koniec.

    Zapewnienie trwałości po restarcie serwera

    Zestawy ipset są domyślnie przechowywane w pamięci RAM i znikają po ponownym uruchomieniu serwera. Aby zablokowane adresy pozostały aktywne, musisz użyć usługi systemd, która wczyta je przy starcie systemu.

    Jeśli masz już taką usługę (np. ipset-persistent.service), musisz ją zaktualizować, aby uwzględniała nową listę blacklist_nets.

    Edytuj plik usługi: Otwórz plik konfiguracyjny swojej usługi:

    sudo nano /etc/systemd/system/ipset-persistent.service

    Zaktualizuj linię ExecStart: Znajdź linię ExecStart i dodaj do niej polecenia create i flush dla zestawu blacklist_nets.Przykładowa, zaktualizowana linia ExecStart powinna wyglądać następująco:

    ExecStart=/bin/bash -c "/sbin/ipset create whitelist hash:ip --exist; /sbin/ipset create blacklist hash:ip --exist; /sbin/ipset create blacklist_v6 hash:net family inet6 --exist; /sbin/ipset create blacklist_nets hash:net --exist; /sbin/ipset flush whitelist; /sbin/ipset flush blacklist; /sbin/ipset flush blacklist_v6; /sbin/ipset flush blacklist_nets; /sbin/ipset restore -f <(grep -v ' create' /etc/ipset.rules)"

    Przeładuj konfigurację systemd:

    sudo systemctl daemon-reload

    Zapisz aktualny stan wszystkich zestawów do pliku: To polecenie nadpisze stary plik /etc/ipset.rules nową wersją, która zawiera już informacje o wszystkich Twoich listach, w tym blacklist_nets.

    sudo ipset save > /etc/ipset.rules

    Zrestartuj usługę:

    sudo systemctl restart ipset-persistent.service

    Dzięki tej metodzie możesz w prosty i wydajny sposób zarządzać bezpieczeństwem swojego serwera, skutecznie blokując całe podsieci, które wykazują podejrzaną aktywność, i mieć pewność, że te reguły pozostaną aktywne po każdym restarcie.

  • Kluczowa Aktualizacja OpenLiteSpeed 1.8.4: Wzmocnienie Jądra Serwera

    Kluczowa Aktualizacja OpenLiteSpeed 1.8.4: Wzmocnienie Jądra Serwera

    1 sierpnia 2025 r. — Nowa wersja popularnego serwera WWW OpenLiteSpeed (OLS) oznaczona numerem 1.8.4 została opublikowana, przynosząc szereg istotnych poprawek. Aktualizacja skupia się na ulepszeniach w „Core” serwera, co oznacza, że zmiany dotyczą fundamentalnych, kluczowych komponentów, odpowiadających za jego bezpieczeństwo, stabilność i wydajność.


    Poprawki w Bezpieczeństwie i Stabilności

    Jedną z najważniejszych zmian jest usunięcie krytycznej luki w protokole HTTP/3, która powodowała wyciek pamięci. Błąd ten mógł prowadzić do stopniowego spowalniania, a nawet awarii serwera, co czyni jego naprawę priorytetem dla administratorów.

    Ponadto, deweloperzy wprowadzili ulepszoną walidację żądań HTTP/2. Ma to na celu lepsze blokowanie złośliwych i źle sformatowanych zapytań, które mogą być elementem ataków typu „denial of service” (DoS). Dzięki temu serwer staje się bardziej odporny na potencjalne zagrożenia i stabilniejszy w obsłudze dużego ruchu.


    Optymalizacja Wydajności

    Aktualizacja 1.8.4 to również szereg usprawnień, które bezpośrednio wpływają na wydajność. Wprowadzono poprawioną obsługę przestrzeni nazw, co jest szczególnie ważne w złożonych środowiskach serwerowych i ułatwia deweloperom zarządzanie kontenerami.

    Usunięto również błąd, który powodował uszkodzenie odpowiedzi serwera z powodu AIO (Asynchronous I/O). AIO jest kluczową techniką, która pozwala serwerowi na jednoczesne przetwarzanie wielu operacji, co jest niezbędne dla płynnego działania witryn o dużym ruchu. Naprawienie tego błędu gwarantuje, że OpenLiteSpeed będzie działał bardziej stabilnie i dostarczał poprawne dane użytkownikom, eliminując ryzyko błędów w ładowaniu treści.


    Jak zaktualizować OpenLiteSpeed?

    Dla administratorów systemów, proces aktualizacji do nowej wersji 1.8.4 jest prosty i zautomatyzowany. OpenLiteSpeed dostarcza skrypt lsup.sh, który zarządza procesem aktualizacji.

    Aby przeprowadzić aktualizację, wystarczy wykonać następujące kroki w terminalu:

    1. Przejdź do katalogu instalacyjnego OpenLiteSpeed:cd /usr/local/lsws
    2. Uruchom skrypt aktualizujący:./lsup.sh

    Skrypt automatycznie pobierze i zainstaluje najnowszą wersję, zachowując istniejące ustawienia serwera. Pełna dokumentacja dotycząca procesu aktualizacji jest dostępna na oficjalnej stronie projektu OpenLiteSpeed.


    Podsumowanie

    Wydanie OpenLiteSpeed 1.8.4 to sygnał, że deweloperzy koncentrują się na solidnych fundamentach swojego oprogramowania. Zmiany w „Core” serwera, skupione na bezpieczeństwie i optymalizacji, sprawiają, że aktualizacja jest niezbędna dla każdego, kto chce utrzymać swoje serwery w optymalnej kondycji.

  • WordPress i błąd „A scheduled event has failed”?

    WordPress i błąd „A scheduled event has failed”?

    Każdy administrator strony na WordPressie zna to uczucie. Logujesz się do panelu, a tam czeka na Ciebie komunikat: „A scheduled event has failed”. Serce na chwilę staje. Czy strona padła? Czy to poważna awaria?

    Spokojnie! Zanim zaczniesz panikować, weź głęboki oddech. Ten błąd, choć brzmi poważnie, rzadko oznacza katastrofę. Najczęściej jest to po prostu sygnał, że wewnętrzny mechanizm harmonogramu zadań w WordPressie nie działa optymalnie.

    W tym artykule wyjaśnimy, czym jest ten błąd, dlaczego się pojawia i jak go profesjonalnie naprawić w różnych konfiguracjach serwerowych.

    Czym jest WP-Cron?

    WordPress musi wykonywać cykliczne zadania w tle: publikować zaplanowane posty, tworzyć kopie zapasowe czy skanować witrynę w poszukiwaniu wirusów (jak w przypadku błędu wf_scan_monitor od wtyczki Wordfence). Do obsługi tych operacji używa wbudowanego mechanizmu o nazwie WP-Cron.

    Problem polega na tym, że WP-Cron nie jest prawdziwym demonem cron znanym z systemów uniksowych. To „pseudo-cron”, który ma fundamentalną wadę: uruchamia się tylko wtedy, gdy ktoś odwiedzi Twoją stronę internetową.

    • Na stronach o małym ruchu: Jeśli nikt nie wchodzi na witrynę, zadania nie są wykonywane o czasie, co prowadzi do błędów.
    • Na stronach o dużym ruchu: WP-Cron jest wywoływany przy każdym załadowaniu strony, co generuje niepotrzebne obciążenie serwera.

    W obu przypadkach rozwiązanie jest takie samo: wyłączyć wbudowany WP-Cron i zastąpić go stabilnym, systemowym zadaniem cron.

    Scenariusz 1: Pojedyncza strona WordPress

    To podstawowa i najczęstsza konfiguracja. Rozwiązanie problemu jest proste i sprowadza się do dwóch kroków.

    Krok 1: Wyłącz wbudowany mechanizm WP-Cron

    Edytuj plik wp-config.php w głównym katalogu swojej strony i dodaj poniższą linię:

    define('DISABLE_WP_CRON', true);
    

    Krok 2: Skonfiguruj systemowy cron

    Zaloguj się do swojego serwera przez SSH i wpisz crontab -e, aby edytować listę zadań systemowych. Następnie dodaj jedną z poniższych linii, która co 5 minut będzie wywoływać mechanizm crona WordPressa we właściwy sposób.

    • Metoda z wget:*/5 * * * * wget -q -O - https://twojadomena.pl/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    • Metoda z curl:*/5 * * * * curl -s https://twojadomena.pl/wp-cron.php?doing_wp_cron >/dev/null 2>&1

    Pamiętaj, aby podmienić twojadomena.pl na właściwy adres. Od teraz zadania będą wykonywane regularnie, niezależnie od ruchu na stronie.

    Scenariusz 2: Wiele stron na standardowym serwerze

    Jeśli zarządzasz wieloma stronami, dodawanie osobnej linii w crontab dla każdej z nich jest niepraktyczne i trudne w utrzymaniu. Lepszym rozwiązaniem jest stworzenie jednego skryptu, który automatycznie znajdzie wszystkie instalacje WordPressa i uruchomi dla nich zadania.

    Krok 1: Stwórz plik skryptu

    Utwórz plik, np. /usr/local/bin/run_all_wp_crons.sh, i wklej do niego poniższą zawartość. Skrypt przeszukuje katalog /var/www/ w poszukiwaniu plików wp-config.php.

    #!/bin/bash
    
    # =================================================================
    # Skrypt do uruchamiania zadań cron dla wszystkich stron WordPress
    # Zoptymalizowany dla struktury katalogów ISPConfig
    # =================================================================
    
    # Główny katalog, w którym znajdują się FAKTYCZNE pliki stron w ISPConfig
    SITES_ROOT="/var/www/clients/"
    
    # Ścieżka do interpretera PHP (może wymagać dostosowania)
    PHP_EXECUTABLE="/usr/bin/php"
    
    # Logowanie (opcjonalne, ale przydatne do debugowania)
    LOG_FILE="/var/log/wp_cron_runner.log"
    echo "Rozpoczynam uruchamianie zadań cron (ISPConfig): $(date)" >> $LOG_FILE
    
    # Znajdź wszystkie pliki wp-config.php i uruchom dla nich wp-cron.php
    find "$SITES_ROOT" -name "wp-config.php" -print0 | while IFS= read -r -d '' config_file; do
    
        # Wyodrębnij katalog, w którym znajduje się WordPress
        WP_DIR=$(dirname "$config_file")
    
        # Wyodrębnij nazwę użytkownika (np. web4) z ścieżki
        # Jest to siódmy element w ścieżce /var/www/clients/client4/web4/web/
        WP_USER=$(echo "$WP_DIR" | awk -F'/' '{print $6}')
    
        if [ -z "$WP_USER" ]; then
            echo "-> OSTRZEŻENIE: Nie udało się określić użytkownika dla: $WP_DIR" >> $LOG_FILE
            continue
        fi
    
        # Sprawdź, czy plik wp-cron.php istnieje w tym katalogu
        if [ -f "$WP_DIR/wp-cron.php" ]; then
            echo "-> Uruchamiam cron dla: $WP_DIR jako użytkownik: $WP_USER" >> $LOG_FILE
            # Uruchom wp-cron.php używając PHP CLI, przełączając się na właściwego użytkownika
            su -s /bin/sh "$WP_USER" -c "(cd '$WP_DIR' && '$PHP_EXECUTABLE' wp-cron.php)"
        else
            echo "-> OSTRZEŻENIE: Znaleziono wp-config, ale brak wp-cron.php w: $WP_DIR" >> $LOG_FILE
        fi
    
    done
    
    echo "Zakończono: $(date)" >> $LOG_FILE
    echo "---" >> $LOG_FILE

    Krok 2: Nadaj skryptowi uprawnienia do wykonania

    chmod +x /usr/local/bin/run_all_wp_crons.sh
    

    Krok 3: Stwórz jedno zadanie cron do zarządzania wszystkim

    Teraz Twój crontab -e może zawierać tylko jedną linię:

    */5 * * * * /usr/local/bin/run_all_wp_crons.sh >/dev/null 2>&1
    

    Scenariusz 3: Wiele stron z panelem ISPConfig

    Panel ISPConfig używa specyficznej struktury katalogów z dowiązaniami symbolicznymi (symlinkami), np. /var/www/twojadomena.pl wskazuje na /var/www/clients/client1/web1/. Użycie powyższego skryptu mogłoby spowodować podwójne wykonanie zadań.

    Aby tego uniknąć, należy zmodyfikować skrypt tak, by przeszukiwał tylko docelowy katalog clients.

    Krok 1: Stwórz skrypt zoptymalizowany dla ISPConfig

    Utwórz plik /usr/local/bin/run_ispconfig_crons.sh. Zwróć uwagę na zmianę w zmiennej SITES_ROOT.

    #!/bin/bash
    
    # Skrypt do uruchamiania zadań cron dla wszystkich stron WordPress
    # Zoptymalizowany dla struktury katalogów ISPConfig
    
    # Przeszukujemy tylko katalog z faktycznymi plikami stron
    SITES_ROOT="/var/www/clients/"
    
    # Ścieżka do interpretera PHP
    PHP_EXECUTABLE="/usr/bin/php"
    
    # Opcjonalny plik logu do śledzenia postępów
    LOG_FILE="/var/log/wp_cron_runner.log"
    echo "Rozpoczynam uruchamianie zadań cron (ISPConfig): $(date)" >> $LOG_FILE
    
    find "$SITES_ROOT" -name "wp-config.php" -print0 | while IFS= read -r -d '' config_file; do
        
        WP_DIR=$(dirname "$config_file")
    
        if [ -f "$WP_DIR/wp-cron.php" ]; then
            echo "-> Uruchamiam cron dla: $WP_DIR" >> $LOG_FILE
            (cd "$WP_DIR" && "$PHP_EXECUTABLE" wp-cron.php)
        fi
    
    done
    
    echo "Zakończono: $(date)" >> $LOG_FILE
    echo "---" >> $LOG_FILE
    

    Krok 2 i 3 są analogiczne jak w scenariuszu 2: nadaj skryptowi uprawnienia (chmod +x) i dodaj jedną linię do crontab -e, wskazując na nowy plik skryptu.

    Podsumowanie

    Błąd „A scheduled event has failed” to nie powód do paniki, a raczej zaproszenie do ulepszenia swojej infrastruktury. To szansa, by przejść z zawodnego, wbudowanego mechanizmu WordPressa na solidne, profesjonalne rozwiązanie systemowe, które gwarantuje stabilność i wydajność.

    Niezależnie od konfiguracji serwera, teraz masz narzędzia, by spać spokojnie, wiedząc, że Twoje zaplanowane zadania wykonują się jak w szwajcarskim zegarku.

  • OpenLiteSpeed (OLS) z Redis. Szybka pamięć Cache dla stron WordPress.

    OpenLiteSpeed (OLS) z Redis. Szybka pamięć Cache dla stron WordPress.

    Zarządzanie serwerem WWW wymaga zrozumienia komponentów, które składają się na jego architekturę. Każdy element odgrywa kluczową rolę w dostarczaniu treści użytkownikom w sposób szybki i niezawodny. Ten artykuł stanowi dogłębną analizę nowoczesnej konfiguracji serwerowej opartej na OpenLiteSpeed (OLS), wyjaśniając jego podstawowe mechanizmy, współpracę z systemem buforowania Redis oraz metody komunikacji z aplikacjami zewnętrznymi.

    Sekcja 1: OpenLiteSpeed (OLS) – Rdzeń Systemu

    Fundamentem każdej witryny jest serwer WWW – oprogramowanie odpowiedzialne za przyjmowanie żądań HTTP od przeglądarek i zwracanie im odpowiednich zasobów, takich jak pliki HTML, CSS, JavaScript czy obrazy.

    Czym jest OpenLiteSpeed?

    OpenLiteSpeed (OLS) to wysokowydajny, lekki serwer WWW o otwartym kodzie źródłowym, rozwijany przez LiteSpeed Technologies. Jego kluczową przewagą nad tradycyjnymi serwerami, takimi jak Apache w domyślnej konfiguracji, jest architektura sterowana zdarzeniami (event-driven).

    • Model procesowy (np. Apache prefork): Dla każdego jednoczesnego połączenia tworzony jest oddzielny proces lub wątek. Model ten jest prosty, ale przy dużym ruchu prowadzi do znacznego zużycia pamięci RAM i zasobów procesora, ponieważ każdy proces, nawet nieaktywny, rezerwuje zasoby.
    • Model sterowany zdarzeniami (OpenLiteSpeed, Nginx): Jeden proces roboczy serwera jest w stanie obsługiwać setki lub tysiące połączeń jednocześnie. Wykorzystuje on nieblokujące operacje wejścia/wyjścia (non-blocking I/O) i pętlę zdarzeń (event loop) do zarządzania żądaniami. Gdy proces czeka na operację (np. odczyt z dysku), nie blokuje się, lecz przechodzi do obsługi innego połączenia. Taka architektura zapewnia znacznie lepszą skalowalność i mniejsze zużycie zasobów.

    Kluczowe Funkcje OpenLiteSpeed

    OLS oferuje zestaw funkcji, które czynią go potężnym i elastycznym narzędziem:

    • Graficzny Interfejs Administracyjny (WebAdmin GUI): OLS posiada wbudowany panel administracyjny dostępny przez przeglądarkę, który umożliwia konfigurację wszystkich aspektów serwera – od wirtualnych hostów, przez ustawienia PHP, po reguły bezpieczeństwa – bez konieczności bezpośredniej edycji plików konfiguracyjnych.
    • Wbudowany Moduł Buforujący (LSCache): Jedną z najważniejszych funkcji OLS jest LSCache, zaawansowany i wysoce konfigurowalny mechanizm buforowania pełnych stron (full-page cache). W połączeniu z dedykowanymi wtyczkami dla systemów CMS (np. WordPress), LSCache przechowuje w pamięci w pełni wyrenderowane strony HTML. Gdy nadchodzi kolejne żądanie o tę samą stronę, serwer dostarcza ją bezpośrednio z bufora, całkowicie omijając wykonanie kodu PHP i zapytania do bazy danych.
    • Wsparcie dla Nowoczesnych Protokołów (HTTP/3): OLS natywnie wspiera najnowsze protokoły sieciowe, w tym HTTP/3 (oparty na QUIC). Zapewnia to mniejsze opóźnienia i lepszą wydajność, zwłaszcza na niestabilnych połączeniach mobilnych.
    • Kompatybilność z Regułami Apache: OLS potrafi interpretować dyrektywy mod_rewrite z plików .htaccess, co jest standardem w ekosystemie Apache. Upraszcza to znacząco proces migracji istniejących aplikacji bez konieczności przepisywania złożonych reguł przepisywania adresów URL.

    Sekcja 2: Redis – Akcelerator Danych w Pamięci Operacyjnej

    Buforowanie (caching) to fundamentalna technika optymalizacyjna, polegająca na przechowywaniu wyników kosztownych operacji w szybszym medium dostępowym. W kontekście aplikacji webowych, Redis jest jednym z najpopularniejszych narzędzi do realizacji tego zadania.

    Czym jest Redis?

    Redis (REmote DIctionary Server) to działająca w pamięci operacyjnej (in-memory) struktura danych, używana najczęściej jako baza danych typu klucz-wartość, bufor lub broker wiadomości. Jego potęga wynika z faktu, że wszystkie dane przechowuje w pamięci RAM, a nie na dysku twardym. Dostęp do RAM jest o rzędy wielkości szybszy niż dostęp do dysków SSD czy HDD, ponieważ jest to operacja czysto elektroniczna, omijająca wolniejsze interfejsy I/O.

    W typowej aplikacji webowej Redis pełni rolę bufora obiektów (object cache). Przechowuje on wyniki zapytań do bazy danych, fragmenty wyrenderowanego kodu HTML lub złożone obiekty PHP, które są kosztowne do ponownego wygenerowania.

    Jak Działa Współpraca OpenLiteSpeed i Redis?

    Mechanizmy buforowania LSCache i Redis nie wykluczają się, lecz doskonale uzupełniają, tworząc wielowarstwową strategię optymalizacji.

    Przepływ żądania (uproszczony):

    1. Użytkownik wysyła żądanie o dynamiczną stronę (np. wpis na blogu).
    2. OpenLiteSpeed odbiera żądanie. Pierwszym krokiem jest sprawdzenie bufora LSCache.
      • TRAFIENIE w LSCache (Cache Hit): Jeśli w LSCache znajduje się aktualna, w pełni wyrenderowana wersja strony, OLS natychmiast ją zwraca. Proces kończy się w tym miejscu. Jest to najszybszy możliwy scenariusz.
      • BRAK w LSCache (Cache Miss): Jeśli strony nie ma w buforze, OLS przekazuje żądanie do odpowiedniej aplikacji zewnętrznej (np. interpretera PHP) w celu jej wygenerowania.
    3. Aplikacja PHP rozpoczyna budowanie strony. Aby to zrobić, musi pobrać dane z bazy danych (np. MySQL).
    4. Zanim PHP wykona kosztowne zapytania do bazy danych, najpierw sprawdza bufor obiektów w Redis.
      • TRAFIENIE w Redis: Jeśli potrzebne dane (np. wyniki zapytań SQL) znajdują się w Redis, są one zwracane natychmiast. PHP używa tych danych do zbudowania strony, omijając komunikację z bazą danych.
      • BRAK w Redis: Jeśli danych nie ma w buforze, PHP wykonuje zapytania do bazy danych, pobiera wyniki, a następnie zapisuje je w Redis na potrzeby przyszłych żądań.
    5. PHP kończy generowanie strony HTML i zwraca ją do OpenLiteSpeed.
    6. OLS wysyła stronę do użytkownika, a jednocześnie zapisuje ją w buforze LSCache, aby kolejne żądania mogły być obsłużone znacznie szybciej.

    Ta dwuwarstwowa strategia zapewnia, że zarówno pierwsze, jak i kolejne odwiedziny strony są maksymalnie zoptymalizowane. LSCache eliminuje potrzebę uruchamiania PHP, a Redis drastycznie przyspiesza sam proces generowania strony, gdy jest to konieczne.

    Sekcja 3: Delegowanie Zadań – Aplikacje Zewnętrzne w OLS

    Nowoczesne serwery WWW są zoptymalizowane do obsługi połączeń sieciowych i dostarczania plików statycznych (obrazy, CSS). Wykonywanie kodu aplikacji (treści dynamicznej) jest delegowane do wyspecjalizowanych programów zewnętrznych. Taki podział obowiązków zwiększa stabilność i bezpieczeństwo.

    OpenLiteSpeed zarządza tymi programami poprzez system Aplikacji Zewnętrznych. Poniżej opisano najważniejsze typy:

    • Aplikacja LSAPI (LiteSpeed SAPI App): Najbardziej wydajna i zalecana metoda komunikacji z aplikacjami PHP, Python czy Ruby. LSAPI to autorski, zoptymalizowany protokół, który minimalizuje narzut komunikacyjny między serwerem a interpreterem aplikacji.
    • Aplikacja FastCGI: Bardziej uniwersalny, standardowy protokół do komunikacji z zewnętrznymi procesami aplikacji. Jest to dobre rozwiązanie dla aplikacji, które nie wspierają LSAPI. Działa na podobnej zasadzie co LSAPI (utrzymując stałe procesy robocze), ale z nieco większym narzutem protokołu.
    • Serwer WWW (Proxy): Ten typ konfiguruje OLS do działania jako odwrotne proxy (reverse proxy). OLS przyjmuje żądanie od klienta, a następnie przekazuje je w całości do innego serwera działającego w tle (tzw. backend), np. serwera aplikacji napisanego w Node.js, Javie czy Go. Jest to kluczowe do budowania architektur opartych na mikroserwisach.
    • Aplikacja CGI: Historyczna i najwolniejsza metoda. Dla każdego żądania uruchamiany jest nowy proces aplikacji, który jest zamykany po zwróceniu odpowiedzi. Ze względu na ogromny narzut wydajnościowy, jest używana tylko dla starszych aplikacji, które nie wspierają nowszych protokołów.

    OLS kieruje ruch do odpowiedniej aplikacji za pomocą Obsługi Skryptów (Script Handlers), która mapuje rozszerzenia plików (np. .php) na konkretną aplikację, lub Kontekstów (Contexts), które mapują ścieżki URL (np. /api/) na aplikację typu proxy.

    Sekcja 4: Język Komunikacji – Porównanie Architektur SAPI

    SAPI (Server Application Programming Interface) to interfejs definiujący, w jaki sposób serwer WWW komunikuje się z interpreterem aplikacji (np. PHP). Wybór implementacji SAPI ma fundamentalny wpływ na wydajność i stabilność całego systemu.

    Ewolucja SAPI

    1. CGI (Common Gateway Interface): Pierwszy standard. Stabilny, ale niewydajny z powodu uruchamiania nowego procesu dla każdego żądania.
    2. Moduł wbudowany (np. mod_php w Apache): Interpreter PHP jest ładowany bezpośrednio do procesu serwera. Zapewnia to bardzo szybką komunikację, ale kosztem stabilności (awaria PHP powoduje awarię serwera) i bezpieczeństwa.
    3. FastCGI: Kompromis między wydajnością a stabilnością. Utrzymuje pulę niezależnych, długo działających procesów PHP, co eliminuje koszt ich ciągłego uruchamiania. Komunikacja odbywa się przez gniazdo, co zapewnia izolację od serwera WWW.
    4. LSAPI (LiteSpeed SAPI): Ewolucja modelu FastCGI. Wykorzystuje tę samą architekturę z oddzielnymi procesami, ale sam protokół komunikacyjny został zaprojektowany od podstaw w celu minimalizacji narzutu, co przekłada się na jeszcze wyższą wydajność niż w przypadku standardowego FastCGI.

    Tabela Porównawcza Architektur SAPI

    CechaCGIModuł Wbudowany (mod_php)FastCGILiteSpeed SAPI (LSAPI)
    Model ProcesuNowy proces na żądanieWspółdzielony proces z serweremStałe procesy zewnętrzneStałe procesy zewnętrzne
    WydajnośćNiskaBardzo wysokaWysokaNajwyższa
    Stabilność / IzolacjaDoskonałaNiskaWysokaWysoka
    Zużycie ZasobówBardzo wysokieUmiarkowaneNiskieBardzo niskie
    Narzut KomunikacyjnyWysoki (uruchamianie procesu)Minimalny (wspólna pamięć)Umiarkowany (protokół)Niski (zoptymalizowany protokół)
    Główna ZaletaPełna izolacjaSzybkość komunikacjiZrównoważona wydajność i stabilnośćZoptymalizowana wydajność i stabilność
    Główna WadaBardzo niska wydajnośćNiestabilność, problemy z bezpieczeństwemBardziej złożona konfiguracjaTechnologia specyficzna dla LiteSpeed

    Porównanie Gniazd Komunikacyjnych

    Komunikacja między procesami (np. OLS a Redis, lub OLS a procesy PHP) odbywa się za pośrednictwem gniazd (sockets). Wybór typu gniazda ma wpływ na wydajność.

    CechaGniazdo TCP/IP (na localhost)Gniazdo Domeny Uniksowej (UDS)
    AdresowanieAdres IP + Port (np. 127.0.0.1:6379)Ścieżka pliku (np. /var/run/redis.sock)
    ZasięgTa sama maszyna lub przez siećTylko ta sama maszyna (IPC)
    Wydajność (lokalnie)NiższaWyższa
    Narzut (Overhead)Wyższy (przechodzi przez stos sieciowy)Minimalny (omija stos sieciowy)
    Model BezpieczeństwaReguły zapory sieciowej (firewall)Uprawnienia systemu plików

    W przypadku komunikacji lokalnej, UDS jest rozwiązaniem wydajniejszym, ponieważ omija cały stos sieciowy systemu operacyjnego, co redukuje opóźnienia i narzut procesora. Dlatego w zoptymalizowanych konfiguracjach jest preferowany do połączeń między OLS, Redis i procesami LSAPI.

    Sekcja 5: Praktyczna Implementacja i Zarządzanie

    Aby przełożyć teorię na praktykę, przeanalizujmy rzeczywistą konfigurację serwera dla wirtualnego hosta solutionsinc.co.uk .

    5.1 Analiza Konfiguracji na Przykładzie solutionsinc.co.uk

    OLS External App2
    1. Definicja Aplikacji Zewnętrznej (External App):
      • W panelu „External App” zdefiniowano aplikację typu LiteSpeed SAPI App o nazwie solutionsinc.co.uk. Jest to centralny punkt konfiguracji dla dynamicznej obsługi strony.
      • Adres (Address): UDS://tmp/lshttpd/solutionsinc.co.uk.sock. Ta linia jest kluczowa. Informuje OLS, że do komunikacji z aplikacją PHP będzie używane Gniazdo Domeny Uniksowej (UDS), a nie gniazdo sieciowe TCP/IP. Plik .sock pod tą ścieżką jest fizycznym punktem końcowym tego wydajnego kanału komunikacji.
      • Polecenie (Command): /usr/local/lsws/lsphp84/bin/lsphp. To jest bezpośrednia ścieżka do pliku wykonywalnego interpretera LiteSpeed PHP w wersji 8.4. OLS wie, że ma uruchomić ten właśnie program do przetwarzania skryptów.
      • Pozostałe parametry, jak LSAPI_CHILDREN=50 czy limity pamięci, służą do precyzyjnego zarządzania zasobami i wydajnością puli procesów PHP.
    2. Powiązanie z Plikami PHP (Script Handler):
      • Sama definicja aplikacji nie wystarczy. W panelu „Script Handler” mówimy OLS, kiedy ma jej używać.
      • Dla sufiksu (rozszerzenia) php ustawiono obsługę przez LiteSpeed SAPI.
      • Jako Handler Name wybrano [VHost Level]: solutionsinc.co.uk, co bezpośrednio wskazuje na aplikację zdefiniowaną w poprzednim kroku.
      • Wniosek: Od tej pory każde żądanie pliku z rozszerzeniem .php na tej stronie zostanie przekazane przez gniazdo UDS do jednego z procesów lsphp84.
    OLS Script Handler2
    OLS

    Ta konfiguracja jest doskonałym przykładem zoptymalizowanego i bezpiecznego środowiska: OLS obsługuje połączenia, a dedykowane, odizolowane procesy lsphp84 wykonują kod aplikacji, komunikując się przez najszybszy dostępny kanał – gniazdo domeny uniksowej.

    5.2 Zarządzanie Gniazdami Domeny Uniksowej (.sock) i Rozwiązywanie Problemów

    Plik .sock, jak widać w przykładzie solutionsinc.co.uk.sock, nie jest zwykłym plikiem. Jest to specjalny plik w systemach uniksowych, który działa jako punkt końcowy dla komunikacji międzyprocesowej (IPC). Zamiast komunikować się przez warstwę sieciową (nawet lokalną), procesy mogą zapisywać i odczytywać dane bezpośrednio z tego pliku, co jest znacznie szybsze.

    Kiedy OpenLiteSpeed uruchamia aplikację zewnętrzną LSAPI, tworzy taki plik gniazda. Procesy PHP nasłuchują na tym gnieździe na przychodzące żądania od OLS.

    Praktyczna porada: „Uparty” plik .sock

    Czasami po wprowadzeniu zmian w konfiguracji PHP (np. modyfikacji pliku php.ini lub instalacji nowego rozszerzenia) i restarcie serwera OpenLiteSpeed (lsws), zmiany mogą nie być widoczne na stronie. Dzieje się tak, ponieważ procesy lsphp mogły nie zostać poprawnie zrestartowane wraz z serwerem, a OLS wciąż komunikuje się ze starymi procesami przez istniejący, „stary” plik .sock.

    W takiej sytuacji, gdy standardowy restart nie pomaga, skutecznym rozwiązaniem jest:

    1. Zatrzymać serwer OpenLiteSpeed.
    2. Ręcznie usunąć odpowiedni plik .sock, np. za pomocą polecenia w terminalu:rm /tmp/lshttpd/solutionsinc.co.uk.sock
    3. Ponownie uruchomić serwer OpenLiteSpeed.

    Po ponownym uruchomieniu OLS, nie znajdując istniejącego pliku gniazda, zostanie zmuszony do stworzenia go na nowo. Co ważniejsze, uruchomi przy tym nową pulę procesów lsphp, które wczytają świeżą konfigurację z pliku php.ini. Usunięcie pliku .sock działa jak twardy reset kanału komunikacyjnego między serwerem a aplikacją PHP, gwarantując, że wszystkie komponenty zostaną zainicjowane od zera z aktualnymi ustawieniami.

    Sekcja 6: Podsumowanie

    Przedstawiona konfiguracja serwera to precyzyjnie zaprojektowany system, w którym każdy element odgrywa istotną rolę.

    • OpenLiteSpeed działa jako wydajny, sterowany zdarzeniami rdzeń, zarządzający połączeniami.
    • LSCache zapewnia błyskawiczne dostarczanie stron z bufora pełnej strony.
    • Redis działa jako bufor obiektów, drastycznie przyspieszając generowanie treści dynamicznych, gdy jest to potrzebne.
    • LSAPI i UDS tworzą zoptymalizowane kanały komunikacyjne, minimalizując narzut i opóźnienia.

    Zrozumienie tych zależności pozwala na świadome zarządzanie serwerem i jego optymalizację w celu osiągnięcia maksymalnej wydajności i niezawodności.

  • Ubuntu Server 24.04 + ISPConfig (Nginx) + OpenLiteSpeed: Nowoczesny i Wydajny Serwer WWW i Email bez CyberPanel

    Ubuntu Server 24.04 + ISPConfig (Nginx) + OpenLiteSpeed: Nowoczesny i Wydajny Serwer WWW i Email bez CyberPanel

    Wstęp

    Witajcie, drodzy administratorzy serwerów, zapaleńcy linuksowych rozwiązań i wszyscy ci, którzy na hasło „reverse proxy” nie wybiegają z pokoju z krzykiem. Dziś podzielę się z Wami historią migracji, która – niczym dobre sci-fi – ma swoje zwroty akcji, niespodzianki i happy end (a przynajmniej na razie!).

    Przez ostatnie lata moim głównym narzędziem do zarządzania serwerem WWW i pocztą był zestaw OpenLiteSpeed z CyberPanel. Jednak życie (a konkretnie: autorzy CyberPanel) postanowili, że Ubuntu 24.04 LTS nie będzie im w głowie. I tak przez ponad 3 lata… Aktualizacja? Zapomnij! Support dla nowych wersji Ubuntu? Pomyliłeś adres! Tak oto w czerwcu 2025 roku, mimo licznych próśb i oczekiwań, CyberPanel wciąż nie wspiera najnowszego Ubuntu. I nie zapowiada się, by coś się w tej kwestii zmieniło.

    Ale nie ma tego złego… Postanowiłem więc wziąć sprawy w swoje ręce. W efekcie powstała hybryda na miarę XXI wieku: Ubuntu Server 24.04, ISPConfig z Nginx jako reverse proxy oraz OpenLiteSpeed bez CyberPanelowego balastu. Dlaczego taka kombinacja? Bo lubię mieć kontrolę, cenię sobie wydajność, elastyczność i – co tu kryć – nie chcę być zakładnikiem archaicznych paneli admina.

    Takie rozwiązanie daje:

    • Świeżutki, wspierany system operacyjny z długim wsparciem (a nie wykopaliska z 2022 roku)
    • Pełną kontrolę nad konfiguracją, bez ograniczeń narzucanych przez CyberPanel
    • Możliwość korzystania z wydajności OpenLiteSpeed i prostoty zarządzania przez ISPConfig
    • Bezproblemową obsługę zarówno stron WWW, jak i poczty (a kto próbował skonfigurować własną pocztę na OLS + CyberPanel ten wie, jak wygląda piekło)
    • Nowoczesność, elastyczność i gotowość na przyszłość – a przy okazji mniej siwych włosów na głowie

    Czy jest to rozwiązanie dla każdego? Pewnie nie – ale jeśli masz dość czekania na łaskę twórców panelu, szukasz czegoś wydajnego i lubisz mieć nad wszystkim kontrolę – zostań ze mną. W kolejnych częściach pokażę, jak skonfigurować taki serwer krok po kroku, bez zbędnych zaklęć i frustracji.

    Dlaczego warto tworzyć osobnych klientów dla każdej strony w ISPConfig?

    Konfigurując serwer w ISPConfig, bezpieczeństwo i porządek to podstawa. Dlatego jedną z najlepszych praktyk jest tworzenie osobnego klienta dla każdej strony internetowej, którą zamierzamy hostować. Takie podejście nie tylko upraszcza zarządzanie, ale przede wszystkim podnosi poziom bezpieczeństwa – nawet jeśli na pierwszy rzut oka wydaje się to bardziej czasochłonne.

    Zalety zakładania osobnego klienta dla każdej strony:

    1. Izolacja danych – Każdy klient (a więc i jego strony, maile, bazy danych) działa w swojej własnej „piaskownicy”. Gdyby doszło do włamania na jedną stronę, pozostałe są dużo lepiej chronione.
    2. Łatwiejsza administracja – Zarządzanie uprawnieniami, kopie zapasowe, limity zasobów – wszystko jest czytelne i można ustawiać indywidualnie dla każdego klienta.
    3. Przejrzystość rozliczeń – Jeśli świadczysz usługi hostingowe, łatwiej rozliczysz się z każdym klientem osobno.
    4. Bezpieczna poczta – Konta e-mail klientów są od siebie oddzielone. Spam lub włamanie do jednego konta nie wpływa na pozostałe.
    5. Prostsze przenosiny lub usuwanie – Usunięcie jednej strony (razem z klientem) nie wpłynie na inne witryny na serwerze.

    Pokażę teraz, jak – krok po kroku – stworzyć klienta pod nową stronę na przykładzie solutionsinc.co.uk.


    Limity i bezpieczeństwo w ISPConfig – dlaczego to takie ważne?

    Po utworzeniu klienta w ISPConfig, jednym z najważniejszych etapów konfiguracji jest ustawienie limitów oraz zadbanie o bezpieczeństwo konta. Dzięki ISPConfig możesz precyzyjnie określić, ile zasobów (stron, kont e-mail, baz danych itp.) może wykorzystać każdy klient – to świetne narzędzie do zarządzania zarówno komercyjnymi usługami hostingowymi, jak i własnymi projektami.

    Przykładowe limity, które możesz ustawić:

    • Maksymalna liczba domen i subdomen
    • Limit przestrzeni dyskowej (Web Quota)
    • Limit transferu (Traffic Quota)
    • Liczba kont FTP, użytkowników SSH
    • Możliwość korzystania z określonych technologii (np. PHP, Python, Ruby, SSL, Let’s Encrypt)
    • Limity dla e-maili, baz danych, zadań Cron i innych usług

    Ustawianie limitów pozwala utrzymać porządek, zapobiega przypadkowemu „przeciążeniu” serwera i chroni przed nadużyciami (np. przez błędną konfigurację aplikacji lub atak DDoS).

    Bezpieczne hasło – Twój pierwszy mur obronny

    Bardzo istotną sprawą podczas tworzenia konta klienta jest ustawienie silnego, długiego hasła – najlepiej losowego, wygenerowanego przez manager haseł. Proponuję wybrać hasło o długości nawet 64 znaków, składające się z małych i wielkich liter, cyfr oraz znaków specjalnych. Dzięki managerowi haseł nie musisz go pamiętać, a Twoje konto jest znacznie bezpieczniejsze przed atakami.

    Pamiętaj: Słabe, powtarzalne lub krótkie hasła to zaproszenie dla cyberprzestępców!

    Opis opcji sekcji „Web Limits” w ISPConfig

    • Webservers: Serwer WWW, na którym będą zakładane strony klienta. Zazwyczaj do wyboru masz zdefiniowane wcześniej serwery w panelu.
    • Max. number of web domains: Maksymalna liczba domen, które klient może dodać. Wartość -1 oznacza brak limitu.
    • Web Quota: Limit przestrzeni dyskowej na pliki stron WWW klienta (w MB). -1 = bez limitu.
    • Traffic Quota: Limit miesięcznego transferu danych (w MB) dla wszystkich stron klienta. -1 = brak limitu.
    • PHP Options: Możesz włączyć/wyłączyć PHP oraz wybrać tryb działania (np. PHP-FPM, Disabled). Ważne dla bezpieczeństwa i wydajności.
    • CGI available: Czy klient może uruchamiać skrypty CGI (zazwyczaj wyłączone ze względów bezpieczeństwa).
    • SSI available: Pozwala na używanie Server Side Includes.
    • Perl available / Ruby available / Python available: Dostępność tych języków dla stron klienta.
    • SuEXEC forced: Wymusza uruchamianie skryptów z uprawnieniami użytkownika domeny, zwiększa bezpieczeństwo.
    • Custom error docs available: Czy można definiować własne strony błędów (np. 404.html).
    • Wildcard subdomain available: Umożliwia obsługę subdomen typu *.twojadomena.pl.
    • SSL available: Czy klient może aktywować SSL na swoich stronach (https).
    • Let’s Encrypt available: Umożliwia generowanie darmowych certyfikatów SSL Let’s Encrypt dla stron klienta.
    • Max. number of web aliasdomains: Maksymalna liczba domen aliasów (np. dodatkowe domeny wskazujące na tę samą stronę).
    • Max. number of web subdomains: Maksymalna liczba subdomen na stronach klienta.
    • Max. number of FTP users: Limit liczby użytkowników FTP dla klienta.
    • Max. number of Shell users: Liczba użytkowników z dostępem do SSH (zazwyczaj 0 dla bezpieczeństwa).
    • SSH-Chroot Options: Określa, czy użytkownicy SSH są ograniczeni (chroot) do swojego katalogu domowego („Jailkit”).
    • Max. number of Webdav users: Limit liczby użytkowników WebDAV.
    • Backupfunction available: Czy klient może wykonywać własne kopie zapasowe z poziomu panelu.
    • Show web server config selection: Pozwala klientowi wybierać dodatkowe opcje konfiguracji serwera WWW (dla zaawansowanych).

    Opis opcji sekcji „Email Limits” w ISPConfig

    • Mailservers: Serwer poczty, na którym obsługiwane będą skrzynki i domeny pocztowe klienta.
    • Max. number of email domains: Maksymalna liczba domen e-mail, które może utworzyć klient (-1 = bez limitu).
    • Max. number of mailboxes: Maksymalna liczba skrzynek pocztowych dla klienta (-1 = bez limitu).
    • Max. number of email aliases: Limit aliasów e-mail (np. dodatkowych adresów przekierowujących do skrzynki).
    • Max. number of domain aliases: Liczba aliasów domeny e-mail (czyli dodatkowych domen przypisanych do tej samej poczty).
    • Max. number of mailing lists: Limit list mailingowych (grupowa wysyłka wiadomości).
    • Max. number of email forwarders: Maksymalna liczba przekierowań e-mail (forwardów).
    • Max. number of email catchall accounts: Liczba kont „catchall”, odbierających wszystkie wiadomości wysyłane na nieistniejące adresy w domenie.
    • Max. number of email routes: Liczba tras routingu e-maili (zaawansowane – przekierowywanie poczty na inne serwery według reguł).
    • Max. number of email white / blacklist entries: Maksymalna liczba pozycji na białej/czarnej liście dla danego klienta.
    • Max. number of email filters: Limit filtrów e-mail (np. do automatycznego sortowania lub oznaczania poczty).
    • Max. number of fetchmail accounts: Liczba zewnętrznych kont (fetchmail) – pobieranie poczty z innych serwerów.
    • Mailbox quota: Limit rozmiaru skrzynki pocztowej (w MB). -1 = bez limitu.
    • Max. number of spamfilter white / blacklist filters: Liczba reguł białej/czarnej listy w filtrze antyspamowym.
    • Max. number of spamfilter users: Liczba użytkowników mających własne ustawienia antyspamu.
    • Max. number of spamfilter policies: Liczba polityk (zestawów reguł) antyspamowych.
    • E-mail backup function available: Czy klient może samodzielnie tworzyć kopie zapasowe poczty przez panel.

    Tworzenie użytkownika bazy danych dla strony – ISPConfig

    Po utworzeniu klienta i ustaleniu limitów, kolejnym krokiem jest stworzenie osobnego użytkownika bazy danych dla nowej strony (np. solutionsinc.co.uk). W tym celu przechodzimy do zakładki Sites, a następnie do sekcji zarządzania bazami danych.

    1. Wybierz klienta z listy (np. SolutionsInc).
    2. Wprowadź nazwę użytkownika bazy danych – ISPConfig automatycznie sugeruje prefiks powiązany z klientem (np. c2_). Dzięki temu każdy użytkownik jest unikalny i łatwy do zidentyfikowania.
    3. Ustaw hasło do bazy danych. Skorzystaj z przycisku Generate Password i wybierz długie, losowe hasło (najlepiej przechowywane w menedżerze haseł). Silne hasło to podstawa bezpieczeństwa, nawet jeśli nie musisz go zapamiętywać.
    4. Powtórz hasło w polu „Repeat Password”.
    5. Kliknij Save, aby utworzyć użytkownika.

    Tworzenie oddzielnych użytkowników do każdej strony to ważny krok – jeśli dojdzie do wycieku hasła, atak ogranicza się tylko do jednej bazy. Dzięki temu nawet poważny błąd w aplikacji nie daje napastnikowi dostępu do innych danych na serwerze.

    Opis opcji zakładki „Domain” przy tworzeniu strony WWW w ISPConfig

    • Server: Serwer WWW, na którym będzie hostowana domena. Wybierz odpowiedni serwer z listy dostępnych.
    • Client: Klient, do którego przypisana będzie ta domena/strona.
    • IPv4-Address: Adres IPv4 przypisany do tej domeny (domyślnie *, czyli dowolny dostępny IP na serwerze).
    • IPv6-Address: Adres IPv6, jeśli jest używany (opcjonalnie).
    • Domain: Nazwa domeny, którą chcesz dodać (np. solutionsinc.co.uk).
    • Harddisk Quota: Limit przestrzeni dyskowej dla tej konkretnej strony (w MB). -1 oznacza brak limitu.
    • Traffic Quota: Limit transferu danych dla tej strony (w MB miesięcznie). -1 oznacza brak limitu.
    • CGI: Czy zezwolić na uruchamianie skryptów CGI na stronie (zazwyczaj wyłączone dla bezpieczeństwa).
    • SSI: Czy włączyć obsługę Server Side Includes.
    • Own Error-Documents: Pozwala na ustawianie własnych stron błędów (np. 404.html).
    • Auto-Subdomain: Domyślna subdomena, która zostanie automatycznie dodana (najczęściej www).
    • SSL: Zaznacz jeśli posiadasz własny certyfikat SSL i chcesz ręcznie wgrać certyfikaty do panelu.
    • Let’s Encrypt SSL: Wybierz tę opcję, jeśli chcesz, aby ISPConfig automatycznie wygenerował darmowy certyfikat SSL Let’s Encrypt dla tej domeny (nie musisz posiadać własnych certyfikatów).
    • PHP: Wybierz tryb działania PHP dla strony. Jeśli zamierzasz używać Nginx jako Reverse Proxy dla OpenLiteSpeed, wybierz koniecznie PHP-FPM oraz dokładnie tę wersję PHP, na której działa OLS. Pozostałe tryby (np. Disabled) nie będą poprawnie współpracować z takim rozwiązaniem.
    • Web server config: Dodatkowe opcje konfiguracyjne serwera WWW (zaawansowane, można zostawić domyślnie).
    • Active: Czy strona ma być aktywna (zaznaczona domyślnie – strona po zapisaniu będzie działać).

    Opis opcji zakładki „Redirect” w ISPConfig (Reverse Proxy)

    • Redirect Type: Określa rodzaj przekierowania dla danej domeny. Jeśli chcesz skonfigurować Nginx jako reverse proxy dla OpenLiteSpeed, koniecznie ustaw tutaj opcję proxy. Dzięki temu ruch HTTP/S będzie przekazywany do właściwego backendu (OLS).
    • Redirect Path: Adres docelowy (URL/backend), do którego ma być przekazywany ruch. W przypadku reverse proxy wpisz tutaj adres backendu (np. http://127.0.0.1:8088/ – pamiętaj, żeby nie używać portu 8080, ponieważ jest on zajęty przez ISPConfig!).
    • SEO Redirect: Opcjonalne przekierowania SEO (np. 301, 302, non-www→www). Najczęściej pozostawiamy jako „No redirect”, chyba że masz specyficzne wymagania SEO.
    • Rewrite Rules: Pole na własne reguły rewrite, zgodne z modułem nginx_http_rewrite_module. Możesz tu dodawać dodatkowe instrukcje modyfikujące ruch HTTP, np. break, if, return, rewrite, set (pełna lista na stronie nginx).
    • Rewrite HTTP to HTTPS: Po zaznaczeniu automatycznie przekierowuje cały ruch z HTTP na HTTPS. Zalecane przy stronach wymagających SSL.

    Uwaga: Pamiętaj, że w przypadku konfiguracji reverse proxy kluczowe jest ustawienie Redirect Type na proxy i prawidłowe podanie backendu w Redirect Path.

    Zakładka SSL w ISPConfig – co tutaj ustawić?

    • Jeśli w zakładce Domain zaznaczyłeś opcję Let’s Encrypt SSL, nie musisz tutaj nic wypełniać. Certyfikat zostanie wygenerowany automatycznie i pola pozostaną puste.
    • Jeśli korzystasz z własnych certyfikatów SSL, wklej je odpowiednio do poniższych pól:
      • SSL Key: Klucz prywatny (private key)
      • SSL Request: Żądanie podpisania certyfikatu (CSR) – opcjonalne, jeśli go używasz
      • SSL Certificate: Właściwy certyfikat SSL (publiczny)
      • SSL Bundle: Certyfikaty pośrednie/CA Bundle (jeśli wymaga tego Twój dostawca SSL)
    • SSL Domain: Domena, dla której generowany/instalowany jest certyfikat (wypełnia się automatycznie)
    • SSL Action: Domyślnie „Save certificate” – zachowuje wprowadzone dane

    Wskazówka: Jeśli zmieniasz typ certyfikatu (np. przechodzisz z własnego certyfikatu na Let’s Encrypt lub odwrotnie), pamiętaj, by odznaczyć zbędne opcje w zakładce Domain i zapisać zmiany.

    Zakładka Statistics w ISPConfig – własne statystyki dla Twojej strony

    Jeśli chcesz mieć niezależny system statystyk strony (poza tym, co oferuje np. WordPress czy Google Analytics), ta zakładka jest dla Ciebie. Tutaj możesz skonfigurować, jaki program będzie generował i prezentował szczegółowe statystyki ruchu na Twojej stronie. Oto krótkie opisy dostępnych opcji:

    • AWStats: Najpopularniejszy program do generowania szczegółowych statystyk www. Analizuje logi serwera i prezentuje czytelne wykresy, podsumowania ruchu, popularność stron, źródła odwiedzin, wyszukiwane frazy i inne dane. Interfejs webowy, obsługa wielu języków.
    • GoAccess: Nowoczesny analizator logów działający w czasie rzeczywistym, także z interfejsem webowym. Bardzo szybki, daje czytelne podsumowania najważniejszych danych (unikalni użytkownicy, najpopularniejsze strony, kody błędów itp.). Może być bardziej „techniczny” od AWStats.
    • Webalizer: Starszy, ale bardzo lekki i szybki program do analizy logów. Prezentuje podstawowe statystyki ruchu, wykresy godzinowe/dniowe, listę najczęściej odwiedzanych stron, ale z mniejszą ilością szczegółów niż AWStats.
    • None: Brak statystyk. Przydatne jeśli korzystasz wyłącznie z zewnętrznych rozwiązań lub chcesz ograniczyć zużycie zasobów.

    Wskazówka: Pamiętaj, by ustawić hasło do panelu statystyk, jeśli chcesz, by dostęp był chroniony!

    Zakładka Backup – Twoja sieć bezpieczeństwa (i spokój ducha)

    W tej zakładce możesz ustawić automatyczne kopie zapasowe strony i bazy danych lub wykonać backup ręcznie, gdy tylko masz na to ochotę (albo poczujesz przypływ zdrowego rozsądku).

    Dostępne opcje:

    • Backup interval: Jak często wykonywać kopie (np. codziennie, co tydzień, co miesiąc, lub wcale – nie polecam tej ostatniej opcji!).
    • Number of backup copies: Ile ostatnich backupów przechowywać na serwerze.
    • Excluded Directories: Katalogi, które mają być pomijane w backupie (np. cache lub katalogi z danymi tymczasowymi).
    • Compression options: Możesz skompresować swoje backupy, żeby nie zajmowały pół serwera – polecam!
    • Encryption options: Możesz zaszyfrować kopie zapasowe – dzięki temu nawet jeśli backup trafi w niepowołane ręce, Twoje dane pozostaną bezpieczne.

    Ręczny backup: Dwa magiczne przyciski – zrób backup bazy lub plików jednym kliknięciem.

    Anegdota: Są dwa typy ludzi: ci, którzy robią backupy, i ci, którzy dopiero będą je robić po pierwszym poważnym krachu. Szkoda, że ta lekcja zawsze przychodzi za późno!

    Zakładka Options – kluczowa dla Reverse Proxy (Nginx → OLS)

    Jeśli używasz Nginx jako Reverse Proxy dla OpenLiteSpeed (lub innego backendu), koniecznie skonfiguruj odpowiednie nagłówki w polu Proxy Directives. Wklej tam poniższe linie:

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    Dlaczego to ważne?

    • proxy_set_header Host $host;
      Przekazuje oryginalną nazwę hosta (domeny), pod jaką użytkownik wszedł na stronę. Dzięki temu backend (OLS) wie, dla jakiej domeny przetwarza żądanie i poprawnie rozpoznaje wirtualne hosty.
    • proxy_set_header X-Real-IP $remote_addr;
      Przekazuje prawdziwy adres IP klienta, a nie adres serwera proxy. Dzięki temu w logach, statystykach oraz przy mechanizmach bezpieczeństwa widoczny jest rzeczywisty użytkownik.
    • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      Dodaje oryginalny adres IP klienta do specjalnego nagłówka X-Forwarded-For. Przydatne jeśli ruch przechodzi przez kilka proxy – można odtworzyć całą „trasę” zapytania.
    • proxy_set_header X-Forwarded-Proto $scheme;
      Informuje backend, czy oryginalne żądanie było po HTTPS czy HTTP. Dzięki temu aplikacje mogą generować poprawne linki zwrotne (np. z https:// zamiast http://).

    Podsumowanie:
    Bez tych nagłówków backend (OLS) nie będzie wiedział, kto naprawdę odwiedza Twoją stronę, pod jaką domeną, i czy używa HTTPS. Skutki mogą być poważne: błędne logi, niepoprawne generowanie linków, problemy z SSL, a nawet luki w bezpieczeństwie.

    Ostatni krok: konfiguracja OpenLiteSpeed pod Reverse Proxy

    Gdy wszystkie ustawienia po stronie ISPConfig są gotowe, przechodzimy do panelu OpenLiteSpeed, który znajdziesz pod adresem http://IP_SERWERA:7080.

    Co robimy:

    1. Przechodzimy do sekcji Listeners.
    2. Usuwamy wszystkie listenery poza Listener Default na porcie 8088 (to na nim OLS będzie „słuchał” żądań od Nginx Reverse Proxy).
    3. Klikamy w ikonkę lupki przy naszym Listenerze i przechodzimy do sekcji Virtual Host Mappings.
    4. Dodajemy mapping dla naszej strony, np. solutionsinc.co.uk (lub innej, którą podajesz w ISPConfig).

    Dlaczego tak?

    • Zarządzaniem SSL (wystawianiem, odnawianiem, przekierowaniami itp.) zajmuje się teraz Nginx wraz z ISPConfig, więc nie trzeba już konfigurować SSL w OLS.
    • Pozostałe zakładki listenery mogą zostać bez zmian – cała magia dzieje się teraz po stronie reverse proxy.

    Podsumowanie:
    Od tej pory Nginx przejmuje na siebie cały ruch (w tym HTTPS), a do OLS przekazuje już czyste żądania na lokalnym porcie (8088). To idealne połączenie wydajności, wygody i bezpieczeństwa.

    Virtual Hosts > Basic w OpenLiteSpeed – jak poprawnie uzupełnić?

    1. Virtual Host Name: Nazwa hosta wirtualnego – wpisz nazwę domeny, np. solutionsinc.co.uk.
    2. Virtual Host Root: Wpisz tu dokładnie taki adres, jak w polu Document Root w ISPConfig (np. /var/www/clients/client1/web1/), pamiętając o końcowym slashem /. Dzięki temu OLS będzie serwował pliki z właściwej lokalizacji.
    3. Config File: Wpisz bashKopiujEdytuj$SERVER_ROOT/conf/vhosts/$VH_NAME/vhost.conf Podczas próby zapisu OLS zgłosi, że taki plik nie istnieje – kliknij wtedy w link pod polem, aby ten plik utworzyć automatycznie. Po tej operacji będzie można zapisać ustawienia bez błędów.
    4. suEXEC User i suEXEC Group:
      Wybierz tutaj dokładnie tego użytkownika i grupę, jakie ISPConfig utworzył dla Twojej domeny. Możesz to sprawdzić w ISPConfig w zakładce Sites > Website > Options.
      To bardzo ważne – pozwala OLS uruchamiać skrypty PHP z prawidłowymi uprawnieniami, poprawia bezpieczeństwo i chroni przed dostępem do plików innych użytkowników.
    5. External App Set UID Mode: Wybierz opcję DocRoot UID. Dzięki temu zewnętrzne aplikacje (np. PHP) będą uruchamiane jako użytkownik powiązany z katalogiem domeny.
    6. W sekcji Security znajdują się opcje kluczowe dla bezpieczeństwa i poprawnego działania hosta wirtualnego. Każdą z tych opcji ustaw na Yes:
      • Follow Symbolic Link:
        Pozwala OLS na podążanie za linkami symbolicznymi w katalogu strony. Jest to wymagane np. przez niektóre aplikacje, frameworki lub podczas aktualizacji oprogramowania.
      • Enable Scripts/ExtApps:
        Umożliwia uruchamianie skryptów (np. PHP) oraz zewnętrznych aplikacji. Bez tej opcji Twoja strona nie będzie mogła przetwarzać PHP ani korzystać z dynamicznych funkcji.
      • Restrained:
        Włącza „tryb ograniczony” – zwiększa bezpieczeństwo, ograniczając możliwości wywoływania pewnych poleceń systemowych przez hosta wirtualnego.
      • Pamiętaj:
      • Ustawienie każdej z tych opcji na Yes jest niezbędne do poprawnej i bezpiecznej pracy Twojej strony przy współpracy z ISPConfig i reverse proxy.

    Zakładka General – OpenLiteSpeed Virtual Host

    Najważniejsze opcje:

    • Document Root:
      Katalog, w którym znajduje się Twoja strona. Tu wklejasz ścieżkę z ISPConfig (Sites → Website → Document Root) i na końcu dodajesz katalog strony, zazwyczaj /web/, czyli np. /var/www/clients/client1/web1/web/. Zawsze sprawdzaj tę ścieżkę w ISPConfig, bo może się różnić!

    Pozostałe opcje:

    • Domain Name:
      (Opcjonalnie) Możesz wpisać główną domenę tego vhosta.
    • Domain Aliases:
      Inne domeny, które mają wskazywać na tego vhosta (np. wersje z www i bez www).
    • Administrator Email:
      E-mail administratora tej strony (przydatny do powiadomień o błędach).
    • Enable GZIP Compression:
      Włącza kompresję GZIP na poziomie serwera – przyspiesza ładowanie strony.
    • Enable Brotli Compression:
      Alternatywna metoda kompresji (jeszcze wydajniejsza niż GZIP).
    • Enable GeoLocation Lookup:
      Pozwala serwerowi sprawdzać, z jakiego kraju pochodzi użytkownik (np. do statystyk).
    • cgroups:
      Opcjonalne ograniczenia zasobów dla vhosta – jeśli chcesz limity CPU/RAM.

    Sekcja Index Files:

    • Use Server Index Files:
      Powinno być ustawione na „No”, aby OLS używał plików indeksowych zdefiniowanych poniżej, a nie globalnych z serwera.
    • Index Files:
      Lista nazw plików, które mają być traktowane jako plik startowy strony (np. index.php, index.html). Jeśli oba istnieją, pierwszy z listy zostanie użyty.
    • Auto Index:
      Pozwala na automatyczne generowanie indeksu katalogu, jeśli nie ma pliku index (zalecane „Not Set”/wyłączone ze względów bezpieczeństwa).
    • Auto Index URI:
      Pozwala wskazać adres, pod którym wyświetli się automatyczny indeks katalogu.

    Customized Error Pages:

    • Tutaj możesz podać własne strony błędów (np. 404, 500).

    Expires Settings:

    • Enable Expires, Expires Default, Expires By Type:
      Kontrolują cache’owanie plików przez przeglądarki (możesz ustawić, jak długo przeglądarka ma trzymać pliki statyczne). Najczęściej zostawiamy domyślnie i konfigurujemy cache przez .htaccess lub w ustawieniach aplikacji.

    File Upload:

    • Temporary File Path, Temporary File Permission, Pass Upload Data by File Path:
      Zaawansowane ustawienia dot. przesyłania plików – gdzie zapisywane są pliki tymczasowe, jakie mają uprawnienia, i czy dane przesyłane są przez ścieżkę pliku (raczej zostaw domyślnie).

    php.ini Override:

    • Pozwala podać własne ustawienia PHP tylko dla tego vhosta – jeśli nie musisz zmieniać limitów (np. upload_max_filesize), zostaw puste.

    Zakładka Log – niezależne logi dla każdej witryny

    Dlaczego warto ustawić osobne logi?

    • Izolacja: Osobne logi dla każdej strony ułatwiają zarządzanie, rozwiązywanie problemów oraz audyt – nie musisz szukać swojej witryny w jednym wielkim pliku wspólnym dla całego serwera.
    • Bezpieczeństwo: Jeżeli masz kilka klientów lub projektów, osobne logi ograniczają dostęp tylko do niezbędnych danych i pomagają zachować porządek.
    • Łatwiejsza analiza: Szybciej wykryjesz, co dzieje się na danej stronie, np. ataki, błędy, czy nieprawidłowe żądania.

    Virtual Host Log (log błędów)

    • Use Server’s Log:
      Jeśli ustawisz na „No”, logi błędów będą prowadzone oddzielnie dla tej strony. Zalecane, bo błędy konkretnej witryny nie zginą wśród błędów innych projektów.
    • File Name:
      Ścieżka do pliku logu błędów tej strony (np. /var/www/clients/client1/solutionsinc.co.uk/log/error.log). Umieszczenie w katalogu domeny ułatwia zarządzanie backupem i dostępem.
    • Log Level:
      Poziom szczegółowości logów (DEBUG, INFO, NOTICE, WARN, ERROR, CRIT).
      DEBUG to najwięcej szczegółów – przydatne przy debugowaniu, ale do codziennego działania wystarczy WARN lub ERROR.
    • Rolling Size (bytes):
      Maksymalny rozmiar pliku logów, po przekroczeniu którego utworzony zostanie nowy plik (np. 10M). Chroni dysk przed zapchaniem.
    • Keep Days:
      Ile dni przechowywać stare logi – przydatne do audytu lub cofania się do przeszłych incydentów.
    • Compress Archive:
      Czy archiwizować i kompresować stare logi. Zalecane przy dużej liczbie logów, pozwala oszczędzić miejsce na dysku.

    Access Log (log dostępu)

    • Log Control:
      Wybierz „Own Log File”, by każdy vhost miał własny plik logu dostępu. Dzięki temu łatwiej analizować ruch na konkretnych stronach.
    • File Name:
      Ścieżka do logu dostępu (np. /var/www/clients/client1/solutionsinc.co.uk/log/access_log).
    • Piped Logger:
      Zaawansowana opcja – logi mogą być przetwarzane „w locie” przez zewnętrzne programy. Zostaw puste jeśli nie używasz.
    • Log Format:
      Format pojedynczego wpisu logu – domyślna opcja sprawdza się w większości przypadków, ale możesz dostosować pod potrzeby analizy.
    • Log Headers:
      Zaznacz „Referrer”, „UserAgent”, „Host” – dzięki temu logi będą zawierały kluczowe informacje o odwiedzających, źródłach wejść i typach urządzeń.
    • Rolling Size (bytes):
      Jak duży może być pojedynczy plik logu, zanim zacznie się tworzyć kolejny (np. 50M).
    • Keep Days:
      Ile dni przechowywać logi dostępu (np. 365 – pełen rok historii).
    • Compress Archive:
      Warto ustawić na „Yes”, by stare logi były automatycznie kompresowane.
    • Bytes log:
      Opcjonalnie: plik, w którym zapisywana jest statystyka przesłanych bajtów (raczej dla zaawansowanych analiz).

    Zalecane ustawienia:

    • Dla produkcji ustaw Log Level na WARN lub ERROR, a na czas uruchamiania i testów – DEBUG.
    • Zawsze kompresuj archiwalne logi.
    • Przechowuj logi co najmniej 30 dni – najlepiej 90 lub więcej, jeśli masz miejsce.
    • Dla Access Log: zawsze osobny plik per domena, zawsze z Referrer, UserAgent i Host.

    Zakładka Security – opis wszystkich opcji

    Uwaga:
    Nie musisz konfigurować tych ustawień, aby uruchomić stronę przez Nginx jako Reverse Proxy!
    Jeśli nie masz doświadczenia z zaawansowaną ochroną i kontenerami – najlepiej najpierw uruchomić stronę, upewnić się że wszystko działa, a dopiero potem wracać tutaj i testować poszczególne opcje.


    Sekcja: LS reCAPTCHA

    • Enable reCAPTCHA, Site Key, Secret Key, reCAPTCHA Type, Max Tries, Concurrent Request Limit
      Pozwala aktywować mechanizmy reCAPTCHA (ochrona przed botami i atakami brute force na poziomie serwera). Trzeba podać klucze z Google oraz ustawić limity prób.
      Praktyka: Tylko dla osób, które dokładnie wiedzą jak to działa – błędna konfiguracja może zablokować ruch na stronie.

    Sekcja: Containers

    • Bubblewrap Container
      Pozwala uruchomić vhost w odizolowanym kontenerze z użyciem narzędzia Bubblewrap (większe bezpieczeństwo – aplikacje są „odcięte” od systemu).
      Zaawansowana funkcja – nie zalecane dla początkujących.
    • Namespace Container, Additional Namespace Template File
      Umożliwiają izolację hosta w osobnej przestrzeni nazw (namespace), dodatkowo zwiększając bezpieczeństwo, ale wymagają wiedzy o konteneryzacji w Linuksie.

    Sekcja: Access Control

    • Allowed List
      Lista adresów IP, które mają mieć dostęp do tej strony.
    • Denied List
      Lista adresów IP, które mają być zablokowane. Uwaga: Jeśli źle to skonfigurujesz, możesz nieświadomie zablokować dostęp do własnej strony!

    Sekcja: Realm List

    • Tutaj możesz skonfigurować „realm” – czyli strefy z własnym uwierzytelnianiem (np. ochrona katalogu hasłem na poziomie serwera).

    Podsumowanie praktyczne

    • Dla działania strony przez Nginx jako Reverse Proxy, NIE musisz nic tu ustawiać.
    • Te opcje to narzędzia dla zaawansowanych administratorów – dla większości użytkowników najlepiej zostawić je domyślne, dopóki strona nie działa poprawnie.
    • Zalecenie: Najpierw uruchom stronę, sprawdź poprawność, potem (opcjonalnie) wracaj do tej zakładki, jeśli chcesz podnieść poziom bezpieczeństwa.

    Zakładka External App – opis i zalecenia

    Ta zakładka odpowiada za powiązanie serwera www z interpreterem PHP, dzięki czemu twoje aplikacje PHP działają poprawnie.

    Najważniejsze pola:

    • Name:
      Nazwa aplikacji zewnętrznej, np. solutionsinc.co.uk. Może być dowolna, ale najlepiej ustawić nazwę zgodną z domeną dla porządku.
    • Address:
      MUST HAVE!
      Gniazdo komunikacji z interpreterem PHP, np. UDS:///tmp/lshttpd/solutionsinc.co.uk.sock
      UDS (Unix Domain Socket) zawsze z dużej litery! Umożliwia szybszą i bezpieczniejszą komunikację niż połączenia sieciowe.
    • Notes:
      Dowolny opis, jeśli potrzebujesz (opcjonalne).
    • Max Connections:
      Maksymalna liczba równoczesnych połączeń do PHP. Zalecane 50, chyba że twoja strona obsługuje bardzo duży ruch – wtedy możesz zwiększyć.
    • Environment:
      Dodatkowe zmienne środowiskowe. Przykład: LSAPI_CHILDREN=50 – ustala liczbę procesów potomnych PHP dla tej aplikacji.
    • Initial Request Timeout (secs):
      Czas oczekiwania na odpowiedź przy pierwszym żądaniu (np. 600 sekund). Dłuższy czas jest bezpieczny przy wolniejszych serwerach lub długich skryptach.
    • Retry Timeout (secs):
      Ile sekund serwer ma czekać i ponawiać próbę w przypadku błędu połączenia z PHP.
    • Persistent Connection:
      Najlepiej zostawić „Yes” – pozwala na utrzymywanie otwartych połączeń i przyspiesza obsługę wielu żądań.
    • Connection Keep-Alive Timeout:
      Jak długo (w sekundach) połączenie z PHP pozostaje otwarte po obsłużeniu żądania (domyślnie 1).
    • Response Buffering:
      „No” oznacza natychmiastowe przekazywanie odpowiedzi do klienta. Zalecane dla stron dynamicznych.
    • Start By Server:
      „Yes (Through CGI Daemon)” – serwer sam uruchamia proces PHP, co jest bezpieczniejsze i wygodniejsze.
    • Command:
      KLUCZOWE!
      Ścieżka do interpretera PHP, np. /usr/local/lsws/lsphp83/bin/lsphp
      Upewnij się, że ten plik istnieje i jest to właściwa wersja PHP, której używasz. Jak sprawdzić:
      W konsoli serwera wpisz: bashKopiujEdytujls -l /usr/local/lsws/lsphp83/bin/lsphp Jeśli plik istnieje – ścieżka jest OK. Jeśli nie – sprawdź czy masz zainstalowaną wersję PHP 8.3 przez LiteSpeed (np. przez menadżer LiteSpeed lub polecenie lsphp).
    • Back Log:
      Maksymalna liczba żądań oczekujących na połączenie z PHP (zalecane 100).
    • Instances:
      Liczba instancji aplikacji (w praktyce: ilość niezależnych procesów). Zwykle 1 – jeśli nie masz bardzo wymagającej aplikacji.
    • Run As User / Run As Group:
      Muszą odpowiadać użytkownikowi i grupie zdefiniowanym w ISPConfig dla tej strony (np. web1/client1). Dzięki temu każdy vhost działa z uprawnieniami przypisanymi tylko do własnych plików, co znacznie podnosi bezpieczeństwo.
    • umask:
      Maska uprawnień dla tworzonych plików – najczęściej zostawiamy puste.
    • Run On Start Up, Max Idle Time, Priority:
      Zaawansowane opcje – zwykle nie wymagają zmiany.
    • Memory Soft Limit / Hard Limit:
      Miękki i twardy limit RAM dla procesu PHP (w bajtach).
      Zalecane: 2047M (2GB) – dostosuj do mocy serwera i potrzeb aplikacji.
    • Process Soft Limit / Hard Limit:
      Ograniczenie liczby procesów (soft/hard).
      Soft – ostrzeżenie, hard – blokada. Przykład: Soft 400, Hard 500.

    Zakładka Script Handler – do czego służy?

    Ta sekcja decyduje, jakie aplikacje mają obsługiwać określone typy plików skryptowych (np. PHP) na poziomie konkretnego Virtual Host. Bez poprawnego handlera, PHP nie zadziała!

    Kluczowe opcje:

    • Suffixes
      Tu wpisujesz rozszerzenia plików, które mają być obsługiwane przez danego handlera.
      W typowej konfiguracji wpisujesz po prostu: nginxKopiujEdytujphp Dzięki temu wszystkie pliki z rozszerzeniem .php będą analizowane przez PHP.

    Suffix – co to jest i jak go ustawić?

    Suffix określa, jakie rozszerzenia plików skryptowych będą obsługiwane przez dany Script Handler. Każdy suffix musi być unikalny w konfiguracji.

    Składnia:

    • Lista rozszerzeń oddzielona przecinkami, bez kropki („.” jest niedozwolona).
    • Przykład: KopiujEdytujphp,php83

    Ważne uwagi (na podstawie dokumentacji OLS):

    • Serwer automatycznie doda specjalny typ MIME (application/x-httpd-[suffix]) dla pierwszego sufiksu w tej liście.
      • Przykład: dla php83, zostanie dodany typ MIME application/x-httpd-php83.
    • Jeśli chcesz używać dodatkowych sufiksów (np. php53,php74), po pierwszym musisz dodać odpowiadające typy MIME ręcznie w ustawieniach MIME.
    • Choć pole „Suffix” wyświetla listę rozszerzeń, w praktyce handler korzysta z typów MIME, nie z samych sufiksów, aby zdecydować, które pliki obsłużyć.
    • Podawaj tylko te rozszerzenia, których rzeczywiście używasz – nie wpisuj niepotrzebnych lub nieużywanych, by nie zwiększać ryzyka błędów lub ataków.

    Przykład poprawnej konfiguracji:

    Jeśli chcesz obsługiwać tylko pliki .php:

    php

    Jeśli chcesz obsługiwać również .php83:

    php,php83

    Pamiętaj, aby dla dodatkowych sufiksów dodać odpowiedni typ MIME w ustawieniach serwera!

    • Handler Type
      Typ obsługiwacza skryptów.
      LiteSpeed SAPI to natywny, najwydajniejszy sposób obsługi PHP w OpenLiteSpeed – pozwala na bezpośrednią i szybką komunikację z interpreterem PHP, korzystając z ustawień z zakładki External App.
    • Handler Name
      Wybierasz tu powiązaną aplikację zdefiniowaną w zakładce External App.
      Jeśli masz kilku Virtual Hostów, możesz mieć kilka różnych wersji PHP lub różnych konfiguracji.
      Uwaga:
      Warto, żeby tu było [VHost Level]: solutionsinc.co.uk – czyli handler, który został utworzony dla tej konkretnej strony.

    Dlaczego to ważne?

    • Bez poprawnego powiązania PHP z właściwym handlerem, serwer nie będzie wiedział, jak uruchamiać twoje pliki .php (może pobierać je jako pliki tekstowe zamiast wykonywać kod!).
    • Wybór LiteSpeed SAPI gwarantuje najlepszą wydajność, bezpieczeństwo i obsługę nowoczesnych funkcji PHP.
    • Jeśli masz kilka stron i każda ma inne wymagania (np. jedna działa na PHP 8.3, druga na PHP 8.1), możesz tu przypisać do każdej Virtual Host odpowiednią wersję interpreter PHP.

    Zakładka Rewrite – do czego służy?

    Zakładka Rewrite pozwala na zarządzanie regułami przepisywania URL-i (tzw. „mod_rewrite”), dzięki którym możesz:

    • Tworzyć przyjazne adresy URL (np. w WordPress, Prestashop, Laravel).
    • Wymuszać przekierowania (np. http→https, non-www→www).
    • Realizować niestandardowe logiki przepisywania (np. maskowanie folderów, obsługa aliasów domen).

    Opis pól

    Rewrite Control

    • Enable Rewrite
      Włącza obsługę mechanizmu przepisywania (mod_rewrite) dla tego Virtual Host.
      Ważne: Bez tego żadne reguły z .htaccess ani wpisy w „Rewrite Rules” nie będą działać!
    • Auto Load from .htaccess
      Pozwala automatycznie ładować reguły rewrite z plików .htaccess znajdujących się w katalogach twojej strony.
      Ważne:
      • Dla WordPressa i większości popularnych CMS-ów koniecznie musi być „Yes”.
      • Jeśli chcesz mieć większą kontrolę nad wydajnością, możesz reguły rewrite wpisać bezpośrednio w „Rewrite Rules”, wtedy to pole można wyłączyć.
    • Log Level
      • Określa poziom szczegółowości logów debugowania mechanizmu rewrite.
      • Zakres wartości: 0–9
        • 0 – wyłącza logowanie rewrite (brak logów).
        • 9 – najbardziej szczegółowe logi debugowania.
      • Im wyższa liczba, tym więcej szczegółowych informacji o działaniach reguł rewrite pojawi się w logach serwera.
      • Aby opcja działała, logi błędów serwera i/lub Virtual Host muszą mieć poziom co najmniej INFO.
      • Przydatne przy testowaniu i rozwiązywaniu problemów z regułami rewrite.
      • Syntax: Liczba całkowita z zakresu 0–9.

    Rewrite Map
    Możliwość zdefiniowania map przepisywania (zaawansowane – np. do dynamicznych przekierowań na podstawie wzorców lub plików).

    • Dla większości użytkowników niewymagane.

    Rewrite Rules
    Miejsce na ręczne wpisanie reguł mod_rewrite (w stylu Apache).

    Przykład:

    RewriteEngine On

    RewriteCond %{HTTPS} !=on

    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Reguły tutaj mają wyższy priorytet niż te z .htaccess.


    Dlaczego to ważne?

    • Bez rewrite wiele aplikacji nie będzie działać poprawnie (brak przyjaznych linków, błędy 404).
    • Automatyczne ładowanie z .htaccess pozwala korzystać z gotowych .htaccess od popularnych CMS-ów.
    • Ręczne reguły przydają się, gdy potrzebujesz pełnej kontroli lub lepszej wydajności.

    Zakładka Context – wszystkie pola

    1. URI

    • Opis: Ścieżka (URI) katalogu lub podkatalogu, dla którego tworzysz ten kontekst.
    • Kluczowe! Musi dokładnie odpowiadać folderowi, gdzie znajduje się Twoja strona (np. /web/ dla katalogu /var/www/clients/client1/web1/web/).
    • Uwaga: Jeśli URI kończy się na /, wszystkie podkatalogi są również objęte tym kontekstem. Jeśli twoja strona jest w katalogu głównym, wpisz po prostu /.

    2. LSAPI App

    • Opis: Wybierasz aplikację LiteSpeed SAPI (np. PHP) powiązaną z tym kontekstem. Lista rozwijana zawiera aplikacje zdefiniowane w External App.
    • Dlaczego ważne? To łączy obsługę PHP (lub innego języka) z Twoją stroną. Bez tego, PHP nie będzie działać w tym katalogu!

    3. Notes

    • Opis: Pole informacyjne, możesz tu wpisać własne notatki.
    • Wskazówka: Użyteczne przy większych instalacjach lub testach, ale pole nie jest obowiązkowe.

    4. Header Operations

    • Opis: Dodatkowe operacje na nagłówkach odpowiedzi HTTP (np. ustawianie, dodawanie, kasowanie nagłówków).
    • Składnia: Zbliżona do Apache mod_headers.
    • Przykład: pgsqlKopiujEdytujset Cache-control no-cache append Cache-control no-store
    • Wskazówka: Przydatne, gdy chcesz sterować cache’owaniem lub bezpieczeństwem na poziomie katalogu.

    5. Realm / Authentication Name / Require (Authorized Users/Groups) / Access Allowed / Access Denied / Authorizer

    • Opis: Opcje autoryzacji dostępu do danego katalogu (możesz tu ustawić prostą ochronę hasłem, dostęp tylko dla wybranych grup/użytkowników).
    • Wskazówka: Domyślnie zostawiasz puste. Stosujesz, jeśli chcesz ograniczyć dostęp do panelu admina, katalogu testowego itp.

    6. Add Default Charset

    • Opis: Określa, czy domyślny zestaw znaków ma być dodany do odpowiedzi HTTP.
    • Domyślnie: Off
    • Ustaw, jeśli: Masz stronę o nietypowym kodowaniu lub chcesz wymusić np. UTF-8.

    7. Customized Default Charset

    • Opis: Pozwala wskazać własny domyślny zestaw znaków (np. UTF-8, ISO-8859-2).
    • Ustaw, jeśli: Potrzebujesz specyficznego kodowania znaków.

    8. Enable GeoLocation Lookup

    • Opis: Pozwala włączyć sprawdzanie lokalizacji geograficznej użytkowników na podstawie IP.
    • Wskazówka: Zostaw domyślnie wyłączone, chyba że tworzysz stronę z personalizacją wg kraju.

    Dlaczego ta zakładka jest ważna?

    • Dzięki Context możesz precyzyjnie ustawić, jak serwer ma obsługiwać wybrane katalogi/podkatalogi, np. wybrać inną wersję PHP dla /admin/, zabezpieczyć panel logowania, zmienić nagłówki bezpieczeństwa tylko w jednym folderze.
    • URI to absolutna podstawa – błędne ustawienie tej ścieżki sprawi, że ustawienia nie zadziałają!
    • Dzięki temu masz elastyczność niedostępną w prostych hostingach.

    Podsumowanie

    Po wykonaniu wszystkich powyższych kroków – od konfiguracji ISPConfig, przez ustawienie Nginx jako reverse proxy, po precyzyjne dobranie opcji w OpenLiteSpeed – Twoja strona WordPress lub dowolna inna aplikacja powinna działać jak złoto. Oczywiście pod warunkiem, że nie zapomniałeś o poprawnych rekordach DNS (np. w CloudFlare) – bez nich nawet najpiękniej skonfigurowany serwer będzie świecił pustkami jak lodówka po sesji!

    Jeśli wszystko śmiga, gratulacje – możesz teraz spokojnie napić się herbaty, bo Twój serwer właśnie wszedł na wyższy poziom! Jeśli coś nie działa… cóż, sprawdź jeszcze raz DNS, logi oraz to, czy przypadkiem nie wpadłeś na pomysł zrobienia wszystkiego o 3 w nocy. Powodzenia!

  • Jak w WordPress stworzyć stronę internetową agencji nieruchomości?

    Jak w WordPress stworzyć stronę internetową agencji nieruchomości?

    Strony internetowe agencji nieruchomości różnią się trochę od stron internetowych innych branż. Stworzenie takiej strony w WordPress, to nie tylko kwestia wrzucenia kilku zdjęć i opisu nieruchomości. Taka strona wymaga najnowszej wiedzy z zakresu tworzenia stron internetowych. Niektóre funkcje na tego typu stronie są dość łatwe do wdrożenia przy pomocy darmowych, lub płatnych wtyczek, których wiele znajdziecie w repozytorium WordPress. Lecz do wdrożenia niektórych zaawansowanych funkcji może być konieczne zatrudnienie specjalisty z dziedziny tworzenia stron internetowych, baz danych i PHP. Dzięki unikalnym funkcjom Twoja strona będzie mogła się wyróżnić na tle konkurencji. W tym artykule przyjrzymy się kluczowym etapom tworzenia takiej strony internetowej, a także ciekawym funkcjom które mógłbyś zainstalować na swojej stronie.

    Nieruchomości

    Kluczowe cechy stron agencji nieruchomości

    W stronie internetowej agencji nieruchomości nie chodzi tylko o to by zaistnieć w internecie. Ważna jest szata graficzna z dobrej jakości zdjęciami, przejrzysta wyszukiwarka ofert z możliwością szczegółowego dopasowania wyszukiwanej oferty, czy chociażby formularz umożliwiający zaaranżowanie spotkania.

    Kluczowe cechy każdej strony agencji nieruchomości:

    • Szczegółowe informacje. Postaraj się umieścić jak najwięcej szczegółowych informacji. Przy ich braku będzie trudniej sprzedać, lub wynająć obiekt.
    • Zdjęcia. Im, więcej, tym lepiej.To przede wszystkim zdjęcia przyciągają wzrok na ofercie i to na nich polegają użytkownicy szukający domu lub mieszkania
    • Dane kontaktowe. Wskazane jest podanie różnych opcji kontaktu, a nie tylko numeru telefonu: adresy e-mail, komunikatory internetowe itp.
    • Spotkania on-line. Dzięki nim, pośrednicy w handlu nieruchomościami będą mogli pokazywać nieruchomości, czy też negocjować oferty z klientami, którzy nie mieszkają w naszej okolicy.
    • Mapy. Pozwolą one zainteresowanym poznać lokalizację nieruchomości.
    • Filtry wyszukiwania. Klient który musi przeglądać dziesiątki stron ofert, które go nie interesują by znaleźć tę jedną wymarzoną, może się znudzić zanim ją znajdzie. Dobra wyszukiwarka, to nie tylko proste sortowanie ofert ze względu na cenę. Niektórym zależy na okolicy, bliskości szkoły, lub stacji metra, jedni szukają mieszkań na parterze, a inni na trzecim piętrze, a inni z kolei nie szukają w ogóle ofert bez ogródka. Zapewnij swoim użytkownikom dobrze zorganizowaną wyszukiwarkę, a Twoja strona sprzeda wiele nieruchomości.

    Etapy tworzenia strony agencji nieruchomości

    Tworzenie większości stron internetowych składa się z kilku etapów. Pamiętaj jednak, że tak naprawdę tworzenie strony internetowej nie kończy się nigdy; by strona była dobrze wypozycjonowana w Google, należy ją na bieżąco aktualizować.

    Etap pierwszy: Wybór motywu

    Pierwszym i jednym z najważniejszych kroków jest wybór motywu, na podstawie którego  zostanie zbudowana Twoja strona internetowa. Dobry motyw strony dla agencji nieruchomości może mieć już wbudowaną funkcję której potrzebujesz, więc nie będziesz później musiał instalować dodatkowej wtyczki by ją zaimplementować, a niektóre dodatkowe wtyczki mogą być dość drogie. Dlatego też nie spiesz się. Zastanów się na jakich funkcjach Ci najbardziej zależy i poświęć trochę czasu na sprawdzenie kilku, lub nawet kilkunastu różnych motywów. Przy czym nie skupiaj się na stronie wizualnej strony – bo ją można stosunkowo łatwo dostosować do swoich potrzeb – a raczej na stronie funkcjonalnej danego motywu.  Wybranie bez zastanowienia motywu pierwszego z brzegu, może zemścić się w przyszłości.

    Oto kilka motywów godnych polecenia:

    Posiada potężną wyszukiwarkę z mnóstwem opcji, niestandardowe galerie zdjęć i dodatkowo kilkanaście różnych szat graficznych do wyboru. Motyw posiada możliwość załączania dokumentów do każdej oferowanej nieruchomości- pliki pdf, dokumenty biurowe, skany itp. Jest możliwość dodawania planów poszczególnych pięter budynku. Można bardzo łatwo i szybko edytować detale i szczegóły nieruchomości. Przydatną funkcją jest porównywanie poszczególnych ofert, lub wyszukiwanie podobnych nieruchomości.

    RealHomes

    To całkowicie darmowy motyw. Pierwotnie stworzony został raczej do okazjonalnego wynajmu nieruchomości, ale stosunkowo łatwo można go przekształcić w profesjonalną witrynę agencji nieruchomości. Motyw ten ma całkiem niezłą wyszukiwarkę i umożliwia wygodne rozmieszczenie wszystkich oferowanych nieruchomości na mapie. Przejrzysta strona bookowania spotkań i podstrona naszych pracowników. Godna polecenia darmowa alternatywa do innych płatnych motywów.

    VW Real Estate (darmowy i płatny)

    Motyw ciekawy wizualnie, z dużą ilością graficznych wodotrysków. Posiada prostą wyszukiwarkę nieruchomości. Możliwe jest również wykupienie płatnej opcji, ze wsparciem technicznym, obsługą wielu języków i lepszą optymalizacją SEO.

    VW Real Estate

    Houzez (płatny)

    Doskonały, niezwykle elastyczny motyw. Do wybory kilkanaście styli graficznych do wyboru. Świetnie zorganizowane zaplecze motywu, gdzie możemy zarządzać nieruchomościami i klientami. Wygodne raporty umożliwiają przeprowadzanie szczegółowych analiz. Profesjonalny i godny polecenia motyw.

    Houzez

    Etap drugi: wybór i instalacja wtyczek

    Dzięki wtyczkom, możesz szybko i bez konieczności kodowania rozszerzyć funkcjonalność swojej witryny. Większość potrzebnych dla agencji nieruchomości wtyczek, znajdziesz w repozytorium wtyczek WordPress.

    Etap trzecie: projektowanie UX/UI

    Stworzenie ciekawego i unikalnego design, to skomplikowany, ale i satysfakcjonujący proces. Aby zapewnić witrynie sukces, ważne jest aby trafić w docelową grupę odbiorców i sprawić, by strona była łatwa w użyciu zarówno na komputerze, jak i na smartfonie. Wygodna wyszukiwarka ofert, to jeden z najważniejszych elementów witryny agencji nieruchomości. Powinna wyszukiwać oferty według wszystkich istotnych parametrów oferty: ilości pokoi, powierzchni mieszkania, lokalizacji, dostępności garażu itd.

    Etap czwarty: implementacja dodatkowych funkcji

    Ostatnim etapem powinno być wdrożenie wszystkich dodatkowych funkcji, które strona agencji nieruchomości powinna mieć, ale nie ma możliwości zaimplementowania ich przy pomocy wtyczek WordPress. Jeśli nie zajmujesz się profesjonalnie kodowaniem, będzie do tego potrzebna pomoc specjalisty. Ciekawą opcją może być na przykład aplikacja na telefony Android, czy iOS. Przydatne dla potencjalnego klienta może być na przykład pomoc w uzyskaniu kredytu hipotecznego, czy chociażby porównanie ofert różnych banków. Pomoc w stworzeniu potrzebnej aplikacji możesz uzyskać na przykład w firmie Veneo, czy StudioSoftware

    Podsumowanie

    Stworzenie profesjonalnej witryny agencji nieruchomości, to nie tylko wybranie motywu i wystawieni ofert. Wymaga stworzenia dobrego i unikalnego projektu graficznego, zadbania o dobre wrażenia użytkownika, czy zaprojektowanie dobrej wyszukiwarki ofert. Zadbanie o każdy z tych aspektów z pewnością zaowocuje pozyskaniem sporej ilości potencjalnych klientów.

  • WordPress vs Weebly: porównanie

    WordPress vs Weebly: porównanie

    WordPress i Weebly to popularne platformy do tworzenia stron internetowych, które pozwalają Ci tworzyć strony internetowe praktycznie bez znajomości języka HTML, JavaScript, czy CSS. Na obu tych platformach sposób tworzenia stron jest zbliżony do siebie, ale nie taki sam. W tym artykule pokażemy Ci różnice między nimi, być mógł wybrać dla siebie najlepsze rozwiązanie dla swojej strony internetowej. Przeczytaj cały artykuł by dowiedzieć się co różni WordPress od Weebly.

    WordPress

    WordPress to system zarządzania treścią (CMS – content management system), który służy do tworzenia i zarządzania stronami internetowymi. Jest to platforma o otwartym kodzie źródłowym (Open Source), całkowicie darmowa do pobrania i używania. WordPress jest ogromnie popularny – ma ponad 64% rynku systemów CMS. Drugi system CMS na podium, to Shopify, który posiada zaledwie 6.3%.

    CMS market share January 2023

    Jedną z największych zalet WordPress, jest jego elastyczność: możesz go użyć do stworzenia zarówno prostej domowej strony internetowej, jak i do rozbudowanej witryny firmowej, jako sklep internetowy, jako blog, czy forum. Do WordPress dostępnych są tysiące bezpłatnych i płatnych rozszerzeń, wtyczek i motywów, które pozwolą użytkownikowi dopasować zarówno wygląd strony, jak i jej funkcjonalność.Jako najpopularniejszy system CMS na świecie, WordPress ma dużą i aktywną społeczność użytkowników, więc możesz liczyć na szerokie wsparcie w razie problemów.

    Czasami jednakże WordPress wymaga pewnej wiedzy technicznej, by móc skutecznie z niego korzystać. Do stworzenia prostej strony internetowej nie będziesz potrzebował żadnego doświadczenia w kodowaniu, jednak aby stworzyć dużą witrynę ze sklepem internetowym doskonale dopasowanym do Twoich potrzebować będziesz chociaż podstawowej znajomości HTML, CSS, JavaScript  i PHP.

    Dostępne są dwie wersje WordPress: WordPress.org, która jest dostępna do pobrania, ale wymaga oddzielnego hostingu i domeny, które będziesz musiał zorganizować we własnym zakresie, oraz WordPress.com, która zapewnia zarówno hosting i domenę Twojej strony. W zależności od wielkości dysku, dostępności pomocy technicznej i rozszerzeń dostępnych jest wiele opcji cenowych.

    WordPress – najważniejsze cechy

    WordPress jest potężnym i bogatym w funkcje systemem do zarządzania treścią. Jest najpopularniejszym systemem CMS na świecie. Oto jego kluczowe funkcje:

    • Dostosowywanie: Masz ogrom możliwości dostosowania swojej witryny do swoich potrzeb, a w razie braku jakiejś funkcjonalności masz możliwość pobrania darmowych i płatnych wtyczek, które rozszerzają możliwości witryny i pomogą dostosować jej wygląd.
    • Tworzenie treści i zarządzanie nią: Dzięki WordPress możesz łatwo tworzyć i edytować posty na blogu, strony, pliki multimedialne i wiele innych. Ogromnym ułatwieniem jest historia zmian na naszej stronie, gdzie w razie problemów możesz przywrócić stronę sprzed edycji.
    • SEO i Marketing: WordPress zawiera szereg wbudowanych funkcji które ułatwiają optymalizację strony pod kątem wyszukiwarek (SEO), oraz działań marketingowych, takich jak dowolnie konfigurowalne adresy URL, możliwość dodawania meta-tagów i opisów, oraz integrację z mediami społecznościowymi i platformami e-mail marketingu.
    • Zarządzanie użytkownikami: WordPress umożliwia tworzenie wielu kont użytkowników z przydzielonymi rolami i uprawnieniami, co ułatwia zarządzanie i umożliwia współpracę wielu osób przy tworzeniu strony internetowej.
    • E-commerce: WordPress można z powodzeniem wykorzystać do stworzenia profesjonalnego sklepu internetowego (np. SolutionsInc), za pomocą wtyczek e-commerce, takich jak WooCommerce. Wtyczki te oferują integrację ze stroną bramki płatności, dzięki której klienci na Twojej stronie mogli będą płacić kartą, PayPal, lub wieloma innymi systemami płatności. Będziesz również mógł zarządzać magazynem i wysyłkami.
    • Obsługa wielu języków: WordPress za pomocą wtyczek obsługuje tworzenie wielojęzycznych stron internetowych. Na przykład popularna wtyczka WPML, pozwala na tłumaczenie treści na wiele języków i dzięki temu na dotarcie do szerokiego grona odbiorców.

    WordPress – wsparcie

    WordPress to platforma z otwartym kodem źródłowym z ogromną i aktywną społecznością użytkowników, co oznacza, że łatwo jest uzyskać potrzebną pomoc w razie problemów ze stroną. Masz kilka możliwości uzyskania pomocy z korzystania z WordPress:

    • Forum pomocy technicznej WordPress.org: Forum pomocy technicznej WordPress.org to dobre miejsce, by zacząć szukać pomocy w rozwiązaniu problemu z naszą stroną. Znajdziesz tam nie tylko użytkowników tego CMS, ale również osoby które tworzą WordPress, możesz więc liczyć na profesjonalną pomoc.
    • Dokumentacja WordPress.org: Wiele z Twoich problemów z witryną zostało już pewnie rozwiązanych i opisanych. Wystarczy sprawdzić dokumentację, by szybko i sprawnie rozwiązać problem. Jeśli nie miałeś wcześniej styczności z WordPress, koniecznie zacznij od udostępnionych poradników.
    • Wsparcie WordPress.com: Jeśli korzystasz z płatnej wersji hostowanej na WordPress.com, możesz uzyskać pomoc przez Centrum Pomocy Technicznej, gdzie znajdziesz bazę wiedzy, samouczki i forum społeczności.
    • Profesjonalne wsparcie: Jeśli potrzebujesz wsparcia do rozwiązania poważniejszych problemów lub rozszerzenia funkcjonalności WordPress, możesz zatrudnić profesjonalnego programistę WordPress. Z pewnością w Twojej okolicy znajdziesz kogoś godnego zaufania, a jeśli nie, to większość prac można będzie wykonać na odległość.
    •  Lokalna społeczność WordPress: Jeśli mieszkasz w większym mieście, być może znajdziesz tam lokalną grupę pasjonatów WordPress, jak na przykład warszawski WordUp, czy poznański WordUp Poznań, którzy propagują system WordPress. Takie grupy mogą być nieocenioną pomocą w rozwiązywaniu problemów z WordPress.

    WordPress cennik

    Dostępne są dwie wersje WordPress: WordPress.org, która jest w pełni darmowa, ale musisz do niej oddzielnie dokupić domenę i hosting, oraz wersja WordPress.org, która ma jeden plan darmowy i cztery płatne. 

    WordPress.org

    • WordPress.org możesz pobrać, zainstalować i używać bezpłatnie. Będziesz jednak musiał zakupić własną domenę, oraz hosting, czyli miejsce gdzie będą przechowywane pliki Twojej strony, co wiąże się z dodatkowymi kosztami.
    • Koszty hostingu mogą bardzo różnić zaczynając od około 35zł za rok za hosting współdzielony, do nawet 300zł na rok, lub więcej za wirtualny serwer prywatny VPS.
    • Ceny domen również mogą się znacząco różnić w zależności od rozszerzenia i operatora, ale zazwyczaj za standardową domenę .pl jest to od kilku do kilkudziesięciu złotych rocznie.

    WordPress.com

    • WordPress.com oferuje kilka płatnych planów cenowych i jeden darmowy z ograniczoną przestrzenią dyskową, ograniczoną liczbą funkcji i bez możliwości wybrania sobie dowolnej domeny.
    • Bezpłatny abonament obejmuje subdomenę .wordpress.com, 1GB przestrzeń na pliki, oraz podstawowe opcje wystarczające do stworzenia prostej strony.
    • Płatne plany zaczynają się od £3 miesięcznie i oprócz większej przestrzeni dyskowej oferują również większą funkcjonalność. Różnice w darmowych i płatnych pakietach możesz zobaczyć na stronie wordpress.com
    • Ostateczny koszt utrzymania Twojej strony internetowej będzie zależał od konkretnych potrzeb i wersji platformy, którą wybierzesz. Jeśli wybierzesz darmową wersję WordPress.org, będziesz do niej musiał doliczyć koszty hostingu i domeny. Jeśli wybierzesz darmową wersję WordPress.com, nie poniesiesz żadnych kosztów, ale musisz się liczyć z ograniczeniami , brakiem możliwości wybory własnej domeny, oraz reklamami na stronie. Jeśli wybierzesz jeden płatny plan WordPress.com, musisz wziąć pod uwagę koszty miesięcznego abonamentu.

    Personalizacja WordPress

    WordPress (poza darmową wersją WordPress.org) zapewnia ogromne możliwości zmiany wyglądu i ustawień strony. Możliwości mamy praktycznie nieograniczone. Istnieje kilka różnych dróg do zmiany wyglądu lub funkcji WordPress:

    • Motywy: lub inaczej szablony kontrolują wygląd i niekiedy również funkcjonalność Twojej witryny. Dostępne są tysiące darmowych i płatnych motywów. Aby zainstalować nowy motym, wystarczy przejść do kokpitu WordPress i kliknąć: Szablony
    • Wtyczki: jest to oprogramowanie które dodaje różne funkcjonalności do Twojej witryny. Możesz wybierać spośród tysięcy darmowych, jak i płatnych wtyczek, począwszy od prostych wtyczek, aż po potężne narzędzia, które zamienią Twoją stronę w profesjonalny sklep internetowy.
    • Kod niestandardowy: Jeśli potrafisz kodować, nic nie stoi na przeszkodzie, aby samemu zmienić kod HTML, CSS i PHP WordPress i spersonalizować wygląd strony. 
    • Widgety: to małe bloki treści które możemy umieszczać w dowolnych miejscach naszej witryny
    • Menu: WordPress umożliwia tworzenie niestandardowych menu, które można umieszczać w nagłówku, pasku bocznym, dolnej stopce, lub na dowolnej stronie.

    Korzystając z powyższych opcji możemy stworzyć unikalną stronę dostosowaną do naszych potrzeb.

    Motywy WordPress

    Motywy kontrolują wizualną stronę Twojej witryny. Są niezbędne do działania WordPress. W ciągu kilku kliknięć możemy całkowicie zmienić wygląd witryny, kolorów, czcionek, menu.

    Dostępne są tysiące darmowych i płatnych motywów dostosowane do różnych branż, zawodów i specjalności. Jesteś stolarzem? Proszę bardzo: dziesiątki szablonów dla stolarzy. A może prawnikiem? Nic prostszego!

    Motywy dla biznesu, do blogowania, dla hobbistów, motywy przystosowane pod sklepy internetowe, na pewno każdy znajdzie coś dla siebie. Wystarczy zalogować się do kokpitu WordPress, kliknąć Wygląd i Motywy, a następnie Dodaj nowy motyw.

    Po zainstalowaniu motywu możesz go oczywiście dostosować do swoich potrzeb wybierając ulubioną czcionkę, zestaw kolorów, czy układ witryny. 

    Nie bój się bawić motywami – zmiana motywu nie wpływa na dane na stronie i zawsze możesz bezpiecznie wrócić do poprzedniego motywu, jeśli nowy nie przypadnie Ci do gustu. Pamiętaj jednak, żeby instalować motywy tylko z zaufanych stron. Motywy instalowane z podejrzanych źródeł mogą zawierać wirusy i wykraść Twoje dane. Więcej o bezpieczeństwie WordPress znajdziesz w artykule: Jak usunąć wyskakujące reklamy pop-up malware z witryny WordPress

    Wtyczki WordPress

    Wtyczki to oprogramowanie które do naszej strony dodaje nowe funkcjonalności. Ogromna ilość wtyczek, to duża zaleta WordPress. Dzięki wtyczkom możemy poprawić bezpieczeństwo witryny, poprawić pozycję naszej strony w wynikach wyszukiwania w Google, czy zmienić nasza stronę w profesjonalny sklep internetowy. 

    WordPress posiada własne repozytorium wtyczek, co znacznie ułatwia ich wyszukiwanie i instalację, ale możesz je także znaleźć na innych stronach internetowych, pobrać i zainstalować ręcznie. W repozytorium znajdziesz między innymi wtyczki do formularzy kontaktowych, wykonywania kopii bezpieczeństwa, integracji z mediami społecznościowymi i wiele innych.

    Instalacja wtyczek jest bajecznie prosta. Wystarczy zalogować się do kokpitu, kliknąć Wtyczki i Dodaj nową. Po wyszukaniu wtyczki która nas interesuje, wystarczy kliknąć Zainstaluj.

    WordPress wtyczki instalacja

    Po instalacji wtyczkę musisz aktywować aby zaczęła działać, a niektóre z nich dodatkowo musisz wstępnie skonfigurować. Warto przeczytać pliki tekstowe udostępnione przez twórcę wtyczki, aby nauczyć się jej  obsługi, gdyż różne wtyczki obsługuje się trochę inaczej.

    Choć wtyczki mają wiele zalet, to należy instalować je z rozwagą.

    • Zbyt duża liczba wtyczek, może skutkować spowolnieniem naszej witryny
    • Niektóre wtyczki z tej samej kategorii mogą wzajemnie zakłócać swoją pracę i powodować problemy. 
    • Każda wtyczka to dodatkowy kod, a im więcej kodu, tym większa szansa na naruszenie bezpieczeństwa i możliwość włamania się na Twoją stronę.

    WordPress a SEO

    WordPress zawiera szereg wbudowanych funkcji, które mogą pomóc zoptymalizować naszą witrynę pod kątem wyszukiwarek. SEO to proces optymalizacji witryny, aby zajęła jak najlepsze miejsce w wynikach wyszukiwania dla konkretnych fraz i przyciągnąć więcej ruchu organicznego. Oto kilak sposobów, jak WordPress może ci pomóc w SEO:

    • Czysty kod. WordPress buduje strony zgodnie ze standardami, które są łatwo odczytywane przez roboty wyszukiwarek.
    • Niestandardowe adresy URL. WordPress umożliwia Ci tworzenie niestandardowych adresów stron i wpisów na blogu, dzięki czemu roboty mogą lepiej kategoryzować strony Twojej witryny.
    • Tagi alt dla obrazków. Masz możliwość dodawania alternatywnych opisów do zdjęć, by przeglądarki lepiej kategoryzowały podstrony. 
    • Tagi nagłówków. Dzięki tagom nagłówków roboty wyszukiwarek mogą błyskawicznie rozpoznać zawartość strony bez konieczności skanowania całego tekstu.
    • Wtyczki do SEO. Podstawowe funkcjonalności SEO mogą być znacznie rozbudowane dzięki dodatkowym wtyczkom. Dzięki nim możesz szczegółowo analizować słowa kluczowe, tworzyć meta-tagi, tworzyć mapy witryn XML i wiele więcej. Do popularnych wtyczek należy Yoast SEO, czy All in One SEO Pack

    Dbając o zgodność z wytycznymi Google, mamy szansę poprawić widoczność naszej witryny w wynikach wyszukiwania i przyciągnąć więcej odwiedzających na naszą stronę. Pamiętaj, że dbanie o wysokie miejsca w wynikach Google wymaga ciągłego wysiłku i raz zdobyte miejsce w pierwszej dziesiątce można łatwo stracić.

    Weebly

    Weebly nie oferuje możliwości instalacji swojego produktu na wybranym przez Ciebie hostingu. Jedyną opcją jest instalacja na hostingu Weebly, ale w płatnych planach masz możliwość wybrania własnej domeny. Weebly umożliwia Ci stworzenie profesjonalnie wyglądającej witryny, w bajecznie prosty sposób, bez konieczności posiadania umiejętności kodowania. Większość pracy oprócz wprowadzania treści, wykonuje się metodą „przeciągnij i upuść”. Do strony możesz oczywiście dodać formularze kontaktowe, możesz stworzyć dobrze wyglądający blog, a nawet stworzyć sklep internetowy. Nie ma w tym nic dziwnego, w końcu od 2018 właścicielem Weebly jest Square (a właściwie Block), który od dawna obsługuje systemy płatności dla ogromnej liczby sklepów internetowych.

    Kluczowe funkcje Weebly

    • Bajecznie prosty w obsłudze. Stronę w Weebly budujemy przeciągając elementy z menu w odpowiednie miejsca na stronie. Poradzi sobie z tym absolutnie każdy.
    • Szablony. Weebly oferuje duży wybór szablonów, które pozwolą dostosować wygląd Twojej strony do indywidualnych potrzeb.
    • Konfigurowalne podstrony. Masz możliwość tworzenia niestandardowych stron, jak Kontakt, czy Informacje i dodawać do nich tekst, zdjęcia, a nawet filmy.
    • E-commerce. W droższych planach dostajesz w pakiecie funkcje do budowy sklepu internetowego wraz ze zintegrowanym systemem płatności kartą, koszykiem na zakupy o zarządzaniem magazynem.
    • Blog. Dzięki Weebly w prosty sposób utworzysz stronę blogową.
    • Narzędzia SEO. Weebly zawiera wbudowane narzędzia które pomogą Ci zoptymalizować witrynę pod kątem wyszukiwarek internetowych. Możesz między innymi dodawać słowa kluczowe, czy meta opisy.
    • Obsługa smartfonów. Weebly automatycznie optymalizuje strony, pod kątem urządzeń mobilnych. Dzięki temu Twoja strona wyglądać będzie świetnie nie tylko na ekranach komputerów, ale także na tabletach i smartfonach.
    • Obsługa klienta. Nawet w darmowej wersji masz dostęp do pomocy technicznej przez czat, e-mail i forum, a w droższych planach dodatkowo przez telefon.

    Cennik Weebly

    • Weebly oferuje jeden plan darmowy i kilka planów płatnych różniących się ceną i funkcjonalnością.
    • Darmowy. W darmowym planie masz możliwość założenia strony w subdomenie .weebly.com. Masz dostęp do tworzenia strony metodą „Przeciągnij i upuść”, do szablonów i podstawowych funkcji, takich jak formularze kontaktowe i integracja z Google Analytics. Nie masz jednak możliwości uruchomienia sklepu internetowego, ani korzystać z wybranej przez siebie domeny.
    • Connect. W tym planie masz już możliwość wybrania swojej własnej domeny i dostęp do podstawowej funkcjonalności e-commerce, takich jak koszyk na zakupy i przetwarzanie płatności on-line.
    • Pro. W planie Pro masz rozszerzone funkcje e-commerce, jak na przykład odzyskiwanie porzuconego koszyka, możliwość oferowania rabatów i kuponów. Zawiera również więcej opcji dostosowania wyglądu, jak możliwość korzystania z niestandardowych czcionek, czy ochrona poszczególnych stron hasłem.
    • Business: Otrzymujesz jeszcze większe możliwości e-commerce, jak zaawansowane opcje wysyłki, czy możliwość tworzenia kart podarunkowych. Jest rownież kilka funkcji dla biznesu, jak strony internetowe oparte na członkostwie i możliwość tworzenia niestandardowych raportów.

    W przypadku rozliczeń rocznych możesz otrzymać lepsze ceny, niż przy płatnościach miesięcznych. Masz również możliwość przetestowania danych pakietów podczas 30-dniowego okresu próbnego.

     

    Obsługa klienta Weebly

    Weebly oferuje pomoc techniczną poprzez forum, e-mail, chat, a w droższych planach pakietowych również przez telefon. Dodatkowo mamy dostęp do Bazy Wiedzy, blogu z poradami i samouczków.

    Personalizacja Weebly

    Weebly umożliwia użytkownikom dostosowanie swoich stron na różne sposoby.

    Wtyczki i motywy Weebly

    • Szablony. Weebly oferuje do wyboru wiele szablonów, które są w pełni konfigurowalne i można je łatwo modyfikować metodą Przeciągnij i upuść.
    • Własna domena. W płatnych pakietach masz możliwość korzystania z własnej domeny, ale musisz ją kupić we własnym zakresie i połączyć z Weebly.
    • Czcionki niestandardowe. W planach Pro i Business możesz korzystać z niestandardowych czcionek  na swoich stronach.
    • Kod niestandardowy. Do swoich stron możesz dodawać niestandardowy kod HTML, CSS i JavaScript.
    • Wtyczki. weebly oferuje również repozytorium z wtyczkami, ale nie ma ich tyle co w WordPress.

    Weebly a SEO

    Weebly zawiera szereg narzędzi, które pomogą CI zoptymalizować witrynę pod kątem wyszukiwarek internetowych, np Google, czy Bing. Narzędzia te mogą Ci pomóc poprawić widoczność Twojej strony w wynikach wyszukiwania, co może prowadzić do zwiększenia liczby odwiedzin i potencjalnych klientów.

    • Metatagi. Masz możliwość dodawać metatagi, takie jak tytuł i opis do każdej strony swojej witryny.
    • Optymalizacja obrazu. Możesz dodawać tekst alternatywny do obrazków.
    • Narzędzia SEO. Weebly zawiera wbudowany kreator SEO, który zawiera wskazówki i zalecenia dotyczące optymalizacji witryny pod kątem wyszukiwarek.
    • Optymalizacja pod komórki. Weebly automatycznie optymalizuje strony internetowe pod kątem urządzeń mobilnych, co jest o tyle ważne, że od jakiegoś czasu Google używa do mobilnego indeksowania stron. Oznacza to, że to mobilna wersja będzie określać pozycję strony w wyszukiwarce.
    • Niestandardowe adresy URL. Możesz utworzyć niestandardowe adresy każdej ze stron, co może poprawić pozycję strony w  wynikach wyszukiwania.

    Korzystając z powyższych narzędzi i stosując się do wytycznych zgodnych z dobrymi praktykami SEO masz szansę osiągnąć wysokie miejsca w wynikach Google.

    Podsumowanie

    Ostateczny wybór będzie zależał od konkretnych potrzeb, oraz poziomu wiedzy technicznej. Jeśli nie znasz JavaScript, CSS, czy nawet HTML, to bezpieczniej będzie wybrać Weebly. Jeśli jednak planujesz w przyszłości rozbudowywać swoją stronę i dodawać do niej nowe funkcjonalności, to sugerował bym wybrać WordPress.

    WordPress posiada znacznie, znacznie większy wybór wtyczek rozszerzających funkcjonalność strony. A nawet jeśli potrzebna Ci wtyczka, która wykonuje zadania których potrzebujesz nie istnieje, to w ostateczności możesz zatrudnić programistę, który taką wtyczkę dla Ciebie stworzy. Z Weebly jest inaczej – jeśli jakaś funkcjonalność nie jest dostępna, a wtyczka która mogła by to naprawić nie istnieje, to musisz się pogodzić z tym, że danej funkcji na stronie nie zaimplementujesz. Wówczas pozostanie jedynie zmiana platformy co może być czasochłonne i kosztowne.

  • Jak usunąć wyskakujące reklamy pop-up malware z witryny WordPress

    Jak usunąć wyskakujące reklamy pop-up malware z witryny WordPress

    Podczas tworzenia strony internetowej powinieneś zwróć szczególną uwagę na jej bezpieczeństwo. Naruszenie bezpieczeństwa Twojej witryny może skutkować sporymi problemami.  Jeśli Twoja strona umożliwia logowanie użytkowników, lub co gorzej, masz sklep internetowy (np WooCommerce) z bazą danych klientów, może to się skończyć wyciekiem danych osobowych i poważnymi konsekwencjami, a nawet procesem sądowym. W tym artykule dowiesz się jak usunąć wyskakujące reklamy pop-up malware z witryny WordPress.

    Co gorsza, duża różnorodność wtyczek i motywów WordPress sprawia, że naruszenia bezpieczeństwa tego CMS nie są rzadkością. Co nie dziwi biorąc pod uwagę to, że na świecie notuje się nawet 90 tysięcy ataków na WordPress na  minutę.

    Nie chodzi o to, że WordPress nie jest wystarczająco bezpieczny – jest po prostu najpopularniejszym systemem CMS na świecie i dlatego jest też najczęściej atakowany. Jego popularność jest tak duża, że według firmy Sucuri, ataki na platformę WordPress stanowią 90% ataków na wszystkie systemy CMS.

    Objawy zainfekowania złośliwym oprogramowaniem – malware

    Aby móc skutecznie walczyć ze złośliwym oprogramowaniem malware, które zainfekowało Twoją stronę internetową, musisz najpierw wiedzieć, że w ogóle Twoja strona została zainfekowana. Czasami nawet nie zdajesz sobie sprawy, że Twoja strona została zainfekowana malware i w tle wysyła spam do tysięcy osób dotyczących pornografii, czy tabletek na potencję. W tym artykule pomożemy Ci rozpoznać symptomy infekcji złośliwym oprogramowaniem malware.

    Jednym z najbardziej oczywistych objawów infekcji Twojej strony przez malware, są widoczne zmiany na stronie, których nie wprowadzałeś, lub dziwne opisy meta w SERP (Search Engine Results Pages), czyli w wynikach wyszukiwania w Google. Ponadto częstym objawem infekcji sa wyskakujące okienka, reklamy, czy przekierowania użytkowników, do zupełnie innej, spamowej witryny.

    Jako administrator strony na WordPress musisz mieć na uwadze to, że niektórych zmian nie jesteś w stanie zobaczyć od strony zaplecza (Dashboard, kokpitu). Jedynie użytkownicy odwiedzający Twoją stronę będą widzieć irytujące wyskakujące okienka.

    Innym  bardzo oczywistym objawem infekcji będzie umieszczenie Twojej strony na czarnej liście Google. Wówczas google może ostrzegać  użytkowników próbujących wejść na Twoją stronę dużym czerwonym alertem, a nawet w ostateczności usunąć Twoją stronę z wyników wyszukiwania Google SERP.

    Malware WordPress warning

    Stronę internetową zainfekowaną złośliwym oprogramowaniem malware może też usunąć osoba zarządzająca hostingiem Twojej strony, jeśli znajduje się ona na współdzielonym serwerze stron internetowych, by chronić właścicieli innych stron internetowych zainstalowanych na tym samym serwerze.

    Jeśli Twoja strona nie pojawia się w wynikach wyszukiwania Google, lub nie otwiera się po wpisanie jej adresu w przeglądarce, całkiem możliwe że została zainfekowana i usunięta z indeksu Google, lub z serwera dostawcy Twojej strony.

    Jak wyczyścić stronę internetową ze złośliwego oprogramowania malware?

    Użyj wtyczki do usuwania malware

    Jeśli możesz zalogować się do kokpitu swojego WordPress, to najszybszym sposobem  pozbycia się złośliwego oprogramowania malware z WordPress jest skorzystanie z wtyczek stworzonych do tego celu.

    Wtyczki takie jak Wordfence, Sucuri, czy iThemes to jedne z najlepszych wtyczek do ochrony Twojej witryny opartej na WordPress.

    Jeśli nie masz doświadczenia w administracji serwerami www (Apache, LiteSpeed, Nginx) czy Linuxem, to najszybsza i najbezpieczniejsza metoda walki ze złośliwym oprogramowaniem malware.

    Ręczne usuwanie złośliwego oprogramowania

    Ręczne usuwanie złośliwego oprogramowania malware jest czasochłonne i w przypadku nieumiejętnej edycji plików lub ich usunięcie może skutkować całkowitym unieruchomieniem naszej strony internetowej. Jeśli jednak nie możesz wejść do kokpitu WordPress by zainstalować niezbędne wtyczki, ręczne wyszukiwanie i usunięcie malware to często jedyna opcja. Jeśli nie masz w tym doświadczenia, najbezpieczniej będzie skonsultować się z firmą która zajmuje się tym profesjonalnie, by nie spowodować jeszcze większych szkód.

     

    Stwórz kopię bezpieczeństwa witryny

    Zanim zaczniesz robić cokolwiek by usunąć złośliwe oprogramowanie ze strony, stwórz najpierw kopię bezpieczeństwa strony internetowej, by w razie komplikacji móc przywrócić ją z powrotem. Tworzenie kopii zapasowych powinno stać się Twoim nawykiem, co pozwoli Ci zaoszczędzić sporo czasu i nerwów wrazie problemów ze stroną internetową.

    Aby ręcznie wykonać kopię bezpieczeństwa plików swojej strony, zaloguj się na swoim hostingu przy pomocy FTP, SFTP, lub przy pomocy panelu CyberPanel. Następnie skompresuj zawartość pliku wp_content i pobierz skompresowany plik na dysk twardy komputera.

    Jeśli Twój hosting ma opcję robienia kopii bezpieczeństwa w postaci migawek snapshot, jest to również dobra opcja, lub możesz do celu wykorzystać jedną z wielu wtyczek WordPress.

    Konieczne będzie również wykonanie kopii bezpieczeństwa pliku .htaccess. Ten plik w niektórych managerach plików jest domyślnie niewidoczny, upewnij się więc że masz włączoną opcję wyświetlania plików systemowych.

    Równie ważne jest również wykonanie  kopii bazy danych, gdyż to właśnie w bazie danych mieści się większość informacji wyświetlanych na naszej stronie. Miej na uwadze, że niektóre złośliwe oprogramowanie malware może ukrywać się właśnie w bazie danych.

    Zainstaluj WordPress od nowa

    Zanim zaczniesz poszukiwać złośliwego oprogramowania w Twoich plikach, zainstaluj czystą wersję WordPress. Instalując czystą wersję WordPress z oficjalnej witryny masz pewność, że jest ona pozbawiona malware.

    Sprawdzenie plików

    Przed Tobą najtrudniejsza część zadania – sprawdzenie wszystkich plików WordPress. Jest to żmudny i długi proces, gdyż będziesz musiał sprawdzić każdy plik i katalog po kolei, aby zidentyfikować zainfekowane pliki.

    Na początku porównaj wszystkie pliki WordPress z plikami z Twojej kopii zapasowej, a następnie przejdź do sprawdzania plików motywów i wtyczek. Jeśli nie masz doświadczenia w tworzeniu i edycji plików HTML, CSS, czy JavaScript, może Ci być bardzo trudno wyłapać podejrzane linijki kodu.

     Po przejrzeniu wszystkich plików WordPress, sprawdź zawartość pliku .htaccess. To bardzo ważny plik i nawet po instalacji czystej wersji WordPress, ale mając zainfekowany plik .htacces, możesz nadal pozostawić otwartą furtkę dla hakerów, którzy mogą ponownie zainfekować Twoją witrynę złośliwym oprogramowaniem malware.

    Na koniec, po dokładnym sprawdzeniu i wyczyszczeniu wszystkich plików, powinieneś także wyczyścić pamięć podręczną przeglądarki i serwera www, ponieważ pliki w pamięci podręcznej cache również mogą być zainfekowane i ponownie zarazić Twoją witrynę.

    Ponownie zainstaluj motywy i wtyczki

    Zainstaluj na nowo czyste wersje motywów i wtyczek. Pamiętaj, by instalować tylko sprawdzone motywy i wtyczki. Prawda jest taka, że większość infekcji złośliwym oprogramowaniem nie jest spowodowana z winy WordPress, ale zwłaszcza z powodu instalowania słabej jakości wtyczek i motywów, lub co gorsza instalowanie ich z niepewnych źródeł. Takie wtyczki bardzo często są już zainfekowane w momencie instalacji.

    Zresetuj hasła wszystkich użytkowników WordPress i phpmyadmin

    To jest absolutnie konieczny krok podczas walki ze złośliwym oprogramowaniem. Często najsłabszym ogniwem naszej witryny nie jest sam WordPress, ale słabej jakości hasła łatwe do odgadnięcia lub złamania metodą BruteForce. Warto także sprawdzić listę użytkowników naszej strony, czy nie ma tam przypadkiem podejrzanych osób z wysokimi uprawnieniami, których wcześniej nie było.

    Koniecznie trzeba się również zalogować do bazy danych przez phpmyadmin i sprawdzić, czy przypadkiem nie pojawili się tam podejrzani użytkownicy, których nie powinno tam być. Należy równiej zresetować wszystkie hasła do bazy danych, gdyż osoba posiadająca dostęp do bazy danych naszego WordPress jest w stanie wyrządzić ogromne szkody i zmienić zawartość naszej witryny.

    Przywróć zdjęcia i inne pliki

    Po zakończeniu sprawdzania plików możesz przywrócić swoje zdjęcia i inne pliki swojej strony.

    Bądź jednak ostrożny i przed przywróceniem plików przejrzyj katalog po katalogu. O ile raczej nie ma niebezpieczeństwa zainfekowania witryny plikami multimedialnymi, to każdy plik JavaScript lub PHP powinien natychmiast zapalić Ciebie czerwoną lampkę, ponieważ najprawdopodobniej zawierają złośliwe oprogramowanie. Tych plików nie powinno być w folderach z Twoimi zdjęciami. 

    Sprawdzenie kopii zapasowej bazy danych.

    Operacje na plikach bazy danych są bardzo skomplikowane i osoba bez dużej wiedzy jak działa MySQL, postgreSQL, czy MariaDB, narobi raczej więcej szkód niż pożytku.  Dlatego jeśli podejrzewasz zainfekowanie swojej bazy danych WordPress złośliwym oprogramowaniem, najlepiej skontaktuj się w tym celu z firmą, która zajmuje się tym profesjonalnie.

    Podsumowanie

    Lepiej zapobiegać niż leczyć. Dlatego jeśli jeszcze nie masz zainstalowanej wtyczki poprawiającej bezpieczeństwo WordPress, to najwyższy czas ją pobrać i zainstalować.

    Ponadto warto dbać o odpowiednio silne i długie hasła, by utrudnić hakerom złamanie ich metodą BruteForce.

    Dbaj o aktualizacje WordPress, motywów i wtyczek. Najnowsze ich wersje zazwyczaj łatają luki bezpieczeństwa wykryte w poprzednich wersjach.

     

  • Jak uruchomić zadanie CRON co godzinę

    Jak uruchomić zadanie CRON co godzinę

    Istnieją pewne zadania na komputerze, które musimy wykonywać regularnie – na przykład wykonywanie kopii bezpieczeństwa. Do wykonywaniu takich powtarzalnych zadań w systemie Linux służy polecenie Cron – jest nieoceniony w wykonywaniu zadań które wymagają planowania. W tym artykule pokażemy Ci, jak skonfigurować crontab, by uruchamiał zadanie cron co godzinę. 

    Co to jest cron?

    Cron, to narzędzie, aplikacja służąca do planowania zadań, uruchamiania aplikacji i skryptów w określonym czasie w systemach operacyjnych typu Unix. Umożliwia on planowanie zadań (cykliczne uruchamianie aplikacji, lub skryptów powłoki) które będą się automatycznie uruchamiać o określonej godzinie i dacie. Zadania te nazywane są zadaniami cron.

    Cron w systemach Linux i Unix jest powszechnie używany do zadań konserwacyjnych lub administracyjnych, jak uruchamianie kopii zapasowych (z możliwością wysłania ich później na przykład na serwer FTP), czy wysyłanie zautomatyzowanych wiadomości e-mail. Cron można również stosować na przykład do sprawdzania dostępności aktualizacji systemu i wielu innych rzeczy.

    Cron do pracy wykorzystuje plik konfiguracyjny o nazwie crontab. Crontab, to zwykły plik tekstowy którego możemy edytować dowolnym edytorem tekstu. Administrator systemu ma możliwość skonfigurować globalny plik crontab z uprawnieniami root, a ponadto każdy z użytkowników może mieć własne ustawienia, ograniczone jednak prawami użytkownika.

    Zadanie cron jest zwykle wykonywane w tle, a jeśli występują jakieś dane wyjściowe, to mogą być wysyłane do użytkownika pocztą e-mail, lub zapisywane do pliku. Cron to potężne narzędzie pozwalające zautomatyzować praktycznie każde zadanie, jednak dla początkujących użytkowników może być trudny w obsłudze, jeśli nie znają składni potrzebnych poleceń.

    Do czego przyda nam się cron?

    Przy pomocy cron, możemy zarządzać praktycznie każdą funkcją komputera, czy serwera i uruchamiać cykliczne zadania o określonej godzinie i dacie. Możemy go wykorzysta na przykład do:

    • Automatyzacja powtarzalnych zadań. Zadanie cron może być używane do automatyzacji zadań w regularnych odstępach czasu, takich jak na przykład uruchamianie kopii zapasowych, lub wysyłania cyklicznych wiadomości e-mail, na przykład z przypomnieniami.
    • Uruchamianie zadań systemowych zgodnie z harmonogramem. Zadanie cron może nam sprawdzać, czy są dostępne aktualizacje systemu operacyjnego, bądź aplikacji, albo na przykład może regularnie czyścić komputer z plików tymczasowych i niepotrzebnych  logów systemowych.
    • Automatyczne wykonywanie aktualizacji systemu, aktualizowanie zabezpieczeń i instalacja nowego oprogramowania. Może to pomóc w lepszym zabezpieczeniu systemu i dzięki temu mamy pewność, że na naszym komputerze, czy serwerze zawsze mamy zainstalowane najnowsze wersje aplikacji i bibliotek.
    • Poprawa wydajności. Dzięki cron, możemy tak skonfigurować uruchamianie zadań mocno obciążających komputer, aby uruchamiały się w godzinach gdy komputer jest najmniej używany, na przykład w nocy.

    Ogólnie rzecz biorąc, cron może nam znacznie usprawnić wykonywanie cyklicznych zadań poprzez ich automatyzację.

    Stwórz zadanie cron w terminalu Linux

    Do tworzenia zadań cron służy polecenie crontab. Aby utworzyć nowe zadanie cron:

    • Otwórz okno terminala
    • Wpisz polecenie crontab -e aby otworzyć plik konfiguracyjne cron.
    • Dodaj nowy wpis do pliku crontab, pamiętając, aby zachować odpowiedni format, gdyż inaczej zadanie nie uruchomi się:

    minuta godzina dzień-miesiąca miesiąc dzień-tygodnia polecenie-do-wykonania

    Gwiazdka zamiast minut, godzin, czy miesiąca oznacza, że to zadanie będzie się uruchamiać każdej godziny, minuty, czy każdego miesiąca. Na przykład, jeśli chcemy, by polecenie, lub skrypt uruchamiał się o każdej pełnej godzinie (czyli w minucie 0) każdego dnia każdego miesiąca, musimy wpisać:

    0 * * * * polecenie-do-wykonania

    • Zapisz plik crontab  i zamknij.
    • Użyj polecenia crontab -l aby wyświetlić listę zapisanych zadań cron do wykonania.

    UWAGA: Składnia poleceń zadań cron może się różnić w zależności od wersji systemu Linux. My bazujemy na systemie Ubuntu. Aby dowiedzieć się więcej o aplikacji cron, wpisz w terminalu man cron

    Jak utworzyć zadanie cron w CyberPanel

    Jeśli Twój serwer www oparty jest na LiteSpeed, to powinieneś zainstalować nakładkę CyberPanel. Tworzenie zadań cron w CyberPanel jest o wiele prostsze i przyjemniejsze niż w pliku crontab.

    • Zaloguj się do Dashboard swojego CyberPanel.
    • Kliknij po lewej stronie Websites, a następnie List Websites i wybierz swoją stronę internetową i kliknij Manage
    CyberPanel Website manage
    • Przewiń w dół i kliknij na Cron Jobs
    CyberPanel WordPress cron jobs
    • Aby dodać nowe zadanie cron, naciśnij ADD CRON. Aby zobaczyć listę istniejących zadań, kliknij FETCH CURRENT CRON JOBS
    CyberPanel Add cron job Fetch
    • Aby dane zadanie uruchamiało się co tydzień, wybierz z listy Every week. W poniższym przykładzie cron uruchomi napisany wcześniej skrypt do wykonywania kopii bezpieczeństwa co tydzień, każdej środy o godzinie 4:16 w nocy. W oknie Day of week wpisujemy cyfry od 0 do 7.
    • 0 i 7 oznacza niedzielę, 1 poniedziałek, 2 wtorek itd
    • Możemy również wpisać dni tygodnia słownie po angielsku: mon, tue, wed, thu, fri, sat, lub sun
    • Naciśnij Add cron aby zapisać utworzone zadanie
    CyberPanel WordPress cron weekly

    Prawda, że w CyberPanel konfiguruje się cron przyjemniej?