Είναι σχετικά εύκολο να δημιουργήσουμε ένα στατικό blog, σαν αυτό που βλέπουμε εδώ. Αυτό που χρειαζόμαστε είναι βασικές γνώσεις Linux και χρήσης τερματικού, ένα λογαριασμό στο GitHub και δυο αποθετήρια. Το ένα θα φιλοξενεί τα source files του blog και το άλλο τα public files, εκείνα που γίνονται renderend όταν τρέξουμε τη κατάλληλη εντολή (θα δούμε παρακάτω).

Εγκατάσταση πακέτων

:~# apt-get install git
:~# apt-get install hugo

Hugo Basics

Δημιουργία site

hugo new site my-site
cd my-site && ls

Λήψη και εγκατάσταση ενός theme

cd themes
git clone https://github.com/budparr/gohugo-theme-ananke.git

Λήψη όλων των διαθέσιμων themes

cd themes
git clone --depth 1 --recursive https://github.com/gohugoio/hugoThemes.git

Preview ενός theme

hugo server -t gohugo-theme-ananke

και βλέπουμε το site μας ζωνταντό στο http://localhost:1313/

Χρήση ενός theme

echo 'theme= "gohugo-theme-ananke"' >> config.toml

Δημιουργία Post

hugo new posts/about.md

Post editing

Εδώ επιλέγουμε έναν markdown editor της αρεσκείας μας και ανοίγουμε το αρχείο (about.md), γράφουμε ότι θέλουμε και αποθηκεύουμε.

Post preview

hugo server -D

config.toml (example)

Δίνουμε ιδιαίτερη σημασία στο baseURL

contentDir = "content"
languageCode = "en-us, el-gr"
buildDrafts = false
baseURL = "https://initctl.github.io/"
title = "initctl"
theme= "gohugo-theme-ananke"

MetaDataFormat = "yaml"
DefaultContentLanguage = "en"
SectionPagesMenu = "main"
Paginate = 3

[taxonomies]
category = "articles"

[params]
  author = "initctl"
  facebook = "https://facebook.com/jonh.ripper.507" 
  github = "https://github.com/initctl"
  recent_posts_number = 3

Post (example)

---
title: "Deploy Hugo" # αυτόματη εισαγωγή βασισμένη στο όνομα αρχείου md
featured_image: '/images/gohugo-default-sample-hero-image.jpg'# χειροκίνητη εισαγωγή
description: "Πως δημιουργούμε ένα site σαν αυτό." # χειροκίνητη εισαγωγή
language: "el" # χειροκίνητη εισαγωγή
date: 2018-01-21T18:26:23-05:00 # αυτόματη εισαγωγή
draft: true # αυτόματη εισαγωγή. Γι' αυτό παρακάτω δίνουμε -D για να κάνει rendered και τα Drafts
---

Hugo on GitHub

Δημιουργούμε έναν λογαριασμό στο GitHub. Προσοχή στο όνομα, αυτό είναι και το όνομα που θα πάρει το site μας και δεν αλλάζει. Αν έχουμε ήδη λογαριασμό και δεν μας αρέσει το όνομα, τότε ή δημιουργούμε άλλο, ή δημιουργούμε ένα organization. Το GitHub επιτρέπει δημιουργία σελίδων (Github Pages) και με τη χρήση αποθετηρίου ενός Organization.

  1. Δημιουργούμε ένα αποθετήριο για τα source files του blog μας. Ας το ονομάσουμε blog.
  2. Δημιουργούμε ένα αποθετήριο το οποίο θα έχει απαραιτήτως το όνομα: USERNAME.github.io

Τα αποθετήρια τα κάνουμε initialize τουλάχιστον με ένα readme.md. Ένα κλικ στο github είναι.

Στον υπολογιστή μας:

git clone git@github.com:USERNAME/blog.git && cd blog

Φτιάχνουμε το site όπως θέλουμε και τις δημοσιεύσεις μας επίσης. Themes, posts, config.toml κλπ.
Δοκιμάζουμε:

hugo server -D

Όταν είμαστε εντάξει διαγράφουμε τον κατάλογο public , εάν υπάρχει.

rm public/ -rf

Σε αυτό το βήμα θα κάνουμε το εξής. Θα συνδέσουμε το άλλο αποθετήριο (εκείνο με το όνομα του site μας) στο υπάρχον αποθετήριο (blog) κάτω από τον κατάλογο public, αυτόν που διαγράψαμε πρίν.
Γι’ αυτό τον διαγράψαμε, για να τον δημιουργήσουμε ξανά αλλά αυτή τη φορά συνδεδεμένο με τη σελίδα μας, GitHub Page.

git submodule add -b master git@github.com:<USERNAME>/<USERNAME>.github.io.git public

Τώρα κάθε φορά που θα τρέχουμε την εντολή hugo θα κάνει rendered και populate τα αρχεία στον κατάλογο public ο οποίος έχει ως master το αποθετήριο της GitHub Page. Καλό;
Έπειτα για να δημοσιεύσουμε τις αλλαγές μπαίνουμε πρώτα στον public και δίνουμε:

git add --all && git commit -m "rebuilding site" 
git push

Μετά στον αρχικό κατάλογο (blog) δημοσιεύουμε κι εκεί τις αλλαγές με:

git add --all && git commit -m "rebuilding site" 
git push

Τρέχουμε δηλαδή το ίδιο σετάκι εντολών δυο φορές. Μια στον public και μιά στον ριζικό (ένα κατάλογο επάνω)

Συμβουλή

Τα themes και οι ρυθμίσεις στο hugo είναι ατελείωτες. Βρίσκουμε ένα που μας αρέσει και δημιουργούμε περιεχόμενο, όχι ομορφιά μόνο.

References

  1. https://gohugo.io/about
  2. https://pages.github.com
  3. http://themes.gohugo.io