Jak wdrożyć Ghost v0.11 LTS na Debian 8

Ghost to platforma blogowa typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od czasu wydania w 2013 roku. Koncentruje się na treści i blogowaniu. Najbardziej atrakcyjną rzeczą w Ghost jest jego prosta, czysta i responsywna konstrukcja. Możesz pisać swoje posty na blogu z telefonu komórkowego. Treści do Ghosta pisane są w języku Markdown. Ghost idealnie nadaje się dla osób lub małych grup pisarzy.

W tym przewodniku zamierzamy skonfigurować i wdrożyć bezpiecznego bloga Ghost v0.11.x LTS na Debian 8 VPS przy użyciu Let's Encrypt , Certbot , Node.js , NPM , NGINX i MySQL .

Wymagania

  • Zarejestruj (kup) nazwę domeny.
  • Instancja serwera Debian 8 z minimum 1 GB pamięci RAM .
  • Użytkownik Sudo.

Zanim zaczniesz

  1. Sprawdź wersję Debiana:

    lsb_release -ds
    # Debian GNU/Linux 8.9 (jessie)
    
  2. Utwórz nowe konto użytkownika innego niż root :

    adduser johndoe --gecos "John Doe"
    
  3. Dodaj superużytkownika, dodając go do sudogrupy:

    usermod -aG sudo johndoe
    
  4. Przejdź do nowego użytkownika:

    su - johndoe
    
  5. Zaktualizuj oprogramowanie systemu operacyjnego:

    sudo apt-get update && sudo apt-get upgrade -y
    
  6. Ustaw strefę czasową:

    sudo dpkg-reconfigure tzdata
    
  7. Zainstaluj wymagane narzędzia:

    sudo apt-get install -y build-essential zip unzip git apt-transport-https
    
  8. Uruchom ponownie system, jeśli jest to wymagane:

    sudo shutdown -r now
    

Zainstaluj Certbot

UWAGA : Przed rozpoczęciem tego kroku upewnij się, że masz ustawione rekordy DNS dla swojej domeny.

