Sooo... I've decided that after owning openbloc.fr for some years it was time to start sharing some of my whereabouts.
Getting Started
When I started openbloc as my personal website, though I experimented with Flask and Angular, it was mostly a static website crafted by hand.
I've spent some time investigating static website generators, hosting on S3 or on Github Pages
In the end it's still a lot of work to setup and understand those frameworks.
Comes Ghost
And then I remembered the ghost platform, which is a little bit more with "batteries included". It seems to have come a long way since 2013 with a 1.0.0 release almost ready.
I used ghost-on-heroku to deploy it.
- Create a new S3 bucket
- Create a new IAM role with S3 permissions
- Use the provided ID and Key to fill the heroku form
- Deploy !
For some reason the deploy from github did not copy the source code in the heroku container so I had to fork and clone it for this as I wanted to update the dependencies.
Adding the custom blog.openbloc.com domain
At this point ghost was only running at openbloc-blog.herokuapp.com
to add a custom domain several steps are required:
- Add a domain on the heroku interface
- Add a
CNAME
record at your DNS provider using the heroku-provided DNS target. - Adding a Let's Encrypt certificate for a secure https connection: probably later as I would have to upgrade to a paid dyno for now.
Customizing the default theme: Casper
I've just added prism.js to do code highlighting. Also a Makefile
to generate the theme zip file:
zip:
zip -r openbloc.zip . -x .git\*
It should work with a lot of languages out of the box, here's some test with a Django model:
class BaseModel(models.Model):
""" BaseModel
An abstract base class with timestamps.
Stores data with postgresql JSON field.
"""
date_created = models.fields.DateTimeField(
verbose_name=_("creation date"),
auto_now_add=True,
)
date_modified = models.fields.DateTimeField(
verbose_name=_("modification date"),
auto_now=True,
)
data = JSONField(null=True, blank=True)
class Meta:
abstract = True
That's all !