Είναι σχετικά εύκολο να δημιουργήσουμε ένα στατικό blog, σαν αυτό που βλέπουμε εδώ. Αυτό που χρειαζόμαστε είναι βασικές γνώσεις Linux και χρήσης τερματικού, ένα λογαριασμό στο GitHub και δυο αποθετήρια. Το ένα θα φιλοξενεί τα source files του blog και το άλλο τα public files, εκείνα που γίνονται renderend όταν τρέξουμε τη κατάλληλη εντολή (θα δούμε παρακάτω).
- Ημερομηνία: 22 Ιανουαρίου 2018
- Λειτουργικό Σύστημα: Debian
- Έκδοση: 10 (Buster)
Εγκατάσταση πακέτων
:~# 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.
- Δημιουργούμε ένα αποθετήριο για τα source files του blog μας. Ας το ονομάσουμε blog.
- Δημιουργούμε ένα αποθετήριο το οποίο θα έχει απαραιτήτως το όνομα: 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 είναι ατελείωτες. Βρίσκουμε ένα που μας αρέσει και δημιουργούμε περιεχόμενο, όχι ομορφιά μόνο.