Regularly, I change everything, often in a radical way. At the beginning of 2026, no exception, my site is redesigned!
For more than 5 years, I used online servers (virtual machines) from different European hosts (OVHcloud, Contabo, Hetzner), then deployed a technical stack based on Debian, running the docker service to deploy containers. The images were the following: Traefik, Ghost, Umami, MySQL, PostgreSQL, Authelia, VictoriaMetrics, Grafana, among others.
The beginning of the end#
The system ran without problems or slowness, I was satisfied with the operation and the relevance of the services deployed.
But, there’s always a but, in January 2026, an update problem between Ghost and the database caused a cascade of issues. Indeed, having waited too long to update the Ghost tool, in addition to upgrading from version 6 (alpine) to 6-alpine, I found myself stuck in front of the administrator authentication panel.
Rather than looking for the problem, I restored the image, restored the database (error) and the site came back online. Unfortunately, I was still stuck on authentication. Fortunately, I had a browser still connected to the administration panel: no need to hesitate, I created an export of the site content and stored it in a safe place.
The evolution#
Actually, the timing was right. Between geopolitical crises, rising resource costs, and attacks… it’s time to move on. Gone are the online servers (VPS), and the use of Ghost. Let’s move on to something simpler.
Now, I push my content to a git repository, then use Cloudflare’s Pages service to deploy my site statically.
The technical stack has become: hugo -> Cloudflare Pages. It’s hard to get much lighter.
Hugo vs Ghost#
Previously on WordPress, the migration to Ghost was salvific. I was satisfied with Ghost versions 3, 4 and 5, but version 6, I find, has become too heavy, losing its original nature, which is simplicity. Ghost was known for its lightness and its very raw text editor, but that was before.
Becoming heavy, opening up to other functions and services that I didn’t want to have, the time came to change. For years, I have been monitoring tools like Grav , Astro and Jekyll .
The one that interested me the most was Astro. However, given what I want to do with my site, the tool most capable of meeting the need is Hugo . Used by friends Une Tasse de Café and Zwindler (among others), it perfectly meets my expectations.
Advantages and disadvantages:
- ✅ writing in Markdown, everywhere, with any text editor
- ✅ automatic deployment via free tools like Cloudflare Pages or GitHub/GitLab Pages
- ✅ no database management
- ✅ simplified updates, easy rollback, lightness
- ✅ reduced costs! Cloudflare Pages is free, a git repository is free (depending on the provider), only the domain name must be paid
- ⚠️ more difficult personalization (when you really want to do everything yourself)
- ⚠️ very wide possibilities, it takes time to configure everything
Finally, the biggest drawback I would mention is the absence of a media library management. Just like Ghost, there is no graphical system to add, organize, and reuse images from one article to another.
Other tools like the comment section or the addition of supplements (the extensions like WordPress) are not natively managed. Regardless, depending on the need, it is possible to add them in one way or another, provided some configurations.
My migration procedure#
There are many tools and procedures everywhere on the web, in addition to AI tools that will be of great help. I used a combination of tools and procedures to migrate my site from Ghost to Hugo.
Here are the steps I followed:
- Export all the content of the site under Ghost from the Ghost administration interface
- Shut down Ghost, make a
mysqldumpof the database used by Ghost - Retrieve the folder
/var/lib/ghost/contentcontaining all the images - Retrieve the Ghost configuration file in
/var/lib/ghost/config.production.json - Create a git repository that will contain the articles and images
- Install Hugo on your local machine (via
brew install hugoon macOS, other methods are available on the official site ) - Create a new Hugo site with the command
hugo new site nom-du-sitein the git repository folder - Organize the images in the
static/folder - Convert the Ghost articles to Markdown (for this part, I used Claude Code which then generated a Python script)
- Configure the
hugo.yamlfile according to your constraints and needs - Test the site construction locally and see the result with the command
hugo server --environment development --cleanDestinationDir --disableKinds=RSS --watch --port 1313 - If everything is good, push the content of the git repository to GitLab or any other local or online software forge
- Create an account on Cloudflare
- Use
npxto create a Cloudflare Pages project (vianpx wrangler pages project create nom-projet-hugo) - Retrieve the environment variables generated by Cloudflare to integrate them as variables in the git repository
- Configure the automatic deployment via GitLab CI/CD or any other continuous integration system
- Test a manual deployment to verify that everything works
- Iterate and validate the deployment procedure
I will make a dedicated article to explain the procedure in detail. The process is relatively simple but requires some steps. In addition, it corresponds to my project management and continuous deployment approach, in addition to performing as code.
The result#
Switching from Ghost to Hugo was quick. The heaviest part was reformatting more than 250 documents. What I gained:
- performance : The site loads in less than a second against 3-4 seconds with Ghost
- cost : 0€ per month against 15 € monthly for the VPS
- security : No more security updates to manage, no more database
- simplicity : A simple
git pushto update the site
The absence of a media library is a drawback, but I prefer to manage images manually to have more control. In addition, with my custom-built theme, I can integrate custom features.
In the end, this migration perfectly matches my current philosophy: returning to the essentials, prioritizing simplicity and performance. Now, go to work!
