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.