Grav logo

Grav je pokročilý redakční systém pro koncové uživatele, kterým vadí nabobtnalé redakční systémy jako jsou WordPress, Joomla a Drupal. Výhodou oproti ostaním je absence Databáze, používá dobře známou markdown syntaxi podobně jako MkDocs.

Hladní nastavení GRAV před spuštěním je v souboru /www/hosting/rcube.cz/wiki/user/config/site.yaml:

title: wiki.rcube.cz
default_lang: en
author:
  name: 'Zdenek Sobotka'
  email: zden2k.sobotka@gmail.com
taxonomies:
  - category
  - tag
metadata:
  description: 'Linux'
summary:
  enabled: true
  format: short
  size: 300
  delimiter: '==='
redirects: null
routes: null
blog:
  route: /blog
siteurl: wiki.rcube.cz

Nepoužívám git-sync plugin, vyřešil jsem to cronem a git pull pod uživatelem www-data z cronu:

usermod -d /home/www-data www-data
sudo -u www-data /usr/bin/ssh-keygen -t ecdsa -b 521 -f /home/www-data/.ssh/id_ecdsa
crontab -e
    */1 * * * *  su -s /bin/bash www-data -c 'cd /www/hosting/rcube.cz/wiki/user/pages && /usr/bin/git pull -q &> /dev/null'

Asi nejjednodušší možnost jak lokálně stáhnout repozitář je přes https. V Gitea se vytvoří Personal Access Token. Přihlašení se do Gitea webu jako uživatel (např. zden2k). Vpravo nahoře na Settings → Applications. V sekci Manage Access Tokens kliknout na Generate Token. Dat mu jméno (např. wiki-pull) a zaškrtnout oprávnění read:repository (stačí na git pull). Nastavit remote repozitar, ale lokálně:

root@vps-3b9787ee:/var/www/wiki.n0ip.eu/user/pages# git remote -v
origin  https://zden2k:<TOKEN>@gitea.n0ip.eu/zden2k/wiki.git (fetch)
origin  https://zden2k:<TOKEN>@gitea.n0ip.eu/zden2k/wiki.git (push)

Vytvořit bash skript, ktery to bude lokálně fetchovat:

root@vps-3b9787ee:/var/www/wiki.n0ip.eu/user/pages# cat /usr/local/gitea.sh
#!/bin/bash
cd /var/www/wiki.n0ip.eu/user/pages || exit 1
git fetch origin
git reset --hard origin/main
git clean -fdx
chown www-data:www-data -R /var/www/wiki.n0ip.eu/

Pak ho přidat do cronu:

root@vps-3b9787ee:/var/www/wiki.n0ip.eu/user/pages# cat /etc/cron.d/grav
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root bash /usr/local/gitea.sh && chown www-data:www-data -R /var/www/wiki.n0ip.eu/ &> /dev/null

Plugin do GRAV pro spouštění automatizovaných úloh. Instalace:

cd /www/hosting/rcube.cz/wiki; sudo -u www-data bin/gpm install scheduler
crontab -e
    */5 * * * *  su -s /bin/bash www-data -c 'cd /www/hosting/rcube.cz/wiki; bin/grav scheduler &> /dev/null'

Manuální spuštění:

cd /www/hosting/rcube.cz/wiki; sudo -u www-data bin/grav scheduler -v
cd /www/hosting/rcube.cz/wiki; sudo -u www-data bin/grav scheduler -i

Zobrazení naplánovaných úloh:

cd /www/hosting/rcube.cz/wiki; sudo -u www-data bin/grav scheduler -j

Scheduler Jobs Listing
======================

┌─────────────────────┬────────────────────────────────────┬───────────┬─────────┬──────────────────┬─────────┐
│ Job ID              │ Command                            │ Run At    │ Status  │ Last Run         │ State   │
├─────────────────────┼────────────────────────────────────┼───────────┼─────────┼──────────────────┼─────────┤
│ tntsearch-index     │ bin/plugin                         │ * * * * * │ Success │ 2023-05-26 14:41 │ Enabled │
│ default-site-backup │ Grav\Common\Backup\Backups::backup │ 0 3 * * * │ Ready   │ Never            │ Enabled │
│ cache-purge         │ Grav\Common\Cache::purgeJob        │ 0 4 * * * │ Ready   │ Never            │ Enabled │
│ cache-clear         │ Grav\Common\Cache::clearJob        │ 0 3 * * * │ Ready   │ Never            │ Enabled │
└─────────────────────┴────────────────────────────────────┴───────────┴─────────┴──────────────────┴─────────┘

 ! [NOTE] For error details run "bin/grav scheduler -d" 

