Ako nasadiť Ghost Blog s Nginx na Debian 12


Na tejto stránke

  1. Predpoklady
  2. Krok 1 – Nakonfigurujte bránu firewall UFW
  3. Krok 2 - Nainštalujte Nginx
  4. Krok 3 – Nainštalujte Node.js
  5. Krok 4 - Nainštalujte MySQL pomocou Docker
  6. Krok 5 - Nainštalujte Ghost

    1. Nainštalujte Ghost-CLI
    2. Pripravte Ghost Directory
    3. Nainštalujte Ghost
  7. Krok 6 – Nainštalujte SSL
  8. Krok 7 - Nakonfigurujte Nginx
  9. Krok 9 – Spustite stránku
  10. Krok 10 – Dokončite nastavenie
  11. Krok 11 - Nakonfigurujte Mailer
  12. Krok 12 - Aktualizujte Ghost
  13. Záver

Ghost je platforma na blogovanie s otvoreným zdrojom, ktorá vám pomôže vytvoriť profesionálne vyzerajúci blog. Bol spustený v roku 2013 ako alternatíva k WordPress. Je napísaný v jazyku JavaScript a využíva ho knižnica Node.js.

V tomto návode preskúmame, ako nainštalovať Ghost CMS pomocou Nginx a MySQL na server poháňaný Debianom 12. Na zabezpečenie našej inštalácie použijeme certifikát Let's Encrypt SSL.

Predpoklady

    Server so systémom Debian 12 s minimálne 2 GB RAM.

    Používateľ bez oprávnenia root s oprávneniami sudo.

    Plne kvalifikovaný názov domény (FQDN) ako example.com smerujúci na váš server.

    Uistite sa, že je všetko aktualizované.

    $ sudo apt update 
    $ sudo apt upgrade
    

    Niekoľko balíkov, ktoré váš systém potrebuje.

    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

    Niektoré z týchto balíkov už môžu byť vo vašom systéme nainštalované.

Krok 1 – Nakonfigurujte bránu firewall UFW

Prvým krokom je konfigurácia brány firewall. Debian sa štandardne dodáva s ufw (Uncomplicated Firewall).

Skontrolujte, či je spustený firewall.

$ sudo ufw status

Mali by ste dostať nasledujúci výstup.

Status: inactive

Povoľte port SSH, aby firewall pri jeho povolení neprerušil aktuálne pripojenie.

$ sudo ufw allow OpenSSH

Povoliť aj porty HTTP a HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Povoľte bránu firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Znova skontrolujte stav brány firewall.

$ sudo ufw status

Mali by ste vidieť podobný výstup.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Krok 2 - Nainštalujte Nginx

Debian 12 sa dodáva so staršou verziou Nginx. Ak chcete nainštalovať najnovšiu verziu, musíte si stiahnuť oficiálne úložisko Nginx.

Importujte podpisový kľúč Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Pridajte úložisko pre stabilnú verziu Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aktualizujte systémové úložiská.

$ sudo apt update

Nainštalujte Nginx.

$ sudo apt install nginx

Overte inštaláciu. Na spustenie príkazu v Debiane sa vyžaduje sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Spustite server Nginx.

$ sudo systemctl start nginx

Krok 3 – Nainštalujte Node.js

Ghost Installer potrebuje na fungovanie Nodejs. Prvým krokom je import kľúča Nodesource GPG.

$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg

Ďalej vytvorte súbor úložiska Nodesource. Nainštalujeme Node 18x, čo je aktuálna verzia LTS (Long Term Support), čo odporúča Ghost.

$ NODE_MAJOR=18
$ echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Aktualizujte zoznam systémového úložiska.

$ sudo apt update

Nainštalujte Node.

$ sudo apt install nodejs -y

Potvrďte inštaláciu uzla.

$ node --version
v18.18.2

Krok 4 - Nainštalujte MySQL pomocou Docker

Debian sa už nedodáva s MySQL. Namiesto toho sa dodáva s MariaDB. Ghost podporuje iba MySQL. Ghost môžete vyladiť tak, aby fungoval s MariaDB, ale neodporúča sa to. Keďže oficiálne úložiská MySQL neboli v čase písania tohto návodu aktualizované pre Debian 12, nainštalujeme ho pomocou Dockera.

Importujte kľúč GPG Docker.

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

Vytvorte súbor úložiska Docker.

$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aktualizujte zoznam systémového úložiska.

$ sudo apt update

Nainštalujte Docker a Docker Compose.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

