Ghost - Getting Started Guide

Ghost - Getting Started Guide

Ghost is an open-source blog and publishing platform with a modern editor, memberships, newsletters and built-in SEO. This server comes with Ghost, MySQL, Nginx and Certbot pre-installed - the domain, admin email and password you specified during the order are already configured.


Step 1 - Verify Ghost Works

Your server's IP address and root password are shown on the Server Details page in your client panel. Your blog is already accessible by IP address:

  • Blog: http://your.server.ip
  • Admin panel: http://your.server.ip/ghost/

Log in to the admin panel with the email and password you entered during the order. If the page loads and you can sign in, Ghost is working correctly.

If you placed the server behind a VyOS router on a private network, set up port forwarding for ports 22 (SSH), 80 (HTTP) and 443 (HTTPS). Ghost is a public-facing blog that must be reachable from the internet.


Step 2 - Configure Domain and SSL (Recommended)

If you provided a domain during the order, it is already configured in Ghost. Point your domain's DNS A record to the server IP, then SSH in and enable SSL:

ssh root@your.server.ip
/opt/setup/get-ssl.sh your-domain.com

The script will obtain a Let's Encrypt certificate, configure Nginx for HTTPS and update the Ghost URL automatically. After completion:

https://your-domain.com          (blog)
https://your-domain.com/ghost/   (admin panel)

Changing the domain later

If you need to change the domain after setup:

cd /var/www/ghost
sudo -u ghost ghost config url http://new-domain.com
sudo -u ghost ghost restart
sed -i "s/server_name .*/server_name new-domain.com;/" /etc/nginx/sites-available/ghost
nginx -t && systemctl reload nginx

Then run /opt/setup/get-ssl.sh new-domain.com to get an SSL certificate for the new domain.


Post-Installation

Fail2Ban - Brute-Force Protection

Your server comes with Fail2Ban pre-configured to protect SSH from brute-force attacks.

Rule Max Attempts Ban Duration
SSH5 failed logins10 minutes

Useful commands:

# Check banned IPs
fail2ban-client status sshd

# Unban an IP
fail2ban-client set sshd unbanip 1.2.3.4

If you accidentally lock yourself out, connect via VNC console in your client panel and unban your IP.

Content Management

In the admin panel you can:

  • Posts - create blog articles with the rich editor (Markdown, images, embeds, cards)
  • Pages - create static pages (About, Contact, etc.)
  • Tags - organize content with tags and internal tags
  • Members - manage subscribers and paid memberships
  • Newsletters - send email newsletters to subscribers

Theme Customization

Ghost comes with the Casper theme by default. To change or customize themes:

  • Settings > Design - customize colors, fonts and branding
  • Settings > Design > Change theme - install a new theme from the Ghost Marketplace or upload a ZIP file

Theme files are stored in /var/www/ghost/content/themes/.

Backups

Ghost has a built-in export in Settings > Labs > Export (JSON backup of posts and settings). For a full backup including images and database:

# Content and themes
tar czf /root/ghost-backup-$(date +%Y%m%d).tar.gz /var/www/ghost/content

# MySQL database
mysqldump ghost > /root/ghost-db-$(date +%Y%m%d).sql

Service Management

# Check Ghost status
cd /var/www/ghost && sudo -u ghost ghost status

# Restart Ghost
cd /var/www/ghost && sudo -u ghost ghost restart

# View Ghost logs
cd /var/www/ghost && sudo -u ghost ghost log

# Stack services (managed by systemd)
systemctl status mysql nginx

Updates

# Update Ghost
cd /var/www/ghost
sudo -u ghost ghost update

# Update OS packages
apt update && apt upgrade -y

Software Included

Component Version
Ubuntu24.04 LTS
Ghost5.x
Node.js22.x LTS
MySQL8.x
Nginx1.24
CertbotLatest
Fail2Ban1.0.2

Troubleshooting

Problem Solution
502 Bad Gateway Ghost may not be running. Restart: cd /var/www/ghost && sudo -u ghost ghost restart
Cannot log in to admin panel Use the email and password from the order. Password must be at least 10 characters
SSL certificate failed Verify DNS A record points to the server IP. Check /opt/setup/get-ssl.log for details
Ghost update fails Check Node.js compatibility: node --version. See Ghost Node.js support
MySQL connection error Check MySQL: systemctl status mysql. Restart if needed: systemctl restart mysql
No space left on device Check disk: df -h /. Clean unused themes in /var/www/ghost/content/themes/
Blocked by Fail2Ban Use VNC console in your client panel to unban your IP
Forgot root password Use VNC console in your client panel to reset it


Was this article helpful?

mood_bad Dislike 0
mood Like 0
visibility Views: 41