This is an update to the Ghost 4 install guide from March 2021. The instructions are pretty much the same.
UPDATE: 20th December 2022 – This guide has been updated to include instructions on implementing Ghost with MySQL 8.
Yesterday, May 23rd, Ghost released Version 5 to everyone which contains support for new custom premium tiers, multiple newsletters, special offers, detailed audience segmenting, and expanded analytics.
They have also expanded their ‘cards’ feature which is embeddable content native within Ghost. They have support for videos, podcasts, callouts (Which will be demonstrated in this post) and even N /// F /// T's
via OpenSea URLs (but that is something that you will probably not see here)
A full look at the changelog for Ghost 5 can be found here:
So let’s install Ghost on Plesk.
🚨
I am not an expert in Docker, npm, node.js or related technologies. What I am documenting here is what worked for me. YMMV
Prerequisites
- Plesk Obsidian – (I am using 18.0.43)
- Docker extension (This is already preinstalled, but you should check in the ‘Extensions’ menu to make sure)
- MySQL 8 (MariaDB is not supported) – Ensure that you create a new database and note the details. [If you are on Debian (like me), you will need to install a MySQL 8 Docker container in order to use it]
Installing Ghost
- Go to “Docker“
- In the search box, type in “Ghost” and press enter.
- You will see “ghost” with the [OFFICIAL] tag. Click the highlighted arrow and choose the latest version (This may say
5.0.0
or similar. Do not chooselatest
or5.x.x-alpine
) - This will download the image and bring you to the next screen.
Configuring Ghost Docker Container! (😨)
🚨
This is probably the most important part, so please follow to a T here!
- Container Name: Call this whatever you want, ideally something relating to your site. For this example, we’re calling this
padraig_is_awesome
- Check the box for ✅”Automatic start after system reboot“
- Un-check the box for “Automatic port mapping”
- Manual mapping:
2368
to external32778
- Manual mapping:
- Volume mapping:
- “Container“:
/var/lib/ghost/content
- “Host“:
/var/ghost/padraig_is_awesome/content
(replacepadraig_is_awesome
with your container name from the top of the page!
- “Container“:
- Near the bottom of the page, click on “Add Variable“
- In the blank boxes, type
url
in the first box and your URL (eg:https://padraig.blog
in the second box (Make sure this domain is registered and added to Plesk) - Add the database details:
- Ensure that the database has been created first before proceeding. The information below is just sample data and should not be used!
database__client
–mysql
database__connection__host
–123.123.123.123
(Your Server IP address)database__connection__user
–root
database__connection__password
–**************
database__connection__database
–db_name
database__connection__port
–3006
Your screen should look very similar to this:
- Now click “OK” and let it install.
- Go back to “Websites & Domains” and find your site, click on “Docker Proxy Rules“
- Click “Add Rule”
- URL: Leave this alone
- Container: Choose your container
- Port: This should say
2368 -> 32778
- Click “OK“
- Give that a couple of minutes for it to work and you can access your site via
https://padraig.blog/ghost
(Obviously replacepadraig.blog
with your own domain name)
And you should be good to go!
Frequently Asked Questions!
What if I want to run a 2nd or 3rd Ghost blog on Plesk?
Repeat the steps above, the only thing to change are:
- The “Container Name“
- The port, change it from
32778
to32779
❗
Keep incrementing this by 1 for each new blog your create!
What if I want it at domain.com/blog
?
- Indicate this in the
url
on the setup page. - And when you add it in the rule on the “Docker Proxy Rules” page, add
blog
where it says “URL“
I want to move this to/from a subdomain from/to a naked domain?
- Go into the “Docker Proxy Rules” and remove the rule from here.
- Go into “Docker” on the left-hand side.
- Click on “Settings” beside the container and adjust the
url
in here. This will more than likely restart the container. - Re-add the “Docker Proxy Rules” to the new subdomain or naked domain.
How do I access the files if I want to import themes or other content?
- Connect via SSH to your server (FTP will not work)
- Navigate to
/var/ghost/$containername/content
If there are any other questions, hit me up on Twitter and I will try to help where possible, but as mentioned, I am not an expert. Do not rely on me to resolve your issue. Try StackOverflow, Plesk’s forums, Ghost’s forums, Google, DuckDuckGo.