V predvolenom nastavení Docker vyžaduje oprávnenia root. Ak sa chcete vyhnúť používaniu sudo pri každom spustení príkazu docker, pridajte svoje používateľské meno do skupiny docker.

$ sudo usermod -aG docker $(whoami)

Ak chcete povoliť túto zmenu, budete sa musieť odhlásiť zo servera a znova sa prihlásiť ako rovnaký používateľ alebo použiť nasledujúci príkaz.

$ su - ${USER}

Potvrďte, že váš používateľ je pridaný do skupiny Docker.

$ groups
navjot wheel docker

Teraz, keď je nainštalovaný Docker, musíme vytvoriť súbor na zostavenie Docker pre MySQL. Vytvorte adresár pre MySQL docker.

$ mkdir ~/mysql

Vytvorte a otvorte súbor docker-compose.yml na úpravu.

$ nano docker-compose.yml

Vložte do nej nasledujúci kód.

services:
  database:
    image: container-registry.oracle.com/mysql/community-server:latest
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostpassword
      MYSQL_DATABASE: ghostdb
    ports:
      - "3306:3306"
    volumes:
      - ./mysql:/var/lib/mysql

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Tu sme nastavili heslo root a poverenia MySQL pre databázu Ghost. Tie sa vytvoria pri spustení kontajnera.

Spustite kontajner MySQL.

$ docker compose up -d

Skontrolujte stav kontajnera Docker.

$ docker ps
CONTAINER ID   IMAGE                                                         COMMAND                  CREATED         STATUS         PORTS                                                        NAMES
ec42fb205f1e   container-registry.oracle.com/mysql/community-server:latest   "/entrypoint.sh mysq…"   4 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060-33061/tcp   mysql

Ghost sa môže pripojiť ku kontajneru MySQL pomocou portu 3306 a vykonávať na ňom operácie.

Krok 5 - Nainštalujte Ghost

Ghost môžeme nainštalovať aj pomocou Dockera, čo môže veci zjednodušiť, ale tu to robiť nebudeme.

Inštalácia Ghost bude pozostávať z troch komponentov – nástroja príkazového riadka Ghost-CLI, ktorý inštaluje a spravuje aktualizácie blogu Ghost a samotného balíka blogu.

Nainštalujte Ghost-CLI

Spustite nasledujúci príkaz a nainštalujte nástroj Ghost-CLI.

$ sudo npm install ghost-cli@latest -g

Pripravte Ghost Directory

Vytvorte koreňový adresár Ghost.

$ sudo mkdir -p /var/www/html/ghost

Nastavte vlastníctvo adresára na aktuálneho používateľa.

$ sudo chown $USER:$USER /var/www/html/ghost

Nastavte správne povolenia adresára.

$ sudo chmod 755 /var/www/html/ghost

Prepnite sa do adresára Ghost.

$ cd /var/www/html/ghost

Nainštalujte Ghost

Inštalácia Ghost je proces s jedným príkazom.

$ ghost install

