GNU/Linux >> Znalost Linux >  >> Linux

Kompletní průvodce self-hosting Ghost CMS s Dockerem

Ghost je open source redakční systém, který je vhodný pro blog, newsletter nebo členský web.

Je superrychlý a optimalizovaný pro SEO. Milujeme to tady v Linux Handbook. Náš web samozřejmě používá Ghost.

Nyní se můžete rozhodnout pro spravovanou instanci Ghost od tvůrců samotného Ghostu. Stálo by vás to hodně, ale nebudete muset vynakládat úsilí na nasazení Ghost, jeho aktualizaci a údržbu. A samozřejmě to pomáhá rozvoji projektu Ghost.

Pokud se chcete vyhnout velkým výdajům nebo vzít věci do svých rukou přístupem „udělej si sám“, můžete Ghost hostit na svém serveru.

V tomto tutoriálu vám ukážu kroky k nasazení Ghost s Dockerem.

Vlastní hostování Ghost s Docker

Tady je ta věc. Někteří poskytovatelé cloudových serverů, jako je DigitalOcean, také poskytují nasazení Ghost jedním kliknutím. To by mohla být snadná cesta ven, pokud nechcete mít potíže s počátečním nastavením a konfigurací Ghost.

Kromě toho se podívejme, co potřebujete k nasazení Ghost s Dockerem na linuxovém serveru.

Požadavky

Kromě znalosti příkazů Linuxu zde bude užitečná také znalost základů Docker Compose.

  • Server Linux. Můžete použít fyzický server, virtuální počítač nebo cloudové servery. Můžete se zaregistrovat u našeho partnera Linode a získat kredity v hodnotě 100 $ zdarma.
  • Docker a Docker Compose nainstalované na vašem serveru.
  • Přístup k DNS vaší domény, kam chcete Ghost nasadit.
  • Nastavení reverzního proxy serveru Nginx s přesměrováním www/bez www a povolenými limity nahrávání.

Krok 0:Připravte úvodní nastavení

V systému musíte mít nainstalovaný Docker a Docker Compose. Pokyny pro Ubuntu naleznete v těchto výukových programech.

Kromě toho musíte mít také nastavení reverzního proxy serveru Ngnix. To je výhodné, pokud chcete mít na stejném serveru nainstalováno více než jeden Ghost nebo nějakou jinou webovou službu.

Nyní jsem se tomuto tématu podrobně věnoval v níže uvedeném tutoriálu, takže zde nebudu opakovat stejné kroky. Toto nastavení však musíte mít ve svém systému.

Postupujte podle tohoto návodu až do kroku 4:

Krok 1:Příprava nasazení Ghost

Zde používám reverzní proxy metodu Jwilder, protože bere v úvahu certifikáty SSL, přesměrování www/bez www a povolené limity nahrávání.

Jak zacházet s SSL certifikáty je již popsáno v odkazu sdíleném výše v sekci požadavky. Dále popíšu, jak povolit přesměrování www/newww a zvýšit povolené limity nahrávání.

Přesměrování na WWW/non-WWW

V závislosti na vašich preferencích SEO můžete chtít nastavit přesměrování www na non-www nebo naopak. Pokud je například váš blog hostován na adrese domain.com, uživatelé navštěvující www.domain.com na něj musí být přesměrováni (jak funguje doména GitHubu).

Podobně, pokud jej hostujete na adrese www.domain.com, uživatelé navštěvující doménu domain.com musí být přesměrováni (jak funguje doména Linode).

WWW na jiné než WWW

Vytvořte soubor s názvem www.domain.com v nginx docker vytvořte adresář s následujícím obsahem a uložte jej:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Ne-WWW na WWW

Vytvořte soubor s názvem domain.com v nginx docker vytvořte adresář s následujícím obsahem a uložte jej:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Nyní předpokládejme, že chcete použít WWW k přesměrování mimo WWW. Jediné, co musíte udělat, je svázat a připojit soubor v sekci svazků konfigurace služby Nginx:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Zvýšení povolených limitů nahrávání

Nahrávání obrázků může být ovlivněno výchozí maximální velikostí nahrávání 50 MB. Chcete-li nastavit maximální limit nahrávání a vyhnout se problémům při nahrávání obrázků na Docker, řekněme pro 1 GB, vytvořte soubor s názvem client_max_upload_size.conf a uložte jej s následujícím obsahem:

