Hostować Ghost na Managed VPS to publikować artykuły, gromadzić członków i wysyłać newslettery z maszyny, która należy do Państwa, a nasze zespoły dbają o jej aktualność i nadzorują ją dniem i nocą. Ghost to wolne oprogramowanie na licencji MIT. Ten poradnik podąża za jego oficjalną dokumentacją: Ghost-CLI lub Docker Compose, MySQL, HTTPS, e-maile, kopie zapasowe i aktualizacje.
Autor: Simon Vasconcelos Lee
Opublikowano 9 listopada 2026Czas czytania: 13 minut
content proszę kopiować, a aktualizować przez ghost update lub docker compose pull: projekt publikuje aktualizacje co tydzień.Ghost to profesjonalna, wolna platforma publikacyjna napisana dla Node.js. Łączy w jednym miejscu to, co niezależna publikacja często składa z kilku narzędzi.
Według dokumentacji produkt ma te same funkcje przy samodzielnym hostingu. To, co go otacza, należy do Państwa: wysyłka newsletterów, analityka webowa, CDN i pełne kopie zapasowe strony.
Ghost jest udostępniany na licencji MIT. Zezwala ona na używanie, kopiowanie, modyfikowanie, łączenie, publikowanie, rozpowszechnianie, sublicencjonowanie i sprzedaż oprogramowania, pod jednym warunkiem: w każdej kopii musi pozostać informacja o prawach autorskich i tekst licencji. Mogą więc Państwo uruchomić Ghost w firmie, dostosować go i publikować w nim dla swoich klientów, bez zakupu licencji.
Licencja obejmuje kod. Nazwa i logo należą do Ghost Foundation i podlegają jej polityce znaków towarowych: proszę ją przeczytać, jeśli budują Państwo ofertę wokół oprogramowania. Ghost jest zastrzeżonym znakiem towarowym Ghost Foundation.
This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. Po polsku: ta publikacja jest niezależna od Ghost Foundation i nie jest z nią powiązana, przez nią autoryzowana, sponsorowana ani zatwierdzona.
Projekt dokumentuje dwie drogi do produkcji. Ghost-CLI to instalacja, którą oficjalnie zaleca, a Docker Compose to „preview”, o której mówi, że jest zupełnie nowa. Wskazuje też, że zmierza ku temu narzędziu Docker, zamiast rozwijać Ghost-CLI, i dostarcza kreator do przejścia z jednego na drugie.
| Punkt | Ghost-CLI | Docker Compose (preview) |
|---|---|---|
| System | Ubuntu 22.04, 24.04 lub 26.04 | Serwer Linux z Dockerem 20.10.13 lub nowszym |
| Pamięć | Co najmniej 1 GB | Projekt podaje jako przykład serwer z 2 GB i 1 procesorem |
| Serwer WWW i HTTPS | Nginx i certyfikat Let’s Encrypt, instalowane przez Ghost-CLI | Caddy, w kontenerze, który obsługuje TLS |
| Baza danych | MySQL 8.0 lub 8.4 zainstalowany na serwerze | MySQL w kontenerze |
| Analityka webowa | Niezgodna | Dostępna, z kontem Tinybird |
| Sieć społecznościowa (ActivityPub) | Usługa hostowana przez projekt, bezpłatna w granicach limitów użycia | Ta sama usługa domyślnie albo Państwa własna, samodzielnie hostowana |
Domenę proszę skierować na serwer przed instalacją: certyfikat instaluje się w trakcie konfiguracji. Na VPS Simafri odwiedzający docierają na porty 80 i 443, pod nazwą domeny serwera, z rekordami A i AAAA. Adres strony zapisuje się w całości, z protokołem, jak https://example.com: adres IP powoduje błędy.
Poza podaną wyżej pamięcią projekt nie określa ani dysku, ani obciążenia: rozmiar zależy od ruchu, obrazów i mediów. Na Managed VPS wystarczy opisać nam swoją publikację, a polecimy odpowiedni rozmiar.
Ghost-CLI używa się z użytkownikiem, który nie jest rootem, a jego nazwa nie jest ghost, ponieważ ta nazwa koliduje z narzędziem. Proszę utworzyć go z konta root, zastępując user wybraną nazwą:
adduser <user>
usermod -aG sudo <user>
su - <user>
Proszę zaktualizować system, zainstalować Nginx (co najmniej 1.9.5 dla SSL) i MySQL. Linia ufw otwiera HTTP i HTTPS, jeśli ta zapora jest aktywna:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
W nowszych wersjach Ubuntu konto root MySQL uwierzytelnia się przez gniazdo, czego Ghost nie obsługuje. Proszę nadać mu hasło:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
Ghost wymaga Node.js 22: wersje 20, 21, 23 i kolejne nie są obsługiwane. Projekt każe zainstalować go dla całego systemu, w ten sposób:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
sudo npm install ghost-cli@latest -g
Ghost instaluje się we własnym katalogu, z określonym właścicielem i uprawnieniami. Zamiast sitename proszę wpisać wybraną nazwę:
sudo mkdir -p /var/www/sitename
sudo chown <user>:<user> /var/www/sitename
sudo chmod 775 /var/www/sitename
cd /var/www/sitename
ghost install
Polecenie zadaje wtedy pytania, a projekt zaleca odpowiadać twierdząco na każdy proponowany krok:
https://.localhost jako host, root i hasło ustawione wyżej, a potem nazwa bazy, którą tworzy Ghost-CLI.Strona odpowiada wtedy, a https://example.com/ghost zaprasza do utworzenia konta właściciela. Jeśli instalacja zostanie przerwana, ghost setup wznawia konfigurację; jeśli się nie powiedzie, ghost uninstall czyści lepiej niż usunięcie katalogu. ghost doctor sprawdza system w każdej chwili.
Projekt przedstawia tę metodę jako „preview”: w jego oczach jest zupełnie nowa. To ona pozwala samodzielnie hostować analitykę webową i ActivityPub.
Na serwerze z zainstalowanym Dockerem proszę pobrać oficjalne narzędzia do /opt/ghost i skopiować dwa pliki przykładowe:
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
W pliku .env proszę uzupełnić te wartości:
DOMAIN: domena strony, na przykład example.com.ADMIN_DOMAIN: osobna domena administracji, jeśli Państwo sobie życzą.DATABASE_ROOT_PASSWORD i DATABASE_PASSWORD: dwa hasła wylosowane poleceniem openssl rand -hex 32. Ustawia się je raz na zawsze: po zainicjowaniu bazy ich zmiana psuje połączenie.W caddy/Caddyfile proszę odkomentować blok odpowiadający Państwa przypadkowi: przekierowanie z www na domenę bez przedrostka albo odwrotnie, lub osobna domena administracji. Następnie proszę uruchomić Ghost i dokończyć konfigurację pod /ghost:
docker compose pull
docker compose up -d
HTTP_PORT i HTTPS_PORT, jeśli Ghost trafi za inne odwrotne proxy. MySQL pozostaje w wewnętrznej sieci kontenerów.data/ghost, a baza w data/mysql, dwa miejsca ustawiane w .env.-f compose.yml -f compose.ipv6.yml do poleceń docker compose up.Analityka wymaga konta Tinybird, usługi zewnętrznej. Z katalogu /opt/ghost proszę zalogować się, wdrożyć jej konfigurację i pobrać tokeny do wklejenia w .env, w sekcji „Tinybird configuration”:
docker compose run --rm tinybird-login
docker compose run --rm tinybird-sync
docker compose run --rm tinybird-deploy
docker compose run --rm tinybird-login get-tokens
ActivityPub działa od razu z usługą hostowaną przez projekt, bezpłatną w granicach limitów użycia, które publikuje jej dokumentacja. Aby samodzielnie hostować własną, proszę odkomentować ACTIVITYPUB_TARGET=activitypub:8080. Następnie w .env proszę włączyć wybrany profil lub profile i uruchomić kontenery ponownie:
COMPOSE_PROFILES=analytics,activitypub
docker compose pull
docker compose up -d
W przypadku ActivityPub projekt każe też odtworzyć Ghost i Caddy, poleceniem docker compose up -d --force-recreate ghost caddy.
Po sklonowaniu i konfiguracji bash scripts/migrate.sh kopiuje katalog content, importuje bazę do kontenera MySQL i uruchamia Caddy zamiast Nginx. Proponuje zatrzymanie Nginx, co wyłącza stronę: jeśli na serwerze działają inne strony, proszę odpowiedzieć nie. Nie usuwa żadnych danych. bash recovery_instructions.sh przywraca pierwotną stronę, jeśli przerwą Państwo migrację.
Administracja Ghost musi działać przez HTTPS, a projekt zaleca HTTPS dla całej strony: bez niego identyfikatory i hasła krążą jawnie. W Docker Compose zajmuje się tym Caddy. W Ghost-CLI certyfikat instaluje się przy instalacji, a po fakcie robi to polecenie:
ghost setup ssl
Aby zmienić adres strony zainstalowanej przez Ghost-CLI, ghost config url https://example.com aktualizuje konfigurację, a ghost restart ją stosuje.
Projekt radzi też osobną domenę administracji, która zmniejsza powierzchnię ataku. Ścieżka pozostaje /ghost/. W Ghost-CLI deklaruje się ją w config.production.json:
"admin": {
"url": "https://admin.example.com"
}
W Docker Compose proszę wpisać ADMIN_DOMAIN, odkomentować jej blok w Caddyfile i uruchomić docker compose up -d --force-recreate ghost caddy. Ta domena również potrzebuje rekordów A i AAAA.
MySQL 8 to jedyna baza, którą projekt obsługuje w produkcji. Ghost-CLI instaluje się z MySQL 8.0 lub 8.4, a plik Compose dostarcza obraz MySQL 8.0.
ghost config database.client, w katalogu strony, wskazuje używaną bazę.Ghost rozróżnia dwie wysyłki, które nie idą tą samą drogą. To najważniejsza rzecz do ustawienia po instalacji.
| Wysyłka | Przykłady | Co ją obsługuje |
|---|---|---|
| Transakcyjna | Zaproszenia zespołu, zapomniane hasła, rejestracje i linki logowania członków, kod logowania z nowego urządzenia | Konfiguracja mail Ghost, przez SMTP |
| Newslettery | Artykuły wysyłane do członków | API Mailgun, którego klucze wpisuje się w ustawieniach „Email newsletter” |
Dokumentacja zalicza tę konfigurację do wymaganych w produkcji. Ghost wysyła też kod e-mailem, gdy wykryje logowanie z nowego urządzenia: przekaźnik proszę ustawić przed zaproszeniem zespołu.
Na VPS Simafri wysyłka odbywa się przez uwierzytelniony przekaźnik SMTP, na porcie 587: adres posiadanego już konta pocztowego albo Simafri Suite.
"mail": {
"transport": "SMTP",
"from": "'Acme Support' <support@example.com>",
"options": {
"host": "smtp.example.com",
"port": 587,
"secure": false,
"requireTLS": true,
"auth": {
"user": "support@example.com",
"pass": "1234567890"
}
}
}
mail__transport=SMTP
mail__options__host=smtp.example.com
mail__options__port=587
mail__options__secure=false
mail__options__requireTLS=true
mail__options__auth__user=support@example.com
mail__options__auth__pass=1234567890
mail__from="'Acme Support' <support@example.com>"
docker compose up -d --force-recreate ghost
secure i requireTLS: Ghost wysyła przez Nodemailer, którego dokumentacja każe ustawić secure na false na porcie 587, a połączenie przechodzi potem na STARTTLS. requireTLS odrzuca wysyłkę, jeśli to przejście się nie powiedzie. Plik przykładowy repozytorium wskazuje port 465 i secure=true: proszę zmienić te dwie linie.from zawiera adres rzeczywisty i odczytywany, co według projektu poprawia dostarczalność, a rekordy SPF, DKIM i DMARC domeny wysyłkowej dopełniają ustawienia.Przekaźnik SMTP nie obejmuje newsletterów. Według dokumentacji wysyłka masowa nie odbywa się przez SMTP, a Mailgun jest obecnie jedyną usługą wysyłki masowej, którą Ghost obsługuje. Zakładają Państwo własne konto Mailgun i wpisują jego klucze API w ustawieniach Ghost.
Jeśli nie wysyłają Państwo artykułów e-mailem, nie potrzebują żadnego konta Mailgun: te ustawienia można pominąć. Jeśli wolą Państwo inne narzędzie do newsletterów, projekt proponuje synchronizację członków do niego, na przykład przez Zapier lub jego przewodniki integracji.
Ghost oferuje trzy poziomy kopii i nie zawierają one tego samego. Aby odtworzyć stronę identycznie, projekt każe kopiować bezpośrednio bazę i katalog content.
| Metoda | Co zawiera | Do czego służy |
|---|---|---|
ghost backup (Ghost-CLI) | Zip: treści w JSON, członkowie w CSV, motywy, obrazy, pliki i media, trasy i przekierowania | Środek ostrożności przed aktualizacją |
| Eksport z administracji | Zip: treści i ustawienia, członkowie, statystyki artykułów, motywy, trasy i przekierowania, do wyboru. Bez komentarzy, historii aktywności członków i mediów | Przeniesienie treści na inną stronę |
Baza i katalog content | Całość danych | Odtwarzanie po awarii lub dokładna kopia |
Eksport znajduje się w „Settings”, „Advanced”, „Import/Export”, zakładka „Export”, przycisk „All data”. Dla pełnej kopii, z Ghost-CLI, konto MySQL i nazwę bazy do przepisania podaje config.production.json:
mkdir -p ~/ghost-backups
mysqldump -u ghost_user -p ghost_production > ~/ghost-backups/ghost_backup.sql
cd /var/www/sitename
tar czf ~/ghost-backups/ghost_content_backup.tar.gz content/
W Docker Compose oficjalne narzędzie przechowuje treści w data/ghost. Zrzut ma postać podaną przez obraz MySQL, a hasło root jest już w kontenerze. Proszę zachować także kopię .env i Caddyfile.
cd /opt/ghost
mkdir -p ~/ghost-backups
docker compose exec -T db sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' > ~/ghost-backups/ghost_backup.sql
tar czf ~/ghost-backups/ghost_content_backup.tar.gz data/ghost
cd /var/www/sitename
ghost stop
mysql -u ghost_user -p ghost_production < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
sudo chown -R ghost:ghost content
ghost restart
cd /opt/ghost
docker compose stop ghost
docker compose exec -T db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
docker compose start ghost
Te pliki proszę skopiować poza serwer, przez rsync lub scp, i wykonać próbę przywracania na maszynie testowej. Jeśli wracają Państwo z eksportu z płatnymi członkami, przed importem członków proszę podłączyć to samo konto Stripe.
Projekt publikuje aktualizacje co tydzień i przypomina, że publiczny serwer WWW musi pozostać aktualny. Proszę przeczytać informacje o wydaniu, a następnie uruchomić polecenie swojej metody.
ghost check-update
ghost backup
ghost update
ghost update --rollback wraca do wersji poprzedniej, jeśli aktualizacja pójdzie źle.content pozostaje na miejscu podczas aktualizacji.ghost update [version] --force z Państwa obecną wersją, ponieważ jego zależności binarne są kompilowane pod konkretną wersję Node.js.cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune
Ostatnia linia, opcjonalna, usuwa stare obrazy. GHOST_VERSION proszę zostawić zakomentowane w .env: przypięcie wersji blokuje te polecenia aktualizacji.
Dokumentacja podaje kilka ustawień dla serwera produkcyjnego:
mysql_secure_installation.Jeśli chodzi o obciążenie, projekt stawia przed Ghost CDN i warstwę pamięci podręcznej. Zaznacza, że klastrowanie i sharding nie są obsługiwane: stronę obsługuje jedna instancja, a pamięć podręczna absorbuje ruch.
Samodzielny hosting wymaga prowadzenia serwera, oprócz samej aplikacji. Na Managed VPS nasze zespoły przejmują serwer i proaktywnie czuwają nad Państwa instancją; Ghost pozostaje Państwa oprogramowaniem, z Państwa ustawieniami i danymi.
| Temat | Nasze zespoły | Państwo |
|---|---|---|
| Serwer | Aktualizacje systemu i zabezpieczeń, w tym interwencje na serwerze | Moment dogodny dla Państwa działalności |
| Nadzór | Serwer pod opieką całą dobę, 7 dni w tygodniu, z interwencją bez czekania na Państwa telefon | Państwa treści, członkowie i subskrypcje |
| Ghost | Proaktywna opieka: wychwytujemy błędy, spowolnienia i brak miejsca na dysku oraz polecamy poprawkę | Instalacja, aktualizacje, ustawienia, przekaźnik SMTP i konto Mailgun, które wdrażają Państwo sami albo Państwa asystent AI |
| Kopie zapasowe | Co noc, szyfrowane i przechowywane poza maszyną; przywracanie w cenie | Zgłoszenie prośby o przywrócenie, gdy będzie potrzebne |
| Migracja | Migracja Państwa obecnego serwera, bezpłatna | Moment przełączenia |
Jeśli wolą Państwo, aby nasze zespoły interweniowały w samej aplikacji, usługa ta jest rozliczana godzinowo lub ryczałtowo, z wyceną przekazaną przed interwencją.
Z Managed VPS od Simafri nasze zespoły utrzymują serwer Państwa instancji Ghost w aktualności, nadzorują go dniem i nocą i interweniują bez czekania na Państwa telefon; proaktywnie czuwają także nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami albo Państwa asystent AI. Kopie zapasowe są szyfrowane co noc i przechowywane poza maszyną, ich przywracanie jest w cenie, a migracja obecnego serwera jest bezpłatna.
Tak. Ghost jest udostępniany na licencji MIT: mogą Państwo używać go w firmie i dostosowywać, zachowując informację o licencji. Pozostają usługi wokół niego: serwer, przekaźnik e-maili, Mailgun, jeśli wysyłają Państwo newslettery, oraz Tinybird, jeśli chcą Państwo jego analityki.
Projekt zaleca Ubuntu 22.04, 24.04 lub 26.04, Nginx, Node.js 22, MySQL 8.0 lub 8.4, systemd, co najmniej 1 GB pamięci, domenę i użytkownika, który nie jest rootem. Dla Docker Compose podaje jako przykład serwer z 2 GB i 1 procesorem.
Ghost-CLI to instalacja, którą projekt zaleca w produkcji. Docker Compose jest wersją preview, jedyną pozwalającą na samodzielnie hostowaną analitykę webową i ActivityPub, a projekt mówi, że zmierza ku temu narzędziu. Kreator pozwala przejść z Ghost-CLI na Docker Compose.
W produkcji jedyną obsługiwaną bazą jest MySQL 8. Projekt zaleca ponowną instalację na MySQL 8 z SQLite oraz migrację do MySQL 8 z MariaDB. Jego dokumentacja nie przewiduje PostgreSQL.
Nie. SMTP służy do e-maili transakcyjnych: zaproszeń, haseł, linków logowania członków. Newslettery wymagają API Mailgun, jedynej obsługiwanej usługi wysyłki masowej. Bez wysyłania artykułów e-mailem żadne konto Mailgun nie jest potrzebne.
Dla pełnego odtworzenia proszę skopiować bazę MySQL przez mysqldump, a katalog content przez tar. Polecenie ghost backup tworzy zip przed aktualizacją. Eksport z administracji pomija komentarze, historię aktywności członków i media.
W Ghost-CLI proszę uruchomić ghost backup, a potem ghost update w katalogu strony, a w razie problemów ghost update --rollback. W Docker Compose proszę uruchomić git pull, docker compose pull i docker compose up -d w /opt/ghost.
Managed VPS obejmuje serwer: system, bezpieczeństwo, nadzór i kopie zapasowe. Nasze zespoły proaktywnie czuwają też nad Państwa instancją i polecają przydatne poprawki, które wdrażają Państwo sami. Interwencja w aplikacji jest rozliczana godzinowo lub ryczałtowo.
Simafri
Porozmawiajmy o Państwa projekcie
Proszę powiedzieć nam w kilku słowach, czego Państwo potrzebują: odpowiemy szybko.
Dziękujemy! Państwa zapytanie zostało wysłane. Wkrótce się odezwiemy.
Wolą Państwo e-mail? Proszę napisać do nas na support@simafri.com.