Počas inštalácie vám nástroj CLI položí niekoľko otázok na konfiguráciu blogu.

  • Adresa URL blogu: Zadajte úplnú adresu URL blogu spolu s protokolom https. (https://example.com)
  • Názov hostiteľa MySQL: Stlačením klávesu Enter použijete predvolenú hodnotu localhost, pretože naša inštalácia Ghost a MySQL sú na rovnakom serveri.
  • Používateľské meno MySQL: Ako používateľské meno MySQL zadajte ghost.
  • Heslo MySQL: Zadajte heslo používateľa root, ktoré ste predtým vytvorili do súboru docker.
  • Názov databázy duchov: Zadajte názov databázy (ghostdb) nakonfigurovaný v súbore doku.
  • Heslo sudo: pri vykonávaní administratívnych úloh bude vyžadovať vaše heslo sudo.
  • Nastaviť Nginx? Ghost-CLI zvyčajne zistí vašu inštaláciu Nginx a automaticky ju nakonfiguruje pre váš blog. Ale to funguje iba pre Nginx nainštalovaný pomocou balíka OS. Keďže sme ho nainštalovali pomocou úložiska Nginx, Ghost ho nedokáže zistiť a automaticky ho preskočí.
  • Nastaviť SSL?: Keďže sa preskočila konfigurácia Nginx, nástroj CLI preskočí aj nastavenie SSL.
  • Nastaviť systemd?: Ghost sa vás opýta, či chcete nastaviť systémovú službu pre Ghost. Pokračujte stlačením Y.
  • Spustiť Ghost?: Stlačením Y spustíte inštaláciu Ghost. Nebude to však fungovať, pretože Nginx a SSL ešte nie sú nakonfigurované.

Krok 6 – Nainštalujte SSL

Než budeme pokračovať, musíme si nainštalovať nástroj Certbot a nainštalovať SSL certifikát pre našu doménu.

Na inštaláciu Certbotu použijeme inštalačný program balíkov Snapd. Snapd vždy obsahuje najnovšiu stabilnú verziu Certbotu. Debian sa však nedodáva s nainštalovaným Snapd. Najprv ho nainštalujte.

$ sudo apt install snapd

Uistite sa, že vaša verzia snapdu je aktuálna.

$ sudo snap install core
$ sudo snap refresh core

Nainštalujte Certbot.

$ sudo snap install --classic certbot

Pomocou nasledujúceho príkazu zaistite spustenie príkazu Certbot vytvorením symbolického odkazu na adresár /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Overte inštaláciu.

$ certbot --version
certbot 2.7.1

Vygenerujte certifikát SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d example.com

Vyššie uvedený príkaz stiahne certifikát do adresára /etc/letsencrypt/live/example.com na vašom serveri.

Vygenerujte certifikát Diffie-Hellman group.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Skontrolujte službu plánovača obnovy Certbot.

$ sudo systemctl list-timers

Ako jednu zo služieb naplánovaných na spustenie nájdete snap.certbot.renew.service.

NEXT                        LEFT          LAST                        PASSED       UNIT                       ACTIVATES
Tue 2023-10-17 00:00:00 UTC 14h left    Mon 2023-10-16 00:00:18 UTC 9h ago       dpkg-db-backup.timer         dpkg-db-backup.service
Mon 2023-10-16 19:12:00 UTC 9h left     Mon 2023-10-16 07:27:11 UTC 2h 17min ago snap.certbot.renew.timer     snap.certbot.renew.service
Mon 2023-10-16 20:49:14 UTC 11h left    Mon 2023-10-16 07:48:12 UTC 1h 56min ago apt-daily.timer              apt-daily.service

Vykonajte suchý chod procesu a skontrolujte, či obnovenie SSL funguje správne.

$ sudo certbot renew --dry-run

Ak nevidíte žiadne chyby, všetko je nastavené. Váš certifikát sa automaticky obnoví.

Krok 7 - Nakonfigurujte Nginx

Vytvorte a otvorte súbor /etc/nginx/conf.d/ghost.conf na úpravu.

$ sudo nano /etc/nginx/conf.d/ghost.conf

Vložte nasledujúci kód do súboru ghost.conf. Nahraďte všetky výskyty example.com svojou doménou.

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  location / { 
  	return 301 https://$server_name$request_uri; 
  }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;
    
  access_log /var/log/nginx/ghost.access.log;
  error_log /var/log/nginx/ghost.error.log;
  client_max_body_size 20m;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
  ssl_prefer_server_ciphers off;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:10m;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  ssl_stapling on;
  ssl_stapling_verify on;
  resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
  resolver_timeout 2s;

  ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:2368;
  }
}

Vyššie uvedená konfigurácia presmeruje všetky HTTP požiadavky na HTTPS a bude slúžiť ako proxy pre službu Ghost, ktorá ju bude obsluhovať prostredníctvom vašej domény.

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Otvorte súbor /etc/nginx/nginx.conf na úpravu.

$ sudo nano /etc/nginx/nginx.conf

Pridajte nasledujúci riadok pred riadok include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Overte svoju konfiguráciu Nginx.

$ sudo nginx -t

Ak nevidíte žiadne chyby, znamená to, že môžete začať. Ak chcete použiť konfiguráciu, reštartujte server Nginx.

$ sudo systemctl restart nginx

Krok 9 – Spustite stránku

Teraz môžete svoju inštaláciu overiť otvorením https://example.com vo svojom webovom prehliadači. Zobrazí sa nasledujúca stránka označujúca úspešnú inštaláciu.

Krok 10 – Dokončite nastavenie

Ak chcete dokončiť nastavenie svojho blogu Ghost, navštívte v prehliadači https://example.com/ghost. Extra /ghost na konci domény vášho blogu vás presmeruje na administrátorský panel Ghost alebo v tomto prípade na nastavenie, pretože k nemu pristupujete prvýkrát.

