A Ghost VPS pays off when you run paid memberships or several sites, or when you want the member list on a server you control. Ghost(Pro) is the better buy for one small blog that nobody wants to maintain. A Ghost VPS is a virtual private server where you install Ghost, the open-source blog and newsletter platform, yourself; Ghost(Pro) is Ghost's own paid hosting, which runs it for you.
We installed Ghost 6.71 the official way on Ubuntu 24.04 and measured it on 18 October 2026. With MySQL 8 at its defaults, the whole server used 627 MB of RAM at idle, and a 1 GB server dropped to 301 MB after a three-line MySQL change. One site rendered about 25 home pages per second on 2 vCPUs, and about 9,600 per second behind a one-minute Nginx cache.
On Ghost(Pro), paid memberships start on the Publisher plan at $29 a month (billed yearly) for 1,000 members and cost $88 at 10,000. Self-hosting costs a fixed server price from our VPS hosting plans, plus Mailgun from $15 a month if you send newsletters. For most Ghost sites that server is VPS Micro, with 2 vCPU and 2 GB of RAM.
Key facts, checked on 18 October 2026:
- The current release is Ghost 6.71.0, published on 15 October 2026 (GitHub releases). Ghost is MIT-licensed open source, and Ghost 6.0 came out on 4 August 2025 (Ghost 6 changelog).
- The supported stack is Ubuntu 22.04, 24.04 or 26.04, Node.js 22 LTS, MySQL 8.0 or 8.4, Nginx and systemd, with at least 1 GB of memory (Ghost's Ubuntu guide).
- Ghost-CLI is on its way out. On 18 August 2026 Ghost's platform team wrote that Ghost 6.x is the last major version usable with Ghost-CLI, and that the Docker Compose setup, still a preview today, becomes the official way to self-host from Ghost 7.0, which is "not until 2027 at least" (Ghost forum).
- Newsletters need Mailgun: Ghost's docs say "the only bulk mail API we support is Mailgun", and SMTP cannot be used for bulk sending (Ghost docs). Mailgun's free plan sends 100 emails a day, and Basic starts at $15 a month for 10,000 (Mailgun pricing).
- Ghost(Pro) Starter costs $15 a month billed yearly ($18 monthly) for up to 1,000 members, without paid subscriptions or custom themes. Publisher starts at $29 ($35 monthly) and Business at $199 ($239 monthly). Every plan includes unlimited email sends (Ghost pricing).
- Ghost takes 0% of membership revenue, hosted or self-hosted; Stripe's processing fees still apply (Ghost members docs).
Ghost VPS or Ghost(Pro): which one to choose
The difference is who runs the server and how the bill grows. Ghost(Pro) charges by member count and handles hosting, updates, email and backups. On a VPS the server price stays flat, and that work is yours.
| Your situation | Better buy | Why |
|---|---|---|
| One blog, under 1,000 free subscribers | Ghost(Pro) Starter | $15 a month includes hosting, updates and email. Self-hosting adds $15 of Mailgun before the server. |
| Nobody will run updates or test backups | Ghost(Pro) | Ghost releases every 1 to 2 weeks (Ghost-CLI docs); on a VPS that work is yours. |
| Paid newsletter, 2,500 to 25,000 members | Your own VPS | Publisher rises from $46 to $141 a month; a server price stays flat and Mailgun costs $17 to about $99. |
| Several blogs, or client sites | Your own VPS | Each Ghost(Pro) site needs its own plan. Our 2 GB test server ran three sites at 798 MB idle. |
| Member data on an EU server you choose, or SSH and database access | Your own VPS in Amsterdam or Dublin | Ghost(Pro)'s data processing agreement allows processing inside and outside the EU; SSH and database access come only with self-hosting (Ghost hosting docs). |
| 50,000 members with a weekly send | Ghost(Pro) Publisher | At list prices Mailgun alone (about $218) costs more than Publisher billed yearly ($208), which includes email. |
Ghost(Pro) vs self-hosted: the cost from 1,000 to 50,000 members
Self-hosting usually comes out cheaper between about 2,500 and 25,000 members, and Ghost(Pro) is cheaper again at 50,000 members with a weekly send. Ghost(Pro) prices rise with members. The table uses Publisher, the cheapest plan that takes payments, at the prices on Ghost's pricing slider on 18 October 2026.
Self-hosted Ghost is free software, and the server price ignores members; the variable is email. A weekly newsletter means about 4.33 sends a month to every member, priced here at Mailgun's listed plans and overage rates.
| Members | Publisher, billed yearly | Publisher, billed monthly | Self-hosted: Mailgun, weekly send |
|---|---|---|---|
| 1,000 | $29 a month | $35 | $15 (Basic) |
| 2,500 | $46 a month | $55 | About $17 (Basic plus overage) |
| 5,000 | $63 a month | $75 | $35 (Foundation, 50,000 emails) |
| 10,000 | $88 a month | $105 | $35 (Foundation) |
| 25,000 | $141 a month | $169 | About $99 (Scale plus overage) |
| 50,000 | $208 a month | $249 | About $218 (Scale plus overage) |
Add one server, at its fixed monthly price on our VPS plans page, to the last column. At 10,000 members that is $35 of Mailgun plus the server against $88 on Ghost(Pro). At 50,000 members Mailgun's list price alone passes Ghost(Pro), so ask Mailgun for a quote at that volume. If you never email your posts, the server is the whole bill.
The table leaves out your time and Ghost(Pro)'s extras: a CDN with a firewall, backups and a 24/7 on-call team. Starter also limits you to one staff user, one newsletter and official themes. Self-hosted Ghost has no member, staff or newsletter caps, and a 2021 answer on the Ghost forum says the same.
How much RAM and CPU does Ghost need?
Ghost's docs ask for at least 1 GB of memory, and 1 GB is enough for one site once MySQL is tuned. In our test on 18 October 2026, Ghost 6.71 with MySQL 8.0.46 used 627 MB of RAM at idle on a 2 GB server and 301 MB on a tuned 1 GB server. CPU matters less: one Ghost site used about one core under load.
How we tested: Ubuntu 24.04.5 containers on our Amsterdam test server (AMD EPYC 7742), sized like our plans, with swap off. The software was Ghost 6.71.0, Ghost-CLI 1.33.7, Node.js 22.23.3, MySQL 8.0.46 and Nginx 1.24.0, plus Docker 29.1.3 with Ghost's official compose file. The blog held 30 posts of about 800 words, and a second container sent traffic with hey, a small HTTP load tool, for 20 seconds per step. Other labs shared the host, so allow a few percent of noise.
| Setup, at idle | Whole server in use | MySQL | Ghost |
|---|---|---|---|
| Ghost-CLI, 2 vCPU, 2 GB, MySQL defaults | 627 MB | 451 MiB | 219 MiB + 78 MiB supervisor |
| Ghost-CLI, 1 vCPU, 1 GB, MySQL defaults | 537 MB | 412 MiB | 166 + 81 MiB |
| Ghost-CLI, 1 vCPU, 1 GB, MySQL tuned | 301 MB | 169 MiB | 172 + 83 MiB |
| Ghost-CLI, 2 vCPU, 2 GB, tuned, three sites | 798 MB | 265 MiB | 618 + 246 MiB for all three |
| Docker preview, 2 vCPU, 2 GB | 705 MB | 444 MiB | 211 MiB, plus about 180 MiB of Docker daemons |
MySQL 8 is the heaviest part, not Ghost: 412 to 451 MiB for a 4.4 MiB database. Ghost itself is one Node.js process plus Ghost-CLI's ghost run supervisor at about 80 MiB. On a 1 GB server, three lines free about 240 MiB:
# as root: create /etc/mysql/mysql.conf.d/zz-small-server.cnf
[mysqld]
performance_schema = OFF
innodb_buffer_pool_size = 64M
max_connections = 40
Then run systemctl restart mysql and, as your Ghost user, ghost restart. MySQL fell from 412 to 169 MiB, and a post page still served 30.9 pages per second (30.8 before). Raise the buffer pool once your database reaches hundreds of megabytes.
Under load: uncached pages and a one-minute cache
| Test | 1 vCPU, 1 GB | 2 vCPU, 2 GB | Docker, 2 vCPU, 2 GB |
|---|---|---|---|
| Home page, uncached, 10 at once | 18.3/s, p95 0.73 s | 25.3/s, p95 0.50 s | 24.8/s, p95 0.50 s |
| Home page, uncached, 50 at once | 15.7/s, p95 3.79 s | 26.3/s, p95 2.05 s | 25.9/s, p95 2.15 s |
| Post page, uncached, 50 at once | 30.8/s, p95 2.25 s | 51.9/s, p95 1.07 s | 49.5/s, p95 1.13 s |
| Home page, Nginx cache, 50 at once | 5,309/s, p95 0.023 s | 9,615/s, p95 0.012 s | Not tested |
| Peak RAM in use | 615 MB | 806 MB | 1,268 MB |
A p95 of 0.50 s means 95 of 100 requests got their page within half a second. "Uncached" means Ghost rendered every page; on 1 vCPU we sent a members cookie, which makes Nginx skip the cache as it does for signed-in readers.
A Ghost site is one Node.js process, so it used about one core, and a second vCPU lifted the home page only from 18 to 25 per second. That is still 90,000 pages an hour. The real risk is the burst after a newsletter goes out, and the cache absorbs it: on 2 vCPUs the server used 0.6 to 0.7 cores while serving 8,600 to 9,600 pages a second, so our load generator was the limit. Nothing ran out of memory.
Docker was as fast but hungrier: its Node.js process grew to 671 MiB under load, against 356 MiB with Ghost-CLI. On 1 vCPU and 1 GB it peaked at 982 MB and hit the memory ceiling 1,017 times, so give it 2 GB or more.
Which Ghost VPS plan and city to choose
Match the plan to the install method and the number of sites, then put the server in the city closest to your readers.
| Your situation | Plan | City | Why |
|---|---|---|---|
| One personal blog with Ghost-CLI, no Docker | VPS Nano: 1 vCPU, 1 GB RAM, 20 GB NVMe, 1 Gb/s, Linux only | Nearest your readers | One site peaked at 373 MB with the MySQL tune, 615 MB without it. Install and updates were not tested at 1 GB (see below) |
| A membership site or paid newsletter, readers across Europe | VPS Micro: 2 vCPU, 2 GB RAM, 40 GB NVMe, 1 Gb/s, Linux only | Amsterdam | One site peaked at 806 MB; Frankfurt and London reached our Amsterdam server in 6.6 and 6.7 ms |
| Readers in Ireland and the UK, data kept in the EU | VPS Micro, same size as above | Dublin | Our EU location for Irish and UK readers; one site peaked at 806 MB |
| A Balkan publication (Kosovo, Albania, North Macedonia) | VPS Micro, same size as above | Prishtina | Vienna reached our Prishtina server in 18.6 ms; Skopje is about 3 ms away on our own network |
| The Docker install, or two or three small blogs | VPS Micro, same size as above | Nearest your readers | Docker peaked at 1,268 MB in our test; three busy Ghost-CLI sites at 1,032 MB |
| Four or more busy sites, self-hosted ActivityPub or analytics, a newsletter tool beside Ghost | VPS Mini: 4 vCPU, 4 GB RAM, 80 GB NVMe, 1 Gb/s | Nearest your readers | Not tested; twice Micro's cores and memory for more Node.js processes |
| An agency with many client sites, or a large publication needing steady CPU | VDS Small: 4 vCPU, 8 GB RAM, 240 GB NVMe, 10 Gb/s | Nearest your readers | Not tested; its vCPUs are dedicated to you |
VPS plans share their vCPUs with other customers, while VDS vCPUs are dedicated to you. Every plan has NVMe, unmetered traffic and its own IPv4 and IPv6, and you can upgrade from the client area with a short reboot. The Frankfurt, London and Vienna figures come from our ping.pe test on 6 October 2026, the lowest of about 10 pings from each probe city; the Skopje figure is from our own network. Availability by city is on the VPS plans page.
Two things favour Micro over Nano for a new site. First, we installed Ghost on 2 GB and only then shrank the server to 1 GB, so we never saw ghost install or ghost update run on 1 GB. Ghost's platform team says Ghost-CLI reinstalls all of Ghost's dependencies for every version, which "would regularly exceed available RAM on smaller VPSs" (Ghost forum, October 2026). Second, Docker becomes the official install with Ghost 7.0, and in our test Docker wanted 2 GB.
How to self-host Ghost on Ubuntu 24.04 with Ghost-CLI
Ghost-CLI is Ghost's official command-line tool for installing and managing Ghost. Ghost's supported stack is Node.js 22, MySQL 8, Nginx and systemd on Ubuntu, and installing it needs root access, which a VPS gives you and ordinary shared web hosting does not. Use MySQL 8: it is the database in that stack, and Ghost-CLI creates its own MySQL user and database during the install.
Ghost-CLI keeps working for every Ghost 6.x release, and Ghost has promised a documented migration path from Ghost-CLI to its Docker setup, so a site installed this way today is not a dead end. If you would rather not migrate later, skip to the Docker section below.
This is the route from Ghost's Ubuntu guide, and we ran every step. First point an A record for your domain at the server, because the installer requests the SSL certificate for that name. Don't call the user ghost; Ghost's docs say it conflicts with Ghost-CLI.
# as root, on a fresh Ubuntu 24.04 server
adduser blogadmin
usermod -aG sudo blogadmin
su - blogadmin
# as blogadmin (sudo asks for your password)
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y nginx mysql-server
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Expect Firewall is active and enabled on system startup. Ghost can't use MySQL's default socket login for root, so give root a password inside sudo mysql:
-- as blogadmin, at the mysql> prompt opened with: sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'a-long-random-password';
FLUSH PRIVILEGES;
exit
# as blogadmin: Node.js 22 from NodeSource, then Ghost-CLI
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
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update && sudo apt-get install -y nodejs
node -v
sudo npm install ghost-cli@latest -g
We saw v22.23.3, and ghost -v printed Ghost-CLI version: 1.33.7.
# as blogadmin
sudo mkdir -p /var/www/myblog
sudo chown blogadmin:blogadmin /var/www/myblog
sudo chmod 775 /var/www/myblog
cd /var/www/myblog
ghost install
Give your URL with https://, MySQL host localhost, user root with the password you set, and a database name such as myblog_prod. Then answer yes to the Ghost MySQL user, Nginx, SSL (it asks for an email), systemd and start. In the lab we passed the same answers as flags and skipped SSL, since a test name gets no certificate.
The install took 34 seconds and ended with Ghost was installed successfully!, and ghost ls showed running (production) on port 2368, reachable only through Nginx. Create the owner account at https://yourdomain/ghost/. Other proxies are covered in our reverse proxy and free SSL guide.
Ghost CMS in Docker: the official Compose preview
Docker runs each program in its own container. Ghost's official Compose setup starts three: Ghost, MySQL and Caddy, a web server that fetches the certificate itself. You need it to self-host Ghost 6's ActivityPub and analytics services, and it becomes the official install method with Ghost 7.0. Ghost asks for Docker 20.10.13 or newer (Ghost's Docker guide); we used Ubuntu's packages.
# as root
apt-get install -y docker.io docker-compose-v2 git
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost
cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
nano .env
docker compose pull
docker compose up -d
docker compose ps
In .env, set DOMAIN, give both database passwords the output of openssl rand -hex 32, and fill in the SMTP lines. The images took 2.19 GB, and the site answered 36 seconds after up -d, with db shown as (healthy). Our lab name had no public DNS, so we added tls internal to the Caddyfile; with a real domain, Caddy fetches a Let's Encrypt certificate. More in our Docker on a VPS guide.
Email on a Ghost VPS: SMTP for signups, Mailgun for newsletters
Ghost sends two kinds of email. Transactional email is one message to one person: signup and login links, staff invites and password resets. It goes out over SMTP, the standard protocol for sending mail, through any provider. Bulk email is the newsletter that goes to every member, and Ghost sends it only through Mailgun's API.
Set up SMTP before the first reader signs up
Ghost-CLI leaves mail on "transport": "Direct" and only prints a warning about it. On our fresh Ghost 6.71 install that default sent nothing: Ghost tried a mail server at 127.0.0.1 on port 587, found none, and a test signup failed with HTTP 500 and Failed to send email. Use an SMTP provider on port 587, which also keeps you off port 25, blocked for outbound mail on new RS Computers servers (we open it on request via Telegram). Replace the mail block in config.production.json:
# as blogadmin: the "mail" block in /var/www/myblog/config.production.json
"mail": {
"transport": "SMTP",
"from": "My Blog <noreply@mg.example.com>",
"options": {
"host": "smtp.eu.mailgun.org",
"port": 587,
"secure": false,
"auth": {
"user": "postmaster@mg.example.com",
"pass": "your-smtp-password"
}
}
},
Then run ghost restart. The same structure, pointed at a local test mail server, delivered our signup email with HTTP 201.
One trap: ghost config set mail.options.secure false stores "false" as text, which Ghost reads as true, so it tries TLS on a plain port and fails with wrong version number. Edit the JSON so false has no quotes. Member mail went out from noreply@ at the site's domain, so set up SPF and DKIM for that domain at your provider.
Newsletters through Mailgun
Mailgun needs three settings in Ghost: sending domain, API key and region. Our fresh install reported mailgunIsConfigured: false, with all three empty. Choose Mailgun's EU region to keep the list in Europe; Mailgun's docs say EU message data stays in that region (Mailgun docs). To avoid Mailgun, publish on Ghost and send from another tool, as in our listmonk newsletter server guide.
Speed up Ghost with a one-minute Nginx cache
A proxy cache is a copy of each page that Nginx keeps and serves without asking Ghost. Ghost-CLI's Nginx file has none, and Ghost marks pages max-age=0, so every visit reaches Node.js. This setup keeps public pages for one minute and never caches signed-in members, the admin, member API calls or previews.
# as root: /etc/nginx/conf.d/ghost-cache.conf
proxy_cache_path /var/cache/nginx/ghost levels=1:2 keys_zone=ghost:10m max_size=500m inactive=60m use_temp_path=off;
map $http_cookie $ghost_nocache_cookie {
default 0;
"~ghost-members-ssr" 1;
"~ghost-admin-api-session" 1;
}
map $request_uri $ghost_nocache_uri {
default 0;
"~^/ghost/" 1;
"~^/members/" 1;
"~^/p/" 1;
}
# as root: inside "location / {" of /etc/nginx/sites-available/yourdomain-ssl.conf, after proxy_pass
proxy_cache ghost;
proxy_cache_valid 200 301 302 1m;
proxy_ignore_headers Cache-Control Expires;
proxy_cache_bypass $ghost_nocache_cookie $ghost_nocache_uri;
proxy_no_cache $ghost_nocache_cookie $ghost_nocache_uri;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
# as root
mkdir -p /var/cache/nginx
nginx -t && systemctl reload nginx
curl -s -o /dev/null -D - https://yourdomain/ | grep -i x-cache-status
Ubuntu ships no /var/cache/nginx folder, and without it nginx -t fails with mkdir() "/var/cache/nginx/ghost" failed. Run the curl twice: MISS, then HIT. A request with a members cookie shows BYPASS. The cost is that anonymous visitors see a new post up to a minute late.
How to back up a self-hosted Ghost site
Ghost(Pro) includes backups; on a VPS you build them. ghost backup makes a portable zip of your content as JSON, a members CSV, themes, images and files. Since Ghost 5.129 it signs in with a Staff access token from your staff profile in Ghost Admin, because the CLI cannot answer a two-factor prompt (Ghost-CLI source):
# as blogadmin: save the token in ~/.ghost-staff-token first
chmod 600 ~/.ghost-staff-token
cd /var/www/myblog
GHOST_CLI_STAFF_AUTH_TOKEN=$(cat ~/.ghost-staff-token) ghost backup --no-prompt
Ours finished in 2 seconds with Backup saved to /var/www/myblog/backup-from-v6.71.0-on-...zip (98 KB). It talks to the site at its public URL, so it fails with fetch failed when the server cannot resolve its own domain.
For a full restore, also dump the database each night. This script reads the MySQL login from /root/.my.cnf, a mode 600 file with a [client] section holding user=root and password=...:
# as root: /usr/local/bin/ghost-backup.sh (chmod 700)
#!/bin/bash
set -e
DIR=/root/ghost-backups; D=$(date +%F); mkdir -p "$DIR"
mysqldump --single-transaction --no-tablespaces myblog_prod | gzip > "$DIR/ghost-db-$D.sql.gz"
tar -czf "$DIR/ghost-content-$D.tar.gz" -C /var/www/myblog content config.production.json
find "$DIR" -name 'ghost-*' -mtime +14 -delete
# as root: run it nightly at 03:15
echo '15 3 * * * root /usr/local/bin/ghost-backup.sh' > /etc/cron.d/ghost-backup
Our dump was 107 KB and the content archive 231 KB. Loaded into an empty database, the dump held 32 published rows, the same as the live site. Copies on the same server die with it, so ship them off; our off-site backup guide with restic shows how.
Running several Ghost sites on one VPS
This is where self-hosting saves the most, because each Ghost(Pro) site needs its own plan. For each new site, make a folder and run ghost install with a new URL and database name.
Ghost-CLI chose ports 2369 and 2370 for our second and third sites, each install took about 24 seconds, and all three shared one MySQL and one Nginx. Each extra site added about 235 MB of idle RAM and 590 MB of disk. With all three under uncached traffic at once, the 2 vCPU server used both cores (1.93 on average) and peaked at 1,032 MB. Separate sites are separate Node.js processes, so here extra vCPUs do help; four or more busy sites belong on VPS Mini.
We tested several sites with Ghost-CLI only. Ghost says its Docker setup will add multi-site support, and a migration path for Ghost-CLI sites, as it takes over from Ghost-CLI with Ghost 7.0.
What a self-hosted Ghost still sends to outside services
Posts, members and the database stay on your server, but an EU data review should list these outside services:
- Stripe handles payments; Ghost needs an
httpsURL before you connect it (Ghost's Stripe page), and fees vary by country. - Mailgun sends newsletters, as above.
- Ghost-CLI's Nginx file forwards
/.ghost/activitypubtoap.ghost.org, Ghost's hosted social web service, limited for self-hosters to 2,000 followers and 100 interactions a day (Ghost docs). - Ghost 6's analytics needs a Tinybird account; self-hosted Umami or Plausible analytics run on your own server instead.
- Ghost loads its sign-in (Portal), search and comments scripts from
cdn.jsdelivr.netby default; the config file can point them elsewhere (Ghost config docs).
Our CLOUD Act checklist for European hosting helps you judge each provider. Still weighing WordPress? See our WordPress VPS hosting page.
Frequently asked questions
How much RAM does Ghost need on a VPS?
Ghost's docs ask for at least 1 GB. In our test of Ghost 6.71 with MySQL 8 on 18 October 2026, the server used 627 MB at idle with MySQL defaults, 301 MB after a MySQL tune, and peaked at 615 MB on 1 GB under load. 2 GB is the comfortable size, and what we would give the Docker install.
Is self-hosting Ghost cheaper than Ghost(Pro)?
Usually, between about 2,500 and 25,000 members. In that range Ghost(Pro) Publisher cost $46 to $141 a month billed yearly on 18 October 2026, while self-hosting cost a fixed server price plus $17 to about $99 of Mailgun for weekly sends. At 50,000 members, Mailgun alone passes Ghost(Pro).
Do I need Mailgun to self-host Ghost?
Only for email newsletters, which Ghost sends solely through Mailgun's API. Signups, logins and staff invites use ordinary SMTP from any provider. A site that never emails its posts needs no Mailgun.
Can I run Ghost CMS with Docker?
Yes. Ghost's official Docker Compose setup runs Ghost, MySQL 8 and Caddy. It is a preview today, and Ghost says it replaces Ghost-CLI as the official install with Ghost 7.0, expected no earlier than 2027. In our test it was as fast as Ghost-CLI but peaked at 1,268 MB on a 2 GB server, against 806 MB.
Can I host several Ghost sites on one VPS?
Yes. Run ghost install in a new folder for each site, and Ghost-CLI picks the next free port. Each extra site added about 235 MB of RAM and 590 MB of disk in our test, and three sites fit on 2 vCPU and 2 GB.
Does self-hosted Ghost have member limits?
No. Limits such as 1,000 members on Starter belong to Ghost(Pro) plans. Self-hosted Ghost is MIT-licensed with no caps; your server and email provider set the practical limits.
Start with one Ghost site, grow on the same server
For most self-hosters, VPS Micro (2 vCPU, 2 GB) runs a membership site with the one-minute cache, two or three small blogs, or the Docker install that Ghost 7.0 will make standard. VPS Nano (1 vCPU, 1 GB) fits one personal blog on Ghost-CLI with the MySQL tune, and VPS Mini (4 vCPU, 4 GB) takes over when you add sites, analytics or a newsletter tool. RS Computers runs KVM servers in Amsterdam, Dublin and Prishtina; compare sizes and city availability in our VPS hosting plans. If you want Ghost, SMTP and the cache set up for you, we quote setup work per job: ask us on Telegram.