Użyjemy Let's Encrypt CA i klienta EFF Certbot, aby uzyskać certyfikat SSL / TLS dla naszego bloga Ghost. Nie zapomnij zastąpić wszystkich instancji blog.domain.tldnazwą swojej domeny.

  1. Zainstaluj oprogramowanie do zarządzania certyfikatami Certbot (wcześniej Let's Encrypt client ) wykonane w Pythonie:

    sudo -s
    printf "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list.d/jessie-backports.list
    exit        
    sudo apt-get update
    sudo apt-get install -y certbot -t jessie-backports
    
  2. Sprawdź wersję Certbot:

    certbot --version
    # certbot 0.10.2
    
  3. Uzyskaj certyfikat RSA przy użyciu autonomicznej metody uwierzytelniania (wtyczki):

    sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email [email protected] --agree-tos
    
    # IMPORTANT NOTES:
    #  - Congratulations! Your certificate and chain have been saved at 
    /etc/letsencrypt/live/blog.domain.tld/fullchain.pem. 
    #  Your cert will expire on YYYY-MM-DD. . . .
    #  . . .
    

    Po przejściu poprzednich kroków certyfikat i klucz prywatny znajdą się w /etc/letsencrypt/live/blog.domain.tldkatalogu.

Zainstaluj Node.js i NPM

UWAGA : Ghost obecnie obsługuje tylko Node.js w wersji 4.5+ i 6.9+.

Ghost jest zbudowany na Node.js. Zamierzamy zainstalować zalecaną wersję Ghosta v6 Boron LTSw momencie pisania tego tekstu.

  1. Pobierz i zainstaluj Node.js v6 LTS:

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
  2. Sprawdź wersje Node.js i NPM:

    node -v && npm -v
    # v6.11.2
    # 3.10.10
    

Zainstaluj MySQL

Domyślnie Ghost jest skonfigurowany do korzystania z bazy danych SQLite, która nie wymaga konfiguracji.

Alternatywnie Ghost może być również używany z bazą danych MySQL poprzez zmianę konfiguracji bazy danych. Najpierw musisz utworzyć bazę danych i użytkownika, a następnie zmienić istniejącą konfigurację sqlite3.

  1. Pobierz i zainstaluj MySQL:

    sudo apt-get install -y mysql-server
    

    UWAGA : Podczas instalacji pojawi się monit o podanie hasła użytkownika „root” MySQL. Powinieneś ustawić bezpieczne hasło dla użytkownika „root” MySQL.

  2. Sprawdź wersję MySQL:

    mysql --version
    # mysql  Ver 14.14 Distrib 5.5.57, for debian-linux-gnu (x86_64) using readline 6.3
    
  3. Sprawdź, czy demon MySQL został uruchomiony i działa:

    sudo systemctl status mysql.service
    sudo systemctl is-enabled mysql.service
    
  4. Uruchom mysql_secure_installationskrypt, aby trochę zabezpieczyć bazę danych:

    sudo mysql_secure_installation
    
  5. Zaloguj się do MySQL jako użytkownik root:

    mysql -u root -p
    # Enter password:
    
  6. Utwórz nową bazę danych MySQL i użytkownika:

    create database dbname;
    grant all on dbname.* to 'user' identified by 'password';
    
  7. Wyjdź z MySQL:

    exit
    

Zainstaluj NGINX

  1. Pobierz i zainstaluj najnowszą główną wersję NGINX z oficjalnego repozytorium NGINX:

    wget https://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    rm nginx_signing.key
    sudo -s
    printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
    exit
    sudo apt-get update
    sudo apt-get install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
    
  2. Sprawdź, czy jest zainstalowany, sprawdzając wersję NGINX:

    sudo nginx -v
    # nginx version: nginx/1.13.4
    
  3. Sprawdź status, włącz i uruchom usługę NGINX (demon):

    sudo systemctl status nginx.service # inactive (dead)
    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service
    
  4. Utwórz /etc/nginx/sslkatalog i wygeneruj nową grupę Diffie-Hellman ( DH ):

    sudo mkdir -p /etc/nginx/ssl
    sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
    
  5. Utwórz katalog dziennika dla blog.domain.tldhosta wirtualnego:

    sudo mkdir -p /var/log/nginx/blog.domain.tld
    
  6. Skonfiguruj NGINX jako serwer odwrotnego proxy HTTP ( S ):

    sudo vim /etc/nginx/conf.d/ghost.conf
    
  7. Wklej następujące elementy /etc/nginx/conf.d/ghost.conf:

    # domain: blog.domain.tld
    # public: /var/www/ghost
    
    upstream ghost_app {
        server 127.0.0.1:2368;
        keepalive 32;
    }
    
    server {
        listen [::]:80 default_server;
        listen 80 default_server;
        listen [::]:443 ssl http2 default_server;
        listen 443 ssl http2 default_server;
    
        server_name blog.domain.tld; # Change to your domain/hostname
        root /var/www/ghost; # Change to the path where Ghost is
    
        error_log /var/log/nginx/blog.domain.tld/error.log;
        access_log /var/log/nginx/blog.domain.tld/access.log;
    
        client_max_body_size 100M;
    
        ssl_certificate /etc/letsencrypt/live/blog.domain.tld/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/blog.domain.tld/privkey.pem;
        ssl_dhparam ssl/dhparams-2048.pem;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;
    
        ssl_buffer_size 4K;
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50M;
        ssl_session_tickets off;
    
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/blog.domain.tld/chain.pem;
    
        resolver 8.8.8.8 8.8.4.4 valid=300s;
    
        location / {
            proxy_pass http://ghost_app;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_hide_header X-Powered-By;
    
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    
        }
    }
    
  8. Zapisz i przetestuj konfigurację NGINX pod kątem błędów składniowych:

    sudo nginx -t
    
  9. Załaduj ponownie konfigurację NGINX:

    sudo systemctl reload nginx.service
    

Zainstaluj Ghost

UWAGA : Jeśli chcesz hostować wiele blogów Ghost na tym samym VPS, każda instancja Ghost musi być uruchomiona na osobnym porcie.

  1. Utwórz katalog główny dokumentu:

    sudo mkdir -p /var/www/
    
  2. Utwórz nowego ghostużytkownika:

    sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
    
  3. Pobierz Ghost:

    curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
    
  4. Rozpakuj Ghosta do /var/www/ghostkatalogu (zalecana lokalizacja instalacji):

    sudo unzip -uo ghost.zip -d /var/www/ghost
    rm ghost.zip
    
  5. Przejdź do nowego ghostkatalogu:

    cd /var/www/ghost
    
  6. Zmień własność /var/www/ghostkatalogu:

    sudo chown -R ghost:ghost .
    
  7. Przełącz na nowego ghostużytkownika:

    sudo su - ghost
    
  8. Przejdź do katalogu głównego dokumentu /var/www/ghost:

    cd /var/www/ghost
    
  9. Zainstaluj Ghost tylko z zależnościami produkcyjnymi. Po zakończeniu tej czynności Ghost zostanie zainstalowany:

    npm install --production
    
  10. Konfiguracja Duch zmieniając url, maila databasewłasność obiektu produkcyjnego wewnątrz config.jspliku:

    cp config.example.js config.js
    vim /var/www/ghost/config.js
    
    
    var path = require('path'),
        config;
    
    config = {
    // ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'https://blog.domain.tld',
        mail: {
            transport: 'SMTP',
            options: {
                service: 'Mailgun',
                auth: {
                    user: '',
                    pass: ''
                }
            }
        },
        database: {
            client: 'mysql',
            connection: {
                host: '127.0.0.1',
                user: 'your_database_user',
                password: 'your_database_password',
                database: 'your_database_name',
                charset: 'utf8'
            },
            debug: false
        },
        // . . .
        // . . .
    

    UWAGA : Należy również skonfigurować ustawienia poczty. Zobacz, jak to zrobić, w oficjalnej dokumentacji Ghost .

  11. Uruchom Ghost w środowisku produkcyjnym:

    npm start --production
    

    Duch będzie teraz działać. Zarówno interfejs frontonu, jak i interfejs administratora są zabezpieczone za pomocą HTTPS, a HTTP / 2 również działa. Możesz otworzyć przeglądarkę i odwiedzić witrynę pod adresem https://blog.domain.tld. Nie zapomnij zastąpić blog.domain.tldnazwą domeny.

  12. Zamknij proces Ghost, naciskając CTRL+ Ci wyjdź z ghostpowrotem do użytkownika root:

    exit
    

Uruchamianie Ducha jako usługi systemowej

Jeśli zamkniesz sesję terminalową za pomocą VPS, Twój blog również się wyłączy. To nie jest dobrze. Aby tego uniknąć, użyjemy Systemd. Będzie utrzymywać naszego bloga przez całą dobę.

  1. Utwórz ghost.serviceplik jednostki systemowej. Uruchom sudo vim /etc/systemd/system/ghost.servicei skopiuj / wklej następującą treść:

    [Unit]
    Description=Ghost - the professional publishing platform
    Documentation=https://docs.ghost.org/v0.11.11/docs
    After=network.target
    
    [Service]
    Type=simple
    # Edit WorkingDirectory, User and Group as needed
    WorkingDirectory=/var/www/ghost
    User=ghost
    Group=ghost
    ExecStart=/usr/bin/npm start --production
    ExecStop=/usr/bin/npm stop --production
    Restart=always
    SyslogIdentifier=Ghost
    
    [Install]
    WantedBy=multi-user.target
    
  2. Włącz i uruchom ghost.service:

    sudo systemctl enable ghost.service && sudo systemctl start ghost.service
    
  3. Sprawdź ghost.servicestatus:

    sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
    
  4. Przejdź https://blog.domain.tld/ghost/i utwórz użytkownika administratora Ghost. Zrób to jak najszybciej!

Wniosek

Otóż ​​to. Mamy teraz w pełni funkcjonalny blog Ghost. Twój serwer dostarcza zawartość przez HTTP / 2, jeśli jest obsługiwany przez klienta. Jeśli chcesz zmienić domyślny motyw Ghost o nazwie Casper na niestandardowy, możesz po prostu pobrać i rozpakować motyw do /var/www/ghost/content/themesfolderu i wybrać go za pomocą interfejsu administratora Ghost, który znajduje się pod adresem https://blog.domain.tld/ghost.



Leave a Comment

Jak zainstalować Neos CMS na CentOS 7

Jak zainstalować Neos CMS na CentOS 7

Neos to innowacyjny system zarządzania treścią typu open source, który doskonale nadaje się do tworzenia i edytowania treści online. Z myślą o autorach i redaktorach, Neo

Zainstaluj WordPress na OpenBSD 6.2

Zainstaluj WordPress na OpenBSD 6.2

Wprowadzenie WordPress to dominujący system zarządzania treścią w Internecie. Obsługuje wszystko, od blogów po złożone witryny z dynamiczną treścią

Jak zainstalować rewolucję MODX na Debianie 9 LAMP VPS

Jak zainstalować rewolucję MODX na Debianie 9 LAMP VPS

Używasz innego systemu? MODX Revolution to szybki, elastyczny, skalowalny, darmowy i open source, system zarządzania treścią dla przedsiębiorstw (CMS) napisany w

Jak wdrożyć Ghosta na Debianie 8.7

Jak wdrożyć Ghosta na Debianie 8.7

Używasz innego systemu? Ghost to platforma blogowa typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od czasu wydania z 2013 roku. ja

Jak zainstalować Dotclear na Debian 9 (Stretch)

Jak zainstalować Dotclear na Debian 9 (Stretch)

Używasz innego systemu? Dotclear to bardzo prosty silnik do blogowania. Jest open source i łatwy w użyciu. W tym samouczku zostanie przeprowadzona instalacja

Instalowanie Fork CMS na CentOS 7

Instalowanie Fork CMS na CentOS 7

Używasz innego systemu? Fork to open source CMS napisany w PHP. Kod źródłowy Forks jest hostowany na GitHub. Ten przewodnik pokaże Ci, jak zainstalować Fork CM

Jak zainstalować CMS składu na CentOS 7

Jak zainstalować CMS składu na CentOS 7

Typesetter to CMS o otwartym kodzie źródłowym napisany w języku PHP, który koncentruje się na łatwości obsługi dzięki edycji True WYSIWYG i przechowywaniu plików płaskich. W tym artykule będziemy instalować

Konfigurowanie platformy Ghost Professional Publishing w OpenBSD 6

Konfigurowanie platformy Ghost Professional Publishing w OpenBSD 6

Ghost to najnowszy i najlepszy start w rywalizacji z WordPress. Tworzenie motywów jest szybkie i łatwe do nauczenia się, ponieważ twórcy Ghost zdecydowali się użyć obu

Jak wdrożyć Ghost v0.11 LTS na Fedorze 25

Jak wdrożyć Ghost v0.11 LTS na Fedorze 25

Używasz innego systemu? Ghost jest platformą blogową typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od 201 lat

Jak zainstalować MODX Revolution na FreeBSD 11 FAMP VPS

Jak zainstalować MODX Revolution na FreeBSD 11 FAMP VPS

Używasz innego systemu? MODX Revolution to szybki, elastyczny, skalowalny, open source, system zarządzania treścią klasy korporacyjnej (CMS) napisany w języku PHP. To ja

Jak zainstalować MODX Revolution na CentOS 7 LAMP VPS

Jak zainstalować MODX Revolution na CentOS 7 LAMP VPS

Używasz innego systemu? MODX Revolution to szybki, elastyczny, skalowalny, darmowy i open source, system zarządzania treścią dla przedsiębiorstw (CMS) napisany w

Jak wdrożyć Ghost v0.11 LTS na Ubuntu 16.04

Jak wdrożyć Ghost v0.11 LTS na Ubuntu 16.04

Używasz innego systemu? Ghost jest platformą blogową typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od 201 lat

Tworzenie bloga Jekyll na CentOS 7

Tworzenie bloga Jekyll na CentOS 7

Używasz innego systemu? Jekyll jest dobrą alternatywą dla WordPress. Nie wymaga żadnych baz danych i działa w języku znanym wielu osobom

Jak wdrożyć Ghost v0.11 LTS na CentOS 7.3

Jak wdrożyć Ghost v0.11 LTS na CentOS 7.3

Używasz innego systemu? Ghost jest platformą blogową typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od 201 lat

Uruchamianie WordPress na OpenBSD 6.5 z OpenBSDs HTTPD

Uruchamianie WordPress na OpenBSD 6.5 z OpenBSDs HTTPD

Wprowadzenie Im bliżej domyślnej instalacji OpenBSD i bez tylu dodanych pakietów, tym bezpieczniejsze będzie. Chociaż tym bardziej przecinek

Instalacja Fork CMS na Debianie 9

Instalacja Fork CMS na Debianie 9

Używasz innego systemu? Fork to open source CMS napisany w PHP. Kod źródłowy Forks jest hostowany na GitHub. Ten przewodnik pokaże Ci, jak zainstalować Fork CM

Jak wdrożyć Ghost na Ubuntu 16.04

Jak wdrożyć Ghost na Ubuntu 16.04

Używasz innego systemu? Ghost to platforma blogowa typu open source, która zyskuje popularność wśród programistów i zwykłych użytkowników od czasu wydania z 2013 roku. ja

Jak zainstalować rewolucję MODX na Fedorze 26 LAMP VPS

Jak zainstalować rewolucję MODX na Fedorze 26 LAMP VPS

Używasz innego systemu? MODX Revolution to szybki, elastyczny, skalowalny, darmowy i open source, system zarządzania treścią dla przedsiębiorstw (CMS) napisany w

Instalowanie Fork CMS na Fedorze 28

Instalowanie Fork CMS na Fedorze 28

Używasz innego systemu? Fork to open source CMS napisany w PHP. Kod źródłowy Forks jest hostowany na GitHub. Ten przewodnik pokaże Ci, jak zainstalować Fork CM

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.