Tu budete musieť vytvoriť svoj účet správcu a zvoliť názov blogu.

Zadajte svoje údaje a pokračujte kliknutím na tlačidlo Vytvoriť účet a začať publikovať.

Ďalej sa dostanete na nasledujúcu obrazovku, kde máte k dispozícii možnosti, ako je napísanie prvého príspevku, prispôsobenie stránky a import členov.

Na preskúmanie vyberieme správcu Explore Ghost a prejdeme priamo na panel. Na konci nastavenia vás privíta panel Ghost's Administration.

Ak chcete prepnúť do tmavého režimu, môžete tak urobiť kliknutím na prepínač vedľa tlačidla ozubeného kolieska nastavení v spodnej časti stránky nastavení.

Uvidíte predvolený príspevok. Zverejnenie môžete zrušiť alebo odstrániť a začať uverejňovať.

Krok 11 - Nakonfigurujte Mailer

Ghost pôsobí nielen ako blogovacia platforma, ale aj ako správca newsletterov. Pre každodenné operácie môžete použiť akúkoľvek transakčnú poštovú službu na prácu s Ghostom na odosielanie pošty. Ak však chcete posielať bulletiny cez Ghost, jediným podporovaným oficiálnym hromadným odosielateľom je Mailgun. Môžete použiť aj inú službu bulletinu, ale na to budete musieť použiť integračnú funkciu Zapier Ghost.

Najprv nakonfigurujeme službu SMTP pre transakčné e-maily. Na úpravu otvorte súbor /var/www/html/ghost/config.production.json.

$ nano /var/www/html/ghost/config.production.json

Nájdite nasledujúce riadky.

 "mail": {
    "transport": "Direct"
  },

Nahraďte ich nasledujúcim kódom.

"mail": {
    "from": "'HowtoForge Support' [email ",
    "transport": "SMTP",
    "options": {
        "host": "YOUR-SES-SERVER-NAME",
        "port": 465,
        "service": "SES",
        "auth": {
            "user": "YOUR-SES-SMTP-ACCESS-KEY-ID",
            "pass": "YOUR-SES-SMTP-SECRET-ACCESS-KEY"
        }
    }
},

Tu používame službu Amazon SES Mail, pretože je cenovo dostupná a nevyžaduje mesačné poplatky.

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y. Po dokončení reštartujte aplikáciu Ghost, aby sa zmeny prejavili.

$ ghost restart

Ak chcete nakonfigurovať nastavenia bulletinu, navštívte časť Nastavenia >> E-mailový bulletin.

Kliknutím na odkaz Konfigurácia pošty rozbaľte.

Vyplňte svoju oblasť Mailgun, doménu a kľúč API.

Nastavenia uložíte kliknutím na tlačidlo Uložiť vpravo hore.

Ak chcete otestovať doručovanie bulletinu, vytvorte nový testovací príspevok, stlačte tlačidlo publikovať a vyberte možnosť Iba e-mail. Ak chcete zverejniť aj príspevok, vyberte možnosť Zverejniť a poslať e-mailom.

Pokračujte kliknutím na tlačidlo Pokračovať, posledná kontrola. Na ďalšej stránke sa znova zobrazí výzva na konečné potvrdenie.

Kliknutím na tlačidlo Odoslať e-mail hneď teraz odošlete bulletin. Po odoslaní pošty dostanete nasledujúcu správu.

Skontrolujte svoj e-mail pre príspevok.

Krok 12 - Aktualizujte Ghost

Existujú dva typy aktualizácií Ghost – menšie aktualizácie a veľké aktualizácie.

Najprv urobte úplnú zálohu, ak chcete spustiť menšiu aktualizáciu. Vytvára zálohu všetkých príspevkov, členov, tém, obrázkov, súborov a súborov s presmerovaním.

$ cd /var/www/html/ghost
$ ghost backup

Spustite príkaz update na vykonanie menšej aktualizácie.

$ ghost update

Ak chcete vykonať veľkú aktualizáciu, mali by ste postupovať podľa oficiálneho podrobného sprievodcu aktualizáciou na stránke Ghost. V závislosti od aktuálnej verzie a hlavnej verzie, na ktorú chcete aktualizovať, sa kroky budú líšiť.

Záver

Toto uzatvára náš návod, ako nastaviť Ghost CMS na vašom serveri Debian 12 pomocou Nginx. Ak máte nejaké otázky alebo spätnú väzbu, podeľte sa o ne v komentároch nižšie.

Súvisiace články: