Jekyll Admin - Hosting Your Own Headless CMS

Hi, I am wanting to do something similar to Jekyll-admin Rewrites Relative Asset URLs.

To be specific, I run Jekyll with Docker-Compose for development side and push the _site to a hosted platform with nginx to render the website.

At the moment, for me to make use of headless CMS (Jekyll Admin) with API, I have to launch the docker-compose up on the actual production server.

I prefer to use Jekyll Admin to be the:

  • API URL for Data like products, books, etc…
  • Edit Posts for Editors
  • Permission Based Basic Auth.

Topologically speaking,
The static website Jekyll creates via _site is being rendered on x.x.x.1 server with Git and local development computer (x.x.x.2) only runs docker-compose up to launch jekyll for live testing, development and reload; from here, we push to our own Git server and use nginx to render jekyll _site at www.example.com.

My plan initially was to host jekyll-admin on x.x.x.1 and have a shared hosting node at x.x.x.2 to render the _sites and provide basic auth when going to www.example.com/admin.

So, I would have jekyll-admin access to many sites for each domain with one shared hosting service. Maybe a 1:1 or 1:many for 1 jekyll admin that manages multiple websites.
Jekyll-Admin would be the admin GUI and a API to be consumed by Jekyll (Liquid)…

As an example, one server that keeps the “data” and the actual website (UI) is separate. This would allow clients to easily take their data anywhere for any type of architecture.

I have considered using Strapi CMS, but I don’t want to learn a new system, including complex js pancakes.

It seems the jekyll-admin plugin already does everything it needs to do, but the admin plugin won’t work without deploying jekyll.

jekyll-admin was designed to be used locally along with Jekyll’s serve command.

I understand this, but I also believe it wouldn’t be difficult to have jekyll-admin be both local and or remote.

I have never learned Ruby and would ‘assume’ seperating jekyll-admin as a jekyll headless cms with its own server like Strapi wouldn’t be all that difficult.

maybe this is a better question,

Am I able to launch Jekyll Admin as an independent service without launching Jekyll serve?

Having Jekyll-Admin locally isn’t really what a ‘developer’ needs. That type of thing is for editors and non-technical web admins.

I launch Jekyll with docker-compose.

I added a support ticket here: How to launch Jekyll Admin as a seperate service · Issue #681 · jekyll/jekyll-admin · GitHub

This is probably not the specific answer you are looking for, but it is what I do, so sharing it, so you have another option. A headless CMS called Forestry allows you to create and edit pages and posts. However, the idea is it will work off your codebase, so you would have to put your code up on a service like GitHub.

The workflow looks like this:

  1. Put your Jekyll code up on a GitHub repo
  2. Link Forestry to the repo (it creates a .forestry folder at the root folder)
  3. Create and or manage your posts and pages using Forestry
  4. Either let GitHub Pages build your site, or you use a GitHub Action that builds your site and places the site in whatever location you desire.

Here is a link to Forestry so you can check it out:

I don’t want to use someone else’s CMS when Jekyll has its own, including its own _data folder for .csv, yaml, .json files. These files statically hosted on the git repo and on push to update, the jekyll site will auto build and generate the _site folder with the correct set of data.

I am going to build my own Jekyll REST API in root of the project /api/products.json and serve that api with basic auth on nginx via HTTPS/SSL.

---
layout: none
permalink: /api/products/
---
[
  {%- for product_hash in site.data.products %}
  {% assign product = product_hash[1] %}
    {
      "title":      {{- product.title | jsonify }},
      "url":        {{- product.url | jsonify }},
      "price":      {{- product.price | jsonify }}
    }
    {% unless forloop.last %},{% endunless %}
  {% endfor -%}
]

then, going to: example.com/api/products will populate json data that can then be used in an authenticated page that allows CRUD operations.

_data/products/cup.yml

title: Cup
url: /products/2020-06-03-cup/
id: 201806
sku: 202055478373
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
quantity: 14
price: 125.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in

I think there’s a lot of misunderstanding here.

Jekyll Admin is not a true CMS. Its just an extension of Jekyll with a frontend layer to ease managing the Jekyll workspace.
The plugin’s business logic is primarily the frontend layer facilitated by the JSON API.
There were plans to integrate it with GitHub UI or integrate with GitHub OAuth but never materialized because of shortcomings in the existing design.

Jekyll Admin does not have provisions to create custom endpoints.

1 Like