Afficher/cacher Sommaire
Jekyll est un générateur de sites statiques (Static Site Generators - SSG) open source gratuit qui s’appuie sur le langage de programmation Ruby.
Site statique
Ruby
Cela vous permettra d’utiliser la dernière version de rbenv sans avoir besoin d’une installation sur l’ensemble du système.
Clonez rbenv dans ~/.rbenv.
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Ajouter eval "$(rbenv init -)"
à la fin du fichier ~/.bashrc
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init - --no-rehash bash)"' >> ~/.bashrc
source ~/.bashrc
rbenv peut être étendu via un système de plugins, et le wiki de rbenv inclut une liste de plugins utiles. Le plugin ruby-build est particulièrement utile, car il vous permet d’installer des versions de Ruby avec la commande rbenv install. Vous pouvez installer ruby-build depuis l’AUR.
yay -S ruby-build
Les versions
rbenv install -l
3.0.6
3.1.4
3.2.2
jruby-9.4.2.0
mruby-3.2.0
picoruby-3.0.0
truffleruby-22.3.1
truffleruby+graalvm-22.3.1
Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
Ne pas installer de version ruby 3.2.x et + car incompatible avec Jekyll
On installe la 3.1.4
rbenv install 3.1.4
Patienter quelques minutes…
==> Installed ruby-3.1.4 to /home/yann/.rbenv/versions/3.1.4
NOTE: to activate this Ruby version as the new default, run: rbenv global 3.1.4
Activation
rbenv global 3.1.4
Jekyll
Tutoriel Jekyll : Comment créer un site web statique
Évitez d’installer les paquets RubyGems (appelés gems) en tant qu’utilisateur root. A la place, mettez en place un répertoire d’installation des gems pour votre compte utilisateur. Les commandes suivantes ajouteront des variables d’environnement à votre fichier ~/.bashrc pour configurer le chemin d’installation des gems
echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Enfin, installez Jekyll et Bundler :
gem install jekyll bundler
Vérification
jekyll -v
jekyll 4.3.3
yannstatic
Se positionner dans le dossier
cd ~/media/yannstatic
Le fichier _config.yml
(Afficher/Cacher) _config.yml
Le fichier Gemfile
source "https://rubygems.org"
# gem "github-pages", group: :jekyll_plugins
gem "jekyll-text-theme"
gem "html-pipeline"
gem "sass-embedded", "1.76.0"
Supprimer , si existant, le fichier Gemfile.lock
Bundle lit le fichier Gemfile
bundle install # Patientez ...
Bundle complete! 1 Gemfile dependency, 43 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Info sur jekyll et créer un lien
bundle info jekyll
* jekyll (4.3.3)
Summary: A simple, blog aware, static site generator.
Homepage: https://jekyllrb.com
Source Code: https://github.com/jekyll/jekyll
Changelog: https://github.com/jekyll/jekyll/releases
Bug Tracker: https://github.com/jekyll/jekyll/issues
Path: /home/yann/gems/gems/jekyll-4.3.3
Reverse Dependencies:
jekyll-feed (0.17.0) depends on jekyll (>= 3.7, < 5.0)
jekyll-sitemap (1.4.0) depends on jekyll (>= 3.7, < 5.0)
jekyll-text-theme (2.2.6) depends on jekyll (>= 3.6, < 5.0)
jemoji (0.13.0) depends on jekyll (>= 3.0, < 5.0)
Création des liens sur les dossiers files , images , _posts et htmldoc
ln -s $HOME/media/statique/images $HOME/media/yannstatic/images
ln -s $HOME/media/statique/files $HOME/media/yannstatic/files
ln -s $HOME/media/statique/_posts $HOME/media/yannstatic/_posts
ln -s $HOME/media/statique/htmldoc $HOME/media/yannstatic/htmldoc
ln -s $HOME/media/statique/htmldoc/htmldoc.md $HOME/media/yannstatic/htmldoc.md
La structure des liens
[yann@yann-eos yannstatic]$ ls -l /home/yann/media/yannstatic/ |grep ^l
lrwxrwxrwx 1 yann yann 31 31 mai 16:43 files -> /home/yann/media/statique/files
lrwxrwxrwx 1 yann yann 33 31 mai 16:43 htmldoc -> /home/yann/media/statique/htmldoc
lrwxrwxrwx 1 yann yann 44 31 mai 16:53 htmldoc.md -> /home/yann/media/statique/htmldoc/htmldoc.md
lrwxrwxrwx 1 yann yann 32 31 mai 16:43 images -> /home/yann/media/statique/images
lrwxrwxrwx 1 yann yann 32 31 mai 16:43 _posts -> /home/yann/media/statique/_posts
Génération dossier “static”
Création du dossier static , par défaut c’est _site
cd ~/media/yannstatic
bundle exec jekyll build --source "/srv/media/yannstatic" --destination "/srv/media/yannstatic/static"
Configuration file: /srv/media/yannstatic/_config.yml
Source: /srv/media/yannstatic
Destination: /srv/media/yannstatic/static
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 16.146 seconds.
Auto-regeneration: disabled. Use --watch to enable.
Service yannstatic
On veut générer un dossier nommé 'static'
PATH Jekyll : which bundle
→ /home/yann/gems/bin/bundle
Pour lancer le serveur yannstatic au démarrage, utilisation d’un service systemd utilisateur
Les variables environnement, générer le fichier
env > env_file
Création d’un service utilisateur “yannstatic” sous systemd
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/yannstatic.service
Contenu du fichier yannstatic.service
[Unit]
Description=service yannstatic
[Service]
EnvironmentFile=/srv/media/yannstatic/env_file
WorkingDirectory=/srv/media/yannstatic
ExecStart=/home/yann/gems/bin/bundle exec jekyll build --watch --incremental --source "/srv/media/yannstatic" --destination "/srv/media/yannstatic/static"
Restart=on-abort
[Install]
WantedBy=default.target
Lancer le service yannstatic :
systemctl --user daemon-reload
systemctl --user start yannstatic
Vérifier
systemctl --user status yannstatic
● yannstatic.service - service yannstatic
Loaded: loaded (/home/yann/.config/systemd/user/yannstatic.service; disabled; preset: enabled)
Active: active (running) since Sat 2024-07-13 17:41:11 CEST; 5s ago
Invocation: 3ca89242aa6c4c3ab221b4f44a7d9cc1
Main PID: 116020 (bundle)
Tasks: 1 (limit: 38321)
Memory: 144.2M (peak: 144.2M)
CPU: 5.638s
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/yannstatic.service
└─116020 "/home/yann/gems/bin/jekyll build --watch --incremental --source /srv/media/yannstatic --destination /srv/media/yannstatic/static"
juil. 13 17:41:11 yann-pc1 systemd[1798]: Started service yannstatic.
juil. 13 17:41:12 yann-pc1 bundle[116020]: Configuration file: /srv/media/yannstatic/_config.yml
juil. 13 17:41:12 yann-pc1 bundle[116020]: Source: /srv/media/yannstatic
juil. 13 17:41:12 yann-pc1 bundle[116020]: Destination: /srv/media/yannstatic/static
juil. 13 17:41:12 yann-pc1 bundle[116020]: Incremental build: enabled
juil. 13 17:41:12 yann-pc1 bundle[116020]: Generating...
juil. 13 17:41:12 yann-pc1 bundle[116020]: Jekyll Feed: Generating feed for posts
Activation
systemctl --user enable yannstatic
dire à systemd que l’instance d’un utilisateur soit tout le temps présente, du boot au shutdown, ce qui permet d’avoir des processus (services) utilisateurs qui tournent sans avoir de session ouverte.
sudo loginctl enable-linger $USER
Pour observer le fonctionnement du service yannstatic depuis la machine virtuelle debian
journalctl -f --user-unit yannstatic.service
juil. 13 17:41:11 yann-pc1 systemd[1798]: Started service yannstatic.
juil. 13 17:41:12 yann-pc1 bundle[116020]: Configuration file: /srv/media/yannstatic/_config.yml
juil. 13 17:41:12 yann-pc1 bundle[116020]: Source: /srv/media/yannstatic
juil. 13 17:41:12 yann-pc1 bundle[116020]: Destination: /srv/media/yannstatic/static
juil. 13 17:41:12 yann-pc1 bundle[116020]: Incremental build: enabled
juil. 13 17:41:12 yann-pc1 bundle[116020]: Generating...
juil. 13 17:41:12 yann-pc1 bundle[116020]: Jekyll Feed: Generating feed for posts
juil. 13 17:41:38 yann-pc1 bundle[116020]: done in 26.125 seconds.
juil. 13 17:41:38 yann-pc1 bundle[116020]: Auto-regeneration: enabled for '/srv/media/yannstatic'
En cas de modification
juil. 13 17:48:26 yann-pc1 bundle[116020]: Regenerating: 1 file(s) changed at 2024-07-13 17:48:26
juil. 13 17:48:26 yann-pc1 bundle[116020]: _posts/2024-07-13-Archlinux_Ruby_Jekyll_site_statique.md
juil. 13 17:48:27 yann-pc1 bundle[116020]: Jekyll Feed: Generating feed for posts
juil. 13 17:48:27 yann-pc1 bundle[116020]: ...done in 1.328452554 seconds.
juil. 13 17:48:27 yann-pc1 bundle[116020]:
Synchro serveur dossier “static”
Le but est de synchroniser le dossier ~/media/yannstatic/static avec le(s) serveur(s) web distant(s)
A chaque création, modification ou suppression d’un POST mardown le sous-dossier static/ est reconstruit (jekyll build
)
Avec les unités de chemin, vous pouvez surveiller les fichiers et les répertoires pour certains événements. Si un événement spécifique se produit, une unité de service est exécutée, et elle porte généralement le même nom que l’unité de chemin
Nous allons surveiller dansle dossier /srv/media/statique/_posts/ toute modification du fichier sitemap.xml qui entrainera l’exécution d’un script
Dans le répertoire systemd utilisateur nous créons une unité de cheminement media_yannstatic_site.path
nano ~/.config/systemd/user/media_yannstatic_site.path
[Unit]
Description=Surveiller sitemap.xml pour les changements
[Path]
PathChanged=/home/yann/media/yannstatic/static/sitemap.xml
Unit=media_yannstatic_site.service
[Install]
WantedBy=default.target
Dans la section [Path]
, PathChanged=
indique le chemin absolu du fichier à surveiller, tandis que Unit=
indique l’unité de service à exécuter si le fichier change. Cette unité (media_yannstatic_site.path) doit être lancée lorsque le système est en mode multi-utilisateur.
Ensuite, nous créons l’unité de service correspondante, media_yannstatic_site.service, dans le répertoire ~/.config/systemd/user/
Si le fichier sitemap.xml change (c’est-à-dire qu’il est à la fois écrit et fermé), l’unité de service suivante sera appelée pour exécuter le script spécifié :
nano ~/.config/systemd/user/media_yannstatic_site.service
[Unit]
Description="Exécute le script si site.xml a été modifié."
[Service]
ExecStart=/home/yann/scripts/media_yannstatic_site.sh
Le script media_yannstatic_site.sh
lance une synchronisation locale distante via rsync ssh
Etendre Réduire media_yannstatic_site.sh
Activation et lancement
systemctl --user enable media_yannstatic_site.path
systemctl --user start media_yannstatic_site.path
Voir le fichier journal
journalctl --user -f -u media_yannstatic_site.service
juil. 13 17:49:56 yann-pc1 media_yannstatic_site.sh[116480]: ***DEPART*** Exécution script /home/yann/scripts/media_yannstatic_site.sh
juil. 13 17:49:56 yann-pc1 yannstatic[116483]: ***DEPART*** Exécution script /home/yann/scripts/media_yannstatic_site.sh
juil. 13 17:49:56 yann-pc1 media_yannstatic_site.sh[116480]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55249 -i /home/yann/.ssh/xoyize-ed25519" /home/yann/media/yannstatic/static yako@xoyize.xyz:/home/yunohost.multimedia/share/Divers/
juil. 13 17:49:57 yann-pc1 media_yannstatic_site.sh[116480]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 23 -i /home/yann/.ssh/bx11-yann-ed25519" /home/yann/media/yannstatic/static u326239@u326239.your-storagebox.de:backup/datayan/Divers/
juil. 13 17:49:58 yann-pc1 media_yannstatic_site.sh[116480]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55215 -i /home/yann/.ssh/lenovo-ed25519" /home/yann/media/yannstatic/static leno@192.168.0.215:/sharenfs/multimedia/Divers/
juil. 13 17:49:59 yann-pc1 media_yannstatic_site.sh[116480]: ***FIN*** /home/yann/scripts/media_yannstatic_site.sh exécuté en 0 mn 3 s
On peut créer un accès graphique sur le poste archlinux
~/.local/share/applications/suivi_yannstatic_site.desktop
[Desktop Entry]
Version=1.1
Type=Application
Name=Synchro modification site
Comment=suivi_yannstatic_site.sh
Icon=xterm-color_48x48
Exec=xterm -rv -geometry 290x40+100+150 -T suivi_yannstatic_site -e '/home/yann/scripts/suivi_yannstatic_site.sh'
Actions=
Categories=Utility;
Path=
Terminal=false
StartupNotify=false
Le script
~/scripts/suivi_yannstatic_site.sh
#!/bin/bash
# COLUMNSxROWS+X+Y -> xterm -geometry 400x200+100+350
# xterm -rv -geometry 150x40+100+150 -T suivi_yannstatic_site -e '/home/yann/scripts/suivi_yannstatic_site.sh'
# On supprime la session "lxcSess" si existante
if [[ `tmux list-sessions | grep 'lxcSess' | wc -l` != 0 ]]
then
# On ferme la session active
tmux kill-session -t lxcSess
fi
# Créer une bannière dans /etc/motd sur chaque serveur
# Nom du domaine en ascii voir lien http://patorjk.com/software/taag/#p=display&h=1&f=Small
echo "fin fi"
# Créer session + terminal
tmux new -d -s lxcSess -n lxcTerm
# Séparation horizontale en 2 du terminal
tmux split-window -v -p 50
# | 0 |
# | |
# |-----------|
# | 1 |
# | |
# Sélection terminal HAUT
tmux selectp -t 0
#
tmux send-keys -t lxcSess "journalctl --user -f -u yannstatic.service" C-m
# Sélection terminal BAS
tmux selectp -t 1
#
tmux send-keys -t lxcSess "journalctl --user -f -u media_yannstatic_site.service" C-m
# Afficher la session
tmux a -t lxcSess
#
# Tuer la session
# tmux kill-session -t lxcSess
Le rendre exécutable
chmod +x scripts/suivi_yannstatic_site.sh
Aperçu…