Blogiplatformin siirto

Aloitin vuoden alussa blogin pitämisen uudella Ghost-platformilla suomenkielellä, vanhemman Wordpress-blogini sijaan. Taustalla oli toki tekninen halu tutkia hieman kokonaan uutta platformia, mutta myös kirjoittaa nopeammin random-asioita ylös suomeksi - sekä jakaa niitä muiden kanssa.

Kokeilu toimi sinällään hyvin, että ihastuin Ghostin editoriin - joka toimi todella hyvin ja tarjosi mukavan käyttökokemuksen postausten luomiseen, sekä editoimiseen. Ghost pyöri palvelimella myös ilman ongelmia, mutta noin periaatteesta en jaksanut innostua hurjasti Node.js pohjaisen sovelluksen pyörittämisestä verkossa sillä en seurannut Node.js maailmaa tai Ghost projektia niin tarkasti, että ymmärtäisin kunnolla mitä kaikkia hyökkäysvektoreita se sisältää palvelun haltuunottamiseksi.

Kolleegani innostamana aloin tutkimaan ja seuraamaan miten blogin ja saitin pyörittäminen onnistuisi staattisilla generaattoreilla. Otin seurantaan pari eri versiota eri ympäristöistä:

Päädyin näistä lopulta Jekyll:iin, vaikken olekaan millään tavalla Ruby:n ystävä.

Kokeillessani aluksi Jbakea olin aluksi hyvin innoissani sen käyttämisestä. Perusfeaturet löytyvät ja Jbake oli helppo ottaa käyttöön. Koodikin oli selkeästi ymmärrettävää. Valitettavasti perustoiminnoissa oli kuitenkin myös puutteita. Tärkeimpänä puutteena oli se, ettei ollut mahdollisuutta sivuttaa blogin postauksia usealle sivulle.

Tein asiasta issuen projektiin ja palaan siihen ehkä itsekin myöhemmin.

https://github.com/jbake-org/jbake/issues/115

Nikola oli toinen katsomani generaattori, jossa oli perustoiminnot hyvin valmiina. Koodipohja oli laajempi kuin Jbakessa, joten pienellä tutustumisella siitä ei päässyt täysin selville. Kyse on kuitenkin Pythonista, joten sen lukeminen ja ymmärtäminen onnistuisi, kunhan siihen laittaisi hieman aikaa.

Nikolaan valmiina olevat templatet perustuivat Bootstrapiin ja olivat hyvin yksinkertaisia. Mikään teemoista ei suoraan sanonut, että tätä haluaisin bloogini.

Tämän takia käännyinkin lopulta Jekyllin puoleen, jolle löytyi Ghostissa tykkäämääni yksinkertainen Kasper-teema. Sen avulla saisin saman näköisen blogin kuin Ghostin kanssa ilman lisätyötä. Varsinaiseksi tehtäväksi jäi tuunata blogin asetuksia sekä siirtää sisältö nykyisestä blogista Jekyllin postauksiksi.

Ghostista datan sai exportoitua JSON muodossa:

https://github.com/TryGhost/Ghost/wiki/Import-format

Ja JSON-muotoisen datan sai prosessoitua pienellä Python-skriptillä Jekyll postauksiksi. Alla skripti, jos joku muukin haluaa sitä käyttää.


    import sys,os,datetime,json,codecs

    def cleantitle(title):
        valid_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
        return ''.join(c for c in title if c in valid_chars) + '.md'

    def writeJekyllPost(directory,filename,title,created,content):
        print "creating post "
        postfile = codecs.open(os.path.join(path, filename), 'wb', 'utf-8')
        frontMatterTemplate = """---
    layout: post
    title:  '##title##'
    date:   ##date##
    categories:
    ---\n"""
        frontMatterTemplate = frontMatterTemplate.replace('##date##',created).replace('##title##',title)
        postfile.write(frontMatterTemplate)
        postfile.write(content)

    if len(sys.argv) != 3:
        print "Usage:", sys.argv[0], ""  , " "
        sys.exit()

    path = sys.argv[2]

    if not os.path.exists(path):
         print "Path does not exist"
         sys.exit()

    jsondata = open(sys.argv[1]).read() # read the whole file into memory

    data = json.loads(jsondata)

    print "Number of posts: " + str(len(data['data']['posts']))

    for post in data['data']['posts']:
        title = post['title']
        slug = post['slug']
        content = post['markdown']
        created = datetime.datetime.fromtimestamp(post['created_at']/1000.0).strftime('%Y-%m-%d %H:%M:%S')
        filename = datetime.datetime.fromtimestamp(post['created_at']/1000.0).strftime('%Y-%m-%d') + '-' +cleantitle(title)
        writeJekyllPost(path,filename,title,created,content)

Lopputuloksena tämä blogi pyörii nyt staattisina sivuina ja generointi tapahtuu Jekyllin avulla markdown-muotoisista dokumenteista. Lokaalilla koneella jekyll tarjoaa preview minulle koko ajan preview-saittia, eli voin katsoa miltä postaukset tulevat näyttämään.

Editoinnissa käytän pääosin Sublime Text-editoria, erinomaisilla Markdown-laajennuksilla tehostettuna.

Saitin sisällön pushaan Git-repositoryyn, mistä käyttämäni internet-palvelimen cronjob käy vetämässä viimeisimmät muutokset ja ajaa saitista uuden version Apachen tarjoiltavaksi.

Nice.