client_max_body_size 1G;

Později jej budete muset připojit stejně jako v předchozím souboru:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Spusťte docker-compose up -d z adresáře Nginx a aktualizujte konfiguraci Nginx.

Za prvé, konfigurace nasazení Ghost se v podstatě skládá ze dvou hlavních komponent:

  • Backend databáze MariaDB
  • Samotný Ghost jako webové rozhraní

Protože Ghost nasazujete s Dockerem, všechny výše uvedené komponenty jsou nastaveny jako jejich vlastní kontejnery.

Pro databázovou službu použiji interní síť s názvem ghost protože musí být viditelný pouze pro službu Ghost.

networks:
  - ghost

Ale pro službu Ghost samozřejmě stejná net síť použitá v konfiguraci reverzního proxy musí být specifikována spolu s ghost sítě a teprve poté by bylo možné jej uvést do provozu pomocí kontejneru Nginx Docker.

networks:
  - net
  - ghost

Nyní zvažte, jak jsou jednotlivě konfigurovány pomocí Docker Compose:

Pro MariaDB používám oficiální obraz MariaDB 10.5.3, který je dostupný na Docker Hub:

    ghostdb:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        env_file:
            - ./mariadb.env
        networks:
            - ghost

Zde používám svazek nazvaný ghostdb pro uložení dat databáze na /var/lib/mysql . Také jsem nastavil  relevantní proměnné prostředí v env_file s názvem mariadb.env :

MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost

Pro samotnou službu Ghost namísto použití latest konkrétně upřednostňuji použití čísla verze označené na Docker Hub spuštěném vývojáři jako stabilní verzi. Zde, v době psaní tohoto článku, je to 4.5.0 :

    ghost:
        image: ghost:4.5.0
        volumes:
            - ghost:/var/lib/ghost/content
            - ./config.json:/var/lib/ghost/config.production.json
        env_file:
            - ./ghost-mariadb.env
        restart: on-failure
        depends_on: ghostdb
        networks:
            - net
            - ghost