Zarnovnání obrázku v Grav je trochu složitější, nenašel jsem lehčí způsob než je úprava změnou .css. V základním souboru stránky default.md přidáme markdown extra:

---
markdown:
    extra: true
---
![Tux Crusader](tux.png?resize=625&brightness=+45){.center}

Do /user/themes/quark/css/custom.css přidat:

.center {
    display: block;
    margin: 0 auto;
}

Nebo se dá použít rozšíření Shortcode.

Pokud potřebuje človek vložit hlavičku kódu obsahující např. cestu k souboru. Css upravit takto (vysledovat, jestli jde odstranit ten boarder, je to vidět na světlém skinu):

/user/themes/quark/css/custom.css
.codehead {
        /* line break text in pre */
        display: block;
        text-overflow: ellipsis;
        word-wrap: break-word;
        overflow: hidden;
        /* end of line break */
        font-family: Consolas;
        text-indent: 6px;
        color:#DDD;
        background:#606060;
        border-top-left-radius:4px;
        border-top-right-radius:4px;
        padding: 2px 0px;
        margin-bottom: 20px ;
}

.codehead pre {
        margin-top: 1px;
        text-indent: 0px;
        margin: 0 ;
}

.codehead code {
        margin-top: 1px;
        text-indent: 0px;
        margin: 0 ;
}

Do default.md se napíše toto:

<div class="codehead">raw.py
<pre><code><pre>#!/usr/bin/env python
print()
</pre></code></pre></div>

Grav v defaultu nevykresluje moc pěkně tabulky. Našel jsem úpravu .css, jak to vylepšit:

/user/themes/quark/css/custom.css
/* Tabluky */
table:not(.table) th  {
    background: #f7f7f7;
    padding: .2rem .4rem .2rem .4rem;
    vertical-align: middle;
    border: 1px solid #eaeaea;
}
table:not(.table) td {
    padding: .2rem .4rem .2rem .4rem;
    vertical-align: middle;
    border: 1px solid #eaeaea;
}

Zapneme ještě Markdown: extra v default.md:

markdown:
    extra: true

Tabulka se vkláda s div záhlavím:

<div class="table is-hoverable is-striped" markdown="1">
| Akce | Příkaz |
|:-----|:------------|
| test | prvni radek |
</div>

Některé pluginy jako napríklad SnappyGrav, což je plugin umožňující export stránky do PDF mají závislosti, které se dají dotahat přes composer. Tento příkaz je doporučeno spouštět bez rootovských práv:

/user/plugins/snappygrav# sudo -u www-data ../../../bin/composer.phar require mpdf/mpdf

Seznam pluginů v Grav, které používám:

  • Highlight (skiny: Atom One Dark, Visual Studio 2015, Sun Burst)
  • Shortcode Core
  • SnappyGrav
  • TNT Search
  • Toc

Instalace pluginů přes consoli:

sudo -u www-data bin/gpm uninstall toc

Tntsearch potřebuje mít nacachovanou DB stránek v SQlite. Nehledá v nové přidaných stránkých, dokud se nenaindexují. Mám to nastavené automaticky z cronu:

/etc/cron.d/grav_reindex
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
30 *    * * *   www-data ( tmp=$(cd /var/www/wiki2.n0ip.cz/ ; bin/plugin tntsearch index > /dev/null) )

Do /usr/page/Search/default.md vložit následují code:

---
title: Search
body_classes: 'title-center title-h1h2'
process:
    twig: true
visible: false
---

{% include 'partials/tntsearch.html.twig' with { limit: 25, snippet: 500, min: 3, search_type: 'auto' } %}

A z /user/themes/quark/templates/partials/base.html.twig:46 ho volat:

<section class="navbar-section logo">
   <a href="/search" class="active">
   Search
   </a>
</section>

V html se člověk může potkat s html entitami. Html entita je v podstatě jiný zápis pro znak na stránce, než je běžné. Nejznámější entitou je asi tagová závorka, protože html je tagy prošpikované :). Její kód je &gt; a &lt;. Jiný kód např. pro hranatou závorku [ je &#91; a její kódový název je: &lbrack;

Html Entity

Zdroj obrázků, který by se mohly v budoucnu hodit: