SlideShare uma empresa Scribd logo
1 de 94
Baixar para ler offline
HUGOMAKE WEBDEV FUN AGAIN
Marcin Gajda
The Software House
TREND
http://example.com http://m.example.com
HISTORIA
Szukamy czegoś nowego
- Łatwy deploy
- Łatwy upgrade
- Treść rzadko aktualizowana
- Lekki
- Szybkie
- Może tańsze w utrzymaniu?
Szukamy czegoś nowego
A FAST & MODERN
STATIC WEBSITE
ENGINE
Instalacja
Instalacja
Ubuntu> sudo apt install hugo
Instalacja
Ubuntu> sudo apt install hugo
MacOS> brew install hugo
Instalacja
Ubuntu> sudo apt install hugo
MacOS> brew install hugo
Windows:
- ściągnij odpowiednie archiwum z
https://github.com/gohugoio/hugo/releases
- rozpakuj plik do folderu na dysku
- zmień nazwę pliku wykonywalnego na hugo.exe
- dodaj hugo.exe do PATH w zmiennych środowiskowych
NOWY PROJEKT
Zakładanie nowego projektu
> hugo new site uszanowanko
Congratulations! Your new Hugo site
is created in /projects/uszanowanko.
[more]
Zakładanie nowego projektu
> tree
Zakładanie nowego projektu
> tree
.
├── archetypes
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes
Zakładanie nowego projektu
> tree
.
├── archetypes
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes Nasz CSS, JavaScript, obrazki
Pliki JSON, YAML, TOML
Dodatkowe szablony
Pobrane motywy
Wzorce postów
Strony, post, etc
TREŚĆ
Tworzenie nowych stron
> hugo new localization.md
Tworzenie nowych stron
> hugo new localization.md
/projects/uszanowanko/content/localization.md created
Tworzenie nowych stron
> hugo new lecture/hugo.md
Tworzenie nowych stron
> hugo new lecture/hugo.md
typ wpisu nazwa pliku
Tworzenie nowych stron
> hugo new lecture/hugo.md
/projects/uszanowanko/content/lecture/hugo.md created
Tworzenie nowych stron
> tree content
Tworzenie nowych stron
> tree content
content
├── lecture
│ └── hugo.md
└── localization.md
Tworzenie nowych stron
> tree content
content
├── lecture
│ └── hugo.md
└── localization.md
FRONT MATTER
lectures/hugo.md
+++
date = "2017-06-19T14:06:54+02:00"
title = "hugo"
draft = true
+++
lectures/hugo.md
+++
date = "2017-06-19T14:06:54+02:00"
title = "hugo"
draft = true
+++
front matter
treść w
markdown
lectures/hugo.md
+++
date = "2017-06-19T14:06:54+02:00"
title = "hugo"
draft = true
+++
front matter
# Abstrakt
Nowe *potężne* narzędzia do
tworzenia _stron internetowych_
pojawiają się codziennie. My
jednak postanowiliśmy _cofnąć się
o krok_ i postawić na to co
proste. Efekt?
+ korzyści dla zespołu
+ korzyści dla klienta
treść w
markdown
Front matter w TOML
+++
date = "2017-06-19T14:06:54+02:00"
title = "hugo"
draft = true
+++
Front matter w JSON
{
date: "2017-06-19T14:06:54+02:00"
title: "hugo"
draft: true
}
Front matter w YAML
---
date: "2017-06-19T14:06:54+02:00"
title: hugo
draft: true
---
Front matter w YAML
---
date: "2017-06-19T14:06:54+02:00"
title: Hugo - make webdev fun again!
draft: true
slug: hugo-static-website-engine
aliases:
- /2017/06/hugo-make-webdev-fun-again
speaker: Marcin Gajda
time: 60min
---
Front matter w YAML
---
date: "2017-06-19T14:06:54+02:00"
title: Hugo - make webdev fun again!
draft: true
slug: hugo-static-website-engine
aliases:
- /2017/06/hugo-make-webdev-fun-again
speaker: Marcin Gajda
time: 60min
---
http://uszanowanko.pl/lectures/hugo-static-website-engine
ARCHETYPY
archetypes/lecture.md
---
speaker: Speaker name
time: time in minutes
---
Wpisu z archetypu
> hugo new lecture/grid.md
Wpisu z archetypu
> hugo new lecture/grid.md
/projects/uszanowanko/content/lecture/grid.md created
Wpisu z archetypu
> hugo new lecture/grid.md
/projects/uszanowanko/content/lecture/grid.md created
> cat content/lecture/grid.md
Wpisu z archetypu
> hugo new lecture/grid.md
/projects/uszanowanko/content/lecture/grid.md created
> cat content/lecture/grid.md
---
date: 2017-06-19T16:48:32+02:00
title: grid
time: time in minutes
speaker: Speaker name
---
MOTYW
Tworzenie motywu
> hugo new theme doge
Tworzenie motywu
themes/doge
├── LICENSE.md
├── archetypes
│ └── default.md
├── layouts
│ ├── 404.html
│ ├── _default
│ │ ├── list.html
│ │ └── single.html
│ ├── index.html
│ └── partials
│ ├── footer.html
│ └── header.html
├── static
│ ├── css
│ └── js
└── theme.toml
Systemy szablonów
- Go templates
- Ace templates
- Amber templates
Szablony GO
{{ partial "header.html" . }}
<section>
<h1>{{ .Title }}</h1>
<div>
<article>
{{ .Content }}
</article>
<aside>
Prezenter {{ .Params.speaker }} <br>
Czas trwania {{ .Params.time }}
</aside>
</div>
</section>
{{ partial "footer.html" . }}
Co jest wbudowane w HUGO i Szablony GO?
- dziesiątki filtrów i funkcji
- warunki, iteratory, magazyn danych
- bloki i “partiale”
- generowanie linków
- taksonomie
- paginacja
- tworzenie menu nawigacyjnego
- kanał RSS
- komentarze Disqus
- informacje o repozytorium GIT
- generowanie robots.txt
a także…
WIELOJĘZYCZNOŚĆ
config.yml
defaultContentLanguage: pl
enableMissingTranslationPlaceholders: true
defaultContentLanguageInSubdir: true
languages:
pl:
title: Strona internetowa Uszanowanka!
en:
title: WOW, such programming, very agile!
Wielojęzyczne posty
content
├── localization.en.md
├── localization.pl.md
└── lectures
├── grid.en.md
├── grid.pl.md
├── hugo.en.md
└── hugo.pl.md
DODATKOWE
ŹRÓDŁA
DANYCH
Wczytywanie z JSON, YAML, TOML
data/meetupjs/FrontemDoDeva.json
{{ range $.Site.Data.meetupjs.FrontemDoDeva.participants }}
<li>{{ .fullName }}</li>
{{ end }}
JSON lub CSV z zewnątrz
<div>
{{ $data := getJSON "http://weather.tld/gliwice.json" }}
{{ partial “weather.html” (index $data $meetupDay)}}
</div>
Listowanie folderu
{{ $files := readDir “/static/slides” }}
{{ range $files }}
<img src=”/slides/{{ .Name | relURL }}” />
{{ end }}
WYJŚCIE
Wbudowane formaty wyjściowe
- HTML
- AMP
- Calendar
- RSS
- JSON
- CSV
- CSS
Własny format wyjściowy
outputFormats:
epubFormat
mediaType text/html
baseName: epub
isPlainText: true
Path: epub
Własny format wyjściowy
outputFormats:
epubFormat
mediaType text/html
baseName: epub
isPlainText: true
Path: epub ---
outputs:
- html
- epub
---
WYSZUKIWARKA
Lunr.js
+ Indeks to zwykła tablica JS z treścią
+ Istnieją generatory indeksów
- Wymaga załadowania całego indeksu do przeglądarki
- Trzeba zaprogramować wyświetlanie wyników w JS
hugoidx (Bleve)
+ Szybsze przeszukiwanie
+ Żądanie AJAX będzie zwracać tylko wyniki
- Wymaga backendu do uruchomienia Bleve
- Wymaga znajomości środowiska GO
- Trzeba zaprogramować wyświetlanie wyników w JS
GENEROWANIE
Generowanie strony
> hugo
> hugo --buildDrafts
Wygenerowana strona
public
├── css
├── en
│ ├── index.html
│ ├── index.xml
│ ├── lecture
│ │ ├── grid
│ │ │ └── index.html
│ │ ├── hugo
│ │ │ └── index.html
│ │ ├── index.html
│ │ └── index.xml
│ ├── localization
│ │ └── index.html
│ └── sitemap.xml
├── index.html
├── js
├── pl
...
└── sitemap.xml
Tryb developerski
> hugo server
> hugo server --buildDrafts
Tryb developerski
> hugo server
> hugo server --buildDrafts
LiveReload
WDROŻENIE
WDROŻENIE
deploy
Jak to wygląda u nas?
- Korzystamy z BitBucket Pipelines
- Generujemy konfigurację z użyciem confd
- Generujemy stronę z HUGO
- Czyścimy bucket na AWS S3
- Wysyłamy nowe pliki na AWS S3
- Gotowe
Ewentualnie...
> hugo server --baseURL=http://example.com/ 
--port=80 
--appendPort=false 
--disableLiveReload=true 
--bind=87.245.198.50
Co zyskaliśmy?
- Łatwość modyfikacji
Co zyskaliśmy?
- Łatwość modyfikacji
- Oszczędność z powodu możliwości użycia S3
Co zyskaliśmy?
- Łatwość modyfikacji
- Oszczędność z powodu możliwości użycia S3
- Szybkość działania
Szybkość?
Szybkość?
2.61s
Szybkość?
2.61s
0.93s
https://next.smashingmagazine.com/
Pytania?
@marcingajda91

Mais conteúdo relacionado

Mais procurados

Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!The Software House
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)Piotr Pelczar
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Devbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracyDevbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracyMarek Bleschke
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptJacek Okrojek
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Tomasz Dziuda
 

Mais procurados (20)

Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!Service workers - bądź online, nawet kiedy jesteś offline!
Service workers - bądź online, nawet kiedy jesteś offline!
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Devbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracyDevbox - wirtualne środowisko pracy
Devbox - wirtualne środowisko pracy
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Torquebox
TorqueboxTorquebox
Torquebox
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 

Semelhante a Hugo - make webdev fun again

WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceDawid Urbański
 
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontendFuture Processing
 
Za darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp WrocławZa darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp WrocławTomasz Dziuda
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 

Semelhante a Hugo - make webdev fun again (6)

WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend
[FDD 2017] Łukasz Kokoszka - Case study: pluginable frontend
 
Za darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp WrocławZa darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp Wrocław
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 

Mais de Marcin Gajda

CSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceCSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceMarcin Gajda
 
Worklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościWorklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościMarcin Gajda
 
Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Marcin Gajda
 
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekMarcin Gajda
 
Angular Restmod (english version)
Angular Restmod (english version)Angular Restmod (english version)
Angular Restmod (english version)Marcin Gajda
 

Mais de Marcin Gajda (6)

CSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarceCSS Houdini – niskopoziomowe programowanie w przeglądarce
CSS Houdini – niskopoziomowe programowanie w przeglądarce
 
Worklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłościWorklety i magiczne interfejsy z przyszłości
Worklety i magiczne interfejsy z przyszłości
 
Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?Czym jest webpack i dlaczego chcesz go używać?
Czym jest webpack i dlaczego chcesz go używać?
 
Flexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełekFlexbox - rewolucja w świecie pudełek
Flexbox - rewolucja w świecie pudełek
 
Angular Restmod (english version)
Angular Restmod (english version)Angular Restmod (english version)
Angular Restmod (english version)
 
Angular Restmod
Angular RestmodAngular Restmod
Angular Restmod
 

Hugo - make webdev fun again