Vazba byla připojena config.json soubor se skládá z nastavení SMTP (Mailgun) a základního nastavení rotace protokolu (zaměřeno na chybu):

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "mail": {
    "transport": "SMTP",
    "options": {
        "service": "Mailgun",
        "host": "smtp.eu.mailgun.org",
        "port": 465,
        "secureConnection": true,
        "auth": {
            "user": "replace-me-with-a-mailgun-configured-email-address",
            "pass": "replace-me-with-the-relevant-mailgun-apikey-of-50-characters"
        }
    }
  },
  "logging": {
    "path": "content/logs/",
    "level": "error",
    "rotation": {
      "enabled": true,
      "count": 10,
      "period": "1d"
  },
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

Pokud musí používat MySQL/MariaDB, musí se služba Ghost spoléhat na ghostdb službu, aby byla funkční. To lze zajistit pouze v případě, že jste připojili vazbu ghost-mariadb.env soubor (zobrazený v sekci svazky databázové služby Ghost) se správnou konfigurací databáze podle mariadb.env v databázové službě, což by bylo:database__client , database__connection__host , database__connection__user , database__connection__password a database__connection__database .

Také přiřadím každé z proměnných prostředí VIRTUAL_HOST a LETSENCRYPT_HOST do obou domain.com a také www.domain.com respektive, aby bylo zajištěno, že oba existují. To absolutně zajišťuje, že přesměrování a certifikáty SSL fungují hladce a bez problémů. Chci, aby moje hlavní adresa URL byla bez www, takže ji nastavím jako url=https://domain.com . Protože toto nastavení budete používat pro použití na úrovni produkce, NODE_ENV proměnná je nastavena do produkčního režimu. Tyto podrobnosti je také třeba přidat.

Proto celý soubor prostředí (ghost-mariadb.env ) pro službu Ghost by bylo:

VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production

database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost

Nekonzistence ve výše uvedených datech by mohla způsobit, že Ghost chybně přejde na SQLite. To nechceš. Ujistěte se tedy, že všechny výše uvedené parametry správně odpovídají databázové službě probírané pro mariadb.env výše.

Každá z databázových služeb bude mít své vlastní příslušné svazky Dockeru pro ukládání uživatelských a obsahových dat. Vytvořím je jako externí svazky:

docker volume create ghostdb
docker volume create ghost

Nyní musíte zahrnout  volumes sekce v souboru pro psaní dockeru s následujícími  podrobnostmi:

volumes:
  ghost:
    external: true
  ghostdb:
    external: true

Nyní máte potřebné komponenty pro nasazení Ghost.

Krok 2:Nasazení Ghost

Nyní byste měli mít připravený soubor  docker-compose. Je čas použít tento soubor.

Vytvořte na svém serveru adresář Ghost docker compose:

mkdir ghost

Přejděte do adresáře a upravte potřebné soubory:

cd ghost

Nyní vytvořte následující soubor docker-compose na základě našich dosavadních diskuzí:

version: '3.7'
services:
    ghostdb:
       image: mariadb:10.5.3
       volumes:
          - ghostdb:/var/lib/mysql
       restart: on-failure
       env_file:
          - ./mariadb.env
       networks:
          - ghost

    ghost:
      image: ghost:4.5.0
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost
volumes:
  ghost:
    external: true
  ghostdb:
    external: true

networks:
  net:
    external: true
  ghost:
    internal: true

Také nezapomeňte vytvořit další konfigurační soubory, jak je uvedeno výše:config.json , mariadb.env a ghost-mariadb.env ve stejném adresáři.

Spusťte instanci Ghost:

docker-compose up -d

Získejte přístup k doméně Ghost specifikované v konfiguraci pomocí adresy URL vaší zadané domény.

Krok 3:Nastavení účtu Ghost Admin

Pamatujte, že k nastavení účtu správce musíte přejít na domena.com/ghost a postupujte podle pokynů na obrazovce, dokud svůj web nepotvrdíte jako správce duchů.

Pro dvojitou kontrolu potvrďte, že skutečně používáte MySQL/MariaDB a ne SQLite. Přejděte na ikonu uživatele vlevo dole:

Nyní si můžete být jisti, že skutečně používáte samostatný databázový kontejner, který se zobrazí jako mysql bez ohledu na to, zda používáte obraz MySQL nebo MariaDB Docker:

Můžete také vidět, že další tři parametry:Verze, Prostředí a Pošta jsou nastaveny podle očekávání na základě našich výše uvedených kroků. Takže je to! Úspěšně jste nasadili Ghost jako samostatně hostovanou instanci na vašem serveru!

Tipy pro údržbu vaší instance Ghost hostované samostatně

Zde je několik tipů, které vám pomohou při údržbě instance Ghost.

Monitorování protokolů duchů v reálném čase

Pokud chcete zkontrolovat protokoly kontejneru během jeho nasazení v reálném čase, můžete spustit:

docker logs -f ghost_ghost_1

Zálohování a obnovení svazků duchů bez prostojů

Pomocí cloudu + místního přístupu můžete zálohovat a obnovovat své virtuální svazky bez prostojů.

Aktualizace Ghost Containers bez výpadku

Pomocí --scale flag na Docker Compose, můžete vytvořit nový kontejner založený na nejnovější verzi Ghost. Až bude hotovo, můžete starou odstranit. Výsledkem jsou nulové prostoje.

Existuje několik dalších tipů, které si můžete přečíst v článku níže.

Můžete také chtít nasadit a spravovat duchy motivů pomocí akcí GitHub, abyste si zjednodušili práci.

Pokud narazíte na chybu, máte problémy nebo máte návrh, dejte mi prosím vědět zanecháním komentáře níže.


Linux
  1. Jak nainstalovat WordPress s Dockerem, snadno sledovatelný průvodce

  2. Kompletní průvodce pro začátečníky k protokolování dockeru

  3. 7 užitečných tipů pro vlastní hostování instance Ghost pomocí Dockeru

  1. Grep Regex:Kompletní průvodce

  2. Kompletní průvodce k samohostování Rocket.Chat s Dockerem

  3. Jak aktualizovat kontejner Docker s nulovým výpadkem

  1. Docker Guide:Deploying Ghost Blog with MySQL a Traefik with Docker

  2. Linux Commands - Kompletní průvodce

  3. Kompletní průvodce instalací Linuxu na Chromebook